diff --git a/fhem/www/frontend/CHANGED b/fhem/www/frontend/CHANGED index bb719a645..3023badb4 100644 --- a/fhem/www/frontend/CHANGED +++ b/fhem/www/frontend/CHANGED @@ -1,3 +1,10 @@ +Update vom 01.4.2013 + * Zoomen in Charts nun möglich mit aufziehbarer Box + * Erweiterung der Anzahl der möglichen Y-Achsen von 3 auf 10 + * Jede Achse kann nun mit Statistikfunktionen einzeln versehen werden + * Bibliotheksupdate auf ExtJS 4.2.0 + * Kleine Verbesserungen in der Unterstützung mobiler Geräte + * Bugfixes Update vom 23.3.2013 * Integration von Buttons und Dropdownlisten, um einzelene Geräte steuern zu können * Aktualisierung aller Geräteinformationen über kontinuierliche AJAX Requests diff --git a/fhem/www/frontend/www/frontend/app/app.js b/fhem/www/frontend/www/frontend/app/app.js index 897582662..579a66ef3 100644 --- a/fhem/www/frontend/www/frontend/app/app.js +++ b/fhem/www/frontend/www/frontend/app/app.js @@ -26,7 +26,7 @@ Ext.application({ // Gather information from FHEM to display status, devices, etc. var me = this, url = '../../../fhem?cmd=jsonlist&XHR=1'; - Ext.getBody().mask("Please wait while the Frontend is starting..."); + Ext.Ajax.request({ method: 'GET', async: false, @@ -35,6 +35,7 @@ Ext.application({ success: function(response){ Ext.getBody().unmask(); FHEM.info = Ext.decode(response.responseText); + FHEM.version = FHEM.info.Results[0].devices[0].ATTR.version; Ext.each(FHEM.info.Results, function(result) { @@ -43,10 +44,17 @@ Ext.application({ FHEM.dblogname = result.devices[0].NAME; } }); - if (!FHEM.dblogname && Ext.isEmpty(FHEM.dblogname)) { + if (!FHEM.dblogname && Ext.isEmpty(FHEM.dblogname) && FHEM.dblogname != "undefined") { Ext.Msg.alert("Error", "Could not find a DbLog Configuration. Do you have DbLog already running?"); } else { - Ext.create("FHEM.view.Viewport"); + Ext.create("FHEM.view.Viewport", { + hidden: true + }); + + //removing the loadingimage + var p = Ext.DomQuery.select('p[class=loader]')[0], + img = Ext.DomQuery.select('#loading-overlay')[0]; + p.removeChild(img); // further configuration of viewport starts in maincontroller } }, diff --git a/fhem/www/frontend/www/frontend/app/controller/ChartController.js b/fhem/www/frontend/www/frontend/app/controller/ChartController.js index 666a1bf45..4fb916b83 100644 --- a/fhem/www/frontend/www/frontend/app/controller/ChartController.js +++ b/fhem/www/frontend/www/frontend/app/controller/ChartController.js @@ -3,6 +3,15 @@ */ Ext.define('FHEM.controller.ChartController', { extend: 'Ext.app.Controller', + /** + * maxValue of Y Axis gets saved here as reference + */ + maxYValue: 0, + + /** + * minValue of Y Axis gets saved here as reference + */ + minYValue: 9999999, refs: [ { @@ -26,72 +35,8 @@ Ext.define('FHEM.controller.ChartController', { ref: 'savechartdatabtn' //this.getSavechartdatabtn() }, { - selector: 'button[name=addyaxisbtn]', - ref: 'addyaxisbtn' //this.getAddyaxisbtn() - }, - { - selector: 'button[name=addbaselinebtn]', - ref: 'addbaselinebtn' //this.getAddbaselinebtn() - }, - { - selector: 'combobox[name=devicecombo]', - ref: 'devicecombo' //this.getDevicecombo() - }, - { - selector: 'combobox[name=xaxiscombo]', - ref: 'xaxiscombo' //this.getXaxiscombo() - }, - { - selector: 'combobox[name=device2combo]', - ref: 'device2combo' //this.getDevicecombo() - }, - { - selector: 'combobox[name=y2axiscombo]', - ref: 'y2axiscombo' //this.getY2axiscombo() - }, - { - selector: 'combobox[name=device3combo]', - ref: 'device3combo' //this.getDevicecombo() - }, - { - selector: 'combobox[name=y3axiscombo]', - ref: 'y3axiscombo' //this.getY3axiscombo() - }, - { - selector: 'combobox[name=yaxiscombo]', - ref: 'yaxiscombo' //this.getYaxiscombo() - }, - { - selector: 'combobox[name=yaxisstatisticscombo]', - ref: 'yaxisstatisticscombo' //this.getYaxisstatisticscombo() - }, - { - selector: 'combobox[name=yaxiscolorcombo]', - ref: 'yaxiscolorcombo' //this.getYaxiscombo() - }, - { - selector: 'combobox[name=y2axiscolorcombo]', - ref: 'y2axiscolorcombo' //this.getYaxiscombo() - }, - { - selector: 'combobox[name=y3axiscolorcombo]', - ref: 'y3axiscolorcombo' //this.getYaxiscombo() - }, - { - selector: 'checkboxfield[name=yaxisfillcheck]', - ref: 'yaxisfillcheck' //this.getYaxiscombo() - }, - { - selector: 'checkboxfield[name=y2axisfillcheck]', - ref: 'y2axisfillcheck' //this.getYaxiscombo() - }, - { - selector: 'checkboxfield[name=y3axisfillcheck]', - ref: 'y3axisfillcheck' //this.getYaxiscombo() - }, - { - selector: 'linechartview', - ref: 'linechartview' //this.getLinechartview() + selector: 'chart', + ref: 'chart' //this.getChart() }, { selector: 'linechartpanel', @@ -104,54 +49,6 @@ Ext.define('FHEM.controller.ChartController', { { selector: 'grid[name=savedchartsgrid]', ref: 'savedchartsgrid' //this.getSavedchartsgrid() - }, - { - selector: 'numberfield[name=base1start]', - ref: 'base1start' //this.getSavedchartsgrid() - }, - { - selector: 'numberfield[name=base1end]', - ref: 'base1end' //this.getSavedchartsgrid() - }, - { - selector: 'combobox[name=baseline1colorcombo]', - ref: 'base1color' //this.getSavedchartsgrid() - }, - { - selector: 'checkboxfield[name=baseline1fillcheck]', - ref: 'base1fill' //this.getSavedchartsgrid() - }, - { - selector: 'numberfield[name=base2start]', - ref: 'base2start' //this.getSavedchartsgrid() - }, - { - selector: 'numberfield[name=base2end]', - ref: 'base2end' //this.getSavedchartsgrid() - }, - { - selector: 'combobox[name=baseline2colorcombo]', - ref: 'base2color' //this.getSavedchartsgrid() - }, - { - selector: 'checkboxfield[name=baseline2fillcheck]', - ref: 'base2fill' //this.getSavedchartsgrid() - }, - { - selector: 'numberfield[name=base3start]', - ref: 'base3start' //this.getSavedchartsgrid() - }, - { - selector: 'numberfield[name=base3end]', - ref: 'base3end' //this.getSavedchartsgrid() - }, - { - selector: 'combobox[name=baseline3colorcombo]', - ref: 'base3color' //this.getSavedchartsgrid() - }, - { - selector: 'checkboxfield[name=baseline3fillcheck]', - ref: 'base3fill' //this.getSavedchartsgrid() } ], @@ -161,15 +58,6 @@ Ext.define('FHEM.controller.ChartController', { */ init: function() { this.control({ - 'combobox[name=devicecombo]': { - select: this.deviceSelected - }, - 'combobox[name=device2combo]': { - select: this.deviceSelected - }, - 'combobox[name=device3combo]': { - select: this.deviceSelected - }, 'button[name=requestchartdata]': { click: this.requestChartData }, @@ -185,47 +73,16 @@ Ext.define('FHEM.controller.ChartController', { 'button[name=resetchartform]': { click: this.resetFormFields }, - 'linechartview': { - afterrender: this.enableZoomInChart - }, 'grid[name=savedchartsgrid]': { cellclick: this.loadsavedchart }, 'actioncolumn[name=savedchartsactioncolumn]': { click: this.deletechart } - }); }, - /** - * loads data for the readingsstore after device has been selected - */ - deviceSelected: function(combo){ - - var device = combo.getValue(), - store, - proxy; - - if (combo.name === "devicecombo") { - store = this.getYaxiscombo().getStore(), - proxy = store.getProxy(); - } else if (combo.name === "device2combo") { - store = this.getY2axiscombo().getStore(), - proxy = store.getProxy(); - } else if (combo.name === "device3combo") { - store = this.getY3axiscombo().getStore(), - proxy = store.getProxy(); - } - - if (proxy) { - proxy.url = '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+' + device + '+getreadings&XHR=1'; - store.load(); - } - - }, - /** * Triggers a request to FHEM Module to get the data from Database */ @@ -233,60 +90,72 @@ Ext.define('FHEM.controller.ChartController', { var me = this; //getting the necessary values - var device = me.getDevicecombo().getValue(), - xaxis = me.getXaxiscombo().getValue(), - yaxis = me.getYaxiscombo().getValue(), - yaxiscolorcombo = me.getYaxiscolorcombo().getValue(), - yaxisfillcheck = me.getYaxisfillcheck().checked, - yaxisstatistics = me.getYaxisstatisticscombo().getValue(), - y2device = me.getDevice2combo().getValue(), - y2axis = me.getY2axiscombo().getValue(), - y2axiscolorcombo = me.getY2axiscolorcombo().getValue(), - y2axisfillcheck= me.getY2axisfillcheck().checked, - y3device = me.getDevice3combo().getValue(), - y3axis = me.getY3axiscombo().getValue(), - y3axiscolorcombo = me.getY3axiscolorcombo().getValue(), - y3axisfillcheck = me.getY3axisfillcheck().checked, + var devices = Ext.ComponentQuery.query('combobox[name=devicecombo]'); + var xaxes = Ext.ComponentQuery.query('combobox[name=xaxiscombo]'); + var yaxes = Ext.ComponentQuery.query('combobox[name=yaxiscombo]'); + var yaxescolorcombos = Ext.ComponentQuery.query('combobox[name=yaxiscolorcombo]'); + var yaxesfillchecks = Ext.ComponentQuery.query('checkbox[name=yaxisfillcheck]'); + var yaxesstatistics = Ext.ComponentQuery.query('combobox[name=yaxisstatisticscombo]'); + + var basesstart = Ext.ComponentQuery.query('numberfield[name=basestart]'); + var basesend = Ext.ComponentQuery.query('numberfield[name=baseend]'); + var basescolors = Ext.ComponentQuery.query('combobox[name=baselinecolorcombo]'); + var basesfills = Ext.ComponentQuery.query('checkboxfield[name=baselinefillcheck]'); + + - base1start = me.getBase1start().getValue(), - base1end = me.getBase1end().getValue(), - base1color = me.getBase1color().getValue(), - base1fill = me.getBase1fill().checked, - base2start = me.getBase2start().getValue(), - base2end = me.getBase2end().getValue(), - base2color = me.getBase2color().getValue(), - base2fill = me.getBase2fill().checked, - base3start = me.getBase3start().getValue(), - base3end = me.getBase3end().getValue(), - base3color = me.getBase3color().getValue(), - base3fill = me.getBase3fill().checked, - - starttime = me.getStarttimepicker().getValue(), + var starttime = me.getStarttimepicker().getValue(), dbstarttime = Ext.Date.format(starttime, 'Y-m-d_H:i:s'), endtime = me.getEndtimepicker().getValue(), dbendtime = Ext.Date.format(endtime, 'Y-m-d_H:i:s'), dynamicradio = Ext.ComponentQuery.query('radiogroup[name=dynamictime]')[0], - generalization = Ext.ComponentQuery.query('radio[boxLabel=active]')[0], - generalizationfactor = Ext.ComponentQuery.query('combobox[name=genfactor]')[0].getValue(), - view = me.getLinechartview(), - store = me.getLinechartview().getStore(), + chartpanel = me.getLinechartpanel(), + chart = me.getChart(), + store = chart.getStore(), proxy = store.getProxy(); //cleanup store store.removeAll(); //cleanup chart - for (var i = view.series.length -1; i >= 0; i--) { - view.series.removeAt(i); + for (var i = chart.series.length -1; i >= 0; i--) { + chart.series.removeAt(i); } + //reset zoomValues + chartpanel.setLastYmax(null); + chartpanel.setLastYmin(null); + chartpanel.setLastXmax(null); + chartpanel.setLastXmin(null); + + me.maxYValue = 0; + me.minYValue = 9999999; + + //adding baseline values to max and min values of y-axis + Ext.each(basesstart, function(basestart) { + if (me.maxYValue < basestart.getValue()) { + me.maxYValue = basestart.getValue(); + } + if (me.minYValue > basestart.getValue()) { + me.minYValue = basestart.getValue(); + } + }); + Ext.each(basesend, function(baseend) { + if (me.maxYValue < baseend.getValue()) { + me.maxYValue = baseend.getValue(); + } + if (me.minYValue > baseend.getValue()) { + me.minYValue = baseend.getValue(); + } + }); + //register store listeners store.on("beforeload", function() { - me.getLinechartview().setLoading(true); + me.getChart().setLoading(true); }); //setting x-axis title - view.axes.get(1).setTitle(xaxis); + chart.axes.get(1).setTitle(xaxes[0]); //check if timerange or dynamic time should be used dynamicradio.eachBox(function(box, idx){ @@ -349,387 +218,357 @@ Ext.define('FHEM.controller.ChartController', { } }); - // set the x axis range dependent on user given timerange - view.axes.get(1).fromDate = starttime; - view.axes.get(1).toDate = endtime; - view.axes.get(1).processView(); + var i = 0; + Ext.each(yaxes, function(yaxis) { + var device = devices[i].getValue(), + xaxis = xaxes[i].getValue(), + yaxis = yaxes[i].getValue(), + yaxiscolorcombo = yaxescolorcombos[i].getValue(), + yaxisfillcheck = yaxesfillchecks[i].checked, + yaxisstatistics = yaxesstatistics[i].getValue(); + me.populateAxis(i, device, xaxis, yaxis, yaxiscolorcombo, yaxisfillcheck, yaxisstatistics, dbstarttime, dbendtime); + i++; + }); - //setup the first y series - var y1series = { - type : 'line', - axis : 'left', - xField : 'TIMESTAMP', - yField : 'VALUE', - title: yaxis, - showInLegend: true, - smooth: 0, - highlight: true, - fill: yaxisfillcheck, - style: { - fill: yaxiscolorcombo, - stroke: yaxiscolorcombo - }, - markerConfig: { - type: 'circle', - size: 3, - radius: 3, - stroke: yaxiscolorcombo - }, - tips : { - trackMouse : true, - width : 140, - height : 100, - renderer : function(storeItem, item) { - this.setTitle(' Value: : ' + storeItem.get('VALUE') + - '
Time: ' + storeItem.get('TIMESTAMP')); + //waiting for the first data arriving to add our baseline to it + store.on("load", function() { + var i = 0; + Ext.each(basesstart, function(base) { + var basestart = basesstart[i].getValue(), + baseend = basesend[i].getValue(), + basecolor = basescolors[i].getValue(), + basefill = basesfills[i].checked; + + me.createBaseLine(i + 1, basestart, baseend, basefill, basecolor); + i++; + }); + }, this, {single: true}); + }, + + /** + * creating baselines + */ + createBaseLine: function(index, basestart, baseend, basefill, basecolor) { + + var me = this, + chart = me.getChart(), + store = chart.getStore(), + yfield = "VALUEBASE" + index; + + if (!Ext.isEmpty(basestart) && basestart != "null") { + var baseline = { + type : 'line', + name: 'baseline', + axis : 'left', + xField : 'TIMESTAMP', + yField : yfield, + showInLegend: false, + highlight: true, + fill: basefill, + style: { + fill : basecolor, + 'stroke-width': 3, + stroke: basecolor + }, + tips : { + trackMouse : true, + width : 140, + height : 100, + renderer : function(storeItem, item) { + this.setTitle(' Value: : ' + storeItem.get(yfield) + + '
Time: ' + storeItem.get('TIMESTAMP')); + } } - } - }; - - if (proxy) { + }; + chart.series.add(baseline); - var url; - if (yaxisstatistics === "none") { - url += '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+' + dbstarttime + '+' + dbendtime + '+'; - url +=device + '+timerange+' + xaxis + '+' + yaxis; - url += '&XHR=1'; - } else { //setup url to get statistics - url += '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+' + dbstarttime + '+' + dbendtime + '+'; - url +=device; - - if (yaxisstatistics.indexOf("hour") === 0) { - url += '+hourstats+'; - } else if (yaxisstatistics.indexOf("day") === 0) { - url += '+daystats+'; - } else if (yaxisstatistics.indexOf("week") === 0) { - url += '+weekstats+'; - } else if (yaxisstatistics.indexOf("month") === 0) { - url += '+monthstats+'; - } else if (yaxisstatistics.indexOf("year") === 0) { - url += '+yearstats+'; - } - - url += xaxis + '+' + yaxis; - url += '&XHR=1'; + store.first().set(yfield, basestart); + store.last().set(yfield, baseend); + } + }, + + /** + * fill the axes with data + */ + populateAxis: function(i, device, xaxis, yaxis, yaxiscolorcombo, yaxisfillcheck, yaxisstatistics, dbstarttime, dbendtime) { + + var me = this, + chart = me.getChart(), + store = chart.getStore(), + proxy = store.getProxy(), + generalization = Ext.ComponentQuery.query('radio[boxLabel=active]')[0], + generalizationfactor = Ext.ComponentQuery.query('combobox[name=genfactor]')[0].getValue(); + + if (i > 0) { + var yseries = me.createSeries('VALUE' + (i + 1), yaxis, yaxisfillcheck, yaxiscolorcombo); + } else { + var yseries = me.createSeries('VALUE', yaxis, yaxisfillcheck, yaxiscolorcombo); + } + + var url; + if (!Ext.isDefined(yaxisstatistics) || yaxisstatistics === "none" || Ext.isEmpty(yaxisstatistics)) { + url += '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+' + dbstarttime + '+' + dbendtime + '+'; + url +=device + '+timerange+' + xaxis + '+' + yaxis; + url += '&XHR=1'; + } else { //setup url to get statistics + url += '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+' + dbstarttime + '+' + dbendtime + '+'; + url +=device; + + if (yaxisstatistics.indexOf("hour") === 0) { + url += '+hourstats+'; + } else if (yaxisstatistics.indexOf("day") === 0) { + url += '+daystats+'; + } else if (yaxisstatistics.indexOf("week") === 0) { + url += '+weekstats+'; + } else if (yaxisstatistics.indexOf("month") === 0) { + url += '+monthstats+'; + } else if (yaxisstatistics.indexOf("year") === 0) { + url += '+yearstats+'; } - proxy.url = url; - store.load(); - store.on("load", function() { - - if (!Ext.isEmpty(y2axis)) { - - //setup the second y series - var y2series = { - type: 'line', - title: y2axis, - style: { - fill: y2axiscolorcombo, - stroke: y2axiscolorcombo - }, - axis: 'left', - fill: y2axisfillcheck, - smooth: 0, - highlight: true, - showInLegend: true, - xField: 'TIMESTAMP2', - yField: 'VALUE2', - markerConfig: { - type: 'circle', - size: 3, - radius: 3, - stroke: y2axiscolorcombo - }, - tips : { - trackMouse : true, - width : 140, - height : 100, - renderer : function(storeItem, item) { - this.setTitle(' Value: : ' + storeItem.get('VALUE2') + - '
Time: ' + storeItem.get('TIMESTAMP2')); - } - } - }; - - view.series.add(y2series); - - var url2 = '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+' + dbstarttime + '+' + dbendtime + '+'; - url2 +=y2device + '+timerange+' + xaxis + '+' + y2axis; - url2 += '&XHR=1'; - - Ext.Ajax.request({ - method: 'GET', - disableCaching: false, - url: url2, - success: function(response){ - var json = Ext.decode(response.responseText); - - if (json.success && json.success === "false") { - Ext.Msg.alert("Error", "Error an adding 2nd Y-Axis, error was:
" + json.msg); - } else { - - //rewrite valuedescription to differ from other series / axes - store.each(function(rec, index) { - if (json.data[index]) { - rec.set('VALUE2', json.data[index].VALUE); - rec.set('TIMESTAMP2', json.data[index].TIMESTAMP); - } - - }); - - //add records if y2 contains more than y1 - var storelength = store.getCount(); - if (json.data.length > storelength) { - for (var i = storelength; i < json.data.length; i++) { - store.add( - { - 'VALUE': '', - 'TIMESTAMP': json.data[i].TIMESTAMP, - "VALUE2": json.data[i].VALUE, - "TIMESTAMP2": json.data[i].TIMESTAMP - } - ); - } - - } - - if (generalization.checked) { - me.generalizeChartData(generalizationfactor, 2); - } - - if (!Ext.isEmpty(y3axis)) { - - var y3series = { - type: 'line', - title: y3axis, - highlight: true, - style: { - fill: y3axiscolorcombo, - stroke: y3axiscolorcombo - }, - axis: 'left', - fill: y3axisfillcheck, - smooth: 0, - showInLegend: true, - xField: 'TIMESTAMP3', - yField: 'VALUE3', - markerConfig: { - type: 'circle', - size: 3, - radius: 3, - stroke: y3axiscolorcombo - }, - tips : { - trackMouse : true, - width : 140, - height : 100, - renderer : function(storeItem, item) { - this.setTitle(' Value: : ' + storeItem.get('VALUE3') + - '
Time: ' + storeItem.get('TIMESTAMP3')); - } - } - }; - - view.series.add(y3series); - - var url3 = '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+' + dbstarttime + '+' + dbendtime + '+'; - url3 +=y3device + '+timerange+' + xaxis + '+' + y3axis; - url3 += '&XHR=1'; - - Ext.Ajax.request({ - method: 'GET', - disableCaching: false, - url: url3, - success: function(response){ - - var json = Ext.decode(response.responseText); - - if (json.success && json.success === "false") { - Ext.Msg.alert("Error", "Error an adding 3rd Y-Axis, error was:
" + json.msg); - } else { - - //rewrite valuedescription to differ from other series / axes - store.each(function(rec, index) { - if (json.data[index]) { - rec.set('VALUE3', json.data[index].VALUE); - rec.set('TIMESTAMP3', json.data[index].TIMESTAMP); - } - - }); - - //add records if y3 contains more than y2 - var storelength = store.getCount(); - if (json.data.length > storelength) { - for (var i = storelength; i < json.data.length; i++) { - store.add( - { - "VALUE": "", - "TIMESTAMP": json.data[i].TIMESTAMP, - "VALUE2": "", - "TIMESTAMP2": json.data[i].TIMESTAMP, - "VALUE3": json.data[i].VALUE, - "TIMESTAMP3": json.data[i].TIMESTAMP - } - ); - } - - } - - if (generalization.checked) { - me.generalizeChartData(generalizationfactor, 3); - } - } - }, - failure: function() { - Ext.Msg.alert("Error", "Error an adding 3rd Y-Axis"); - } - }); - } - } - }, - failure: function() { - Ext.Msg.alert("Error", "Error an adding 2nd Y-Axis"); - } - }); - } - - //adding base lines if neccessary - if (!Ext.isEmpty(base1start) && base1start != "null") { - var bl1 = { - type : 'line', - name: 'baseline1', - axis : 'left', - xField : 'TIMESTAMP', - yField : 'VALUEBASE1', - showInLegend: false, - highlight: true, - fill: base1fill, - style: { - fill : base1color, - 'stroke-width': 3, - stroke: base1color - }, - tips : { - trackMouse : true, - width : 140, - height : 100, - renderer : function(storeItem, item) { - this.setTitle(' Value: : ' + storeItem.get('VALUEBASE1') + - '
Time: ' + storeItem.get('TIMESTAMP')); - } - } - }; - view.series.add(bl1); - - store.first().set('VALUEBASE1', base1start); - store.last().set('VALUEBASE1', base1end); - } - - if (!Ext.isEmpty(base2start) && base2start != "null") { - var bl2 = { - type : 'line', - name: 'baseline2', - axis : 'left', - xField : 'TIMESTAMP', - yField : 'VALUEBASE2', - showInLegend: false, - highlight: true, - fill: base2fill, - style: { - fill : base2color, - 'stroke-width': 3, - stroke: base2color - }, - tips : { - trackMouse : true, - width : 140, - height : 100, - renderer : function(storeItem, item) { - this.setTitle(' Value: : ' + storeItem.get('VALUEBASE2') + - '
Time: ' + storeItem.get('TIMESTAMP')); - } - } - }; - view.series.add(bl2); - store.first().set('VALUEBASE2', base2start); - store.last().set('VALUEBASE2', base2end); - } - if (!Ext.isEmpty(base3start) && base3start != "null") { - var bl3 = { - type : 'line', - name: 'baseline3', - axis : 'left', - xField : 'TIMESTAMP', - yField : 'VALUEBASE3', - showInLegend: false, - highlight: true, - fill: base3fill, - style: { - fill : base3color, - 'stroke-width': 3, - stroke: base3color - }, - tips : { - trackMouse : true, - width : 140, - height : 100, - renderer : function(storeItem, item) { - this.setTitle(' Value: : ' + storeItem.get('VALUEBASE3') + - '
Time: ' + storeItem.get('TIMESTAMP')); - } - } - }; - view.series.add(bl3); - store.first().set('VALUEBASE3', base3start); - store.last().set('VALUEBASE3', base3end); - - } - - if (generalization.checked) { - me.generalizeChartData(generalizationfactor, 1); - } - - //remove the old max values of y axis to get a dynamic range - delete view.axes.get(0).maximum; - - if (yaxisstatistics.indexOf("none") > 0) { - y1series.yField = 'VALUE'; - view.axes.get(0).maximum = store.max('VALUE'); - } else if (yaxisstatistics.indexOf("sum") > 0) { - y1series.yField = 'SUM'; - y1series.tips.renderer = me.setSeriesRenderer('SUM'); - view.axes.get(0).maximum = store.max('SUM'); - view.axes.get(0).setTitle("SUM " + yaxis); - } else if (yaxisstatistics.indexOf("average") > 0) { - y1series.yField = 'AVG'; - y1series.tips.renderer = me.setSeriesRenderer('AVG'); - view.axes.get(0).maximum = store.max('AVG'); - view.axes.get(0).setTitle("AVG " + yaxis); - } else if (yaxisstatistics.indexOf("min") > 0) { - y1series.yField = 'MIN'; - y1series.tips.renderer = me.setSeriesRenderer('MIN'); - view.axes.get(0).maximum = store.max('MIN'); - view.axes.get(0).setTitle("MIN " + yaxis); - } else if (yaxisstatistics.indexOf("max") > 0) { - y1series.yField = 'MAX'; - y1series.tips.renderer = me.setSeriesRenderer('MAX'); - view.axes.get(0).maximum = store.max('MAX'); - view.axes.get(0).setTitle("MAX " + yaxis); - } else if (yaxisstatistics.indexOf("count") > 0) { - y1series.yField = 'COUNT'; - y1series.tips.renderer = me.setSeriesRenderer('COUNT'); - view.axes.get(0).maximum = store.max('COUNT'); - view.axes.get(0).setTitle("COUNT " + yaxis); - } - view.series.add(y1series); - view.redraw(); - - me.getLinechartview().setLoading(false); - - }, this, {single: true}); + url += xaxis + '+' + yaxis; + url += '&XHR=1'; } + proxy.url = url; + + if (i > 0) { //make async ajax when not on first axis + Ext.Ajax.request({ + method: 'GET', + disableCaching: false, + url: url, + success: function(response){ + + var json = Ext.decode(response.responseText); + + if (json.success && json.success === "false") { + Ext.Msg.alert("Error", "Error an adding Y-Axis number " + i + ", error was:
" + json.msg); + } else { + + //get the current value descriptor + var valuetext; + if (yaxisstatistics.indexOf("none") >= 0) { + valuetext = 'VALUE' + (i + 1); + } else if (yaxisstatistics.indexOf("sum") > 0) { + valuetext = 'SUM' + (i + 1); + } else if (yaxisstatistics.indexOf("average") > 0) { + valuetext = 'AVG' + (i + 1); + } else if (yaxisstatistics.indexOf("min") > 0) { + valuetext = 'MIN' + (i + 1); + } else if (yaxisstatistics.indexOf("max") > 0) { + valuetext = 'MAX' + (i + 1); + } else if (yaxisstatistics.indexOf("count") > 0) { + valuetext = 'COUNT' + (i + 1); + } + var timestamptext = 'TIMESTAMP' + (i + 1); + + //add records to store + for (var j = 0; j < json.data.length; j++) { + var item = Ext.create('FHEM.model.ChartModel'); + + Ext.iterate(item.data, function(key, value) { + if (key.indexOf("TIMESTAMP") >= 0) { + item.set(key, json.data[j].TIMESTAMP); + } + }); + var valuestring = parseFloat(eval('json.data[j].' + valuetext.replace(/[0-9]/g, ''), 10)); + item.set(valuetext, valuestring); + item.set(timestamptext, json.data[j].TIMESTAMP); + store.add(item); + + // recheck if our min and max values are still valid + if (me.minYValue > valuestring) { + me.minYValue = valuestring; + } + if (me.maxYValue < valuestring) { + me.maxYValue = valuestring; + } + } + + if (generalization.checked) { + me.generalizeChartData(generalizationfactor, i); + } + + delete chart.axes.get(0).maximum; + delete chart.axes.get(0).minimum; + + chart.axes.get(0).maximum = me.maxYValue; + chart.axes.get(0).minimum = me.minYValue; + chart.redraw(); + + } + }, + failure: function() { + Ext.Msg.alert("Error", "Error an adding Y-Axis number " + i); + } + }); + } else { + store.load(); + } + + var order = function(updatedstore) { + + if (generalization.checked) { + me.generalizeChartData(generalizationfactor, i); + } + + if (yaxisstatistics.indexOf("none") >= 0) { + if (i === 0) { + yseries.yField = 'VALUE'; + if (me.maxYValue < updatedstore.max('VALUE')) { + me.maxYValue = updatedstore.max('VALUE'); + } + if (me.minYValue > updatedstore.min('VALUE')) { + me.minYValue = updatedstore.min('VALUE'); + } + } else { + yseries.yField = 'VALUE' + (i + 1); + if (me.maxYValue < updatedstore.max(yseries.yField)) { + me.maxYValue = updatedstore.max(yseries.yField); + } + } + } else if (yaxisstatistics.indexOf("sum") > 0) { + if (i === 0) { + yseries.yField = 'SUM'; + yseries.tips.renderer = me.setSeriesRenderer('SUM'); + if (me.maxYValue < updatedstore.max('SUM')) { + me.maxYValue = updatedstore.max('SUM'); + } + if (me.minYValue > updatedstore.min('SUM')) { + me.minYValue = updatedstore.min('SUM'); + } + } else { + yseries.yField = 'SUM' + (i + 1); + yseries.tips.renderer = me.setSeriesRenderer('SUM' + (i + 1)); + } + chart.axes.get(0).setTitle("SUM " + yaxis); + } else if (yaxisstatistics.indexOf("average") > 0) { + if (i === 0) { + yseries.yField = 'AVG'; + yseries.tips.renderer = me.setSeriesRenderer('AVG'); + if (me.maxYValue < updatedstore.max('AVG')) { + me.maxYValue = updatedstore.max('AVG'); + } + if (me.minYValue > updatedstore.min('AVG')) { + me.minYValue = updatedstore.min('AVG'); + } + } else { + yseries.yField = 'AVG' + (i + 1); + yseries.tips.renderer = me.setSeriesRenderer('AVG' + (i + 1)); + } + chart.axes.get(0).setTitle("AVG " + yaxis); + } else if (yaxisstatistics.indexOf("min") > 0) { + if (i === 0) { + yseries.yField = 'MIN'; + yseries.tips.renderer = me.setSeriesRenderer('MIN'); + if (me.maxYValue < updatedstore.max('MIN')) { + me.maxYValue = updatedstore.max('MIN'); + } + if (me.minYValue > updatedstore.min('MIN')) { + me.minYValue = updatedstore.min('MIN'); + } + } else { + yseries.yField = 'MIN' + (i + 1); + yseries.tips.renderer = me.setSeriesRenderer('MIN' + (i + 1)); + } + chart.axes.get(0).setTitle("MIN " + yaxis); + } else if (yaxisstatistics.indexOf("max") > 0) { + if (i === 0) { + yseries.yField = 'MAX'; + yseries.tips.renderer = me.setSeriesRenderer('MAX'); + if (me.maxYValue < updatedstore.max('MAX')) { + me.maxYValue = updatedstore.max('MAX'); + } + if (me.minYValue > updatedstore.min('MAX')) { + me.minYValue = updatedstore.min('MAX'); + } + } else { + yseries.yField = 'MAX' + (i + 1); + yseries.tips.renderer = me.setSeriesRenderer('MAX' + (i + 1)); + } + chart.axes.get(0).setTitle("MAX " + yaxis); + } else if (yaxisstatistics.indexOf("count") > 0) { + if (i === 0) { + yseries.yField = 'COUNT'; + yseries.tips.renderer = me.setSeriesRenderer('COUNT'); + if (me.maxYValue < updatedstore.max('COUNT')) { + me.maxYValue = updatedstore.max('COUNT'); + } + if (me.minYValue > updatedstore.min('COUNT')) { + me.minYValue = updatedstore.min('COUNT'); + } + } else { + yseries.yField = 'COUNT' + (i + 1); + yseries.tips.renderer = me.setSeriesRenderer('COUNT' + (i + 1)); + } + chart.axes.get(0).setTitle("COUNT " + yaxis); + } + + //remove the old max values of y axis to get a dynamic range + delete chart.axes.get(0).maximum; + delete chart.axes.get(0).minimum; + + chart.axes.get(0).maximum = me.maxYValue; + if (me.minYValue === 9999999) { + chart.axes.get(0).minimum = 0; + } else { + chart.axes.get(0).minimum = me.minYValue; + } + + chart.series.add(yseries); + + // set the x axis range dependent on user given timerange + var starttime = me.getStarttimepicker().getValue(), + endtime = me.getEndtimepicker().getValue(); + chart.axes.get(1).fromDate = starttime; + chart.axes.get(1).toDate = endtime; + chart.axes.get(1).processView(); + chart.redraw(); + + me.getChart().setLoading(false); + + }; + store.on("load", order, this, {single: true}); + }, + + /** + * create a single series for the chart + */ + createSeries: function(yfield, title, fill, color) { + var series = { + type : 'line', + axis : 'left', + xField : 'TIMESTAMP', + yField : yfield, + title: title, + showInLegend: true, + smooth: 0, + highlight: true, + fill: fill, + style: { + fill: color, + stroke: color + }, + markerConfig: { + type: 'circle', + size: 3, + radius: 3, + stroke: color + }, + tips : { + trackMouse : true, + mouseOffset: [1,1], + showDelay: 1000, + width : 280, + height : 50, + renderer : function(storeItem, item) { + this.setTitle(' Value: : ' + storeItem.get(yfield) + + '
Time: ' + storeItem.get('TIMESTAMP')); + } + } + }; + return series; }, /** @@ -750,7 +589,7 @@ Ext.define('FHEM.controller.ChartController', { */ generalizeChartData: function(generalizationfactor, index) { - var store = this.getLinechartview().getStore(); + var store = this.getChart().getStore(); this.factorpositive = 1 + (generalizationfactor / 100), this.factornegative = 1 - (generalizationfactor / 100), @@ -761,51 +600,35 @@ Ext.define('FHEM.controller.ChartController', { Ext.each(store.data.items, function(item) { var value; - - if (index === 1) { + if (index === 0) { value = item.get('VALUE'); - } else if (index === 2) { - value = item.get('VALUE2'); - } else if (index === 3) { - value = item.get('VALUE3'); + } else { + value = item.get('VALUE' + index); } - var one = this.lastValue / 100; var diff = value / one / 100; - if (diff > this.factorpositive || diff < this.factornegative) { - if (this.lastItem) { - if (index === 1) { + if (index === 0) { this.lastItem.set('VALUE', this.lastValue); - } else if (index === 2) { - this.lastItem.set('VALUE2', this.lastValue); - } else if (index === 3) { - this.lastItem.set('VALUE3', this.lastValue); + } else { + this.lastItem.set('VALUE' + index, this.lastValue); } } - this.lastValue = value; this.lastItem = item; - } else { - //keep last record if (store.last() !== item) { - if (index === 1) { + if (index === 0) { item.set('VALUE', ''); - } else if (index === 2) { - item.set('VALUE2', ''); - } else if (index === 3) { - item.set('VALUE3', ''); + } else { + item.set('VALUE' + index, ''); } } - - this.lastValue = value; this.lastItem = item; } - }, this); }, @@ -814,61 +637,15 @@ Ext.define('FHEM.controller.ChartController', { * reset the form fields e.g. when loading a new chart */ resetFormFields: function() { - this.getChartformpanel().getForm().reset(); - this.getDevice2combo().hide(); - this.getY2axiscombo().hide(); - this.getY2axiscolorcombo().hide(); - this.getY2axisfillcheck().hide(); - this.getDevice3combo().hide(); - this.getY3axiscombo().hide(); - this.getY3axiscolorcombo().hide(); - this.getY3axisfillcheck().hide(); - this.getAddyaxisbtn().setDisabled(false); - this.getBase1start().hide(); - this.getBase1end().hide(); - this.getBase1color().hide(); - this.getBase1fill().hide(); - this.getBase2start().hide(); - this.getBase2end().hide(); - this.getBase2color().hide(); - this.getBase2fill().hide(); - this.getBase3start().hide(); - this.getBase3end().hide(); - this.getBase3color().hide(); - this.getBase3fill().hide(); - this.getAddbaselinebtn().setDisabled(false); - }, - - /** - * perpare zooming - */ - enableZoomInChart: function() { - var view = this.getLinechartview(); - view.mon(view.getEl(), 'mousewheel', this.zoomInChart, this); - }, - - /** - * zoom in chart with mousewheel - */ - zoomInChart: function(e) { - var wheeldelta = e.getWheelDelta(), - view = this.getLinechartview(), - currentmax = view.axes.get(0).prevMax, - newmax; - - if (wheeldelta == 1) { //zoomin case: - if (currentmax > 1) { - newmax = currentmax - 1; - view.axes.get(0).maximum = newmax; - view.redraw(); - } - } else if (wheeldelta == -1) { //zoomout case - newmax = currentmax + 1; - view.axes.get(0).maximum = newmax; - view.redraw(); - } + var fieldset = this.getChartformpanel().down('fieldset[name=axesfieldset]'); + fieldset.removeAll(); + this.getLinechartpanel().createNewYAxis(); + Ext.ComponentQuery.query('radiofield[name=rb]')[0].setValue(true); + Ext.ComponentQuery.query('datefield[name=starttimepicker]')[0].reset(); + Ext.ComponentQuery.query('datefield[name=endtimepicker]')[0].reset(); + Ext.ComponentQuery.query('radiofield[name=generalization]')[1].setValue(true); }, /** @@ -877,6 +654,10 @@ Ext.define('FHEM.controller.ChartController', { stepchange: function(btn) { var me = this; + //reset y-axis max + me.maxYValue = 0; + me.minYValue = 9999999; + var starttime = me.getStarttimepicker().getValue(), dbstarttime = Ext.Date.format(starttime, 'Y-m-d H:i:s'), endtime = me.getEndtimepicker().getValue(), @@ -908,49 +689,33 @@ Ext.define('FHEM.controller.ChartController', { var me = this; Ext.Msg.prompt("Select a name", "Enter a name to save the Chart", function(action, savename) { if (action === "ok" && !Ext.isEmpty(savename)) { - //replacing spaces in name savename = savename.replace(/ /g, "_"); - //replacing + in name savename = savename.replace(/\+/g, "_"); - var device = this.getDevicecombo().getValue(), - xaxis = this.getXaxiscombo().getValue(), - yaxis = this.getYaxiscombo().getValue(), + //getting the necessary values + var devices = Ext.ComponentQuery.query('combobox[name=devicecombo]'); + var xaxes = Ext.ComponentQuery.query('combobox[name=xaxiscombo]'); + var yaxes = Ext.ComponentQuery.query('combobox[name=yaxiscombo]'); + var yaxescolorcombos = Ext.ComponentQuery.query('combobox[name=yaxiscolorcombo]'); + var yaxesfillchecks = Ext.ComponentQuery.query('checkbox[name=yaxisfillcheck]'); + var yaxesstatistics = Ext.ComponentQuery.query('combobox[name=yaxisstatisticscombo]'); + + var basesstart = Ext.ComponentQuery.query('numberfield[name=basestart]'); + var basesend = Ext.ComponentQuery.query('numberfield[name=baseend]'); + var basescolors = Ext.ComponentQuery.query('combobox[name=baselinecolorcombo]'); + var basesfills = Ext.ComponentQuery.query('checkboxfield[name=baselinefillcheck]'); - yaxiscolorcombo = me.getYaxiscolorcombo().getDisplayValue(), - yaxisfillcheck = me.getYaxisfillcheck().checked, - yaxisstatistics = me.getYaxisstatisticscombo().getValue(), - y2device = me.getDevice2combo().getValue(), - y2axis = me.getY2axiscombo().getValue(), - y2axiscolorcombo = me.getY2axiscolorcombo().getDisplayValue(), - y2axisfillcheck= me.getY2axisfillcheck().checked, - y3device = me.getDevice3combo().getValue(), - y3axis = me.getY3axiscombo().getValue(), - y3axiscolorcombo = me.getY3axiscolorcombo().getDisplayValue(), - y3axisfillcheck = me.getY3axisfillcheck().checked, - base1start = me.getBase1start().getValue(), - base1end = me.getBase1end().getValue(), - base1color = me.getBase1color().getDisplayValue(), - base1fill = me.getBase1fill().checked, - base2start = me.getBase2start().getValue(), - base2end = me.getBase2end().getValue(), - base2color = me.getBase2color().getDisplayValue(), - base2fill = me.getBase2fill().checked, - base3start = me.getBase3start().getValue(), - base3end = me.getBase3end().getValue(), - base3color = me.getBase3color().getDisplayValue(), - base3fill = me.getBase3fill().checked, - - starttime = this.getStarttimepicker().getValue(), + var starttime = me.getStarttimepicker().getValue(), dbstarttime = Ext.Date.format(starttime, 'Y-m-d_H:i:s'), - endtime = this.getEndtimepicker().getValue(), + endtime = me.getEndtimepicker().getValue(), dbendtime = Ext.Date.format(endtime, 'Y-m-d_H:i:s'), dynamicradio = Ext.ComponentQuery.query('radiogroup[name=dynamictime]')[0], generalization = Ext.ComponentQuery.query('radio[boxLabel=active]')[0], generalizationfactor = Ext.ComponentQuery.query('combobox[name=genfactor]')[0].getValue(), - view = this.getLinechartview(); + chart = me.getChart(), + store = chart.getStore(); //setting the start / endtime parameter in the chartconfig to the string of the radiofield, gets parsed on load if (this.getStarttimepicker().isDisabled()) { @@ -962,44 +727,71 @@ Ext.define('FHEM.controller.ChartController', { }); } - var jsonConfig = '{"x":"' + xaxis + '","y":"' + yaxis + '","device":"' + device + '",'; - jsonConfig += '"yaxiscolorcombo":"' + yaxiscolorcombo + '","yaxisfillcheck":"' + yaxisfillcheck + '",'; + var jsonConfig = '{'; + var i = 0; + Ext.each(devices, function(dev) { - if(generalization.checked) { - jsonConfig += '"generalization":"true",'; - jsonConfig += '"generalizationfactor":"' + generalizationfactor + '",'; + var device = dev.getValue(), + xaxis = xaxes[i].getValue(), + yaxis = yaxes[i].getValue(), + yaxiscolorcombo = yaxescolorcombos[i].getDisplayValue(), + yaxisfillcheck = yaxesfillchecks[i].checked, + yaxisstatistics = yaxesstatistics[i].getValue(); + + if (i === 0) { + jsonConfig += '"x":"' + xaxis + '","y":"' + yaxis + '","device":"' + device + '",'; + jsonConfig += '"yaxiscolorcombo":"' + yaxiscolorcombo + '","yaxisfillcheck":"' + yaxisfillcheck + '",'; + if (yaxisstatistics !== "none") { + jsonConfig += '"yaxisstatistics":"' + yaxisstatistics + '",'; + } + } else { + var axisname = "y" + (i + 1) + "axis", + devicename = "y" + (i + 1) + "device", + colorname = "y" + (i + 1) + "axiscolorcombo", + fillname = "y" + (i + 1) + "axisfillcheck", + statsname = "y" + (i + 1) + "axisstatistics"; + + jsonConfig += '"' + axisname + '":"' + yaxis + '","' + devicename + '":"' + device + '",'; + jsonConfig += '"' + colorname + '":"' + yaxiscolorcombo + '","' + fillname + '":"' + yaxisfillcheck + '",'; + if (yaxisstatistics !== "none") { + jsonConfig += '"' + statsname + '":"' + yaxisstatistics + '",'; + } } + i++; + }); + + if(generalization.checked) { + jsonConfig += '"generalization":"true",'; + jsonConfig += '"generalizationfactor":"' + generalizationfactor + '",'; + } + + var i = 0; + Ext.each(basesstart, function(base) { + var basestart = basesstart[i].getValue(), + baseend = basesend[i].getValue(), + basecolor = basescolors[i].getDisplayValue(), + basefill = basesfills[i].checked; - if (yaxisstatistics !== "none") { - jsonConfig += '"yaxisstatistics":"' + yaxisstatistics + '",'; - } - - jsonConfig += '"y2device":"' + y2device + '",'; - jsonConfig += '"y2axis":"' + y2axis + '","y2axiscolorcombo":"' + y2axiscolorcombo + '",'; - jsonConfig += '"y2axisfillcheck":"' + y2axisfillcheck + '","y3axis":"' + y3axis + '",'; - jsonConfig += '"y3device":"' + y3device + '",'; - jsonConfig += '"y3axiscolorcombo":"' + y3axiscolorcombo + '","y3axisfillcheck":"' + y3axisfillcheck + '",'; - jsonConfig += '"base1start":"' + base1start + '","base1end":"' + base1end + '",'; - jsonConfig += '"base1color":"' + base1color + '","base1fill":"' + base1fill + '",'; - jsonConfig += '"base2start":"' + base2start + '","base2end":"' + base2end + '",'; - jsonConfig += '"base2color":"' + base2color + '","base2fill":"' + base2fill + '",'; - jsonConfig += '"base3start":"' + base3start + '","base3end":"' + base3end + '",'; - jsonConfig += '"base3color":"' + base3color + '","base3fill":"' + base3fill + '",'; - jsonConfig += '"starttime":"' + dbstarttime + '","endtime":"' + dbendtime + '"}'; + i++; + jsonConfig += '"base' + i + 'start":"' + basestart + '","base' + i + 'end":"' + baseend + '",'; + jsonConfig += '"base' + i + 'color":"' + basecolor + '","base' + i + 'fill":"' + basefill + '",'; + }); + + jsonConfig += '"starttime":"' + dbstarttime + '","endtime":"' + dbendtime + '"}'; var url = '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+' + dbstarttime + '+' + dbendtime + '+'; - url +=device + '+savechart+""+""+' + savename + '+' + jsonConfig + '&XHR=1'; + url +=devices[0].getValue() + '+savechart+""+""+' + savename + '+' + jsonConfig + '&XHR=1'; - view.setLoading(true); + chart.setLoading(true); Ext.Ajax.request({ method: 'POST', disableCaching: false, url: url, success: function(response){ - view.setLoading(false); + chart.setLoading(false); var json = Ext.decode(response.responseText); - if (json.success === "true") { + if (json.success === "true" || json.data && json.data.length === 0) { me.getSavedchartsgrid().getStore().load(); Ext.Msg.alert("Success", "Chart successfully saved!"); } else if (json.msg) { @@ -1009,7 +801,7 @@ Ext.define('FHEM.controller.ChartController', { } }, failure: function() { - view.setLoading(false); + chart.setLoading(false); if (json && json.msg) { Ext.Msg.alert("Error", "The Chart could not be saved, error Message is:

" + json.msg); } else { @@ -1027,6 +819,8 @@ Ext.define('FHEM.controller.ChartController', { */ loadsavedchart: function(grid, td, cellIndex, record) { + var me = this; + if (cellIndex === 0) { var name = record.get('NAME'), chartdata = record.get('VALUE'); @@ -1045,69 +839,107 @@ Ext.define('FHEM.controller.ChartController', { if (chartdata && !Ext.isEmpty(chartdata)) { - this.getDevicecombo().setValue(chartdata.device); - // load storedata for readings after device has been selected - this.deviceSelected(this.getDevicecombo()); + //reset y-axis max + me.maxYValue = 0; + me.minYValue = 9999999; - this.getXaxiscombo().setValue(chartdata.x); - this.getYaxiscombo().setValue(chartdata.y); - this.getYaxiscolorcombo().setValue(chartdata.yaxiscolorcombo); - this.getYaxisfillcheck().setValue(chartdata.yaxisfillcheck); + //count axes + var axescount = 0; + Ext.iterate(chartdata, function(key, value) { + if (key.indexOf("device") >= 0 && value != "null") { + axescount++; + } + }); - - if (chartdata.y2device && !Ext.isEmpty(chartdata.y2device) && chartdata.y2device != "null") { - this.getDevice2combo().setValue(chartdata.y2device); - this.getDevice2combo().show(); - this.getY2axiscombo().setValue(chartdata.y2axis); - this.getY2axiscombo().show(); - this.getY2axiscolorcombo().setValue(chartdata.y2axiscolorcombo); - this.getY2axiscolorcombo().show(); - this.getY2axisfillcheck().setValue(chartdata.y2axisfillcheck); - this.getY2axisfillcheck().show(); - } - if (chartdata.y3device && !Ext.isEmpty(chartdata.y3device) && chartdata.y3device != "null") { - this.getDevice3combo().setValue(chartdata.y3device); - this.getDevice3combo().show(); - this.getY3axiscombo().setValue(chartdata.y3axis); - this.getY3axiscombo().show(); - this.getY3axiscolorcombo().setValue(chartdata.y3axiscolorcombo); - this.getY3axiscolorcombo().show(); - this.getY3axisfillcheck().setValue(chartdata.y3axisfillcheck); - this.getY3axisfillcheck().show(); + var yaxeslength = Ext.ComponentQuery.query('combobox[name=yaxiscombo]').length; + while (yaxeslength < axescount) { + Ext.ComponentQuery.query('linechartpanel')[0].createNewYAxis(); + yaxeslength++; } - if (chartdata.base1start && !Ext.isEmpty(chartdata.base1start) && chartdata.base1start != "null") { - this.getBase1start().setValue(chartdata.base1start); - this.getBase1start().show(); - this.getBase1end().setValue(chartdata.base1end); - this.getBase1end().show(); - this.getBase1color().setValue(chartdata.base1color); - this.getBase1color().show(); - this.getBase1fill().setValue(chartdata.base1fill); - this.getBase1fill().show(); + var xaxes = Ext.ComponentQuery.query('combobox[name=xaxiscombo]'); + var devices = Ext.ComponentQuery.query('combobox[name=devicecombo]'); + var yaxes = Ext.ComponentQuery.query('combobox[name=yaxiscombo]'); + var yaxescolorcombos = Ext.ComponentQuery.query('combobox[name=yaxiscolorcombo]'); + var yaxesfillchecks = Ext.ComponentQuery.query('checkbox[name=yaxisfillcheck]'); + var yaxesstatistics = Ext.ComponentQuery.query('combobox[name=yaxisstatisticscombo]'); + + var i = 0; + Ext.each(yaxes, function(yaxis) { + if (i === 0) { + devices[i].setValue(chartdata.device); + yaxes[i].getStore().getProxy().url = url = '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+' + chartdata.device + '+getreadings&XHR=1'; + yaxes[i].setDisabled(false); + yaxes[i].setValue(chartdata.y); + xaxes[i].setValue(chartdata.x); + yaxescolorcombos[i].setValue(chartdata.yaxiscolorcombo); + yaxesfillchecks[i].setValue(chartdata.yaxisfillcheck); + + if (chartdata.yaxisstatistics && chartdata.yaxisstatistics !== "") { + yaxesstatistics[i].setValue(chartdata.yaxisstatistics); + } else { + yaxesstatistics[i].setValue("none"); + } + i++; + } else { + var axisdevice = "y" + (i + 1) + "device", + axisname = "y" + (i + 1) + "axis", + axiscolorcombo = axisname + "colorcombo", + axisfillcheck = axisname + "fillcheck", + axisstatistics = axisname + "statistics"; + + eval('devices[i].setValue(chartdata.' + axisdevice + ')'); + yaxes[i].getStore().getProxy().url = '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+' + eval('chartdata.' + axisdevice) + '+getreadings&XHR=1'; + yaxes[i].setDisabled(false); + xaxes[i].setValue(chartdata.x); + eval('yaxes[i].setValue(chartdata.' + axisname + ')'); + eval('yaxescolorcombos[i].setValue(chartdata.' + axiscolorcombo + ')'); + eval('yaxesfillchecks[i].setValue(chartdata.' + axisfillcheck + ')'); + + if (eval('chartdata.' + axisstatistics) && eval('chartdata.' + axisstatistics) !== "") { + eval('yaxesstatistics[i].setValue(chartdata.' + axisstatistics + ')'); + } else { + yaxesstatistics[i].setValue("none"); + } + i++; + } + }); + + //handling baselines + var basesstart = Ext.ComponentQuery.query('numberfield[name=basestart]'), + baselinecount = 0, + i = 1; + + Ext.iterate(chartdata, function(key, value) { + if (key.indexOf("base") >= 0 && key.indexOf("start") >= 0 && value != "null") { + baselinecount++; + } + }); + + var renderedbaselines = basesstart.length; + while (renderedbaselines < baselinecount) { + Ext.ComponentQuery.query('linechartpanel')[0].createNewBaseLineFields(); + renderedbaselines++; } - if (chartdata.base2start && !Ext.isEmpty(chartdata.base2start) && chartdata.base2start != "null") { - this.getBase2start().setValue(chartdata.base2start); - this.getBase2start().show(); - this.getBase2end().setValue(chartdata.base2end); - this.getBase2end().show(); - this.getBase2color().setValue(chartdata.base2color); - this.getBase2color().show(); - this.getBase2fill().setValue(chartdata.base2fill); - this.getBase2fill().show(); - } - - if (chartdata.base3start && !Ext.isEmpty(chartdata.base3start) && chartdata.base3start != "null") { - this.getBase3start().setValue(chartdata.base3start); - this.getBase3start().show(); - this.getBase3end().setValue(chartdata.base3end); - this.getBase3end().show(); - this.getBase3color().setValue(chartdata.base3color); - this.getBase3color().show(); - this.getBase3fill().setValue(chartdata.base3fill); - this.getBase3fill().show(); - } + var i = 0, + j = 1; + basesstart = Ext.ComponentQuery.query('numberfield[name=basestart]'), + basesend = Ext.ComponentQuery.query('numberfield[name=baseend]'), + basescolors = Ext.ComponentQuery.query('combobox[name=baselinecolorcombo]'), + basesfills = Ext.ComponentQuery.query('checkboxfield[name=baselinefillcheck]'); + + Ext.each(basesstart, function(base) { + var start = parseFloat(eval('chartdata.base' + j + 'start'), 10); + var end = parseFloat(eval('chartdata.base' + j + 'end'), 10); + + basesstart[i].setValue(start); + basesend[i].setValue(end); + basescolors[i].setValue(eval('chartdata.base' + j + 'color')); + basesfills[i].setValue(eval('chartdata.base' + j + 'fill')); + i++; + j++; + }); //convert time var dynamicradio = Ext.ComponentQuery.query('radiogroup[name=dynamictime]')[0], @@ -1136,12 +968,6 @@ Ext.define('FHEM.controller.ChartController', { genbox.setValue(false); } - if (chartdata.yaxisstatistics && chartdata.yaxisstatistics !== "") { - this.getYaxisstatisticscombo().setValue(chartdata.yaxisstatistics); - } else { - this.getYaxisstatisticscombo().setValue("none"); - } - this.requestChartData(); this.getLinechartpanel().setTitle(name); } else { @@ -1152,13 +978,13 @@ Ext.define('FHEM.controller.ChartController', { }, /** - * Delete a chart by its name from the database + * Delete a chart by its id from the database */ deletechart: function(grid, td, cellIndex, par, evt, record) { var me = this, chartid = record.get('ID'), - view = this.getLinechartview(); + chart = this.getChart(); if (Ext.isDefined(chartid) && chartid !== "") { @@ -1179,16 +1005,16 @@ Ext.define('FHEM.controller.ChartController', { var url = '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+""+deletechart+""+""+' + chartid + '&XHR=1'; - view.setLoading(true); + chart.setLoading(true); Ext.Ajax.request({ method: 'GET', disableCaching: false, url: url, success: function(response){ - view.setLoading(false); + chart.setLoading(false); var json = Ext.decode(response.responseText); - if (json && json.success === "true") { + if (json && json.success === "true" || json.data && json.data.length === 0) { me.getSavedchartsgrid().getStore().load(); Ext.Msg.alert("Success", "Chart successfully deleted!"); } else if (json && json.msg) { @@ -1199,7 +1025,7 @@ Ext.define('FHEM.controller.ChartController', { btn.up().up().destroy(); }, failure: function() { - view.setLoading(false); + chart.setLoading(false); if (json && json.msg) { Ext.Msg.alert("Error", "The Chart could not be deleted, error Message is:

" + json.msg); } else { diff --git a/fhem/www/frontend/www/frontend/app/controller/MainController.js b/fhem/www/frontend/www/frontend/app/controller/MainController.js index f50037e8e..253a3e860 100644 --- a/fhem/www/frontend/www/frontend/app/controller/MainController.js +++ b/fhem/www/frontend/www/frontend/app/controller/MainController.js @@ -27,8 +27,11 @@ Ext.define('FHEM.controller.MainController', { { selector: 'textfield[name=commandfield]', ref: 'commandfield' //this.getCommandfield() + }, + { + selector: 'grid[name=savedchartsgrid]', + ref: 'savedchartsgrid' //this.getSavedchartsgrid() } - ], /** @@ -68,12 +71,26 @@ Ext.define('FHEM.controller.MainController', { }, /** - * load the FHEM devices and state on viewport render completion + * fade-in viewport, load the FHEM devices and state on viewport render completion */ viewportRendered: function() { var me = this; + me.getMainviewport().show(); + me.getMainviewport().getEl().setOpacity(0); + me.getMainviewport().getEl().animate({ + opacity: 1, + easing: 'easeIn', + duration: 500, + remove: false + }); + + //load the saved charts store with configured dblog name + var store = this.getSavedchartsgrid().getStore(); + store.getProxy().url = '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+""+getcharts&XHR=1'; + store.load(); + if (Ext.isDefined(FHEM.version)) { var sp = this.getStatustextfield(); sp.setText(FHEM.version + "; Frontend Version: 0.4 - 2013-03-23"); @@ -335,24 +352,53 @@ Ext.define('FHEM.controller.MainController', { title: title, region: 'center', layout: 'fit', - record: record + record: record, + hidden: true }; this.destroyCenterPanels(); this.getMainviewport().add(panel); + + var createdpanel = this.getMainviewport().down('devicepanel'); + + createdpanel.getEl().setOpacity(0); + createdpanel.show(); + + createdpanel.getEl().animate({ + opacity: 1, + easing: 'easeIn', + duration: 500, + remove: false + }); + }, /** * */ showLineChartPanel: function() { + var panel = { xtype: 'linechartpanel', name: 'linechartpanel', region: 'center', - layout: 'fit' + layout: 'fit', + hidden: true }; this.destroyCenterPanels(); this.getMainviewport().add(panel); + + var createdpanel = this.getMainviewport().down('linechartpanel'); + + createdpanel.getEl().setOpacity(0); + createdpanel.show(); + + createdpanel.getEl().animate({ + opacity: 1, + easing: 'easeIn', + duration: 500, + remove: false + }); + }, /** @@ -363,10 +409,23 @@ Ext.define('FHEM.controller.MainController', { xtype: 'tabledatagridpanel', name: 'tabledatagridpanel', region: 'center', - layout: 'fit' + layout: 'fit', + hidden: true }; this.destroyCenterPanels(); this.getMainviewport().add(panel); + + var createdpanel = this.getMainviewport().down('tabledatagridpanel'); + + createdpanel.getEl().setOpacity(0); + createdpanel.show(); + + createdpanel.getEl().animate({ + opacity: 1, + easing: 'easeIn', + duration: 500, + remove: false + }); } }); \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/app/model/ChartModel.js b/fhem/www/frontend/www/frontend/app/model/ChartModel.js index f0f322cda..bfdf36811 100644 --- a/fhem/www/frontend/www/frontend/app/model/ChartModel.js +++ b/fhem/www/frontend/www/frontend/app/model/ChartModel.js @@ -20,47 +20,408 @@ Ext.define('FHEM.model.ChartModel', { type: 'date', dateFormat: "Y-m-d H:i:s" }, + { + name: 'TIMESTAMP4', + type: 'date', + dateFormat: "Y-m-d H:i:s" + }, + { + name: 'TIMESTAMP5', + type: 'date', + dateFormat: "Y-m-d H:i:s" + }, + { + name: 'TIMESTAMP6', + type: 'date', + dateFormat: "Y-m-d H:i:s" + }, + { + name: 'TIMESTAMP7', + type: 'date', + dateFormat: "Y-m-d H:i:s" + }, + { + name: 'TIMESTAMP8', + type: 'date', + dateFormat: "Y-m-d H:i:s" + }, + { + name: 'TIMESTAMP9', + type: 'date', + dateFormat: "Y-m-d H:i:s" + }, { name: 'VALUE', type: 'float', convert: function(v,record) { - return record.parseToNumber(v, 1, record); + return record.parseToNumber(v); } },{ name: 'VALUE2', type: 'float', convert: function(v,record) { - return record.parseToNumber(v, 2, record); + return record.parseToNumber(v); } },{ name: 'VALUE3', type: 'float', convert: function(v,record) { - return record.parseToNumber(v, 3, record); + return record.parseToNumber(v); + } + },{ + name: 'VALUE4', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + },{ + name: 'VALUE5', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + },{ + name: 'VALUE6', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + },{ + name: 'VALUE7', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + },{ + name: 'VALUE8', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + },{ + name: 'VALUE9', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); } }, { name: 'SUM', - type: 'float' + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'SUM2', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'SUM3', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'SUM4', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'SUM5', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'SUM6', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'SUM7', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'SUM8', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'SUM9', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } }, { name: 'AVG', - type: 'float' + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'AVG2', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'AVG3', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'AVG4', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'AVG5', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'AVG6', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'AVG7', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'AVG8', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'AVG9', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } }, { name: 'MIN', - type: 'float' + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MIN2', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MIN3', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MIN4', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MIN5', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MIN6', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MIN7', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MIN8', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MIN9', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } }, { name: 'MAX', - type: 'float' + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MAX2', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MAX3', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MAX4', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MAX5', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MAX6', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MAX7', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MAX8', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'MAX9', + type: 'float', + convert: function(v,record) { + return record.parseToNumber(v); + } }, { name: 'COUNT', - type: 'integer' + type: 'integer', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'COUNT2', + type: 'integer', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'COUNT3', + type: 'integer', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'COUNT4', + type: 'integer', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'COUNT5', + type: 'integer', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'COUNT6', + type: 'integer', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'COUNT7', + type: 'integer', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'COUNT8', + type: 'integer', + convert: function(v,record) { + return record.parseToNumber(v); + } + }, + { + name: 'COUNT9', + type: 'integer', + convert: function(v,record) { + return record.parseToNumber(v); + } } ], - parseToNumber: function(value, idx, rec) { + parseToNumber: function(value) { if (value === "") { //we will return nothing diff --git a/fhem/www/frontend/www/frontend/app/store/DeviceStore.js b/fhem/www/frontend/www/frontend/app/store/DeviceStore.js index 41b223d7d..9c8b9b583 100644 --- a/fhem/www/frontend/www/frontend/app/store/DeviceStore.js +++ b/fhem/www/frontend/www/frontend/app/store/DeviceStore.js @@ -4,10 +4,11 @@ Ext.define('FHEM.store.DeviceStore', { extend: 'Ext.data.Store', model: 'FHEM.model.DeviceModel', + id: 'devicestore', proxy: { type: 'ajax', method: 'POST', - url: '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+""+getdevices&XHR=1', + url: '', //gets set by controller reader: { type: 'json', root: 'data', diff --git a/fhem/www/frontend/www/frontend/app/store/SavedChartsStore.js b/fhem/www/frontend/www/frontend/app/store/SavedChartsStore.js index df0936bf7..11b4f8c76 100644 --- a/fhem/www/frontend/www/frontend/app/store/SavedChartsStore.js +++ b/fhem/www/frontend/www/frontend/app/store/SavedChartsStore.js @@ -7,12 +7,12 @@ Ext.define('FHEM.store.SavedChartsStore', { proxy: { type: 'ajax', method: 'POST', - url: '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+""+getcharts&XHR=1', + url: '', //gets set by controller reader: { type: 'json', root: 'data', totalProperty: 'totalCount' } }, - autoLoad: true + autoLoad: false }); diff --git a/fhem/www/frontend/www/frontend/app/view/DevicePanel.js b/fhem/www/frontend/www/frontend/app/view/DevicePanel.js index ad3106a51..690667433 100644 --- a/fhem/www/frontend/www/frontend/app/view/DevicePanel.js +++ b/fhem/www/frontend/www/frontend/app/view/DevicePanel.js @@ -5,6 +5,12 @@ Ext.define('FHEM.view.DevicePanel', { extend: 'Ext.panel.Panel', alias : 'widget.devicepanel', + requires: [ + 'Ext.form.FieldSet', + 'Ext.layout.container.Column', + 'Ext.form.field.ComboBox' + ], + /** * */ diff --git a/fhem/www/frontend/www/frontend/app/view/LineChartPanel.js b/fhem/www/frontend/www/frontend/app/view/LineChartPanel.js index 8ce896ac3..1d330cec5 100644 --- a/fhem/www/frontend/www/frontend/app/view/LineChartPanel.js +++ b/fhem/www/frontend/www/frontend/app/view/LineChartPanel.js @@ -5,95 +5,62 @@ Ext.define('FHEM.view.LineChartPanel', { extend: 'Ext.panel.Panel', alias : 'widget.linechartpanel', requires: [ - 'FHEM.view.LineChartView', - 'FHEM.store.ChartStore' + 'FHEM.store.ChartStore', + 'FHEM.store.DeviceStore', + 'FHEM.store.ReadingsStore', + 'Ext.form.Panel', + 'Ext.form.field.Radio', + 'Ext.form.field.Date', + 'Ext.form.RadioGroup', + 'Ext.chart.Chart', + 'Ext.chart.axis.Numeric', + 'Ext.chart.axis.Time', + 'Ext.chart.series.Line' ], + /** + * generating getters and setters + */ + config: { + /** + * last max value of Y axis before zoom was applied + */ + lastYmax: null, + + /** + * last min value of Y axis before zoom was applied + */ + lastYmin: null, + + /** + * last max value of Y axis before zoom was applied + */ + lastXmax: null, + + /** + * last min value of Y axis before zoom was applied + */ + lastXmin: null + }, + + artifactSeries: [], + + /** + * the title + */ title: 'Line Chart', /** * init function */ - initComponent: function() { + initComponent: function(cfg) { var me = this; - // set up the local db columnname store - // as these columns are fixed, we dont have to request them - me.comboAxesStore = Ext.create('Ext.data.Store', { - fields: ['name'], - data : [ - {'name':'TIMESTAMP'}, - {'name':'DEVICE'}, - {'name':'TYPE'}, - {'name':'EVENT'}, - {'name':'READING'}, - {'name':'VALUE'}, - {'name':'UNIT'} - ] - }); - - me.comboColorStore = Ext.create('Ext.data.Store', { - fields: ['name', 'value'], - data : [ - {'name':'Blue','value':'#2F40FA'}, - {'name':'Green', 'value':'#46E01B'}, - {'name':'Orange','value':'#F0A800'}, - {'name':'Red','value':'#E0321B'}, - {'name':'Yellow','value':'#F5ED16'} - ] - }); - - me.comboDeviceStore = Ext.create('FHEM.store.DeviceStore'); - me.comboDevice2Store = Ext.create('FHEM.store.DeviceStore'); - me.comboDevice3Store = Ext.create('FHEM.store.DeviceStore'); - - me.comboDeviceStore.on("load", function(store, recs, success, operation) { - if(!success) { - Ext.Msg.alert("Error", "Something went wrong. Store Items: " + store.getCount() + ", loaded Items: " + recs.length + ", Reader rawrecords: " + store.getProxy().getReader().rawData.data.length + ", proxyURL: " + store.getProxy().url); - } - }); - - me.comboReadingsStore = Ext.create('FHEM.store.ReadingsStore'); - me.comboReadings2Store = Ext.create('FHEM.store.ReadingsStore'); - me.comboReadings3Store = Ext.create('FHEM.store.ReadingsStore'); - - me.comboStatisticsStore = Ext.create('Ext.data.Store', { - fields: ['name', 'value'], - data : [ - {'name':'None','value':'none'}, - {'name':'Hour Sum', 'value':'hoursum'}, - {'name':'Hour Average', 'value':'houraverage'}, - {'name':'Hour Min','value':'hourmin'}, - {'name':'Hour Max','value':'hourmax'}, - {'name':'Hour Count','value':'hourcount'}, - {'name':'Day Sum', 'value':'daysum'}, - {'name':'Day Average', 'value':'dayaverage'}, - {'name':'Day Min','value':'daymin'}, - {'name':'Day Max','value':'daymax'}, - {'name':'Day Count','value':'daycount'}, - {'name':'Week Sum', 'value':'weeksum'}, - {'name':'Week Average', 'value':'weekaverage'}, - {'name':'Week Min','value':'weekmin'}, - {'name':'Week Max','value':'weekmax'}, - {'name':'Week Count','value':'weekcount'}, - {'name':'Month Sum', 'value':'monthsum'}, - {'name':'Month Average', 'value':'monthaverage'}, - {'name':'Month Min','value':'monthmin'}, - {'name':'Month Max','value':'monthmax'}, - {'name':'Month Count','value':'monthcount'}, - {'name':'Year Sum', 'value':'yearsum'}, - {'name':'Year Average', 'value':'yearaverage'}, - {'name':'Year Min','value':'yearmin'}, - {'name':'Year Max','value':'yearmax'}, - {'name':'Year Count','value':'yearcount'} - ] - }); - var chartSettingPanel = Ext.create('Ext.form.Panel', { title: 'Chart Settings - Click me to edit', name: 'chartformpanel', - maxHeight: 285, + maxHeight: 230, autoScroll: true, collapsible: true, titleCollapse: true, @@ -106,320 +73,11 @@ Ext.define('FHEM.view.LineChartPanel', { xtype: 'fieldset', layout: 'column', title: 'Select data', + name: 'axesfieldset', defaults: { margin: '0 10 10 10' }, - items: [ - { - xtype: 'combobox', - name: 'devicecombo', - fieldLabel: 'Select Device', - labelWidth: 90, - store: me.comboDeviceStore, - displayField: 'DEVICE', - valueField: 'DEVICE' - }, - { - xtype: 'combobox', - name: 'xaxiscombo', - fieldLabel: 'Select X Axis', - labelWidth: 90, - inputWidth: 100, - store: me.comboAxesStore, - displayField: 'name', - valueField: 'name' - }, - { - xtype: 'combobox', - name: 'yaxiscombo', - fieldLabel: 'Select Y-Axis', - labelWidth: 90, - inputWidth: 110, - store: me.comboReadingsStore, - displayField: 'READING', - valueField: 'READING' - }, - { - xtype: 'combobox', - name: 'yaxiscolorcombo', - fieldLabel: 'Y-Color', - labelWidth: 50, - inputWidth: 70, - store: me.comboColorStore, - displayField: 'name', - valueField: 'value', - value: me.comboColorStore.getAt(0) - }, - { - xtype: 'checkboxfield', - name: 'yaxisfillcheck', - boxLabel: 'Fill' - }, - { - xtype: 'combobox', - name: 'yaxisstatisticscombo', - fieldLabel: 'Statistics', - labelWidth: 70, - inputWidth: 120, - store: me.comboStatisticsStore, - displayField: 'name', - valueField: 'value', - value: me.comboStatisticsStore.getAt(0) - }, - { - xtype: 'combobox', - name: 'device2combo', - fieldLabel: 'Select 2. Device', - labelWidth: 100, - store: me.comboDevice2Store, - displayField: 'DEVICE', - valueField: 'DEVICE', - hidden: true - }, - { - xtype: 'combobox', - name: 'y2axiscombo', - fieldLabel: 'Y2', - labelWidth: 20, - store: me.comboReadings2Store, - displayField: 'READING', - valueField: 'READING', - hidden: true - }, - { - xtype: 'combobox', - name: 'y2axiscolorcombo', - fieldLabel: 'Y2-Color', - labelWidth: 60, - inputWidth: 70, - store: me.comboColorStore, - displayField: 'name', - valueField: 'value', - value: me.comboColorStore.getAt(1), - hidden: true - }, - { - xtype: 'checkboxfield', - name: 'y2axisfillcheck', - boxLabel: 'Fill', - hidden: true - }, - { - xtype: 'combobox', - name: 'device3combo', - fieldLabel: 'Select 3. Device', - labelWidth: 100, - store: me.comboDevice3Store, - displayField: 'DEVICE', - valueField: 'DEVICE', - hidden: true - }, - { - xtype: 'combobox', - name: 'y3axiscombo', - fieldLabel: 'Y3', - labelWidth: 20, - store: me.comboReadings3Store, - displayField: 'READING', - valueField: 'READING', - hidden: true - }, - { - xtype: 'combobox', - name: 'y3axiscolorcombo', - fieldLabel: 'Y3-Color', - labelWidth: 60, - inputWidth: 70, - store: me.comboColorStore, - displayField: 'name', - valueField: 'value', - value: me.comboColorStore.getAt(2), - hidden: true - }, - { - xtype: 'checkboxfield', - name: 'y3axisfillcheck', - boxLabel: 'Fill', - hidden: true - }, - { - xtype: 'button', - width: 110, - text: 'Add another Y-Axis', - name: 'addyaxisbtn', - handler: function(btn) { - var y2device = btn.up().down('combobox[name=device2combo]'); - var y2 = btn.up().down('combobox[name=y2axiscombo]'); - var y2color = btn.up().down('combobox[name=y2axiscolorcombo]'); - var y2fill = btn.up().down('checkboxfield[name=y2axisfillcheck]'); - - var y3device = btn.up().down('combobox[name=device3combo]'); - var y3 = btn.up().down('combobox[name=y3axiscombo]'); - var y3color = btn.up().down('combobox[name=y3axiscolorcombo]'); - var y3fill = btn.up().down('checkboxfield[name=y3axisfillcheck]'); - - if (y2.hidden) { - y2device.show(); - y2.show(); - y2color.show(); - y2fill.show(); - } else if (y3.hidden) { - y3device.show(); - y3.show(); - y3color.show(); - y3fill.show(); - btn.setDisabled(true); - } - } - }, - { - xtype: 'numberfield', - fieldLabel: 'Startvalue', - name: 'base1start', - allowBlank: false, - labelWidth: 60, - width: 120, - hidden: true - }, - { - xtype: 'numberfield', - fieldLabel: 'Endvalue', - name: 'base1end', - allowBlank: false, - labelWidth: 60, - width: 120, - hidden: true - }, - { - xtype: 'combobox', - name: 'baseline1colorcombo', - fieldLabel: 'Baseline 1 Color', - labelWidth: 100, - inputWidth: 70, - store: me.comboColorStore, - displayField: 'name', - valueField: 'value', - value: me.comboColorStore.getAt(0), - hidden: true - }, - { - xtype: 'checkboxfield', - name: 'baseline1fillcheck', - boxLabel: 'Fill', - hidden: true - }, - { - xtype: 'numberfield', - fieldLabel: 'Startvalue', - name: 'base2start', - allowBlank: false, - labelWidth: 60, - width: 120, - hidden: true - }, - { - xtype: 'numberfield', - fieldLabel: 'Endvalue', - name: 'base2end', - allowBlank: false, - labelWidth: 60, - width: 120, - hidden: true - }, - { - xtype: 'combobox', - name: 'baseline2colorcombo', - fieldLabel: 'Baseline 2 Color', - labelWidth: 100, - inputWidth: 70, - store: me.comboColorStore, - displayField: 'name', - valueField: 'value', - value: me.comboColorStore.getAt(1), - hidden: true - }, - { - xtype: 'checkboxfield', - name: 'baseline2fillcheck', - boxLabel: 'Fill', - hidden: true - }, - { - xtype: 'numberfield', - fieldLabel: 'Startvalue', - name: 'base3start', - allowBlank: false, - labelWidth: 60, - width: 120, - hidden: true - }, - { - xtype: 'numberfield', - fieldLabel: 'Endvalue', - name: 'base3end', - allowBlank: false, - labelWidth: 60, - width: 120, - hidden: true - }, - { - xtype: 'combobox', - name: 'baseline3colorcombo', - fieldLabel: 'Baseline 3 Color', - labelWidth: 100, - inputWidth: 70, - store: me.comboColorStore, - displayField: 'name', - valueField: 'value', - value: me.comboColorStore.getAt(2), - hidden: true - }, - { - xtype: 'checkboxfield', - name: 'baseline3fillcheck', - boxLabel: 'Fill', - hidden: true - }, - { - xtype: 'button', - width: 110, - text: 'Add Baseline', - name: 'addbaselinebtn', - handler: function(btn) { - var b1start = btn.up().down('numberfield[name=base1start]'); - var b1end = btn.up().down('numberfield[name=base1end]'); - var b1color = btn.up().down('combobox[name=baseline1colorcombo]'); - var b1fill = btn.up().down('checkboxfield[name=baseline1fillcheck]'); - var b2start = btn.up().down('numberfield[name=base2start]'); - var b2end = btn.up().down('numberfield[name=base2end]'); - var b2color = btn.up().down('combobox[name=baseline2colorcombo]'); - var b2fill = btn.up().down('checkboxfield[name=baseline2fillcheck]'); - var b3start = btn.up().down('numberfield[name=base3start]'); - var b3end = btn.up().down('numberfield[name=base3end]'); - var b3color = btn.up().down('combobox[name=baseline3colorcombo]'); - var b3fill = btn.up().down('checkboxfield[name=baseline3fillcheck]'); - - if (b1start.hidden) { - b1start.show(); - b1end.show(); - b1color.show(); - b1fill.show(); - } else if (b2start.hidden) { - b2start.show(); - b2end.show(); - b2color.show(); - b2fill.show(); - } else if (b3start.hidden) { - b3start.show(); - b3end.show(); - b3color.show(); - b3fill.show(); - btn.setDisabled(true); - } - - } - } - ] + items: [] //get filled in own function }, { xtype: 'fieldset', @@ -487,7 +145,7 @@ Ext.define('FHEM.view.LineChartPanel', { xtype: 'fieldset', layout: 'column', defaults: { - margin: '0 0 0 10' + margin: '10 10 10 10' }, items: [ { @@ -508,18 +166,6 @@ Ext.define('FHEM.view.LineChartPanel', { text: 'Reset Fields', name: 'resetchartform' }, - { - xtype: 'button', - width: 100, - text: 'Step back', - name: 'stepback' - }, - { - xtype: 'button', - width: 100, - text: 'Step forward', - name: 'stepforward' - }, { xtype: 'radio', width: 160, @@ -574,6 +220,11 @@ Ext.define('FHEM.view.LineChartPanel', { ] }); + //add the first yaxis line + me.createNewYAxis(); + + //creating the chart + var chartstore = Ext.create('FHEM.store.ChartStore'); var linechartview = Ext.create('Ext.panel.Panel', { title: 'Chart', autoScroll: true, @@ -581,14 +232,128 @@ Ext.define('FHEM.view.LineChartPanel', { titleCollapse: true, items: [ { - xtype: 'linechartview' + xtype: 'toolbar', + items: [ + { + xtype: 'button', + width: 100, + text: 'Step back', + name: 'stepback' + }, + { + xtype: 'button', + width: 100, + text: 'Step forward', + name: 'stepforward' + }, + { + xtype: 'button', + width: 100, + text: 'Reset Zoom', + name: 'resetzoom', + scope: me, + handler: function(btn) { + var chart = me.down('chart'); + chart.restoreZoom(); + chart.axes.get(0).minimum = me.getLastYmin(); + chart.axes.get(0).maximum = me.getLastYmax(); + chart.axes.get(1).minimum = me.getLastXmin(); + chart.axes.get(1).maximum = me.getLastXmax(); + + chart.redraw(); + //helper to reshow the hidden items after zooming back out + if (me.artifactSeries && me.artifactSeries.length > 0) { + Ext.each(me.artifactSeries, function(serie) { + serie.showAll(); + Ext.each(serie.group.items, function(item) { + if (item.type === "circle") { + item.show(); + item.redraw(); + } + }); + }); + me.artifactSeries = []; + } + } + } + ] + }, + { + xtype: 'chart', + legend: { + position: 'right' + }, + axes: [ + { + type : 'Numeric', + name : 'yaxe', + position : 'left', + fields : [ 'VALUE', 'VALUE2' ], + title : 'VALUE', + grid : { + odd : { + opacity : 1, + fill : '#ddd', + stroke : '#bbb', + 'stroke-width' : 0.5 + } + } + }, + { + type : 'Time', + name : 'xaxe', + position : 'bottom', + fields : [ 'TIMESTAMP' ], + dateFormat : "Y-m-d H:i:s", + title : 'Time' + } + ], + animate: true, + store: chartstore, + enableMask: true, + mask: true,//'vertical',//true, //'horizontal', + listeners: { + mousedown: function(evt) { + // fix for firefox, not dragging images + evt.preventDefault(); + }, + select: { + fn: function(chart, selection, evt) { + delete chart.axes.get(1).fromDate; + delete chart.axes.get(1).toDate; + if (Ext.isEmpty(me.getLastYmax())) { + me.setLastYmax(chart.axes.get(0).maximum); + me.setLastYmin(chart.axes.get(0).minimum); + } + if (Ext.isEmpty(me.getLastXmax())) { + me.setLastXmax(chart.axes.get(1).maximum); + me.setLastXmin(chart.axes.get(1).minimum); + } + chart.axes.get(1).processView(); + chart.redraw(); + chart.setZoom(selection); + chart.mask.hide(); + //helper hiding series and items which are out of scope + Ext.each(chart.series.items, function(serie) { + if (serie.items.length === 0) { + me.artifactSeries.push(serie); + Ext.each(serie.group.items, function(item) { + item.hide(); + item.redraw(); + }); + serie.hideAll(); + } + }); + } + } + } } ] }); me.items = [ - chartSettingPanel, - linechartview + chartSettingPanel, + linechartview ]; me.callParent(arguments); @@ -602,12 +367,251 @@ Ext.define('FHEM.view.LineChartPanel', { */ layoutChart: function() { var lcp = Ext.ComponentQuery.query('linechartpanel')[0]; - var lcv = Ext.ComponentQuery.query('linechartview')[0]; + var lcv = Ext.ComponentQuery.query('chart')[0]; var cfp = Ext.ComponentQuery.query('form[name=chartformpanel]')[0]; var chartheight = lcp.getHeight() - cfp.getHeight() - 85; var chartwidth = lcp.getWidth() - 25; lcv.setHeight(chartheight); lcv.setWidth(chartwidth); - } + }, + /** + * create a new fieldset for a new chart y axis + */ + createNewYAxis: function() { + + var me = this; + + var components = + { + xtype: 'fieldset', + name: 'singlerowfieldset', + layout: 'column', + defaults: { + margin: '5 5 5 5' + }, + items: + [ + { + xtype: 'combobox', + name: 'devicecombo', + fieldLabel: 'Select Device', + labelWidth: 90, + store: Ext.create('FHEM.store.DeviceStore', { + proxy: { + type: 'ajax', + method: 'POST', + url: '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+""+getdevices&XHR=1', + reader: { + type: 'json', + root: 'data', + totalProperty: 'totalCount' + } + }, + autoLoad: true + }), + displayField: 'DEVICE', + valueField: 'DEVICE', + listeners: { + select: function(combo) { + var device = combo.getValue(), + readingscombo = combo.up().down('combobox[name=yaxiscombo]'), + readingsstore = readingscombo.getStore(), + readingsproxy = readingsstore.getProxy(); + + readingsproxy.url = '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+' + device + '+getreadings&XHR=1'; + readingsstore.load(); + readingscombo.setDisabled(false); + } + } + }, + { + xtype: 'combobox', + name: 'xaxiscombo', + fieldLabel: 'Select X Axis', + labelWidth: 90, + inputWidth: 100, + store: Ext.create('Ext.data.Store', { + fields: ['name'], + data : [ + {'name':'TIMESTAMP'}, + {'name':'DEVICE'}, + {'name':'TYPE'}, + {'name':'EVENT'}, + {'name':'READING'}, + {'name':'VALUE'}, + {'name':'UNIT'} + ] + }), + displayField: 'name', + valueField: 'name' + }, + { + xtype: 'combobox', + name: 'yaxiscombo', + fieldLabel: 'Select Y-Axis', + disabled: true, + labelWidth: 90, + inputWidth: 110, + store: Ext.create('FHEM.store.ReadingsStore', { + proxy: { + type: 'ajax', + method: 'POST', + url: '../../../fhem?cmd=get+' + FHEM.dblogname + '+-+webchart+""+""+-+getreadings&XHR=1', + reader: { + type: 'json', + root: 'data', + totalProperty: 'totalCount' + } + }, + autoLoad: false + }), + displayField: 'READING', + valueField: 'READING' + }, + { + xtype: 'combobox', + name: 'yaxiscolorcombo', + fieldLabel: 'Y-Color', + labelWidth: 50, + inputWidth: 70, + store: Ext.create('Ext.data.Store', { + fields: ['name', 'value'], + data : [ + {'name':'Blue','value':'#2F40FA'}, + {'name':'Green', 'value':'#46E01B'}, + {'name':'Orange','value':'#F0A800'}, + {'name':'Red','value':'#E0321B'}, + {'name':'Yellow','value':'#F5ED16'} + ] + }), + displayField: 'name', + valueField: 'value', + value: '#2F40FA' + }, + { + xtype: 'checkboxfield', + name: 'yaxisfillcheck', + boxLabel: 'Fill' + }, + { + xtype: 'combobox', + name: 'yaxisstatisticscombo', + fieldLabel: 'Statistics', + labelWidth: 70, + inputWidth: 120, + store: Ext.create('Ext.data.Store', { + fields: ['name', 'value'], + data : [ + {'name':'None','value':'none'}, + {'name':'Hour Sum', 'value':'hoursum'}, + {'name':'Hour Average', 'value':'houraverage'}, + {'name':'Hour Min','value':'hourmin'}, + {'name':'Hour Max','value':'hourmax'}, + {'name':'Hour Count','value':'hourcount'}, + {'name':'Day Sum', 'value':'daysum'}, + {'name':'Day Average', 'value':'dayaverage'}, + {'name':'Day Min','value':'daymin'}, + {'name':'Day Max','value':'daymax'}, + {'name':'Day Count','value':'daycount'}, + {'name':'Week Sum', 'value':'weeksum'}, + {'name':'Week Average', 'value':'weekaverage'}, + {'name':'Week Min','value':'weekmin'}, + {'name':'Week Max','value':'weekmax'}, + {'name':'Week Count','value':'weekcount'}, + {'name':'Month Sum', 'value':'monthsum'}, + {'name':'Month Average', 'value':'monthaverage'}, + {'name':'Month Min','value':'monthmin'}, + {'name':'Month Max','value':'monthmax'}, + {'name':'Month Count','value':'monthcount'}, + {'name':'Year Sum', 'value':'yearsum'}, + {'name':'Year Average', 'value':'yearaverage'}, + {'name':'Year Min','value':'yearmin'}, + {'name':'Year Max','value':'yearmax'}, + {'name':'Year Count','value':'yearcount'} + ] + }), + displayField: 'name', + valueField: 'value', + value: 'none' + }, + { + xtype: 'button', + width: 110, + text: 'Add another Y-Axis', + name: 'addyaxisbtn', + handler: function(btn) { + me.createNewYAxis(); + } + }, + { + xtype: 'button', + width: 110, + text: 'Add Baseline', + name: 'addbaselinebtn', + handler: function(btn) { + me.createNewBaseLineFields(btn); + } + } + ] + }; + + Ext.ComponentQuery.query('fieldset[name=axesfieldset]')[0].add(components); + + }, + + /** + * + */ + createNewBaseLineFields: function(btn) { + var itemsToAdd = [ + { + xtype: 'numberfield', + fieldLabel: 'Startvalue', + name: 'basestart', + allowBlank: false, + labelWidth: 60, + width: 120 + }, + { + xtype: 'numberfield', + fieldLabel: 'Endvalue', + name: 'baseend', + allowBlank: false, + labelWidth: 60, + width: 120 + }, + { + xtype: 'combobox', + name: 'baselinecolorcombo', + fieldLabel: 'Baseline Color', + labelWidth: 100, + inputWidth: 70, + store: Ext.create('Ext.data.Store', { + fields: ['name', 'value'], + data : [ + {'name':'Blue','value':'#2F40FA'}, + {'name':'Green', 'value':'#46E01B'}, + {'name':'Orange','value':'#F0A800'}, + {'name':'Red','value':'#E0321B'}, + {'name':'Yellow','value':'#F5ED16'} + ] + }), + displayField: 'name', + valueField: 'value', + value: '#46E01B' + }, + { + xtype: 'checkboxfield', + name: 'baselinefillcheck', + boxLabel: 'Fill' + } + ]; + if (Ext.isDefined(btn)) { + btn.up().add(itemsToAdd); + } else { + this.down('fieldset[name=singlerowfieldset]').add(itemsToAdd); + } + + } }); diff --git a/fhem/www/frontend/www/frontend/app/view/LineChartView.js b/fhem/www/frontend/www/frontend/app/view/LineChartView.js deleted file mode 100644 index 06d2ca2b1..000000000 --- a/fhem/www/frontend/www/frontend/app/view/LineChartView.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * The View for the Line Charts - */ -Ext.define('FHEM.view.LineChartView', { - extend : 'Ext.chart.Chart', - alias : 'widget.linechartview', - xtype : 'chart', - requires : [ 'FHEM.store.ChartStore' ], - animate : true, - legend: { - position: 'right' - }, - - initComponent : function() { - var me = this; - me.store = Ext.create('FHEM.store.ChartStore'); - - me.axes = [ - { - type : 'Numeric', - name : 'yaxe', - position : 'left', - fields : [ 'VALUE', 'VALUE2', 'VALUE3', 'VALUEBASE1', 'VALUEBASE2', 'VALUEBASE3' ], - title : 'VALUE', - grid : { - odd : { - opacity : 1, - fill : '#ddd', - stroke : '#bbb', - 'stroke-width' : 0.5 - } - } - }, - { - type : 'Time', - name : 'xaxe', - position : 'bottom', - fields : [ 'TIMESTAMP' ], - dateFormat : "Y-m-d H:i:s", - minorTickSteps : 12, - title : 'Time' - } ]; - - me.series = null; - - me.callParent(arguments); - - } - -}); \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/app/view/TableDataGridPanel.js b/fhem/www/frontend/www/frontend/app/view/TableDataGridPanel.js index 90538b1ac..5acbce5a7 100644 --- a/fhem/www/frontend/www/frontend/app/view/TableDataGridPanel.js +++ b/fhem/www/frontend/www/frontend/app/view/TableDataGridPanel.js @@ -4,7 +4,6 @@ Ext.define('FHEM.view.TableDataGridPanel', { extend: 'Ext.panel.Panel', alias : 'widget.tabledatagridpanel', - //xtype : 'gridpanel', requires: [ 'FHEM.store.TableDataStore' ], diff --git a/fhem/www/frontend/www/frontend/app/view/Viewport.js b/fhem/www/frontend/www/frontend/app/view/Viewport.js index 4c72d50db..03efba4f5 100644 --- a/fhem/www/frontend/www/frontend/app/view/Viewport.js +++ b/fhem/www/frontend/www/frontend/app/view/Viewport.js @@ -9,7 +9,16 @@ Ext.define('FHEM.view.Viewport', { requires: [ 'FHEM.view.LineChartPanel', 'FHEM.view.TableDataGridPanel', - 'FHEM.controller.ChartController' + 'FHEM.controller.ChartController', + 'FHEM.store.SavedChartsStore', + 'Ext.layout.container.Border', + 'Ext.form.field.Text', + 'Ext.layout.container.Accordion', + 'Ext.tree.Panel', + 'Ext.grid.Panel', + 'Ext.grid.Column', + 'Ext.grid.column.Action', + 'Ext.draw.Text' ], initComponent: function() { @@ -133,7 +142,7 @@ Ext.define('FHEM.view.Viewport', { name: 'savedchartsactioncolumn', width:'15%', items: [{ - icon: 'lib/ext-4.1.1a/images/gray/dd/drop-no.gif', + icon: 'lib/ext-4.2.0.663/images/dd/drop-no.gif', tooltip: 'Delete' }] } diff --git a/fhem/www/frontend/www/frontend/index.html b/fhem/www/frontend/www/frontend/index.html index f7a212d87..9d6f14922 100644 --- a/fhem/www/frontend/www/frontend/index.html +++ b/fhem/www/frontend/www/frontend/index.html @@ -5,11 +5,25 @@ Frontend - - + + +

+ Please wait... +

+ + + - \ No newline at end of file + diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/ext-all-gray-debug.css b/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/ext-all-gray-debug.css deleted file mode 100644 index c53c1fea1..000000000 --- a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/ext-all-gray-debug.css +++ /dev/null @@ -1,9958 +0,0 @@ -/* -This file is part of Ext JS 4.1 - -Copyright (c) 2011-2012 Sencha Inc - -Contact: http://www.sencha.com/contact - -GNU General Public License Usage -This file may be used under the terms of the GNU General Public License version 3.0 as -published by the Free Software Foundation and appearing in the file LICENSE included in the -packaging of this file. - -Please review the following information to ensure the GNU General Public License version 3.0 -requirements will be met: http://www.gnu.org/copyleft/gpl.html. - -If you are unsure which license is appropriate for your use, please contact the sales department -at http://www.sencha.com/contact. - -Build date: 2012-07-04 21:11:01 (65ff594cd80b9bad45df640c22cc0adb52c95a7b) -*/ -/** - * @class Global_CSS - * - * Global CSS variables and mixins of Sencha Touch. - */ -/** - * @var {string} $prefix - * The prefix to be applied to all CSS selectors. If this is changed, it must also be changed in your - * JavaScript application. - */ -/** - * @var {string} $theme-name - * The name of the theme. This must match the the output directory of the images. - * (defaults to 'default') - */ -/** - * @var {boolean/string} $relative-image-path-for-uis - * True to use a relative image path for all new UIs. If true, the path will be "../images/". - * It can also be a string of the path value. - * It defaults to false, which means it will look for the images in the ExtJS SDK folder. - */ -/** - * @var {string} $font-family - * The default font-family to be used throughout the theme. - */ -/** - * @var {string} $base-gradient - * The base gradient to be used throughout the theme. - */ -/** - * @var {color} $base-color - * The base color to be used throughout the theme. - */ -/** - * @var {boolean} $include-not-found-images - * True to include files which are not found when compiling your SASS - */ -/** - * @var {boolean} $include-ie - * True to include Internet Explorer specific rules - */ -/** - * @var {boolean} $include-ff - * True to include Firefox specific rules - */ -/** - * @var {boolean} $include-chrome - * True to include Chrome specific rules - */ -/** - * @var {boolean} $include-safari - * True to include Safari specific rules - */ -/** - * @var {boolean} $include-opera - * True to include Opera specific rules - */ -/** - * @var {boolean} $include-webkit - * True to include Webkit specific rules - */ -/** - * @var {boolean} $compile-all - * True to copile all CSS, even if above include rules are false - */ -/** - * @var {boolean} $scope-reset-css - * True to scope the reset CSS within the $prefix variable. - */ -/** - * @var {color} $css-shadow-background-color - * The base color for CSS shadows - */ -/** - * @var {color} $include-shadow-images - * True to include all shadow images. - */ -/** - * @class Ext.form.field.Base - */ -/** - * @var {measurement} $form-field-height - * Height for form fields. - */ -/** - * @var {measurement} $form-toolbar-field-height - * Height for form fields in toolbar. - */ -/** - * @var {measurement} $form-error-icon-width - * Width for form error icons. - */ -/** - * @var {measurement} $form-field-padding - * Padding around form fields. - */ -/** - * @var {measurement} $form-field-font-size - * Font size for form fields. - */ -/** - * @var {font-family} $form-field-font-family - * Font family for form fields. - */ -/** - * @var {font-weight} $form-field-font-weight - * Font weight for form fields. - */ -/** - * @var {font} $form-field-font - * Font for form fields. - */ -/** - * @var {color} $form-field-color - * Text color for form fields. - */ -/** - * @var {color} $form-field-empty-color - * Text color for empty form fields. - */ -/** - * @var {color} $form-field-border-color - * Border color for form fields. - */ -/** - * @var {measurement} $form-field-border-width - * Border width for form fields. - */ -/** - * @var {color} $form-field-focus-border-color - * Border color for focused form fields. - */ -/** - * @var {color} $form-field-invalid-border-color - * Border color for invalid form fields. - */ -/** - * @var {color} $form-field-background-color - * Background color for form fields. - */ -/** - * @var {string} $form-field-background-image - * Background image for form fields. - */ -/** - * @var {color} $form-field-invalid-background-color - * Background color for invalid form fields. - */ -/** - * @var {string} $form-field-invalid-background-image - * Background image for invalid form fields. - */ -/** - * @var {background-repeat} $form-field-invalid-background-repeat - * Background repeat for invalid form fields. - */ -/** - * @var {background-position} $form-field-invalid-background-position - * Background position for invalid form fields. - */ -/** - * @class Ext.form.field.TextArea - */ -/** - * @class Ext.form.Label - */ -/** - * @class Ext.form.field.Checkbox - */ -/** - * @class Ext.form.field.Radio - */ -/* Error messages */ -/** - * @class Ext.form.field.Trigger - */ -/** - * @class Ext.form.FieldSet - */ -/** - * @class Ext.slider.Multi - */ -/** - * Creates a background gradient. - * - * @param {Color} $bg-color The background color of the gradient - * @param {String/List} [$type] The type of gradient to be used. Can either - * be a String which is a predefined gradient, or it can can be a list of - * color_stops. If none is set, it will still set the `background-color` - * to the $background-color. - * @param {String} [$direction=top] The direction of the gradient. Can either be - * `top` or `left`. - * @member Global_CSS - */ -/* - * Method which inserts a full background-image property for a theme image. - * It checks if the file exists and if it doesn't, it'll throw an error. - * By default it will not include the background-image property if it is not found, - * but this can be changed by changing the default value of $include-missing-images to - * be true. - */ -/* line 77, ../themes/stylesheets/ext4/default/core/_reset.scss */ -html, body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, -h4, h5, h6, pre, code, form, fieldset, legend, -input, textarea, p, blockquote, th, td { - margin: 0; - padding: 0; } - -/* line 82, ../themes/stylesheets/ext4/default/core/_reset.scss */ -table { - border-collapse: collapse; - border-spacing: 0; } - -/* line 87, ../themes/stylesheets/ext4/default/core/_reset.scss */ -fieldset, img { - border: 0; } - -/* line 92, ../themes/stylesheets/ext4/default/core/_reset.scss */ -address, caption, cite, code, -dfn, em, strong, th, var { - font-style: normal; - font-weight: normal; } - -/* line 97, ../themes/stylesheets/ext4/default/core/_reset.scss */ -li { - list-style: none; } - -/* line 101, ../themes/stylesheets/ext4/default/core/_reset.scss */ -caption, th { - text-align: left; } - -/* line 105, ../themes/stylesheets/ext4/default/core/_reset.scss */ -h1, h2, h3, h4, h5, h6 { - font-size: 100%; } - -/* line 110, ../themes/stylesheets/ext4/default/core/_reset.scss */ -q:before, -q:after { - content: ""; } - -/* line 114, ../themes/stylesheets/ext4/default/core/_reset.scss */ -abbr, acronym { - border: 0; - font-variant: normal; } - -/* line 119, ../themes/stylesheets/ext4/default/core/_reset.scss */ -sup { - vertical-align: text-top; } - -/* line 123, ../themes/stylesheets/ext4/default/core/_reset.scss */ -sub { - vertical-align: text-bottom; } - -/* line 127, ../themes/stylesheets/ext4/default/core/_reset.scss */ -input, textarea, select { - font-family: inherit; - font-size: inherit; - font-weight: inherit; } - -/* line 133, ../themes/stylesheets/ext4/default/core/_reset.scss */ -*:focus { - outline: none; } - -/* line 138, ../themes/stylesheets/ext4/default/core/_reset.scss */ -.x-border-box, -.x-border-box * { - box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - -webkit-box-sizing: border-box; } - -/* line 1, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-body { - color: black; - font-size: 12px; - font-family: tahoma, arial, verdana, sans-serif; } - -/* line 7, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-rtl { - direction: rtl; } - -/* line 11, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-ltr { - direction: ltr; } - -/* line 15, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-clear { - overflow: hidden; - clear: both; - font-size: 0; - line-height: 0; - display: table; } - -/* line 23, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-strict .x-ie7 .x-clear { - height: 0; - width: 0; } - -/* line 31, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-layer { - position: absolute !important; - overflow: hidden; - zoom: 1; } - -/* line 37, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-shim { - position: absolute; - left: 0; - top: 0; - overflow: hidden; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); - opacity: 0; } - -/* line 45, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-hide-display { - display: none !important; } - -/* line 49, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-hide-visibility { - visibility: hidden !important; } - -/* line 56, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-item-disabled .x-form-item-label, -.x-item-disabled .x-form-field, -.x-item-disabled .x-form-cb-label, -.x-item-disabled .x-form-trigger { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); - opacity: 0.3; } - -/* line 60, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-ie6 .x-item-disabled { - filter: none; } - -/* line 65, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-hidden, -.x-hide-offsets { - display: block !important; - visibility: hidden !important; - position: absolute!important; - left: -10000px !important; - top: -10000px !important; } - -/* line 75, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-hide-nosize { - height: 0!important; - width: 0!important; } - -/* line 80, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-masked-relative { - position: relative; } - -/* line 86, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-ie6 .x-masked select, -.x-ie6.x-body-masked select { - visibility: hidden !important; } - -/* line 92, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-css-shadow { - position: absolute; - -moz-border-radius: 5px 5px; - -webkit-border-radius: 5px 5px; - -o-border-radius: 5px 5px; - -ms-border-radius: 5px 5px; - -khtml-border-radius: 5px 5px; - border-radius: 5px 5px; } - -/* line 98, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-ie-shadow { - background-color: #777; - display: none; - position: absolute; - overflow: hidden; - zoom: 1; } - -/* line 107, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-tl { - background: transparent no-repeat 0 0; - zoom: 1; } - -/* line 112, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-tc { - height: 8px; - background: transparent repeat-x 0 0; - overflow: hidden; } - -/* line 118, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-tr { - background: transparent no-repeat right -8px; } - -/* line 122, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-ml { - background: transparent repeat-y 0; - padding-left: 4px; - overflow: hidden; - zoom: 1; } - -/* line 129, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-mc { - background: repeat-x 0 -16px; - padding: 4px 10px; } - -/* line 134, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-mc h3 { - margin: 0 0 4px 0; - zoom: 1; } - -/* line 139, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-mr { - background: transparent repeat-y right; - padding-right: 4px; - overflow: hidden; } - -/* line 145, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-bl { - background: transparent no-repeat 0 -16px; - zoom: 1; } - -/* line 150, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-bc { - background: transparent repeat-x 0 -8px; - height: 8px; - overflow: hidden; } - -/* line 156, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-br { - background: transparent no-repeat right -24px; } - -/* line 160, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-tl, .x-box-bl { - padding-left: 8px; - overflow: hidden; } - -/* line 165, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-tr, .x-box-br { - padding-right: 8px; - overflow: hidden; } - -/* line 170, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-tl { - background-image: url('images/gray/box/corners.gif'); } - -/* line 174, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-tc { - background-image: url('images/gray/box/tb.gif'); } - -/* line 178, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-tr { - background-image: url('images/gray/box/corners.gif'); } - -/* line 182, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-ml { - background-image: url('images/gray/box/l.gif'); } - -/* line 186, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-mc { - background-color: #eee; - background-image: url('images/gray/box/tb.gif'); - font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif; - color: #393939; - font-size: 15px; } - -/* line 194, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-mc h3 { - font-size: 18px; - font-weight: bold; } - -/* line 199, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-mr { - background-image: url('images/gray/box/r.gif'); } - -/* line 203, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-bl { - background-image: url('images/gray/box/corners.gif'); } - -/* line 207, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-bc { - background-image: url('images/gray/box/tb.gif'); } - -/* line 211, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-br { - background-image: url('images/gray/box/corners.gif'); } - -/* line 215, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr { - background-image: url('images/gray/box/corners-blue.gif'); } - -/* line 219, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc { - background-image: url('images/gray/box/tb-blue.gif'); } - -/* line 223, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-blue .x-box-mc { - background-color: #c3daf9; } - -/* line 227, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-blue .x-box-mc h3 { - color: #17385b; } - -/* line 231, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-blue .x-box-ml { - background-image: url('images/gray/box/l-blue.gif'); } - -/* line 235, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-box-blue .x-box-mr { - background-image: url('images/gray/box/r-blue.gif'); } - -/* line 239, ../themes/stylesheets/ext4/default/core/_core.scss */ -.x-container { - zoom: 1; } - /* line 244, ../themes/stylesheets/ext4/default/core/_core.scss */ - .x-container:before { - content: ""; - clear: both; - display: table; } - -/* line 254, ../themes/stylesheets/ext4/default/core/_core.scss */ -table.x-container:before, -tbody.x-container:before, -tr.x-container:before { - display: none; } - -/* line 1, ../themes/stylesheets/ext4/default/util/_focus.scss */ -.x-focus-element { - position: absolute; - top: -10px; - left: -10px; - width: 0px; - height: 0px; } - -/* line 9, ../themes/stylesheets/ext4/default/util/_focus.scss */ -.x-focus-frame { - position: absolute; - left: 0px; - top: 0px; - z-index: 100000000; - width: 0px; - height: 0px; } - -/* line 21, ../themes/stylesheets/ext4/default/util/_focus.scss */ -.x-focus-frame-top, -.x-focus-frame-bottom, -.x-focus-frame-left, -.x-focus-frame-right { - position: absolute; - top: 0px; - left: 0px; } - -/* line 28, ../themes/stylesheets/ext4/default/util/_focus.scss */ -.x-focus-frame-top, -.x-focus-frame-bottom { - border-top: solid 2px #15428b; - height: 2px; } - -/* line 34, ../themes/stylesheets/ext4/default/util/_focus.scss */ -.x-focus-frame-left, -.x-focus-frame-right { - border-left: solid 2px #15428b; - width: 2px; } - -/** - * Creates the base structure of a BoundList. - * @member Ext.view.BoundList - */ -/** - * Creates the base structure of an Ext.Button - * @member Ext.button.Button - */ -/** - * Creates a visual theme of an Ext.Button - * @member Ext.button.Button - */ -/** - * Creates the base structure of a button group. - * @member Ext.container.ButtonGroup - */ -/** - * Creates a visual theme of a button group. - * @member Ext.container.ButtonGroup - */ -/** - * Creates the base structure of a date picker. - * @member Ext.picker.Date - */ -/** - * Creates base structure for Ext.picker.Color - * @member Ext.picker.Color - */ -/** - * Creates the base structure of a Menu - * @member Ext.menu.Menu - */ -/** - * Create the base structure of an Ext.Panel - * @member Ext.panel.Panel - */ -/** - * Creates a visual theme for an Ext.Panel - * @member Ext.panel.Panel - */ -/** - * Creates base structure for Toolbar - * @member Ext.toolbar.Toolbar - */ -/** - * Creates a visual theme for an Toolbar. - * @param {String} $ui The name of the UI - * @param {Color} $background-color The background color of the toolbar (defaults to transparent) - * @param {Gradient/color-stops} $background-gradient The background gradient of the toolbar (defaults to null) - * @param {Color} $border-color The border color of the toolbar (defaults to null) - * @member Ext.toolbar.Toolbar - */ -/** - * Creates the base structure of Ext.form.Panel. - * @member Ext.form.Panel - */ -/** - * Creates the base structure of form field. - * @member Ext.form.field.Base - */ -/** - * Creates the base structure of FieldSet. - * @member Ext.form.FieldSet - */ -/** - * Creates the base structure of file field. - * @member Ext.form.field.File - */ -/** - * Creates the base structure of checkbox field. - * @member Ext.form.field.Checkbox - */ -/** - * Creates the base structure of CheckboxGroup. - * @member Ext.form.CheckboxGroup - */ -/** - * Creates the base structure of trigger field. - * @member Ext.form.field.Trigger - */ -/** - * Creates the base structure of HtmlEditor field. - * @member Ext.form.field.HtmlEditor - */ -/** - * Creates the base structure of QuickTip. - * @member Ext.tip.QuickTip - */ -/** - * Creates the base structure of an Ext.Window - * @member Ext.window.Window - */ -/** - * Creates a visual theme for an Ext.Panel - * @member Ext.window.Window - */ -/** - * Creates a visual theme for TabBar - * @member Ext.tab.Bar - */ -/** - * Creates the base structure of a Tab. - * @member Ext.tab.Tab - */ -/** - * Creates the base structure of slider. - * @member Ext.slider.Multi - */ -/** - * Creates base structure for a Grid. - * @member Ext.grid.Panel - */ -/** - * Creates the base structure of Tree. - * @member Ext.tree.Panel - */ -/* Styles for Ext.LoadMask */ -/* line 3, ../themes/stylesheets/ext4/default/widgets/_loadmask.scss */ -.x-mask { - z-index: 100; - position: absolute; - top: 0; - left: 0; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - opacity: 0.5; - width: 100%; - height: 100%; - zoom: 1; - background: #cccccc; } - -/* line 19, ../themes/stylesheets/ext4/default/widgets/_loadmask.scss */ -.x-mask-msg { - z-index: 20001; - position: absolute; - top: 0; - left: 0; - padding: 2px; - border: 1px solid; - border-color: #d0d0d0; - background-image: none; - background-color: #e0e0e0; } - /* line 38, ../themes/stylesheets/ext4/default/widgets/_loadmask.scss */ - .x-mask-msg div { - padding: 5px 10px 5px 25px; - background-image: url('images/gray/grid/loading.gif'); - background-repeat: no-repeat; - background-position: 5px center; - cursor: wait; - border: 1px solid #b3b3b3; - background-color: #eeeeee; - color: #222222; - font: normal 11px tahoma, arial, verdana, sans-serif; } - -/** - * Creates the base structure of an Ext.ProgressBar - * @member Ext.ProgressBar - */ -/** - * Creates a visual theme for an Ext.ProgressBar - * @member Ext.ProgressBar - */ -/** - * Creates base structure for a Draw Component. - * @member Ext.draw.Component - */ -/** - * Creates the base structure of Viewport. - * @member Ext.container.Viewport - */ -/** - * W3C suggested default style sheet for HTML 4: - * [http://www.w3.org/TR/CSS21/sample.html](http://www.w3.org/TR/CSS21/sample.html) - * - * @member Global_CSS - */ -/* line 6, ../themes/stylesheets/ext4/default/widgets/_boundlist.scss */ -.x-boundlist { - border-width: 1px; - border-style: solid; - border-color: #b5b8c8; - background: white; } - /* line 12, ../themes/stylesheets/ext4/default/widgets/_boundlist.scss */ - .x-boundlist .x-toolbar { - border-width: 1px 0 0 0; } - -/* line 22, ../themes/stylesheets/ext4/default/widgets/_boundlist.scss */ -.x-strict .x-ie6 .x-boundlist-list-ct, -.x-strict .x-ie7 .x-boundlist-list-ct { - position: relative; } - -/* line 29, ../themes/stylesheets/ext4/default/widgets/_boundlist.scss */ -.x-boundlist-item { - padding: 2px; - user-select: none; - -o-user-select: none; - -ms-user-select: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - cursor: default; - cursor: pointer; - cursor: hand; - position: relative; - /*allow hover in IE on empty items*/ - border-width: 1px; - border-style: dotted; - border-color: white; } - -/* line 43, ../themes/stylesheets/ext4/default/widgets/_boundlist.scss */ -.x-boundlist-selected { - background: #d3d3d3; - border-color: #b3abaa; } - -/* line 48, ../themes/stylesheets/ext4/default/widgets/_boundlist.scss */ -.x-boundlist-item-over { - background: #e0e0e0; - border-color: #bfb8b8; } - -/* line 53, ../themes/stylesheets/ext4/default/widgets/_boundlist.scss */ -.x-boundlist-floating { - border-top-width: 0; } - -/* line 57, ../themes/stylesheets/ext4/default/widgets/_boundlist.scss */ -.x-boundlist-above { - border-top-width: 1px; - border-bottom-width: 1px; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn { - display: inline-block; - zoom: 1; - *display: inline; - position: relative; - cursor: pointer; - cursor: hand; - white-space: nowrap; - vertical-align: middle; - background-repeat: no-repeat; } - /* line 19, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn * { - cursor: pointer; - cursor: hand; } - /* line 26, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn em { - background-repeat: no-repeat; } - /* line 30, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn em a { - text-decoration: none; - display: block; - color: inherit; - width: 100%; - zoom: 1; } - /* line 45, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn button { - width: 100%; - display: block; - margin: 0; - padding: 0; - border: 0; - background: none; - outline: 0 none; - overflow: hidden; - vertical-align: bottom; - -webkit-appearance: none; } - /* line 59, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn button::-moz-focus-inner { - border: 0; - padding: 0; } - /* line 65, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn .x-btn-inner { - display: block; - white-space: nowrap; - background-color: transparent; - background-repeat: no-repeat; - background-position: left center; - overflow: hidden; } - /* line 74, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn .x-btn-left .x-btn-inner { - text-align: left; } - /* line 78, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn .x-btn-center .x-btn-inner { - text-align: center; } - /* line 82, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn .x-btn-right .x-btn-inner { - text-align: right; } - -/* line 87, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-disabled span { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - opacity: 0.5; } - /* line 91, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-disabled span, .x-ie7 .x-btn-disabled span { - filter: none; } - -/* line 98, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie7 .x-btn-disabled, -.x-ie8 .x-btn-disabled { - filter: none; } - -/* line 105, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie6 .x-btn-disabled .x-btn-icon, -.x-ie7 .x-btn-disabled .x-btn-icon, -.x-ie8 .x-btn-disabled .x-btn-icon { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); - opacity: 0.6; } - -/* IE9 shows scrollbars in a button unless this is set */ -/* line 112, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie9 .x-btn button { - overflow: visible!important; } - -/* line 117, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -* html .x-ie .x-btn button { - width: 1px; } - -/* line 122, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie .x-btn button { - overflow-x: visible; - /*prevents extra horiz space in IE*/ - vertical-align: baseline; - /*IE doesn't like bottom*/ } - -/* line 129, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-strict .x-ie6 .x-btn .x-frame-mc, -.x-strict .x-ie7 .x-btn .x-frame-mc { - height: 100%; } - -/* Keep the selector simple ".x-btn .x-frame-mc" is enough to target the center frame of the button table */ -/* line 138, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn .x-frame-mc { - vertical-align: middle; - white-space: nowrap; - cursor: pointer; } - -/* Only center when all there is is text. Otherwise solo icons get centered. */ -/* line 147, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-noicon .x-frame-mc { - text-align: center; } - -/* line 153, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-icon-text-left .x-btn-icon { - background-position: left center; } - -/* line 157, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-icon-text-right .x-btn-icon { - background-position: right center; } - -/* line 161, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-icon-text-top .x-btn-icon { - background-position: center top; } - -/* line 165, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-icon-text-bottom .x-btn-icon { - background-position: center bottom; } - -/* line 170, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn button, .x-btn a { - position: relative; } - /* line 173, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn button .x-btn-icon, .x-btn a .x-btn-icon { - position: absolute; - background-repeat: no-repeat; } - -/* line 180, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-arrow-right { - background: transparent no-repeat right center; - padding-right: 12px; } - /* line 184, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn-arrow-right .x-btn-inner { - padding-right: 0 !important; } - -/* line 189, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-toolbar .x-btn-arrow-right { - padding-right: 12px; } - -/* line 193, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-arrow-bottom { - background: transparent no-repeat center bottom; - padding-bottom: 12px; } - -/* line 198, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-arrow { - background-image: url('images/gray/button/arrow.gif'); - display: block; } - -/* line 206, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-split-right, -.x-btn-over .x-btn-split-right { - background: transparent no-repeat right center; - background-image: url('images/gray/button/s-arrow.gif'); - padding-right: 14px !important; } - -/* line 213, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-split-bottom, -.x-btn-over .x-btn-split-bottom { - background: transparent no-repeat center bottom; - background-image: url('images/gray/button/s-arrow-b.gif'); - padding-bottom: 14px; } - -/* line 219, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-toolbar .x-btn-split-right { - background-image: url('images/gray/button/s-arrow-noline.gif'); - padding-right: 12px !important; } - -/* line 224, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-toolbar .x-btn-split-bottom { - background-image: url('images/gray/button/s-arrow-b-noline.gif'); } - -/* line 228, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-split { - display: block; } - -/* line 233, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-item-disabled, -.x-item-disabled * { - cursor: default; } - -/* line 237, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-cycle-fixed-width .x-btn-inner { - text-align: inherit; } - -/* line 241, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-over .x-btn-split-right { - background-image: url('images/gray/button/s-arrow-o.gif'); } - -/* line 242, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-over .x-btn-split-bottom { - background-image: url('images/gray/button/s-arrow-bo.gif'); } - -/* line 637, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small { - border-color: #bbbbbb; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-btn-default-small { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - -o-border-radius: 3px; - -ms-border-radius: 3px; - -khtml-border-radius: 3px; - border-radius: 3px; - padding: 2px 2px 2px 2px; - border-width: 1px; - border-style: solid; - background-image: none; - background-color: #f8f8f8; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eeeeee)); - background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background-image: -moz-linear-gradient(top, #ffffff, #eeeeee); - background-image: -o-linear-gradient(top, #ffffff, #eeeeee); - background-image: -ms-linear-gradient(top, #ffffff, #eeeeee); - background-image: linear-gradient(top, #ffffff, #eeeeee); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-btn-default-small-mc { - background-image: url('images/gray/btn/btn-default-small-bg.gif'); - background-color: #f8f8f8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-small { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100303px 1000303px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-small-tl, -.x-nbr .x-btn-default-small-bl, -.x-nbr .x-btn-default-small-tr, -.x-nbr .x-btn-default-small-br, -.x-nbr .x-btn-default-small-tc, -.x-nbr .x-btn-default-small-bc, -.x-nbr .x-btn-default-small-ml, -.x-nbr .x-btn-default-small-mr { - zoom: 1; - background-image: url('images/gray/btn/btn-default-small-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-small-ml, -.x-nbr .x-btn-default-small-mr { - zoom: 1; - background-image: url('images/gray/btn/btn-default-small-sides.gif'); - background-position: 0 0; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-small-mc { - padding: 0px 0px 0px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-btn-default-small-tl, -.x-strict .x-ie7 .x-btn-default-small-bl { - position: relative; - right: 0; } - -/* line 643, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small .x-btn-inner { - font-size: 11px; - font-weight: normal; - font-family: tahoma, arial, verdana, sans-serif; - color: #333333; - background-repeat: no-repeat; - padding: 0 4px; } - -/* line 656, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon button, -.x-btn-default-small-icon a, -.x-btn-default-small-icon .x-btn-inner, -.x-btn-default-small-noicon button, -.x-btn-default-small-noicon a, -.x-btn-default-small-noicon .x-btn-inner { - height: 16px; - line-height: 16px; } - -/* line 665, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon button, .x-btn-default-small-icon a { - padding: 0; } -/* line 669, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon .x-btn-inner { - /* even though there is no text we set a width and padding as buttons shrink-wrap around this element */ - width: 16px; - padding: 0; } -/* line 675, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon .x-btn-icon { - width: 16px; - height: 16px; - top: 0; - left: 0; - bottom: 0; - right: 0; } - -/* line 687, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-left button, .x-btn-default-small-icon-text-left a { - height: 16px; } -/* line 690, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-left .x-btn-inner { - height: 16px; - line-height: 16px; - padding-left: 20px; } -/* line 696, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-left .x-btn-icon { - width: 16px; - height: auto; - top: 0; - left: 0; - bottom: 0; - right: auto; } - /* line 705, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-small-icon-text-left .x-btn-icon, .x-quirks .x-btn-default-small-icon-text-left .x-btn-icon { - height: 16px; } - -/* line 713, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-right button, .x-btn-default-small-icon-text-right a { - height: 16px; } -/* line 716, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-right .x-btn-inner { - height: 16px; - line-height: 16px; - padding-right: 20px !important; } -/* line 722, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-right .x-btn-icon { - width: 16px; - height: auto; - top: 0; - left: auto; - bottom: 0; - right: 0; } - /* line 731, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-small-icon-text-right .x-btn-icon, .x-quirks .x-btn-default-small-icon-text-right .x-btn-icon { - height: 16px; } - -/* line 738, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-top .x-btn-inner { - padding-top: 20px; } -/* line 742, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-top .x-btn-icon { - width: auto; - height: 16px; - top: 0; - left: 0; - bottom: auto; - right: 0; } - /* line 751, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-small-icon-text-top .x-btn-icon, .x-quirks .x-ie .x-btn-default-small-icon-text-top .x-btn-icon { - width: 16px; } - -/* line 758, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-bottom .x-btn-inner { - padding-bottom: 20px; } -/* line 762, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-icon-text-bottom .x-btn-icon { - width: auto; - height: 16px; - top: auto; - left: 0; - bottom: 0; - right: 0; } - /* line 771, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-small-icon-text-bottom .x-btn-icon, .x-quirks .x-ie .x-btn-default-small-icon-text-bottom .x-btn-icon { - width: 16px; } - -/* line 777, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-over { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 801, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-focus { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 826, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-menu-active, -.x-btn-default-small-pressed { - border-color: #9d9d9d; - background-image: none; - background-color: #d6d6d6; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); - background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -ms-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: linear-gradient(top, #c7c7c7, #e0e0e0); } - -/* line 850, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-small-disabled { - border-color: #d7d7d7; - background-image: none; - background-color: #ececec; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #e2e2e2)); - background-image: -webkit-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: -moz-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: -o-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: -ms-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: linear-gradient(top, #f4f4f4, #e2e2e2); } - /* line 858, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn-default-small-disabled .x-btn-inner { - color: #333333 !important; } - -/* line 875, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie .x-btn-default-small-disabled .x-btn-inner { - color: #595959 !important; } - -/* line 883, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie6 .x-btn-default-small-disabled .x-btn-inner { - color: #8c8c8c !important; } - -/* line 898, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-over .x-frame-tl, -.x-nbr .x-btn-default-small-over .x-frame-bl, -.x-nbr .x-btn-default-small-over .x-frame-tr, -.x-nbr .x-btn-default-small-over .x-frame-br, -.x-nbr .x-btn-default-small-over .x-frame-tc, -.x-nbr .x-btn-default-small-over .x-frame-bc { - background-image: url('images/gray/btn/btn-default-small-over-corners.gif'); } -/* line 902, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-over .x-frame-ml, -.x-nbr .x-btn-default-small-over .x-frame-mr { - background-image: url('images/gray/btn/btn-default-small-over-sides.gif'); } -/* line 905, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-over .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-small-over-bg.gif'); } -/* line 919, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-focus .x-frame-tl, -.x-nbr .x-btn-default-small-focus .x-frame-bl, -.x-nbr .x-btn-default-small-focus .x-frame-tr, -.x-nbr .x-btn-default-small-focus .x-frame-br, -.x-nbr .x-btn-default-small-focus .x-frame-tc, -.x-nbr .x-btn-default-small-focus .x-frame-bc { - background-image: url('images/gray/btn/btn-default-small-focus-corners.gif'); } -/* line 923, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-focus .x-frame-ml, -.x-nbr .x-btn-default-small-focus .x-frame-mr { - background-image: url('images/gray/btn/btn-default-small-focus-sides.gif'); } -/* line 926, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-focus .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-small-focus-bg.gif'); } -/* line 941, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-menu-active .x-frame-tl, -.x-nbr .x-btn-default-small-menu-active .x-frame-bl, -.x-nbr .x-btn-default-small-menu-active .x-frame-tr, -.x-nbr .x-btn-default-small-menu-active .x-frame-br, -.x-nbr .x-btn-default-small-menu-active .x-frame-tc, -.x-nbr .x-btn-default-small-menu-active .x-frame-bc, -.x-nbr .x-btn-default-small-pressed .x-frame-tl, -.x-nbr .x-btn-default-small-pressed .x-frame-bl, -.x-nbr .x-btn-default-small-pressed .x-frame-tr, -.x-nbr .x-btn-default-small-pressed .x-frame-br, -.x-nbr .x-btn-default-small-pressed .x-frame-tc, -.x-nbr .x-btn-default-small-pressed .x-frame-bc { - background-image: url('images/gray/btn/btn-default-small-pressed-corners.gif'); } -/* line 945, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-menu-active .x-frame-ml, -.x-nbr .x-btn-default-small-menu-active .x-frame-mr, -.x-nbr .x-btn-default-small-pressed .x-frame-ml, -.x-nbr .x-btn-default-small-pressed .x-frame-mr { - background-image: url('images/gray/btn/btn-default-small-pressed-sides.gif'); } -/* line 948, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-menu-active .x-frame-mc, -.x-nbr .x-btn-default-small-pressed .x-frame-mc { - background-color: #d6d6d6; - background-image: url('images/gray/btn/btn-default-small-pressed-bg.gif'); } -/* line 962, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-disabled .x-frame-tl, -.x-nbr .x-btn-default-small-disabled .x-frame-bl, -.x-nbr .x-btn-default-small-disabled .x-frame-tr, -.x-nbr .x-btn-default-small-disabled .x-frame-br, -.x-nbr .x-btn-default-small-disabled .x-frame-tc, -.x-nbr .x-btn-default-small-disabled .x-frame-bc { - background-image: url('images/gray/btn/btn-default-small-disabled-corners.gif'); } -/* line 966, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-disabled .x-frame-ml, -.x-nbr .x-btn-default-small-disabled .x-frame-mr { - background-image: url('images/gray/btn/btn-default-small-disabled-sides.gif'); } -/* line 969, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-small-disabled .x-frame-mc { - background-color: #ececec; - background-image: url('images/gray/btn/btn-default-small-disabled-bg.gif'); } - -/* line 982, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-small { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-small-bg.gif'); } - -/* line 991, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-small-over { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-small-over-bg.gif'); } - -/* line 1000, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-small-focus { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-small-focus-bg.gif'); } - -/* line 1010, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-small-menu-active, -.x-nlg .x-btn-default-small-pressed { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-small-pressed-bg.gif'); } - -/* line 1019, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-small-disabled { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-small-disabled-bg.gif'); } - -/* line 637, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium { - border-color: #bbbbbb; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-btn-default-medium { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - -o-border-radius: 3px; - -ms-border-radius: 3px; - -khtml-border-radius: 3px; - border-radius: 3px; - padding: 3px 3px 3px 3px; - border-width: 1px; - border-style: solid; - background-image: none; - background-color: #f8f8f8; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eeeeee)); - background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background-image: -moz-linear-gradient(top, #ffffff, #eeeeee); - background-image: -o-linear-gradient(top, #ffffff, #eeeeee); - background-image: -ms-linear-gradient(top, #ffffff, #eeeeee); - background-image: linear-gradient(top, #ffffff, #eeeeee); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-btn-default-medium-mc { - background-image: url('images/gray/btn/btn-default-medium-bg.gif'); - background-color: #f8f8f8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-medium { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100303px 1000303px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-medium-tl, -.x-nbr .x-btn-default-medium-bl, -.x-nbr .x-btn-default-medium-tr, -.x-nbr .x-btn-default-medium-br, -.x-nbr .x-btn-default-medium-tc, -.x-nbr .x-btn-default-medium-bc, -.x-nbr .x-btn-default-medium-ml, -.x-nbr .x-btn-default-medium-mr { - zoom: 1; - background-image: url('images/gray/btn/btn-default-medium-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-medium-ml, -.x-nbr .x-btn-default-medium-mr { - zoom: 1; - background-image: url('images/gray/btn/btn-default-medium-sides.gif'); - background-position: 0 0; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-medium-mc { - padding: 1px 1px 1px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-btn-default-medium-tl, -.x-strict .x-ie7 .x-btn-default-medium-bl { - position: relative; - right: 0; } - -/* line 643, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium .x-btn-inner { - font-size: 11px; - font-weight: normal; - font-family: tahoma, arial, verdana, sans-serif; - color: #333333; - background-repeat: no-repeat; - padding: 0 3px; } - -/* line 656, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon button, -.x-btn-default-medium-icon a, -.x-btn-default-medium-icon .x-btn-inner, -.x-btn-default-medium-noicon button, -.x-btn-default-medium-noicon a, -.x-btn-default-medium-noicon .x-btn-inner { - height: 24px; - line-height: 24px; } - -/* line 665, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon button, .x-btn-default-medium-icon a { - padding: 0; } -/* line 669, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon .x-btn-inner { - /* even though there is no text we set a width and padding as buttons shrink-wrap around this element */ - width: 24px; - padding: 0; } -/* line 675, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon .x-btn-icon { - width: 24px; - height: 24px; - top: 0; - left: 0; - bottom: 0; - right: 0; } - -/* line 687, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-left button, .x-btn-default-medium-icon-text-left a { - height: 24px; } -/* line 690, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-left .x-btn-inner { - height: 24px; - line-height: 24px; - padding-left: 28px; } -/* line 696, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-left .x-btn-icon { - width: 24px; - height: auto; - top: 0; - left: 0; - bottom: 0; - right: auto; } - /* line 705, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-medium-icon-text-left .x-btn-icon, .x-quirks .x-btn-default-medium-icon-text-left .x-btn-icon { - height: 24px; } - -/* line 713, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-right button, .x-btn-default-medium-icon-text-right a { - height: 24px; } -/* line 716, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-right .x-btn-inner { - height: 24px; - line-height: 24px; - padding-right: 28px !important; } -/* line 722, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-right .x-btn-icon { - width: 24px; - height: auto; - top: 0; - left: auto; - bottom: 0; - right: 0; } - /* line 731, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-medium-icon-text-right .x-btn-icon, .x-quirks .x-btn-default-medium-icon-text-right .x-btn-icon { - height: 24px; } - -/* line 738, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-top .x-btn-inner { - padding-top: 28px; } -/* line 742, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-top .x-btn-icon { - width: auto; - height: 24px; - top: 0; - left: 0; - bottom: auto; - right: 0; } - /* line 751, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-medium-icon-text-top .x-btn-icon, .x-quirks .x-ie .x-btn-default-medium-icon-text-top .x-btn-icon { - width: 24px; } - -/* line 758, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-bottom .x-btn-inner { - padding-bottom: 28px; } -/* line 762, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-icon-text-bottom .x-btn-icon { - width: auto; - height: 24px; - top: auto; - left: 0; - bottom: 0; - right: 0; } - /* line 771, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-medium-icon-text-bottom .x-btn-icon, .x-quirks .x-ie .x-btn-default-medium-icon-text-bottom .x-btn-icon { - width: 24px; } - -/* line 777, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-over { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 801, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-focus { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 826, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-menu-active, -.x-btn-default-medium-pressed { - border-color: #9d9d9d; - background-image: none; - background-color: #d6d6d6; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); - background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -ms-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: linear-gradient(top, #c7c7c7, #e0e0e0); } - -/* line 850, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-medium-disabled { - border-color: #d7d7d7; - background-image: none; - background-color: #ececec; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #e2e2e2)); - background-image: -webkit-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: -moz-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: -o-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: -ms-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: linear-gradient(top, #f4f4f4, #e2e2e2); } - /* line 858, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn-default-medium-disabled .x-btn-inner { - color: #333333 !important; } - -/* line 875, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie .x-btn-default-medium-disabled .x-btn-inner { - color: #595959 !important; } - -/* line 883, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie6 .x-btn-default-medium-disabled .x-btn-inner { - color: #8c8c8c !important; } - -/* line 898, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-over .x-frame-tl, -.x-nbr .x-btn-default-medium-over .x-frame-bl, -.x-nbr .x-btn-default-medium-over .x-frame-tr, -.x-nbr .x-btn-default-medium-over .x-frame-br, -.x-nbr .x-btn-default-medium-over .x-frame-tc, -.x-nbr .x-btn-default-medium-over .x-frame-bc { - background-image: url('images/gray/btn/btn-default-medium-over-corners.gif'); } -/* line 902, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-over .x-frame-ml, -.x-nbr .x-btn-default-medium-over .x-frame-mr { - background-image: url('images/gray/btn/btn-default-medium-over-sides.gif'); } -/* line 905, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-over .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-medium-over-bg.gif'); } -/* line 919, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-focus .x-frame-tl, -.x-nbr .x-btn-default-medium-focus .x-frame-bl, -.x-nbr .x-btn-default-medium-focus .x-frame-tr, -.x-nbr .x-btn-default-medium-focus .x-frame-br, -.x-nbr .x-btn-default-medium-focus .x-frame-tc, -.x-nbr .x-btn-default-medium-focus .x-frame-bc { - background-image: url('images/gray/btn/btn-default-medium-focus-corners.gif'); } -/* line 923, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-focus .x-frame-ml, -.x-nbr .x-btn-default-medium-focus .x-frame-mr { - background-image: url('images/gray/btn/btn-default-medium-focus-sides.gif'); } -/* line 926, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-focus .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-medium-focus-bg.gif'); } -/* line 941, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-menu-active .x-frame-tl, -.x-nbr .x-btn-default-medium-menu-active .x-frame-bl, -.x-nbr .x-btn-default-medium-menu-active .x-frame-tr, -.x-nbr .x-btn-default-medium-menu-active .x-frame-br, -.x-nbr .x-btn-default-medium-menu-active .x-frame-tc, -.x-nbr .x-btn-default-medium-menu-active .x-frame-bc, -.x-nbr .x-btn-default-medium-pressed .x-frame-tl, -.x-nbr .x-btn-default-medium-pressed .x-frame-bl, -.x-nbr .x-btn-default-medium-pressed .x-frame-tr, -.x-nbr .x-btn-default-medium-pressed .x-frame-br, -.x-nbr .x-btn-default-medium-pressed .x-frame-tc, -.x-nbr .x-btn-default-medium-pressed .x-frame-bc { - background-image: url('images/gray/btn/btn-default-medium-pressed-corners.gif'); } -/* line 945, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-menu-active .x-frame-ml, -.x-nbr .x-btn-default-medium-menu-active .x-frame-mr, -.x-nbr .x-btn-default-medium-pressed .x-frame-ml, -.x-nbr .x-btn-default-medium-pressed .x-frame-mr { - background-image: url('images/gray/btn/btn-default-medium-pressed-sides.gif'); } -/* line 948, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-menu-active .x-frame-mc, -.x-nbr .x-btn-default-medium-pressed .x-frame-mc { - background-color: #d6d6d6; - background-image: url('images/gray/btn/btn-default-medium-pressed-bg.gif'); } -/* line 962, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-disabled .x-frame-tl, -.x-nbr .x-btn-default-medium-disabled .x-frame-bl, -.x-nbr .x-btn-default-medium-disabled .x-frame-tr, -.x-nbr .x-btn-default-medium-disabled .x-frame-br, -.x-nbr .x-btn-default-medium-disabled .x-frame-tc, -.x-nbr .x-btn-default-medium-disabled .x-frame-bc { - background-image: url('images/gray/btn/btn-default-medium-disabled-corners.gif'); } -/* line 966, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-disabled .x-frame-ml, -.x-nbr .x-btn-default-medium-disabled .x-frame-mr { - background-image: url('images/gray/btn/btn-default-medium-disabled-sides.gif'); } -/* line 969, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-medium-disabled .x-frame-mc { - background-color: #ececec; - background-image: url('images/gray/btn/btn-default-medium-disabled-bg.gif'); } - -/* line 982, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-medium { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-medium-bg.gif'); } - -/* line 991, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-medium-over { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-medium-over-bg.gif'); } - -/* line 1000, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-medium-focus { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-medium-focus-bg.gif'); } - -/* line 1010, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-medium-menu-active, -.x-nlg .x-btn-default-medium-pressed { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-medium-pressed-bg.gif'); } - -/* line 1019, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-medium-disabled { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-medium-disabled-bg.gif'); } - -/* line 637, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large { - border-color: #bbbbbb; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-btn-default-large { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - -o-border-radius: 3px; - -ms-border-radius: 3px; - -khtml-border-radius: 3px; - border-radius: 3px; - padding: 3px 3px 3px 3px; - border-width: 1px; - border-style: solid; - background-image: none; - background-color: #f8f8f8; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eeeeee)); - background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background-image: -moz-linear-gradient(top, #ffffff, #eeeeee); - background-image: -o-linear-gradient(top, #ffffff, #eeeeee); - background-image: -ms-linear-gradient(top, #ffffff, #eeeeee); - background-image: linear-gradient(top, #ffffff, #eeeeee); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-btn-default-large-mc { - background-image: url('images/gray/btn/btn-default-large-bg.gif'); - background-color: #f8f8f8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-large { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100303px 1000303px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-large-tl, -.x-nbr .x-btn-default-large-bl, -.x-nbr .x-btn-default-large-tr, -.x-nbr .x-btn-default-large-br, -.x-nbr .x-btn-default-large-tc, -.x-nbr .x-btn-default-large-bc, -.x-nbr .x-btn-default-large-ml, -.x-nbr .x-btn-default-large-mr { - zoom: 1; - background-image: url('images/gray/btn/btn-default-large-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-large-ml, -.x-nbr .x-btn-default-large-mr { - zoom: 1; - background-image: url('images/gray/btn/btn-default-large-sides.gif'); - background-position: 0 0; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-large-mc { - padding: 1px 1px 1px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-btn-default-large-tl, -.x-strict .x-ie7 .x-btn-default-large-bl { - position: relative; - right: 0; } - -/* line 643, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large .x-btn-inner { - font-size: 11px; - font-weight: normal; - font-family: tahoma, arial, verdana, sans-serif; - color: #333333; - background-repeat: no-repeat; - padding: 0 3px; } - -/* line 656, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon button, -.x-btn-default-large-icon a, -.x-btn-default-large-icon .x-btn-inner, -.x-btn-default-large-noicon button, -.x-btn-default-large-noicon a, -.x-btn-default-large-noicon .x-btn-inner { - height: 32px; - line-height: 32px; } - -/* line 665, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon button, .x-btn-default-large-icon a { - padding: 0; } -/* line 669, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon .x-btn-inner { - /* even though there is no text we set a width and padding as buttons shrink-wrap around this element */ - width: 32px; - padding: 0; } -/* line 675, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon .x-btn-icon { - width: 32px; - height: 32px; - top: 0; - left: 0; - bottom: 0; - right: 0; } - -/* line 687, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-left button, .x-btn-default-large-icon-text-left a { - height: 32px; } -/* line 690, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-left .x-btn-inner { - height: 32px; - line-height: 32px; - padding-left: 36px; } -/* line 696, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-left .x-btn-icon { - width: 32px; - height: auto; - top: 0; - left: 0; - bottom: 0; - right: auto; } - /* line 705, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-large-icon-text-left .x-btn-icon, .x-quirks .x-btn-default-large-icon-text-left .x-btn-icon { - height: 32px; } - -/* line 713, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-right button, .x-btn-default-large-icon-text-right a { - height: 32px; } -/* line 716, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-right .x-btn-inner { - height: 32px; - line-height: 32px; - padding-right: 36px !important; } -/* line 722, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-right .x-btn-icon { - width: 32px; - height: auto; - top: 0; - left: auto; - bottom: 0; - right: 0; } - /* line 731, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-large-icon-text-right .x-btn-icon, .x-quirks .x-btn-default-large-icon-text-right .x-btn-icon { - height: 32px; } - -/* line 738, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-top .x-btn-inner { - padding-top: 36px; } -/* line 742, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-top .x-btn-icon { - width: auto; - height: 32px; - top: 0; - left: 0; - bottom: auto; - right: 0; } - /* line 751, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-large-icon-text-top .x-btn-icon, .x-quirks .x-ie .x-btn-default-large-icon-text-top .x-btn-icon { - width: 32px; } - -/* line 758, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-bottom .x-btn-inner { - padding-bottom: 36px; } -/* line 762, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-icon-text-bottom .x-btn-icon { - width: auto; - height: 32px; - top: auto; - left: 0; - bottom: 0; - right: 0; } - /* line 771, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-large-icon-text-bottom .x-btn-icon, .x-quirks .x-ie .x-btn-default-large-icon-text-bottom .x-btn-icon { - width: 32px; } - -/* line 777, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-over { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 801, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-focus { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 826, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-menu-active, -.x-btn-default-large-pressed { - border-color: #9d9d9d; - background-image: none; - background-color: #d6d6d6; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); - background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -ms-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: linear-gradient(top, #c7c7c7, #e0e0e0); } - -/* line 850, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-large-disabled { - border-color: #d7d7d7; - background-image: none; - background-color: #ececec; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #e2e2e2)); - background-image: -webkit-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: -moz-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: -o-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: -ms-linear-gradient(top, #f4f4f4, #e2e2e2); - background-image: linear-gradient(top, #f4f4f4, #e2e2e2); } - /* line 858, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn-default-large-disabled .x-btn-inner { - color: #333333 !important; } - -/* line 875, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie .x-btn-default-large-disabled .x-btn-inner { - color: #595959 !important; } - -/* line 883, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie6 .x-btn-default-large-disabled .x-btn-inner { - color: #8c8c8c !important; } - -/* line 898, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-over .x-frame-tl, -.x-nbr .x-btn-default-large-over .x-frame-bl, -.x-nbr .x-btn-default-large-over .x-frame-tr, -.x-nbr .x-btn-default-large-over .x-frame-br, -.x-nbr .x-btn-default-large-over .x-frame-tc, -.x-nbr .x-btn-default-large-over .x-frame-bc { - background-image: url('images/gray/btn/btn-default-large-over-corners.gif'); } -/* line 902, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-over .x-frame-ml, -.x-nbr .x-btn-default-large-over .x-frame-mr { - background-image: url('images/gray/btn/btn-default-large-over-sides.gif'); } -/* line 905, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-over .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-large-over-bg.gif'); } -/* line 919, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-focus .x-frame-tl, -.x-nbr .x-btn-default-large-focus .x-frame-bl, -.x-nbr .x-btn-default-large-focus .x-frame-tr, -.x-nbr .x-btn-default-large-focus .x-frame-br, -.x-nbr .x-btn-default-large-focus .x-frame-tc, -.x-nbr .x-btn-default-large-focus .x-frame-bc { - background-image: url('images/gray/btn/btn-default-large-focus-corners.gif'); } -/* line 923, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-focus .x-frame-ml, -.x-nbr .x-btn-default-large-focus .x-frame-mr { - background-image: url('images/gray/btn/btn-default-large-focus-sides.gif'); } -/* line 926, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-focus .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-large-focus-bg.gif'); } -/* line 941, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-menu-active .x-frame-tl, -.x-nbr .x-btn-default-large-menu-active .x-frame-bl, -.x-nbr .x-btn-default-large-menu-active .x-frame-tr, -.x-nbr .x-btn-default-large-menu-active .x-frame-br, -.x-nbr .x-btn-default-large-menu-active .x-frame-tc, -.x-nbr .x-btn-default-large-menu-active .x-frame-bc, -.x-nbr .x-btn-default-large-pressed .x-frame-tl, -.x-nbr .x-btn-default-large-pressed .x-frame-bl, -.x-nbr .x-btn-default-large-pressed .x-frame-tr, -.x-nbr .x-btn-default-large-pressed .x-frame-br, -.x-nbr .x-btn-default-large-pressed .x-frame-tc, -.x-nbr .x-btn-default-large-pressed .x-frame-bc { - background-image: url('images/gray/btn/btn-default-large-pressed-corners.gif'); } -/* line 945, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-menu-active .x-frame-ml, -.x-nbr .x-btn-default-large-menu-active .x-frame-mr, -.x-nbr .x-btn-default-large-pressed .x-frame-ml, -.x-nbr .x-btn-default-large-pressed .x-frame-mr { - background-image: url('images/gray/btn/btn-default-large-pressed-sides.gif'); } -/* line 948, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-menu-active .x-frame-mc, -.x-nbr .x-btn-default-large-pressed .x-frame-mc { - background-color: #d6d6d6; - background-image: url('images/gray/btn/btn-default-large-pressed-bg.gif'); } -/* line 962, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-disabled .x-frame-tl, -.x-nbr .x-btn-default-large-disabled .x-frame-bl, -.x-nbr .x-btn-default-large-disabled .x-frame-tr, -.x-nbr .x-btn-default-large-disabled .x-frame-br, -.x-nbr .x-btn-default-large-disabled .x-frame-tc, -.x-nbr .x-btn-default-large-disabled .x-frame-bc { - background-image: url('images/gray/btn/btn-default-large-disabled-corners.gif'); } -/* line 966, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-disabled .x-frame-ml, -.x-nbr .x-btn-default-large-disabled .x-frame-mr { - background-image: url('images/gray/btn/btn-default-large-disabled-sides.gif'); } -/* line 969, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-large-disabled .x-frame-mc { - background-color: #ececec; - background-image: url('images/gray/btn/btn-default-large-disabled-bg.gif'); } - -/* line 982, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-large { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-large-bg.gif'); } - -/* line 991, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-large-over { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-large-over-bg.gif'); } - -/* line 1000, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-large-focus { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-large-focus-bg.gif'); } - -/* line 1010, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-large-menu-active, -.x-nlg .x-btn-default-large-pressed { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-large-pressed-bg.gif'); } - -/* line 1019, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-large-disabled { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-large-disabled-bg.gif'); } - -/* line 637, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small { - border-color: transparent; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-btn-default-toolbar-small { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - -o-border-radius: 3px; - -ms-border-radius: 3px; - -khtml-border-radius: 3px; - border-radius: 3px; - padding: 2px 2px 2px 2px; - border-width: 1px; - border-style: solid; - background-color: transparent; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-btn-default-toolbar-small-mc { - background-color: transparent; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-small { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100303px 1000303px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-small-tl, -.x-nbr .x-btn-default-toolbar-small-bl, -.x-nbr .x-btn-default-toolbar-small-tr, -.x-nbr .x-btn-default-toolbar-small-br, -.x-nbr .x-btn-default-toolbar-small-tc, -.x-nbr .x-btn-default-toolbar-small-bc, -.x-nbr .x-btn-default-toolbar-small-ml, -.x-nbr .x-btn-default-toolbar-small-mr { - zoom: 1; } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-small-ml, -.x-nbr .x-btn-default-toolbar-small-mr { - zoom: 1; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-small-mc { - padding: 0px 0px 0px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-btn-default-toolbar-small-tl, -.x-strict .x-ie7 .x-btn-default-toolbar-small-bl { - position: relative; - right: 0; } - -/* line 643, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small .x-btn-inner { - font-size: 11px; - font-weight: normal; - font-family: tahoma, arial, verdana, sans-serif; - color: #333333; - background-repeat: no-repeat; - padding: 0 4px; } - -/* line 656, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon button, -.x-btn-default-toolbar-small-icon a, -.x-btn-default-toolbar-small-icon .x-btn-inner, -.x-btn-default-toolbar-small-noicon button, -.x-btn-default-toolbar-small-noicon a, -.x-btn-default-toolbar-small-noicon .x-btn-inner { - height: 16px; - line-height: 16px; } - -/* line 665, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon button, .x-btn-default-toolbar-small-icon a { - padding: 0; } -/* line 669, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon .x-btn-inner { - /* even though there is no text we set a width and padding as buttons shrink-wrap around this element */ - width: 16px; - padding: 0; } -/* line 675, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon .x-btn-icon { - width: 16px; - height: 16px; - top: 0; - left: 0; - bottom: 0; - right: 0; } - -/* line 687, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-left button, .x-btn-default-toolbar-small-icon-text-left a { - height: 16px; } -/* line 690, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-left .x-btn-inner { - height: 16px; - line-height: 16px; - padding-left: 20px; } -/* line 696, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-left .x-btn-icon { - width: 16px; - height: auto; - top: 0; - left: 0; - bottom: 0; - right: auto; } - /* line 705, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-small-icon-text-left .x-btn-icon, .x-quirks .x-btn-default-toolbar-small-icon-text-left .x-btn-icon { - height: 16px; } - -/* line 713, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-right button, .x-btn-default-toolbar-small-icon-text-right a { - height: 16px; } -/* line 716, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-right .x-btn-inner { - height: 16px; - line-height: 16px; - padding-right: 20px !important; } -/* line 722, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-right .x-btn-icon { - width: 16px; - height: auto; - top: 0; - left: auto; - bottom: 0; - right: 0; } - /* line 731, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-small-icon-text-right .x-btn-icon, .x-quirks .x-btn-default-toolbar-small-icon-text-right .x-btn-icon { - height: 16px; } - -/* line 738, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-top .x-btn-inner { - padding-top: 20px; } -/* line 742, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-top .x-btn-icon { - width: auto; - height: 16px; - top: 0; - left: 0; - bottom: auto; - right: 0; } - /* line 751, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-small-icon-text-top .x-btn-icon, .x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-top .x-btn-icon { - width: 16px; } - -/* line 758, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-bottom .x-btn-inner { - padding-bottom: 20px; } -/* line 762, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon { - width: auto; - height: 16px; - top: auto; - left: 0; - bottom: 0; - right: 0; } - /* line 771, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon, .x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon { - width: 16px; } - -/* line 777, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-over { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 801, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-focus { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 826, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-menu-active, -.x-btn-default-toolbar-small-pressed { - border-color: #9d9d9d; - background-image: none; - background-color: #d6d6d6; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); - background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -ms-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: linear-gradient(top, #c7c7c7, #e0e0e0); } - -/* line 850, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-disabled { - border-color: #d7d7d7; - background-image: none; - background-color: transparent; } - /* line 858, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn-default-toolbar-small-disabled .x-btn-inner { - color: #333333 !important; } - -/* line 875, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie .x-btn-default-toolbar-small-disabled .x-btn-inner { - color: #595959 !important; } - -/* line 883, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie6 .x-btn-default-toolbar-small-disabled .x-btn-inner { - color: #8c8c8c !important; } - -/* line 898, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-over .x-frame-tl, -.x-nbr .x-btn-default-toolbar-small-over .x-frame-bl, -.x-nbr .x-btn-default-toolbar-small-over .x-frame-tr, -.x-nbr .x-btn-default-toolbar-small-over .x-frame-br, -.x-nbr .x-btn-default-toolbar-small-over .x-frame-tc, -.x-nbr .x-btn-default-toolbar-small-over .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-small-over-corners.gif'); } -/* line 902, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-over .x-frame-ml, -.x-nbr .x-btn-default-toolbar-small-over .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-small-over-sides.gif'); } -/* line 905, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-over .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-toolbar-small-over-bg.gif'); } -/* line 919, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-focus .x-frame-tl, -.x-nbr .x-btn-default-toolbar-small-focus .x-frame-bl, -.x-nbr .x-btn-default-toolbar-small-focus .x-frame-tr, -.x-nbr .x-btn-default-toolbar-small-focus .x-frame-br, -.x-nbr .x-btn-default-toolbar-small-focus .x-frame-tc, -.x-nbr .x-btn-default-toolbar-small-focus .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-small-focus-corners.gif'); } -/* line 923, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-focus .x-frame-ml, -.x-nbr .x-btn-default-toolbar-small-focus .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-small-focus-sides.gif'); } -/* line 926, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-focus .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-toolbar-small-focus-bg.gif'); } -/* line 941, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-tl, -.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-bl, -.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-tr, -.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-br, -.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-tc, -.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-bc, -.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-tl, -.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-bl, -.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-tr, -.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-br, -.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-tc, -.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-small-pressed-corners.gif'); } -/* line 945, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-ml, -.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-mr, -.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-ml, -.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-small-pressed-sides.gif'); } -/* line 948, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-mc, -.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-mc { - background-color: #d6d6d6; - background-image: url('images/gray/btn/btn-default-toolbar-small-pressed-bg.gif'); } -/* line 962, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-tl, -.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-bl, -.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-tr, -.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-br, -.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-tc, -.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-small-disabled-corners.gif'); } -/* line 966, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-ml, -.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-small-disabled-sides.gif'); } -/* line 969, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-mc { - background-color: transparent; } - -/* line 991, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-toolbar-small-over { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-toolbar-small-over-bg.gif'); } - -/* line 1000, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-toolbar-small-focus { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-toolbar-small-focus-bg.gif'); } - -/* line 1010, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-toolbar-small-menu-active, -.x-nlg .x-btn-default-toolbar-small-pressed { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-toolbar-small-pressed-bg.gif'); } - -/* line 637, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium { - border-color: transparent; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-btn-default-toolbar-medium { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - -o-border-radius: 3px; - -ms-border-radius: 3px; - -khtml-border-radius: 3px; - border-radius: 3px; - padding: 3px 3px 3px 3px; - border-width: 1px; - border-style: solid; - background-color: transparent; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-btn-default-toolbar-medium-mc { - background-color: transparent; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-medium { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100303px 1000303px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-medium-tl, -.x-nbr .x-btn-default-toolbar-medium-bl, -.x-nbr .x-btn-default-toolbar-medium-tr, -.x-nbr .x-btn-default-toolbar-medium-br, -.x-nbr .x-btn-default-toolbar-medium-tc, -.x-nbr .x-btn-default-toolbar-medium-bc, -.x-nbr .x-btn-default-toolbar-medium-ml, -.x-nbr .x-btn-default-toolbar-medium-mr { - zoom: 1; } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-medium-ml, -.x-nbr .x-btn-default-toolbar-medium-mr { - zoom: 1; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-medium-mc { - padding: 1px 1px 1px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-btn-default-toolbar-medium-tl, -.x-strict .x-ie7 .x-btn-default-toolbar-medium-bl { - position: relative; - right: 0; } - -/* line 643, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium .x-btn-inner { - font-size: 11px; - font-weight: normal; - font-family: tahoma, arial, verdana, sans-serif; - color: #333333; - background-repeat: no-repeat; - padding: 0 3px; } - -/* line 656, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon button, -.x-btn-default-toolbar-medium-icon a, -.x-btn-default-toolbar-medium-icon .x-btn-inner, -.x-btn-default-toolbar-medium-noicon button, -.x-btn-default-toolbar-medium-noicon a, -.x-btn-default-toolbar-medium-noicon .x-btn-inner { - height: 24px; - line-height: 24px; } - -/* line 665, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon button, .x-btn-default-toolbar-medium-icon a { - padding: 0; } -/* line 669, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon .x-btn-inner { - /* even though there is no text we set a width and padding as buttons shrink-wrap around this element */ - width: 24px; - padding: 0; } -/* line 675, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon .x-btn-icon { - width: 24px; - height: 24px; - top: 0; - left: 0; - bottom: 0; - right: 0; } - -/* line 687, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-left button, .x-btn-default-toolbar-medium-icon-text-left a { - height: 24px; } -/* line 690, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-left .x-btn-inner { - height: 24px; - line-height: 24px; - padding-left: 28px; } -/* line 696, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-left .x-btn-icon { - width: 24px; - height: auto; - top: 0; - left: 0; - bottom: 0; - right: auto; } - /* line 705, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon, .x-quirks .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon { - height: 24px; } - -/* line 713, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-right button, .x-btn-default-toolbar-medium-icon-text-right a { - height: 24px; } -/* line 716, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-right .x-btn-inner { - height: 24px; - line-height: 24px; - padding-right: 28px !important; } -/* line 722, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-right .x-btn-icon { - width: 24px; - height: auto; - top: 0; - left: auto; - bottom: 0; - right: 0; } - /* line 731, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon, .x-quirks .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon { - height: 24px; } - -/* line 738, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-top .x-btn-inner { - padding-top: 28px; } -/* line 742, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-top .x-btn-icon { - width: auto; - height: 24px; - top: 0; - left: 0; - bottom: auto; - right: 0; } - /* line 751, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon, .x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon { - width: 24px; } - -/* line 758, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-inner { - padding-bottom: 28px; } -/* line 762, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon { - width: auto; - height: 24px; - top: auto; - left: 0; - bottom: 0; - right: 0; } - /* line 771, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon, .x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon { - width: 24px; } - -/* line 777, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-over { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 801, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-focus { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 826, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-menu-active, -.x-btn-default-toolbar-medium-pressed { - border-color: #9d9d9d; - background-image: none; - background-color: #d6d6d6; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); - background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -ms-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: linear-gradient(top, #c7c7c7, #e0e0e0); } - -/* line 850, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-medium-disabled { - border-color: #d7d7d7; - background-image: none; - background-color: transparent; } - /* line 858, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn-default-toolbar-medium-disabled .x-btn-inner { - color: #333333 !important; } - -/* line 875, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie .x-btn-default-toolbar-medium-disabled .x-btn-inner { - color: #595959 !important; } - -/* line 883, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie6 .x-btn-default-toolbar-medium-disabled .x-btn-inner { - color: #8c8c8c !important; } - -/* line 898, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-over .x-frame-tl, -.x-nbr .x-btn-default-toolbar-medium-over .x-frame-bl, -.x-nbr .x-btn-default-toolbar-medium-over .x-frame-tr, -.x-nbr .x-btn-default-toolbar-medium-over .x-frame-br, -.x-nbr .x-btn-default-toolbar-medium-over .x-frame-tc, -.x-nbr .x-btn-default-toolbar-medium-over .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-medium-over-corners.gif'); } -/* line 902, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-over .x-frame-ml, -.x-nbr .x-btn-default-toolbar-medium-over .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-medium-over-sides.gif'); } -/* line 905, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-over .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-toolbar-medium-over-bg.gif'); } -/* line 919, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-tl, -.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-bl, -.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-tr, -.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-br, -.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-tc, -.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-medium-focus-corners.gif'); } -/* line 923, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-ml, -.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-medium-focus-sides.gif'); } -/* line 926, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-toolbar-medium-focus-bg.gif'); } -/* line 941, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-tl, -.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-bl, -.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-tr, -.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-br, -.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-tc, -.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-bc, -.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-tl, -.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-bl, -.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-tr, -.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-br, -.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-tc, -.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-medium-pressed-corners.gif'); } -/* line 945, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-ml, -.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-mr, -.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-ml, -.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-medium-pressed-sides.gif'); } -/* line 948, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-mc, -.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-mc { - background-color: #d6d6d6; - background-image: url('images/gray/btn/btn-default-toolbar-medium-pressed-bg.gif'); } -/* line 962, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-tl, -.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-bl, -.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-tr, -.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-br, -.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-tc, -.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-medium-disabled-corners.gif'); } -/* line 966, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-ml, -.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-medium-disabled-sides.gif'); } -/* line 969, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-mc { - background-color: transparent; } - -/* line 991, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-toolbar-medium-over { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-toolbar-medium-over-bg.gif'); } - -/* line 1000, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-toolbar-medium-focus { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-toolbar-medium-focus-bg.gif'); } - -/* line 1010, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-toolbar-medium-menu-active, -.x-nlg .x-btn-default-toolbar-medium-pressed { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-toolbar-medium-pressed-bg.gif'); } - -/* line 637, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large { - border-color: transparent; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-btn-default-toolbar-large { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - -o-border-radius: 3px; - -ms-border-radius: 3px; - -khtml-border-radius: 3px; - border-radius: 3px; - padding: 3px 3px 3px 3px; - border-width: 1px; - border-style: solid; - background-color: transparent; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-btn-default-toolbar-large-mc { - background-color: transparent; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-large { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100303px 1000303px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-large-tl, -.x-nbr .x-btn-default-toolbar-large-bl, -.x-nbr .x-btn-default-toolbar-large-tr, -.x-nbr .x-btn-default-toolbar-large-br, -.x-nbr .x-btn-default-toolbar-large-tc, -.x-nbr .x-btn-default-toolbar-large-bc, -.x-nbr .x-btn-default-toolbar-large-ml, -.x-nbr .x-btn-default-toolbar-large-mr { - zoom: 1; } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-large-ml, -.x-nbr .x-btn-default-toolbar-large-mr { - zoom: 1; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-default-toolbar-large-mc { - padding: 1px 1px 1px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-btn-default-toolbar-large-tl, -.x-strict .x-ie7 .x-btn-default-toolbar-large-bl { - position: relative; - right: 0; } - -/* line 643, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large .x-btn-inner { - font-size: 11px; - font-weight: normal; - font-family: tahoma, arial, verdana, sans-serif; - color: #333333; - background-repeat: no-repeat; - padding: 0 3px; } - -/* line 656, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon button, -.x-btn-default-toolbar-large-icon a, -.x-btn-default-toolbar-large-icon .x-btn-inner, -.x-btn-default-toolbar-large-noicon button, -.x-btn-default-toolbar-large-noicon a, -.x-btn-default-toolbar-large-noicon .x-btn-inner { - height: 32px; - line-height: 32px; } - -/* line 665, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon button, .x-btn-default-toolbar-large-icon a { - padding: 0; } -/* line 669, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon .x-btn-inner { - /* even though there is no text we set a width and padding as buttons shrink-wrap around this element */ - width: 32px; - padding: 0; } -/* line 675, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon .x-btn-icon { - width: 32px; - height: 32px; - top: 0; - left: 0; - bottom: 0; - right: 0; } - -/* line 687, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-left button, .x-btn-default-toolbar-large-icon-text-left a { - height: 32px; } -/* line 690, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-left .x-btn-inner { - height: 32px; - line-height: 32px; - padding-left: 36px; } -/* line 696, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-left .x-btn-icon { - width: 32px; - height: auto; - top: 0; - left: 0; - bottom: 0; - right: auto; } - /* line 705, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-large-icon-text-left .x-btn-icon, .x-quirks .x-btn-default-toolbar-large-icon-text-left .x-btn-icon { - height: 32px; } - -/* line 713, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-right button, .x-btn-default-toolbar-large-icon-text-right a { - height: 32px; } -/* line 716, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-right .x-btn-inner { - height: 32px; - line-height: 32px; - padding-right: 36px !important; } -/* line 722, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-right .x-btn-icon { - width: 32px; - height: auto; - top: 0; - left: auto; - bottom: 0; - right: 0; } - /* line 731, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-large-icon-text-right .x-btn-icon, .x-quirks .x-btn-default-toolbar-large-icon-text-right .x-btn-icon { - height: 32px; } - -/* line 738, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-top .x-btn-inner { - padding-top: 36px; } -/* line 742, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-top .x-btn-icon { - width: auto; - height: 32px; - top: 0; - left: 0; - bottom: auto; - right: 0; } - /* line 751, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-large-icon-text-top .x-btn-icon, .x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-top .x-btn-icon { - width: 32px; } - -/* line 758, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-bottom .x-btn-inner { - padding-bottom: 36px; } -/* line 762, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon { - width: auto; - height: 32px; - top: auto; - left: 0; - bottom: 0; - right: 0; } - /* line 771, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-ie6 .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon, .x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon { - width: 32px; } - -/* line 777, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-over { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 801, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-focus { - border-color: #9d9d9d; - background-image: none; - background-color: #f3f3f3; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: -ms-linear-gradient(top, #fbfbfb, #e9e9e9); - background-image: linear-gradient(top, #fbfbfb, #e9e9e9); } - -/* line 826, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-menu-active, -.x-btn-default-toolbar-large-pressed { - border-color: #9d9d9d; - background-image: none; - background-color: #d6d6d6; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); - background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: -ms-linear-gradient(top, #c7c7c7, #e0e0e0); - background-image: linear-gradient(top, #c7c7c7, #e0e0e0); } - -/* line 850, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-large-disabled { - border-color: #d7d7d7; - background-image: none; - background-color: transparent; } - /* line 858, ../themes/stylesheets/ext4/default/widgets/_button.scss */ - .x-btn-default-toolbar-large-disabled .x-btn-inner { - color: #333333 !important; } - -/* line 875, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie .x-btn-default-toolbar-large-disabled .x-btn-inner { - color: #595959 !important; } - -/* line 883, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-ie6 .x-btn-default-toolbar-large-disabled .x-btn-inner { - color: #8c8c8c !important; } - -/* line 898, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-over .x-frame-tl, -.x-nbr .x-btn-default-toolbar-large-over .x-frame-bl, -.x-nbr .x-btn-default-toolbar-large-over .x-frame-tr, -.x-nbr .x-btn-default-toolbar-large-over .x-frame-br, -.x-nbr .x-btn-default-toolbar-large-over .x-frame-tc, -.x-nbr .x-btn-default-toolbar-large-over .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-large-over-corners.gif'); } -/* line 902, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-over .x-frame-ml, -.x-nbr .x-btn-default-toolbar-large-over .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-large-over-sides.gif'); } -/* line 905, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-over .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-toolbar-large-over-bg.gif'); } -/* line 919, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-focus .x-frame-tl, -.x-nbr .x-btn-default-toolbar-large-focus .x-frame-bl, -.x-nbr .x-btn-default-toolbar-large-focus .x-frame-tr, -.x-nbr .x-btn-default-toolbar-large-focus .x-frame-br, -.x-nbr .x-btn-default-toolbar-large-focus .x-frame-tc, -.x-nbr .x-btn-default-toolbar-large-focus .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-large-focus-corners.gif'); } -/* line 923, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-focus .x-frame-ml, -.x-nbr .x-btn-default-toolbar-large-focus .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-large-focus-sides.gif'); } -/* line 926, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-focus .x-frame-mc { - background-color: #f3f3f3; - background-image: url('images/gray/btn/btn-default-toolbar-large-focus-bg.gif'); } -/* line 941, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-tl, -.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-bl, -.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-tr, -.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-br, -.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-tc, -.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-bc, -.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-tl, -.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-bl, -.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-tr, -.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-br, -.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-tc, -.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-large-pressed-corners.gif'); } -/* line 945, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-ml, -.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-mr, -.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-ml, -.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-large-pressed-sides.gif'); } -/* line 948, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-mc, -.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-mc { - background-color: #d6d6d6; - background-image: url('images/gray/btn/btn-default-toolbar-large-pressed-bg.gif'); } -/* line 962, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-tl, -.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-bl, -.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-tr, -.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-br, -.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-tc, -.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-bc { - background-image: url('images/gray/btn/btn-default-toolbar-large-disabled-corners.gif'); } -/* line 966, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-ml, -.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-mr { - background-image: url('images/gray/btn/btn-default-toolbar-large-disabled-sides.gif'); } -/* line 969, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-mc { - background-color: transparent; } - -/* line 991, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-toolbar-large-over { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-toolbar-large-over-bg.gif'); } - -/* line 1000, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-toolbar-large-focus { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-toolbar-large-focus-bg.gif'); } - -/* line 1010, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-nlg .x-btn-default-toolbar-large-menu-active, -.x-nlg .x-btn-default-toolbar-large-pressed { - background-repeat: repeat-x; - background-image: url('images/gray/btn/btn-default-toolbar-large-pressed-bg.gif'); } - -/* line 571, ../themes/stylesheets/ext4/default/widgets/_button.scss */ -.x-btn-default-toolbar-small-disabled, -.x-btn-default-toolbar-medium-disabled, -.x-btn-default-toolbar-large-disabled { - border-color: transparent; - background-image: none; - background: transparent; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_btn-group.scss */ -.x-btn-group { - position: relative; - overflow: hidden; } - -/* line 11, ../themes/stylesheets/ext4/default/widgets/_btn-group.scss */ -.x-btn-group-body { - position: relative; - zoom: 1; - padding: 0 1px; } - /* line 15, ../themes/stylesheets/ext4/default/widgets/_btn-group.scss */ - .x-btn-group-body .x-table-layout-cell { - vertical-align: top; } - -/* line 20, ../themes/stylesheets/ext4/default/widgets/_btn-group.scss */ -.x-btn-group-header-text { - white-space: nowrap; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-btn-group-default-framed { - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - -o-border-radius: 2px; - -ms-border-radius: 2px; - -khtml-border-radius: 2px; - border-radius: 2px; - padding: 1px 1px 1px 1px; - border-width: 1px; - border-style: solid; - background-color: #f0f0f0; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-btn-group-default-framed-mc { - background-color: #f0f0f0; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-group-default-framed { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000202px 1000202px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-group-default-framed-tl, -.x-nbr .x-btn-group-default-framed-bl, -.x-nbr .x-btn-group-default-framed-tr, -.x-nbr .x-btn-group-default-framed-br, -.x-nbr .x-btn-group-default-framed-tc, -.x-nbr .x-btn-group-default-framed-bc, -.x-nbr .x-btn-group-default-framed-ml, -.x-nbr .x-btn-group-default-framed-mr { - zoom: 1; - background-image: url('images/gray/btn-group/btn-group-default-framed-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-group-default-framed-ml, -.x-nbr .x-btn-group-default-framed-mr { - zoom: 1; - background-image: url('images/gray/btn-group/btn-group-default-framed-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-btn-group-default-framed-mc { - padding: 0px 0px 0px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-btn-group-default-framed-tl, -.x-strict .x-ie7 .x-btn-group-default-framed-bl { - position: relative; - right: 0; } - -/* line 60, ../themes/stylesheets/ext4/default/widgets/_btn-group.scss */ -.x-btn-group-default-framed { - border-color: #d0d0d0; - -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; - -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; - -o-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; - box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; } - -/* line 68, ../themes/stylesheets/ext4/default/widgets/_btn-group.scss */ -.x-btn-group-header-default-framed { - margin: 2px 2px 0 2px; } - -/* line 72, ../themes/stylesheets/ext4/default/widgets/_btn-group.scss */ -.x-btn-group-header-body-default-framed { - padding: 1px 0; - background: #dfdfdf; - -moz-border-radius-topleft: 2px; - -webkit-border-top-left-radius: 2px; - -o-border-top-left-radius: 2px; - -ms-border-top-left-radius: 2px; - -khtml-border-top-left-radius: 2px; - border-top-left-radius: 2px; - -moz-border-radius-topright: 2px; - -webkit-border-top-right-radius: 2px; - -o-border-top-right-radius: 2px; - -ms-border-top-right-radius: 2px; - -khtml-border-top-right-radius: 2px; - border-top-right-radius: 2px; } - -/* line 80, ../themes/stylesheets/ext4/default/widgets/_btn-group.scss */ -.x-btn-group-header-text-default-framed { - font: normal 11px tahoma, arial, verdana, sans-serif; - color: #666666; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker { - border: 1px solid #585858; - background-color: white; - position: relative; } - /* line 12, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker a { - -moz-outline: 0 none; - outline: 0 none; - color: #523a39; - text-decoration: none; - border-width: 0; } - -/* line 25, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker-inner, -.x-datepicker-inner td, -.x-datepicker-inner th { - border-collapse: separate; } - -/* line 29, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker-header { - position: relative; - height: 26px; - background-image: none; - background-color: #6f6f6f; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #777777), color-stop(100%, #656565)); - background-image: -webkit-linear-gradient(top, #777777, #656565); - background-image: -moz-linear-gradient(top, #777777, #656565); - background-image: -o-linear-gradient(top, #777777, #656565); - background-image: -ms-linear-gradient(top, #777777, #656565); - background-image: linear-gradient(top, #777777, #656565); } - -/* line 42, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker-prev, -.x-datepicker-next { - position: absolute; - top: 5px; - width: 18px; } - /* line 48, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker-prev a, - .x-datepicker-next a { - display: block; - width: 16px; - height: 16px; - background-position: top; - background-repeat: no-repeat; - cursor: pointer; - text-decoration: none !important; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); - opacity: 0.7; } - /* line 63, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker-prev a:hover, - .x-datepicker-next a:hover { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - opacity: 1; } - -/* line 69, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker-next { - right: 5px; } - /* line 72, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker-next a { - background-image: url('images/gray/shared/right-btn.gif'); } - -/* line 77, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker-prev { - left: 5px; } - /* line 80, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker-prev a { - background-image: url('images/gray/shared/left-btn.gif'); } - -/* line 86, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-item-disabled .x-datepicker-prev a:hover, -.x-item-disabled .x-datepicker-next a:hover { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); - opacity: 0.6; } - -/* line 90, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker-month { - padding-top: 3px; } - /* line 103, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker-month .x-btn, - .x-datepicker-month button, - .x-datepicker-month .x-btn-tc, - .x-datepicker-month .x-btn-tl, - .x-datepicker-month .x-btn-tr, - .x-datepicker-month .x-btn-mc, - .x-datepicker-month .x-btn-ml, - .x-datepicker-month .x-btn-mr, - .x-datepicker-month .x-btn-bc, - .x-datepicker-month .x-btn-bl, - .x-datepicker-month .x-btn-br { - background: transparent !important; - border-width: 0 !important; } - /* line 108, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker-month span { - color: #fff !important; } - /* line 112, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker-month .x-btn-split-right { - background-image: url('images/gray/button/s-arrow-light.gif'); - padding-right: 12px; } - -/* line 118, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker-next { - text-align: right; } - -/* line 122, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker-month { - text-align: center; } - /* line 126, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker-month button { - color: white !important; } - -/* line 132, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -table.x-datepicker-inner { - width: 100%; - table-layout: fixed; } - /* line 136, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner th { - width: 25px; - height: 19px; - padding: 0; - color: #3e3e3e; - font: normal 10px tahoma, arial, verdana, sans-serif; - text-align: right; - border-bottom: 1px solid #d0d0d0; - border-collapse: separate; - background-image: none; - background-color: #e9e9e9; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f1f1f1), color-stop(100%, #dfdfdf)); - background-image: -webkit-linear-gradient(top, #f1f1f1, #dfdfdf); - background-image: -moz-linear-gradient(top, #f1f1f1, #dfdfdf); - background-image: -o-linear-gradient(top, #f1f1f1, #dfdfdf); - background-image: -ms-linear-gradient(top, #f1f1f1, #dfdfdf); - background-image: linear-gradient(top, #f1f1f1, #dfdfdf); - cursor: default; } - /* line 157, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner th span { - display: block; - padding-right: 7px; } - /* line 163, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner tr { - height: 20px; } - /* line 167, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner td { - border: 1px solid; - height: 17px; - border-color: white; - text-align: right; - padding: 0; } - /* line 175, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner a { - padding-right: 4px; - display: block; - zoom: 1; - font: normal 11px tahoma, arial, verdana, sans-serif; - color: black; - text-decoration: none; - text-align: right; } - /* line 188, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner .x-datepicker-active { - cursor: pointer; - color: black; } - /* line 194, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner .x-datepicker-selected a { - background: repeat-x left top; - background-color: #d8d8d8; - border: 1px solid #b2aaa9; } - /* line 200, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner .x-datepicker-selected span { - font-weight: bold; } - /* line 206, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner .x-datepicker-today a { - border: 1px solid; - border-color: darkred; } - /* line 214, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner .x-datepicker-prevday a, - table.x-datepicker-inner .x-datepicker-nextday a { - text-decoration: none !important; - color: #aaa; } - /* line 221, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner a:hover, - table.x-datepicker-inner .x-datepicker-disabled a:hover { - text-decoration: none !important; - color: #000; - background-color: transparent; } - /* line 229, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - table.x-datepicker-inner .x-datepicker-disabled a { - cursor: default; - background-color: #eee; - color: #bbb; } - -/* line 237, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker-footer, -.x-monthpicker-buttons { - position: relative; - border-top: 1px solid #d0d0d0; - background-image: none; - background-color: #e9e9e9; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dfdfdf), color-stop(49%, #d6d6d6), color-stop(51%, #d0d0d0), color-stop(100%, #d2d2d2)); - background-image: -webkit-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); - background-image: -moz-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); - background-image: -o-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); - background-image: -ms-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); - background-image: linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); - text-align: center; } - /* line 250, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-datepicker-footer .x-btn, - .x-monthpicker-buttons .x-btn { - position: relative; - margin: 4px; } - -/* line 256, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-item-disabled .x-datepicker-inner a:hover { - background: none; } - -/* line 261, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-datepicker .x-monthpicker { - position: absolute; - left: 0; - top: 0; } - -/* line 268, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker { - border: 1px solid #585858; - background-color: white; } - -/* line 274, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-months, -.x-monthpicker-years { - float: left; - height: 167px; - width: 88px; } - -/* line 281, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-item { - float: left; - margin: 4px 0 5px 0; - font: normal 11px tahoma, arial, verdana, sans-serif; - text-align: center; - vertical-align: middle; - height: 18px; - width: 43px; - border: 0 none; } - /* line 295, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-monthpicker-item a { - display: block; - margin: 0 5px; - text-decoration: none; - color: #523a39; - border: 1px solid white; - line-height: 17px; } - /* line 308, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-monthpicker-item a:hover { - background-color: transparent; } - /* line 312, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-monthpicker-item a.x-monthpicker-selected { - background-color: #e9e9e9; - border: 1px solid #b2aaa9; } - -/* line 319, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-months { - border-right: 1px solid #585858; - width: 87px; } - -/* line 324, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-years .x-monthpicker-item { - width: 44px; } - -/* line 328, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-yearnav { - height: 28px; } - /* line 331, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-monthpicker-yearnav button { - background-image: url('images/gray/tools/tool-sprites.gif'); - height: 15px; - width: 15px; - padding: 0; - margin: 6px 12px 5px 15px; - border: 0; - outline: 0 none; } - /* line 339, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ - .x-monthpicker-yearnav button::-moz-focus-inner { - border: 0; - padding: 0; } - -/* line 346, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-yearnav-next { - background-position: 0 -120px; } - -/* line 350, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-yearnav-next-over { - cursor: pointer; - cursor: hand; - background-position: -15px -120px; } - -/* line 356, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-yearnav-prev { - background-position: 0 -105px; } - -/* line 360, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-yearnav-prev-over { - cursor: pointer; - cursor: hand; - background-position: -15px -105px; } - -/* line 367, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-small .x-monthpicker-item { - margin: 2px 0 2px 0; } -/* line 371, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-small .x-monthpicker-yearnav { - height: 23px; } -/* line 375, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-monthpicker-small .x-monthpicker-months, .x-monthpicker-small .x-monthpicker-years { - height: 136px; } - -/* line 385, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-quirks .x-ie7 .x-monthpicker-buttons .x-btn, -.x-quirks .x-ie8 .x-monthpicker-buttons .x-btn { - margin-top: 2px; } -/* line 391, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-quirks .x-monthpicker-small .x-monthpicker-yearnav button { - margin-top: 3px; - margin-bottom: 3px; } - -/* line 397, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-ie6 .x-monthpicker-small .x-monthpicker-yearnav button { - margin-top: 3px; - margin-bottom: 3px; } - -/* line 407, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-nlg .x-datepicker-header { - background-image: url('images/gray/datepicker/datepicker-header-bg.gif'); - background-repeat: repeat-x; - background-position: top left; } -/* line 416, ../themes/stylesheets/ext4/default/widgets/_datepicker.scss */ -.x-nlg .x-datepicker-footer, -.x-nlg .x-monthpicker-buttons { - background-image: url('images/gray/datepicker/datepicker-footer-bg.gif'); - background-repeat: repeat-x; - background-position: top left; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_colorpicker.scss */ -.x-color-picker { - width: 144px; - height: 90px; - cursor: pointer; } - -/* line 12, ../themes/stylesheets/ext4/default/widgets/_colorpicker.scss */ -.x-color-picker a { - border: 1px solid #fff; - float: left; - padding: 2px; - text-decoration: none; - -moz-outline: 0 none; - outline: 0 none; - cursor: pointer; } - -/* line 28, ../themes/stylesheets/ext4/default/widgets/_colorpicker.scss */ -.x-color-picker a:hover, -.x-color-picker a.x-color-picker-selected { - border-color: #8bb8f3; - background-color: #deecfd; } - -/* line 33, ../themes/stylesheets/ext4/default/widgets/_colorpicker.scss */ -.x-color-picker em { - display: block; - border: 1px solid #aca899; } - -/* line 39, ../themes/stylesheets/ext4/default/widgets/_colorpicker.scss */ -.x-color-picker em span { - cursor: pointer; - display: block; - height: 10px; - width: 10px; - line-height: 10px; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-body { - user-select: none; - -o-user-select: none; - -ms-user-select: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - cursor: default; - background: #f0f0f0 !important; - padding: 2px; } - -/* line 12, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item .x-form-text { - user-select: text; - -webkit-user-select: text; - -o-user-select: text; - -ie-user-select: text; - -moz-user-select: text; - -ie-user-select: text; } - -/* line 21, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-icon-separator { - position: absolute; - top: 0px; - left: 27px; - z-index: 0; - border-left: solid 1px #e0e0e0; - background-color: white; - width: 2px; - overflow: hidden; } - -/* line 33, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-plain .x-menu-icon-separator { - display: none; } - -/* line 38, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-focus { - display: block; - position: absolute; - top: -10px; - left: -10px; - width: 0px; - height: 0px; } - -/* line 47, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item { - white-space: nowrap; - overflow: hidden; - z-index: 1; } - -/* line 53, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-cmp { - margin-bottom: 1px; } - -/* line 57, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-link { - display: block; - margin: 1px; - padding: 6px 2px 3px 32px; - text-decoration: none !important; - line-height: 16px; - cursor: default; } - -/* line 70, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-opera .x-menu-item-link { - position: relative; } - -/* line 76, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-icon { - width: 16px; - height: 16px; - position: absolute; - top: 5px; - left: 4px; - background: no-repeat center center; } - -/* line 87, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-icon-right { - width: 16px; - height: 16px; - position: absolute; - top: 6px; - right: 4px; - background: no-repeat center center; } - -/* line 96, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-text { - font-size: 11px; - color: #222222; } - -/* line 102, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-checked .x-menu-item-icon { - background-image: url('images/gray/menu/checked.gif'); } -/* line 105, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-checked .x-menu-group-icon { - background-image: url('images/gray/menu/group-checked.gif'); } - -/* line 111, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-unchecked .x-menu-item-icon { - background-image: url('images/gray/menu/unchecked.gif'); } -/* line 114, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-unchecked .x-menu-group-icon { - background-image: none; } - -/* line 119, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-separator { - height: 2px; - border-top: solid 1px #e0e0e0; - background-color: white; - margin: 2px 0px; - overflow: hidden; } - -/* line 127, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-arrow { - position: absolute; - width: 12px; - height: 9px; - top: 9px; - right: 0px; - background: no-repeat center center; - background-image: url('images/gray/menu/menu-parent.gif'); } - -/* line 137, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-indent { - margin-left: 31px; - /* The 2px is the width of the seperator */ } - -/* line 141, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-active { - cursor: pointer; } - /* line 144, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ - .x-menu-item-active .x-menu-item-link { - background-image: none; - background-color: #e6e6e6; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dcdcdc)); - background-image: -webkit-linear-gradient(top, #eeeeee, #dcdcdc); - background-image: -moz-linear-gradient(top, #eeeeee, #dcdcdc); - background-image: -o-linear-gradient(top, #eeeeee, #dcdcdc); - background-image: -ms-linear-gradient(top, #eeeeee, #dcdcdc); - background-image: linear-gradient(top, #eeeeee, #dcdcdc); - margin: 0px; - border: 1px solid #9d9d9d; - cursor: pointer; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - -o-border-radius: 3px; - -ms-border-radius: 3px; - -khtml-border-radius: 3px; - border-radius: 3px; } - -/* line 153, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-item-disabled { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - opacity: 0.5; } - -/* line 160, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-ie .x-menu-item-disabled .x-menu-item-icon { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - opacity: 0.5; } -/* line 164, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-ie .x-menu-item-disabled .x-menu-item-text { - background-color: transparent; } -/* line 171, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-strict .x-ie7m .x-ie .x-menu-icon-separator { - width: 1px; } -/* line 175, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-strict .x-ie7m .x-ie .x-menu-item-separator { - height: 1px; } - -/* line 184, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-ie6 .x-menu-item-link, -.x-ie7 .x-menu-item-link, -.x-quirks .x-ie8 .x-menu-item-link { - padding-bottom: 2px; } - -/* line 192, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-nlg .x-menu-item-active .x-menu-item-link { - background: #e6e6e6 repeat-x left top; - background-image: url('images/gray/menu/menu-item-active-bg.gif'); } - -/* line 199, ../themes/stylesheets/ext4/default/widgets/_menu.scss */ -.x-menu-date-item { - border-color: #99BBE8; } - -/* line 8, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-panel .x-grid-body { - background: white; - border-color: #d0d0d0; - border-style: solid; - border-width: 1px; - border-top-color: #c5c5c5; } -/* line 17, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-panel .x-grid-header-ct-hidden { - visibility: hidden; } - -/* line 22, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-empty { - padding: 10px; - color: gray; - font: normal 11px tahoma, arial, helvetica, sans-serif; } - -/* line 28, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-header-hidden .x-grid-body { - border-top-color: #d0d0d0 !important; } - -/* line 32, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-view { - overflow: hidden; - position: relative; } - -/* line 38, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-table { - table-layout: fixed; - border-collapse: separate; } - -/* line 45, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-autowidth-table table.x-grid-table { - table-layout: auto; - width: auto!important; } - -/* line 50, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row .x-grid-table { - border-collapse: collapse; } - -/* line 54, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-locked .x-grid-inner-locked { - border-width: 0 1px 0 0 !important; - border-style: solid; } - -/* line 59, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-header-ct { - cursor: default; - zoom: 1; - padding: 0; - border: 1px solid #d0d0d0; - border-bottom-color: #c5c5c5; - background-image: none; - background-color: #c5c5c5; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f9f9f9), color-stop(100%, #e3e4e6)); - background-image: -webkit-linear-gradient(top, #f9f9f9, #e3e4e6); - background-image: -moz-linear-gradient(top, #f9f9f9, #e3e4e6); - background-image: -o-linear-gradient(top, #f9f9f9, #e3e4e6); - background-image: -ms-linear-gradient(top, #f9f9f9, #e3e4e6); - background-image: linear-gradient(top, #f9f9f9, #e3e4e6); } - -/* line 73, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-accordion-item .x-grid-header-ct { - border-width: 0 0 1px 0!important; } - -/* line 77, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header { - padding: 0; - position: absolute; - overflow: hidden; - border-right: 1px solid #c5c5c5; - border-left: 0 none; - border-top: 0 none; - border-bottom: 0 none; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.3); - color: null; - font: normal 11px tahoma, arial, verdana, sans-serif; - background-image: none; - background-color: #c5c5c5; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f9f9f9), color-stop(100%, #e3e4e6)); - background-image: -webkit-linear-gradient(top, #f9f9f9, #e3e4e6); - background-image: -moz-linear-gradient(top, #f9f9f9, #e3e4e6); - background-image: -o-linear-gradient(top, #f9f9f9, #e3e4e6); - background-image: -ms-linear-gradient(top, #f9f9f9, #e3e4e6); - background-image: linear-gradient(top, #f9f9f9, #e3e4e6); } - -/* line 99, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-group-header { - padding: 0; - border-left-width: 0; } - -/* line 103, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-group-sub-header { - background: transparent; - border-top: 1px solid #c5c5c5; - border-left-width: 0; } - -/* line 109, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-inner { - zoom: 1; - position: relative; - white-space: nowrap; - line-height: 15px; - padding: 3px 6px 4px; } - /* line 116, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-column-header-inner .x-column-header-text { - white-space: nowrap; } - -/* line 123, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-over, -.x-column-header-sort-ASC, -.x-column-header-sort-DESC { - border-left-color: #c4c4c4; - border-right-color: #c4c4c4; - background-image: none; - background-color: #c4c4c4; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e9e8e8), color-stop(39%, #e9e8e8), color-stop(40%, #dedede), color-stop(100%, #dedede)); - background-image: -webkit-linear-gradient(top, #e9e8e8, #e9e8e8 39%, #dedede 40%, #dedede); - background-image: -moz-linear-gradient(top, #e9e8e8, #e9e8e8 39%, #dedede 40%, #dedede); - background-image: -o-linear-gradient(top, #e9e8e8, #e9e8e8 39%, #dedede 40%, #dedede); - background-image: -ms-linear-gradient(top, #e9e8e8, #e9e8e8 39%, #dedede 40%, #dedede); - background-image: linear-gradient(top, #e9e8e8, #e9e8e8 39%, #dedede 40%, #dedede); } - -/* line 135, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-nlg .x-grid-header-ct, -.x-nlg .x-column-header { - background: repeat-x 0 top; - background-image: url('images/gray/grid/column-header-bg.gif'); } -/* line 142, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-nlg .x-column-header-over, -.x-nlg .x-column-header-sort-ASC, -.x-nlg .x-column-header-sort-DESC { - background: #ebf3fd repeat-x 0 top; - background-image: url('images/gray/grid/column-header-over-bg.gif'); } - -/* line 149, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-trigger { - display: none; - height: 100%; - width: 14px; - background: no-repeat left center; - background-color: #c3daf9; - background-image: url('images/gray/grid/grid3-hd-btn.gif'); - position: absolute; - right: 0; - top: 0; - z-index: 2; - cursor: pointer; } - -/* line 164, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-over .x-column-header-trigger, .x-column-header-open .x-column-header-trigger { - display: block; } - -/* line 169, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-align-right { - text-align: right; } - /* line 172, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-column-header-align-right .x-column-header-text { - padding-right: 0.5ex; - margin-right: 6px; } - -/* line 177, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-align-center { - text-align: center; } - -/* line 180, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-align-left { - text-align: left; } - -/* line 185, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-sort-ASC .x-column-header-text { - padding-right: 16px; - background: no-repeat right 6px; - background-image: url('images/gray/grid/sort_asc.gif'); } - -/* line 190, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-sort-DESC .x-column-header-text { - padding-right: 16px; - background: no-repeat right 6px; - background-image: url('images/gray/grid/sort_desc.gif'); } - -/* line 197, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row { - vertical-align: top; } - /* line 199, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-row .x-grid-cell { - color: null; - font: normal 11px/15px tahoma, arial, verdana, sans-serif; - background-color: white; - border-color: #ededed; - border-style: solid; - border-top-color: #fafafa; - border-width: 0; } - -/* line 212, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-with-row-lines .x-grid-cell { - border-width: 1px 0; } - -/* line 216, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-rowwrap-div { - border-width: 1px 0; - border-color: #ededed; - border-style: solid; - border-top-color: #fafafa; - overflow: hidden; } - -/* line 226, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-alt .x-grid-cell, -.x-grid-row-alt .x-grid-rowwrap-div { - background-color: #fafafa; } - -/* line 231, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-over .x-grid-cell, -.x-grid-row-over .x-grid-rowwrap-div { - border-color: #dddddd; - background-color: #efefef; } - -/* line 238, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-focused .x-grid-cell, -.x-grid-row-focused .x-grid-rowwrap-div { - border-color: #dddddd; - background-color: #efefef; } - -/* line 245, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-selected .x-grid-cell, -.x-grid-row-selected .x-grid-rowwrap-div { - border-style: dotted; - border-color: #bfb8b8; - background-color: #e0e0e0 !important; } - -/* line 254, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-rowwrap-div .x-grid-cell, -.x-grid-rowwrap-div .x-grid-cell-inner { - border-width: 0; - background: transparent; } - -/* line 261, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-body-hidden { - display: none; } - -/* line 265, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-rowbody { - font: normal 11px/13px tahoma, arial, verdana, sans-serif; - padding: 4px; } - /* line 270, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-rowbody p { - margin: 5px 5px 10px 5px; } - -/* line 276, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-cell { - overflow: hidden; } - -/* line 280, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-cell-inner { - overflow: hidden; - -o-text-overflow: ellipsis; - text-overflow: ellipsis; - padding: 2px 6px 3px; - white-space: nowrap; } - -/* line 291, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-with-row-lines .x-grid-cell-inner { - line-height: 13px; - padding-bottom: 4px; } - -/* line 297, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-action-col-cell .x-grid-cell-inner { - line-height: 0; - padding: 2px; } - -/* line 302, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-action-col-cell .x-item-disabled { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); - opacity: 0.3; } - -/* line 306, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-with-row-lines .x-action-col-cell .x-grid-cell-inner { - padding-top: 1px; } - -/* line 310, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row .x-grid-cell-special { - padding: 0; - border-right: 1px solid #c6c6c6; - background-image: none; - background-color: #f6f6f6; - background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #f6f6f6), color-stop(100%, #e9e9e9)); - background-image: -webkit-linear-gradient(left, #f6f6f6, #e9e9e9); - background-image: -moz-linear-gradient(left, #f6f6f6, #e9e9e9); - background-image: -o-linear-gradient(left, #f6f6f6, #e9e9e9); - background-image: -ms-linear-gradient(left, #f6f6f6, #e9e9e9); - background-image: linear-gradient(left, #f6f6f6, #e9e9e9); } - -/* line 316, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row .x-grid-cell-row-checker { - vertical-align: middle; } - -/* -IE6-8 have issues with shrinking the TR to 0px (even w/line-height=0), so we -use an IE-specific trick to make the row disappear. We cannot do this on any -other browser, because it is not a non-standard thing to do and those other -browsers will do whacky things with it. -*/ -/* line 330, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-ie6 .x-grid-header-row, -.x-ie7 .x-grid-header-row, -.x-quirks .x-ie8 .x-grid-header-row { - position: absolute; } - -/* line 335, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-selected .x-grid-cell-special { - border-right: 1px solid #d4b7b7; - background-image: none; - background-color: #e0e0e0; - background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #e0e0e0), color-stop(100%, #d3d3d3)); - background-image: -webkit-linear-gradient(left, #e0e0e0, #d3d3d3); - background-image: -moz-linear-gradient(left, #e0e0e0, #d3d3d3); - background-image: -o-linear-gradient(left, #e0e0e0, #d3d3d3); - background-image: -ms-linear-gradient(left, #e0e0e0, #d3d3d3); - background-image: linear-gradient(left, #e0e0e0, #d3d3d3); } - -/* line 341, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-dirty-cell { - background-image: url('images/gray/grid/dirty.gif'); - background-position: 0 0; - background-repeat: no-repeat; } - -/* line 347, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-cell-selected { - background-color: #B8CFEE !important; } - -/* line 353, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-nlg .x-grid-cell-special { - background-repeat: repeat-y; - background-position: top right; } -/* line 359, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-nlg .x-grid-row .x-grid-cell-special, -.x-nlg .x-grid-row-over .x-grid-cell-special { - background-image: url('images/gray/grid/cell-special-bg.gif'); } -/* line 365, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-nlg .x-grid-row-focused .x-grid-cell-special, -.x-nlg .x-grid-row-selected .x-grid-cell-special { - background-image: url('images/gray/grid/cell-special-selected-bg.gif'); } - -/* line 371, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-with-col-lines .x-grid-cell { - padding-right: 0; - border-right: 1px solid #c6c6c6; } - -/* line 378, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner, -.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner { - padding-left: 12px; - background-image: url('images/gray/grid/property-cell-bg.gif'); - background-repeat: no-repeat; - background-position: -16px 2px; } - -/* line 388, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-with-row-lines.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner, -.x-grid-with-row-lines.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner { - background-position: -16px 1px; } - -/* line 394, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-quirks .x-ie .x-grid-row .x-grid-property-name .x-grid-cell-inner { - background-position: -16px 2px; } - -/* line 399, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-unselectable { - user-select: none; - -o-user-select: none; - -ms-user-select: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - cursor: default; } - -/* line 403, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-body-hidden { - display: none; } - -/* line 407, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-group-collapsed { - display: none; } - -/* line 413, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-view .x-grid-td-expander { - vertical-align: top; } - -/* line 418, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-td-expander { - background: repeat-y right transparent; } - -/* line 424, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-view .x-grid-td-expander .x-grid-cell-inner { - padding: 0 !important; } - -/* line 430, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-expander { - background-image: url('images/gray/grid/group-collapse.gif'); - background-color: transparent; - width: 9px; - height: 13px; - margin-left: 3px; - background-repeat: no-repeat; - background-position: 0 -2px; } - -/* line 444, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-collapsed .x-grid-row-expander { - background-image: url('images/gray/grid/group-expand.gif'); } - -/* line 449, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-resize-marker { - position: absolute; - z-index: 5; - top: 0; - width: 1px; - background-color: #0f0f0f; } - -/* line 459, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.col-move-top, -.col-move-bottom { - width: 9px; - height: 9px; - position: absolute; - top: 0; - line-height: 0; - font-size: 0; - overflow: hidden; - z-index: 20000; - background: no-repeat left top transparent; } - -/* line 471, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.col-move-top { - background-image: url('images/gray/grid/col-move-top.gif'); } - -/* line 475, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.col-move-bottom { - background-image: url('images/gray/grid/col-move-bottom.gif'); } - -/* line 480, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-tbar-page-number { - width: 30px; } - -/* line 487, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-group, -.x-grid-group-body, -.x-grid-group-hd { - zoom: 1; } - -/* line 491, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-group-hd { - padding-top: 6px; } - /* line 494, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-group-hd .x-grid-cell-inner { - padding: 10px 4px 4px 4px; - background: white; - border-width: 0 0 2px 0; - border-style: solid; - border-color: #bcb1b0; - cursor: pointer; } - -/* line 508, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-group-hd-collapsible .x-grid-group-title { - background: transparent no-repeat 0 -1px; - background-image: url('images/gray/grid/group-collapse.gif'); - padding: 0 0 0 14px; } - -/* line 515, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-group-title { - color: #616161; - font: bold 11px tahoma, arial, verdana, sans-serif; } - -/* line 521, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-group-hd-collapsed .x-grid-group-title { - background-image: url('images/gray/grid/group-expand.gif'); } - -/* line 526, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-group-collapsed .x-grid-group-body { - display: none; } - -/* line 530, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-group-collapsed .x-grid-group-title { - background-image: url('images/gray/grid/group-expand.gif'); } - -/* line 534, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-group-by-icon { - background-image: url('images/gray/grid/group-by.gif'); } - -/* line 538, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-show-groups-icon { - background-image: url('images/gray/grid/group-by.gif'); } - -/* line 542, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-checkbox .x-column-header-inner { - padding: 0; } - -/* line 546, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-cell-special .x-grid-cell-inner { - padding-left: 4px; - padding-right: 4px; } - -/* line 552, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-checker, -.x-column-header-checkbox .x-column-header-text { - height: 14px; - width: 14px; - line-height: 0; - background-image: url('images/gray/grid/unchecked.gif'); - background-position: -1px -1px; - background-repeat: no-repeat; - background-color: transparent; } - -/* line 564, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-column-header-checkbox .x-column-header-text { - display: block; - margin: 0 5px; } - -/* IE6, IE7, and all IE Quirks mode need line-height to be the same as checkbox height or the header/row height will be too tall */ -/* line 573, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-quirks .x-ie .x-grid-row-checker, -.x-quirks .x-ie .x-column-header-checkbox .x-column-header-text, .x-ie7m .x-grid-row-checker, .x-ie7m .x-column-header-checkbox .x-column-header-text { - line-height: 14px; } - -/* line 579, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-hd-checker-on .x-column-header-text { - background-image: url('images/gray/grid/checked.gif'); } - -/* line 583, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-cell-row-checker .x-grid-cell-inner { - padding-top: 4px; - padding-bottom: 2px; - line-height: 14px; } - -/* line 588, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-with-row-lines .x-grid-cell-row-checker .x-grid-cell-inner { - padding-top: 3px; } - -/* line 591, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-checker { - margin-left: 1px; - background-position: 50% -2px; } - -/* line 598, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-selected .x-grid-row-checker, -.x-grid-row-checked .x-grid-row-checker { - background-image: url('images/gray/grid/checked.gif'); } - -/* line 603, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-tbar-page-first { - background-image: url('images/gray/grid/page-first.gif') !important; } - -/* line 607, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-tbar-loading { - background-image: url('images/gray/grid/refresh.gif') !important; } - -/* line 611, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-tbar-page-last { - background-image: url('images/gray/grid/page-last.gif') !important; } - -/* line 615, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-tbar-page-next { - background-image: url('images/gray/grid/page-next.gif') !important; } - -/* line 619, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-tbar-page-prev { - background-image: url('images/gray/grid/page-prev.gif') !important; } - -/* line 624, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-item-disabled .x-tbar-loading { - background-image: url('images/gray/grid/refresh-disabled.gif') !important; } -/* line 628, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-item-disabled .x-tbar-page-first { - background-image: url('images/gray/grid/page-first-disabled.gif') !important; } -/* line 632, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-item-disabled .x-tbar-page-last { - background-image: url('images/gray/grid/page-last-disabled.gif') !important; } -/* line 636, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-item-disabled .x-tbar-page-next { - background-image: url('images/gray/grid/page-next-disabled.gif') !important; } -/* line 640, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-item-disabled .x-tbar-page-prev { - background-image: url('images/gray/grid/page-prev-disabled.gif') !important; } - -/* line 646, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-hmenu-sort-asc .x-menu-item-icon { - background-image: url('images/gray/grid/hmenu-asc.gif'); } - -/* line 650, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-hmenu-sort-desc .x-menu-item-icon { - background-image: url('images/gray/grid/hmenu-desc.gif'); } - -/* line 654, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-hmenu-lock .x-menu-item-icon { - background-image: url('images/gray/grid/hmenu-lock.gif'); } - -/* line 658, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-hmenu-unlock .x-menu-item-icon { - background-image: url('images/gray/grid/hmenu-unlock.gif'); } - -/* line 662, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-group-by-icon { - background-image: url('images/gray/grid/group-by.gif'); } - -/* line 666, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-cols-icon .x-menu-item-icon { - background-image: url('images/gray/grid/columns.gif'); } - -/* line 670, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-show-groups-icon { - background-image: url('images/gray/grid/group-by.gif'); } - -/* line 675, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-drop-indicator { - position: absolute; - height: 1px; - line-height: 0px; - background-color: #77BC71; - overflow: visible; } - /* line 682, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-drop-indicator .x-grid-drop-indicator-left { - position: absolute; - top: -8px; - left: -12px; - background-image: url('images/gray/grid/dd-insert-arrow-right.png'); - height: 16px; - width: 16px; } - /* line 691, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-drop-indicator .x-grid-drop-indicator-right { - position: absolute; - top: -8px; - right: -11px; - background-image: url('images/gray/grid/dd-insert-arrow-left.png'); - height: 16px; - width: 16px; } - -/* line 702, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-ie6 .x-grid-drop-indicator-left { - background-image: url('images/gray/grid/dd-insert-arrow-right.gif'); } -/* line 706, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-ie6 .x-grid-drop-indicator-right { - background-image: url('images/gray/grid/dd-insert-arrow-left.gif'); } - -/* line 714, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-editor .x-form-text { - padding: 0 4px; } -/* line 717, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-editor .x-form-cb-wrap { - padding-top: 3px; } - -/* line 723, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor { - position: absolute !important; - z-index: 1; - zoom: 1; - overflow: visible !important; } - /* line 729, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-row-editor .x-form-text { - padding: 0 2px; } - /* line 732, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-row-editor .x-form-cb-wrap { - padding-top: 0; } - /* line 735, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-row-editor .x-form-checkbox { - margin-left: -4px; } - /* line 738, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-row-editor .x-form-display-field { - font: normal 11px/15px tahoma, arial, verdana, sans-serif; - padding-top: 0; - padding-left: 2px; } - /* line 744, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-grid-row-editor .x-panel-body { - background-color: #ebe6e6; - border-top: 1px solid #d0d0d0 !important; - border-bottom: 1px solid #d0d0d0 !important; } - -/* line 754, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-editor .x-form-cb-wrap, .x-grid-row-editor .x-form-cb-wrap { - text-align: center; } -/* line 757, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-editor .x-form-trigger, .x-grid-row-editor .x-form-trigger { - height: 19px; } -/* line 761, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-editor .x-form-trigger-wrap .x-form-spinner-up, .x-grid-editor .x-form-trigger-wrap .x-form-spinner-down, .x-grid-row-editor .x-form-trigger-wrap .x-form-spinner-up, .x-grid-row-editor .x-form-trigger-wrap .x-form-spinner-down { - background-image: url('images/gray/form/spinner-small.gif'); - height: 10px !important; } - -/* line 768, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-editor .x-form-text, .x-grid-row-editor .x-form-text { - font: normal 11px/15px tahoma, arial, verdana, sans-serif; - height: 18px; } - -/* line 776, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-border-box .x-grid-editor .x-form-trigger, -.x-border-box .x-grid-row-editor .x-form-trigger { - height: 20px; } -/* line 779, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-border-box .x-grid-editor .x-form-text, -.x-border-box .x-grid-row-editor .x-form-text { - height: 20px; - padding-bottom: 1px; } - -/* line 787, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-ie .x-grid-editor .x-form-text { - padding-left: 5px; } -/* line 790, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-ie .x-grid-row-editor .x-form-text { - padding-left: 3px; } - -/* line 796, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-ie8m .x-grid-editor .x-form-text, -.x-ie8m .x-grid-row-editor .x-form-text { - padding-top: 1px; } - -/* line 803, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-strict .x-ie6 .x-grid-editor .x-form-text, -.x-strict .x-ie6 .x-grid-row-editor .x-form-text, -.x-strict .x-ie7 .x-grid-editor .x-form-text, -.x-strict .x-ie7 .x-grid-row-editor .x-form-text { - height: 17px; } - -/* line 809, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-quirks .x-ie9 .x-grid-editor .x-form-text, .x-quirks .x-ie9 .x-grid-row-editor .x-form-text { - line-height: 17px; } - -/* line 818, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-opera .x-grid-editor .x-form-text { - padding-left: 5px; } -/* line 821, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-opera .x-grid-row-editor .x-form-text { - padding-left: 3px; } - -/* line 828, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-buttons { - background-color: #ebe6e6; - position: absolute; - bottom: -31px; - padding: 4px; - height: 32px; } - /* line 835, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ - .x-strict .x-ie7m .x-grid-row-editor-buttons { - width: 192px; - height: 24px; } - -/* line 845, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-buttons-ml, -.x-grid-row-editor-buttons-mr, -.x-grid-row-editor-buttons-bl, -.x-grid-row-editor-buttons-br, -.x-grid-row-editor-buttons-bc { - position: absolute; - overflow: hidden; } - -/* line 851, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-buttons-bl, -.x-grid-row-editor-buttons-br { - width: 4px; - height: 4px; - bottom: 0px; - background-image: url('images/gray/panel/panel-default-framed-corners.gif'); } - -/* line 857, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-buttons-bl { - left: 0px; - background-position: 0px -16px; } - -/* line 861, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-buttons-br { - right: 0px; - background-position: 0px -20px; } - -/* line 866, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-buttons-bc { - position: absolute; - left: 4px; - bottom: 0px; - width: 192px; - height: 1px; - background-color: #d0d0d0; } - -/* line 876, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-buttons-ml, -.x-grid-row-editor-buttons-mr { - height: 27px; - width: 1px; - top: 1px; - background-color: #d0d0d0; } - -/* line 882, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-buttons-ml { - left: 0px; } - -/* line 885, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-buttons-mr { - background-position: 0px -20px; - right: 0px; } - -/* line 891, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-errors ul { - margin-left: 5px; } -/* line 894, ../themes/stylesheets/ext4/default/widgets/_grid.scss */ -.x-grid-row-editor-errors li { - list-style: disc; - margin-left: 15px; } - -/*misc*/ -/* line 9, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-webkit *:focus { - outline: none !important; } - -/* line 16, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-form-item { - vertical-align: top; - table-layout: fixed; } - -/* line 26, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-autocontainer-form-item, -.x-anchor-form-item, -.x-vbox-form-item, -.x-checkboxgroup-form-item, -.x-table-form-item { - margin-bottom: 5px; } - -/* line 31, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-form-layout-table { - border-collapse: separate; - border-spacing: 0 2px; } - -/* line 37, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-form-item-body { - position: relative; } - -/* line 42, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-form-form-item td { - border-top: 1px solid transparent; } - -/* line 51, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-ie6 .x-form-layout-table { - border-collapse: collapse; - border-spacing: 0; } -/* line 56, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-ie6 .x-form-form-item td { - border-top-width: 0; } -/* line 62, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-ie6 td.x-form-item-pad { - height: 5px; } - -/* line 68, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-editor .x-form-item-body { - padding-bottom: 0; } - -/* line 72, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-form-item-label { - display: block; - padding: 3px 0 0; - font-size: 12px; - user-select: none; - -o-user-select: none; - -ms-user-select: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - cursor: default; } - -/* line 79, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-form-item-label-top { - display: block; - zoom: 1; - padding: 0 0 5px 0; } - -/* line 85, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-form-item-label-right { - text-align: right; } - -/* line 89, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-form-invalid-under { - padding: 2px 2px 2px 18px; - color: #c0272b; - font: normal 11px tahoma, arial, verdana, sans-serif; - line-height: 16px; - background: no-repeat 0 2px; - background-image: url('images/gray/form/exclamation.gif'); } - -/* line 100, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-form-invalid-icon { - width: 18px; - height: 14px; - background: no-repeat center center; - background-image: url('images/gray/form/exclamation.gif'); - overflow: hidden; } - /* line 106, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ - .x-form-invalid-icon ul { - display: block; - width: 18px; } - /* line 109, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ - .x-form-invalid-icon ul li { - /* prevent inner elements from interfering with QuickTip hovering */ - display: none; } - -/* line 117, ../themes/stylesheets/ext4/default/widgets/form/_all.scss */ -.x-lbl-top-err-icon { - margin-bottom: 4px; } - -/* line 7, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-form-field, -.x-form-display-field { - margin: 0 0 0 0; - font: normal 12px tahoma, arial, verdana, sans-serif; - color: black; } - -/* line 14, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-form-item-hidden { - margin: 0; } - -/* line 19, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-form-text, -textarea.x-form-field { - padding: 1px 3px; - background: repeat-x 0 0; - border: 1px solid; - background-color: white; - background-image: url('images/gray/form/text-bg.gif'); - border-color: #b5b8c8; } - -/* line 36, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-form-text { - height: 18px; - line-height: 15px; - vertical-align: top; } - -/* line 43, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-ie8m .x-form-text { - line-height: 15px; } - -/* line 48, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-border-box .x-form-text { - height: 22px; } - -/* line 52, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -textarea.x-form-field { - color: black; - overflow: auto; - height: auto; - line-height: normal; - background: repeat-x 0 0; - background-color: white; - background-image: url('images/gray/form/text-bg.gif'); - resize: none; } - -/* line 65, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-border-box textarea.x-form-field { - height: auto; } - -/* line 70, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-safari.x-mac textarea.x-form-field { - margin-bottom: -2px; } - -/* line 76, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-form-focus, -textarea.x-form-focus { - border-color: #a1a1a1; } - -/* line 81, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-form-invalid-field, -textarea.x-form-invalid-field { - background-color: white; - background-image: url('images/gray/grid/invalid_line.gif'); - background-repeat: repeat-x; - background-position: bottom; - border-color: #cc3300; } - -/* line 91, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-form-item { - font: normal 12px tahoma, arial, verdana, sans-serif; } - -/* line 95, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-form-empty-field, textarea.x-form-empty-field { - color: gray; } - -/* line 100, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-webkit .x-form-empty-field { - line-height: 15px; } - -/* line 105, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-form-display-field { - padding-top: 3px; } - - /* - In oldIE, text inputs get a mysterious extra pixel of spacing above and below. - This is targeted at IE6-IE7 (all modes) and IE9+ Quirks mode. - - IE8 quirks on Windows 7 requires this fix, but on - IE8 quirks on Windows XP, this is breaks the layout. - TODO: Check field input heights in IE8 quirks on Windows Vista. - - Since we can't specifically target a specific version of Windows via CSS, we default to fixing it the XP way, for now. - */ -/* line 121, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-quirks .x-ie9p .x-form-text, -.x-ie7m .x-form-text { - margin-top: -1px; - margin-bottom: -1px; } - -/* line 126, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-ie .x-form-file { - height: 23px; - line-height: 18px; - vertical-align: middle; } - -/* line 135, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-field-default-toolbar .x-form-text { - height: 16px; } - -/* line 139, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-border-box .x-field-default-toolbar .x-form-text { - height: 20px; } - -/* line 143, ../themes/stylesheets/ext4/default/widgets/form/_field.scss */ -.x-field-default-toolbar .x-form-item-label-left { - padding-left: 4px; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-fieldset { - border: 1px solid #b5b8c8; - padding: 10px; - margin-bottom: 10px; - display: block; - /* preserve margins in IE */ - position: relative; } - -/* line 18, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-ie .x-fieldset { - padding-top: 0; } - /* line 20, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ - .x-ie .x-fieldset .x-fieldset-body { - padding-top: 10px; } - -/* line 25, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-fieldset-header-checkbox { - line-height: 14px; } - -/* line 29, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-fieldset-header { - font: 11px/14px bold tahoma, arial, verdana, sans-serif; - color: #333333; - padding: 0 3px 1px; - overflow: hidden; } - /* line 35, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ - .x-fieldset-header .x-fieldset-header-text { - float: left; - padding: 1px 0; } - /* line 39, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ - .x-fieldset-header .x-fieldset-header-text-collapsible { - cursor: pointer; } - /* line 44, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ - .x-fieldset-header .x-form-item, - .x-fieldset-header .x-tool { - float: left; - margin: 1px 0 0 0; } - /* line 49, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ - .x-fieldset-header .x-form-cb-wrap { - padding: 1px 0; - font-size: 0; - line-height: 0; } - -/* line 58, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-fieldset-with-title .x-fieldset-header-checkbox, -.x-fieldset-with-title .x-tool { - margin-right: 3px; } - -/* line 65, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-webkit .x-fieldset-header { - -webkit-padding-start: 3px; - -webkit-padding-end: 3px; } - -/* line 75, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-opera .x-fieldset-with-legend { - margin-top: -1px; } -/* line 78, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-opera.x-mac .x-fieldset-header-text { - padding: 2px 0 0; } - -/* line 86, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-strict .x-ie8 .x-fieldset-header { - margin-bottom: -1px; } - /* line 90, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ - .x-strict .x-ie8 .x-fieldset-header .x-tool, - .x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-text, - .x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-checkbox { - position: relative; - top: -1px; } - -/* line 100, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-quirks .x-ie .x-fieldset-header, -.x-ie8m .x-fieldset-header { - padding-left: 1px; - padding-right: 1px; } - -/* line 108, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-fieldset-collapsed .x-fieldset-body { - display: none; } - -/* line 113, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-fieldset-collapsed { - padding-bottom: 0 !important; - border-width: 1px 1px 0 1px !important; - border-left-color: transparent !important; - border-right-color: transparent !important; } - -/* line 122, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-ie6 .x-fieldset-collapsed { - border-width: 1px 0 0 0 !important; - padding-bottom: 0 !important; - margin-left: 1px; - margin-right: 1px; } - -/* line 130, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-ie .x-fieldset-bwrap { - zoom: 1; } - -/* IE legend positioning bug */ -/* line 137, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-ie .x-fieldset-noborder legend { - position: relative; - margin-bottom: 23px; } - -/* line 143, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-ie .x-fieldset-noborder legend span { - position: absolute; - left: 16px; } - -/* line 149, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-fieldset { - overflow: hidden; } - -/* line 153, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-fieldset-bwrap { - overflow: hidden; - zoom: 1; } - -/* line 159, ../themes/stylesheets/ext4/default/widgets/form/_fieldset.scss */ -.x-fieldset-body { - overflow: hidden; } - -/* line 8, ../themes/stylesheets/ext4/default/widgets/form/_file.scss */ -.x-form-file-wrap .x-form-text { - color: #777; } -/* line 12, ../themes/stylesheets/ext4/default/widgets/form/_file.scss */ -.x-form-file-wrap .x-form-file-btn { - overflow: hidden; } -/* line 16, ../themes/stylesheets/ext4/default/widgets/form/_file.scss */ -.x-form-file-wrap .x-form-file-input { - position: absolute; - top: -4px; - right: -2px; - height: 30px; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); - opacity: 0; - /* Yes, there's actually a good reason for this... - * If the configured buttonText is set to something longer than the default, - * then it will quickly exceed the width of the hidden file input's "Browse..." - * button, so part of the custom button's clickable area will be covered by - * the hidden file input's text box instead. This results in a text-selection - * mouse cursor over that part of the button, at least in Firefox, which is - * confusing to a user. Giving the hidden file input a huge font-size makes - * the native button part very large so it will cover the whole clickable area. - */ - font-size: 100px; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ -.x-form-cb-wrap { - padding-top: 3px; } - -/* line 11, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ -.x-form-checkbox, -.x-form-radio { - vertical-align: -1px; - width: 13px; - height: 13px; - background: no-repeat; - background-image: url('images/gray/form/checkbox.gif'); - overflow: hidden; - padding: 0; - border: 0; } - /* line 22, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ - .x-form-checkbox::-moz-focus-inner, - .x-form-radio::-moz-focus-inner { - padding: 0; - border: 0; } - -/* Hack for IE; causes alignment problem in IE9 standards mode so exclude that */ -/* line 31, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ -.x-nbr.x-ie .x-form-checkbox, -.x-nbr.x-ie .x-form-radio { - font-size: 0; } - -/* line 38, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ -.x-form-cb-checked .x-form-checkbox, -.x-form-cb-checked .x-form-radio { - background-position: 0 -13px; } - -/* Focused */ -/* line 44, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ -.x-form-cb-focus { - background-position: -13px 0; } - -/* line 48, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ -.x-form-cb-checked .x-form-cb-focus { - background-position: -13px -13px; } - -/* Radios */ -/* line 54, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ -.x-form-radio { - background-image: url('images/gray/form/radio.gif'); } - -/* boxLabel */ -/* line 59, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ -.x-form-cb-label-before { - margin-right: 4px; } - -/* line 62, ../themes/stylesheets/ext4/default/widgets/form/_checkbox.scss */ -.x-form-cb-label-after { - margin-left: 4px; } - -/* line 7, ../themes/stylesheets/ext4/default/widgets/form/_checkboxgroup.scss */ -.x-form-checkboxgroup-body { - padding: 1px 4px 1px 4px; } - -/* line 12, ../themes/stylesheets/ext4/default/widgets/form/_checkboxgroup.scss */ -.x-form-invalid .x-form-checkboxgroup-body { - border: 1px solid #c30!important; - background: transparent repeat-x bottom; - background-image: url('images/gray/grid/invalid_line.gif'); - padding: 1px 3px 0 3px; } - -/* line 20, ../themes/stylesheets/ext4/default/widgets/form/_checkboxgroup.scss */ -.x-check-group-alt { - background: #d5d5d5; - border-top: 1px dotted #b4b4b4; - border-bottom: 1px dotted #b4b4b4; } - -/* line 27, ../themes/stylesheets/ext4/default/widgets/form/_checkboxgroup.scss */ -.x-form-check-group-label { - color: #333; - border-bottom: 1px solid #333; - margin: 0 30px 5px 0; - padding: 2px; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-wrap { - vertical-align: top; } - -/* line 10, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger { - background-image: url('images/gray/form/trigger.gif'); - background-position: 0 0; - width: 17px; - height: 21px; - border-bottom: 1px solid #b5b8c8; - cursor: pointer; - cursor: hand; - overflow: hidden; } - -/* line 24, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-border-box .x-form-trigger { - height: 22px; } - -/* line 28, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-field-default-toolbar .x-form-trigger { - height: 19px; } - -/* line 32, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-border-box .x-field-default-toolbar .x-form-trigger { - height: 20px; } - -/* line 37, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-over { - background-position: -17px 0; - border-bottom-color: #a1a1a1; } - -/* line 43, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-wrap-focus .x-form-trigger { - background-position: -51px 0; - border-bottom-color: #a1a1a1; } - -/* line 49, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-wrap-focus .x-form-trigger-over { - background-position: -68px 0; - border-bottom-color: null; } - -/* line 58, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-click, -.x-form-trigger-wrap-focus .x-form-trigger-click { - background-position: -34px 0; - border-bottom-color: null; } - -/* line 66, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-icon { - height: 16px; - background-repeat: no-repeat; - background-position: 7px 6px; } - -/* line 74, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-pickerfield-open .x-form-field { - -moz-border-radius-bottomleft: 0; - -webkit-border-bottom-left-radius: 0; - -o-border-bottom-left-radius: 0; - -ms-border-bottom-left-radius: 0; - -khtml-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -moz-border-radius-bottomright: 0; - -webkit-border-bottom-right-radius: 0; - -o-border-bottom-right-radius: 0; - -ms-border-bottom-right-radius: 0; - -khtml-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; } - -/* line 80, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-pickerfield-open-above .x-form-field { - -moz-border-radius-bottomleft: 3px; - -webkit-border-bottom-left-radius: 3px; - -o-border-bottom-left-radius: 3px; - -ms-border-bottom-left-radius: 3px; - -khtml-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; - -moz-border-radius-topleft: 0; - -webkit-border-top-left-radius: 0; - -o-border-top-left-radius: 0; - -ms-border-top-left-radius: 0; - -khtml-border-top-left-radius: 0; - border-top-left-radius: 0; - -moz-border-radius-topright: 0; - -webkit-border-top-right-radius: 0; - -o-border-top-right-radius: 0; - -ms-border-top-right-radius: 0; - -khtml-border-top-right-radius: 0; - border-top-right-radius: 0; } - -/* line 87, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-arrow-trigger .x-form-trigger-icon { - background-image: url('images/gray/boundlist/trigger-arrow.png'); } - -/* line 92, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-date-trigger { - background-image: url('images/gray/form/date-trigger.gif'); } - -/* line 99, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-wrap .x-form-spinner-up, -.x-form-trigger-wrap .x-form-spinner-down { - background-image: url('images/gray/form/spinner.gif'); - width: 17px !important; - height: 11px !important; - font-size: 0; - /*for IE*/ - border-bottom: 0; } -/* line 109, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-wrap .x-form-spinner-down { - background-position: 0 -11px; } - -/* line 113, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-wrap-focus .x-form-spinner-down { - background-position: -51px -11px; } - -/* line 116, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-wrap .x-form-spinner-down-over { - background-position: -17px -11px; } - -/* line 119, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-wrap-focus .x-form-spinner-down-over { - background-position: -68px -11px; } - -/* line 122, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-trigger-wrap .x-form-spinner-down-click { - background-position: -34px -11px; } - -/* line 131, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-up, -.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-down { - background-image: url('images/gray/form/spinner-small.gif'); - height: 10px !important; } -/* line 135, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-down { - background-position: 0 -10px; } -/* line 139, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-field-default-toolbar .x-form-trigger-wrap-focus .x-form-spinner-down { - background-position: -51px -10px; } -/* line 142, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-down-over { - background-position: -17px -10px; } -/* line 145, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-field-default-toolbar .x-form-trigger-wrap-focus .x-form-spinner-down-over { - background-position: -68px -10px; } -/* line 148, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-down-click { - background-position: -34px -10px; } - -/* line 154, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-trigger-noedit { - cursor: pointer; - cursor: hand; } - -/* line 160, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-item-disabled .x-trigger-noedit, .x-item-disabled .x-form-trigger { - cursor: auto; } - -/* line 166, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-clear-trigger { - background-image: url('images/gray/form/clear-trigger.gif'); } - -/* line 169, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-form-search-trigger { - background-image: url('images/gray/form/search-trigger.gif'); } - -/* line 177, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-quirks .prefixie6 .x-form-trigger-input-cell { - height: 22px; } -/* line 180, ../themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss */ -.x-quirks .prefixie6 .x-field-default-toolbar .x-form-trigger-input-cell { - height: 20px; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-wrap { - border: 1px solid #b5b8c8; } - /* line 9, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ - .x-html-editor-wrap .x-toolbar { - border-top-width: 0; - border-left-width: 0; - border-right-width: 0; } - /* line 15, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ - .x-html-editor-wrap textarea { - background-color: white; } - -/* line 20, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-btn-text { - background: transparent no-repeat; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 26, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-bold, -.x-menu-item img.x-edit-bold { - background-position: 0 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 32, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-italic, -.x-menu-item img.x-edit-italic { - background-position: -16px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 38, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-underline, -.x-menu-item img.x-edit-underline { - background-position: -32px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 44, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-forecolor, -.x-menu-item img.x-edit-forecolor { - background-position: -160px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 50, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-backcolor, -.x-menu-item img.x-edit-backcolor { - background-position: -176px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 56, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-justifyleft, -.x-menu-item img.x-edit-justifyleft { - background-position: -112px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 62, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-justifycenter, -.x-menu-item img.x-edit-justifycenter { - background-position: -128px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 68, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-justifyright, -.x-menu-item img.x-edit-justifyright { - background-position: -144px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 74, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-insertorderedlist, -.x-menu-item img.x-edit-insertorderedlist { - background-position: -80px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 80, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-insertunorderedlist, -.x-menu-item img.x-edit-insertunorderedlist { - background-position: -96px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 86, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-increasefontsize, -.x-menu-item img.x-edit-increasefontsize { - background-position: -48px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 92, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-decreasefontsize, -.x-menu-item img.x-edit-decreasefontsize { - background-position: -64px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 98, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-sourceedit, -.x-menu-item img.x-edit-sourceedit { - background-position: -192px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 104, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-edit-createlink, -.x-menu-item img.x-edit-createlink { - background-position: -208px 0; - background-image: url('images/gray/editor/tb-sprite.gif'); } - -/* line 109, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tip .x-tip-bd .x-tip-bd-inner { - padding: 5px; - padding-bottom: 1px; } - -/* line 115, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-toolbar { - position: static !important; } -/* line 118, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-tb .x-font-select { - font-size: 11px; } - -/* line 123, ../themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss */ -.x-html-editor-wrap textarea { - border: 0; - padding: 3px 2px; - overflow: auto; } - -/* line 7, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel, -.x-plain { - overflow: hidden; - position: relative; } - -/* line 24, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-ie .x-panel-header, -.x-ie .x-panel-header-tl, -.x-ie .x-panel-header-tc, -.x-ie .x-panel-header-tr, -.x-ie .x-panel-header-ml, -.x-ie .x-panel-header-mc, -.x-ie .x-panel-header-mr, -.x-ie .x-panel-header-bl, -.x-ie .x-panel-header-bc, -.x-ie .x-panel-header-br { - zoom: 1; } - -/* line 30, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-ie8 td.x-frame-mc { - vertical-align: top; } - -/* line 37, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-horizontal { - padding: 3px 5px 4px; } - -/* line 40, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-vertical { - padding: 5px 4px; } - -/* line 45, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-icon, -.x-window-header-icon { - width: 16px; - height: 16px; - background-repeat: no-repeat; - background-position: 0 0; - vertical-align: middle; - margin-right: 4px; } - -/* line 56, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-vertical .x-panel-header-icon, -.x-vertical .x-window-header-icon { - margin: 0 0 4px; } - -/* line 64, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-draggable, -.x-panel-header-draggable .x-panel-header-text, -.x-window-header-draggable, -.x-window-header-draggable .x-window-header-text { - cursor: move; } - -/* line 70, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-ghost, .x-window-ghost { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=65); - opacity: 0.65; - cursor: move; } - -/* line 76, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-horizontal .x-panel-header-body, .x-panel-header-horizontal .x-window-header-body, .x-panel-header-horizontal .x-btn-group-header-body, .x-window-header-horizontal .x-panel-header-body, .x-window-header-horizontal .x-window-header-body, .x-window-header-horizontal .x-btn-group-header-body, .x-btn-group-header-horizontal .x-panel-header-body, .x-btn-group-header-horizontal .x-window-header-body, .x-btn-group-header-horizontal .x-btn-group-header-body { - width: 100%; } - -/* line 82, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-vertical .x-panel-header-body, .x-panel-header-vertical .x-window-header-body, .x-panel-header-vertical .x-btn-group-header-body, .x-window-header-vertical .x-panel-header-body, .x-window-header-vertical .x-window-header-body, .x-window-header-vertical .x-btn-group-header-body, .x-btn-group-header-vertical .x-panel-header-body, .x-btn-group-header-vertical .x-window-header-body, .x-btn-group-header-vertical .x-btn-group-header-body { - height: 100%; } - -/* line 87, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-text-container { - overflow: hidden; - -o-text-overflow: ellipsis; - text-overflow: ellipsis; } - -/* line 93, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-text { - user-select: none; - -o-user-select: none; - -ms-user-select: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - cursor: default; - white-space: nowrap; } - -/* line 100, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-left .x-vml-base, -.x-panel-header-right .x-vml-base { - left: -3px !important; } - -/* line 106, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-body { - overflow: hidden; - position: relative; - font-size: 12px; } - -/* line 114, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-vertical .x-surface { - padding-left: 1px; } - -/* line 122, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-opera .x-panel-header-vertical .x-surface, -.x-strict .x-ie9 .x-panel-header-vertical .x-surface { - padding-left: 2px; } - -/* line 129, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-panel-header-collapsed-border-top { - border-bottom-width: 1px !important; } -/* line 132, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-panel-header-collapsed-border-right { - border-left-width: 1px !important; } -/* line 135, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-panel-header-collapsed-border-bottom { - border-top-width: 1px !important; } -/* line 138, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-panel-header-collapsed-border-left { - border-right-width: 1px !important; } - -/* line 145, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-vertical .x-frame-mc { - background-repeat: repeat-y; } - -/* line 248, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-default { - border-color: #d0d0d0; } - -/* line 253, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default { - font-size: 11px; - border-color: #d0d0d0; - border-width: 1px; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: linear-gradient(top, #f0f0f0, #d7d7d7); - -moz-box-shadow: #efeded 0 1px 0px 0 inset; - -webkit-box-shadow: #efeded 0 1px 0px 0 inset; - -o-box-shadow: #efeded 0 1px 0px 0 inset; - box-shadow: #efeded 0 1px 0px 0 inset; } - -/* line 277, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-top { - background-image: url('images/gray/panel-header/panel-header-default-top-bg.gif'); } - -/* line 281, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-bottom { - background-image: url('images/gray/panel-header/panel-header-default-bottom-bg.gif'); } - -/* line 285, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-left { - background-image: url('images/gray/panel-header/panel-header-default-left-bg.gif'); } - -/* line 289, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-right { - background-image: url('images/gray/panel-header/panel-header-default-right-bg.gif'); } - -/* line 293, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-right { - background-position: top right; } - -/* line 297, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-bottom { - background-position: bottom left; } - -/* line 338, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-text-default { - color: #333333; - font-size: 11px; - font-weight: bold; - font-family: tahoma, arial, verdana, sans-serif; - line-height: 17px; } - -/* line 348, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-body-default { - background: white; - border-color: #d0d0d0; - color: black; - border-width: 1px; - border-style: solid; } - -/* line 363, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-window-header-default, -.x-panel-collapsed .x-panel-header-default { - border-color: #d0d0d0; } - -/* line 368, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-vertical { - border-color: #d0d0d0; } - -/* line 375, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-left, -.x-panel-header-default-right { - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: linear-gradient(right, #f0f0f0, #d7d7d7); } - -/* line 416, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-panel-header-default-top { - -moz-border-radius-bottomleft: null; - -webkit-border-bottom-left-radius: null; - -o-border-bottom-left-radius: null; - -ms-border-bottom-left-radius: null; - -khtml-border-bottom-left-radius: null; - border-bottom-left-radius: null; - -moz-border-radius-bottomright: null; - -webkit-border-bottom-right-radius: null; - -o-border-bottom-right-radius: null; - -ms-border-bottom-right-radius: null; - -khtml-border-bottom-right-radius: null; - border-bottom-right-radius: null; } -/* line 420, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-panel-header-default-right { - -moz-border-radius-topleft: null; - -webkit-border-top-left-radius: null; - -o-border-top-left-radius: null; - -ms-border-top-left-radius: null; - -khtml-border-top-left-radius: null; - border-top-left-radius: null; - -moz-border-radius-bottomleft: null; - -webkit-border-bottom-left-radius: null; - -o-border-bottom-left-radius: null; - -ms-border-bottom-left-radius: null; - -khtml-border-bottom-left-radius: null; - border-bottom-left-radius: null; } -/* line 424, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-panel-header-default-bottom { - -moz-border-radius-topleft: null; - -webkit-border-top-left-radius: null; - -o-border-top-left-radius: null; - -ms-border-top-left-radius: null; - -khtml-border-top-left-radius: null; - border-top-left-radius: null; - -moz-border-radius-topright: null; - -webkit-border-top-right-radius: null; - -o-border-top-right-radius: null; - -ms-border-top-right-radius: null; - -khtml-border-top-right-radius: null; - border-top-right-radius: null; } -/* line 428, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-panel-header-default-left { - -moz-border-radius-topright: null; - -webkit-border-top-right-radius: null; - -o-border-top-right-radius: null; - -ms-border-top-right-radius: null; - -khtml-border-top-right-radius: null; - border-top-right-radius: null; - -moz-border-radius-bottomright: null; - -webkit-border-bottom-right-radius: null; - -o-border-bottom-right-radius: null; - -ms-border-bottom-right-radius: null; - -khtml-border-bottom-right-radius: null; - border-bottom-right-radius: null; } - -/* line 434, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-top { - -moz-box-shadow: #efeded 0 1px 0px 0 inset; - -webkit-box-shadow: #efeded 0 1px 0px 0 inset; - -o-box-shadow: #efeded 0 1px 0px 0 inset; - box-shadow: #efeded 0 1px 0px 0 inset; } - -/* line 438, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-right { - -moz-box-shadow: #efeded -1px 0 0px 0 inset; - -webkit-box-shadow: #efeded -1px 0 0px 0 inset; - -o-box-shadow: #efeded -1px 0 0px 0 inset; - box-shadow: #efeded -1px 0 0px 0 inset; } - -/* line 442, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-bottom { - -moz-box-shadow: #efeded 0 -1px 0px 0 inset; - -webkit-box-shadow: #efeded 0 -1px 0px 0 inset; - -o-box-shadow: #efeded 0 -1px 0px 0 inset; - box-shadow: #efeded 0 -1px 0px 0 inset; } - -/* line 446, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-left { - -moz-box-shadow: #efeded 1px 0 0px 0 inset; - -webkit-box-shadow: #efeded 1px 0 0px 0 inset; - -o-box-shadow: #efeded 1px 0 0px 0 inset; - box-shadow: #efeded 1px 0 0px 0 inset; } - -/* line 481, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-right-tc, -.x-panel-header-default-right-mc, -.x-panel-header-default-right-bc { - background-position: right 0; } - -/* line 487, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-bottom-tc, -.x-panel-header-default-bottom-mc, -.x-panel-header-default-bottom-bc { - background-position: 0 bottom; } - -/* line 248, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-default-framed { - border-color: #d0d0d0; } - -/* line 253, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed { - font-size: 11px; - border-color: #d0d0d0; - border-width: 1px; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: linear-gradient(top, #f0f0f0, #d7d7d7); - -moz-box-shadow: #efeded 0 1px 0px 0 inset; - -webkit-box-shadow: #efeded 0 1px 0px 0 inset; - -o-box-shadow: #efeded 0 1px 0px 0 inset; - box-shadow: #efeded 0 1px 0px 0 inset; } - -/* line 277, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-framed-top { - background-image: url('images/gray/panel-header/panel-header-default-framed-top-bg.gif'); } - -/* line 281, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-framed-bottom { - background-image: url('images/gray/panel-header/panel-header-default-framed-bottom-bg.gif'); } - -/* line 285, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-framed-left { - background-image: url('images/gray/panel-header/panel-header-default-framed-left-bg.gif'); } - -/* line 289, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-framed-right { - background-image: url('images/gray/panel-header/panel-header-default-framed-right-bg.gif'); } - -/* line 293, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-framed-right { - background-position: top right; } - -/* line 297, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nlg .x-panel-header-default-framed-bottom { - background-position: bottom left; } - -/* line 305, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-nbr .x-panel-header-default-framed { - background-image: none; } - -/* line 317, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-strict .x-ie9 .x-panel-header-default-framed-top, -.x-nlg.x-opera .x-panel-header-default-framed-top, -.x-nlg.x-safari .x-panel-header-default-framed-top { - background-image: url('images/gray/panel-header/panel-header-default-top-bg.gif'); } -/* line 321, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-strict .x-ie9 .x-panel-header-default-framed-bottom, -.x-nlg.x-opera .x-panel-header-default-framed-bottom, -.x-nlg.x-safari .x-panel-header-default-framed-bottom { - background-image: url('images/gray/panel-header/panel-header-default-bottom-bg.gif'); } -/* line 325, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-strict .x-ie9 .x-panel-header-default-framed-left, -.x-nlg.x-opera .x-panel-header-default-framed-left, -.x-nlg.x-safari .x-panel-header-default-framed-left { - background-image: url('images/gray/panel-header/panel-header-default-left-bg.gif'); } -/* line 329, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-strict .x-ie9 .x-panel-header-default-framed-right, -.x-nlg.x-opera .x-panel-header-default-framed-right, -.x-nlg.x-safari .x-panel-header-default-framed-right { - background-image: url('images/gray/panel-header/panel-header-default-right-bg.gif'); } - -/* line 338, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-text-default-framed { - color: #333333; - font-size: 11px; - font-weight: bold; - font-family: tahoma, arial, verdana, sans-serif; - line-height: 17px; } - -/* line 348, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-body-default-framed { - background: #f1f1f1; - border-color: #d0d0d0; - color: black; - border-width: 0; - border-style: solid; } - -/* line 363, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-collapsed .x-window-header-default-framed, -.x-panel-collapsed .x-panel-header-default-framed { - border-color: #d0d0d0; } - -/* line 368, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed-vertical { - border-color: #d0d0d0; } - -/* line 375, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed-left, -.x-panel-header-default-framed-right { - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: linear-gradient(right, #f0f0f0, #d7d7d7); } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-panel-default-framed { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - -o-border-radius: 4px; - -ms-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - padding: 4px 4px 4px 4px; - border-width: 1px; - border-style: solid; - background-color: #f1f1f1; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-panel-default-framed-mc { - background-color: #f1f1f1; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-default-framed { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000404px 1000404px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-default-framed-tl, -.x-nbr .x-panel-default-framed-bl, -.x-nbr .x-panel-default-framed-tr, -.x-nbr .x-panel-default-framed-br, -.x-nbr .x-panel-default-framed-tc, -.x-nbr .x-panel-default-framed-bc, -.x-nbr .x-panel-default-framed-ml, -.x-nbr .x-panel-default-framed-mr { - zoom: 1; - background-image: url('images/gray/panel/panel-default-framed-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-default-framed-ml, -.x-nbr .x-panel-default-framed-mr { - zoom: 1; - background-image: url('images/gray/panel/panel-default-framed-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-default-framed-mc { - padding: 1px 1px 1px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-panel-default-framed-tl, -.x-strict .x-ie7 .x-panel-default-framed-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-panel-header-default-framed-top { - -moz-border-radius-topleft: 4px; - -webkit-border-top-left-radius: 4px; - -o-border-top-left-radius: 4px; - -ms-border-top-left-radius: 4px; - -khtml-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - -ms-border-top-right-radius: 4px; - -khtml-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-bottomright: 0; - -webkit-border-bottom-right-radius: 0; - -o-border-bottom-right-radius: 0; - -ms-border-bottom-right-radius: 0; - -khtml-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomleft: 0; - -webkit-border-bottom-left-radius: 0; - -o-border-bottom-left-radius: 0; - -ms-border-bottom-left-radius: 0; - -khtml-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - padding: 3px 5px 4px 5px; - border-width: 1px 1px 0 1px; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: linear-gradient(top, #f0f0f0, #d7d7d7); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-panel-header-default-framed-top-mc { - background-image: url('images/gray/panel-header/panel-header-default-framed-top-bg.gif'); - background-color: #d7d2d2; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-top { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000404px 1000000px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-top-tl, -.x-nbr .x-panel-header-default-framed-top-bl, -.x-nbr .x-panel-header-default-framed-top-tr, -.x-nbr .x-panel-header-default-framed-top-br, -.x-nbr .x-panel-header-default-framed-top-tc, -.x-nbr .x-panel-header-default-framed-top-bc, -.x-nbr .x-panel-header-default-framed-top-ml, -.x-nbr .x-panel-header-default-framed-top-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-top-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-top-ml, -.x-nbr .x-panel-header-default-framed-top-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-top-sides.gif'); - background-position: 0 0; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-top-mc { - padding: 0px 2px 4px 2px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-panel-header-default-framed-top-tl, -.x-strict .x-ie7 .x-panel-header-default-framed-top-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-panel-header-default-framed-right { - -moz-border-radius-topleft: 0; - -webkit-border-top-left-radius: 0; - -o-border-top-left-radius: 0; - -ms-border-top-left-radius: 0; - -khtml-border-top-left-radius: 0; - border-top-left-radius: 0; - -moz-border-radius-topright: 4px; - -webkit-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - -ms-border-top-right-radius: 4px; - -khtml-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - -o-border-bottom-right-radius: 4px; - -ms-border-bottom-right-radius: 4px; - -khtml-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomleft: 0; - -webkit-border-bottom-left-radius: 0; - -o-border-bottom-left-radius: 0; - -ms-border-bottom-left-radius: 0; - -khtml-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - padding: 5px 4px 5px 4px; - border-width: 1px 1px 1px 0; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: linear-gradient(right, #f0f0f0, #d7d7d7); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-panel-header-default-framed-right-mc { - background-image: url('images/gray/panel-header/panel-header-default-framed-right-bg.gif'); - background-color: #d7d2d2; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-right { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000004px 1100400px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-right-tl, -.x-nbr .x-panel-header-default-framed-right-bl, -.x-nbr .x-panel-header-default-framed-right-tr, -.x-nbr .x-panel-header-default-framed-right-br, -.x-nbr .x-panel-header-default-framed-right-tc, -.x-nbr .x-panel-header-default-framed-right-bc, -.x-nbr .x-panel-header-default-framed-right-ml, -.x-nbr .x-panel-header-default-framed-right-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-right-corners.gif'); } -/* line 157, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-right-tc, -.x-nbr .x-panel-header-default-framed-right-bc { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-right-sides.gif'); - background-position: 0 0; - background-repeat: repeat-x; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-right-mc { - padding: 2px 1px 2px 4px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-panel-header-default-framed-right-tl, -.x-strict .x-ie7 .x-panel-header-default-framed-right-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-panel-header-default-framed-bottom { - -moz-border-radius-topleft: 0; - -webkit-border-top-left-radius: 0; - -o-border-top-left-radius: 0; - -ms-border-top-left-radius: 0; - -khtml-border-top-left-radius: 0; - border-top-left-radius: 0; - -moz-border-radius-topright: 0; - -webkit-border-top-right-radius: 0; - -o-border-top-right-radius: 0; - -ms-border-top-right-radius: 0; - -khtml-border-top-right-radius: 0; - border-top-right-radius: 0; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - -o-border-bottom-right-radius: 4px; - -ms-border-bottom-right-radius: 4px; - -khtml-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - -o-border-bottom-left-radius: 4px; - -ms-border-bottom-left-radius: 4px; - -khtml-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - padding: 3px 5px 4px 5px; - border-width: 0 1px 1px 1px; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: linear-gradient(top, #f0f0f0, #d7d7d7); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-panel-header-default-framed-bottom-mc { - background-image: url('images/gray/panel-header/panel-header-default-framed-bottom-bg.gif'); - background-color: #d7d2d2; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-bottom { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000000px 1000404px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-bottom-tl, -.x-nbr .x-panel-header-default-framed-bottom-bl, -.x-nbr .x-panel-header-default-framed-bottom-tr, -.x-nbr .x-panel-header-default-framed-bottom-br, -.x-nbr .x-panel-header-default-framed-bottom-tc, -.x-nbr .x-panel-header-default-framed-bottom-bc, -.x-nbr .x-panel-header-default-framed-bottom-ml, -.x-nbr .x-panel-header-default-framed-bottom-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-bottom-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-bottom-ml, -.x-nbr .x-panel-header-default-framed-bottom-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-bottom-sides.gif'); - background-position: 0 0; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-bottom-mc { - padding: 3px 2px 1px 2px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-panel-header-default-framed-bottom-tl, -.x-strict .x-ie7 .x-panel-header-default-framed-bottom-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-panel-header-default-framed-left { - -moz-border-radius-topleft: 4px; - -webkit-border-top-left-radius: 4px; - -o-border-top-left-radius: 4px; - -ms-border-top-left-radius: 4px; - -khtml-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 0; - -webkit-border-top-right-radius: 0; - -o-border-top-right-radius: 0; - -ms-border-top-right-radius: 0; - -khtml-border-top-right-radius: 0; - border-top-right-radius: 0; - -moz-border-radius-bottomright: 0; - -webkit-border-bottom-right-radius: 0; - -o-border-bottom-right-radius: 0; - -ms-border-bottom-right-radius: 0; - -khtml-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - -o-border-bottom-left-radius: 4px; - -ms-border-bottom-left-radius: 4px; - -khtml-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - padding: 5px 4px 5px 4px; - border-width: 1px 0 1px 1px; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: linear-gradient(right, #f0f0f0, #d7d7d7); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-panel-header-default-framed-left-mc { - background-image: url('images/gray/panel-header/panel-header-default-framed-left-bg.gif'); - background-color: #d7d2d2; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-left { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000400px 1100004px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-left-tl, -.x-nbr .x-panel-header-default-framed-left-bl, -.x-nbr .x-panel-header-default-framed-left-tr, -.x-nbr .x-panel-header-default-framed-left-br, -.x-nbr .x-panel-header-default-framed-left-tc, -.x-nbr .x-panel-header-default-framed-left-bc, -.x-nbr .x-panel-header-default-framed-left-ml, -.x-nbr .x-panel-header-default-framed-left-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-left-corners.gif'); } -/* line 157, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-left-tc, -.x-nbr .x-panel-header-default-framed-left-bc { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-left-sides.gif'); - background-position: 0 0; - background-repeat: repeat-x; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-left-mc { - padding: 2px 4px 2px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-panel-header-default-framed-left-tl, -.x-strict .x-ie7 .x-panel-header-default-framed-left-bl { - position: relative; - right: 0; } - -/* line 399, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed-top { - -moz-box-shadow: #efeded 0 1px 0px 0 inset, #efeded -1px 0 0px 0 inset, #efeded 1px 0 0px 0 inset; - -webkit-box-shadow: #efeded 0 1px 0px 0 inset, #efeded -1px 0 0px 0 inset, #efeded 1px 0 0px 0 inset; - -o-box-shadow: #efeded 0 1px 0px 0 inset, #efeded -1px 0 0px 0 inset, #efeded 1px 0 0px 0 inset; - box-shadow: #efeded 0 1px 0px 0 inset, #efeded -1px 0 0px 0 inset, #efeded 1px 0 0px 0 inset; } - -/* line 403, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed-right { - -moz-box-shadow: #efeded 0 1px 0px 0 inset, #efeded 0 -1px 0px 0 inset, #efeded -1px 0 0px 0 inset; - -webkit-box-shadow: #efeded 0 1px 0px 0 inset, #efeded 0 -1px 0px 0 inset, #efeded -1px 0 0px 0 inset; - -o-box-shadow: #efeded 0 1px 0px 0 inset, #efeded 0 -1px 0px 0 inset, #efeded -1px 0 0px 0 inset; - box-shadow: #efeded 0 1px 0px 0 inset, #efeded 0 -1px 0px 0 inset, #efeded -1px 0 0px 0 inset; } - -/* line 407, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed-bottom { - -moz-box-shadow: #efeded 0 -1px 0px 0 inset, #efeded -1px 0 0px 0 inset, #efeded 1px 0 0px 0 inset; - -webkit-box-shadow: #efeded 0 -1px 0px 0 inset, #efeded -1px 0 0px 0 inset, #efeded 1px 0 0px 0 inset; - -o-box-shadow: #efeded 0 -1px 0px 0 inset, #efeded -1px 0 0px 0 inset, #efeded 1px 0 0px 0 inset; - box-shadow: #efeded 0 -1px 0px 0 inset, #efeded -1px 0 0px 0 inset, #efeded 1px 0 0px 0 inset; } - -/* line 411, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed-left { - -moz-box-shadow: #efeded 0 1px 0px 0 inset, #efeded 0 -1px 0px 0 inset, #efeded 1px 0 0px 0 inset; - -webkit-box-shadow: #efeded 0 1px 0px 0 inset, #efeded 0 -1px 0px 0 inset, #efeded 1px 0 0px 0 inset; - -o-box-shadow: #efeded 0 1px 0px 0 inset, #efeded 0 -1px 0px 0 inset, #efeded 1px 0 0px 0 inset; - box-shadow: #efeded 0 1px 0px 0 inset, #efeded 0 -1px 0px 0 inset, #efeded 1px 0 0px 0 inset; } - -/* line 452, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel .x-panel-header-default-framed-top { - border-bottom-width: 1px !important; } - -/* line 456, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel .x-panel-header-default-framed-right { - border-left-width: 1px !important; } - -/* line 460, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel .x-panel-header-default-framed-bottom { - border-top-width: 1px !important; } - -/* line 464, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel .x-panel-header-default-framed-left { - border-right-width: 1px !important; } - -/* line 468, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed-collapsed { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - -o-border-radius: 4px; - -ms-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-panel-header-default-framed-collapsed-top { - -moz-border-radius-topleft: 4px; - -webkit-border-top-left-radius: 4px; - -o-border-top-left-radius: 4px; - -ms-border-top-left-radius: 4px; - -khtml-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - -ms-border-top-right-radius: 4px; - -khtml-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - -o-border-bottom-right-radius: 4px; - -ms-border-bottom-right-radius: 4px; - -khtml-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - -o-border-bottom-left-radius: 4px; - -ms-border-bottom-left-radius: 4px; - -khtml-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - padding: 3px 5px 4px 5px; - border-width: 1px; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: linear-gradient(top, #f0f0f0, #d7d7d7); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-panel-header-default-framed-collapsed-top-mc { - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-top-bg.gif'); - background-color: #d7d2d2; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-top { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000404px 1000404px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-top-tl, -.x-nbr .x-panel-header-default-framed-collapsed-top-bl, -.x-nbr .x-panel-header-default-framed-collapsed-top-tr, -.x-nbr .x-panel-header-default-framed-collapsed-top-br, -.x-nbr .x-panel-header-default-framed-collapsed-top-tc, -.x-nbr .x-panel-header-default-framed-collapsed-top-bc, -.x-nbr .x-panel-header-default-framed-collapsed-top-ml, -.x-nbr .x-panel-header-default-framed-collapsed-top-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-top-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-top-ml, -.x-nbr .x-panel-header-default-framed-collapsed-top-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-top-sides.gif'); - background-position: 0 0; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-top-mc { - padding: 0px 2px 1px 2px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-tl, -.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-panel-header-default-framed-collapsed-right { - -moz-border-radius-topleft: 4px; - -webkit-border-top-left-radius: 4px; - -o-border-top-left-radius: 4px; - -ms-border-top-left-radius: 4px; - -khtml-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - -ms-border-top-right-radius: 4px; - -khtml-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - -o-border-bottom-right-radius: 4px; - -ms-border-bottom-right-radius: 4px; - -khtml-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - -o-border-bottom-left-radius: 4px; - -ms-border-bottom-left-radius: 4px; - -khtml-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - padding: 5px 4px 5px 4px; - border-width: 1px; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: linear-gradient(right, #f0f0f0, #d7d7d7); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-panel-header-default-framed-collapsed-right-mc { - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-right-bg.gif'); - background-color: #d7d2d2; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-right { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000404px 1100404px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-right-tl, -.x-nbr .x-panel-header-default-framed-collapsed-right-bl, -.x-nbr .x-panel-header-default-framed-collapsed-right-tr, -.x-nbr .x-panel-header-default-framed-collapsed-right-br, -.x-nbr .x-panel-header-default-framed-collapsed-right-tc, -.x-nbr .x-panel-header-default-framed-collapsed-right-bc, -.x-nbr .x-panel-header-default-framed-collapsed-right-ml, -.x-nbr .x-panel-header-default-framed-collapsed-right-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-right-corners.gif'); } -/* line 157, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-right-tc, -.x-nbr .x-panel-header-default-framed-collapsed-right-bc { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-right-sides.gif'); - background-position: 0 0; - background-repeat: repeat-x; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-right-mc { - padding: 2px 1px 2px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-tl, -.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-panel-header-default-framed-collapsed-bottom { - -moz-border-radius-topleft: 4px; - -webkit-border-top-left-radius: 4px; - -o-border-top-left-radius: 4px; - -ms-border-top-left-radius: 4px; - -khtml-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - -ms-border-top-right-radius: 4px; - -khtml-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - -o-border-bottom-right-radius: 4px; - -ms-border-bottom-right-radius: 4px; - -khtml-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - -o-border-bottom-left-radius: 4px; - -ms-border-bottom-left-radius: 4px; - -khtml-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - padding: 3px 5px 4px 5px; - border-width: 1px; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(top, #f0f0f0, #d7d7d7); - background-image: linear-gradient(top, #f0f0f0, #d7d7d7); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-panel-header-default-framed-collapsed-bottom-mc { - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif'); - background-color: #d7d2d2; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-bottom { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000404px 1000404px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-bottom-tl, -.x-nbr .x-panel-header-default-framed-collapsed-bottom-bl, -.x-nbr .x-panel-header-default-framed-collapsed-bottom-tr, -.x-nbr .x-panel-header-default-framed-collapsed-bottom-br, -.x-nbr .x-panel-header-default-framed-collapsed-bottom-tc, -.x-nbr .x-panel-header-default-framed-collapsed-bottom-bc, -.x-nbr .x-panel-header-default-framed-collapsed-bottom-ml, -.x-nbr .x-panel-header-default-framed-collapsed-bottom-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-bottom-ml, -.x-nbr .x-panel-header-default-framed-collapsed-bottom-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif'); - background-position: 0 0; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-bottom-mc { - padding: 0px 2px 1px 2px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-tl, -.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-panel-header-default-framed-collapsed-left { - -moz-border-radius-topleft: 4px; - -webkit-border-top-left-radius: 4px; - -o-border-top-left-radius: 4px; - -ms-border-top-left-radius: 4px; - -khtml-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - -ms-border-top-right-radius: 4px; - -khtml-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - -o-border-bottom-right-radius: 4px; - -ms-border-bottom-right-radius: 4px; - -khtml-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - -o-border-bottom-left-radius: 4px; - -ms-border-bottom-left-radius: 4px; - -khtml-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - padding: 5px 4px 5px 4px; - border-width: 1px; - border-style: solid; - background-image: none; - background-color: #d7d2d2; - background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); - background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: -ms-linear-gradient(right, #f0f0f0, #d7d7d7); - background-image: linear-gradient(right, #f0f0f0, #d7d7d7); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-panel-header-default-framed-collapsed-left-mc { - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-left-bg.gif'); - background-color: #d7d2d2; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-left { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000404px 1100404px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-left-tl, -.x-nbr .x-panel-header-default-framed-collapsed-left-bl, -.x-nbr .x-panel-header-default-framed-collapsed-left-tr, -.x-nbr .x-panel-header-default-framed-collapsed-left-br, -.x-nbr .x-panel-header-default-framed-collapsed-left-tc, -.x-nbr .x-panel-header-default-framed-collapsed-left-bc, -.x-nbr .x-panel-header-default-framed-collapsed-left-ml, -.x-nbr .x-panel-header-default-framed-collapsed-left-mr { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-left-corners.gif'); } -/* line 157, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-left-tc, -.x-nbr .x-panel-header-default-framed-collapsed-left-bc { - zoom: 1; - background-image: url('images/gray/panel-header/panel-header-default-framed-collapsed-left-sides.gif'); - background-position: 0 0; - background-repeat: repeat-x; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-panel-header-default-framed-collapsed-left-mc { - padding: 2px 1px 2px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-tl, -.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-bl { - position: relative; - right: 0; } - -/* line 481, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed-right-tc, -.x-panel-header-default-framed-right-mc, -.x-panel-header-default-framed-right-bc { - background-position: right 0; } - -/* line 487, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-default-framed-bottom-tc, -.x-panel-header-default-framed-bottom-mc, -.x-panel-header-default-framed-bottom-bc { - background-position: 0 bottom; } - -/* line 197, ../themes/stylesheets/ext4/default/widgets/_panel.scss */ -.x-panel-header-plain, -.x-panel-body-plain { - border: 0; - padding: 0; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip { - position: absolute; - overflow: visible; - /*pointer needs to be able to stick out*/ - border-color: #868686; } - /* line 12, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ - .x-tip .x-tip-header .x-box-item { - padding: 3px 3px 0; } - /* line 16, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ - .x-tip .x-tip-header .x-tool { - padding: 0px 1px 0 0 !important; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-tip { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - -o-border-radius: 3px; - -ms-border-radius: 3px; - -khtml-border-radius: 3px; - border-radius: 3px; - padding: 2px 2px 2px 2px; - border-width: 1px; - border-style: solid; - background-color: #cccccc; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-tip-mc { - background-color: #cccccc; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tip { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100303px 1000303px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tip-tl, -.x-nbr .x-tip-bl, -.x-nbr .x-tip-tr, -.x-nbr .x-tip-br, -.x-nbr .x-tip-tc, -.x-nbr .x-tip-bc, -.x-nbr .x-tip-ml, -.x-nbr .x-tip-mr { - zoom: 1; - background-image: url('images/gray/tip/tip-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tip-ml, -.x-nbr .x-tip-mr { - zoom: 1; - background-image: url('images/gray/tip/tip-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tip-mc { - padding: 0px 0px 0px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-tip-tl, -.x-strict .x-ie7 .x-tip-bl { - position: relative; - right: 0; } - -/* line 31, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip-header-text { - user-select: none; - -o-user-select: none; - -ms-user-select: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - cursor: default; - color: #444444; - font-size: 11px; - font-weight: bold; } - -/* line 40, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip-header-draggable .x-tip-header-text { - cursor: move; } - -/* line 47, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip-body, -.x-form-invalid-tip-body { - overflow: hidden; - position: relative; - padding: 3px; } - -/* line 55, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip-header, -.x-tip-body, -.x-form-invalid-tip-body { - color: #444444; - font-size: 11px; - font-weight: normal; } - /* line 59, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ - .x-tip-header a, - .x-tip-body a, - .x-form-invalid-tip-body a { - color: #2a2a2a; } - -/* line 64, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip-anchor { - position: absolute; - overflow: hidden; - height: 0; - width: 0; - border-style: solid; - border-width: 5px; - border-color: #868686; - zoom: 1; } - -/* line 79, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-border-box .x-tip-anchor { - width: 10px; - height: 10px; } - -/* line 84, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip-anchor-top { - border-top-color: transparent; - border-left-color: transparent; - border-right-color: transparent; - _border-top-color: pink; - _border-left-color: pink; - _border-right-color: pink; - _filter: chroma(color=pink); } - -/* line 97, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip-anchor-bottom { - border-bottom-color: transparent; - border-left-color: transparent; - border-right-color: transparent; - _border-bottom-color: pink; - _border-left-color: pink; - _border-right-color: pink; - _filter: chroma(color=pink); } - -/* line 110, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip-anchor-left { - border-top-color: transparent; - border-bottom-color: transparent; - border-left-color: transparent; - _border-top-color: pink; - _border-bottom-color: pink; - _border-left-color: pink; - _filter: chroma(color=pink); } - -/* line 123, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-tip-anchor-right { - border-top-color: transparent; - border-bottom-color: transparent; - border-right-color: transparent; - _border-top-color: pink; - _border-bottom-color: pink; - _border-right-color: pink; - _filter: chroma(color=pink); } - -/* line 137, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-form-invalid-tip { - border-color: #a1311f; - -moz-box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; - -webkit-box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; - -o-box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; - box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; } - -/* line 146, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ -.x-form-invalid-tip-body { - background: 1px 1px no-repeat; - background-image: url('images/gray/form/exclamation.gif'); - padding-left: 22px; } - /* line 151, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ - .x-form-invalid-tip-body li { - margin-bottom: 4px; } - /* line 153, ../themes/stylesheets/ext4/default/widgets/_qtip.scss */ - .x-form-invalid-tip-body li.last { - margin-bottom: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-form-invalid-tip-default { - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - -o-border-radius: 5px; - -ms-border-radius: 5px; - -khtml-border-radius: 5px; - border-radius: 5px; - padding: 4px 4px 4px 4px; - border-width: 1px; - border-style: solid; - background-color: white; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-form-invalid-tip-default-mc { - background-color: white; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-form-invalid-tip-default { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100505px 1000505px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-form-invalid-tip-default-tl, -.x-nbr .x-form-invalid-tip-default-bl, -.x-nbr .x-form-invalid-tip-default-tr, -.x-nbr .x-form-invalid-tip-default-br, -.x-nbr .x-form-invalid-tip-default-tc, -.x-nbr .x-form-invalid-tip-default-bc, -.x-nbr .x-form-invalid-tip-default-ml, -.x-nbr .x-form-invalid-tip-default-mr { - zoom: 1; - background-image: url('images/gray/form-invalid-tip/form-invalid-tip-default-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-form-invalid-tip-default-ml, -.x-nbr .x-form-invalid-tip-default-mr { - zoom: 1; - background-image: url('images/gray/form-invalid-tip/form-invalid-tip-default-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-form-invalid-tip-default-mc { - padding: 0px 0px 0px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-form-invalid-tip-default-tl, -.x-strict .x-ie7 .x-form-invalid-tip-default-bl { - position: relative; - right: 0; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider { - zoom: 1; } - -/* line 10, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-inner { - position: relative; - left: 0; - top: 0; - overflow: visible; - zoom: 1; } - -/* line 18, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-focus { - position: absolute; - left: 0; - top: 0; - width: 1px; - height: 1px; - line-height: 1px; - font-size: 1px; - -moz-outline: 0 none; - outline: 0 none; - user-select: none; - -o-user-select: none; - -ms-user-select: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - cursor: default; - display: block; - overflow: hidden; } - -/* Horizontal styles */ -/* line 34, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-horz { - padding-left: 7px; - background: transparent no-repeat 0 -24px; - width: 100%; } - -/* line 40, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-horz .x-slider-end { - padding-right: 7px; - zoom: 1; - background: transparent no-repeat right -46px; } - -/* line 46, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-horz .x-slider-inner { - background: transparent repeat-x 0 -2px; - height: 18px; } - -/* line 51, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-horz .x-slider-thumb { - width: 14px; - height: 15px; - margin-left: -7px; - position: absolute; - left: 0; - top: 1px; - background: transparent no-repeat 0 0; } - -/* line 61, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-horz .x-slider-thumb-over { - background-position: -14px -15px; } - -/* line 65, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-horz .x-slider-thumb-drag { - background-position: -28px -30px; } - -/* Vertical styles */ -/* line 70, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-vert { - padding-top: 7px; - background: transparent no-repeat -44px 0; } - -/* line 75, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-vert .x-slider-end { - padding-bottom: 7px; - zoom: 1; - background: transparent no-repeat -22px bottom; - width: 22px; } - -/* line 82, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-vert .x-slider-inner { - background: transparent repeat-y 0 0; - width: 22px; } - -/* line 87, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-vert .x-slider-thumb { - width: 15px; - height: 14px; - margin-bottom: -7px; - position: absolute; - left: 3px; - bottom: 0; - background: transparent no-repeat 0 0; } - -/* line 97, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-vert .x-slider-thumb-over { - background-position: -15px -14px; } - -/* line 101, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-vert .x-slider-thumb-drag { - background-position: -30px -28px; } - -/* line 107, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-horz, -.x-slider-horz .x-slider-end, -.x-slider-horz .x-slider-inner { - background-image: url('images/gray/slider/slider-bg.png'); } - -/* line 111, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-horz .x-slider-thumb { - background-image: url('images/gray/slider/slider-thumb.png'); } - -/* line 117, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-vert, -.x-slider-vert .x-slider-end, -.x-slider-vert .x-slider-inner { - background-image: url('images/gray/slider/slider-v-bg.png'); } - -/* line 121, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-slider-vert .x-slider-thumb { - background-image: url('images/gray/slider/slider-v-thumb.png'); } - -/* line 129, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-ie6 .x-slider-horz, -.x-ie6 .x-slider-horz .x-slider-end, -.x-ie6 .x-slider-horz .x-slider-inner { - background-image: url('images/gray/slider/slider-bg.gif'); } -/* line 133, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-ie6 .x-slider-horz .x-slider-thumb { - background-image: url('images/gray/slider/slider-thumb.gif'); } -/* line 139, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-ie6 .x-slider-vert, -.x-ie6 .x-slider-vert .x-slider-end, -.x-ie6 .x-slider-vert .x-slider-inner { - background-image: url('images/gray/slider/slider-v-bg.gif'); } -/* line 143, ../themes/stylesheets/ext4/default/widgets/_slider.scss */ -.x-ie6 .x-slider-vert .x-slider-thumb { - background-image: url('images/gray/slider/slider-v-thumb.gif'); } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ -.x-progress { - position: relative; - border-width: 1px; - border-style: solid; - -moz-border-radius: 0; - -webkit-border-radius: 0; - -o-border-radius: 0; - -ms-border-radius: 0; - -khtml-border-radius: 0; - border-radius: 0; - overflow: hidden; - height: 20px; } - -/* line 17, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ -.x-progress-bar { - height: 18px; - overflow: hidden; - position: absolute; - width: 0; - -moz-border-radius: 0; - -webkit-border-radius: 0; - -o-border-radius: 0; - -ms-border-radius: 0; - -khtml-border-radius: 0; - border-radius: 0; - border-right: 1px solid; - border-top: 1px solid; } - -/* line 30, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ -.x-progress-text { - overflow: hidden; - position: absolute; - padding: 0 5px; - height: 18px; - font-weight: bold; - font-size: 11px; - line-height: 16px; - text-align: center; } - -/* line 45, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ -.x-progress-text-back { - padding-top: 1px; } - -/* line 50, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ -.x-strict .x-ie7m .x-progress { - height: 18px; } - -/* line 93, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ -.x-progress-default { - border-color: #8e8e8e; } - /* line 96, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ - .x-progress-default .x-progress-bar { - border-right-color: #8e8e8e; - border-top-color: #cecece; - background-image: none; - background-color: #ababab; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d1d1d1), color-stop(50%, #b8b8b8), color-stop(51%, #ababab), color-stop(100%, #9e9e9e)); - background-image: -webkit-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); - background-image: -moz-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); - background-image: -o-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); - background-image: -ms-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); - background-image: linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); } - /* line 103, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ - .x-progress-default .x-progress-text { - color: white; } - /* line 107, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ - .x-progress-default .x-progress-text-back { - color: #5d5d5d; } - -/* line 116, ../themes/stylesheets/ext4/default/widgets/_progress-bar.scss */ -.x-nlg .x-progress-default .x-progress-bar { - background: repeat-x; - background-image: url('images/gray/progress/progress-default-bg.gif'); } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-toolbar { - font-size: 11px; - border: 1px solid; - padding: 2px 0 2px 2px; } - /* line 13, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar .x-form-item-label { - font-size: 11px; - line-height: 15px; } - /* line 18, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar .x-toolbar-item { - margin: 0 2px 0 0; } - /* line 22, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar .x-toolbar-text { - margin-left: 4px; - margin-right: 6px; - white-space: nowrap; - color: black; - line-height: 16px; - font-family: tahoma, arial, verdana, sans-serif; - font-size: 11px; - font-weight: normal; } - /* line 33, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar .x-toolbar-separator { - display: block; - font-size: 1px; - overflow: hidden; - cursor: default; - border: 0; } - /* line 41, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar .x-toolbar-separator-horizontal { - margin: 0 3px 0 2px; - height: 14px; - width: 0px; - border-left: 1px solid #aca899; - border-right: 1px solid white; } - -/* line 53, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-quirks .x-ie .x-toolbar .x-toolbar-separator-horizontal { - width: 2px; } - -/* line 58, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-toolbar-footer { - background: transparent; - border: 0px none; - margin-top: 3px; - padding: 2px 0 2px 6px; } - /* line 65, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar-footer .x-box-inner { - border-width: 0; } - /* line 69, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar-footer .x-toolbar-item { - margin: 0 6px 0 0; } - -/* line 74, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-toolbar-vertical { - padding: 2px 2px 0 2px; } - /* line 77, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar-vertical .x-toolbar-item { - margin: 0 0 2px 0; } - /* line 81, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar-vertical .x-toolbar-text { - margin-top: 4px; - margin-bottom: 6px; } - /* line 86, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ - .x-toolbar-vertical .x-toolbar-separator-vertical { - margin: 2px 5px 3px 5px; - height: 0px; - width: 10px; - line-height: 0px; - border-top: 1px solid #aca899; - border-bottom: 1px solid white; } - -/* line 98, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-toolbar-scroller { - padding-left: 0; } - -/* line 102, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-toolbar-spacer { - width: 2px; } - -/* line 107, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-toolbar-more-icon { - background-image: url('images/gray/toolbar/more.gif') !important; - background-position: 2px center !important; - background-repeat: no-repeat; } - -/* line 144, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-toolbar-default { - border-color: #d0d0d0; - background-image: none; - background-color: #d8d8d8; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e6e6e6), color-stop(100%, #efefef)); - background-image: -webkit-linear-gradient(top, #e6e6e6, #efefef); - background-image: -moz-linear-gradient(top, #e6e6e6, #efefef); - background-image: -o-linear-gradient(top, #e6e6e6, #efefef); - background-image: -ms-linear-gradient(top, #e6e6e6, #efefef); - background-image: linear-gradient(top, #e6e6e6, #efefef); } - -/* line 155, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-nlg .x-toolbar-default { - background-image: url('images/gray/toolbar/toolbar-default-bg.gif') !important; - background-repeat: repeat-x; } - -/* line 123, ../themes/stylesheets/ext4/default/widgets/_toolbar.scss */ -.x-toolbar-plain { - border: 0; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window { - outline: none; - overflow: hidden; } - /* line 10, ../themes/stylesheets/ext4/default/widgets/_window.scss */ - .x-window .x-window-wrap { - position: relative; } - -/* line 15, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-body { - position: relative; - border-style: solid; - overflow: hidden; } - -/* line 24, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-maximized .x-window-wrap .x-window-header { - -moz-border-radius: 0 !important; - -webkit-border-radius: 0 !important; - -o-border-radius: 0 !important; - -ms-border-radius: 0 !important; - -khtml-border-radius: 0 !important; - border-radius: 0 !important; } - -/* line 30, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-top { - margin-bottom: -2px; } - -/* line 33, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-body-horizontal { - margin-top: -1px; } - -/* line 37, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-bottom { - margin-top: -1px; - margin-bottom: -1px; } - -/* line 42, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-left { - margin-right: -1px; } - -/* line 46, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-right { - margin-left: -1px; } - -/* line 51, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-vertical .x-surface { - padding-left: 1px; } - -/* line 58, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-collapsed .x-window-header-vertical { - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - -o-border-radius: 5px; - -ms-border-radius: 5px; - -khtml-border-radius: 5px; - border-radius: 5px; } -/* line 61, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-collapsed .x-window-header-horizontal { - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - -o-border-radius: 5px; - -ms-border-radius: 5px; - -khtml-border-radius: 5px; - border-radius: 5px; } -/* line 66, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-collapsed .x-window-header-left { - padding-right: 5px !important; - margin-right: 0; } -/* line 71, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-collapsed .x-window-header-right { - padding-left: 5px !important; - margin-left: 0; } -/* line 76, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-collapsed .x-window-header-top { - padding-bottom: 5px !important; - margin-bottom: -1px; } -/* line 81, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-collapsed .x-window-header-bottom { - padding-top: 5px !important; - margin-top: 0; } - -/* line 89, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-left .x-vml-base, -.x-window-header-right .x-vml-base { - left: -3px !important; } - -/* line 97, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-opera .x-window-header-vertical .x-surface, -.x-strict .x-ie9 .x-window-header-vertical .x-surface { - padding-left: 2px; } - -/* line 103, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-text-container { - overflow: hidden; - -o-text-overflow: ellipsis; - text-overflow: ellipsis; } - -/* line 109, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-text { - user-select: none; - -o-user-select: none; - -ms-user-select: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - cursor: default; - white-space: nowrap; } - -/* line 159, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-default { - border-color: #a9a9a9; - -moz-border-radius: 5px 5px; - -webkit-border-radius: 5px 5px; - -o-border-radius: 5px 5px; - -ms-border-radius: 5px 5px; - -khtml-border-radius: 5px 5px; - border-radius: 5px 5px; - -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - -o-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-window-default { - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - -o-border-top-left-radius: 5px; - -ms-border-top-left-radius: 5px; - -khtml-border-top-left-radius: 5px; - border-top-left-radius: 5px; - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; - -o-border-top-right-radius: 5px; - -ms-border-top-right-radius: 5px; - -khtml-border-top-right-radius: 5px; - border-top-right-radius: 5px; - -moz-border-radius-bottomright: 5px; - -webkit-border-bottom-right-radius: 5px; - -o-border-bottom-right-radius: 5px; - -ms-border-bottom-right-radius: 5px; - -khtml-border-bottom-right-radius: 5px; - border-bottom-right-radius: 5px; - -moz-border-radius-bottomleft: 5px; - -webkit-border-bottom-left-radius: 5px; - -o-border-bottom-left-radius: 5px; - -ms-border-bottom-left-radius: 5px; - -khtml-border-bottom-left-radius: 5px; - border-bottom-left-radius: 5px; - padding: 4px 4px 4px 4px; - border-width: 1px; - border-style: solid; - background-color: #e8e8e8; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-window-default-mc { - background-color: #e8e8e8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-default { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000505px 1000505px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-default-tl, -.x-nbr .x-window-default-bl, -.x-nbr .x-window-default-tr, -.x-nbr .x-window-default-br, -.x-nbr .x-window-default-tc, -.x-nbr .x-window-default-bc, -.x-nbr .x-window-default-ml, -.x-nbr .x-window-default-mr { - zoom: 1; - background-image: url('images/gray/window/window-default-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-default-ml, -.x-nbr .x-window-default-mr { - zoom: 1; - background-image: url('images/gray/window/window-default-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-default-mc { - padding: 0px 0px 0px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-window-default-tl, -.x-strict .x-ie7 .x-window-default-bl { - position: relative; - right: 0; } - -/* line 178, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-body-default { - border-color: #bcb1b0; - border-width: 1px; - background: #e0e0e0; - color: black; } - -/* line 188, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-default { - font-size: 11px; - border-color: #a9a9a9; - zoom: 1; } - -/* line 194, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-text-default { - color: #333333; - font-weight: bold; - line-height: 17px; - font-family: tahoma, arial, verdana, sans-serif; - font-size: 11px; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-window-header-default-top { - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - -o-border-top-left-radius: 5px; - -ms-border-top-left-radius: 5px; - -khtml-border-top-left-radius: 5px; - border-top-left-radius: 5px; - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; - -o-border-top-right-radius: 5px; - -ms-border-top-right-radius: 5px; - -khtml-border-top-right-radius: 5px; - border-top-right-radius: 5px; - -moz-border-radius-bottomright: 0; - -webkit-border-bottom-right-radius: 0; - -o-border-bottom-right-radius: 0; - -ms-border-bottom-right-radius: 0; - -khtml-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomleft: 0; - -webkit-border-bottom-left-radius: 0; - -o-border-bottom-left-radius: 0; - -ms-border-bottom-left-radius: 0; - -khtml-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - padding: 4px 5px 0 5px; - border-width: 1px 1px 0 1px; - border-style: solid; - background-color: #e8e8e8; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-window-header-default-top-mc { - background-color: #e8e8e8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-top { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000505px 1000000px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-top-tl, -.x-nbr .x-window-header-default-top-bl, -.x-nbr .x-window-header-default-top-tr, -.x-nbr .x-window-header-default-top-br, -.x-nbr .x-window-header-default-top-tc, -.x-nbr .x-window-header-default-top-bc, -.x-nbr .x-window-header-default-top-ml, -.x-nbr .x-window-header-default-top-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-top-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-top-ml, -.x-nbr .x-window-header-default-top-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-top-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-top-mc { - padding: 0px 1px 0 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-window-header-default-top-tl, -.x-strict .x-ie7 .x-window-header-default-top-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-window-header-default-right { - -moz-border-radius-topleft: 0; - -webkit-border-top-left-radius: 0; - -o-border-top-left-radius: 0; - -ms-border-top-left-radius: 0; - -khtml-border-top-left-radius: 0; - border-top-left-radius: 0; - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; - -o-border-top-right-radius: 5px; - -ms-border-top-right-radius: 5px; - -khtml-border-top-right-radius: 5px; - border-top-right-radius: 5px; - -moz-border-radius-bottomright: 5px; - -webkit-border-bottom-right-radius: 5px; - -o-border-bottom-right-radius: 5px; - -ms-border-bottom-right-radius: 5px; - -khtml-border-bottom-right-radius: 5px; - border-bottom-right-radius: 5px; - -moz-border-radius-bottomleft: 0; - -webkit-border-bottom-left-radius: 0; - -o-border-bottom-left-radius: 0; - -ms-border-bottom-left-radius: 0; - -khtml-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - padding: 5px 4px 5px 0; - border-width: 1px 1px 1px 0; - border-style: solid; - background-color: #e8e8e8; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-window-header-default-right-mc { - background-color: #e8e8e8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-right { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000005px 1000500px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-right-tl, -.x-nbr .x-window-header-default-right-bl, -.x-nbr .x-window-header-default-right-tr, -.x-nbr .x-window-header-default-right-br, -.x-nbr .x-window-header-default-right-tc, -.x-nbr .x-window-header-default-right-bc, -.x-nbr .x-window-header-default-right-ml, -.x-nbr .x-window-header-default-right-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-right-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-right-ml, -.x-nbr .x-window-header-default-right-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-right-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-right-mc { - padding: 1px 0px 1px 0; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-window-header-default-right-tl, -.x-strict .x-ie7 .x-window-header-default-right-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-window-header-default-bottom { - -moz-border-radius-topleft: 0; - -webkit-border-top-left-radius: 0; - -o-border-top-left-radius: 0; - -ms-border-top-left-radius: 0; - -khtml-border-top-left-radius: 0; - border-top-left-radius: 0; - -moz-border-radius-topright: 0; - -webkit-border-top-right-radius: 0; - -o-border-top-right-radius: 0; - -ms-border-top-right-radius: 0; - -khtml-border-top-right-radius: 0; - border-top-right-radius: 0; - -moz-border-radius-bottomright: 5px; - -webkit-border-bottom-right-radius: 5px; - -o-border-bottom-right-radius: 5px; - -ms-border-bottom-right-radius: 5px; - -khtml-border-bottom-right-radius: 5px; - border-bottom-right-radius: 5px; - -moz-border-radius-bottomleft: 5px; - -webkit-border-bottom-left-radius: 5px; - -o-border-bottom-left-radius: 5px; - -ms-border-bottom-left-radius: 5px; - -khtml-border-bottom-left-radius: 5px; - border-bottom-left-radius: 5px; - padding: 0 5px 4px 5px; - border-width: 0 1px 1px 1px; - border-style: solid; - background-color: #e8e8e8; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-window-header-default-bottom-mc { - background-color: #e8e8e8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-bottom { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000000px 1000505px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-bottom-tl, -.x-nbr .x-window-header-default-bottom-bl, -.x-nbr .x-window-header-default-bottom-tr, -.x-nbr .x-window-header-default-bottom-br, -.x-nbr .x-window-header-default-bottom-tc, -.x-nbr .x-window-header-default-bottom-bc, -.x-nbr .x-window-header-default-bottom-ml, -.x-nbr .x-window-header-default-bottom-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-bottom-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-bottom-ml, -.x-nbr .x-window-header-default-bottom-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-bottom-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-bottom-mc { - padding: 0 1px 0px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-window-header-default-bottom-tl, -.x-strict .x-ie7 .x-window-header-default-bottom-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-window-header-default-left { - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - -o-border-top-left-radius: 5px; - -ms-border-top-left-radius: 5px; - -khtml-border-top-left-radius: 5px; - border-top-left-radius: 5px; - -moz-border-radius-topright: 0; - -webkit-border-top-right-radius: 0; - -o-border-top-right-radius: 0; - -ms-border-top-right-radius: 0; - -khtml-border-top-right-radius: 0; - border-top-right-radius: 0; - -moz-border-radius-bottomright: 0; - -webkit-border-bottom-right-radius: 0; - -o-border-bottom-right-radius: 0; - -ms-border-bottom-right-radius: 0; - -khtml-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomleft: 5px; - -webkit-border-bottom-left-radius: 5px; - -o-border-bottom-left-radius: 5px; - -ms-border-bottom-left-radius: 5px; - -khtml-border-bottom-left-radius: 5px; - border-bottom-left-radius: 5px; - padding: 5px 0px 5px 4px; - border-width: 1px 0 1px 1px; - border-style: solid; - background-color: #e8e8e8; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-window-header-default-left-mc { - background-color: #e8e8e8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-left { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000500px 1000005px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-left-tl, -.x-nbr .x-window-header-default-left-bl, -.x-nbr .x-window-header-default-left-tr, -.x-nbr .x-window-header-default-left-br, -.x-nbr .x-window-header-default-left-tc, -.x-nbr .x-window-header-default-left-bc, -.x-nbr .x-window-header-default-left-ml, -.x-nbr .x-window-header-default-left-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-left-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-left-ml, -.x-nbr .x-window-header-default-left-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-left-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-left-mc { - padding: 1px 0px 1px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-window-header-default-left-tl, -.x-strict .x-ie7 .x-window-header-default-left-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-window-header-default-collapsed-top { - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - -o-border-top-left-radius: 5px; - -ms-border-top-left-radius: 5px; - -khtml-border-top-left-radius: 5px; - border-top-left-radius: 5px; - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; - -o-border-top-right-radius: 5px; - -ms-border-top-right-radius: 5px; - -khtml-border-top-right-radius: 5px; - border-top-right-radius: 5px; - -moz-border-radius-bottomright: 5px; - -webkit-border-bottom-right-radius: 5px; - -o-border-bottom-right-radius: 5px; - -ms-border-bottom-right-radius: 5px; - -khtml-border-bottom-right-radius: 5px; - border-bottom-right-radius: 5px; - -moz-border-radius-bottomleft: 5px; - -webkit-border-bottom-left-radius: 5px; - -o-border-bottom-left-radius: 5px; - -ms-border-bottom-left-radius: 5px; - -khtml-border-bottom-left-radius: 5px; - border-bottom-left-radius: 5px; - padding: 4px 5px 4px 5px; - border-width: 1px; - border-style: solid; - background-color: #e8e8e8; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-window-header-default-collapsed-top-mc { - background-color: #e8e8e8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-top { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000505px 1000505px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-top-tl, -.x-nbr .x-window-header-default-collapsed-top-bl, -.x-nbr .x-window-header-default-collapsed-top-tr, -.x-nbr .x-window-header-default-collapsed-top-br, -.x-nbr .x-window-header-default-collapsed-top-tc, -.x-nbr .x-window-header-default-collapsed-top-bc, -.x-nbr .x-window-header-default-collapsed-top-ml, -.x-nbr .x-window-header-default-collapsed-top-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-collapsed-top-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-top-ml, -.x-nbr .x-window-header-default-collapsed-top-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-collapsed-top-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-top-mc { - padding: 0px 1px 0px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-window-header-default-collapsed-top-tl, -.x-strict .x-ie7 .x-window-header-default-collapsed-top-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-window-header-default-collapsed-right { - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - -o-border-top-left-radius: 5px; - -ms-border-top-left-radius: 5px; - -khtml-border-top-left-radius: 5px; - border-top-left-radius: 5px; - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; - -o-border-top-right-radius: 5px; - -ms-border-top-right-radius: 5px; - -khtml-border-top-right-radius: 5px; - border-top-right-radius: 5px; - -moz-border-radius-bottomright: 5px; - -webkit-border-bottom-right-radius: 5px; - -o-border-bottom-right-radius: 5px; - -ms-border-bottom-right-radius: 5px; - -khtml-border-bottom-right-radius: 5px; - border-bottom-right-radius: 5px; - -moz-border-radius-bottomleft: 5px; - -webkit-border-bottom-left-radius: 5px; - -o-border-bottom-left-radius: 5px; - -ms-border-bottom-left-radius: 5px; - -khtml-border-bottom-left-radius: 5px; - border-bottom-left-radius: 5px; - padding: 5px 4px 5px 4px; - border-width: 1px; - border-style: solid; - background-color: #e8e8e8; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-window-header-default-collapsed-right-mc { - background-color: #e8e8e8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-right { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000505px 1000505px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-right-tl, -.x-nbr .x-window-header-default-collapsed-right-bl, -.x-nbr .x-window-header-default-collapsed-right-tr, -.x-nbr .x-window-header-default-collapsed-right-br, -.x-nbr .x-window-header-default-collapsed-right-tc, -.x-nbr .x-window-header-default-collapsed-right-bc, -.x-nbr .x-window-header-default-collapsed-right-ml, -.x-nbr .x-window-header-default-collapsed-right-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-collapsed-right-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-right-ml, -.x-nbr .x-window-header-default-collapsed-right-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-collapsed-right-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-right-mc { - padding: 1px 0px 1px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-window-header-default-collapsed-right-tl, -.x-strict .x-ie7 .x-window-header-default-collapsed-right-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-window-header-default-collapsed-bottom { - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - -o-border-top-left-radius: 5px; - -ms-border-top-left-radius: 5px; - -khtml-border-top-left-radius: 5px; - border-top-left-radius: 5px; - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; - -o-border-top-right-radius: 5px; - -ms-border-top-right-radius: 5px; - -khtml-border-top-right-radius: 5px; - border-top-right-radius: 5px; - -moz-border-radius-bottomright: 5px; - -webkit-border-bottom-right-radius: 5px; - -o-border-bottom-right-radius: 5px; - -ms-border-bottom-right-radius: 5px; - -khtml-border-bottom-right-radius: 5px; - border-bottom-right-radius: 5px; - -moz-border-radius-bottomleft: 5px; - -webkit-border-bottom-left-radius: 5px; - -o-border-bottom-left-radius: 5px; - -ms-border-bottom-left-radius: 5px; - -khtml-border-bottom-left-radius: 5px; - border-bottom-left-radius: 5px; - padding: 4px 5px 4px 5px; - border-width: 1px; - border-style: solid; - background-color: #e8e8e8; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-window-header-default-collapsed-bottom-mc { - background-color: #e8e8e8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-bottom { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000505px 1000505px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-bottom-tl, -.x-nbr .x-window-header-default-collapsed-bottom-bl, -.x-nbr .x-window-header-default-collapsed-bottom-tr, -.x-nbr .x-window-header-default-collapsed-bottom-br, -.x-nbr .x-window-header-default-collapsed-bottom-tc, -.x-nbr .x-window-header-default-collapsed-bottom-bc, -.x-nbr .x-window-header-default-collapsed-bottom-ml, -.x-nbr .x-window-header-default-collapsed-bottom-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-collapsed-bottom-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-bottom-ml, -.x-nbr .x-window-header-default-collapsed-bottom-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-collapsed-bottom-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-bottom-mc { - padding: 0px 1px 0px 1px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-tl, -.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-window-header-default-collapsed-left { - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - -o-border-top-left-radius: 5px; - -ms-border-top-left-radius: 5px; - -khtml-border-top-left-radius: 5px; - border-top-left-radius: 5px; - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; - -o-border-top-right-radius: 5px; - -ms-border-top-right-radius: 5px; - -khtml-border-top-right-radius: 5px; - border-top-right-radius: 5px; - -moz-border-radius-bottomright: 5px; - -webkit-border-bottom-right-radius: 5px; - -o-border-bottom-right-radius: 5px; - -ms-border-bottom-right-radius: 5px; - -khtml-border-bottom-right-radius: 5px; - border-bottom-right-radius: 5px; - -moz-border-radius-bottomleft: 5px; - -webkit-border-bottom-left-radius: 5px; - -o-border-bottom-left-radius: 5px; - -ms-border-bottom-left-radius: 5px; - -khtml-border-bottom-left-radius: 5px; - border-bottom-left-radius: 5px; - padding: 5px 4px 5px 4px; - border-width: 1px; - border-style: solid; - background-color: #e8e8e8; } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-window-header-default-collapsed-left-mc { - background-color: #e8e8e8; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-left { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1000505px 1000505px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-left-tl, -.x-nbr .x-window-header-default-collapsed-left-bl, -.x-nbr .x-window-header-default-collapsed-left-tr, -.x-nbr .x-window-header-default-collapsed-left-br, -.x-nbr .x-window-header-default-collapsed-left-tc, -.x-nbr .x-window-header-default-collapsed-left-bc, -.x-nbr .x-window-header-default-collapsed-left-ml, -.x-nbr .x-window-header-default-collapsed-left-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-collapsed-left-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-left-ml, -.x-nbr .x-window-header-default-collapsed-left-mr { - zoom: 1; - background-image: url('images/gray/window-header/window-header-default-collapsed-left-sides.gif'); - background-position: 0 0; - background-repeat: repeat-y; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-window-header-default-collapsed-left-mc { - padding: 1px 0px 1px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-window-header-default-collapsed-left-tl, -.x-strict .x-ie7 .x-window-header-default-collapsed-left-bl { - position: relative; - right: 0; } - -/* line 217, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-default-top { - -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - -o-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; } - -/* line 221, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-default-right { - -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; - -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; - -o-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; - box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; } - -/* line 225, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-default-bottom { - -moz-box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - -webkit-box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - -o-box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; } - -/* line 229, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-header-default-left { - -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - -o-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; - box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; } - -/* line 130, ../themes/stylesheets/ext4/default/widgets/_window.scss */ -.x-window-body-plain { - background: transparent; } - -/* line 2, ../themes/stylesheets/ext4/default/util/_messagebox.scss */ -.x-message-box .x-window-body { - background-color: #e8e8e8; - border: none; } - -/* line 7, ../themes/stylesheets/ext4/default/util/_messagebox.scss */ -.x-message-box .x-progress-wrap { - margin-top: 4px; } - -/* line 11, ../themes/stylesheets/ext4/default/util/_messagebox.scss */ -.x-message-box-icon { - width: 47px; - height: 32px; } - -/* line 19, ../themes/stylesheets/ext4/default/util/_messagebox.scss */ -.x-message-box-info, -.x-message-box-warning, -.x-message-box-question, -.x-message-box-error { - background: transparent no-repeat top left; } - -/* line 23, ../themes/stylesheets/ext4/default/util/_messagebox.scss */ -.x-message-box .x-msg-box-wait { - background-image: url('images/gray/shared/blue-loading.gif'); } - -/* line 27, ../themes/stylesheets/ext4/default/util/_messagebox.scss */ -.x-message-box-info { - background-image: url('images/gray/shared/icon-info.gif'); } - -/* line 31, ../themes/stylesheets/ext4/default/util/_messagebox.scss */ -.x-message-box-warning { - background-image: url('images/gray/shared/icon-warning.gif'); } - -/* line 35, ../themes/stylesheets/ext4/default/util/_messagebox.scss */ -.x-message-box-question { - background-image: url('images/gray/shared/icon-question.gif'); } - -/* line 39, ../themes/stylesheets/ext4/default/util/_messagebox.scss */ -.x-message-box-error { - background-image: url('images/gray/shared/icon-error.gif'); } - -/* line 73, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar { - position: relative; - background-color: transparent; - background-image: none; - background-color: #d2d2d2; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dfdede), color-stop(100%, #d2d2d2)); - background-image: -webkit-linear-gradient(top, #dfdede, #d2d2d2); - background-image: -moz-linear-gradient(top, #dfdede, #d2d2d2); - background-image: -o-linear-gradient(top, #dfdede, #d2d2d2); - background-image: -ms-linear-gradient(top, #dfdede, #d2d2d2); - background-image: linear-gradient(top, #dfdede, #d2d2d2); - font-size: 11px; } - -/* line 80, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-nlg .x-tab-bar { - background-image: url('images/gray/tab-bar/tab-bar-default-bg.gif'); } - -/* line 85, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-default-plain, -.x-nlg .x-tab-bar-default-plain { - background: transparent none; } - -/* line 90, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-body { - border-style: solid; - border-color: #d0d0d0; - position: relative; - z-index: 2; - zoom: 1; } - -/* Top Tabs */ -/* line 4, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-top .x-tab-bar-body { - height: 20px; - border-width: 1px 1px 0; - padding: 1px 0 3px; } -/* line 10, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-top .x-tab-bar-strip { - /*position strip from top rather than bottom to avoid off-by-one error in IE6*/ - top: 22px; - border-width: 1px 1px 0; - height: 2px; } - -/* line 19, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-border-box .x-tab-bar-top .x-tab-bar-body { - height: 25px; } -/* line 23, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-border-box .x-tab-bar-top .x-tab-bar-strip { - height: 3px; } - -/* line 4, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-top .x-tab-bar-body-default-plain { - height: 20px; - border-width: 0; - padding: 0 0 2px; } -/* line 10, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-top .x-tab-bar-strip-default-plain { - /*position strip from top rather than bottom to avoid off-by-one error in IE6*/ - top: 20px; - border-width: 1px 1px 0 1px; - height: 2px; } - -/* line 19, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-border-box .x-tab-bar-top .x-tab-bar-body-default-plain { - height: 22px; } -/* line 23, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-border-box .x-tab-bar-top .x-tab-bar-strip-default-plain { - height: 3px; } - -/* Bottom Tabs */ -/* line 32, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-bottom .x-tab-bar-body { - height: 20px; - border-width: 0 1px 1px; - padding: 3px 0 1px; } - /* line 37, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ - .x-tab-bar-bottom .x-tab-bar-body .x-box-inner { - position: relative; - top: -1px; } - /* line 44, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ - .x-tab-bar-bottom .x-tab-bar-body .x-box-scroller, - .x-tab-bar-bottom .x-tab-bar-body .x-box-scroller-left, - .x-tab-bar-bottom .x-tab-bar-body .x-box-scroller-right { - height: 22px; } -/* line 49, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-bottom .x-tab-bar-strip { - top: 0; - border-width: 0 1px 1px 1px; - height: 2px; } - -/* line 57, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-border-box .x-tab-bar-bottom .x-tab-bar-body { - height: 25px; } -/* line 61, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-border-box .x-tab-bar-bottom .x-tab-bar-strip { - height: 3px; } - -/* line 32, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-bottom .x-tab-bar-body-default-plain { - height: 20px; - border-width: 0; - padding: 3px 0 0; } - /* line 37, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ - .x-tab-bar-bottom .x-tab-bar-body-default-plain .x-box-inner { - position: relative; - top: -1px; } - /* line 44, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ - .x-tab-bar-bottom .x-tab-bar-body-default-plain .x-box-scroller, - .x-tab-bar-bottom .x-tab-bar-body-default-plain .x-box-scroller-left, - .x-tab-bar-bottom .x-tab-bar-body-default-plain .x-box-scroller-right { - height: 21px; } -/* line 49, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-bottom .x-tab-bar-strip-default-plain { - top: 0; - border-width: 0 1px 1px 1px; - height: 2px; } - -/* line 57, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-border-box .x-tab-bar-bottom .x-tab-bar-body-default-plain { - height: 23px; } -/* line 61, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-border-box .x-tab-bar-bottom .x-tab-bar-strip-default-plain { - height: 3px; } - -/* line 141, ../themes/stylesheets/ext4/default/widgets/_tabbar.scss */ -.x-tab-bar-strip-default, -.x-tab-bar-strip-default-plain { - font-size: 0; - line-height: 0; - position: absolute; - z-index: 1; - border-style: solid; - overflow: hidden; - border-color: #d0d0d0; - background-color: #eaeaea; - zoom: 1; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-tab-default-top { - -moz-border-radius-topleft: 4px; - -webkit-border-top-left-radius: 4px; - -o-border-top-left-radius: 4px; - -ms-border-top-left-radius: 4px; - -khtml-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-right-radius: 4px; - -o-border-top-right-radius: 4px; - -ms-border-top-right-radius: 4px; - -khtml-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-bottomright: 0; - -webkit-border-bottom-right-radius: 0; - -o-border-bottom-right-radius: 0; - -ms-border-bottom-right-radius: 0; - -khtml-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomleft: 0; - -webkit-border-bottom-left-radius: 0; - -o-border-bottom-left-radius: 0; - -ms-border-bottom-left-radius: 0; - -khtml-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - padding: 3px 3px 0 3px; - border-width: 1px 1px 0 1px; - border-style: solid; - background-image: none; - background-color: #eaeaea; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); - background-image: -webkit-linear-gradient(top, #dcdcdc, #eaeaea); - background-image: -moz-linear-gradient(top, #dcdcdc, #eaeaea); - background-image: -o-linear-gradient(top, #dcdcdc, #eaeaea); - background-image: -ms-linear-gradient(top, #dcdcdc, #eaeaea); - background-image: linear-gradient(top, #dcdcdc, #eaeaea); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-tab-default-top-mc { - background-image: url('images/gray/tab/tab-default-top-bg.gif'); - background-color: #eaeaea; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tab-default-top { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100404px 1000000px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tab-default-top-tl, -.x-nbr .x-tab-default-top-bl, -.x-nbr .x-tab-default-top-tr, -.x-nbr .x-tab-default-top-br, -.x-nbr .x-tab-default-top-tc, -.x-nbr .x-tab-default-top-bc, -.x-nbr .x-tab-default-top-ml, -.x-nbr .x-tab-default-top-mr { - zoom: 1; - background-image: url('images/gray/tab/tab-default-top-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tab-default-top-ml, -.x-nbr .x-tab-default-top-mr { - zoom: 1; - background-image: url('images/gray/tab/tab-default-top-sides.gif'); - background-position: 0 0; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tab-default-top-mc { - padding: 0px 0px 0 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-tab-default-top-tl, -.x-strict .x-ie7 .x-tab-default-top-bl { - position: relative; - right: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-tab-default-bottom { - -moz-border-radius-topleft: 0; - -webkit-border-top-left-radius: 0; - -o-border-top-left-radius: 0; - -ms-border-top-left-radius: 0; - -khtml-border-top-left-radius: 0; - border-top-left-radius: 0; - -moz-border-radius-topright: 0; - -webkit-border-top-right-radius: 0; - -o-border-top-right-radius: 0; - -ms-border-top-right-radius: 0; - -khtml-border-top-right-radius: 0; - border-top-right-radius: 0; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - -o-border-bottom-right-radius: 4px; - -ms-border-bottom-right-radius: 4px; - -khtml-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - -o-border-bottom-left-radius: 4px; - -ms-border-bottom-left-radius: 4px; - -khtml-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - padding: 0 3px 3px 3px; - border-width: 0 1px 1px 1px; - border-style: solid; - background-image: none; - background-color: #eaeaea; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); - background-image: -webkit-linear-gradient(bottom, #dcdcdc, #eaeaea); - background-image: -moz-linear-gradient(bottom, #dcdcdc, #eaeaea); - background-image: -o-linear-gradient(bottom, #dcdcdc, #eaeaea); - background-image: -ms-linear-gradient(bottom, #dcdcdc, #eaeaea); - background-image: linear-gradient(bottom, #dcdcdc, #eaeaea); } - -/* line 102, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nlg .x-tab-default-bottom-mc { - background-image: url('images/gray/tab/tab-default-bottom-bg.gif'); - background-color: #eaeaea; } - -/* line 115, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tab-default-bottom { - padding: 0 !important; - border-width: 0 !important; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - -o-border-radius: 0px; - -ms-border-radius: 0px; - -khtml-border-radius: 0px; - border-radius: 0px; - background-color: transparent; - background-position: 1100000px 1000404px; } -/* line 147, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tab-default-bottom-tl, -.x-nbr .x-tab-default-bottom-bl, -.x-nbr .x-tab-default-bottom-tr, -.x-nbr .x-tab-default-bottom-br, -.x-nbr .x-tab-default-bottom-tc, -.x-nbr .x-tab-default-bottom-bc, -.x-nbr .x-tab-default-bottom-ml, -.x-nbr .x-tab-default-bottom-mr { - zoom: 1; - background-image: url('images/gray/tab/tab-default-bottom-corners.gif'); } -/* line 168, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tab-default-bottom-ml, -.x-nbr .x-tab-default-bottom-mr { - zoom: 1; - background-image: url('images/gray/tab/tab-default-bottom-sides.gif'); - background-position: 0 0; } -/* line 200, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-nbr .x-tab-default-bottom-mc { - padding: 0 0px 0px 0px; } - -/* line 210, ../themes/stylesheets/ext4/default/mixins/_frame.scss */ -.x-strict .x-ie7 .x-tab-default-bottom-tl, -.x-strict .x-ie7 .x-tab-default-bottom-bl { - position: relative; - right: 0; } - -/* line 28, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab { - z-index: 1; - margin: 0 0 0 2px; - display: inline-block; - zoom: 1; - *display: inline; - white-space: nowrap; - height: 20px; - border-color: #b5b5b5; - cursor: pointer; - cursor: hand; } - /* line 40, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab button { - cursor: pointer; - cursor: hand; } - /* line 45, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab em { - display: block; - padding: 0 6px; - line-height: 1px; } - /* line 51, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab button { - background: none; - border: 0; - padding: 0; - margin: 0; - -webkit-appearance: none; - font-size: 11px; - font-weight: bold; - font-family: tahoma, arial, verdana, sans-serif; - color: #6f6f6f; - outline: 0 none; - overflow-x: visible; } - /* line 69, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab button::-moz-focus-inner { - border: 0; - padding: 0; } - /* line 74, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab button .x-tab-inner { - background-color: transparent; - background-repeat: no-repeat; - background-position: 0 -2px; - display: block; - text-align: center; - white-space: nowrap; - text-overflow: ellipsis; - -o-text-overflow: ellipsis; - overflow: hidden; } - /* line 87, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab img { - display: none; } - -/* line 93, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-border-box .x-tab-default-top { - height: 21px; } -/* line 96, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-border-box .x-tab-default-bottom { - height: 21px; } - -/* line 103, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -* html .x-ie .x-tab button { - width: 1px; } - -/* line 110, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-strict .x-ie6 .x-tab .x-frame-mc, -.x-strict .x-ie7 .x-tab .x-frame-mc { - height: 100%; } - -/* line 115, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-ie .x-tab-active button:active { - position: relative; - top: -1px; - left: -1px; } - -/* line 124, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-default-top { - -moz-box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - -webkit-box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - -o-box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - border-bottom: 1px solid #d0d0d0 !important; } - /* line 134, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab-default-top em { - padding-bottom: 3px; } - /* line 139, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab-default-top button, - .x-tab-default-top .x-tab-inner { - height: 13px; - line-height: 13px; } - -/* line 148, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-safari4 .x-tab-default-top .x-tab-inner, -.x-safari5_0 .x-tab-default-top .x-tab-inner { - line-height: 11px; } - -/* line 153, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-default-top { - border-bottom-width: 1px !important; } - -/* line 157, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-default-top-active { - border-bottom-color: #eaeaea !important; } - -/* line 163, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-default-bottom { - -moz-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - -webkit-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - -o-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - border-top: 1px solid #d0d0d0 !important; - -moz-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - -webkit-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - -o-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; - box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; } - /* line 178, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab-default-bottom em { - padding-top: 3px; } - /* line 183, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab-default-bottom button, - .x-tab-default-bottom .x-tab-inner { - height: 13px; - line-height: 13px; } - -/* line 189, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-default-bottom { - border-top-width: 1px !important; } - -/* line 193, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-default-bottom-active { - border-top-color: #eaeaea !important; } - -/* line 197, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-default-disabled { - cursor: default; - border-color: #cec7c7; - background-image: none; - background-color: #e7dfdf; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e7dfdf), color-stop(100%, #f2e3e4)); - background-image: -webkit-linear-gradient(top, #e7dfdf, #f2e3e4); - background-image: -moz-linear-gradient(top, #e7dfdf, #f2e3e4); - background-image: -o-linear-gradient(top, #e7dfdf, #f2e3e4); - background-image: -ms-linear-gradient(top, #e7dfdf, #f2e3e4); - background-image: linear-gradient(top, #e7dfdf, #f2e3e4); } - /* line 203, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab-default-disabled button { - color: #c3b3b3 !important; } - -/* line 209, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-icon-text-left .x-tab-inner { - padding-left: 20px; } - -/* line 214, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab button { - position: relative; } - -/* line 218, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-icon { - position: absolute; - background-repeat: no-repeat; - background-position: 0 -1px; - top: 0; - left: 0; - right: auto; - bottom: 0; - width: 18px; - height: 18px; } - -/* line 233, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-strict .x-ie8 .x-tab button, -.x-strict .x-ie9 .x-tab button { - overflow-y: visible; } - -/* line 238, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-default-disabled .x-tab-icon { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - opacity: 0.5; } - -/* In IE a disabled icon needs to be hidden or the opacity effect covers some of the text */ -/* line 243, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-noicon .x-tab-icon { - display: none; } - -/* line 269, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-top-over { - background-image: none; - background-color: #f2eeee; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e7e6e6), color-stop(25%, #eeeaea), color-stop(45%, #f2eeee)); - background-image: -webkit-linear-gradient(top, #e7e6e6, #eeeaea 25%, #f2eeee 45%); - background-image: -moz-linear-gradient(top, #e7e6e6, #eeeaea 25%, #f2eeee 45%); - background-image: -o-linear-gradient(top, #e7e6e6, #eeeaea 25%, #f2eeee 45%); - background-image: -ms-linear-gradient(top, #e7e6e6, #eeeaea 25%, #f2eeee 45%); - background-image: linear-gradient(top, #e7e6e6, #eeeaea 25%, #f2eeee 45%); } - -/* line 272, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-bottom-over { - background-image: none; - background-color: #f2eeee; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #e7e6e6), color-stop(25%, #eeeaea), color-stop(45%, #f2eeee)); - background-image: -webkit-linear-gradient(bottom, #e7e6e6, #eeeaea 25%, #f2eeee 45%); - background-image: -moz-linear-gradient(bottom, #e7e6e6, #eeeaea 25%, #f2eeee 45%); - background-image: -o-linear-gradient(bottom, #e7e6e6, #eeeaea 25%, #f2eeee 45%); - background-image: -ms-linear-gradient(bottom, #e7e6e6, #eeeaea 25%, #f2eeee 45%); - background-image: linear-gradient(bottom, #e7e6e6, #eeeaea 25%, #f2eeee 45%); } - -/* line 277, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-active { - z-index: 3; } - /* line 283, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab-active button { - color: #333333; } - -/* line 299, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-top-active { - background-image: none; - background-color: #eaeaea; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eaeaea)); - background-image: -webkit-linear-gradient(top, #ffffff, #eaeaea); - background-image: -moz-linear-gradient(top, #ffffff, #eaeaea); - background-image: -o-linear-gradient(top, #ffffff, #eaeaea); - background-image: -ms-linear-gradient(top, #ffffff, #eaeaea); - background-image: linear-gradient(top, #ffffff, #eaeaea); } - -/* line 302, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-bottom-active { - background-image: none; - background-color: #eaeaea; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ffffff), color-stop(100%, #eaeaea)); - background-image: -webkit-linear-gradient(bottom, #ffffff, #eaeaea); - background-image: -moz-linear-gradient(bottom, #ffffff, #eaeaea); - background-image: -o-linear-gradient(bottom, #ffffff, #eaeaea); - background-image: -ms-linear-gradient(bottom, #ffffff, #eaeaea); - background-image: linear-gradient(bottom, #ffffff, #eaeaea); } - -/* line 307, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-disabled { - border-color: #cec7c7; } - /* line 312, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ - .x-tab-disabled button { - color: #c3b3b3; } - -/* line 328, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-top-disabled { - background-image: none; - background: transparent; - background-image: none; - background-color: #e7dfdf; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e7dfdf), color-stop(100%, #f2e3e4)); - background-image: -webkit-linear-gradient(top, #e7dfdf, #f2e3e4); - background-image: -moz-linear-gradient(top, #e7dfdf, #f2e3e4); - background-image: -o-linear-gradient(top, #e7dfdf, #f2e3e4); - background-image: -ms-linear-gradient(top, #e7dfdf, #f2e3e4); - background-image: linear-gradient(top, #e7dfdf, #f2e3e4); } - -/* line 333, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-bottom-disabled { - background-image: none; - background: transparent; - background-image: none; - background-color: #e7dfdf; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #e7dfdf), color-stop(100%, #f2e3e4)); - background-image: -webkit-linear-gradient(bottom, #e7dfdf, #f2e3e4); - background-image: -moz-linear-gradient(bottom, #e7dfdf, #f2e3e4); - background-image: -o-linear-gradient(bottom, #e7dfdf, #f2e3e4); - background-image: -ms-linear-gradient(bottom, #e7dfdf, #f2e3e4); - background-image: linear-gradient(bottom, #e7dfdf, #f2e3e4); } - -/* line 342, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nlg .x-tab-top { - background-image: url('images/gray/tab/tab-default-top-bg.gif'); } -/* line 343, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nlg .x-tab-bottom { - background-image: url('images/gray/tab/tab-default-bottom-bg.gif'); } -/* line 347, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nlg .x-tab-top-over { - background-image: url('images/gray/tab/tab-default-top-over-bg.gif'); } -/* line 348, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nlg .x-tab-bottom-over { - background-image: url('images/gray/tab/tab-default-bottom-over-bg.gif'); } -/* line 352, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nlg .x-tab-top-active { - background-image: url('images/gray/tab/tab-default-top-active-bg.gif'); } -/* line 353, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nlg .x-tab-bottom-active { - background-image: url('images/gray/tab/tab-default-bottom-active-bg.gif'); } -/* line 357, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nlg .x-tab-top-disabled { - background-image: url('images/gray/tab/tab-default-top-disabled-bg.gif') !important; } -/* line 358, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nlg .x-tab-bottom-disabled { - background-image: url('images/gray/tab/tab-default-bottom-disabled-bg.gif') !important; } - -/* line 363, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-closable em { - padding-right: 14px; } - -/* line 367, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-close-btn { - position: absolute; - top: 2px; - right: 2px; - width: 11px; - height: 11px; - font-size: 0; - line-height: 0; - text-indent: -999px; - background: no-repeat; - background-image: url('images/gray/tab/tab-default-close.gif'); - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); - opacity: 0.6; } - -/* line 381, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-close-btn { - top: 0px; - right: 0px; } - -/* Include the element name otherwise Internet Explorer 7 & 8 take a performance hit */ -/* line 387, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -a.x-tab-close-btn:hover { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - opacity: 1; } - -/* Include the element name to raise the specificity to equal the :hover */ -/* line 392, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-tab-default-disabled a.x-tab-close-btn { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); - opacity: 0.3; } - -/* line 404, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-top-over .x-frame-tl, -.x-nbr .x-tab-top-over .x-frame-bl, -.x-nbr .x-tab-top-over .x-frame-tr, -.x-nbr .x-tab-top-over .x-frame-br, -.x-nbr .x-tab-top-over .x-frame-tc, -.x-nbr .x-tab-top-over .x-frame-bc { - background-image: url('images/gray/tab/tab-default-top-over-corners.gif'); } -/* line 408, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-top-over .x-frame-ml, -.x-nbr .x-tab-top-over .x-frame-mr { - background-image: url('images/gray/tab/tab-default-top-over-sides.gif'); } -/* line 412, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-top-over .x-frame-mc { - background-color: #f2eeee; - background-repeat: repeat-x; - background-image: url('images/gray/tab/tab-default-top-over-bg.gif'); } -/* line 426, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-bottom-over .x-frame-tl, -.x-nbr .x-tab-bottom-over .x-frame-bl, -.x-nbr .x-tab-bottom-over .x-frame-tr, -.x-nbr .x-tab-bottom-over .x-frame-br, -.x-nbr .x-tab-bottom-over .x-frame-tc, -.x-nbr .x-tab-bottom-over .x-frame-bc { - background-image: url('images/gray/tab/tab-default-bottom-over-corners.gif'); } -/* line 430, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-bottom-over .x-frame-ml, -.x-nbr .x-tab-bottom-over .x-frame-mr { - background-image: url('images/gray/tab/tab-default-bottom-over-sides.gif'); } -/* line 434, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-bottom-over .x-frame-mc { - background-color: #f2eeee; - background-repeat: repeat-x; - background-image: url('images/gray/tab/tab-default-bottom-over-bg.gif'); } -/* line 448, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-top-active .x-frame-tl, -.x-nbr .x-tab-top-active .x-frame-bl, -.x-nbr .x-tab-top-active .x-frame-tr, -.x-nbr .x-tab-top-active .x-frame-br, -.x-nbr .x-tab-top-active .x-frame-tc, -.x-nbr .x-tab-top-active .x-frame-bc { - background-image: url('images/gray/tab/tab-default-top-active-corners.gif'); } -/* line 452, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-top-active .x-frame-ml, -.x-nbr .x-tab-top-active .x-frame-mr { - background-image: url('images/gray/tab/tab-default-top-active-sides.gif'); } -/* line 456, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-top-active .x-frame-mc { - background-color: #eaeaea; - background-repeat: repeat-x; - background-image: url('images/gray/tab/tab-default-top-active-bg.gif'); } -/* line 470, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-bottom-active .x-frame-tl, -.x-nbr .x-tab-bottom-active .x-frame-bl, -.x-nbr .x-tab-bottom-active .x-frame-tr, -.x-nbr .x-tab-bottom-active .x-frame-br, -.x-nbr .x-tab-bottom-active .x-frame-tc, -.x-nbr .x-tab-bottom-active .x-frame-bc { - background-image: url('images/gray/tab/tab-default-bottom-active-corners.gif'); } -/* line 474, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-bottom-active .x-frame-ml, -.x-nbr .x-tab-bottom-active .x-frame-mr { - background-image: url('images/gray/tab/tab-default-bottom-active-sides.gif'); } -/* line 478, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-bottom-active .x-frame-mc { - background-color: #eaeaea; - background-repeat: repeat-x; - background-image: url('images/gray/tab/tab-default-bottom-active-bg.gif'); } -/* line 492, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-top-disabled .x-frame-tl, -.x-nbr .x-tab-top-disabled .x-frame-bl, -.x-nbr .x-tab-top-disabled .x-frame-tr, -.x-nbr .x-tab-top-disabled .x-frame-br, -.x-nbr .x-tab-top-disabled .x-frame-tc, -.x-nbr .x-tab-top-disabled .x-frame-bc { - background-image: url('images/gray/tab/tab-default-top-disabled-corners.gif'); } -/* line 496, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-top-disabled .x-frame-ml, -.x-nbr .x-tab-top-disabled .x-frame-mr { - background-image: url('images/gray/tab/tab-default-top-disabled-sides.gif'); } -/* line 500, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-top-disabled .x-frame-mc { - background-repeat: repeat-x; - background-image: url('images/gray/tab/tab-default-top-disabled-bg.gif'); } -/* line 513, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-bottom-disabled .x-frame-tl, -.x-nbr .x-tab-bottom-disabled .x-frame-bl, -.x-nbr .x-tab-bottom-disabled .x-frame-tr, -.x-nbr .x-tab-bottom-disabled .x-frame-br, -.x-nbr .x-tab-bottom-disabled .x-frame-tc, -.x-nbr .x-tab-bottom-disabled .x-frame-bc { - background-image: url('images/gray/tab/tab-default-bottom-disabled-corners.gif'); } -/* line 517, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-bottom-disabled .x-frame-ml, -.x-nbr .x-tab-bottom-disabled .x-frame-mr { - background-image: url('images/gray/tab/tab-default-bottom-disabled-sides.gif'); } -/* line 521, ../themes/stylesheets/ext4/default/widgets/_tab.scss */ -.x-nbr .x-tab-bottom-disabled .x-frame-mc { - background-repeat: repeat-x; - background-image: url('images/gray/tab/tab-default-bottom-disabled-bg.gif'); } - -/* line 9, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-autowidth-table table.x-grid-table { - table-layout: auto; - width: auto!important; } - -/* line 14, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-no-lines .x-tree-elbow { - background-color: transparent; } - -/* line 18, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-no-lines .x-tree-elbow-end { - background-color: transparent; } - -/* line 22, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-no-lines .x-tree-elbow-line { - background-color: transparent; } - -/* line 27, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-elbow-plus { - background: transparent no-repeat 0 0; } - -/* line 31, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-elbow-end-plus { - background: transparent no-repeat 0 0; } - -/* line 35, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-elbow-end-minus { - background: transparent no-repeat -16px 0; } - -/* line 39, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-elbow-minus { - background: transparent no-repeat -16px 0; } - -/* line 43, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-elbow { - background-color: transparent !important; } - -/* line 47, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-elbow-end { - background-color: transparent !important; } - -/* line 51, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-elbow-line { - background-color: transparent !important; } - -/* line 57, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-expander-over .x-tree-elbow-plus, -.x-tree-arrows .x-tree-expander-over .x-tree-elbow-end-plus { - background-position: -32px 0; } - -/* line 62, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-expander-over .x-tree-elbow-minus, -.x-tree-arrows .x-tree-expander-over .x-tree-elbow-end-minus { - background-position: -48px 0; } - -/* line 67, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-grid-tree-node-expanded .x-tree-elbow-plus, -.x-tree-arrows .x-grid-tree-node-expanded .x-tree-elbow-end-plus { - background-position: -16px 0; } - -/* line 72, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-elbow-plus, -.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-elbow-end-plus { - background-position: -48px 0; } - -/* line 79, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-elbow-plus, -.x-tree-elbow-minus, -.x-tree-elbow-end-plus, -.x-tree-elbow-end-minus { - cursor: pointer; } - -/* line 85, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-lines .x-tree-elbow { - background-image: url('images/gray/tree/elbow.gif'); } -/* line 89, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-lines .x-tree-elbow-end { - background-image: url('images/gray/tree/elbow-end.gif'); } -/* line 93, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-lines .x-tree-elbow-plus { - background-image: url('images/gray/tree/elbow-plus.gif'); } -/* line 97, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-lines .x-tree-elbow-end-plus { - background-image: url('images/gray/tree/elbow-end-plus.gif'); } -/* line 101, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-plus { - background-image: url('images/gray/tree/elbow-minus.gif'); } -/* line 105, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus { - background-image: url('images/gray/tree/elbow-end-minus.gif'); } -/* line 109, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-lines .x-tree-elbow-line { - background-image: url('images/gray/tree/elbow-line.gif'); } - -/* line 116, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-no-lines .x-tree-elbow-plus, -.x-tree-no-lines .x-tree-elbow-end-plus { - background-image: url('images/gray/tree/elbow-plus-nl.gif'); } -/* line 121, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-elbow-plus, -.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus { - background-image: url('images/gray/tree/elbow-end-minus-nl.gif'); } - -/* line 130, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-arrows .x-tree-elbow-plus, -.x-tree-arrows .x-tree-elbow-minus, -.x-tree-arrows .x-tree-elbow-end-plus, -.x-tree-arrows .x-tree-elbow-end-minus { - background-image: url('images/gray/tree/arrows.gif'); } - -/* line 135, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-icon { - margin: 2px 3px 0 0; } - -/* line 139, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-with-row-lines .x-tree-icon { - margin-top: 1px; } - -/* line 148, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-elbow, -.x-tree-elbow-end, -.x-tree-elbow-plus, -.x-tree-elbow-end-plus, -.x-tree-elbow-empty, -.x-tree-elbow-line { - height: 20px; - width: 16px; } - -/* line 159, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-with-row-lines .x-tree-elbow, -.x-grid-with-row-lines .x-tree-elbow-end, -.x-grid-with-row-lines .x-tree-elbow-plus, -.x-grid-with-row-lines .x-tree-elbow-end-plus, -.x-grid-with-row-lines .x-tree-elbow-empty, -.x-grid-with-row-lines .x-tree-elbow-line { - height: 19px; - background-position: 0 -1px; } - -/* line 165, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-icon-leaf { - width: 16px; - background-image: url('images/gray/tree/leaf.gif'); } - -/* line 170, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-icon-parent { - width: 16px; - background-image: url('images/gray/tree/folder.gif'); } - -/* line 175, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-tree-node-expanded .x-tree-icon-parent { - background-image: url('images/gray/tree/folder-open.gif'); } - -/* line 179, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-rowbody { - padding: 0; } - -/* line 183, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-cell-treecolumn .x-grid-cell-inner { - padding: 0; - line-height: 19px; } - -/* line 188, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-with-row-lines .x-grid-cell-treecolumn .x-grid-cell-inner { - line-height: 17px; } - -/* line 192, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-panel .x-grid-cell-inner { - cursor: pointer; } - /* line 194, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ - .x-tree-panel .x-grid-cell-inner img { - display: inline-block; - vertical-align: top; } - -/* line 207, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-ie .x-tree-panel .x-tree-elbow, -.x-ie .x-tree-panel .x-tree-elbow-end, -.x-ie .x-tree-panel .x-tree-elbow-plus, -.x-ie .x-tree-panel .x-tree-elbow-end-plus, -.x-ie .x-tree-panel .x-tree-elbow-empty, -.x-ie .x-tree-panel .x-tree-elbow-line { - vertical-align: -6px; } - -/* line 215, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-editor-on-text-node .x-form-text { - padding-left: 1px; - padding-right: 1px; } - -/* line 222, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-ie .x-grid-editor-on-text-node .x-form-text { - padding-left: 2px; - padding-right: 2px; } - -/* line 228, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-opera .x-grid-editor-on-text-node .x-form-text { - padding-left: 2px; - padding-right: 2px; } - -/* line 234, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-checkbox { - margin: 4px 3px 0 0; - display: inline-block; - vertical-align: top; - width: 13px; - height: 13px; - background: no-repeat; - background-image: url('images/gray/form/checkbox.gif'); - overflow: hidden; - padding: 0; - border: 0; } - /* line 247, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ - .x-tree-checkbox::-moz-focus-inner { - padding: 0; - border: 0; } - -/* line 253, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-with-row-lines .x-tree-checkbox { - margin-top: 3px; } - -/* line 257, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-checkbox-checked { - background-position: 0 -13px; } - -/* line 261, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-drop-ok-append .x-dd-drop-icon { - background-image: url('images/gray/tree/drop-append.gif'); } - -/* line 265, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-drop-ok-above .x-dd-drop-icon { - background-image: url('images/gray/tree/drop-above.gif'); } - -/* line 269, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-drop-ok-below .x-dd-drop-icon { - background-image: url('images/gray/tree/drop-below.gif'); } - -/* line 273, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-drop-ok-between .x-dd-drop-icon { - background-image: url('images/gray/tree/drop-between.gif'); } - -/* line 277, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-tree-loading .x-tree-icon { - background-image: url('images/gray/tree/loading.gif'); } - -/* line 281, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-ddindicator { - height: 1px; - border-width: 1px 0px 0px; - border-style: dotted; - border-color: green; } - -/* line 288, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-grid-tree-loading span { - font-style: italic; - color: #444444; } - -/* line 293, ../themes/stylesheets/ext4/default/widgets/_tree.scss */ -.x-tree-animator-wrap { - overflow: hidden; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_drawcomponent.scss */ -.x-surface { - display: -moz-inline-box; - -moz-box-orient: vertical; - display: inline-block; - vertical-align: middle; - *vertical-align: auto; - overflow: hidden; } - /* line 7, ../../../../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.11.7/frameworks/compass/stylesheets/compass/css3/_inline-block.scss */ - .x-surface { - *display: inline; } - -/* line 11, ../themes/stylesheets/ext4/default/widgets/_drawcomponent.scss */ -.rvml { - behavior: url(#default#VML); } - -/* line 15, ../themes/stylesheets/ext4/default/widgets/_drawcomponent.scss */ -.x-surface tspan { - user-select: none; - -o-user-select: none; - -ms-user-select: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - cursor: default; } - -/* line 19, ../themes/stylesheets/ext4/default/widgets/_drawcomponent.scss */ -.x-vml-sprite { - position: absolute; - left: 0; - top: 0; - width: 1px; - height: 1px; } - -/* line 27, ../themes/stylesheets/ext4/default/widgets/_drawcomponent.scss */ -.x-vml-group { - position: absolute; - left: 0; - top: 0; - width: 1000px; - height: 1000px; } - -/* line 35, ../themes/stylesheets/ext4/default/widgets/_drawcomponent.scss */ -.x-vml-measure-span { - position: absolute; - left: -9999em; - top: -9999em; - padding: 0; - margin: 0; - display: inline; } - -/* line 44, ../themes/stylesheets/ext4/default/widgets/_drawcomponent.scss */ -.x-vml-base { - position: relative; - top: 0; - left: 0; - overflow: hidden; - display: inline-block; } - -/* line 52, ../themes/stylesheets/ext4/default/widgets/_drawcomponent.scss */ -.x-vml-base { - position: relative; - top: 0; - left: 0; - overflow: hidden; - display: inline-block; } - -/* line 60, ../themes/stylesheets/ext4/default/widgets/_drawcomponent.scss */ -svg, vml { - overflow: hidden; } - -/* line 6, ../themes/stylesheets/ext4/default/widgets/_viewport.scss */ -.x-viewport, .x-viewport body { - margin: 0; - padding: 0; - border: 0 none; - overflow: hidden; - height: 100%; - position: static; } - -/* line 3, ../themes/stylesheets/ext4/default/util/_dragdrop.scss */ -.x-dd-drag-proxy { - z-index: 1000000!important; } - -/* line 8, ../themes/stylesheets/ext4/default/util/_dragdrop.scss */ -.x-dd-drag-repair .x-dd-drag-ghost { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); - opacity: 0.6; } -/* line 12, ../themes/stylesheets/ext4/default/util/_dragdrop.scss */ -.x-dd-drag-repair .x-dd-drop-icon { - display: none; } - -/* line 17, ../themes/stylesheets/ext4/default/util/_dragdrop.scss */ -.x-dd-drag-ghost { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85); - opacity: 0.85; - padding: 5px; - padding-left: 20px; - white-space: nowrap; - color: #000; - font: normal 11px tahoma, arial, verdana, sans-serif; - border: 1px solid; - border-color: #ddd #bbb #bbb #ddd; - background-color: #fff; } - -/* line 34, ../themes/stylesheets/ext4/default/util/_dragdrop.scss */ -.x-dd-drop-icon { - position: absolute; - top: 3px; - left: 3px; - display: block; - width: 16px; - height: 16px; - background-color: transparent; - background-position: center; - background-repeat: no-repeat; - z-index: 1; } - -/* line 51, ../themes/stylesheets/ext4/default/util/_dragdrop.scss */ -.x-view-selector { - position: absolute; - left: 0; - top: 0; - width: 0; - background-color: #c3daf9; - border: 1px dotted #3399bb; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - opacity: 0.5; - zoom: 1; } - -/* line 66, ../themes/stylesheets/ext4/default/util/_dragdrop.scss */ -.x-dd-drop-nodrop .x-dd-drop-icon { - background-image: url('images/gray/dd/drop-no.gif'); } - -/* line 70, ../themes/stylesheets/ext4/default/util/_dragdrop.scss */ -.x-dd-drop-ok .x-dd-drop-icon { - background-image: url('images/gray/dd/drop-yes.gif'); } - -/* line 74, ../themes/stylesheets/ext4/default/util/_dragdrop.scss */ -.x-dd-drop-ok-add .x-dd-drop-icon { - background-image: url('images/gray/dd/drop-add.gif'); } - -/* line 2, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-handle { - position: absolute; - z-index: 100; - font-size: 1px; - line-height: 6px; - overflow: hidden; - zoom: 1; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); - opacity: 0; - background-color: #fff; } - -/* line 14, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-collapsed .x-resizable-handle { - display: none; } - -/* line 18, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-handle-east { - width: 6px; - height: 100%; - right: 0; - top: 0; } - -/* line 27, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-east { - cursor: e-resize; } - -/* line 32, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-handle-south { - width: 100%; - height: 6px; - left: 0; - bottom: 0; } - -/* line 41, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-south { - cursor: s-resize; } - -/* line 46, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-handle-west { - width: 6px; - height: 100%; - left: 0; - top: 0; } - -/* line 55, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-west { - cursor: w-resize; } - -/* line 60, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-handle-north { - width: 100%; - height: 6px; - left: 0; - top: 0; } - -/* line 69, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-north { - cursor: n-resize; } - -/* line 74, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-handle-southeast { - width: 6px; - height: 6px; - right: 0; - bottom: 0; - z-index: 101; } - -/* line 85, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-southeast { - cursor: se-resize; } - -/* line 90, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-handle-northwest { - width: 6px; - height: 6px; - left: 0; - top: 0; - z-index: 101; } - -/* line 101, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-northwest { - cursor: nw-resize; } - -/* line 106, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-handle-northeast { - width: 6px; - height: 6px; - right: 0; - top: 0; - z-index: 101; } - -/* line 117, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-northeast { - cursor: ne-resize; } - -/* line 122, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-handle-southwest { - width: 6px; - height: 6px; - left: 0; - bottom: 0; - z-index: 101; } - -/* line 133, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-southwest { - cursor: sw-resize; } - -/*IE rounding error*/ -/* line 140, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-ie .x-resizable-handle-east { - margin-right: -1px; - /*IE rounding error*/ } -/* line 144, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-ie .x-resizable-handle-south { - margin-bottom: -1px; } - -/* line 149, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - opacity: 1; } - -/* line 153, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-window .x-window-handle { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); - opacity: 0; } - -/* line 157, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-window-collapsed .x-window-handle { - display: none; } - -/* line 161, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-proxy { - border: 1px dashed #3b5a82; - position: absolute; - left: 0; - top: 0; - overflow: hidden; - z-index: 50000; } - -/* line 170, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-overlay { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - display: none; - z-index: 200000; - background-color: #fff; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); - opacity: 0; } - -/* line 190, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-east, -.x-resizable-over .x-resizable-handle-west, -.x-resizable-pinned .x-resizable-handle-east, -.x-resizable-pinned .x-resizable-handle-west { - background-position: left; - background-image: url('images/gray/sizer/e-handle.gif'); } -/* line 196, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-south, -.x-resizable-over .x-resizable-handle-north, -.x-resizable-pinned .x-resizable-handle-south, -.x-resizable-pinned .x-resizable-handle-north { - background-position: top; - background-image: url('images/gray/sizer/s-handle.gif'); } -/* line 201, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-southeast, -.x-resizable-pinned .x-resizable-handle-southeast { - background-position: top left; - background-image: url('images/gray/sizer/se-handle.gif'); } -/* line 206, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-northwest, -.x-resizable-pinned .x-resizable-handle-northwest { - background-position: bottom right; - background-image: url('images/gray/sizer/nw-handle.gif'); } -/* line 211, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-northeast, -.x-resizable-pinned .x-resizable-handle-northeast { - background-position: bottom left; - background-image: url('images/gray/sizer/ne-handle.gif'); } -/* line 216, ../themes/stylesheets/ext4/default/util/_resizable.scss */ -.x-resizable-over .x-resizable-handle-southwest, -.x-resizable-pinned .x-resizable-handle-southwest { - background-position: top right; - background-image: url('images/gray/sizer/sw-handle.gif'); } - -/* line 3, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter .x-collapse-el { - position: absolute; - cursor: pointer; - background-color: transparent; - background-repeat: no-repeat !important; } - -/* line 14, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-layout-split-left, -.x-layout-split-right { - top: 50%; - margin-top: -17px; - width: 5px; - height: 35px; } - -/* line 24, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-layout-split-top, -.x-layout-split-bottom { - left: 50%; - width: 35px; - height: 5px; - margin-left: -17px; } - -/* line 33, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-layout-split-left { - background: no-repeat top right; - background-image: url('images/gray/util/splitter/mini-left.gif'); } - -/* line 38, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-layout-split-right { - background: no-repeat top left; - background-image: url('images/gray/util/splitter/mini-right.gif'); } - -/* line 43, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-layout-split-top { - background: no-repeat top left; - background-image: url('images/gray/util/splitter/mini-top.gif'); } - -/* line 48, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-layout-split-bottom { - background: no-repeat top left; - background-image: url('images/gray/util/splitter/mini-bottom.gif'); } - -/* line 54, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter-collapsed .x-layout-split-left { - background: no-repeat top left; - background-image: url('images/gray/util/splitter/mini-right.gif'); } -/* line 59, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter-collapsed .x-layout-split-right { - background: no-repeat top right; - background-image: url('images/gray/util/splitter/mini-left.gif'); } -/* line 64, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter-collapsed .x-layout-split-top { - background: no-repeat top left; - background-image: url('images/gray/util/splitter/mini-bottom.gif'); } -/* line 69, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter-collapsed .x-layout-split-bottom { - background: no-repeat top left; - background-image: url('images/gray/util/splitter/mini-top.gif'); } - -/* line 75, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter-horizontal { - cursor: e-resize; - cursor: row-resize; - font-size: 1px; } - -/* line 81, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter-vertical { - cursor: e-resize; - cursor: col-resize; - font-size: 1px; } - -/* line 86, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter-collapsed, .x-splitter-horizontal-noresize, .x-splitter-vertical-noresize { - cursor: default; } - -/* line 90, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter-active { - z-index: 4; - font-size: 1px; - background-color: #b4b4b4; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); - opacity: 0.8; } - -/* line 97, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-splitter-active .x-collapse-el { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); - opacity: 0.3; } - -/* line 102, ../themes/stylesheets/ext4/default/util/_splitter.scss */ -.x-proxy-el { - position: absolute; - background: #b4b4b4; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); - opacity: 0.8; } - -/* - * Dock Layouts - * @todo move this somewhere else? - */ -/* line 6, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-docked { - position: absolute !important; - z-index: 1; } - -/* line 11, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-docked-top { - border-bottom-width: 0 !important; } - -/* line 15, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-docked-bottom { - border-top-width: 0 !important; } - -/* line 19, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-docked-left { - border-right-width: 0 !important; } - -/* line 23, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-docked-right { - border-left-width: 0 !important; } - -/* line 27, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-docked-noborder-top { - border-top-width: 0 !important; } - -/* line 31, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-docked-noborder-right { - border-right-width: 0 !important; } - -/* line 35, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-docked-noborder-bottom { - border-bottom-width: 0 !important; } - -/* line 39, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-docked-noborder-left { - border-left-width: 0 !important; } - -/* line 43, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-inner { - overflow: hidden; - zoom: 1; - position: relative; - left: 0; - top: 0; } - -/* line 53, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-item { - position: absolute !important; - left: 0; - top: 0; } - -/* line 59, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-rtl .x-box-item { - right: 0; - left: auto; } - -/* line 65, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-layout-ct, -.x-border-layout-ct { - overflow: hidden; - zoom: 1; } - -/* line 70, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-border-layout-ct { - background-color: #e0e0e0; - position: relative; } - -/* line 75, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-overflow-hidden { - overflow: hidden !important; } - -/* line 79, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-inline-children > * { - display: inline-block !important; } - -/* line 83, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-abs-layout-ct { - position: relative; } - -/* line 87, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-abs-layout-item { - position: absolute !important; } - -/* line 91, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-fit-item { - position: relative; } - -/* line 95, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-border-region-slide-in { - z-index: 5; } - -/* line 99, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-region-collapsed-placeholder { - z-index: 4; } - -/* line 103, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-accordion-hd .x-panel-header-text { - color: black; - font-weight: normal; } - -/* line 108, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-accordion-hd { - background: #e5e5e5 !important; - -moz-box-shadow: inset 0 0 0 0 #e5e5e5; - -webkit-box-shadow: inset 0 0 0 0 #e5e5e5; - -o-box-shadow: inset 0 0 0 0 #e5e5e5; - box-shadow: inset 0 0 0 0 #e5e5e5; } - /* line 112, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-accordion-hd .x-tool-collapse-top, - .x-accordion-hd .x-tool-collapse-right, - .x-accordion-hd .x-tool-collapse-bottom, - .x-accordion-hd .x-tool-collapse-left { - background-position: 0 -255px; } - /* line 119, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-accordion-hd .x-tool-expand-top, - .x-accordion-hd .x-tool-expand-right, - .x-accordion-hd .x-tool-expand-bottom, - .x-accordion-hd .x-tool-expand-left { - background-position: 0 -240px; } - /* line 127, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-accordion-hd .x-tool-over .x-tool-collapse-top, - .x-accordion-hd .x-tool-over .x-tool-collapse-right, - .x-accordion-hd .x-tool-over .x-tool-collapse-bottom, - .x-accordion-hd .x-tool-over .x-tool-collapse-left { - background-position: -15px -255px; } - /* line 136, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-accordion-hd .x-tool-over .x-tool-expand-top, - .x-accordion-hd .x-tool-over .x-tool-expand-right, - .x-accordion-hd .x-tool-over .x-tool-expand-bottom, - .x-accordion-hd .x-tool-over .x-tool-expand-left { - background-position: -15px -240px; } - -/* line 145, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-accordion-hd { - border-width: 1px 0 1px 0 !important; - padding: 4px 5px 5px 5px; - border-top-color: #ececec !important; } - -/* line 151, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-accordion-body { - border-width: 0 !important; } - -/* line 155, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-accordion-hd-sibling-expanded { - border-top-color: #d0d0d0 !important; - -moz-box-shadow: inset 0 1px 0 0 #ececec; - -webkit-box-shadow: inset 0 1px 0 0 #ececec; - -o-box-shadow: inset 0 1px 0 0 #ececec; - box-shadow: inset 0 1px 0 0 #ececec; } - -/* line 160, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-accordion-hd-last-collapsed { - border-bottom-color: #e5e5e5 !important; } - -/* line 169, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-frame-tl, -.x-frame-tr, -.x-frame-tc, -.x-frame-bl, -.x-frame-br, -.x-frame-bc { - overflow: hidden; - background-repeat: no-repeat; } - -/* line 175, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-frame-tc, -.x-frame-bc { - background-repeat: repeat-x; } - -/* line 179, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-frame-mc { - position: relative; - background-repeat: repeat-x; - overflow: hidden; } - -/* line 188, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-scroller-left { - float: left; - height: 100%; - z-index: 5; } - /* line 195, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-left .x-toolbar-scroll-left, - .x-box-scroller-left .x-tabbar-scroll-left { - width: 18px; - position: relative; - cursor: pointer; - height: 20px; - background: transparent no-repeat -18px 0; - background-image: url('images/gray/tab-bar/scroll-left.gif'); } - /* line 203, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-left .x-toolbar-scroll-left-hover { - background-position: 0 0; } - /* line 207, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-left .x-toolbar-scroll-left-disabled, - .x-box-scroller-left .x-tabbar-scroll-left-disabled { - background-position: -18px 0; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - opacity: 0.5; - cursor: default; } - /* line 214, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-left .x-toolbar-scroll-left { - background-image: url('images/gray/toolbar/scroll-left.gif'); - background-position: -14px 0; } - /* line 218, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-left .x-toolbar-scroll-left-hover { - background-position: 0 0; } - /* line 221, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-left .x-toolbar-scroll-left-disabled { - background-position: -14px 0; } - /* line 225, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-left .x-toolbar-scroll-left { - width: 14px; - height: 22px; - border-bottom: 1px solid #8db2e3; } - -/* line 233, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-horizontal-box-overflow-body { - float: left; } - -/* line 236, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-scroller-right { - float: right; - height: 100%; - z-index: 5; } - /* line 243, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-right .x-toolbar-scroll-right, - .x-box-scroller-right .x-tabbar-scroll-right { - width: 18px; - position: relative; - cursor: pointer; - height: 20px; - background: transparent no-repeat 0 0; - background-image: url('images/gray/tab-bar/scroll-right.gif'); } - /* line 251, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-right .x-toolbar-scroll-right-hover { - background-position: -18px 0; } - /* line 255, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-right .x-toolbar-scroll-right-disabled, - .x-box-scroller-right .x-tabbar-scroll-right-disabled { - background-position: 0 0; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - opacity: 0.5; - cursor: default; } - /* line 262, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-right .x-toolbar-scroll-right { - background-image: url('images/gray/toolbar/scroll-right.gif'); } - /* line 265, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-right .x-toolbar-scroll-right-hover { - background-position: -14px 0; } - /* line 268, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-right .x-toolbar-scroll-right-disabled { - background-position: 0 0; } - /* line 272, ../themes/stylesheets/ext4/default/layout/_layout.scss */ - .x-box-scroller-right .x-toolbar-scroll-right { - width: 14px; - height: 22px; - border-bottom: 1px solid #8db2e3; } - -/* line 282, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-scroller-top .x-box-scroller { - line-height: 0; - font-size: 0; } -/* line 286, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-scroller-top .x-menu-scroll-top { - background: transparent no-repeat center center; - background-image: url('images/gray/layout/mini-top.gif'); - height: 8px; - cursor: pointer; } - -/* line 294, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-scroller-bottom .x-box-scroller { - line-height: 0; - font-size: 0; } -/* line 298, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-scroller-bottom .x-menu-scroll-bottom { - background: transparent no-repeat center center; - background-image: url('images/gray/layout/mini-bottom.gif'); - height: 8px; - cursor: pointer; } - -/* line 306, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-box-menu-right { - float: right; - padding-right: 2px; } - -/* line 311, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-column { - float: left; } - -/* line 315, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-ie6 .x-column { - display: inline; - /*prevent IE6 double-margin bug*/ } - -/* line 319, ../themes/stylesheets/ext4/default/layout/_layout.scss */ -.x-quirks .x-ie .x-form-layout-table, .x-quirks .x-ie .x-form-layout-table tbody tr.x-form-item { - position: relative; } - -/* line 2, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool { - height: 15px; } - /* line 5, ../themes/stylesheets/ext4/default/util/_tool.scss */ - .x-tool img { - overflow: hidden; - width: 15px; - height: 15px; - cursor: pointer; - background-color: transparent; - background-repeat: no-repeat; - background-image: url('images/gray/tools/tool-sprites.gif'); - margin: 0; } - -/* line 23, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-panel-header-horizontal .x-tool, -.x-window-header-horizontal .x-tool { - margin-left: 2px; } - -/* line 30, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-panel-header-vertical .x-tool, -.x-window-header-vertical .x-tool { - margin-top: 2px; } - -/* line 39, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-panel-header-vertical .x-tool-top, -.x-window-header-vertical .x-tool-top { - margin: 0 0 4px; } - -/* line 45, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-placeholder { - visibility: hidden; } - -/* line 49, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-toggle { - background-position: 0 -60px; } - -/* line 54, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-toggle { - background-position: -15px -60px; } - -/* line 61, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-panel-collapsed .x-tool-toggle, -.x-fieldset-collapsed .x-tool-toggle { - background-position: 0 -75px; } -/* line 66, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-panel-collapsed .x-tool-over .x-tool-toggle, -.x-fieldset-collapsed .x-tool-over .x-tool-toggle { - background-position: -15px -75px; } - -/* line 72, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-close { - background-position: 0 0; } - -/* line 76, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-minimize { - background-position: 0 -15px; } - -/* line 80, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-maximize { - background-position: 0 -30px; } - -/* line 84, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-restore { - background-position: 0 -45px; } - -/* line 88, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-gear { - background-position: 0 -90px; } - -/* line 92, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-prev { - background-position: 0 -105px; } - -/* line 96, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-next { - background-position: 0 -120px; } - -/* line 100, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-pin { - background-position: 0 -135px; } - -/* line 104, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-unpin { - background-position: 0 -150px; } - -/* line 108, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-right { - background-position: 0 -165px; } - -/* line 112, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-left { - background-position: 0 -180px; } - -/* line 116, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-help { - background-position: 0 -300px; } - -/* line 120, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-save { - background-position: 0 -285px; } - -/* line 124, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-search { - background-position: 0 -270px; } - -/* line 128, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-minus { - background-position: 0 -255px; } - -/* line 132, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-plus { - background-position: 0 -240px; } - -/* line 136, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-refresh { - background-position: 0 -225px; } - -/* line 140, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-up { - background-position: 0 -210px; } - -/* line 144, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-down { - background-position: 0 -195px; } - -/* line 148, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-collapse { - background-position: 0 -345px; } - -/* line 152, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-expand { - background-position: 0 -330px; } - -/* line 156, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-print { - background-position: 0 -315px; } - -/* line 161, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-expand-bottom, -.x-tool-collapse-bottom { - background-position: 0 -195px; } - -/* line 166, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-expand-top, -.x-tool-collapse-top { - background-position: 0 -210px; } - -/* line 171, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-expand-left, -.x-tool-collapse-left { - background-position: 0 -180px; } - -/* line 176, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-expand-right, -.x-tool-collapse-right { - background-position: 0 -165px; } - -/* line 181, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-close { - background-position: -15px 0; } -/* line 185, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-minimize { - background-position: -15px -15px; } -/* line 189, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-maximize { - background-position: -15px -30px; } -/* line 193, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-restore { - background-position: -15px -45px; } -/* line 197, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-gear { - background-position: -15px -90px; } -/* line 201, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-prev { - background-position: -15px -105px; } -/* line 205, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-next { - background-position: -15px -120px; } -/* line 209, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-pin { - background-position: -15px -135px; } -/* line 213, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-unpin { - background-position: -15px -150px; } -/* line 217, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-right { - background-position: -15px -165px; } -/* line 221, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-left { - background-position: -15px -180px; } -/* line 225, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-down { - background-position: -15px -195px; } -/* line 229, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-up { - background-position: -15px -210px; } -/* line 233, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-refresh { - background-position: -15px -225px; } -/* line 237, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-plus { - background-position: -15px -240px; } -/* line 241, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-minus { - background-position: -15px -255px; } -/* line 245, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-search { - background-position: -15px -270px; } -/* line 249, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-save { - background-position: -15px -285px; } -/* line 253, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-help { - background-position: -15px -300px; } -/* line 257, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-print { - background-position: -15px -315px; } -/* line 261, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-expand { - background-position: -15px -330px; } -/* line 265, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-collapse { - background-position: -15px -345px; } -/* line 270, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-expand-bottom, -.x-tool-over .x-tool-collapse-bottom { - background-position: -15px -195px; } -/* line 275, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-expand-top, -.x-tool-over .x-tool-collapse-top { - background-position: -15px -210px; } -/* line 280, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-expand-left, -.x-tool-over .x-tool-collapse-left { - background-position: -15px -180px; } -/* line 285, ../themes/stylesheets/ext4/default/util/_tool.scss */ -.x-tool-over .x-tool-expand-right, -.x-tool-over .x-tool-collapse-right { - background-position: -15px -165px; } - -/* line 2, ../themes/stylesheets/ext4/default/util/_scroller.scss */ -.x-horizontal-scroller-present .x-grid-body { - border-bottom-width: 0px; } - -/* line 6, ../themes/stylesheets/ext4/default/util/_scroller.scss */ -.x-vertical-scroller-present .x-grid-body { - border-right-width: 0px; } - -/* line 10, ../themes/stylesheets/ext4/default/util/_scroller.scss */ -.x-scroller { - overflow: hidden; } - -/* line 14, ../themes/stylesheets/ext4/default/util/_scroller.scss */ -.x-scroller-vertical { - border: 1px solid #d0d0d0; - border-top-color: #c5c5c5; } - -/* line 19, ../themes/stylesheets/ext4/default/util/_scroller.scss */ -.x-scroller-horizontal { - border: 1px solid #d0d0d0; } - -/* line 23, ../themes/stylesheets/ext4/default/util/_scroller.scss */ -.x-vertical-scroller-present .x-scroller-horizontal { - border-right-width: 0px; } - -/* line 27, ../themes/stylesheets/ext4/default/util/_scroller.scss */ -.x-scroller-ct { - overflow: hidden; - position: absolute; - margin: 0; - padding: 0; - border: none; - left: 0px; - top: 0px; - /* - In IE9 (only), the border-box style causes the scroller-ct to be 0px in the - perpendicular dimension and breaks the scroll as well as offsets it by the left - offset that we use to try and keep some size on this element. This works on all - browsers (including IE9). - */ - box-sizing: content-box !important; - -ms-box-sizing: content-box !important; - -moz-box-sizing: content-box !important; - -webkit-box-sizing: content-box !important; } - -/* line 48, ../themes/stylesheets/ext4/default/util/_scroller.scss */ -.x-scroller-vertical .x-scroller-ct { - overflow-y: scroll; } - -/* line 52, ../themes/stylesheets/ext4/default/util/_scroller.scss */ -.x-scroller-horizontal .x-scroller-ct { - overflow-x: scroll; } - -/* line 8, ../themes/stylesheets/ext4/default/widgets/_html.scss */ -.x-html { - /* Begin bidirectionality settings (do not change) */ } - /* line 34, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html html, .x-html address, .x-html blockquote, .x-html body, .x-html dd, .x-html div, .x-html dl, .x-html dt, .x-html fieldset, .x-html form, .x-html frame, .x-html frameset, .x-html h1, .x-html h2, .x-html h3, .x-html h4, .x-html h5, .x-html h6, .x-html noframes, .x-html ol, .x-html p, .x-html ul, .x-html center, .x-html dir, .x-html hr, .x-html menu, .x-html pre { - display: block; } - /* line 35, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html li { - display: list-item; - list-style: disc; } - /* line 36, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html head { - display: none; } - /* line 37, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html table { - display: table; } - /* line 38, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html tr { - display: table-row; } - /* line 39, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html thead { - display: table-header-group; } - /* line 40, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html tbody { - display: table-row-group; } - /* line 41, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html tfoot { - display: table-footer-group; } - /* line 42, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html col { - display: table-column; } - /* line 43, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html colgroup { - display: table-column-group; } - /* line 45, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html td, .x-html th { - display: table-cell; } - /* line 46, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html caption { - display: table-caption; } - /* line 47, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html th { - font-weight: bolder; - text-align: center; } - /* line 48, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html caption { - text-align: center; } - /* line 49, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html body { - margin: 8px; } - /* line 50, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html h1 { - font-size: 2em; - margin: .67em 0; } - /* line 51, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html h2 { - font-size: 1.5em; - margin: .75em 0; } - /* line 52, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html h3 { - font-size: 1.17em; - margin: .83em 0; } - /* line 62, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html h4, .x-html p, .x-html blockquote, .x-html ul, .x-html fieldset, .x-html form, .x-html ol, .x-html dl, .x-html dir, .x-html menu { - margin: 1.12em 0; } - /* line 63, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html h5 { - font-size: .83em; - margin: 1.5em 0; } - /* line 64, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html h6 { - font-size: .75em; - margin: 1.67em 0; } - /* line 72, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html h1, .x-html h2, .x-html h3, .x-html h4, .x-html h5, .x-html h6, .x-html b, .x-html strong { - font-weight: bolder; } - /* line 73, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html blockquote { - margin-left: 40px; - margin-right: 40px; } - /* line 78, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html i, .x-html cite, .x-html em, .x-html var, .x-html address { - font-style: italic; } - /* line 83, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html pre, .x-html tt, .x-html code, .x-html kbd, .x-html samp { - font-family: monospace; } - /* line 84, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html pre { - white-space: pre; } - /* line 88, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html button, .x-html textarea, .x-html input, .x-html select { - display: inline-block; } - /* line 89, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html big { - font-size: 1.17em; } - /* line 92, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html small, .x-html sub, .x-html sup { - font-size: .83em; } - /* line 93, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html sub { - vertical-align: sub; } - /* line 94, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html sup { - vertical-align: super; } - /* line 95, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html table { - border-spacing: 2px; } - /* line 98, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html thead, .x-html tbody, .x-html tfoot { - vertical-align: middle; } - /* line 100, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html td, .x-html th { - vertical-align: inherit; } - /* line 103, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html s, .x-html strike, .x-html del { - text-decoration: line-through; } - /* line 104, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html hr { - border: 1px inset; } - /* line 109, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html ol, .x-html ul, .x-html dir, .x-html menu, .x-html dd { - margin-left: 40px; } - /* line 110, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html ul, .x-html menu, .x-html dir { - list-style-type: disc; } - /* line 111, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html ol { - list-style-type: decimal; } - /* line 115, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html ol ul, .x-html ul ol, .x-html ul ul, .x-html ol ol { - margin-top: 0; - margin-bottom: 0; } - /* line 117, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html u, .x-html ins { - text-decoration: underline; } - /* line 118, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html br:before { - content: "\A"; } - /* line 119, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html :before, .x-html :after { - white-space: pre-line; } - /* line 120, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html center { - text-align: center; } - /* line 121, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html :link, .x-html :visited { - text-decoration: underline; } - /* line 122, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html :focus { - outline: invert dotted thin; } - /* line 125, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html BDO[DIR="ltr"] { - direction: ltr; - unicode-bidi: bidi-override; } - /* line 126, ../themes/stylesheets/ext4/default/widgets/_html.scss */ - .x-html BDO[DIR="rtl"] { - direction: rtl; - unicode-bidi: bidi-override; } diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/ext-all.js b/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/ext-all.js deleted file mode 100644 index 46aeaa00c..000000000 --- a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/ext-all.js +++ /dev/null @@ -1,38 +0,0 @@ -/* -Ext JS 4.1 - JavaScript Library -Copyright (c) 2006-2012, Sencha Inc. -All rights reserved. -licensing@sencha.com - -http://www.sencha.com/license - -Open Source License ------------------------------------------------------------------------------------------- -This version of Ext JS is licensed under the terms of the Open Source GPL 3.0 license. - -http://www.gnu.org/licenses/gpl.html - -There are several FLOSS exceptions available for use with this release for -open source applications that are distributed under a license other than GPL. - -* Open Source License Exception for Applications - - http://www.sencha.com/products/floss-exception.php - -* Open Source License Exception for Development - - http://www.sencha.com/products/ux-exception.php - - -Alternate Licensing ------------------------------------------------------------------------------------------- -Commercial and OEM Licenses are available for an alternate download of Ext JS. -This is the appropriate option if you are creating proprietary applications and you are -not prepared to distribute and share the source code of your application under the -GPL v3 license. Please visit http://www.sencha.com/license for more details. - --- - -This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY RIGHTS. See the GNU General Public License for more details. -*/ -var Ext=Ext||{};Ext._startTime=new Date().getTime();(function(){var h=this,a=Object.prototype,j=a.toString,b=true,g={toString:1},e=function(){},d=function(){var i=d.caller.caller;return i.$owner.prototype[i.$name].apply(this,arguments)},c;Ext.global=h;for(c in g){b=null}if(b){b=["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"]}Ext.enumerables=b;Ext.apply=function(o,n,q){if(q){Ext.apply(o,q)}if(o&&n&&typeof n==="object"){var p,m,l;for(p in n){o[p]=n[p]}if(b){for(m=b.length;m--;){l=b[m];if(n.hasOwnProperty(l)){o[l]=n[l]}}}}return o};Ext.buildSettings=Ext.apply({baseCSSPrefix:"x-",scopeResetCSS:false},Ext.buildSettings||{});Ext.apply(Ext,{name:Ext.sandboxName||"Ext",emptyFn:e,emptyString:new String(),baseCSSPrefix:Ext.buildSettings.baseCSSPrefix,applyIf:function(k,i){var l;if(k){for(l in i){if(k[l]===undefined){k[l]=i[l]}}}return k},iterate:function(i,l,k){if(Ext.isEmpty(i)){return}if(k===undefined){k=i}if(Ext.isIterable(i)){Ext.Array.each.call(Ext.Array,i,l,k)}else{Ext.Object.each.call(Ext.Object,i,l,k)}}});Ext.apply(Ext,{extend:(function(){var i=a.constructor,k=function(n){for(var l in n){if(!n.hasOwnProperty(l)){continue}this[l]=n[l]}};return function(l,q,o){if(Ext.isObject(q)){o=q;q=l;l=o.constructor!==i?o.constructor:function(){q.apply(this,arguments)}}var n=function(){},m,p=q.prototype;n.prototype=p;m=l.prototype=new n();m.constructor=l;l.superclass=p;if(p.constructor===i){p.constructor=q}l.override=function(r){Ext.override(l,r)};m.override=k;m.proto=m;l.override(o);l.extend=function(r){return Ext.extend(l,r)};return l}}()),override:function(m,n){if(m.$isClass){m.override(n)}else{if(typeof m=="function"){Ext.apply(m.prototype,n)}else{var i=m.self,k,l;if(i&&i.$isClass){for(k in n){if(n.hasOwnProperty(k)){l=n[k];if(typeof l=="function"){l.$name=k;l.$owner=i;l.$previous=m.hasOwnProperty(k)?m[k]:d}m[k]=l}}}else{Ext.apply(m,n)}}}return m}});Ext.apply(Ext,{valueFrom:function(l,i,k){return Ext.isEmpty(l,k)?i:l},typeOf:function(k){var i,l;if(k===null){return"null"}i=typeof k;if(i==="undefined"||i==="string"||i==="number"||i==="boolean"){return i}l=j.call(k);switch(l){case"[object Array]":return"array";case"[object Date]":return"date";case"[object Boolean]":return"boolean";case"[object Number]":return"number";case"[object RegExp]":return"regexp"}if(i==="function"){return"function"}if(i==="object"){if(k.nodeType!==undefined){if(k.nodeType===3){return(/\S/).test(k.nodeValue)?"textnode":"whitespace"}else{return"element"}}return"object"}},isEmpty:function(i,k){return(i===null)||(i===undefined)||(!k?i==="":false)||(Ext.isArray(i)&&i.length===0)},isArray:("isArray" in Array)?Array.isArray:function(i){return j.call(i)==="[object Array]"},isDate:function(i){return j.call(i)==="[object Date]"},isObject:(j.call(null)==="[object Object]")?function(i){return i!==null&&i!==undefined&&j.call(i)==="[object Object]"&&i.ownerDocument===undefined}:function(i){return j.call(i)==="[object Object]"},isSimpleObject:function(i){return i instanceof Object&&i.constructor===Object},isPrimitive:function(k){var i=typeof k;return i==="string"||i==="number"||i==="boolean"},isFunction:(typeof document!=="undefined"&&typeof document.getElementsByTagName("body")==="function")?function(i){return j.call(i)==="[object Function]"}:function(i){return typeof i==="function"},isNumber:function(i){return typeof i==="number"&&isFinite(i)},isNumeric:function(i){return !isNaN(parseFloat(i))&&isFinite(i)},isString:function(i){return typeof i==="string"},isBoolean:function(i){return typeof i==="boolean"},isElement:function(i){return i?i.nodeType===1:false},isTextNode:function(i){return i?i.nodeName==="#text":false},isDefined:function(i){return typeof i!=="undefined"},isIterable:function(k){var i=typeof k,l=false;if(k&&i!="string"){if(i=="function"){if(Ext.isSafari){l=k instanceof NodeList||k instanceof HTMLCollection}}else{l=true}}return l?k.length!==undefined:false}});Ext.apply(Ext,{clone:function(q){var p,o,m,l,r,n;if(q===null||q===undefined){return q}if(q.nodeType&&q.cloneNode){return q.cloneNode(true)}p=j.call(q);if(p==="[object Date]"){return new Date(q.getTime())}if(p==="[object Array]"){o=q.length;r=[];while(o--){r[o]=Ext.clone(q[o])}}else{if(p==="[object Object]"&&q.constructor===Object){r={};for(n in q){r[n]=Ext.clone(q[n])}if(b){for(m=b.length;m--;){l=b[m];r[l]=q[l]}}}}return r||q},getUniqueGlobalNamespace:function(){var l=this.uniqueGlobalNamespace,k;if(l===undefined){k=0;do{l="ExtBox"+(++k)}while(Ext.global[l]!==undefined);Ext.global[l]=Ext;this.uniqueGlobalNamespace=l}return l},functionFactoryCache:{},cacheableFunctionFactory:function(){var o=this,l=Array.prototype.slice.call(arguments),k=o.functionFactoryCache,i,m,n;if(Ext.isSandboxed){n=l.length;if(n>0){n--;l[n]="var Ext=window."+Ext.name+";"+l[n]}}i=l.join("");m=k[i];if(!m){m=Function.prototype.constructor.apply(Function.prototype,l);k[i]=m}return m},functionFactory:function(){var l=this,i=Array.prototype.slice.call(arguments),k;if(Ext.isSandboxed){k=i.length;if(k>0){k--;i[k]="var Ext=window."+Ext.name+";"+i[k]}}return Function.prototype.constructor.apply(Function.prototype,i)},Logger:{verbose:e,log:e,info:e,warn:e,error:function(i){throw new Error(i)},deprecate:e}});Ext.type=Ext.typeOf}());Ext.globalEval=Ext.global.execScript?function(a){execScript(a)}:function($$code){(function(){eval($$code)}())};(function(){var a="4.1.1.1",b;Ext.Version=b=Ext.extend(Object,{constructor:function(c){var e,d;if(c instanceof b){return c}this.version=this.shortVersion=String(c).toLowerCase().replace(/_/g,".").replace(/[\-+]/g,"");d=this.version.search(/([^\d\.])/);if(d!==-1){this.release=this.version.substr(d,c.length);this.shortVersion=this.version.substr(0,d)}this.shortVersion=this.shortVersion.replace(/[^\d]/g,"");e=this.version.split(".");this.major=parseInt(e.shift()||0,10);this.minor=parseInt(e.shift()||0,10);this.patch=parseInt(e.shift()||0,10);this.build=parseInt(e.shift()||0,10);return this},toString:function(){return this.version},valueOf:function(){return this.version},getMajor:function(){return this.major||0},getMinor:function(){return this.minor||0},getPatch:function(){return this.patch||0},getBuild:function(){return this.build||0},getRelease:function(){return this.release||""},isGreaterThan:function(c){return b.compare(this.version,c)===1},isGreaterThanOrEqual:function(c){return b.compare(this.version,c)>=0},isLessThan:function(c){return b.compare(this.version,c)===-1},isLessThanOrEqual:function(c){return b.compare(this.version,c)<=0},equals:function(c){return b.compare(this.version,c)===0},match:function(c){c=String(c);return this.version.substr(0,c.length)===c},toArray:function(){return[this.getMajor(),this.getMinor(),this.getPatch(),this.getBuild(),this.getRelease()]},getShortVersion:function(){return this.shortVersion},gt:function(){return this.isGreaterThan.apply(this,arguments)},lt:function(){return this.isLessThan.apply(this,arguments)},gtEq:function(){return this.isGreaterThanOrEqual.apply(this,arguments)},ltEq:function(){return this.isLessThanOrEqual.apply(this,arguments)}});Ext.apply(b,{releaseValueMap:{dev:-6,alpha:-5,a:-5,beta:-4,b:-4,rc:-3,"#":-2,p:-1,pl:-1},getComponentValue:function(c){return !c?0:(isNaN(c)?this.releaseValueMap[c]||c:parseInt(c,10))},compare:function(h,g){var d,e,c;h=new b(h).toArray();g=new b(g).toArray();for(c=0;ce){return 1}}}return 0}});Ext.apply(Ext,{versions:{},lastRegisteredVersion:null,setVersion:function(d,c){Ext.versions[d]=new b(c);Ext.lastRegisteredVersion=Ext.versions[d];return this},getVersion:function(c){if(c===undefined){return Ext.lastRegisteredVersion}return Ext.versions[c]},deprecate:function(c,e,g,d){if(b.compare(Ext.getVersion(c),e)<1){g.call(d)}}});Ext.setVersion("core",a)}());Ext.String=(function(){var i=/^[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+|[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+$/g,m=/('|\\)/g,h=/\{(\d+)\}/g,b=/([-.*+?\^${}()|\[\]\/\\])/g,n=/^\s+|\s+$/g,j=/\s+/,l=/(^[^a-z]*|[^\w])/gi,d,a,g,c,e=function(p,o){return d[o]},k=function(p,o){return(o in a)?a[o]:String.fromCharCode(parseInt(o.substr(2),10))};return{createVarName:function(o){return o.replace(l,"")},htmlEncode:function(o){return(!o)?o:String(o).replace(g,e)},htmlDecode:function(o){return(!o)?o:String(o).replace(c,k)},addCharacterEntities:function(p){var o=[],s=[],q,r;for(q in p){r=p[q];a[q]=r;d[r]=q;o.push(r);s.push(q)}g=new RegExp("("+o.join("|")+")","g");c=new RegExp("("+s.join("|")+"|&#[0-9]{1,5};)","g")},resetCharacterEntities:function(){d={};a={};this.addCharacterEntities({"&":"&",">":">","<":"<",""":'"',"'":"'"})},urlAppend:function(p,o){if(!Ext.isEmpty(o)){return p+(p.indexOf("?")===-1?"?":"&")+o}return p},trim:function(o){return o.replace(i,"")},capitalize:function(o){return o.charAt(0).toUpperCase()+o.substr(1)},uncapitalize:function(o){return o.charAt(0).toLowerCase()+o.substr(1)},ellipsis:function(q,o,r){if(q&&q.length>o){if(r){var s=q.substr(0,o-2),p=Math.max(s.lastIndexOf(" "),s.lastIndexOf("."),s.lastIndexOf("!"),s.lastIndexOf("?"));if(p!==-1&&p>=(o-15)){return s.substr(0,p)+"..."}}return q.substr(0,o-3)+"..."}return q},escapeRegex:function(o){return o.replace(b,"\\$1")},escape:function(o){return o.replace(m,"\\$1")},toggle:function(p,q,o){return p===q?o:q},leftPad:function(p,q,r){var o=String(p);r=r||" ";while(o.lengthe)?e:d)},snap:function(h,e,g,i){var d;if(h===undefined||h=e){h+=e}else{if(d*2<-e){h-=e}}}}return b.constrain(h,g,i)},snapInRange:function(h,d,g,i){var e;g=(g||0);if(h===undefined||h=d){h+=d}}if(i!==undefined){if(h>(i=b.snapInRange(i,d,g))){h=i}}return h},toFixed:c?function(g,d){d=d||0;var e=a.pow(10,d);return(a.round(g*e)/e).toFixed(d)}:function(e,d){return e.toFixed(d)},from:function(e,d){if(isFinite(e)){e=parseFloat(e)}return !isNaN(e)?e:d},randomInt:function(e,d){return a.floor(a.random()*(d-e+1)+e)}});Ext.num=function(){return b.from.apply(this,arguments)}};(function(){var g=Array.prototype,o=g.slice,q=(function(){var A=[],e,z=20;if(!A.splice){return false}while(z--){A.push("A")}A.splice(15,0,"F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F");e=A.length;A.splice(13,0,"XXX");if(e+1!=A.length){return false}return true}()),j="forEach" in g,u="map" in g,p="indexOf" in g,y="every" in g,c="some" in g,d="filter" in g,n=(function(){var e=[1,2,3,4,5].sort(function(){return 0});return e[0]===1&&e[1]===2&&e[2]===3&&e[3]===4&&e[4]===5}()),k=true,a,w,t,v;try{if(typeof document!=="undefined"){o.call(document.getElementsByTagName("body"))}}catch(s){k=false}function m(z,e){return(e<0)?Math.max(0,z.length+e):Math.min(z.length,e)}function x(G,F,z,J){var K=J?J.length:0,B=G.length,H=m(G,F),E,I,A,e,C,D;if(H===B){if(K){G.push.apply(G,J)}}else{E=Math.min(z,B-H);I=H+E;A=I+K-E;e=B-I;C=B-E;if(AI){for(D=e;D--;){G[A+D]=G[I+D]}}}if(K&&H===C){G.length=C;G.push.apply(G,J)}else{G.length=C+K;for(D=0;D-1;z--){if(B.call(A||D[z],D[z],z,D)===false){return z}}}return true},forEach:j?function(A,z,e){return A.forEach(z,e)}:function(C,A,z){var e=0,B=C.length;for(;ee){e=A}}}return e},mean:function(e){return e.length>0?a.sum(e)/e.length:undefined},sum:function(C){var z=0,e,B,A;for(e=0,B=C.length;e0){return setTimeout(Ext.supports.TimeoutActualLateness?function(){e()}:e,c)}e();return 0},createSequence:function(b,c,a){if(!c){return b}else{return function(){var d=b.apply(this,arguments);c.apply(a||this,arguments);return d}}},createBuffered:function(e,b,d,c){var a;return function(){var h=c||Array.prototype.slice.call(arguments,0),g=d||this;if(a){clearTimeout(a)}a=setTimeout(function(){e.apply(g,h)},b)}},createThrottled:function(e,b,d){var g,a,c,i,h=function(){e.apply(d||this,c);g=new Date().getTime()};return function(){a=new Date().getTime()-g;c=arguments;clearTimeout(i);if(!g||(a>=b)){h()}else{i=setTimeout(h,b-a)}}},interceptBefore:function(b,a,d,c){var e=b[a]||Ext.emptyFn;return(b[a]=function(){var g=d.apply(c||this,arguments);e.apply(this,arguments);return g})},interceptAfter:function(b,a,d,c){var e=b[a]||Ext.emptyFn;return(b[a]=function(){e.apply(this,arguments);return d.apply(c||this,arguments)})}};Ext.defer=Ext.Function.alias(Ext.Function,"defer");Ext.pass=Ext.Function.alias(Ext.Function,"pass");Ext.bind=Ext.Function.alias(Ext.Function,"bind");(function(){var a=function(){},b=Ext.Object={chain:function(d){a.prototype=d;var c=new a();a.prototype=null;return c},toQueryObjects:function(e,k,d){var c=b.toQueryObjects,j=[],g,h;if(Ext.isArray(k)){for(g=0,h=k.length;g0){k=o.split("=");w=decodeURIComponent(k[0]);n=(k[1]!==undefined)?decodeURIComponent(k[1]):"";if(!r){if(u.hasOwnProperty(w)){if(!Ext.isArray(u[w])){u[w]=[u[w]]}u[w].push(n)}else{u[w]=n}}else{h=w.match(/(\[):?([^\]]*)\]/g);t=w.match(/^([^\[]+)/);w=t[0];l=[];if(h===null){u[w]=n;continue}for(p=0,c=h.length;p 0 ? +1 : (Ext.Date.getWeekOfYear(this) >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"Ext.String.leftPad(this.getFullYear(), 4, '0')",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"Ext.String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"Ext.String.leftPad(this.getHours(), 2, '0')",i:"Ext.String.leftPad(this.getMinutes(), 2, '0')",s:"Ext.String.leftPad(this.getSeconds(), 2, '0')",u:"Ext.String.leftPad(this.getMilliseconds(), 3, '0')",O:"Ext.Date.getGMTOffset(this)",P:"Ext.Date.getGMTOffset(this, true)",T:"Ext.Date.getTimezone(this)",Z:"(this.getTimezoneOffset() * -60)",c:function(){var k,h,g,d,j;for(k="Y-m-dTH:i:sP",h=[],g=0,d=k.length;g= 0 && y >= 0){","v = Ext.Date.add(new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms), Ext.Date.YEAR, y < 100 ? y - 100 : 0);","v = !strict? v : (strict === true && (z <= 364 || (Ext.Date.isLeapYear(v) && z <= 365))? Ext.Date.add(v, Ext.Date.DAY, z) : null);","}else if(strict === true && !Ext.Date.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","v = Ext.Date.add(new Date(y < 100 ? 100 : y, m, d, h, i, s, ms), Ext.Date.YEAR, y < 100 ? y - 100 : 0);","}","}","}","if(v){","if(zz != null){","v = Ext.Date.add(v, Ext.Date.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = Ext.Date.add(v, Ext.Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join("\n");return function(o){var e=a.parseRegexes.length,p=1,g=[],n=[],l=false,d="",j=0,k=o.length,m=[],h;for(;j Ext.Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:{g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(am|pm|AM|PM)",calcAtEnd:true},A:{g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(AM|PM|am|pm)",calcAtEnd:true},g:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(1[0-2]|[0-9])"},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(2[0-3]|1[0-9]|[0-9])"},h:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(1[0-2]|0[1-9])"},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(2[0-3]|[0-1][0-9])"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"([0-5][0-9])"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"([0-5][0-9])"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,4}"},Z:{g:1,c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n",s:"([+-]?\\d{1,5})"},c:function(){var e=[],c=[a.formatCodeToRegex("Y",1),a.formatCodeToRegex("m",2),a.formatCodeToRegex("d",3),a.formatCodeToRegex("H",4),a.formatCodeToRegex("i",5),a.formatCodeToRegex("s",6),{c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",a.formatCodeToRegex("P",8).c,"}else{",a.formatCodeToRegex("O",8).c,"}","}"].join("\n")}],g,d;for(g=0,d=c.length;g0?"-":"+")+Ext.String.leftPad(Math.floor(Math.abs(e)/60),2,"0")+(d?":":"")+Ext.String.leftPad(Math.abs(e%60),2,"0")},getDayOfYear:function(g){var e=0,j=Ext.Date.clone(g),c=g.getMonth(),h;for(h=0,j.setDate(1),j.setMonth(0);h28){e=Math.min(e,Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(h),Ext.Date.MONTH,i)).getDate())}j.setDate(e);j.setMonth(h.getMonth()+i);break;case Ext.Date.YEAR:e=h.getDate();if(e>28){e=Math.min(e,Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(h),Ext.Date.YEAR,i)).getDate())}j.setDate(e);j.setFullYear(h.getFullYear()+i);break}return j},between:function(d,g,c){var e=d.getTime();return g.getTime()<=e&&e<=c.getTime()},compat:function(){var d=window.Date,c,l,j=["useStrict","formatCodeToRegex","parseFunctions","parseRegexes","formatFunctions","y2kYear","MILLI","SECOND","MINUTE","HOUR","DAY","MONTH","YEAR","defaults","dayNames","monthNames","monthNumbers","getShortMonthName","getShortDayName","getMonthNumber","formatCodes","isValid","parseDate","getFormatCode","createFormat","createParser","parseCodes"],h=["dateFormat","format","getTimezone","getGMTOffset","getDayOfYear","getWeekOfYear","isLeapYear","getFirstDayOfMonth","getLastDayOfMonth","getDaysInMonth","getSuffix","clone","isDST","clearTime","add","between"],i=j.length,e=h.length,g,k,m;for(m=0;m0){for(d=0;d0){if(x===w){return z[x]}y=z[x];w=w.substring(x.length+1)}if(y.length>0){y+="/"}return y.replace(c,"/")+w.replace(g,"/")+".js"},getPrefix:function(x){var z=j.config.paths,y,w="";if(z.hasOwnProperty(x)){return x}for(y in z){if(z.hasOwnProperty(y)&&y+"."===x.substring(0,y.length+1)){if(y.length>w.length){w=y}}}return w},isAClassNameWithAKnownPrefix:function(w){var x=j.getPrefix(w);return x!==""&&x!==w},require:function(y,x,w,z){if(x){x.call(w)}},syncRequire:function(){},exclude:function(w){return{require:function(z,y,x){return j.require(z,y,x,w)},syncRequire:function(z,y,x){return j.syncRequire(z,y,x,w)}}},onReady:function(z,y,A,w){var x;if(A!==false&&Ext.onDocumentReady){x=z;z=function(){Ext.onDocumentReady(x,y,w)}}z.call(y)}});var o=[],p={},s={},q={},n={},u=[],v=[],i={};Ext.apply(j,{documentHead:typeof document!="undefined"&&(document.head||document.getElementsByTagName("head")[0]),isLoading:false,queue:o,isClassFileLoaded:p,isFileLoaded:s,readyListeners:u,optionalRequires:v,requiresMap:i,numPendingFiles:0,numLoadedFiles:0,hasFileLoadError:false,classNameToFilePathMap:q,scriptsLoading:0,syncModeEnabled:false,scriptElements:n,refreshQueue:function(){var A=o.length,x,z,w,y;if(!A&&!j.scriptsLoading){return j.triggerReady()}for(x=0;xj.numLoadedFiles){continue}for(w=0;w=200&&A<300)||(A===304)){if(!Ext.isIE){B="\n//@ sourceURL="+x}Ext.globalEval(G.responseText+B);E.call(H)}else{}}G=null}},syncRequire:function(){var w=j.syncModeEnabled;if(!w){j.syncModeEnabled=true}j.require.apply(j,arguments);if(!w){j.syncModeEnabled=false}j.refreshQueue()},require:function(O,F,z,B){var H={},y={},E=[],Q=[],N=[],x=[],D,P,J,I,w,C,M,L,K,G,A;if(B){B=(typeof B==="string")?[B]:B;for(L=0,G=B.length;L0){E=b.getNamesByExpression(w);for(K=0,A=E.length;K0){D=function(){var S=[],R,T;for(R=0,T=x.length;R0){Q=b.getNamesByExpression(I);A=Q.length;for(K=0;K0){if(!j.config.enabled){throw new Error("Ext.Loader is not enabled, so dependencies cannot be resolved dynamically. Missing required class"+((N.length>1)?"es":"")+": "+N.join(", "))}}else{D.call(z);return j}P=j.syncModeEnabled;if(!P){o.push({requires:N.slice(),callback:D,scope:z})}G=N.length;for(L=0;Lwindow.innerWidth?"portrait":"landscape"},destroy:function(){var c=arguments.length,b,a;for(b=0;b]+>/gi,c=/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,b=/\r?\n/g,d=/[^\d\.]/g,a;Ext.apply(g,{thousandSeparator:",",decimalSeparator:".",currencyPrecision:2,currencySign:"$",currencyAtEnd:false,undef:function(h){return h!==undefined?h:""},defaultValue:function(i,h){return i!==undefined&&i!==""?i:h},substr:"ab".substr(-1)!="b"?function(i,k,h){var j=String(i);return(k<0)?j.substr(Math.max(j.length+k,0),h):j.substr(k,h)}:function(i,j,h){return String(i).substr(j,h)},lowercase:function(h){return String(h).toLowerCase()},uppercase:function(h){return String(h).toUpperCase()},usMoney:function(h){return g.currency(h,"$",2)},currency:function(k,m,j,h){var o="",n=",0",l=0;k=k-0;if(k<0){k=-k;o="-"}j=Ext.isDefined(j)?j:g.currencyPrecision;n+=n+(j>0?".":"");for(;l2){}else{if(h.length>1){y=Ext.Number.toFixed(y,h[1].length)}else{y=Ext.Number.toFixed(y,0)}}x=y.toString();h=x.split(".");if(k){w=h[0];p=[];t=w.length;o=Math.floor(t/3);l=w.length%3||3;for(u=0;u")},capitalize:Ext.String.capitalize,ellipsis:Ext.String.ellipsis,format:Ext.String.format,htmlDecode:Ext.String.htmlDecode,htmlEncode:Ext.String.htmlEncode,leftPad:Ext.String.leftPad,trim:Ext.String.trim,parseBox:function(i){i=Ext.isEmpty(i)?"":i;if(Ext.isNumber(i)){i=i.toString()}var j=i.split(" "),h=j.length;if(h==1){j[1]=j[2]=j[3]=j[0]}else{if(h==2){j[2]=j[0];j[3]=j[1]}else{if(h==3){j[3]=j[1]}}}return{top:parseInt(j[0],10)||0,right:parseInt(j[1],10)||0,bottom:parseInt(j[2],10)||0,left:parseInt(j[3],10)||0}},escapeRegex:function(h){return h.replace(/([\-.*+?\^${}()|\[\]\/\\])/g,"\\$1")}})}());Ext.define("Ext.util.TaskRunner",{interval:10,timerId:null,constructor:function(a){var b=this;if(typeof a=="number"){b.interval=a}else{if(a){Ext.apply(b,a)}}b.tasks=[];b.timerFn=Ext.Function.bind(b.onTick,b)},newTask:function(b){var a=new Ext.util.TaskRunner.Task(b);a.manager=this;return a},start:function(a){var c=this,b=new Date().getTime();if(!a.pending){c.tasks.push(a);a.pending=true}a.stopped=false;a.taskStartTime=b;a.taskRunTime=a.fireOnStart!==false?0:a.taskStartTime;a.taskRunCount=0;if(!c.firing){if(a.fireOnStart!==false){c.startTimer(0,b)}else{c.startTimer(a.interval,b)}}return a},stop:function(a){if(!a.stopped){a.stopped=true;if(a.onStop){a.onStop.call(a.scope||a,a)}}return a},stopAll:function(){Ext.each(this.tasks,this.stop,this)},firing:false,nextExpires:1e+99,onTick:function(){var m=this,e=m.tasks,a=new Date().getTime(),n=1e+99,k=e.length,c,o,h,b,d,g;m.timerId=null;m.firing=true;for(h=0;hc){n=c}}}if(o){m.tasks=o}m.firing=false;if(m.tasks.length){m.startTimer(n-a,new Date().getTime())}},startTimer:function(e,c){var d=this,b=c+e,a=d.timerId;if(a&&d.nextExpires-b>d.interval){clearTimeout(a);a=null}if(!a){if(e',''," ({childCount} children)","",''," ({depth} deep)","",'',", {type}: {[this.time(values.sum)]} msec (","avg={[this.time(values.sum / parent.count)]}",")","",""].join(""),{time:function(n){return Math.round(n*100)/100}})}var m=this.getData(l);m.name=this.name;m.pure.type="Pure";m.total.type="Total";m.times=[m.pure,m.total];return d.apply(m)},getData:function(l){var m=this;return{count:m.count,childCount:m.childCount,depth:m.maxDepth,pure:g(m.count,m.childCount,l,m.pure),total:g(m.count,m.childCount,l,m.total)}},enter:function(){var l=this,m={accum:l,leave:e,childTime:0,parent:c};++l.depth;if(l.maxDepth','
',"",'
','
',"
",'
','
'].join("");e.body.appendChild(h)}while(i--){g=c[i];if(h||g.early){d[g.identity]=g.fn.call(d,e,h)}else{b.push(g)}}if(h){e.body.removeChild(h)}d.tests=b},PointerEvents:"pointerEvents" in document.documentElement.style,CSS3BoxShadow:"boxShadow" in document.documentElement.style||"WebkitBoxShadow" in document.documentElement.style||"MozBoxShadow" in document.documentElement.style,ClassList:!!document.documentElement.classList,OrientationChange:((typeof window.orientation!="undefined")&&("onorientationchange" in window)),DeviceMotion:("ondevicemotion" in window),Touch:("ontouchstart" in window)&&(!Ext.is.Desktop),TimeoutActualLateness:(function(){setTimeout(function(){Ext.supports.TimeoutActualLateness=arguments.length!==0},0)}()),tests:[{identity:"Transitions",fn:function(h,k){var g=["webkit","Moz","o","ms","khtml"],j="TransitionEnd",b=[g[0]+j,"transitionend",g[2]+j,g[3]+j,g[4]+j],e=g.length,d=0,c=false;for(;d

";return(c.childNodes.length==2)}},{identity:"Float",fn:function(b,c){return !!c.lastChild.style.cssFloat}},{identity:"AudioTag",fn:function(b){return !!b.createElement("audio").canPlayType}},{identity:"History",fn:function(){var b=window.history;return !!(b&&b.pushState)}},{identity:"CSS3DTransform",fn:function(){return(typeof WebKitCSSMatrix!="undefined"&&new WebKitCSSMatrix().hasOwnProperty("m41"))}},{identity:"CSS3LinearGradient",fn:function(h,j){var g="background-image:",d="-webkit-gradient(linear, left top, right bottom, from(black), to(white))",i="linear-gradient(left top, black, white)",e="-moz-"+i,b="-o-"+i,c=[g+d,g+i,g+e,g+b];j.style.cssText=c.join(";");return(""+j.style.backgroundImage).indexOf("gradient")!==-1}},{identity:"CSS3BorderRadius",fn:function(e,g){var c=["borderRadius","BorderRadius","MozBorderRadius","WebkitBorderRadius","OBorderRadius","KhtmlBorderRadius"],d=false,b;for(b=0;b=534.16}},{identity:"TextAreaMaxLength",fn:function(){var b=document.createElement("textarea");return("maxlength" in b)}},{identity:"GetPositionPercentage",fn:function(b,c){return a(c.childNodes[2],"left")=="10%"}}]}}());Ext.supports.init();Ext.util.DelayedTask=function(d,c,a){var e=this,g,b=function(){clearInterval(g);g=null;d.apply(c,a||[])};this.delay=function(i,k,j,h){e.cancel();d=k||d;c=j||c;a=h||a;g=setInterval(b,i)};this.cancel=function(){if(g){clearInterval(g);g=null}}};Ext.require("Ext.util.DelayedTask",function(){Ext.util.Event=Ext.extend(Object,(function(){var b={};function d(h,i,j,g){return function(){if(j.target===arguments[0]){h.apply(g,arguments)}}}function c(h,i,j,g){i.task=new Ext.util.DelayedTask();return function(){i.task.delay(j.buffer,h,g,Ext.Array.toArray(arguments))}}function a(h,i,j,g){return function(){var k=new Ext.util.DelayedTask();if(!i.tasks){i.tasks=[]}i.tasks.push(k);k.delay(j.delay||10,h,g,Ext.Array.toArray(arguments))}}function e(h,i,j,g){return function(){var k=i.ev;if(k.removeListener(i.fn,g)&&k.observable){k.observable.hasListeners[k.name]--}return h.apply(g,arguments)}}return{isEvent:true,constructor:function(h,g){this.name=g;this.observable=h;this.listeners=[]},addListener:function(i,h,g){var j=this,k;h=h||j.observable;if(!j.isListening(i,h)){k=j.createListener(i,h,g);if(j.firing){j.listeners=j.listeners.slice(0)}j.listeners.push(k)}},createListener:function(j,i,g){g=g||b;i=i||this.observable;var k={fn:j,scope:i,o:g,ev:this},h=j;if(g.single){h=e(h,k,g,i)}if(g.target){h=d(h,k,g,i)}if(g.delay){h=a(h,k,g,i)}if(g.buffer){h=c(h,k,g,i)}k.fireFn=h;return k},findListener:function(l,k){var j=this.listeners,g=j.length,m,h;while(g--){m=j[g];if(m){h=m.scope;if(m.fn==l&&(h==(k||this.observable))){return g}}}return -1},isListening:function(h,g){return this.findListener(h,g)!==-1},removeListener:function(j,i){var l=this,h,m,g;h=l.findListener(j,i);if(h!=-1){m=l.listeners[h];if(l.firing){l.listeners=l.listeners.slice(0)}if(m.task){m.task.cancel();delete m.task}g=m.tasks&&m.tasks.length;if(g){while(g--){m.tasks[g].cancel()}delete m.tasks}Ext.Array.erase(l.listeners,h,1);return true}return false},clearListeners:function(){var h=this.listeners,g=h.length;while(g--){this.removeListener(h[g].fn,h[g].scope)}},fire:function(){var l=this,j=l.listeners,k=j.length,h,g,m;if(k>0){l.firing=true;for(h=0;h";for(;r\^])\s?|\s|$)/,c=/^(#)?([\w\-]+|\*)(?:\((true|false)\))?/,b=[{re:/^\.([\w\-]+)(?:\((true|false)\))?/,method:m},{re:/^(?:[\[](?:@)?([\w\-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]])/,method:n},{re:/^#([\w\-]+)/,method:d},{re:/^\:([\w\-]+)(?:\(((?:\{[^\}]+\})|(?:(?!\{)[^\s>\/]*?(?!\})))\))?/,method:l},{re:/^(?:\{([^\}]+)\})/,method:k}];h.Query=Ext.extend(Object,{constructor:function(o){o=o||{};Ext.apply(this,o)},execute:function(p){var r=this.operations,s=0,t=r.length,q,o;if(!p){o=Ext.ComponentManager.all.getArray()}else{if(Ext.isArray(p)){o=p}else{if(p.isMixedCollection){o=p.items}}}for(;s1){for(r=0,s=t.length;r0){o.push(p[0])}return o},last:function(q){var o=q.length,p=[];if(o>0){p.push(q[o-1])}return p}},query:function(p,w){var x=p.split(","),o=x.length,q=0,r=[],y=[],v={},t,s,u;for(;q1){s=r.length;for(q=0;q111&&g.keyCode<124){g.keyCode=-1}}catch(h){}}},getRelatedTarget:function(e){e=e.browserEvent||e;var g=e.relatedTarget;if(!g){if(a.mouseLeaveRe.test(e.type)){g=e.toElement}else{if(a.mouseEnterRe.test(e.type)){g=e.fromElement}}}return a.resolveTextNode(g)},getPageX:function(e){return a.getPageXY(e)[0]},getPageY:function(e){return a.getPageXY(e)[1]},getPageXY:function(h){h=h.browserEvent||h;var g=h.pageX,j=h.pageY,i=d.documentElement,e=d.body;if(!g&&g!==0){g=h.clientX+(i&&i.scrollLeft||e&&e.scrollLeft||0)-(i&&i.clientLeft||e&&e.clientLeft||0);j=h.clientY+(i&&i.scrollTop||e&&e.scrollTop||0)-(i&&i.clientTop||e&&e.clientTop||0)}return[g,j]},getTarget:function(e){e=e.browserEvent||e;return a.resolveTextNode(e.target||e.srcElement)},resolveTextNode:Ext.isGecko?function(g){if(!g){return}var e=HTMLElement.prototype.toString.call(g);if(e=="[xpconnect wrapped native prototype]"||e=="[object XULElement]"){return}return g.nodeType==3?g.parentNode:g}:function(e){return e&&e.nodeType==3?e.parentNode:e},curWidth:0,curHeight:0,onWindowResize:function(i,h,g){var e=a.resizeEvent;if(!e){a.resizeEvent=e=new Ext.util.Event();a.on(c,"resize",a.fireResize,null,{buffer:100})}e.addListener(i,h,g)},fireResize:function(){var e=Ext.Element.getViewWidth(),g=Ext.Element.getViewHeight();if(a.curHeight!=g||a.curWidth!=e){a.curHeight=g;a.curWidth=e;a.resizeEvent.fire(e,g)}},removeResizeListener:function(h,g){var e=a.resizeEvent;if(e){e.removeListener(h,g)}},onWindowUnload:function(i,h,g){var e=a.unloadEvent;if(!e){a.unloadEvent=e=new Ext.util.Event();a.addListener(c,"unload",a.fireUnload)}if(i){e.addListener(i,h,g)}},fireUnload:function(){try{d=c=undefined;var m,h,k,j,g;a.unloadEvent.fire();if(Ext.isGecko3){m=Ext.ComponentQuery.query("gridview");h=0;k=m.length;for(;h=525:!((Ext.isGecko&&!Ext.isWindows)||Ext.isOpera),getKeyEvent:function(){return a.useKeyDown?"keydown":"keypress"}});if(!("addEventListener" in document)&&document.attachEvent){Ext.apply(a,{pollScroll:function(){var g=true;try{document.documentElement.doScroll("left")}catch(h){g=false}if(g&&document.body){a.onReadyEvent({type:"doScroll"})}else{a.scrollTimeout=setTimeout(a.pollScroll,20)}return g},scrollTimeout:null,readyStatesRe:/complete/i,checkReadyState:function(){var e=document.readyState;if(a.readyStatesRe.test(e)){a.onReadyEvent({type:e})}},bindReadyEvent:function(){var g=true;if(a.hasBoundOnReady){return}try{g=window.frameElement===undefined}catch(h){g=false}if(!g||!d.documentElement.doScroll){a.pollScroll=Ext.emptyFn}if(a.pollScroll()===true){return}if(d.readyState=="complete"){a.onReadyEvent({type:"already "+(d.readyState||"body")})}else{d.attachEvent("onreadystatechange",a.checkReadyState);window.attachEvent("onload",a.onReadyEvent);a.hasBoundOnReady=true}},onReadyEvent:function(g){if(g&&g.type){a.onReadyChain.push(g.type)}if(a.hasBoundOnReady){document.detachEvent("onreadystatechange",a.checkReadyState);window.detachEvent("onload",a.onReadyEvent)}if(Ext.isNumber(a.scrollTimeout)){clearTimeout(a.scrollTimeout);delete a.scrollTimeout}if(!Ext.isReady){a.fireDocReady()}},onReadyChain:[]})}Ext.onReady=function(h,g,e){Ext.Loader.onReady(h,g,true,e)};Ext.onDocumentReady=a.onDocumentReady;a.on=a.addListener;a.un=a.removeListener;Ext.onReady(b)};Ext.define("Ext.EventObjectImpl",{uses:["Ext.util.Point"],BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,RETURN:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,WHEEL_SCALE:(function(){var a;if(Ext.isGecko){a=3}else{if(Ext.isMac){if(Ext.isSafari&&Ext.webKitVersion>=532){a=120}else{a=12}a*=3}else{a=120}}return a}()),clickRe:/(dbl)?click/,safariKeys:{3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35},btnMap:Ext.isIE?{1:0,4:1,2:2}:{0:0,1:1,2:2},constructor:function(a,b){if(a){this.setEvent(a.browserEvent||a,b)}},setEvent:function(d,e){var c=this,b,a;if(d==c||(d&&d.browserEvent)){return d}c.browserEvent=d;if(d){b=d.button?c.btnMap[d.button]:(d.which?d.which-1:-1);if(c.clickRe.test(d.type)&&b==-1){b=0}a={type:d.type,button:b,shiftKey:d.shiftKey,ctrlKey:d.ctrlKey||d.metaKey||false,altKey:d.altKey,keyCode:d.keyCode,charCode:d.charCode,target:Ext.EventManager.getTarget(d),relatedTarget:Ext.EventManager.getRelatedTarget(d),currentTarget:d.currentTarget,xy:(e?c.getXY():null)}}else{a={button:-1,shiftKey:false,ctrlKey:false,altKey:false,keyCode:0,charCode:0,target:null,xy:[0,0]}}Ext.apply(c,a);return c},stopEvent:function(){this.stopPropagation();this.preventDefault()},preventDefault:function(){if(this.browserEvent){Ext.EventManager.preventDefault(this.browserEvent)}},stopPropagation:function(){var a=this.browserEvent;if(a){if(a.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(this)}Ext.EventManager.stopPropagation(a)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){return this.normalizeKey(this.keyCode||this.charCode)},normalizeKey:function(a){return Ext.isWebKit?(this.safariKeys[a]||a):a},getPageX:function(){return this.getX()},getPageY:function(){return this.getY()},getX:function(){return this.getXY()[0]},getY:function(){return this.getXY()[1]},getXY:function(){if(!this.xy){this.xy=Ext.EventManager.getPageXY(this.browserEvent)}return this.xy},getTarget:function(b,c,a){if(b){return Ext.fly(this.target).findParent(b,c,a)}return a?Ext.get(this.target):this.target},getRelatedTarget:function(b,c,a){if(b){return Ext.fly(this.relatedTarget).findParent(b,c,a)}return a?Ext.get(this.relatedTarget):this.relatedTarget},correctWheelDelta:function(c){var b=this.WHEEL_SCALE,a=Math.round(c/b);if(!a&&c){a=(c<0)?-1:1}return a},getWheelDeltas:function(){var d=this,c=d.browserEvent,b=0,a=0;if(Ext.isDefined(c.wheelDeltaX)){b=c.wheelDeltaX;a=c.wheelDeltaY}else{if(c.wheelDelta){a=c.wheelDelta}else{if(c.detail){a=-c.detail;if(a>100){a=3}else{if(a<-100){a=-3}}if(Ext.isDefined(c.axis)&&c.axis===c.HORIZONTAL_AXIS){b=a;a=0}}}}return{x:d.correctWheelDelta(b),y:d.correctWheelDelta(a)}},getWheelDelta:function(){var a=this.getWheelDeltas();return a.y},within:function(d,e,b){if(d){var c=e?this.getRelatedTarget():this.getTarget(),a;if(c){a=Ext.fly(d).contains(c);if(!a&&b){a=c==Ext.getDom(d)}return a}}return false},isNavKeyPress:function(){var b=this,a=this.normalizeKey(b.keyCode);return(a>=33&&a<=40)||a==b.RETURN||a==b.TAB||a==b.ESC},isSpecialKey:function(){var a=this.normalizeKey(this.keyCode);return(this.type=="keypress"&&this.ctrlKey)||this.isNavKeyPress()||(a==this.BACKSPACE)||(a>=16&&a<=20)||(a>=44&&a<=46)},getPoint:function(){var a=this.getXY();return new Ext.util.Point(a[0],a[1])},hasModifier:function(){return this.ctrlKey||this.altKey||this.shiftKey||this.metaKey},injectEvent:(function(){var d,e={},c;if(!Ext.isIE&&document.createEvent){d={createHtmlEvent:function(k,i,h,g){var j=k.createEvent("HTMLEvents");j.initEvent(i,h,g);return j},createMouseEvent:function(u,s,m,l,o,k,i,j,g,r,q,n,p){var h=u.createEvent("MouseEvents"),t=u.defaultView||window;if(h.initMouseEvent){h.initMouseEvent(s,m,l,t,o,k,i,k,i,j,g,r,q,n,p)}else{h=u.createEvent("UIEvents");h.initEvent(s,m,l);h.view=t;h.detail=o;h.screenX=k;h.screenY=i;h.clientX=k;h.clientY=i;h.ctrlKey=j;h.altKey=g;h.metaKey=q;h.shiftKey=r;h.button=n;h.relatedTarget=p}return h},createUIEvent:function(m,k,i,h,j){var l=m.createEvent("UIEvents"),g=m.defaultView||window;l.initUIEvent(k,i,h,g,j);return l},fireEvent:function(i,g,h){i.dispatchEvent(h)},fixTarget:function(g){if(g==window&&!g.dispatchEvent){return document}return g}}}else{if(document.createEventObject){c={0:1,1:4,2:2};d={createHtmlEvent:function(k,i,h,g){var j=k.createEventObject();j.bubbles=h;j.cancelable=g;return j},createMouseEvent:function(t,s,m,l,o,k,i,j,g,r,q,n,p){var h=t.createEventObject();h.bubbles=m;h.cancelable=l;h.detail=o;h.screenX=k;h.screenY=i;h.clientX=k;h.clientY=i;h.ctrlKey=j;h.altKey=g;h.shiftKey=r;h.metaKey=q;h.button=c[n]||n;h.relatedTarget=p;return h},createUIEvent:function(l,j,h,g,i){var k=l.createEventObject();k.bubbles=h;k.cancelable=g;return k},fireEvent:function(i,g,h){i.fireEvent("on"+g,h)},fixTarget:function(g){if(g==document){return document.documentElement}return g}}}}Ext.Object.each({load:[false,false],unload:[false,false],select:[true,false],change:[true,false],submit:[true,true],reset:[true,false],resize:[true,false],scroll:[true,false]},function(i,j){var h=j[0],g=j[1];e[i]=function(m,k){var l=d.createHtmlEvent(i,h,g);d.fireEvent(m,i,l)}});function b(i,h){var g=(i!="mousemove");return function(m,j){var l=j.getXY(),k=d.createMouseEvent(m.ownerDocument,i,true,g,h,l[0],l[1],j.ctrlKey,j.altKey,j.shiftKey,j.metaKey,j.button,j.relatedTarget);d.fireEvent(m,i,k)}}Ext.each(["click","dblclick","mousedown","mouseup","mouseover","mousemove","mouseout"],function(g){e[g]=b(g,1)});Ext.Object.each({focusin:[true,false],focusout:[true,false],activate:[true,true],focus:[false,false],blur:[false,false]},function(i,j){var h=j[0],g=j[1];e[i]=function(m,k){var l=d.createUIEvent(m.ownerDocument,i,h,g,1);d.fireEvent(m,i,l)}});if(!d){e={};d={fixTarget:function(g){return g}}}function a(h,g){}return function(j){var i=this,h=e[i.type]||a,g=j?(j.dom||j):i.getTarget();g=d.fixTarget(g);h(g,i)}}())},function(){Ext.EventObject=new Ext.EventObjectImpl()});Ext.define("Ext.dom.AbstractQuery",{select:function(k,b){var h=[],d,g,e,c,a;b=b||document;if(typeof b=="string"){b=document.getElementById(b)}k=k.split(",");for(g=0,c=k.length;g")}else{c.push(">");if((j=d.tpl)){j.applyOut(d.tplData,c)}if((j=d.html)){c.push(j)}if((j=d.cn||d.children)){h.generateMarkup(j,c)}g=h.closeTags;c.push(g[a]||(g[a]=""))}}}return c},generateStyles:function(e,c){var b=c||[],d;for(d in e){if(e.hasOwnProperty(d)){b.push(this.decamelizeName(d),":",e[d],";")}}return c||b.join("")},markup:function(a){if(typeof a=="string"){return a}var b=this.generateMarkup(a,[]);return b.join("")},applyStyles:function(d,e){if(e){var b=0,a,c;d=Ext.fly(d);if(typeof e=="function"){e=e.call()}if(typeof e=="string"){e=Ext.util.Format.trim(e).split(/\s*(?::|;)\s*/);for(a=e.length;b "'+g+'"'},insertBefore:function(a,c,b){return this.doInsert(a,c,b,"beforebegin")},insertAfter:function(a,c,b){return this.doInsert(a,c,b,"afterend","nextSibling")},insertFirst:function(a,c,b){return this.doInsert(a,c,b,"afterbegin","firstChild")},append:function(a,c,b){return this.doInsert(a,c,b,"beforeend","",true)},overwrite:function(a,c,b){a=Ext.getDom(a);a.innerHTML=this.markup(c);return b?Ext.get(a.firstChild):a.firstChild},doInsert:function(d,g,e,h,c,a){var b=this.insertHtml(h,Ext.getDom(d),this.markup(g));return e?Ext.get(b,true):b}});(function(){var a=window.document,b=/^\s+|\s+$/g,c=/\s/;if(!Ext.cache){Ext.cache={}}Ext.define("Ext.dom.AbstractElement",{inheritableStatics:{get:function(e){var g=this,h=Ext.dom.Element,d,j,i,k;if(!e){return null}if(typeof e=="string"){if(e==Ext.windowId){return h.get(window)}else{if(e==Ext.documentId){return h.get(a)}}d=Ext.cache[e];if(d&&d.skipGarbageCollection){j=d.el;return j}if(!(i=a.getElementById(e))){return null}if(d&&d.el){j=Ext.updateCacheEntry(d,i).el}else{j=new h(i,!!d)}return j}else{if(e.tagName){if(!(k=e.id)){k=Ext.id(e)}d=Ext.cache[k];if(d&&d.el){j=Ext.updateCacheEntry(d,e).el}else{j=new h(e,!!d)}return j}else{if(e instanceof g){if(e!=g.docEl&&e!=g.winEl){k=e.id;d=Ext.cache[k];if(d){Ext.updateCacheEntry(d,a.getElementById(k)||e.dom)}}return e}else{if(e.isComposite){return e}else{if(Ext.isArray(e)){return g.select(e)}else{if(e===a){if(!g.docEl){g.docEl=Ext.Object.chain(h.prototype);g.docEl.dom=a;g.docEl.id=Ext.id(a);g.addToCache(g.docEl)}return g.docEl}else{if(e===window){if(!g.winEl){g.winEl=Ext.Object.chain(h.prototype);g.winEl.dom=window;g.winEl.id=Ext.id(window);g.addToCache(g.winEl)}return g.winEl}}}}}}}return null},addToCache:function(d,e){if(d){Ext.addCacheEntry(e,d)}return d},addMethods:function(){this.override.apply(this,arguments)},mergeClsList:function(){var n,m={},k,d,g,l,e,o=[],h=false;for(k=0,d=arguments.length;kwindow.innerWidth)?"portrait":"landscape"},fromPoint:function(a,b){return Ext.get(document.elementFromPoint(a,b))},parseStyles:function(c){var a={},b=this.cssRe,d;if(c){b.lastIndex=0;while((d=b.exec(c))){a[d[1]]=d[2]}}return a}});(function(){var g=document,a=Ext.dom.AbstractElement,e=null,d=g.compatMode=="CSS1Compat",c,b=function(i){if(!c){c=new a.Fly()}c.attach(i);return c};if(!("activeElement" in g)&&g.addEventListener){g.addEventListener("focus",function(i){if(i&&i.target){e=(i.target==g)?null:i.target}},true)}function h(j,k,i){return function(){j.selectionStart=k;j.selectionEnd=i}}a.addInheritableStatics({getActiveElement:function(){return g.activeElement||e},getRightMarginFixCleaner:function(n){var k=Ext.supports,l=k.DisplayChangeInputSelectionBug,m=k.DisplayChangeTextAreaSelectionBug,o,i,p,j;if(l||m){o=g.activeElement||e;i=o&&o.tagName;if((m&&i=="TEXTAREA")||(l&&i=="INPUT"&&o.type=="text")){if(Ext.dom.Element.isAncestor(n,o)){p=o.selectionStart;j=o.selectionEnd;if(Ext.isNumber(p)&&Ext.isNumber(j)){return h(o,p,j)}}}}return Ext.emptyFn},getViewWidth:function(i){return i?Ext.dom.Element.getDocumentWidth():Ext.dom.Element.getViewportWidth()},getViewHeight:function(i){return i?Ext.dom.Element.getDocumentHeight():Ext.dom.Element.getViewportHeight()},getDocumentHeight:function(){return Math.max(!d?g.body.scrollHeight:g.documentElement.scrollHeight,Ext.dom.Element.getViewportHeight())},getDocumentWidth:function(){return Math.max(!d?g.body.scrollWidth:g.documentElement.scrollWidth,Ext.dom.Element.getViewportWidth())},getViewportHeight:function(){return Ext.isIE?(Ext.isStrict?g.documentElement.clientHeight:g.body.clientHeight):self.innerHeight},getViewportWidth:function(){return(!Ext.isStrict&&!Ext.isOpera)?g.body.clientWidth:Ext.isIE?g.documentElement.clientWidth:self.innerWidth},getY:function(i){return Ext.dom.Element.getXY(i)[1]},getX:function(i){return Ext.dom.Element.getXY(i)[0]},getXY:function(k){var n=g.body,j=g.documentElement,i=0,l=0,o=[0,0],r=Math.round,m,q;k=Ext.getDom(k);if(k!=g&&k!=n){if(Ext.isIE){try{m=k.getBoundingClientRect();l=j.clientTop||n.clientTop;i=j.clientLeft||n.clientLeft}catch(p){m={left:0,top:0}}}else{m=k.getBoundingClientRect()}q=b(document).getScroll();o=[r(m.left+q.left-i),r(m.top+q.top-l)]}return o},setXY:function(j,k){(j=Ext.fly(j,"_setXY")).position();var l=j.translatePoints(k),i=j.dom.style,m;for(m in l){if(!isNaN(l[m])){i[m]=l[m]+"px"}}},setX:function(j,i){Ext.dom.Element.setXY(j,[i,false])},setY:function(i,j){Ext.dom.Element.setXY(i,[false,j])},serializeForm:function(k){var l=k.elements||(document.forms[k]||Ext.getDom(k)).elements,v=false,u=encodeURIComponent,p="",n=l.length,q,i,t,x,w,r,m,s,j;for(r=0;rn){m=q?h.left-r:n-r}if(m<0){m=q?h.right:0}if(l+p>u){l=o?h.top-p:u-p}if(l<0){l=o?h.bottom:0}}return[m,l]},getAnchor:function(){var b=(this.$cache||this.getCache()).data,a;if(!this.dom){return}a=b._anchor;if(!a){a=b._anchor={}}return a},adjustForConstraints:function(c,b){var a=this.getConstrainVector(b,c);if(a){c[0]+=a[0];c[1]+=a[1]}return c}});Ext.dom.AbstractElement.addMethods({appendChild:function(a){return Ext.get(a).appendTo(this)},appendTo:function(a){Ext.getDom(a).appendChild(this.dom);return this},insertBefore:function(a){a=Ext.getDom(a);a.parentNode.insertBefore(this.dom,a);return this},insertAfter:function(a){a=Ext.getDom(a);a.parentNode.insertBefore(this.dom,a.nextSibling);return this},insertFirst:function(b,a){b=b||{};if(b.nodeType||b.dom||typeof b=="string"){b=Ext.getDom(b);this.dom.insertBefore(b,this.dom.firstChild);return !a?Ext.get(b):b}else{return this.createChild(b,this.dom.firstChild,a)}},insertSibling:function(b,g,j){var i=this,k=(g||"before").toLowerCase()=="after",d,a,c,h;if(Ext.isArray(b)){a=i;c=b.length;for(h=0;h1){g=[g,arguments[1]]}e=c.translatePoints(g);b=c.dom.style;for(d in e){if(!e.hasOwnProperty(d)){continue}if(!isNaN(e[d])){b[d]=e[d]+"px"}}return c},getLeft:function(b){return parseInt(this.getStyle("left"),10)||0},getRight:function(b){return parseInt(this.getStyle("right"),10)||0},getTop:function(b){return parseInt(this.getStyle("top"),10)||0},getBottom:function(b){return parseInt(this.getStyle("bottom"),10)||0},translatePoints:function(b,i){i=isNaN(b[1])?i:b[1];b=isNaN(b[0])?b:b[0];var e=this,g=e.isStyle("position","relative"),h=e.getXY(),c=parseInt(e.getStyle("left"),10),d=parseInt(e.getStyle("top"),10);c=!isNaN(c)?c:(g?0:e.dom.offsetLeft);d=!isNaN(d)?d:(g?0:e.dom.offsetTop);return{left:(b-h[0]+c),top:(i-h[1]+d)}},setBox:function(e){var d=this,c=e.width,b=e.height,h=e.top,g=e.left;if(g!==undefined){d.setLeft(g)}if(h!==undefined){d.setTop(h)}if(c!==undefined){d.setWidth(c)}if(b!==undefined){d.setHeight(b)}return this},getBox:function(i,m){var j=this,g=j.dom,d=g.offsetWidth,n=g.offsetHeight,p,h,e,c,o,k;if(!m){p=j.getXY()}else{if(i){p=[0,0]}else{p=[parseInt(j.getStyle("left"),10)||0,parseInt(j.getStyle("top"),10)||0]}}if(!i){h={x:p[0],y:p[1],0:p[0],1:p[1],width:d,height:n}}else{e=j.getBorderWidth.call(j,"l")+j.getPadding.call(j,"l");c=j.getBorderWidth.call(j,"r")+j.getPadding.call(j,"r");o=j.getBorderWidth.call(j,"t")+j.getPadding.call(j,"t");k=j.getBorderWidth.call(j,"b")+j.getPadding.call(j,"b");h={x:p[0]+e,y:p[1]+o,0:p[0]+e,1:p[1]+o,width:d-(e+c),height:n-(o+k)}}h.left=h.x;h.top=h.y;h.right=h.x+h.width;h.bottom=h.y+h.height;return h},getPageBox:function(g){var j=this,d=j.dom,m=d.offsetWidth,i=d.offsetHeight,o=j.getXY(),n=o[1],c=o[0]+m,k=o[1]+i,e=o[0];if(!d){return new Ext.util.Region()}if(g){return new Ext.util.Region(n,c,k,e)}else{return{left:e,top:n,width:m,height:i,right:c,bottom:k}}}})}());(function(){var q=Ext.dom.AbstractElement,o=document.defaultView,n=Ext.Array,m=/^\s+|\s+$/g,b=/\w/g,p=/\s+/,t=/^(?:transparent|(?:rgba[(](?:\s*\d+\s*[,]){3}\s*0\s*[)]))$/i,h=Ext.supports.ClassList,e="padding",d="margin",s="border",k="-left",r="-right",l="-top",c="-bottom",i="-width",j={l:s+k+i,r:s+r+i,t:s+l+i,b:s+c+i},g={l:e+k,r:e+r,t:e+l,b:e+c},a={l:d+k,r:d+r,t:d+l,b:d+c};q.override({styleHooks:{},addStyles:function(B,A){var w=0,z=(B||"").match(b),y,u=z.length,x,v=[];if(u==1){w=Math.abs(parseFloat(this.getStyle(A[z[0]]))||0)}else{if(u){for(y=0;y0?u:0},getWidth:function(u){var w=this.dom,v=u?(w.clientWidth-this.getPadding("lr")):w.offsetWidth;return v>0?v:0},setWidth:function(u){var v=this;v.dom.style.width=q.addUnits(u);return v},setHeight:function(u){var v=this;v.dom.style.height=q.addUnits(u);return v},getBorderWidth:function(u){return this.addStyles(u,j)},getPadding:function(u){return this.addStyles(u,g)},margins:a,applyStyles:function(w){if(w){var v,u,x=this.dom;if(typeof w=="function"){w=w.call()}if(typeof w=="string"){w=Ext.util.Format.trim(w).split(/\s*(?::|;)\s*/);for(v=0,u=w.length;v'+v+""):""});C=A.getSize();x.mask=E;if(w===document.body){C.height=window.innerHeight;if(A.orientationHandler){Ext.EventManager.unOrientationChange(A.orientationHandler,A)}A.orientationHandler=function(){C=A.getSize();C.height=window.innerHeight;E.setSize(C)};Ext.EventManager.onOrientationChange(A.orientationHandler,A)}E.setSize(C);if(Ext.is.iPad){Ext.repaint()}},unmask:function(){var v=this,x=(v.$cache||v.getCache()).data,u=x.mask,w=Ext.baseCSSPrefix;if(u){u.remove();delete x.mask}v.removeCls([w+"masked",w+"masked-relative"]);if(v.dom===document.body){Ext.EventManager.unOrientationChange(v.orientationHandler,v);delete v.orientationHandler}}});q.populateStyleMap=function(B,u){var A=["margin-","padding-","border-width-"],z=["before","after"],w,y,v,x;for(w=A.length;w--;){for(x=2;x--;){y=A[w]+z[x];B[q.normalize(y)]=B[y]={name:q.normalize(A[w]+u[x])}}}};Ext.onReady(function(){var C=Ext.supports,u,A,y,v,B;function z(H,E,G,D){var F=D[this.name]||"";return t.test(F)?"transparent":F}function x(J,G,I,F){var D=F.marginRight,E,H;if(D!="0px"){E=J.style;H=E.display;E.display="inline-block";D=(I?F:J.ownerDocument.defaultView.getComputedStyle(J,null)).marginRight;E.display=H}return D}function w(K,H,J,G){var D=G.marginRight,F,E,I;if(D!="0px"){F=K.style;E=q.getRightMarginFixCleaner(K);I=F.display;F.display="inline-block";D=(J?G:K.ownerDocument.defaultView.getComputedStyle(K,"")).marginRight;F.display=I;E()}return D}u=q.prototype.styleHooks;q.populateStyleMap(u,["left","right"]);if(C.init){C.init()}if(!C.RightMargin){u.marginRight=u["margin-right"]={name:"marginRight",get:(C.DisplayChangeInputSelectionBug||C.DisplayChangeTextAreaSelectionBug)?w:x}}if(!C.TransparentColor){A=["background-color","border-color","color","outline-color"];for(y=A.length;y--;){v=A[y];B=q.normalize(v);u[v]=u[B]={name:B,get:z}}}})}());Ext.dom.AbstractElement.override({findParent:function(h,b,a){var e=this.dom,c=document.documentElement,g=0,d;b=b||50;if(isNaN(b)){d=Ext.getDom(b);b=Number.MAX_VALUE}while(e&&e.nodeType==1&&g "+a,c.dom);return b?d:Ext.get(d)},parent:function(a,b){return this.matchNode("parentNode","parentNode",a,b)},next:function(a,b){return this.matchNode("nextSibling","nextSibling",a,b)},prev:function(a,b){return this.matchNode("previousSibling","previousSibling",a,b)},first:function(a,b){return this.matchNode("nextSibling","firstChild",a,b)},last:function(a,b){return this.matchNode("previousSibling","lastChild",a,b)},matchNode:function(b,e,a,c){if(!this.dom){return null}var d=this.dom[e];while(d){if(d.nodeType==1&&(!a||Ext.DomQuery.is(d,a))){return !c?Ext.get(d):d}d=d[b]}return null},isAncestor:function(a){return this.self.isAncestor.call(this.self,this.dom,a)}});(function(){var b="afterbegin",i="afterend",a="beforebegin",o="beforeend",l="",h="
",c=l+"",n=""+h,k=c+"",e=""+n,p=document.createElement("div"),m=["BeforeBegin","previousSibling"],j=["AfterEnd","nextSibling"],d={beforebegin:m,afterend:j},g={beforebegin:m,afterend:j,afterbegin:["AfterBegin","firstChild"],beforeend:["BeforeEnd","lastChild"]};Ext.define("Ext.dom.Helper",{extend:"Ext.dom.AbstractHelper",requires:["Ext.dom.AbstractElement"],tableRe:/^table|tbody|tr|td$/i,tableElRe:/td|tr|tbody/i,useDom:false,createDom:function(q,w){var r,z=document,u,x,s,y,v,t;if(Ext.isArray(q)){r=z.createDocumentFragment();for(v=0,t=q.length;v+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w\-\*\\]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,startIdRe=/^\s*\#/,isIE=window.ActiveXObject?true:false,key=30803,longHex=/\\([0-9a-fA-F]{6})/g,shortHex=/\\([0-9a-fA-F]{1,6})\s{0,1}/g,nonHex=/\\([^0-9a-fA-F]{1})/g,escapes=/\\/g,num,hasEscapes,longHexToChar=function($0,$1){return String.fromCharCode(parseInt($1,16))},shortToLongHex=function($0,$1){while($1.length<6){$1="0"+$1}return"\\"+$1},charToLongHex=function($0,$1){num=$1.charCodeAt(0).toString(16);if(num.length===1){num="0"+num}return"\\0000"+num},unescapeCssSelector=function(selector){return(hasEscapes)?selector.replace(longHex,longHexToChar):selector},setupEscapes=function(path){hasEscapes=(path.indexOf("\\")>-1);if(hasEscapes){path=path.replace(shortHex,shortToLongHex).replace(nonHex,charToLongHex).replace(escapes,"\\\\")}return path};eval("var batch = 30803;");function child(parent,index){var i=0,n=parent.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n}function children(parent){var n=parent.firstChild,nodeIndex=-1,nextNode;while(n){nextNode=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){parent.removeChild(n)}else{n.nodeIndex=++nodeIndex}n=nextNode}return this}function byClassName(nodeSet,cls){cls=unescapeCssSelector(cls);if(!cls){return nodeSet}var result=[],ri=-1,i,ci;for(i=0,ci;ci=nodeSet[i];i++){if((" "+ci.className+" ").indexOf(cls)!=-1){result[++ri]=ci}}return result}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs,i,ni,j,ci,cn,utag,n,cj;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){utag=tagName.toUpperCase();for(i=0,ni,cn;ni=ns[i];i++){cn=ni.childNodes;for(j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){utag=tagName.toUpperCase();for(i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){utag=tagName.toUpperCase();for(i=0,n;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){result[++ri]=n}}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i1){return nodup(results)}return results},isXml:function(el){var docEl=(el?el.ownerDocument||el:0).documentElement;return docEl?docEl.nodeName!=="HTML":false},select:document.querySelectorAll?function(path,root,type){root=root||document;if(!Ext.DomQuery.isXml(root)){try{if(root.parentNode&&(root.nodeType!==9)&&path.indexOf(",")===-1&&!startIdRe.test(path)){path="#"+Ext.escapeId(Ext.id(root))+" "+path;root=root.parentNode}return Ext.Array.toArray(root.querySelectorAll(path))}catch(e){}}return Ext.DomQuery.jsSelect.call(this,path,root,type)}:function(path,root,type){return Ext.DomQuery.jsSelect.call(this,path,root,type)},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}else{setupEscapes(path)}var n=valueCache[path](root),v;n=n[0]?n[0]:n;if(typeof n.normalize=="function"){n.normalize()}v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=Ext.isArray(el),result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}else{setupEscapes(ss)}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w\-\\]+)/,select:'n = byClassName(n, " {1} ");'},{re:/^\:([\w\-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w\-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w\-\\]+)/,select:'n = byId(n, "{1}");'},{re:/^@([\w\-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n,i,ci;for(i=0;(ci=n=c[i]);i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n,i,ci;for(i=0;(ci=n=c[i]);i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0,i,n,j,cn,pn;for(i=0;n=c[i];i++){pn=n.parentNode;if(batch!=pn._batch){j=0;for(cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},empty:function(c){var r=[],ri=-1,i,ci,cns,j,cn,empty;for(i=0,ci;ci=c[i];i++){cns=ci.childNodes;j=0;empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},contains:function(c,v){var r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if((ci.textContent||ci.innerText||ci.text||"").indexOf(v)!=-1){r[++ri]=ci}}return r},nodeValue:function(c,v){var r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},checked:function(c){var r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},not:function(c,ss){return Ext.DomQuery.filter(c,ss,true)},any:function(c,selectors){var ss=selectors.split("|"),r=[],ri=-1,s,i,ci,j;for(i=0;ci=c[i];i++){for(j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break}}}return r},odd:function(c){return this["nth-child"](c,"odd")},even:function(c){return this["nth-child"](c,"even")},nth:function(c,a){return c[a-1]||[]},first:function(c){return c[0]||[]},last:function(c){return c[c.length-1]||[]},has:function(c,ss){var s=Ext.DomQuery.select,r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},next:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1,i,ci,n;for(i=0;ci=c[i];i++){n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},prev:function(c,ss){var is=Ext.DomQuery.is,r=[],ri=-1,i,ci,n;for(i=0;ci=c[i];i++){n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}());Ext.query=Ext.DomQuery.select;(function(){var HIDDEN="hidden",DOC=document,VISIBILITY="visibility",DISPLAY="display",NONE="none",XMASKED=Ext.baseCSSPrefix+"masked",XMASKEDRELATIVE=Ext.baseCSSPrefix+"masked-relative",EXTELMASKMSG=Ext.baseCSSPrefix+"mask-msg",bodyRe=/^body/i,visFly,noBoxAdjust=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1},isScrolled=function(c){var r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if(ci.scrollTop>0||ci.scrollLeft>0){r[++ri]=ci}}return r},Element=Ext.define("Ext.dom.Element",{extend:"Ext.dom.AbstractElement",alternateClassName:["Ext.Element","Ext.core.Element"],addUnits:function(){return this.self.addUnits.apply(this.self,arguments)},focus:function(defer,dom){var me=this,scrollTop,body;dom=dom||me.dom;body=(dom.ownerDocument||DOC).body||DOC.body;try{if(Number(defer)){Ext.defer(me.focus,defer,me,[null,dom])}else{if(dom.offsetHeight>Element.getViewHeight()){scrollTop=body.scrollTop}dom.focus();if(scrollTop!==undefined){body.scrollTop=scrollTop}}}catch(e){}return me},blur:function(){try{this.dom.blur()}catch(e){}return this},isBorderBox:function(){var box=Ext.isBorderBox;if(box){box=!((this.dom.tagName||"").toLowerCase() in noBoxAdjust)}return box},hover:function(overFn,outFn,scope,options){var me=this;me.on("mouseenter",overFn,scope||me.dom,options);me.on("mouseleave",outFn,scope||me.dom,options);return me},getAttributeNS:function(ns,name){return this.getAttribute(name,ns)},getAttribute:(Ext.isIE&&!(Ext.isIE9&&DOC.documentMode===9))?function(name,ns){var d=this.dom,type;if(ns){type=typeof d[ns+":"+name];if(type!="undefined"&&type!="unknown"){return d[ns+":"+name]||null}return null}if(name==="for"){name="htmlFor"}return d[name]||null}:function(name,ns){var d=this.dom;if(ns){return d.getAttributeNS(ns,name)||d.getAttribute(ns+":"+name)}return d.getAttribute(name)||d[name]||null},cacheScrollValues:function(){var me=this,scrolledDescendants,el,i,scrollValues=[],result=function(){for(i=0;i]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig,replaceScriptTagRe=/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,srcRe=/\ssrc=([\'\"])(.*?)\1/i,typeRe=/\stype=([\'\"])(.*?)\1/i,useDocForId=!(Ext.isIE6||Ext.isIE7||Ext.isIE8);El.boxMarkup='
';function garbageCollect(){if(!Ext.enableGarbageCollector){clearInterval(El.collectorThreadId)}else{var eid,d,o,t;for(eid in EC){if(!EC.hasOwnProperty(eid)){continue}o=EC[eid];if(o.skipGarbageCollection){continue}d=o.dom;if(!d.parentNode||(!d.offsetParent&&!Ext.getElementById(eid))){if(d&&Ext.enableListenerCollection){Ext.EventManager.removeAll(d)}delete EC[eid]}}if(Ext.isIE){t={};for(eid in EC){if(!EC.hasOwnProperty(eid)){continue}t[eid]=EC[eid]}EC=Ext.cache=t}}}El.collectorThreadId=setInterval(garbageCollect,30000);El.addMethods({monitorMouseLeave:function(delay,handler,scope){var me=this,timer,listeners={mouseleave:function(e){timer=setTimeout(Ext.Function.bind(handler,scope||me,[e]),delay)},mouseenter:function(){clearTimeout(timer)},freezeEvent:true};me.on(listeners);return listeners},swallowEvent:function(eventName,preventDefault){var me=this,e,eLen;function fn(e){e.stopPropagation();if(preventDefault){e.preventDefault()}}if(Ext.isArray(eventName)){eLen=eventName.length;for(e=0;e';interval=setInterval(function(){var hd,match,attrs,srcMatch,typeMatch,el,s;if(!(el=DOC.getElementById(id))){return false}clearInterval(interval);Ext.removeNode(el);hd=Ext.getHead().dom;while((match=scriptTagRe.exec(html))){attrs=match[1];srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){s=DOC.createElement("script");s.src=srcMatch[2];typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2])}else{window.eval(match[2])}}}}Ext.callback(callback,me)},20);dom.innerHTML=html.replace(replaceScriptTagRe,"");return me},removeAllListeners:function(){this.removeAnchor();Ext.EventManager.removeAll(this.dom);return this},createProxy:function(config,renderTo,matchBox){config=(typeof config=="object")?config:{tag:"div",cls:config};var me=this,proxy=renderTo?Ext.DomHelper.append(renderTo,config,true):Ext.DomHelper.insertBefore(me.dom,config,true);proxy.setVisibilityMode(Element.DISPLAY);proxy.hide();if(matchBox&&me.setBox&&me.getBox){proxy.setBox(me.getBox())}return proxy},getScopeParent:function(){var parent=this.dom.parentNode;if(Ext.scopeResetCSS){parent=parent.parentNode;if(!Ext.supports.CSS3LinearGradient||!Ext.supports.CSS3BorderRadius){parent=parent.parentNode}}return parent},needsTabIndex:function(){if(this.dom){if((this.dom.nodeName==="a")&&(!this.dom.href)){return true}return !focusRe.test(this.dom.nodeName)}},focusable:function(){var dom=this.dom,nodeName=dom.nodeName,canFocus=false;if(!dom.disabled){if(focusRe.test(nodeName)){if((nodeName!=="a")||dom.href){canFocus=true}}else{canFocus=!isNaN(dom.tabIndex)}}return canFocus&&this.isVisible(true)}});if(Ext.isIE){El.prototype.getById=function(id,asDom){var dom=this.dom,cacheItem,el,ret;if(dom){el=(useDocForId&&DOC.getElementById(id))||dom.all[id];if(el){if(asDom){ret=el}else{cacheItem=EC[id];if(cacheItem&&cacheItem.el){ret=Ext.updateCacheEntry(cacheItem,el).el}else{ret=new Element(el)}}return ret}}return asDom?Ext.getDom(id):El.get(id)}}El.createAlias({addListener:"on",removeListener:"un",clearListeners:"removeAllListeners"});El.Fly=AbstractElement.Fly=new Ext.Class({extend:El,constructor:function(dom){this.dom=dom},attach:AbstractElement.Fly.prototype.attach});if(Ext.isIE){Ext.getElementById=function(id){var el=DOC.getElementById(id),detachedBodyEl;if(!el&&(detachedBodyEl=AbstractElement.detachedBodyEl)){el=detachedBodyEl.dom.all[id]}return el}}else{if(!DOC.querySelector){Ext.getDetachedBody=Ext.getBody;Ext.getElementById=function(id){return DOC.getElementById(id)}}}})}());Ext.dom.Element.override((function(){var d=document,c=window,a=/^([a-z]+)-([a-z]+)(\?)?$/,b=Math.round;return{getAnchorXY:function(j,o,h){j=(j||"tl").toLowerCase();h=h||{};var m=this,i=m.dom==d.body||m.dom==d,e=h.width||i?Ext.dom.Element.getViewWidth():m.getWidth(),g=h.height||i?Ext.dom.Element.getViewHeight():m.getHeight(),q,n=m.getXY(),p=m.getScroll(),l=i?p.left:!o?n[0]:0,k=i?p.top:!o?n[1]:0;switch(j){case"tl":q=[0,0];break;case"bl":q=[0,g];break;case"tr":q=[e,0];break;case"c":q=[b(e*0.5),b(g*0.5)];break;case"t":q=[b(e*0.5),0];break;case"l":q=[0,b(g*0.5)];break;case"r":q=[e,b(g*0.5)];break;case"b":q=[b(e*0.5),g];break;case"br":q=[e,g]}return[q[0]+l,q[1]+k]},getAlignToXY:function(m,G,j){m=Ext.get(m);if(!m||!m.dom){}j=j||[0,0];G=(!G||G=="?"?"tl-bl?":(!(/-/).test(G)&&G!==""?"tl-"+G:G||"tl-bl")).toLowerCase();var H=this,l,w,q,o,k,z,A,E=Ext.dom.Element.getViewWidth()-10,i=Ext.dom.Element.getViewHeight()-10,g,h,n,p,u,v,F=d.documentElement,s=d.body,D=(F.scrollLeft||s.scrollLeft||0),B=(F.scrollTop||s.scrollTop||0),C,t,r,e=G.match(a);t=e[1];r=e[2];C=!!e[3];l=H.getAnchorXY(t,true);w=m.getAnchorXY(r,false);q=w[0]-l[0]+j[0];o=w[1]-l[1]+j[1];if(C){k=H.getWidth();z=H.getHeight();A=m.getRegion();g=t.charAt(0);h=t.charAt(t.length-1);n=r.charAt(0);p=r.charAt(r.length-1);u=((g=="t"&&n=="b")||(g=="b"&&n=="t"));v=((h=="r"&&p=="l")||(h=="l"&&p=="r"));if(q+k>E+D){q=v?A.left-k:E+D-k}if(qi+B){o=u?A.top-z:i+B-z}if(oi.right){h=true;e[0]=(i.right-k.right)}if(k.left+e[0]i.bottom){h=true;e[1]=(i.bottom-k.bottom)}if(k.top+e[1]a.clientHeight||a.scrollWidth>a.clientWidth},getScroll:function(){var i=this.dom,h=document,a=h.body,c=h.documentElement,b,g,e;if(i==h||i==a){if(Ext.isIE&&Ext.isStrict){b=c.scrollLeft;g=c.scrollTop}else{b=window.pageXOffset;g=window.pageYOffset}e={left:b||(a?a.scrollLeft:0),top:g||(a?a.scrollTop:0)}}else{e={left:i.scrollLeft,top:i.scrollTop}}return e},scrollBy:function(b,a,c){var d=this,e=d.dom;if(b.length){c=a;a=b[1];b=b[0]}else{if(typeof b!="number"){c=a;a=b.y;b=b.x}}if(b){d.scrollTo("left",Math.max(Math.min(e.scrollLeft+b,e.scrollWidth-e.clientWidth),0),c)}if(a){d.scrollTo("top",Math.max(Math.min(e.scrollTop+a,e.scrollHeight-e.clientHeight),0),c)}return d},scrollTo:function(c,e,a){var g=/top/i.test(c),d=this,h=d.dom,b,i;if(!a||!d.anim){i="scroll"+(g?"Top":"Left");h[i]=e;h[i]=e}else{b={to:{}};b.to["scroll"+(g?"Top":"Left")]=e;if(Ext.isObject(a)){Ext.applyIf(b,a)}d.animate(b)}return d},scrollIntoView:function(b,g,c){b=Ext.getDom(b)||Ext.getBody().dom;var d=this.dom,i=this.getOffsetsTo(b),h=i[0]+b.scrollLeft,l=i[1]+b.scrollTop,a=l+d.offsetHeight,m=h+d.offsetWidth,p=b.clientHeight,o=parseInt(b.scrollTop,10),e=parseInt(b.scrollLeft,10),j=o+p,n=e+b.clientWidth,k;if(d.offsetHeight>p||lj){k=a-p}}if(k!=null){Ext.get(b).scrollTo("top",k,c)}if(g!==false){k=null;if(d.offsetWidth>b.clientWidth||hn){k=m-b.clientWidth}}if(k!=null){Ext.get(b).scrollTo("left",k,c)}}return this},scrollChildIntoView:function(b,a){Ext.fly(b,"_scrollChildIntoView").scrollIntoView(this,a)},scroll:function(m,b,d){if(!this.isScrollable()){return false}var e=this.dom,g=e.scrollLeft,p=e.scrollTop,n=e.scrollWidth,k=e.scrollHeight,i=e.clientWidth,a=e.clientHeight,c=false,o,j={l:Math.min(g+b,n-i),r:o=Math.max(g-b,0),t:Math.max(p-b,0),b:Math.min(p+b,k-a)};j.d=j.b;j.u=j.t;m=m.substr(0,1);if((o=j[m])>-1){c=true;this.scrollTo(m=="l"||m=="r"?"left":"top",o,this.anim(d))}return c}});(function(){var p=Ext.dom.Element,m=document.defaultView,n=/table-row|table-.*-group/,a="_internal",r="hidden",o="height",g="width",e="isClipped",i="overflow",l="overflow-x",j="overflow-y",s="originalClip",b=/#document|body/i,t,d,q,h,u;if(!m||!m.getComputedStyle){p.prototype.getStyle=function(z,y){var L=this,G=L.dom,J=typeof z!="string",k=L.styleHooks,w=z,x=w,F=1,B=y,K,C,v,A,E,H,D;if(J){v={};w=x[0];D=0;if(!(F=x.length)){return v}}if(!G||G.documentElement){return v||""}C=G.style;if(y){H=C}else{H=G.currentStyle;if(!H){B=true;H=C}}do{A=k[w];if(!A){k[w]=A={name:p.normalize(w)}}if(A.get){E=A.get(G,L,B,H)}else{K=A.name;if(A.canThrow){try{E=H[K]}catch(I){E=""}}else{E=H?H[K]:""}}if(!J){return E}v[w]=E;w=x[++D]}while(D0&&A<0.5){k++}}}if(x){k-=w.getBorderWidth("tb")+w.getPadding("tb")}return(k<0)?0:k},getWidth:function(k,z){var x=this,A=x.dom,y=x.isStyle("display","none"),w,v,B;if(y){return 0}if(Ext.supports.BoundingClientRect){w=A.getBoundingClientRect();v=w.right-w.left;v=z?v:Math.ceil(v)}else{v=A.offsetWidth}v=Math.max(v,A.clientWidth)||0;if(Ext.supports.Direct2DBug){B=x.adjustDirect2DDimension(g);if(z){v+=B}else{if(B>0&&B<0.5){v++}}}if(k){v-=x.getBorderWidth("lr")+x.getPadding("lr")}return(v<0)?0:v},setWidth:function(v,k){var w=this;v=w.adjustWidth(v);if(!k||!w.anim){w.dom.style.width=w.addUnits(v)}else{if(!Ext.isObject(k)){k={}}w.animate(Ext.applyIf({to:{width:v}},k))}return w},setHeight:function(k,v){var w=this;k=w.adjustHeight(k);if(!v||!w.anim){w.dom.style.height=w.addUnits(k)}else{if(!Ext.isObject(v)){v={}}w.animate(Ext.applyIf({to:{height:k}},v))}return w},applyStyles:function(k){Ext.DomHelper.applyStyles(this.dom,k);return this},setSize:function(w,k,v){var x=this;if(Ext.isObject(w)){v=k;k=w.height;w=w.width}w=x.adjustWidth(w);k=x.adjustHeight(k);if(!v||!x.anim){x.dom.style.width=x.addUnits(w);x.dom.style.height=x.addUnits(k)}else{if(v===true){v={}}x.animate(Ext.applyIf({to:{width:w,height:k}},v))}return x},getViewSize:function(){var w=this,x=w.dom,v=b.test(x.nodeName),k;if(v){k={width:p.getViewWidth(),height:p.getViewHeight()}}else{k={width:x.clientWidth,height:x.clientHeight}}return k},getSize:function(k){return{width:this.getWidth(k),height:this.getHeight(k)}},adjustWidth:function(k){var v=this,w=(typeof k=="number");if(w&&v.autoBoxAdjust&&!v.isBorderBox()){k-=(v.getBorderWidth("lr")+v.getPadding("lr"))}return(w&&k<0)?0:k},adjustHeight:function(k){var v=this,w=(typeof k=="number");if(w&&v.autoBoxAdjust&&!v.isBorderBox()){k-=(v.getBorderWidth("tb")+v.getPadding("tb"))}return(w&&k<0)?0:k},getColor:function(w,x,C){var z=this.getStyle(w),y=C||C===""?C:"#",B,k,A=0;if(!z||(/transparent|inherit/.test(z))){return x}if(/^r/.test(z)){z=z.slice(4,z.length-1).split(",");k=z.length;for(;A5?y.toLowerCase():x)},setOpacity:function(v,k){var w=this;if(!w.dom){return w}if(!k||!w.anim){w.setStyle("opacity",v)}else{if(typeof k!="object"){k={duration:350,easing:"ease-in"}}w.animate(Ext.applyIf({to:{opacity:v}},k))}return w},clearOpacity:function(){return this.setOpacity("")},adjustDirect2DDimension:function(w){var B=this,v=B.dom,z=B.getStyle("display"),y=v.style.display,C=v.style.position,A=w===g?0:1,k=v.currentStyle,x;if(z==="inline"){v.style.display="inline-block"}v.style.position=z.match(n)?"absolute":"static";x=(parseFloat(k[w])||parseFloat(k.msTransformOrigin.split(" ")[A])*2)%1;v.style.position=C;if(z==="inline"){v.style.display=y}return x},clip:function(){var v=this,w=(v.$cache||v.getCache()).data,k;if(!w[e]){w[e]=true;k=v.getStyle([i,l,j]);w[s]={o:k[i],x:k[l],y:k[j]};v.setStyle(i,r);v.setStyle(l,r);v.setStyle(j,r)}return v},unclip:function(){var v=this,w=(v.$cache||v.getCache()).data,k;if(w[e]){w[e]=false;k=w[s];if(k.o){v.setStyle(i,k.o)}if(k.x){v.setStyle(l,k.x)}if(k.y){v.setStyle(j,k.y)}}return v},boxWrap:function(k){k=k||Ext.baseCSSPrefix+"box";var v=Ext.get(this.insertHtml("beforeBegin","
"+Ext.String.format(p.boxMarkup,k)+"
"));Ext.DomQuery.selectNode("."+k+"-mc",v.dom).appendChild(this.dom);return v},getComputedHeight:function(){var v=this,k=Math.max(v.dom.offsetHeight,v.dom.clientHeight);if(!k){k=parseFloat(v.getStyle(o))||0;if(!v.isBorderBox()){k+=v.getFrameWidth("tb")}}return k},getComputedWidth:function(){var v=this,k=Math.max(v.dom.offsetWidth,v.dom.clientWidth);if(!k){k=parseFloat(v.getStyle(g))||0;if(!v.isBorderBox()){k+=v.getFrameWidth("lr")}}return k},getFrameWidth:function(v,k){return(k&&this.isBorderBox())?0:(this.getPadding(v)+this.getBorderWidth(v))},addClsOnOver:function(w,z,v){var x=this,y=x.dom,k=Ext.isFunction(z);x.hover(function(){if(k&&z.call(v||x,x)===false){return}Ext.fly(y,a).addCls(w)},function(){Ext.fly(y,a).removeCls(w)});return x},addClsOnFocus:function(w,z,v){var x=this,y=x.dom,k=Ext.isFunction(z);x.on("focus",function(){if(k&&z.call(v||x,x)===false){return false}Ext.fly(y,a).addCls(w)});x.on("blur",function(){Ext.fly(y,a).removeCls(w)});return x},addClsOnClick:function(w,z,v){var x=this,y=x.dom,k=Ext.isFunction(z);x.on("mousedown",function(){if(k&&z.call(v||x,x)===false){return false}Ext.fly(y,a).addCls(w);var B=Ext.getDoc(),A=function(){Ext.fly(y,a).removeCls(w);B.removeListener("mouseup",A)};B.on("mouseup",A)});return x},getStyleSize:function(){var z=this,A=this.dom,v=b.test(A.nodeName),y,k,x;if(v){return{width:p.getViewWidth(),height:p.getViewHeight()}}y=z.getStyle([o,g],true);if(y.width&&y.width!="auto"){k=parseFloat(y.width);if(z.isBorderBox()){k-=z.getFrameWidth("lr")}}if(y.height&&y.height!="auto"){x=parseFloat(y.height);if(z.isBorderBox()){x-=z.getFrameWidth("tb")}}return{width:k||z.getWidth(true),height:x||z.getHeight(true)}},selectable:function(){var k=this;k.dom.unselectable="off";k.on("selectstart",function(v){v.stopPropagation();return true});k.applyStyles("-moz-user-select: text; -khtml-user-select: text;");k.removeCls(Ext.baseCSSPrefix+"unselectable");return k},unselectable:function(){var k=this;k.dom.unselectable="on";k.swallowEvent("selectstart",true);k.applyStyles("-moz-user-select:-moz-none;-khtml-user-select:none;");k.addCls(Ext.baseCSSPrefix+"unselectable");return k}});p.prototype.styleHooks=t=Ext.dom.AbstractElement.prototype.styleHooks;if(Ext.isIE6||Ext.isIE7){t.fontSize=t["font-size"]={name:"fontSize",canThrow:true};t.fontStyle=t["font-style"]={name:"fontStyle",canThrow:true};t.fontFamily=t["font-family"]={name:"fontFamily",canThrow:true}}if(Ext.isIEQuirks||Ext.isIE&&Ext.ieVersion<=8){function c(x,v,w,k){if(k[this.styleName]=="none"){return"0px"}return k[this.name]}d=["Top","Right","Bottom","Left"];q=d.length;while(q--){h=d[q];u="border"+h+"Width";t["border-"+h.toLowerCase()+"-width"]=t[u]={name:u,styleName:"border"+h+"Style",get:c}}}}());Ext.onReady(function(){var c=/alpha\(opacity=(.*)\)/i,b=/^\s+|\s+$/g,a=Ext.dom.Element.prototype.styleHooks;a.opacity={name:"opacity",afterSet:function(g,e,d){if(d.isLayer){d.onOpacitySet(e)}}};if(!Ext.supports.Opacity&&Ext.isIE){Ext.apply(a.opacity,{get:function(h){var g=h.style.filter,e,d;if(g.match){e=g.match(c);if(e){d=parseFloat(e[1]);if(!isNaN(d)){return d?d/100:0}}}return 1},set:function(h,e){var d=h.style,g=d.filter.replace(c,"").replace(b,"");d.zoom=1;if(typeof(e)=="number"&&e>=0&&e<1){e*=100;d.filter=g+(g.length?" ":"")+"alpha(opacity="+e+")"}else{d.filter=g}}})}});Ext.dom.Element.override({select:function(a){return Ext.dom.Element.select(a,false,this.dom)}});Ext.define("Ext.dom.CompositeElementLite",{alternateClassName:"Ext.CompositeElementLite",requires:["Ext.dom.Element","Ext.dom.Query"],statics:{importElementMethods:function(){var b,c=Ext.dom.Element.prototype,a=this.prototype;for(b in c){if(typeof c[b]=="function"){(function(d){a[d]=a[d]||function(){return this.invoke(d,arguments)}}).call(a,b)}}}},constructor:function(b,a){this.elements=[];this.add(b,a);this.el=new Ext.dom.AbstractElement.Fly()},isComposite:true,getElement:function(a){return this.el.attach(a)},transformElement:function(a){return Ext.getDom(a)},getCount:function(){return this.elements.length},add:function(c,a){var e=this.elements,b,d;if(!c){return this}if(typeof c=="string"){c=Ext.dom.Element.selectorFunction(c,a)}else{if(c.isComposite){c=c.elements}else{if(!Ext.isIterable(c)){c=[c]}}}for(b=0,d=c.length;b-1){c=Ext.getDom(c);if(a){g=this.elements[b];g.parentNode.insertBefore(c,g);Ext.removeNode(g)}Ext.Array.splice(this.elements,b,1,c)}return this},clear:function(){this.elements=[]},addElements:function(d,b){if(!d){return this}if(typeof d=="string"){d=Ext.dom.Element.selectorFunction(d,b)}var c=this.elements,a=d.length,g;for(g=0;g','
{parent.baseCls}-{parent.ui}-{.}-tl" style="background-position: {tl}; padding-left: {frameWidth}px" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-tr" style="background-position: {tr}; padding-right: {frameWidth}px" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-tc" style="background-position: {tc}; height: {frameWidth}px" role="presentation">
','
','
',"",'
{parent.baseCls}-{parent.ui}-{.}-ml" style="background-position: {ml}; padding-left: {frameWidth}px" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-mr" style="background-position: {mr}; padding-right: {frameWidth}px" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-mc" role="presentation">',"{%this.applyRenderTpl(out, values)%}","
",'
','
','','
{parent.baseCls}-{parent.ui}-{.}-bl" style="background-position: {bl}; padding-left: {frameWidth}px" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-br" style="background-position: {br}; padding-right: {frameWidth}px" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-bc" style="background-position: {bc}; height: {frameWidth}px" role="presentation">
','
','
',"
","{%this.renderDockedItems(out,values,1);%}"],frameTableTpl:["{%this.renderDockedItems(out,values,0);%}","",'',"",'','','',"","","",'','",'',"",'',"",'','','',"","","
{parent.baseCls}-{parent.ui}-{.}-tl" style="background-position: {tl}; padding-left:{frameWidth}px" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-tc" style="background-position: {tc}; height: {frameWidth}px" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-tr" style="background-position: {tr}; padding-left: {frameWidth}px" role="presentation">
{parent.baseCls}-{parent.ui}-{.}-ml" style="background-position: {ml}; padding-left: {frameWidth}px" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-mc" style="background-position: 0 0;" role="presentation">',"{%this.applyRenderTpl(out, values)%}"," {parent.baseCls}-{parent.ui}-{.}-mr" style="background-position: {mr}; padding-left: {frameWidth}px" role="presentation">
{parent.baseCls}-{parent.ui}-{.}-bl" style="background-position: {bl}; padding-left: {frameWidth}px" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-bc" style="background-position: {bc}; height: {frameWidth}px" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-br" style="background-position: {br}; padding-left: {frameWidth}px" role="presentation">
","{%this.renderDockedItems(out,values,1);%}"],afterRender:function(){var b=this,c={},e=b.protoEl,d=b.getTargetEl(),a;b.finishRenderChildren();if(b.styleHtmlContent){d.addCls(b.styleHtmlCls)}e.writeTo(c);a=c.removed;if(a){d.removeCls(a)}a=c.cls;if(a.length){d.addCls(a)}a=c.style;if(c.style){d.setStyle(a)}b.protoEl=null;if(!b.ownerCt){b.updateLayout()}},afterFirstLayout:function(d,a){var e=this,c=Ext.isDefined(e.x),b=Ext.isDefined(e.y),h,g;if(e.floating&&(!c||!b)){if(e.floatParent){h=e.floatParent.getTargetEl().getViewRegion();g=e.el.getAlignToXY(e.floatParent.getTargetEl(),"c-c");h.left=g[0]-h.left;h.top=g[1]-h.top}else{g=e.el.getAlignToXY(e.container,"c-c");h=e.container.translatePoints(g[0],g[1])}e.x=c?e.x:h.left;e.y=b?e.y:h.top;c=b=true}if(c||b){e.setPosition(e.x,e.y)}e.onBoxReady(d,a);if(e.hasListeners.boxready){e.fireEvent("boxready",e,d,a)}},onBoxReady:Ext.emptyFn,applyRenderSelectors:function(){var d=this,b=d.renderSelectors,c=d.el,e=c.dom,a;d.applyChildEls(c);if(b){for(a in b){if(b.hasOwnProperty(a)&&b[a]){d[a]=Ext.get(Ext.DomQuery.selectNode(b[a],e))}}}},beforeRender:function(){var b=this,c=b.getTargetEl(),a=b.getComponentLayout();b.frame=b.frame||b.alwaysFramed;if(!a.initialized){a.initLayout()}if(c){c.setStyle(b.getOverflowStyle());b.overflowStyleSet=true}b.setUI(b.ui);if(b.disabled){b.disable(true)}},doApplyRenderTpl:function(c,a){var d=a.$comp,b;if(!d.rendered){b=d.initRenderTpl();b.applyOut(a.renderData,c)}},doAutoRender:function(){var a=this;if(!a.rendered){if(a.floating){a.render(document.body)}else{a.render(Ext.isBoolean(a.autoRender)?Ext.getBody():a.autoRender)}}},doRenderContent:function(a,c){var b=c.$comp;if(b.html){Ext.DomHelper.generateMarkup(b.html,a);delete b.html}if(b.tpl){if(!b.tpl.isTemplate){b.tpl=new Ext.XTemplate(b.tpl)}if(b.data){b.tpl.applyOut(b.data,a);delete b.data}}},doRenderFramingDockedItems:function(a,c,d){var b=c.$comp;if(!b.rendered&&b.doRenderDockedItems){c.renderData.$skipDockedItems=true;b.doRenderDockedItems.call(this,a,c,d)}},finishRender:function(a){var g=this,b,h,e,d,i,c;if(!g.el||g.$pid){if(g.container){d=g.container.getById(g.id,true)}else{d=Ext.getDom(g.id)}if(!g.el){g.wrapPrimaryEl(d)}else{delete g.$pid;if(!g.el.dom){g.wrapPrimaryEl(g.el)}d.parentNode.insertBefore(g.el.dom,d);Ext.removeNode(d)}}else{if(!g.rendering){b=g.initRenderTpl();if(b){h=g.initRenderData();b.insertFirst(g.getTargetEl(),h)}}}if(!g.container){g.container=Ext.get(g.el.dom.parentNode)}if(g.ctCls){g.container.addCls(g.ctCls)}g.onRender(g.container,a);if(!g.overflowStyleSet){g.getTargetEl().setStyle(g.getOverflowStyle())}g.el.setVisibilityMode(Ext.Element[g.hideMode.toUpperCase()]);if(g.overCls){g.el.hover(g.addOverCls,g.removeOverCls,g)}if(g.hasListeners.render){g.fireEvent("render",g)}if(g.contentEl){i=Ext.baseCSSPrefix;c=i+"hide-";e=Ext.get(g.contentEl);e.removeCls([i+"hidden",c+"display",c+"offsets",c+"nosize"]);g.getTargetEl().appendChild(e.dom)}g.afterRender();if(g.hasListeners.afterrender){g.fireEvent("afterrender",g)}g.initEvents();if(g.hidden){g.el.hide()}},finishRenderChildren:function(){var a=this.getComponentLayout();a.finishRender()},getElConfig:function(){var h=this,j=h.autoEl,e=h.getFrameInfo(),a={tag:"div",tpl:e?h.initFramingTpl(e.table):h.initRenderTpl()},b,d,g,k,c;h.initStyles(h.protoEl);h.protoEl.writeTo(a);h.protoEl.flush();if(Ext.isString(j)){a.tag=j}else{Ext.apply(a,j)}a.id=h.id;if(a.tpl){if(e){d=h.frameElNames;g=d.length;c=h.id+"-frame1";h.frameGenId=1;a.tplData=Ext.apply({},{$comp:h,fgid:c,ui:h.ui,uiCls:h.uiCls,frameCls:h.frameCls,baseCls:h.baseCls,frameWidth:e.maxWidth,top:!!e.top,left:!!e.left,right:!!e.right,bottom:!!e.bottom,renderData:h.initRenderData()},h.getFramePositions(e));for(b=0;b table")[1].remove()}else{if(g){g.remove()}if(d){d.remove()}if(c){c.remove()}}}}else{if(e.frame){this.applyRenderSelectors()}}},getFrameInfo:function(){if(Ext.supports.CSS3BorderRadius||!this.frame){return false}var g=this,i=g.frameInfoCache,a=g.el||g.protoEl,j=a.dom?a.dom.className:a.classList.join(" "),d=i[j],e,c,h,b;if(d==null){e=Ext.fly(g.getStyleProxy(j),"frame-style-el");c=e.getStyle("background-position-x");h=e.getStyle("background-position-y");if(!c&&!h){b=e.getStyle("background-position").split(" ");c=b[0];h=b[1]}d=g.calculateFrame(c,h);if(d){a.setStyle("background-image","none")}i[j]=d}g.frame=!!d;g.frameSize=d;return d},calculateFrame:function(h,g){if(!(parseInt(h,10)>=1000000&&parseInt(g,10)>=1000000)){return false}var a=Math.max,b=parseInt(h.substr(3,2),10),e=parseInt(h.substr(5,2),10),c=parseInt(g.substr(3,2),10),i=parseInt(g.substr(5,2),10),d={table:h.substr(0,3)=="110",vertical:g.substr(0,3)=="110",top:a(b,e),right:a(e,c),bottom:a(i,c),left:a(b,i)};d.maxWidth=a(d.top,d.right,d.bottom,d.left);d.width=d.left+d.right;d.height=d.top+d.bottom;return d},getStyleProxy:function(b){var a=this.styleProxyEl||(Ext.AbstractComponent.prototype.styleProxyEl=Ext.resetElement.createChild({style:{position:"absolute",top:"-10000px"}},null,true));a.className=b;return a},getFramePositions:function(e){var h=this,i=e.maxWidth,j=h.dock,d,b,g,c,a;if(e.vertical){b="0 -"+(i*0)+"px";g="0 -"+(i*1)+"px";if(j&&j=="right"){b="right -"+(i*0)+"px";g="right -"+(i*1)+"px"}d={tl:"0 -"+(i*0)+"px",tr:"0 -"+(i*1)+"px",bl:"0 -"+(i*2)+"px",br:"0 -"+(i*3)+"px",ml:"-"+(i*1)+"px 0",mr:"right 0",tc:b,bc:g}}else{c="-"+(i*0)+"px 0";a="right 0";if(j&&j=="bottom"){c="left bottom";a="right bottom"}d={tl:"0 -"+(i*2)+"px",tr:"right -"+(i*3)+"px",bl:"0 -"+(i*4)+"px",br:"right -"+(i*5)+"px",ml:c,mr:a,tc:"0 -"+(i*0)+"px",bc:"0 -"+(i*1)+"px"}}return d},getFrameTpl:function(a){return this.getTpl(a?"frameTableTpl":"frameTpl")},frameInfoCache:{}});Ext.define("Ext.state.Provider",{mixins:{observable:"Ext.util.Observable"},prefix:"ext-",constructor:function(a){a=a||{};var b=this;Ext.apply(b,a);b.addEvents("statechange");b.state={};b.mixins.observable.constructor.call(b)},get:function(b,a){return typeof this.state[b]=="undefined"?a:this.state[b]},clear:function(a){var b=this;delete b.state[a];b.fireEvent("statechange",b,a,null)},set:function(a,c){var b=this;b.state[a]=c;b.fireEvent("statechange",b,a,c)},decodeValue:function(g){var c=this,k=/^(a|n|d|b|s|o|e)\:(.*)$/,b=k.exec(unescape(g)),h,d,a,j,e,i;if(!b||!b[1]){return}d=b[1];g=b[2];switch(d){case"e":return null;case"n":return parseFloat(g);case"d":return new Date(Date.parse(g));case"b":return(g=="1");case"a":h=[];if(g!=""){j=g.split("^");e=j.length;for(i=0;ii){c=d;a=true}if(e&&p>j){n=p;a=true}if(a){m=!Ext.isNumber(k.width);l=!Ext.isNumber(k.height);k.setSize(n,c);k.el.setSize(j,i);if(m){delete k.width}if(l){delete k.height}}if(e){o.width=p}if(g){o.height=d}}return k.mixins.animate.animate.apply(k,arguments)},onHide:function(){this.updateLayout({isRoot:false})},onShow:function(){this.updateLayout({isRoot:false})},constructPlugin:function(a){if(a.ptype&&typeof a.init!="function"){a.cmp=this;a=Ext.PluginManager.create(a)}else{if(typeof a=="string"){a=Ext.PluginManager.create({ptype:a,cmp:this})}}return a},constructPlugins:function(){var e=this,c,b=[],d,a;if(e.plugins){c=Ext.isArray(e.plugins)?e.plugins:[e.plugins];for(d=0,a=c.length;d=0;a--){if((g=d.getAt(a)).is(b)){return g}}}else{if(a){return d.getAt(--a)}}}}return null},previousNode:function(b,d){var j=this,h=j.ownerCt,a,g,e,c;if(d&&j.is(b)){return j}if(h){for(g=h.items.items,e=Ext.Array.indexOf(g,j)-1;e>-1;e--){c=g[e];if(c.query){a=c.query(b);a=a[a.length-1];if(a){return a}}if(c.is(b)){return c}}return h.previousNode(b,true)}return null},nextNode:function(d,j){var b=this,c=b.ownerCt,k,e,h,g,a;if(j&&b.is(d)){return b}if(c){for(e=c.items.items,g=Ext.Array.indexOf(e,b)+1,h=e.length;g=8){b=new XDomainRequest()}else{b=this.getXhrInstance()}return b},openRequest:function(c,a,d,g,b){var e=this.newRequest(c);if(g){e.open(a.method,a.url,d,g,b)}else{e.open(a.method,a.url,d)}if(c.withCredentials||this.withCredentials){e.withCredentials=true}return e},getXhrInstance:(function(){var b=[function(){return new XMLHttpRequest()},function(){return new ActiveXObject("MSXML2.XMLHTTP.3.0")},function(){return new ActiveXObject("MSXML2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}],c=0,a=b.length,g;for(;c=200&&a<300)||a==304,b=false;if(!c){switch(a){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:b=true;break}}return{success:c,isException:b}},createResponse:function(c){var i=c.xhr,a={},j=i.getAllResponseHeaders().replace(/\r\n/g,"\n").split("\n"),d=j.length,k,e,h,g,b;while(d--){k=j[d];e=k.indexOf(":");if(e>=0){h=k.substr(0,e).toLowerCase();if(k.charAt(e+1)==" "){++e}a[h]=k.substr(e+1)}}c.xhr=null;delete c.xhr;b={request:c,requestId:c.id,status:i.status,statusText:i.statusText,getResponseHeader:function(l){return a[l.toLowerCase()]},getAllResponseHeaders:function(){return a},responseText:i.responseText,responseXML:i.responseXML};i=null;return b},createException:function(a){return{request:a,requestId:a.id,status:a.aborted?-1:0,statusText:a.aborted?"transaction aborted":"communication failure",aborted:a.aborted,timedout:a.timedout}}});Ext.define("Ext.Ajax",{extend:"Ext.data.Connection",singleton:true,autoAbort:false});Ext.define("Ext.util.Floating",{uses:["Ext.Layer","Ext.window.Window"],focusOnToFront:true,shadow:"sides",constructor:function(b){var a=this;a.el=new Ext.Layer(Ext.apply({hideMode:a.hideMode,hidden:a.hidden,shadow:(typeof a.shadow!="undefined")?a.shadow:"sides",shadowOffset:a.shadowOffset,constrain:false,shim:(a.shim===false)?false:undefined},a.floating),b);a.floating=true;a.registerWithOwnerCt()},registerWithOwnerCt:function(){var a=this;if(a.zIndexParent){a.zIndexParent.unregisterFloatingItem(a)}a.zIndexParent=a.up("[floating]");a.setFloatParent(a.ownerCt);delete a.ownerCt;if(a.zIndexParent){a.zIndexParent.registerFloatingItem(a)}else{Ext.WindowManager.register(a)}},setFloatParent:function(b){var a=this;if(a.floatParent){a.mun(a.floatParent,{hide:a.onFloatParentHide,show:a.onFloatParentShow,scope:a})}a.floatParent=b;if(b){a.mon(a.floatParent,{hide:a.onFloatParentHide,show:a.onFloatParentShow,scope:a})}if((a.constrain||a.constrainHeader)&&!a.constrainTo){a.constrainTo=b?b.getTargetEl():a.container}},onAfterFloatLayout:function(){this.syncShadow()},onFloatParentHide:function(){var a=this;if(a.hideOnParentHide!==false&&a.isVisible()){a.hide();a.showOnParentShow=true}},onFloatParentShow:function(){if(this.showOnParentShow){delete this.showOnParentShow;this.show()}},setZIndex:function(a){var b=this;b.el.setZIndex(a);a+=10;if(b.floatingDescendants){a=Math.floor(b.floatingDescendants.setBase(a)/100)*100+10000}return a},doConstrain:function(b){var c=this,a=c.getConstrainVector(b),d;if(a){d=c.getPosition(!!c.floatParent);d[0]+=a[0];d[1]+=a[1];c.setPosition(d)}},getConstrainVector:function(a){var b=this;if(b.constrain||b.constrainHeader){a=a||(b.floatParent&&b.floatParent.getTargetEl())||b.container||b.el.getScopeParent();return(b.constrainHeader?b.header.el:b.el).getConstrainVector(a)}},alignTo:function(b,a,c){this.setPagePosition(this.el.getAlignToXY(b.el||b,a,c));return this},toFront:function(b){var a=this;if(a.zIndexParent&&a.bringParentToFront!==false){a.zIndexParent.toFront(true)}if(!Ext.isDefined(b)){b=!a.focusOnToFront}if(b){a.preventFocusOnActivate=true}if(a.zIndexManager.bringToFront(a)){if(!b){a.focus(false,true)}}delete a.preventFocusOnActivate;return a},setActive:function(b,c){var a=this;if(b){if(a.el.shadow&&!a.maximized){a.el.enableShadow(true)}if(a.modal&&!a.preventFocusOnActivate){a.focus(false,true)}a.fireEvent("activate",a)}else{if(a.isWindow&&(c&&c.isWindow)){a.el.disableShadow()}a.fireEvent("deactivate",a)}},toBack:function(){this.zIndexManager.sendToBack(this);return this},center:function(){var a=this,b;if(a.isVisible()){b=a.el.getAlignToXY(a.container,"c-c");a.setPagePosition(b)}else{a.needsCenter=true}return a},onFloatShow:function(){if(this.needsCenter){this.center()}delete this.needsCenter},syncShadow:function(){if(this.floating){this.el.sync(true)}},fitContainer:function(){var c=this,b=c.floatParent,a=b?b.getTargetEl():c.container;c.setSize(a.getViewSize(false));c.setPosition.apply(c,b?[0,0]:a.getXY())}});Ext.define("Ext.Component",{alias:["widget.component","widget.box"],extend:"Ext.AbstractComponent",requires:["Ext.util.DelayedTask"],uses:["Ext.Layer","Ext.resizer.Resizer","Ext.util.ComponentDragger"],mixins:{floating:"Ext.util.Floating"},statics:{DIRECTION_TOP:"top",DIRECTION_RIGHT:"right",DIRECTION_BOTTOM:"bottom",DIRECTION_LEFT:"left",VERTICAL_DIRECTION_Re:/^(?:top|bottom)$/,INVALID_ID_CHARS_Re:/[\.,\s]/g},resizeHandles:"all",floating:false,toFrontOnShow:true,hideMode:"display",bubbleEvents:[],monPropRe:/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,defaultComponentLayoutType:"autocomponent",constructor:function(a){var b=this;a=a||{};if(a.initialConfig){if(a.isAction){b.baseAction=a}a=a.initialConfig}else{if(a.tagName||a.dom||Ext.isString(a)){a={applyTo:a,id:a.id||a}}}b.callParent([a]);if(b.baseAction){b.baseAction.addComponent(b)}},initComponent:function(){var a=this;a.callParent();if(a.listeners){a.on(a.listeners);a.listeners=null}a.enableBubble(a.bubbleEvents);a.mons=[]},afterRender:function(){var a=this;a.callParent();if(!(a.x&&a.y)&&(a.pageX||a.pageY)){a.setPagePosition(a.pageX,a.pageY)}},setAutoScroll:function(a){var b=this;b.autoScroll=!!a;if(b.rendered){b.getTargetEl().setStyle(b.getOverflowStyle())}b.updateLayout();return b},setOverflowXY:function(b,a){var c=this,d=arguments.length;if(d){c.overflowX=b||"";if(d>1){c.overflowY=a||""}}if(c.rendered){c.getTargetEl().setStyle(c.getOverflowStyle())}c.updateLayout();return c},beforeRender:function(){var b=this,c=b.floating,a;if(c){b.addCls(Ext.baseCSSPrefix+"layer");a=c.cls;if(a){b.addCls(a)}}return b.callParent()},afterComponentLayout:function(){this.callParent(arguments);if(this.floating){this.onAfterFloatLayout()}},makeFloating:function(a){this.mixins.floating.constructor.call(this,a)},wrapPrimaryEl:function(a){if(this.floating){this.makeFloating(a)}else{this.callParent(arguments)}},initResizable:function(a){var b=this;a=Ext.apply({target:b,dynamic:false,constrainTo:b.constrainTo||(b.floatParent?b.floatParent.getTargetEl():null),handles:b.resizeHandles},a);a.target=b;b.resizer=new Ext.resizer.Resizer(a)},getDragEl:function(){return this.el},initDraggable:function(){var c=this,a=(c.resizer&&c.resizer.el!==c.el)?c.resizerComponent=new Ext.Component({el:c.resizer.el,rendered:true,container:c.container}):c,b=Ext.applyIf({el:a.getDragEl(),constrainTo:c.constrain?(c.constrainTo||(c.floatParent?c.floatParent.getTargetEl():c.el.getScopeParent())):undefined},c.draggable);if(c.constrain||c.constrainDelegate){b.constrain=c.constrain;b.constrainDelegate=c.constrainDelegate}c.dd=new Ext.util.ComponentDragger(a,b)},scrollBy:function(b,a,c){var d;if((d=this.getTargetEl())&&d.dom){d.scrollBy.apply(d,arguments)}},setLoading:function(c,d){var b=this,a;if(b.rendered){Ext.destroy(b.loadMask);b.loadMask=null;if(c!==false&&!b.collapsed){if(Ext.isObject(c)){a=Ext.apply({},c)}else{if(Ext.isString(c)){a={msg:c}}else{a={}}}if(d){Ext.applyIf(a,{useTargetEl:true})}b.loadMask=new Ext.LoadMask(b,a);b.loadMask.show()}}return b.loadMask},beforeSetPosition:function(){var b=this,c=b.callParent(arguments),a;if(c){a=b.adjustPosition(c.x,c.y);c.x=a.x;c.y=a.y}return c||null},afterSetPosition:function(b,a){this.onPosition(b,a);this.fireEvent("move",this,b,a)},showAt:function(a,d,b){var c=this;if(!c.rendered&&(c.autoRender||c.floating)){c.doAutoRender();c.hidden=true}if(c.floating){c.setPosition(a,d,b)}else{c.setPagePosition(a,d,b)}c.show()},setPagePosition:function(a,g,b){var c=this,d,e;if(Ext.isArray(a)){g=a[1];a=a[0]}c.pageX=a;c.pageY=g;if(c.floating){if(c.isContainedFloater()){e=c.floatParent.getTargetEl().getViewRegion();if(Ext.isNumber(a)&&Ext.isNumber(e.left)){a-=e.left}if(Ext.isNumber(g)&&Ext.isNumber(e.top)){g-=e.top}}else{d=c.el.translatePoints(a,g);a=d.left;g=d.top}c.setPosition(a,g,b)}else{d=c.el.translatePoints(a,g);c.setPosition(d.left,d.top,b)}return c},isContainedFloater:function(){return(this.floating&&this.floatParent)},getBox:function(b){var c=b?this.getPosition(b):this.el.getXY(),a=this.getSize();a.x=c[0];a.y=c[1];return a},updateBox:function(a){this.setSize(a.width,a.height);this.setPagePosition(a.x,a.y);return this},getOuterSize:function(){var a=this.el;return{width:a.getWidth()+a.getMargin("lr"),height:a.getHeight()+a.getMargin("tb")}},adjustPosition:function(a,d){var b=this,c;if(b.isContainedFloater()){c=b.floatParent.getTargetEl().getViewRegion();a+=c.left;d+=c.top}return{x:a,y:d}},getPosition:function(a){var c=this,b=c.el,e,d=c.isContainedFloater(),g;if((a===true)&&!d){return[b.getLocalX(),b.getLocalY()]}e=c.el.getXY();if((a===true)&&d){g=c.floatParent.getTargetEl().getViewRegion();e[0]-=g.left;e[1]-=g.top}return e},getId:function(){var a=this,b;if(!a.id){b=a.getXType();if(b){b=b.replace(Ext.Component.INVALID_ID_CHARS_Re,"-")}else{b=Ext.name.toLowerCase()+"-comp"}a.id=b+"-"+a.getAutoId()}return a.id},show:function(d,a,b){var c=this,e=c.rendered;if(e&&c.isVisible()){if(c.toFrontOnShow&&c.floating){c.toFront()}}else{if(c.fireEvent("beforeshow",c)!==false){c.hidden=false;if(!e&&(c.autoRender||c.floating)){c.doAutoRender();e=c.rendered}if(e){c.beforeShow();c.onShow.apply(c,arguments);c.afterShow.apply(c,arguments)}}else{c.onShowVeto()}}return c},onShowVeto:Ext.emptyFn,beforeShow:Ext.emptyFn,onShow:function(){var a=this;a.el.show();a.callParent(arguments);if(a.floating){if(a.maximized){a.fitContainer()}else{if(a.constrain){a.doConstrain()}}}},afterShow:function(h,b,e){var g=this,a,c,d;h=h||g.animateTarget;if(!g.ghost){h=null}if(h){h=h.el?h.el:Ext.get(h);c=g.el.getBox();a=h.getBox();g.el.addCls(Ext.baseCSSPrefix+"hide-offsets");d=g.ghost();d.el.stopAnimation();d.el.setX(-10000);d.el.animate({from:a,to:c,listeners:{afteranimate:function(){delete d.componentLayout.lastComponentSize;g.unghost();g.el.removeCls(Ext.baseCSSPrefix+"hide-offsets");g.onShowComplete(b,e)}}})}else{g.onShowComplete(b,e)}},onShowComplete:function(a,b){var c=this;if(c.floating){c.toFront();c.onFloatShow()}Ext.callback(a,b||c);c.fireEvent("show",c);delete c.hiddenByLayout},hide:function(){var a=this;a.showOnParentShow=false;if(!(a.rendered&&!a.isVisible())&&a.fireEvent("beforehide",a)!==false){a.hidden=true;if(a.rendered){a.onHide.apply(a,arguments)}}return a},onHide:function(g,a,d){var e=this,c,b;g=g||e.animateTarget;if(!e.ghost){g=null}if(g){g=g.el?g.el:Ext.get(g);c=e.ghost();c.el.stopAnimation();b=g.getBox();b.width+="px";b.height+="px";c.el.animate({to:b,listeners:{afteranimate:function(){delete c.componentLayout.lastComponentSize;c.el.hide();e.afterHide(a,d)}}})}e.el.hide();if(!g){e.afterHide(a,d)}},afterHide:function(a,b){var c=this;delete c.hiddenByLayout;Ext.AbstractComponent.prototype.onHide.call(this);Ext.callback(a,b||c);c.fireEvent("hide",c)},onDestroy:function(){var a=this;if(a.rendered){Ext.destroy(a.proxy,a.proxyWrap,a.resizer,a.resizerComponent)}delete a.focusTask;a.callParent()},deleteMembers:function(){var b=arguments,a=b.length,c=0;for(;c1){for(;c]*)\>)|(?:<\/tpl>)/g,actionsRe:/\s*(elif|elseif|if|for|exec|switch|case|eval)\s*\=\s*(?:(?:"([^"]*)")|(?:'([^']*)'))\s*/g,propRe:/prop=(?:(?:"([^"]*)")|(?:'([^']*)'))/,defaultRe:/^\s*default\s*$/,elseRe:/^\s*else\s*$/});Ext.define("Ext.XTemplateCompiler",{extend:"Ext.XTemplateParser",useEval:Ext.isGecko,useIndex:Ext.isIE6||Ext.isIE7,useFormat:true,propNameRe:/^[\w\d\$]*$/,compile:function(a){var c=this,b=c.generate(a);return c.useEval?c.evalTpl(b):(new Function("Ext",b))(Ext)},generate:function(a){var d=this,b="var fm=Ext.util.Format,ts=Object.prototype.toString;",c;d.maxLevel=0;d.body=["var c0=values, a0="+d.createArrayTest(0)+", p0=parent, n0=xcount, i0=xindex, v;\n"];if(d.definitions){if(typeof d.definitions==="string"){d.definitions=[d.definitions,b]}else{d.definitions.push(b)}}else{d.definitions=[b]}d.switches=[];d.parse(a);d.definitions.push((d.useEval?"$=":"return")+" function ("+d.fnArgs+") {",d.body.join(""),"}");c=d.definitions.join("\n");d.definitions.length=d.body.length=d.switches.length=0;delete d.definitions;delete d.body;delete d.switches;return c},doText:function(c){var b=this,a=b.body;c=c.replace(b.aposRe,"\\'").replace(b.newLineRe,"\\n");if(b.useIndex){a.push("out[out.length]='",c,"'\n")}else{a.push("out.push('",c,"')\n")}},doExpr:function(b){var a=this.body;a.push("if ((v="+b+")!==undefined) out");if(this.useIndex){a.push("[out.length]=v+''\n")}else{a.push(".push(v+'')\n")}},doTag:function(a){this.doExpr(this.parseTag(a))},doElse:function(){this.body.push("} else {\n")},doEval:function(a){this.body.push(a,"\n")},doIf:function(b,c){var a=this;if(b==="."){a.body.push("if (values) {\n")}else{if(a.propNameRe.test(b)){a.body.push("if (",a.parseTag(b),") {\n")}else{a.body.push("if (",a.addFn(b),a.callFn,") {\n")}}if(c.exec){a.doExec(c.exec)}},doElseIf:function(b,c){var a=this;if(b==="."){a.body.push("else if (values) {\n")}else{if(a.propNameRe.test(b)){a.body.push("} else if (",a.parseTag(b),") {\n")}else{a.body.push("} else if (",a.addFn(b),a.callFn,") {\n")}}if(c.exec){a.doExec(c.exec)}},doSwitch:function(b){var a=this;if(b==="."){a.body.push("switch (values) {\n")}else{if(a.propNameRe.test(b)){a.body.push("switch (",a.parseTag(b),") {\n")}else{a.body.push("switch (",a.addFn(b),a.callFn,") {\n")}}a.switches.push(0)},doCase:function(e){var d=this,c=Ext.isArray(e)?e:[e],g=d.switches.length-1,a,b;if(d.switches[g]){d.body.push("break;\n")}else{d.switches[g]++}for(b=0,g=c.length;b');c.scrollRangeFlags=e}}},finishRender:function(){var b=this,c,a;b.callParent();b.cacheElements();c=b.getRenderTarget();a=b.getLayoutItems();if(b.targetCls){b.getTarget().addCls(b.targetCls)}b.finishRenderItems(c,a)},notifyOwner:function(){this.owner.afterLayout(this)},getContainerSize:function(c,h){var d=c.targetContext,g=d.getFrameInfo(),k=d.getPaddingInfo(),j=0,l=0,a=c.state.overflowAdjust,e,i,b,m;if(!c.widthModel.shrinkWrap){++l;b=h?d.getDomProp("width"):d.getProp("width");e=(typeof b=="number");if(e){++j;b-=g.width+k.width;if(a){b-=a.width}}}if(!c.heightModel.shrinkWrap){++l;m=h?d.getDomProp("height"):d.getProp("height");i=(typeof m=="number");if(i){++j;m-=g.height+k.height;if(a){m-=a.height}}}return{width:b,height:m,needed:l,got:j,gotAll:j==l,gotWidth:e,gotHeight:i}},getLayoutItems:function(){var a=this.owner,b=a&&a.items;return(b&&b.items)||[]},getRenderData:function(){var a=this.owner;return{$comp:a,$layout:this,ownerId:a.id}},getRenderedItems:function(){var e=this,h=e.getRenderTarget(),a=e.getLayoutItems(),d=a.length,g=[],b,c;for(b=0;b'],calculate:function(b){var a=this,c;if(!b.hasDomProp("containerChildrenDone")){a.done=false}else{c=a.getContainerSize(b);if(!c.gotAll){a.done=false}a.calculateContentSize(b)}}});Ext.define("Ext.util.Filter",{anyMatch:false,exactMatch:false,caseSensitive:false,constructor:function(a){var b=this;Ext.apply(b,a);b.filter=b.filter||b.filterFn;if(b.filter===undefined){if(b.property===undefined||b.value===undefined){}else{b.filter=b.createFilterFn()}b.filterFn=b.filter}},createFilterFn:function(){var a=this,c=a.createValueMatcher(),b=a.property;return function(d){var e=a.getRoot.call(a,d)[b];return c===null?e===null:c.test(e)}},getRoot:function(b){var a=this.root;return a===undefined?b:b[a]},createValueMatcher:function(){var d=this,e=d.value,g=d.anyMatch,c=d.exactMatch,a=d.caseSensitive,b=Ext.String.escapeRegex;if(e===null){return e}if(!e.exec){e=String(e);if(g===true){e=b(e)}else{e="^"+b(e);if(c===true){e+="$"}}e=new RegExp(e,a?"":"i")}return e}});Ext.define("Ext.util.AbstractMixedCollection",{requires:["Ext.util.Filter"],mixins:{observable:"Ext.util.Observable"},isMixedCollection:true,generation:0,constructor:function(b,a){var c=this;c.items=[];c.map={};c.keys=[];c.length=0;c.allowFunctions=b===true;if(a){c.getKey=a}c.mixins.observable.constructor.call(c)},allowFunctions:false,add:function(b,e){var d=this,g=e,c=b,a;if(arguments.length==1){g=c;c=d.getKey(g)}if(typeof c!="undefined"&&c!==null){a=d.map[c];if(typeof a!="undefined"){return d.replace(c,g)}d.map[c]=g}d.generation++;d.length++;d.items.push(g);d.keys.push(c);if(d.hasListeners.add){d.fireEvent("add",d.length-1,g,c)}return g},getKey:function(a){return a.id},replace:function(c,e){var d=this,a,b;if(arguments.length==1){e=arguments[0];c=d.getKey(e)}a=d.map[c];if(typeof c=="undefined"||c===null||typeof a=="undefined"){return d.add(c,e)}d.generation++;b=d.indexOfKey(c);d.items[b]=e;d.map[c]=e;if(d.hasListeners.replace){d.fireEvent("replace",c,a,e)}return e},addAll:function(g){var e=this,d=0,b,a,c;if(arguments.length>1||Ext.isArray(g)){b=arguments.length>1?arguments:g;for(a=b.length;d=d.length){return d.add(c,g)}d.generation++;d.length++;Ext.Array.splice(d.items,a,0,g);if(typeof c!="undefined"&&c!==null){d.map[c]=g}Ext.Array.splice(d.keys,a,0,c);if(d.hasListeners.add){d.fireEvent("add",a,g,c)}return g},remove:function(a){this.generation++;return this.removeAt(this.indexOf(a))},removeAll:function(b){b=[].concat(b);var c,a=b.length;for(c=0;c=0){c.length--;d=c.items[a];Ext.Array.erase(c.items,a,1);b=c.keys[a];if(typeof b!="undefined"){delete c.map[b]}Ext.Array.erase(c.keys,a,1);if(c.hasListeners.remove){c.fireEvent("remove",d,b)}c.generation++;return d}return false},removeAtKey:function(a){return this.removeAt(this.indexOfKey(a))},getCount:function(){return this.length},indexOf:function(a){return Ext.Array.indexOf(this.items,a)},indexOfKey:function(a){return Ext.Array.indexOf(this.keys,a)},get:function(b){var d=this,a=d.map[b],c=a!==undefined?a:(typeof b=="number")?d.items[b]:undefined;return typeof c!="function"||d.allowFunctions?c:null},getAt:function(a){return this.items[a]},getByKey:function(a){return this.map[a]},contains:function(a){return typeof this.map[this.getKey(a)]!="undefined"},containsKey:function(a){return typeof this.map[a]!="undefined"},clear:function(){var a=this;a.length=0;a.items=[];a.keys=[];a.map={};a.generation++;if(a.hasListeners.clear){a.fireEvent("clear")}},first:function(){return this.items[0]},last:function(){return this.items[this.length-1]},sum:function(h,b,j,a){var c=this.extractValues(h,b),g=c.length,e=0,d;j=j||0;a=(a||a===0)?a:g-1;for(d=j;d<=a;d++){e+=c[d]}return e},collect:function(k,e,h){var l=this.extractValues(k,e),a=l.length,b={},c=[],j,g,d;for(d=0;d=a;d--){b[b.length]=c[d]}}return b},filter:function(d,c,g,a){var b=[],e;if(Ext.isString(d)){b.push(new Ext.util.Filter({property:d,value:c,anyMatch:g,caseSensitive:a}))}else{if(Ext.isArray(d)||d instanceof Ext.util.Filter){b=b.concat(d)}}e=function(h){var n=true,o=b.length,j,m,l,k;for(j=0;je?1:(g>1;h=d(e,b[c]);if(h>=0){i=c+1}else{if(h<0){a=c-1}}}return i},reorder:function(d){var h=this,b=h.items,c=0,g=b.length,a=[],e=[],i;h.suspendEvents();for(i in d){a[d[i]]=b[i]}for(c=0;ce?1:(g=0&&a[d].hidden;--d){}if((b=a[d])){e._setActiveChild(b,c);if(b.modal){return}}for(;d>=0;--d){b=a[d];if(b.isVisible()&&b.modal){e._showModalMask(b);return}}e._hideModalMask()},_showModalMask:function(a){var c=this,e=a.el.getStyle("zIndex")-4,b=a.floatParent?a.floatParent.getTargetEl():a.container,d=b.getBox();if(b.dom===document.body){d.height=Math.max(document.body.scrollHeight,Ext.dom.Element.getDocumentHeight());d.width=Math.max(document.body.scrollWidth,d.width)}if(!c.mask){c.mask=Ext.getBody().createChild({cls:Ext.baseCSSPrefix+"mask"});c.mask.setVisibilityMode(Ext.Element.DISPLAY);c.mask.on("click",c._onMaskClick,c)}c.mask.maskTarget=b;b.addCls(Ext.baseCSSPrefix+"body-masked");c.mask.setStyle("zIndex",e);c.mask.show();c.mask.setBox(d)},_hideModalMask:function(){var a=this.mask;if(a&&a.isVisible()){a.maskTarget.removeCls(Ext.baseCSSPrefix+"body-masked");a.maskTarget=undefined;a.hide()}},_onMaskClick:function(){if(this.front){this.front.focus()}},_onContainerResize:function(){var a=this.mask,b,c;if(a&&a.isVisible()){a.hide();b=a.maskTarget;if(b.dom===document.body){c={height:Math.max(document.body.scrollHeight,Ext.dom.Element.getDocumentHeight()),width:Math.max(document.body.scrollWidth,document.documentElement.clientWidth)}}else{c=b.getViewSize(true)}a.setSize(c);a.show()}},register:function(a){var b=this;if(a.zIndexManager){a.zIndexManager.unregister(a)}a.zIndexManager=b;b.list[a.id]=a;b.zIndexStack.push(a);a.on("hide",b.onComponentHide,b)},unregister:function(a){var b=this,c=b.list;delete a.zIndexManager;if(c&&c[a.id]){delete c[a.id];a.un("hide",b.onComponentHide);Ext.Array.remove(b.zIndexStack,a);b._activateLast()}},get:function(a){return a.isComponent?a:this.list[a]},bringToFront:function(b){var c=this,a=false,d=c.zIndexStack;b=c.get(b);if(b!==c.front){Ext.Array.remove(d,b);if(b.preventBringToFront){d.unshift(b)}else{d.push(b)}c.assignZIndices();a=true;this.front=b}if(a&&b.modal){c._showModalMask(b)}return a},sendToBack:function(a){var b=this;a=b.get(a);Ext.Array.remove(b.zIndexStack,a);b.zIndexStack.unshift(a);b.assignZIndices();this._activateLast();return a},hideAll:function(){var b=this.list,a,c;for(c in b){if(b.hasOwnProperty(c)){a=b[c];if(a.isComponent&&a.isVisible()){a.hide()}}}},hide:function(){var g=this,c=g.mask,e=0,b=g.zIndexStack,a=b.length,d;g.tempHidden=g.tempHidden||[];for(;e0;){b=a[c];if(b.isComponent&&e.call(d||b,b)===false){return}}},destroy:function(){var b=this,c=b.list,a,d;for(d in c){if(c.hasOwnProperty(d)){a=c[d];if(a.isComponent){a.destroy()}}}delete b.zIndexStack;delete b.list;delete b.container;delete b.targetEl}},function(){Ext.WindowManager=Ext.WindowMgr=new this()});Ext.define("Ext.container.AbstractContainer",{extend:"Ext.Component",requires:["Ext.util.MixedCollection","Ext.layout.container.Auto","Ext.ZIndexManager"],renderTpl:"{%this.renderContainer(out,values)%}",suspendLayout:false,autoDestroy:true,defaultType:"panel",detachOnRemove:true,isContainer:true,layoutCounter:0,baseCls:Ext.baseCSSPrefix+"container",bubbleEvents:["add","remove"],defaultLayoutType:"auto",initComponent:function(){var a=this;a.addEvents("afterlayout","beforeadd","beforeremove","add","remove");a.callParent();a.getLayout();a.initItems()},initItems:function(){var b=this,a=b.items;b.items=new Ext.util.AbstractMixedCollection(false,b.getComponentId);if(a){if(!Ext.isArray(a)){a=[a]}b.add(a)}},getFocusEl:function(){return this.getTargetEl()},finishRenderChildren:function(){this.callParent();var a=this.getLayout();if(a){a.finishRender()}},beforeRender:function(){var b=this,a=b.getLayout();b.callParent();if(!a.initialized){a.initLayout()}},setupRenderTpl:function(b){var a=this.getLayout();this.callParent(arguments);a.setupRenderTpl(b)},setLayout:function(b){var a=this.layout;if(a&&a.isLayout&&a!=b){a.setOwner(null)}this.layout=b;b.setOwner(this)},getLayout:function(){var a=this;if(!a.layout||!a.layout.isLayout){a.setLayout(Ext.layout.Layout.create(a.layout,a.self.prototype.layout||"autocontainer"))}return a.layout},doLayout:function(){this.updateLayout();return this},afterLayout:function(b){var a=this;++a.layoutCounter;if(a.hasListeners.afterlayout){a.fireEvent("afterlayout",a,b)}},prepareItems:function(b,d){if(Ext.isArray(b)){b=b.slice()}else{b=[b]}var g=this,c=0,a=b.length,e;for(;c "+a)[0]||null},nextChild:function(e,b){var c=this,a,d=c.items.indexOf(e);if(d!==-1){a=b?Ext.ComponentQuery(b,c.items.items.slice(d+1)):c.items.getAt(d+1);if(!a&&c.ownerCt){a=c.ownerCt.nextChild(c,b)}}return a},prevChild:function(e,b){var c=this,a,d=c.items.indexOf(e);if(d!==-1){a=b?Ext.ComponentQuery(b,c.items.items.slice(d+1)):c.items.getAt(d+1);if(!a&&c.ownerCt){a=c.ownerCt.nextChild(c,b)}}return a},down:function(a){return this.query(a)[0]||null},enable:function(){this.callParent(arguments);var d=this.getChildItemsToDisable(),c=d.length,b,a;for(a=0;a=d){h=0}else{if(h<0){h=d-1}}if(h===e){return[]}if((k=g[h]).isFocusable()){return[k]}}return[]},prevFocus:function(e,d){return this.nextFocus(e,d,-1)},root:function(e){var d=e.length,h=[],g=0,j;for(;ge.el.getZIndex()});return d.concat(b)},initDOM:function(c){var g=this,b=g.focusFrameCls,e=Ext.ComponentQuery.query("{getFocusEl()}:not([focusListenerAdded])"),d=0,a=e.length;if(!Ext.isReady){return Ext.onReady(g.initDOM,g)}for(;d:focusable",a)[0]:a;if(d){d.focus()}else{if(Ext.isFunction(a.onClick)){g.button=0;a.onClick(g);if(a.isVisible(true)){a.focus()}else{c.navigateOut()}}}}},navigateOut:function(c){var b=this,a;if(!b.focusedCmp||!(a=b.focusedCmp.up(":focusable"))){b.focusEl.focus()}else{a.focus()}return true},navigateSiblings:function(i,b,o){var j=this,a=b||j,p=i.getKey(),g=Ext.EventObject,k=i.shiftKey||p==g.LEFT||p==g.UP,c=p==g.LEFT||p==g.RIGHT||p==g.UP||p==g.DOWN,h=k?"prev":"next",n,d,m,l;m=(a.focusedCmp&&a.focusedCmp.comp)||a.focusedCmp;if(!m&&!o){return true}if(c&&j.isWhitelisted(m)){return true}if(!m||m.is(":root")){l=j.getRootComponents()}else{o=o||m.up();if(o){l=o.getRefItems()}}if(l){n=m?Ext.Array.indexOf(l,m):-1;d=Ext.ComponentQuery.query(":"+h+"Focus("+n+")",l)[0];if(d&&m!==d){d.focus();return d}}},onComponentBlur:function(b,c){var a=this;if(a.focusedCmp===b){a.previousFocusedCmp=b;delete a.focusedCmp}if(a.focusFrame){a.focusFrame.hide()}},onComponentFocus:function(d,g){var c=this,a=c.focusChain,b;if(!d.isFocusable()){c.clearComponent(d);if(a[d.id]){return}b=d.up();if(b){a[d.id]=true;b.focus()}return}c.focusChain={};c.focusTask.delay(10,null,null,[d,d.getFocusEl()])},handleComponentFocus:function(m,i){var k=this,p,a,d,h,o,b,l,e,g,c,n,j;if(k.fireEvent("beforecomponentfocus",k,m,k.previousFocusedCmp)===false){k.clearComponent(m);return}k.focusedCmp=m;if(k.shouldShowFocusFrame(m)){p="."+k.focusFrameCls+"-";a=k.focusFrame;h=i.getPageBox();o=h.top;b=h.left;l=h.width;e=h.height;g=a.child(p+"top");c=a.child(p+"bottom");n=a.child(p+"left");j=a.child(p+"right");g.setWidth(l).setLeftTop(b,o);c.setWidth(l).setLeftTop(b,o+e-2);n.setHeight(e-2).setLeftTop(b,o+2);j.setHeight(e-2).setLeftTop(b+l-2,o+2);a.show()}k.fireEvent("componentfocus",k,m,k.previousFocusedCmp)},onComponentHide:function(e){var d=this,b=false,a=d.focusedCmp,c;if(a){b=e.hasFocus||(e.isContainer&&e.isAncestor(d.focusedCmp))}d.clearComponent(e);if(b&&(c=e.up(":focusable"))){c.focus()}else{d.focusEl.focus()}},onComponentDestroy:function(){},removeDOM:function(){var a=this;if(a.enabled||a.subscribers.length){return}Ext.destroy(a.focusFrame);delete a.focusEl;delete a.focusFrame},removeXTypeFromWhitelist:function(b){var a=this;if(Ext.isArray(b)){Ext.Array.forEach(b,a.removeXTypeFromWhitelist,a);return}Ext.Array.remove(a.whitelist,b)},setupSubscriberKeys:function(a,g){var e=this,d=a.getFocusEl(),c=g.scope,b={backspace:e.focusLast,enter:e.navigateIn,esc:e.navigateOut,scope:e},h=function(i){if(e.focusedCmp===a){return e.navigateSiblings(i,e,a)}else{return e.navigateSiblings(i)}};Ext.iterate(g,function(j,i){b[j]=function(l){var k=h(l);if(Ext.isFunction(i)&&i.call(c||a,l,k)===true){return true}return k}},e);return new Ext.util.KeyNav(d,b)},shouldShowFocusFrame:function(c){var b=this,a=b.options||{},e=c.getFocusEl(),d=Ext.getDom(e).tagName;if(!b.focusFrame||!c){return false}if(a.focusFrame){return true}if(b.focusData[c.id].focusFrame){return true}return false}});Ext.define("Ext.Img",{extend:"Ext.Component",alias:["widget.image","widget.imagecomponent"],autoEl:"img",src:"",alt:"",imgCls:"",getElConfig:function(){var c=this,b=c.callParent(),a;if(c.autoEl=="img"){a=b}else{b.cn=[a={tag:"img",id:c.id+"-img"}]}if(c.imgCls){a.cls=(a.cls?a.cls+" ":"")+c.imgCls}a.src=c.src||Ext.BLANK_IMAGE_URL;if(c.alt){a.alt=c.alt}return b},onRender:function(){var b=this,a;b.callParent(arguments);a=b.el;b.imgEl=(b.autoEl=="img")?a:a.getById(b.id+"-img")},onDestroy:function(){Ext.destroy(this.imgEl);this.imgEl=null;this.callParent()},setSrc:function(c){var a=this,b=a.imgEl;a.src=c;if(b){b.dom.src=c||Ext.BLANK_IMAGE_URL}}});Ext.define("Ext.Layer",{extend:"Ext.Element",uses:["Ext.Shadow"],statics:{shims:[]},isLayer:true,constructor:function(b,a){b=b||{};var c=this,d=Ext.DomHelper,g=b.parentEl,e=g?Ext.getDom(g):document.body,h=b.hideMode;if(a){c.dom=Ext.getDom(a)}if(!c.dom){c.dom=d.append(e,b.dh||{tag:"div",cls:Ext.baseCSSPrefix+"layer"})}else{c.addCls(Ext.baseCSSPrefix+"layer");if(!c.dom.parentNode){e.appendChild(c.dom)}}if(b.id){c.id=c.dom.id=b.id}else{c.id=Ext.id(c.dom)}Ext.Element.addToCache(c);if(b.cls){c.addCls(b.cls)}c.constrain=b.constrain!==false;if(h){c.setVisibilityMode(Ext.Element[h.toUpperCase()]);if(c.visibilityMode==Ext.Element.ASCLASS){c.visibilityCls=b.visibilityCls}}else{if(b.useDisplay){c.setVisibilityMode(Ext.Element.DISPLAY)}else{c.setVisibilityMode(Ext.Element.VISIBILITY)}}if(b.shadow){c.shadowOffset=b.shadowOffset||4;c.shadow=new Ext.Shadow({offset:c.shadowOffset,mode:b.shadow});c.disableShadow()}else{c.shadowOffset=0}c.useShim=b.shim!==false&&Ext.useShims;if(b.hidden===true){c.hide()}else{c.show()}},getZIndex:function(){return parseInt((this.getShim()||this).getStyle("z-index"),10)},getShim:function(){var b=this,c,a;if(!b.useShim){return null}if(!b.shim){c=b.self.shims.shift();if(!c){c=b.createShim();c.enableDisplayMode("block");c.hide()}a=b.dom.parentNode;if(c.dom.parentNode!=a){a.insertBefore(c.dom,b.dom)}b.shim=c}return b.shim},hideShim:function(){var a=this;if(a.shim){a.shim.setDisplayed(false);a.self.shims.push(a.shim);delete a.shim}},disableShadow:function(){var a=this;if(a.shadow&&!a.shadowDisabled){a.shadowDisabled=true;a.shadow.hide();a.lastShadowOffset=a.shadowOffset;a.shadowOffset=0}},enableShadow:function(a){var b=this;if(b.shadow&&b.shadowDisabled){b.shadowDisabled=false;b.shadowOffset=b.lastShadowOffset;delete b.lastShadowOffset;if(a){b.sync(true)}}},sync:function(b){var j=this,n=j.shadow,i,e,a,d,c,o,m,g,k;if(!j.updating&&j.isVisible()&&(n||j.useShim)){d=j.getShim();c=j.getLocalX();o=j.getLocalY();m=j.dom.offsetWidth;g=j.dom.offsetHeight;if(n&&!j.shadowDisabled){if(b&&!n.isVisible()){n.show(j)}else{n.realign(c,o,m,g)}if(d){k=d.getStyle("z-index");if(k>j.zindex){j.shim.setStyle("z-index",j.zindex-2)}d.show();if(n.isVisible()){i=n.el.getXY();e=d.dom.style;a=n.el.getSize();if(Ext.supports.CSS3BoxShadow){a.height+=6;a.width+=4;i[0]-=2;i[1]-=4}e.left=(i[0])+"px";e.top=(i[1])+"px";e.width=(a.width)+"px";e.height=(a.height)+"px"}else{d.setSize(m,g);d.setLeftTop(c,o)}}}else{if(d){k=d.getStyle("z-index");if(k>j.zindex){j.shim.setStyle("z-index",j.zindex-2)}d.show();d.setSize(m,g);d.setLeftTop(c,o)}}}return j},remove:function(){this.hideUnders();this.callParent()},beginUpdate:function(){this.updating=true},endUpdate:function(){this.updating=false;this.sync(true)},hideUnders:function(){if(this.shadow){this.shadow.hide()}this.hideShim()},constrainXY:function(){if(this.constrain){var g=Ext.Element.getViewWidth(),b=Ext.Element.getViewHeight(),l=Ext.getDoc().getScroll(),k=this.getXY(),i=k[0],e=k[1],a=this.shadowOffset,j=this.dom.offsetWidth+a,c=this.dom.offsetHeight+a,d=false;if((i+j)>g+l.left){i=g-j-a;d=true}if((e+c)>b+l.top){e=b-c-a;d=true}if(i',floating:{shadow:"frame"},focusOnToFront:false,bringParentToFront:false,constructor:function(a,b){var c=this;if(!a.isComponent){a=Ext.get(a);this.isElement=true}c.ownerCt=a;if(!this.isElement){c.bindComponent(a)}c.callParent([b]);if(c.store){c.bindStore(c.store,true)}},bindComponent:function(a){var c=this,b={scope:this,resize:c.sizeMask,added:c.onComponentAdded,removed:c.onComponentRemoved},d=Ext.container.Container.hierarchyEventSource;if(a.floating){b.move=c.sizeMask;c.activeOwner=a}else{if(a.ownerCt){c.onComponentAdded(a.ownerCt)}else{c.preventBringToFront=true}}c.mon(a,b);c.mon(d,{show:c.onContainerShow,hide:c.onContainerHide,expand:c.onContainerExpand,collapse:c.onContainerCollapse,scope:c})},onComponentAdded:function(a){var b=this;delete b.activeOwner;b.floatParent=a;if(!a.floating){a=a.up("[floating]")}if(a){b.activeOwner=a;b.mon(a,"move",b.sizeMask,b)}a=b.floatParent.ownerCt;if(b.rendered&&b.isVisible()&&a){b.floatOwner=a;b.mon(a,"afterlayout",b.sizeMask,b,{single:true})}},onComponentRemoved:function(a){var c=this,d=c.activeOwner,b=c.floatOwner;if(d){c.mun(d,"move",c.sizeMask,c)}if(b){c.mun(b,"afterlayout",c.sizeMask,c)}delete c.activeOwner;delete c.floatOwner},afterRender:function(){this.callParent(arguments);this.container=this.floatParent.getContentTarget()},onContainerShow:function(a){if(this.isActiveContainer(a)){this.onComponentShow()}},onContainerHide:function(a){if(this.isActiveContainer(a)){this.onComponentHide()}},onContainerExpand:function(a){if(this.isActiveContainer(a)){this.onComponentShow()}},onContainerCollapse:function(a){if(this.isActiveContainer(a)){this.onComponentHide()}},isActiveContainer:function(a){return this.isDescendantOf(a)},onComponentHide:function(){var a=this;if(a.rendered&&a.isVisible()){a.hide();a.showNext=true}},onComponentShow:function(){if(this.showNext){this.show()}delete this.showNext},sizeMask:function(){var a=this,b;if(a.rendered&&a.isVisible()){a.center();b=a.getMaskTarget();a.getMaskEl().show().setSize(b.getSize()).alignTo(b,"tl-tl")}},bindStore:function(a,b){var c=this;c.mixins.bindable.bindStore.apply(c,arguments);a=c.store;if(a&&a.isLoading()){c.onBeforeLoad()}},getStoreListeners:function(){return{beforeload:this.onBeforeLoad,load:this.onLoad,exception:this.onLoad,cachemiss:this.onBeforeLoad,cachefilled:this.onLoad}},onDisable:function(){this.callParent(arguments);if(this.loading){this.onLoad()}},getOwner:function(){return this.ownerCt||this.floatParent},getMaskTarget:function(){var a=this.getOwner();return this.useTargetEl?a.getTargetEl():a.getEl()},onBeforeLoad:function(){var c=this,a=c.getOwner(),b;if(!c.disabled){c.loading=true;if(a.componentLayoutCounter){c.maybeShow()}else{b=a.afterComponentLayout;a.afterComponentLayout=function(){a.afterComponentLayout=b;b.apply(a,arguments);c.maybeShow()}}}},maybeShow:function(){var b=this,a=b.getOwner();if(!a.isVisible(true)){b.showNext=true}else{if(b.loading&&a.rendered){b.show()}}},getMaskEl:function(){var a=this;return a.maskEl||(a.maskEl=a.el.insertSibling({cls:a.maskCls,style:{zIndex:a.el.getStyle("zIndex")-2}},"before"))},onShow:function(){var b=this,a=b.msgEl;b.callParent(arguments);b.loading=true;if(b.useMsg){a.show().update(b.msg)}else{a.parent().hide()}},hide:function(){if(this.isElement){this.ownerCt.unmask();this.fireEvent("hide",this);return}delete this.showNext;return this.callParent(arguments)},onHide:function(){this.callParent();this.getMaskEl().hide()},show:function(){if(this.isElement){this.ownerCt.mask(this.useMsg?this.msg:"",this.msgCls);this.fireEvent("show",this);return}return this.callParent(arguments)},afterShow:function(){this.callParent(arguments);this.sizeMask()},setZIndex:function(b){var c=this,a=c.activeOwner;if(a){b=parseInt(a.el.getStyle("zIndex"),10)+1}c.getMaskEl().setStyle("zIndex",b-1);return c.mixins.floating.setZIndex.apply(c,arguments)},onLoad:function(){this.loading=false;this.hide()},onDestroy:function(){var a=this;if(a.isElement){a.ownerCt.unmask()}Ext.destroy(a.maskEl);a.callParent()}});Ext.define("Ext.data.association.Association",{alternateClassName:"Ext.data.Association",primaryKey:"id",defaultReaderType:"json",isAssociation:true,initialConfig:null,statics:{AUTO_ID:1000,create:function(a){if(Ext.isString(a)){a={type:a}}switch(a.type){case"belongsTo":return new Ext.data.association.BelongsTo(a);case"hasMany":return new Ext.data.association.HasMany(a);case"hasOne":return new Ext.data.association.HasOne(a);default:}return a}},constructor:function(a){Ext.apply(this,a);var d=this,b=Ext.ModelManager.types,c=a.ownerModel,g=a.associatedModel,e=b[c],h=b[g];d.initialConfig=a;d.ownerModel=e;d.associatedModel=h;Ext.applyIf(d,{ownerName:c,associatedName:g});d.associationId="association"+(++d.statics().AUTO_ID)},getReader:function(){var c=this,a=c.reader,b=c.associatedModel;if(a){if(Ext.isString(a)){a={type:a}}if(a.isReader){a.setModel(b)}else{Ext.applyIf(a,{model:b,type:c.defaultReaderType})}c.reader=Ext.createByAlias("reader."+a.type,a)}return c.reader||null}});Ext.define("Ext.ModelManager",{extend:"Ext.AbstractManager",alternateClassName:"Ext.ModelMgr",requires:["Ext.data.association.Association"],singleton:true,typeName:"mtype",associationStack:[],registerType:function(c,b){var d=b.prototype,a;if(d&&d.isModel){a=b}else{if(!b.extend){b.extend="Ext.data.Model"}a=Ext.define(c,b)}this.types[c]=a;return a},onModelDefined:function(c){var a=this.associationStack,g=a.length,e=[],b,d,h;for(d=0;d','
{text}
',"",'
','','
',"
{text}
","
","
","
"],componentLayout:"progressbar",initComponent:function(){this.callParent();this.addEvents("update")},initRenderData:function(){var a=this;return Ext.apply(a.callParent(),{internalText:!a.hasOwnProperty("textEl"),text:a.text||" ",percentage:a.value?a.value*100:0})},onRender:function(){var a=this;a.callParent(arguments);if(a.textEl){a.textEl=Ext.get(a.textEl);a.updateText(a.text)}else{a.textEl=a.el.select("."+a.baseCls+"-text")}},updateProgress:function(d,e,a){var c=this,b=c.value;c.value=d||0;if(e){c.updateText(e)}if(c.rendered&&!c.isDestroyed){if(a===true||(a!==false&&c.animate)){c.bar.stopAnimation();c.bar.animate(Ext.apply({from:{width:(b*100)+"%"},to:{width:(c.value*100)+"%"}},c.animate))}else{c.bar.setStyle("width",(c.value*100)+"%")}}c.fireEvent("update",c,c.value,e);return c},updateText:function(b){var a=this;a.text=b;if(a.rendered){a.textEl.update(a.text)}return a},applyText:function(a){this.updateText(a)},getText:function(){return this.text},wait:function(c){var b=this,a;if(!b.waitTimer){a=b;c=c||{};b.updateText(c.text);b.waitTimer=Ext.TaskManager.start({run:function(d){var e=c.increment||10;d-=1;b.updateProgress(((((d+e)%e)+1)*(100/e))*0.01,null,c.animate)},interval:c.interval||1000,duration:c.duration,onStop:function(){if(c.fn){c.fn.apply(c.scope||b)}b.reset()},scope:a})}return b},isWaiting:function(){return this.waitTimer!==null},reset:function(a){var b=this;b.updateProgress(0);b.clearTimer();if(a===true){b.hide()}return b},clearTimer:function(){var a=this;if(a.waitTimer){a.waitTimer.onStop=null;Ext.TaskManager.stop(a.waitTimer);a.waitTimer=null}},onDestroy:function(){var a=this;a.clearTimer();if(a.rendered){if(a.textEl.isComposite){a.textEl.clear()}Ext.destroyMembers(a,"textEl","progressBar")}a.callParent()}});Ext.define("Ext.ShadowPool",{singleton:true,requires:["Ext.DomHelper"],markup:(function(){return Ext.String.format('',Ext.baseCSSPrefix,Ext.isIE&&!Ext.supports.CSS3BoxShadow?"ie":"css")}()),shadows:[],pull:function(){var a=this.shadows.shift();if(!a){a=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,this.markup));a.autoBoxAdjust=false}return a},push:function(a){this.shadows.push(a)},reset:function(){var c=[].concat(this.shadows),b,a=c.length;for(b=0;b]+>/gi,asText:function(a){return String(a).replace(this.stripTagsRE,"")},asUCText:function(a){return String(a).toUpperCase().replace(this.stripTagsRE,"")},asUCString:function(a){return String(a).toUpperCase()},asDate:function(a){if(!a){return 0}if(Ext.isDate(a)){return a.getTime()}return Date.parse(String(a))},asFloat:function(a){var b=parseFloat(String(a).replace(/,/g,""));return isNaN(b)?0:b},asInt:function(a){var b=parseInt(String(a).replace(/,/g,""),10);return isNaN(b)?0:b}});Ext.define("Ext.data.Types",{singleton:true,requires:["Ext.data.SortTypes"]},function(){var a=Ext.data.SortTypes;Ext.apply(Ext.data.Types,{stripRe:/[\$,%]/g,AUTO:{sortType:a.none,type:"auto"},STRING:{convert:function(c){var b=this.useNull?null:"";return(c===undefined||c===null)?b:String(c)},sortType:a.asUCString,type:"string"},INT:{convert:function(b){return b!==undefined&&b!==null&&b!==""?parseInt(String(b).replace(Ext.data.Types.stripRe,""),10):(this.useNull?null:0)},sortType:a.none,type:"int"},FLOAT:{convert:function(b){return b!==undefined&&b!==null&&b!==""?parseFloat(String(b).replace(Ext.data.Types.stripRe,""),10):(this.useNull?null:0)},sortType:a.none,type:"float"},BOOL:{convert:function(b){if(this.useNull&&(b===undefined||b===null||b==="")){return null}return b===true||b==="true"||b==1},sortType:a.none,type:"bool"},DATE:{convert:function(c){var d=this.dateFormat,b;if(!c){return null}if(Ext.isDate(c)){return c}if(d){if(d=="timestamp"){return new Date(c*1000)}if(d=="time"){return new Date(parseInt(c,10))}return Ext.Date.parse(c,d)}b=Date.parse(c);return b?new Date(b):null},sortType:a.asDate,type:"date"}});Ext.apply(Ext.data.Types,{BOOLEAN:this.BOOL,INTEGER:this.INT,NUMBER:this.FLOAT})});Ext.define("Ext.data.Field",{requires:["Ext.data.Types","Ext.data.SortTypes"],alias:"data.field",isField:true,constructor:function(b){var d=this,c=Ext.data.Types,a;if(Ext.isString(b)){b={name:b}}Ext.apply(d,b);a=d.sortType;if(d.type){if(Ext.isString(d.type)){d.type=c[d.type.toUpperCase()]||c.AUTO}}else{d.type=c.AUTO}if(Ext.isString(a)){d.sortType=Ext.data.SortTypes[a]}else{if(Ext.isEmpty(a)){d.sortType=d.type.sortType}}if(!b.hasOwnProperty("convert")){d.convert=d.type.convert}else{if(!d.convert&&d.type.convert&&!b.hasOwnProperty("defaultValue")){d.defaultValue=d.type.convert(d.defaultValue)}}if(b.convert){d.hasCustomConvert=true}},dateFormat:null,useNull:false,defaultValue:"",mapping:null,sortType:null,sortDir:"ASC",allowBlank:true,persist:true});Ext.define("Ext.data.Errors",{extend:"Ext.util.MixedCollection",isValid:function(){return this.length===0},getByField:function(e){var d=[],a,c,b;for(b=0;b1){if(h.action=="update"||a[0].clientIdProperty){j=new Ext.util.MixedCollection();j.addAll(k);for(g=a.length;g--;){b=a[g];c=j.findBy(h.matchClientRec,b);b.copyFrom(c)}}else{for(d=0,e=a.length;da)){return false}else{return true}},email:function(b,a){return Ext.data.validations.emailRe.test(a)},format:function(a,b){return !!(a.matcher&&a.matcher.test(b))},inclusion:function(a,b){return a.list&&Ext.Array.indexOf(a.list,b)!=-1},exclusion:function(a,b){return a.list&&Ext.Array.indexOf(a.list,b)==-1}});Ext.define("Ext.data.Model",{alternateClassName:"Ext.data.Record",mixins:{observable:"Ext.util.Observable"},requires:["Ext.ModelManager","Ext.data.IdGenerator","Ext.data.Field","Ext.data.Errors","Ext.data.Operation","Ext.data.validations","Ext.util.MixedCollection"],compareConvertFields:function(a,d){var c=a.convert&&a.type&&a.convert!==a.type.convert,b=d.convert&&d.type&&d.convert!==d.type.convert;if(c&&!b){return 1}if(!c&&b){return -1}return 0},itemNameFn:function(a){return a.name},onClassExtended:function(b,c,a){var d=a.onBeforeCreated;a.onBeforeCreated=function(g,D){var C=this,E=Ext.getClassName(g),r=g.prototype,x=g.prototype.superclass,j=D.validations||[],t=D.fields||[],h,m=D.associations||[],e=function(G,I){var H=0,F,J;if(G){G=Ext.Array.from(G);for(F=G.length;H0;delete b.modifiedSave;delete b.dataSave;delete b.dirtySave;if(d&&a!==true){b.afterEdit(c)}}},getModifiedFieldNames:function(){var d=this,c=d.dataSave,e=d[d.persistenceProperty],a=[],b;for(b in e){if(e.hasOwnProperty(b)){if(!d.isEqual(e[b],c[b])){a.push(b)}}}return a},getChanges:function(){var a=this.modified,b={},c;for(c in a){if(a.hasOwnProperty(c)){b[c]=this.get(c)}}return b},isModified:function(a){return this.modified.hasOwnProperty(a)},setDirty:function(){var c=this,a=c.fields.items,g=a.length,e,b,d;c.dirty=true;for(d=0;d0){b=p.data.items;h=b.length;for(r=0;ra.maxSize){i=j.constrainedMax;d=a.maxSize}else{d=m}}}if(b){m=h.size;if(mh.maxSize){g=j.constrainedMax;k=h.maxSize}else{if(!e.collapsedVert&&!this.owner.manageHeight){c=false;e.bodyContext.setProp("margin-bottom",h.dockedPixelsEnd)}k=m}}}if(i||g){if(i&&g&&i.constrainedMax&&g.constrainedMin){e.invalidate({widthModel:i});return false}if(!e.widthModel.calculatedFromShrinkWrap&&!e.heightModel.calculatedFromShrinkWrap){e.invalidate({widthModel:i,heightModel:g});return false}}if(l){e.setWidth(d);if(i){e.widthModel=i}}if(b){e.setHeight(k,c);if(g){e.heightModel=g}}return true},finishPositions:function(d,a,h){var j=d.dockedItems,c=j.length,g=a.delta,e=h.delta,i,b;for(i=0;i/,constructor:function(){this.callParent(arguments);this.hackWidth=Ext.isIE&&(!Ext.isStrict||Ext.isIE6||Ext.isIE7||Ext.isIE8);this.heightIncludesPadding=Ext.isIE6&&Ext.isStrict},beginLayout:function(a){this.callParent(arguments);this.cacheTargetInfo(a)},beginLayoutCycle:function(e){var c=this,d="",a=c.owner,b=a.btnEl,i=a.btnInnerEl,g=a.text,h;c.callParent(arguments);i.setStyle("overflow",d);if(!e.widthModel.natural){a.el.setStyle("width",d)}h=e.heightModel.shrinkWrap&&g&&c.htmlRE.test(g);b.setStyle("width",d);b.setStyle("height",h?"auto":d);i.setStyle("width",d);i.setStyle("height",h?"auto":d);i.setStyle("line-height",h?"normal":d);i.setStyle("padding-top",d);a.btnIconEl.setStyle("width",d)},calculateOwnerHeightFromContentHeight:function(b,a){return a},calculateOwnerWidthFromContentWidth:function(b,a){return a},measureContentWidth:function(c){var i=this,b=i.owner,g=b.btnEl,d=b.btnInnerEl,l=b.text,m,j,h,a,k,e;if(b.text&&i.hackWidth&&g){m=i.btnFrameWidth;if(l.indexOf(">")===-1){l=l.replace(/=0){h.setProp("line-height",e-b+"px")}if(l&&j.htmlRE.test(l)){h.setProp("line-height","normal");d.setStyle("line-height","normal");k=Ext.util.TextMetrics.measure(d,l).height;n=Math.floor(Math.max(e-b-k,0)/2);h.setProp("padding-top",j.btnFrameTop+n);h.setHeight(e-(j.heightIncludesPadding?n:0))}},publishInnerWidth:function(g,c){var e=this,h=Ext.isNumber,a=g.getEl("btnEl"),b=g.getEl("btnInnerEl"),d=h(c)?c-e.adjWidth:c;a.setWidth(d);b.setWidth(d)},clearTargetCache:function(){delete this.adjWidth},cacheTargetInfo:function(b){var g=this,a=g.owner,d=a.scale,i,e,j,c,h;if(!("adjWidth" in g)||g.lastScale!==d){if(g.lastScale){a.btnInnerEl.setStyle("line-height","")}g.lastScale=d;i=b.getPaddingInfo();e=b.getFrameInfo();j=b.getEl("btnWrap").getPaddingInfo();c=b.getEl("btnInnerEl");h=c.getPaddingInfo();Ext.apply(g,{adjWidth:j.width+e.width+i.width,adjHeight:j.height+e.height+i.height,btnFrameWidth:h.width,btnFrameHeight:h.height,btnFrameTop:h.top,minTextHeight:parseInt(c.getStyle("line-height"),10)})}g.callParent(arguments)},finishedLayout:function(){var a=this.owner;this.callParent(arguments);if(Ext.isWebKit){a.el.dom.offsetWidth}}});Ext.define("Ext.menu.Manager",{singleton:true,requires:["Ext.util.MixedCollection","Ext.util.KeyMap"],alternateClassName:"Ext.menu.MenuMgr",uses:["Ext.menu.Menu"],menus:{},groups:{},attached:false,lastShow:new Date(),init:function(){var a=this;a.active=new Ext.util.MixedCollection();Ext.getDoc().addKeyListener(27,function(){if(a.active.length>0){a.hideAll()}},a)},hideAll:function(){var c=this.active,e,b,a,d;if(c&&c.length>0){e=c.clone();b=e.items;d=b.length;for(a=0;a50&&c.length>0&&!d.getTarget("."+Ext.baseCSSPrefix+"menu")){b.hideAll()}},register:function(b){var a=this;if(!a.active){a.init()}if(b.floating){a.menus[b.id]=b;b.on({beforehide:a.onBeforeHide,hide:a.onHide,beforeshow:a.onBeforeShow,show:a.onShow,scope:a})}},get:function(b){var a=this.menus;if(typeof b=="string"){if(!a){return null}return a[b]}else{if(b.isMenu){return b}else{if(Ext.isArray(b)){return new Ext.menu.Menu({items:b})}else{return Ext.ComponentManager.create(b,"menu")}}}},unregister:function(d){var a=this,b=a.menus,c=a.active;delete b[d.id];c.remove(d);d.un({beforehide:a.onBeforeHide,hide:a.onHide,beforeshow:a.onBeforeShow,show:a.onShow,scope:a})},registerCheckable:function(c){var a=this.groups,b=c.group;if(b){if(!a[b]){a[b]=[]}a[b].push(c)}},unregisterCheckable:function(c){var a=this.groups,b=c.group;if(b){Ext.Array.remove(a[b],c)}},onCheckChange:function(d,g){var a=this.groups,c=d.group,b=0,j,e,h;if(c&&g){j=a[c];e=j.length;for(;b class="{splitCls}">','',' tabIndex="{tabIndex}"',' disabled="disabled"',' role="link">','',"{text}","",' style="background-image:url({iconUrl})">',"","",'","","",'','',""],scale:"small",allowedScales:["small","medium","large"],iconAlign:"left",arrowAlign:"right",arrowCls:"arrow",maskOnDisable:false,persistentPadding:undefined,shrinkWrap:3,frame:true,initComponent:function(){var a=this;a.callParent(arguments);a.addEvents("click","toggle","mouseover","mouseout","menushow","menuhide","menutriggerover","menutriggerout");if(a.menu){a.split=true;a.menu=Ext.menu.Manager.get(a.menu);a.menu.ownerButton=a}if(a.url){a.href=a.url}if(a.href&&!a.hasOwnProperty("preventDefault")){a.preventDefault=false}if(Ext.isString(a.toggleGroup)&&a.toggleGroup!==""){a.enableToggle=true}if(a.html&&!a.text){a.text=a.html;delete a.html}},getActionEl:function(){return this.btnEl},getFocusEl:function(){return this.useElForFocus?this.el:this.btnEl},onFocus:function(b){var a=this;a.useElForFocus=true;a.callParent(arguments);a.useElForFocus=false},onBlur:function(a){this.useElForFocus=true;this.callParent(arguments);this.useElForFocus=false},onDisable:function(){this.useElForFocus=true;this.callParent(arguments);this.useElForFocus=false},setComponentCls:function(){var b=this,a=b.getComponentCls();if(!Ext.isEmpty(b.oldCls)){b.removeClsWithUI(b.oldCls);b.removeClsWithUI(b.pressedCls)}b.oldCls=a;b.addClsWithUI(a)},getComponentCls:function(){var b=this,a=[];if(b.iconCls||b.icon){if(b.text){a.push("icon-text-"+b.iconAlign)}else{a.push("icon")}}else{if(b.text){a.push("noicon")}}if(b.pressed){a.push(b.pressedCls)}return a},beforeRender:function(){var a=this;a.callParent();a.oldCls=a.getComponentCls();a.addClsWithUI(a.oldCls);Ext.applyIf(a.renderData,a.getTemplateArgs());if(a.scale){a.setScale(a.scale)}},onRender:function(){var c=this,d,a,b;c.doc=Ext.getDoc();c.callParent(arguments);if(c.split&&c.arrowTooltip){c.arrowEl.dom.setAttribute(c.getTipAttr(),c.arrowTooltip)}a=c.el;if(c.tooltip){c.setTooltip(c.tooltip,true)}if(c.handleMouseEvents){b={scope:c,mouseover:c.onMouseOver,mouseout:c.onMouseOut,mousedown:c.onMouseDown};if(c.split){b.mousemove=c.onMouseMove}}else{b={scope:c}}if(c.menu){c.mon(c.menu,{scope:c,show:c.onMenuShow,hide:c.onMenuHide});c.keyMap=new Ext.util.KeyMap({target:c.el,key:Ext.EventObject.DOWN,handler:c.onDownKey,scope:c})}if(c.repeat){c.mon(new Ext.util.ClickRepeater(a,Ext.isObject(c.repeat)?c.repeat:{}),"click",c.onRepeatClick,c)}else{if(b[c.clickEvent]){d=true}else{b[c.clickEvent]=c.onClick}}c.mon(a,b);if(d){c.mon(a,c.clickEvent,c.onClick,c)}Ext.ButtonToggleManager.register(c)},getTemplateArgs:function(){var c=this,b=c.getPersistentPadding(),a="";if(Math.max.apply(Math,b)>0){a="margin:"+Ext.Array.map(b,function(d){return -d+"px"}).join(" ")}return{href:c.getHref(),disabled:c.disabled,hrefTarget:c.hrefTarget,type:c.type,btnCls:c.getBtnCls(),splitCls:c.getSplitCls(),iconUrl:c.icon,iconCls:c.iconCls,text:c.text||" ",tabIndex:c.tabIndex,innerSpanStyle:a}},getHref:function(){var a=this,b=Ext.apply({},a.baseParams);b=Ext.apply(b,a.params);return a.href?Ext.urlAppend(a.href,Ext.Object.toQueryString(b)):false},setParams:function(a){this.params=a;this.btnEl.dom.href=this.getHref()},getSplitCls:function(){var a=this;return a.split?(a.baseCls+"-"+a.arrowCls)+" "+(a.baseCls+"-"+a.arrowCls+"-"+a.arrowAlign):""},getBtnCls:function(){return this.textAlign?this.baseCls+"-"+this.textAlign:""},setIconCls:function(b){var d=this,a=d.btnIconEl,c=d.iconCls;d.iconCls=b;if(a){a.removeCls(c);a.addCls(b||"");d.setComponentCls();if(d.didIconStateChange(c,b)){d.updateLayout()}}return d},setTooltip:function(c,a){var b=this;if(b.rendered){if(!a){b.clearTip()}if(Ext.isObject(c)){Ext.tip.QuickTipManager.register(Ext.apply({target:b.btnEl.id},c));b.tooltip=c}else{b.btnEl.dom.setAttribute(b.getTipAttr(),c)}}else{b.tooltip=c}return b},setTextAlign:function(c){var b=this,a=b.btnEl;if(a){a.removeCls(b.baseCls+"-"+b.textAlign);a.addCls(b.baseCls+"-"+c)}b.textAlign=c;return b},getTipAttr:function(){return this.tooltipType=="qtip"?"data-qtip":"title"},getRefItems:function(a){var c=this.menu,b;if(c){b=c.getRefItems(a);b.unshift(c)}return b||[]},clearTip:function(){if(Ext.isObject(this.tooltip)){Ext.tip.QuickTipManager.unregister(this.btnEl)}},beforeDestroy:function(){var a=this;if(a.rendered){a.clearTip()}if(a.menu&&a.destroyMenu!==false){Ext.destroy(a.menu)}Ext.destroy(a.btnInnerEl,a.repeater);a.callParent()},onDestroy:function(){var a=this;if(a.rendered){a.doc.un("mouseover",a.monitorMouseOver,a);a.doc.un("mouseup",a.onMouseUp,a);delete a.doc;Ext.ButtonToggleManager.unregister(a);Ext.destroy(a.keyMap);delete a.keyMap}a.callParent()},setHandler:function(b,a){this.handler=b;this.scope=a;return this},setText:function(b){var a=this;a.text=b;if(a.rendered){a.btnInnerEl.update(b||" ");a.setComponentCls();if(Ext.isStrict&&Ext.isIE8){a.el.repaint()}a.updateLayout()}return a},setIcon:function(b){var c=this,a=c.btnIconEl,d=c.icon;c.icon=b;if(a){a.setStyle("background-image",b?"url("+b+")":"");c.setComponentCls();if(c.didIconStateChange(d,b)){c.updateLayout()}}return c},didIconStateChange:function(a,c){var b=Ext.isEmpty(c);return Ext.isEmpty(a)?!b:b},getText:function(){return this.text},toggle:function(c,a){var b=this;c=c===undefined?!b.pressed:!!c;if(c!==b.pressed){if(b.rendered){b[c?"addClsWithUI":"removeClsWithUI"](b.pressedCls)}b.pressed=c;if(!a){b.fireEvent("toggle",b,c);Ext.callback(b.toggleHandler,b.scope||b,[b,c])}}return b},maybeShowMenu:function(){var a=this;if(a.menu&&!a.hasVisibleMenu()&&!a.ignoreNextClick){a.showMenu()}},showMenu:function(){var a=this;if(a.rendered&&a.menu){if(a.tooltip&&a.getTipAttr()!="title"){Ext.tip.QuickTipManager.getQuickTip().cancelShow(a.btnEl)}if(a.menu.isVisible()){a.menu.hide()}a.menu.showBy(a.el,a.menuAlign,((!Ext.isStrict&&Ext.isIE)||Ext.isIE6)?[-2,-2]:undefined)}return a},hideMenu:function(){if(this.hasVisibleMenu()){this.menu.hide()}return this},hasVisibleMenu:function(){var a=this.menu;return a&&a.rendered&&a.isVisible()},onRepeatClick:function(a,b){this.onClick(b)},onClick:function(b){var a=this;if(a.preventDefault||(a.disabled&&a.getHref())&&b){b.preventDefault()}if(b.button!==0){return}if(!a.disabled){a.doToggle();a.maybeShowMenu();a.fireHandler(b)}},fireHandler:function(c){var b=this,a=b.handler;if(b.fireEvent("click",b,c)!==false){if(a){a.call(b.scope||b,b,c)}b.blur()}},doToggle:function(){var a=this;if(a.enableToggle&&(a.allowDepress!==false||!a.pressed)){a.toggle()}},onMouseOver:function(b){var a=this;if(!a.disabled&&!b.within(a.el,true,true)){a.onMouseEnter(b)}},onMouseOut:function(b){var a=this;if(!b.within(a.el,true,true)){if(a.overMenuTrigger){a.onMenuTriggerOut(b)}a.onMouseLeave(b)}},onMouseMove:function(h){var d=this,c=d.el,g=d.overMenuTrigger,b,a;if(d.split){if(d.arrowAlign==="right"){b=h.getX()-c.getX();a=c.getWidth()}else{b=h.getY()-c.getY();a=c.getHeight()}if(b>(a-d.getTriggerSize())){if(!g){d.onMenuTriggerOver(h)}}else{if(g){d.onMenuTriggerOut(h)}}}},getTriggerSize:function(){var e=this,c=e.triggerSize,b,a,d;if(c===d){b=e.arrowAlign;a=b.charAt(0);c=e.triggerSize=e.el.getFrameWidth(a)+e.btnWrap.getFrameWidth(a)+e.frameSize[b]}return c},onMouseEnter:function(b){var a=this;a.addClsWithUI(a.overCls);a.fireEvent("mouseover",a,b)},onMouseLeave:function(b){var a=this;a.removeClsWithUI(a.overCls);a.fireEvent("mouseout",a,b)},onMenuTriggerOver:function(b){var a=this;a.overMenuTrigger=true;a.fireEvent("menutriggerover",a,a.menu,b)},onMenuTriggerOut:function(b){var a=this;delete a.overMenuTrigger;a.fireEvent("menutriggerout",a,a.menu,b)},enable:function(a){var b=this;b.callParent(arguments);if(b.btnEl){b.btnEl.dom.disabled=false}b.removeClsWithUI("disabled");return b},disable:function(a){var b=this;b.callParent(arguments);if(b.btnEl){b.btnEl.dom.disabled=true}b.addClsWithUI("disabled");b.removeClsWithUI(b.overCls);if(b.btnInnerEl&&(Ext.isIE6||Ext.isIE7)){b.btnInnerEl.repaint()}return b},setScale:function(c){var a=this,b=a.ui.replace("-"+a.scale,"");if(!Ext.Array.contains(a.allowedScales,c)){throw ("#setScale: scale must be an allowed scale ("+a.allowedScales.join(", ")+")")}a.scale=c;a.setUI(b)},setUI:function(b){var a=this;if(a.scale&&!b.match(a.scale)){b=b+"-"+a.scale}a.callParent([b])},onMouseDown:function(b){var a=this;if(!a.disabled&&b.button===0){a.addClsWithUI(a.pressedCls);a.doc.on("mouseup",a.onMouseUp,a)}},onMouseUp:function(b){var a=this;if(b.button===0){if(!a.pressed){a.removeClsWithUI(a.pressedCls)}a.doc.un("mouseup",a.onMouseUp,a)}},onMenuShow:function(b){var a=this;a.ignoreNextClick=0;a.addClsWithUI(a.menuActiveCls);a.fireEvent("menushow",a,a.menu)},onMenuHide:function(b){var a=this;a.removeClsWithUI(a.menuActiveCls);a.ignoreNextClick=Ext.defer(a.restoreClick,250,a);a.fireEvent("menuhide",a,a.menu)},restoreClick:function(){this.ignoreNextClick=0},onDownKey:function(){var a=this;if(!a.disabled){if(a.menu){a.showMenu()}}},getPersistentPadding:function(){var g=this,e=Ext.scopeResetCSS,h=g.persistentPadding,b,a,d,i,c;if(!h){h=g.self.prototype.persistentPadding=[0,0,0,0];if(!Ext.isIE){b=new Ext.button.Button({text:"test",style:"position:absolute;top:-999px;"});b.el=Ext.DomHelper.append(Ext.resetElement,b.getRenderTree(),true);b.applyChildEls(b.el);d=b.btnEl;i=b.btnInnerEl;d.setSize(null,null);a=i.getOffsetsTo(d);h[0]=a[1];h[1]=d.getWidth()-i.getWidth()-a[0];h[2]=d.getHeight()-i.getHeight()-a[1];h[3]=a[0];b.destroy();b.el.remove()}}return h}},function(){var a={},b=function(d,j){if(j){var h=a[d.toggleGroup],e=h.length,c;for(c=0;c(None)',constructor:function(b){var a=this;a.callParent(arguments);a.triggerButtonCls=a.triggerButtonCls||Ext.baseCSSPrefix+"box-menu-"+b.getNames().right;a.menuItems=[]},beginLayout:function(a){this.callParent(arguments);this.clearOverflow(a)},beginLayoutCycle:function(b,a){this.callParent(arguments);if(!a){this.clearOverflow(b);this.layout.cacheChildItems(b)}},onRemove:function(a){Ext.Array.remove(this.menuItems,a)},getSuffixConfig:function(){var c=this,b=c.layout,a=b.owner.id;c.menu=new Ext.menu.Menu({listeners:{scope:c,beforeshow:c.beforeMenuShow}});c.menuTrigger=new Ext.button.Button({id:a+"-menu-trigger",cls:Ext.layout.container.Box.prototype.innerCls+" "+c.triggerButtonCls,hidden:true,ownerCt:b.owner,ownerLayout:b,iconCls:Ext.baseCSSPrefix+c.getOwnerType(b.owner)+"-more-icon",ui:b.owner instanceof Ext.toolbar.Toolbar?"default-toolbar":"default",menu:c.menu,getSplitCls:function(){return""}});return c.menuTrigger.getRenderTree()},getOverflowCls:function(){return Ext.baseCSSPrefix+this.layout.direction+"-box-overflow-body"},handleOverflow:function(d){var c=this,b=c.layout,g=b.getNames(),e=d.state.boxPlan,a=[null,null];c.showTrigger(d);a[g.heightIndex]=(e.maxSize-c.menuTrigger[g.getHeight]())/2;c.menuTrigger.setPosition.apply(c.menuTrigger,a);return{reservedSpace:c.menuTrigger[g.getWidth]()}},captureChildElements:function(){var a=this.menuTrigger;if(a.rendering){a.finishRender()}},_asLayoutRoot:{isRoot:true},clearOverflow:function(h){var g=this,b=g.menuItems,e,c=0,d=b.length,a=g.layout.owner,j=g._asLayoutRoot;a.suspendLayouts();g.captureChildElements();g.hideTrigger();a.resumeLayouts();for(;cb){j=q.target;o.menuItems.push(j);j.hide()}}a.resumeLayouts()},hideTrigger:function(){var a=this.menuTrigger;if(a){a.hide()}},beforeMenuShow:function(j){var h=this,b=h.menuItems,d=0,a=b.length,g,e,c=function(k,i){return k.isXType("buttongroup")&&!(i instanceof Ext.toolbar.Separator)};j.suspendLayouts();h.clearMenu();j.removeAll();for(;d=this.getMaxScrollPosition()},scrollTo:function(a,b){var g=this,e=g.layout,h=e.getNames(),d=g.getScrollPosition(),c=Ext.Number.constrain(a,0,g.getMaxScrollPosition());if(c!=d&&!g.scrolling){delete g.scrollPosition;if(b===undefined){b=g.animateScroll}e.innerCt.scrollTo(h.left,c,b?g.getScrollAnim():false);if(b){g.scrolling=true}else{g.updateScrollButtons()}g.fireEvent("scroll",g,c,b?g.getScrollAnim():false)}},scrollToItem:function(h,b){var g=this,e=g.layout,i=e.getNames(),a,d,c;h=g.getItem(h);if(h!==undefined){a=g.getItemVisibility(h);if(!a.fullyVisible){d=h.getBox(true,true);c=d[i.x];if(a.hiddenEnd){c-=(g.layout.innerCt["get"+i.widthCap]()-d[i.width])}g.scrollTo(c,b)}}},getItemVisibility:function(j){var h=this,b=h.getItem(j).getBox(true,true),c=h.layout,g=c.getNames(),e=b[g.x],d=e+b[g.width],a=h.getScrollPosition(),i=a+c.innerCt["get"+g.widthCap]();return{hiddenStart:ei,fullyVisible:e>a&&d=a.x&&b.right<=a.right&&b.y>=a.y&&b.bottom<=a.bottom)},intersect:function(h){var g=this,d=Math.max(g.y,h.y),e=Math.min(g.right,h.right),a=Math.min(g.bottom,h.bottom),c=Math.max(g.x,h.x);if(a>d&&e>c){return new this.self(d,e,a,c)}else{return false}},union:function(h){var g=this,d=Math.min(g.y,h.y),e=Math.max(g.right,h.right),a=Math.max(g.bottom,h.bottom),c=Math.min(g.x,h.x);return new this.self(d,e,a,c)},constrainTo:function(b){var a=this,c=Ext.Number.constrain;a.top=a.y=c(a.top,b.y,b.bottom);a.bottom=c(a.bottom,b.y,b.bottom);a.left=a.x=c(a.left,b.x,b.right);a.right=c(a.right,b.x,b.right);return a},adjust:function(d,g,a,c){var e=this;e.top=e.y+=d;e.left=e.x+=c;e.right+=g;e.bottom+=a;return e},getOutOfBoundOffset:function(a,b){if(!Ext.isObject(a)){if(a=="x"){return this.getOutOfBoundOffsetX(b)}else{return this.getOutOfBoundOffsetY(b)}}else{b=a;var c=new Ext.util.Offset();c.x=this.getOutOfBoundOffsetX(b.x);c.y=this.getOutOfBoundOffsetY(b.y);return c}},getOutOfBoundOffsetX:function(a){if(a<=this.x){return this.x-a}else{if(a>=this.right){return this.right-a}}return 0},getOutOfBoundOffsetY:function(a){if(a<=this.y){return this.y-a}else{if(a>=this.bottom){return this.bottom-a}}return 0},isOutOfBound:function(a,b){if(!Ext.isObject(a)){if(a=="x"){return this.isOutOfBoundX(b)}else{return this.isOutOfBoundY(b)}}else{b=a;return(this.isOutOfBoundX(b.x)||this.isOutOfBoundY(b.y))}},isOutOfBoundX:function(a){return(athis.right)},isOutOfBoundY:function(a){return(athis.bottom)},restrict:function(b,d,a){if(Ext.isObject(b)){var c;a=d;d=b;if(d.copy){c=d.copy()}else{c={x:d.x,y:d.y}}c.x=this.restrictX(d.x,a);c.y=this.restrictY(d.y,a);return c}else{if(b=="x"){return this.restrictX(d,a)}else{return this.restrictY(d,a)}}},restrictX:function(b,a){if(!a){a=1}if(b<=this.x){b-=(b-this.x)*a}else{if(b>=this.right){b-=(b-this.right)*a}}return b},restrictY:function(b,a){if(!a){a=1}if(b<=this.y){b-=(b-this.y)*a}else{if(b>=this.bottom){b-=(b-this.bottom)*a}}return b},getSize:function(){return{width:this.right-this.x,height:this.bottom-this.y}},copy:function(){return new this.self(this.y,this.right,this.bottom,this.x)},copyFrom:function(b){var a=this;a.top=a.y=a[1]=b.y;a.right=b.right;a.bottom=b.bottom;a.left=a.x=a[0]=b.x;return this},toString:function(){return"Region["+this.top+","+this.right+","+this.bottom+","+this.left+"]"},translateBy:function(a,c){if(arguments.length==1){c=a.y;a=a.x}var b=this;b.top=b.y+=c;b.right+=a;b.bottom+=c;b.left=b.x+=a;return b},round:function(){var a=this;a.top=a.y=Math.round(a.y);a.right=Math.round(a.right);a.bottom=Math.round(a.bottom);a.left=a.x=Math.round(a.x);return a},equals:function(a){return(this.top==a.top&&this.right==a.right&&this.bottom==a.bottom&&this.left==a.left)}});Ext.define("Ext.dd.DragDropManager",{singleton:true,requires:["Ext.util.Region"],uses:["Ext.tip.QuickTipManager"],alternateClassName:["Ext.dd.DragDropMgr","Ext.dd.DDM"],ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,init:function(){this.initialized=true},POINT:0,INTERSECT:1,mode:0,notifyOccluded:false,_execOnAll:function(c,b){var d,a,e;for(d in this.ids){for(a in this.ids[d]){e=this.ids[d][a];if(!this.isTypeOfDD(e)){continue}e[c].apply(e,b)}}},_onLoad:function(){this.init();var a=Ext.EventManager;a.on(document,"mouseup",this.handleMouseUp,this,true);a.on(document,"mousemove",this.handleMouseMove,this,true);a.on(window,"unload",this._onUnload,this,true);a.on(window,"resize",this._onResize,this,true)},_onResize:function(a){this._execOnAll("resetConstraints",[])},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(b,a){if(!this.initialized){this.init()}if(!this.ids[a]){this.ids[a]={}}this.ids[a][b.id]=b},removeDDFromGroup:function(c,a){if(!this.ids[a]){this.ids[a]={}}var b=this.ids[a];if(b&&b[c.id]){delete b[c.id]}},_remove:function(b){for(var a in b.groups){if(a&&this.ids[a]&&this.ids[a][b.id]){delete this.ids[a][b.id]}}delete this.handleIds[b.id]},regHandle:function(b,a){if(!this.handleIds[b]){this.handleIds[b]={}}this.handleIds[b][a]=a},isDragDrop:function(a){return(this.getDDById(a))?true:false},getRelated:function(g,b){var e=[],d,c,a;for(d in g.groups){for(c in this.ids[d]){a=this.ids[d][c];if(!this.isTypeOfDD(a)){continue}if(!b||a.isTarget){e[e.length]=a}}}return e},isLegalTarget:function(e,d){var b=this.getRelated(e,true),c,a;for(c=0,a=b.length;cc.clickPixelThresh||a>c.clickPixelThresh){c.startDrag(c.startX,c.startY)}}if(c.dragThreshMet){c.dragCurrent.b4Drag(d);c.dragCurrent.onDrag(d);if(!c.dragCurrent.moveOnly){c.fireEvents(d,false)}}c.stopEvent(d);return true},fireEvents:function(n,q){var p=this,k=p.dragCurrent,r=n.getPoint(),b,t,d=[],a=[],g=[],l=[],j=[],c=[],o,h,m,s;if(!k||k.isLocked()){return}for(h in p.dragOvers){b=p.dragOvers[h];if(!p.isTypeOfDD(b)){continue}if(!this.isOverTarget(r,b,p.mode)){g.push(b)}a[h]=true;delete p.dragOvers[h]}for(s in k.groups){if("string"!=typeof s){continue}for(h in p.ids[s]){b=p.ids[s][h];if(p.isTypeOfDD(b)&&(t=b.getEl())&&(b.isTarget)&&(!b.isLocked())&&(Ext.fly(t).isVisible(true))&&((b!=k)||(k.ignoreSelf===false))){if((b.zIndex=p.getZIndex(t))!==-1){o=true}d.push(b)}}}if(o){Ext.Array.sort(d,p.byZIndex)}for(h=0,m=d.length;h','
',"{%this.renderBody(out, values)%}","
","","{%if (oh.getSuffixConfig!==Ext.emptyFn) {","if(oc=oh.getSuffixConfig())dh.generateMarkup(oc, out)","}%}",{disableFormats:true,definitions:"var dh=Ext.DomHelper;"}],constructor:function(a){var c=this,b;c.callParent(arguments);c.flexSortFn=Ext.Function.bind(c.flexSort,c);c.initOverflowHandler();b=typeof c.padding;if(b=="string"||b=="number"){c.padding=Ext.util.Format.parseBox(c.padding);c.padding.height=c.padding.top+c.padding.bottom;c.padding.width=c.padding.left+c.padding.right}},getNames:function(){return this.names},_percentageRe:/^\s*(\d+(?:\.\d*)?)\s*[%]\s*$/,getItemSizePolicy:function(m,n){var j=this,h=j.sizePolicy,g=j.align,e=m.flex,k=g,i=j.names,a=m[i.width],l=m[i.height],c=j._percentageRe,b=c.test(a),d=(g=="stretch");if((d||e||b)&&!n){n=j.owner.getSizeModel()}if(d){if(!c.test(l)&&n[i.height].shrinkWrap){k="stretchmax"}}else{if(g!="stretchmax"){if(c.test(l)){k="stretch"}else{k=""}}}if(e||b){if(!n[i.width].shrinkWrap){h=h.flex}}return h[k]},flexSort:function(d,c){var e=this.getNames().maxWidth,g=Infinity;d=d.target[e]||g;c=c.target[e]||g;if(!isFinite(d)&&!isFinite(c)){return 0}return d-c},isItemBoxParent:function(a){return true},isItemShrinkWrap:function(a){return true},minSizeSortFn:function(d,c){return c.available-d.available},roundFlex:function(a){return Math.ceil(a)},beginCollapse:function(b){var a=this;if(a.direction==="vertical"&&b.collapsedVertical()){b.collapseMemento.capture(["flex"]);delete b.flex}else{if(a.direction==="horizontal"&&b.collapsedHorizontal()){b.collapseMemento.capture(["flex"]);delete b.flex}}},beginExpand:function(a){a.collapseMemento.restore(["flex"])},beginLayout:function(c){var b=this,e=b.owner.stretchMaxPartner,a=b.innerCt.dom.style,d=b.getNames();c.boxNames=d;b.overflowHandler.beginLayout(c);if(typeof e==="string"){e=Ext.getCmp(e)||b.owner.query(e)[0]}c.stretchMaxPartner=e&&c.context.getCmp(e);b.callParent(arguments);c.innerCtContext=c.getEl("innerCt",b);b.scrollParallel=!!(b.owner.autoScroll||b.owner[d.overflowX]);b.scrollPerpendicular=!!(b.owner.autoScroll||b.owner[d.overflowY]);if(b.scrollParallel){b.scrollPos=b.owner.getTargetEl().dom[d.scrollLeft]}a.width="";a.height=""},beginLayoutCycle:function(e,a){var d=this,h=d.align,g=e.boxNames,b=d.pack,c=g.heightModel;d.overflowHandler.beginLayoutCycle(e,a);d.callParent(arguments);e.parallelSizeModel=e[g.widthModel];e.perpendicularSizeModel=e[c];e.boxOptions={align:h={stretch:h=="stretch",stretchmax:h=="stretchmax",center:h==g.center},pack:b={center:b=="center",end:b=="end"}};if(h.stretch&&e.perpendicularSizeModel.shrinkWrap){h.stretchmax=true;h.stretch=false}h.nostretch=!(h.stretch||h.stretchmax);if(e.parallelSizeModel.shrinkWrap){b.center=b.end=false}d.cacheFlexes(e);if(Ext.isWebKit){d.targetEl.setWidth(20000)}},cacheFlexes:function(k){var u=this,l=k.boxNames,a=l.widthModel,d=l.heightModel,c=k.boxOptions.align.nostretch,o=0,b=k.childItems,q=b.length,s=[],m=0,j=l.minWidth,g=u._percentageRe,r=0,t=0,e,n,p,h;while(q--){n=b[q];e=n.target;if(n[a].calculated){n.flex=p=e.flex;if(p){o+=p;s.push(n);m+=e[j]||0}else{h=g.exec(e[l.width]);n.percentageParallel=parseFloat(h[1])/100;++r}}if(c&&n[d].calculated){h=g.exec(e[l.height]);n.percentagePerpendicular=parseFloat(h[1])/100;++t}}k.flexedItems=s;k.flexedMinSize=m;k.totalFlex=o;k.percentageWidths=r;k.percentageHeights=t;Ext.Array.sort(s,u.flexSortFn)},calculate:function(d){var b=this,a=b.getContainerSize(d),g=d.boxNames,c=d.state,e=c.boxPlan||(c.boxPlan={});e.targetSize=a;if(!d.parallelSizeModel.shrinkWrap&&!a[g.gotWidth]){b.done=false;return}if(!c.parallelDone){c.parallelDone=b.calculateParallel(d,g,e)}if(!c.perpendicularDone){c.perpendicularDone=b.calculatePerpendicular(d,g,e)}if(c.parallelDone&&c.perpendicularDone){if(b.owner.dock&&(Ext.isIE6||Ext.isIE7||Ext.isIEQuirks)&&!b.owner.width&&!b.horizontal){e.isIEVerticalDock=true;e.calculatedWidth=e.maxSize+d.getPaddingInfo().width+d.getFrameInfo().width}b.publishInnerCtSize(d,b.reserveOffset?b.availableSpaceOffset:0);if(b.done&&d.childItems.length>1&&d.boxOptions.align.stretchmax&&!c.stretchMaxDone){b.calculateStretchMax(d,g,e);c.stretchMaxDone=true}}else{b.done=false}},calculateParallel:function(k,n,b){var F=this,z=n.width,a=k.childItems,d=n.left,r=n.right,q=n.setWidth,A=a.length,x=k.flexedItems,s=x.length,v=k.boxOptions.pack,m=F.padding,h=b.targetSize[z],B=0,e=m[d],E=e+m[r]+F.scrollOffset+(F.reserveOffset?F.availableSpaceOffset:0),w=Ext.getScrollbarSize()[n.width],u,l,g,y,o,t,D,p,C,c,j;if(w&&F.scrollPerpendicular&&k.parallelSizeModel.shrinkWrap&&!k.boxOptions.align.stretch&&!k.perpendicularSizeModel.shrinkWrap){if(!k.state.perpendicularDone){return false}C=true}for(u=0;ub.targetSize[n.height])){p+=w;k[n.hasOverflowY]=true;k.target.componentLayout[n.setWidthInDom]=true;k[n.invalidateScrollY]=(Ext.isStrict&&Ext.isIE8)}k[n.setContentWidth](p);return true},calculatePerpendicular:function(r,v,c){var G=this,a=r.perpendicularSizeModel.shrinkWrap,d=c.targetSize,b=r.childItems,E=b.length,J=Math.max,H=v.height,m=v.setHeight,p=v.top,F=v.y,u=G.padding,w=u[p],h=d[H]-w-u[v.bottom],B=r.boxOptions.align,o=B.stretch,z=B.stretchmax,n=B.center,A=0,g=0,l=Ext.getScrollbarSize().height,I,C,e,t,s,y,x,k,j,q,D;if(o||(n&&!a)){if(isNaN(h)){return false}}if(G.scrollParallel&&c.tooNarrow){if(a){q=true}else{h-=l;c.targetSize[H]-=l}}if(o){y=h}else{for(C=0;C0){I=w+Math.round(s/2)}}}x.setProp(F,I)}return true},calculateStretchMax:function(d,k,m){var l=this,h=k.height,n=k.width,g=d.childItems,b=g.length,o=m.maxSize,a=l.onBeforeInvalidateChild,q=l.onAfterInvalidateChild,p,j,e,c;for(e=0;e":{xtype:"tbfill",height:0}},1:{"->":{xtype:"tbfill",width:0}}}},initComponent:function(){var b=this,a;if(!b.layout&&b.enableOverflow){b.layout={overflowHandler:"Menu"}}if(b.dock==="right"||b.dock==="left"){b.vertical=true}b.layout=Ext.applyIf(Ext.isString(b.layout)?{type:b.layout}:b.layout||{},{type:b.vertical?"vbox":"hbox",align:b.vertical?"stretchmax":"middle"});if(b.vertical){b.addClsWithUI("vertical")}if(b.ui==="footer"){b.ignoreBorderManagement=true}b.callParent();b.addEvents("overflowchange")},getRefItems:function(a){var e=this,b=e.callParent(arguments),d=e.layout,c;if(a&&e.enableOverflow){c=d.overflowHandler;if(c&&c.menu){b=b.concat(c.menu.getRefItems(a))}}return b},lookupComponent:function(d){if(typeof d=="string"){var b=Ext.toolbar.Toolbar,a=b.shortcutsHV[this.vertical?1:0][d]||b.shortcuts[d];if(typeof a=="string"){d={xtype:a}}else{if(a){d=Ext.apply({},a)}else{d={xtype:"tbtext",text:d}}}this.applyDefaults(d)}return this.callParent(arguments)},applyDefaults:function(a){if(!Ext.isString(a)){a=this.callParent(arguments)}return a},trackMenu:function(c,a){if(this.trackMenus&&c.menu){var d=a?"mun":"mon",b=this;b[d](c,"mouseover",b.onButtonOver,b);b[d](c,"menushow",b.onButtonMenuShow,b);b[d](c,"menuhide",b.onButtonMenuHide,b)}},constructButton:function(a){return a.events?a:Ext.widget(a.split?"splitbutton":this.defaultType,a)},onBeforeAdd:function(a){if(a.is("field")||(a.is("button")&&this.ui!="footer")){a.ui=a.ui+"-toolbar"}if(a instanceof Ext.toolbar.Separator){a.setUI((this.vertical)?"vertical":"horizontal")}this.callParent(arguments)},onAdd:function(a){this.callParent(arguments);this.trackMenu(a)},onRemove:function(a){this.callParent(arguments);this.trackMenu(a,true)},getChildItemsToDisable:function(){return this.items.getRange()},onButtonOver:function(a){if(this.activeMenuBtn&&this.activeMenuBtn!=a){this.activeMenuBtn.hideMenu();a.showMenu();this.activeMenuBtn=a}},onButtonMenuShow:function(a){this.activeMenuBtn=a},onButtonMenuHide:function(a){delete this.activeMenuBtn}});Ext.define("Ext.container.DockingContainer",{requires:["Ext.util.MixedCollection","Ext.Element"],isDockingContainer:true,defaultDockWeights:{top:{render:1,visual:1},left:{render:3,visual:5},right:{render:5,visual:7},bottom:{render:7,visual:3}},dockOrder:{top:-1,left:-1,right:1,bottom:1},addDocked:function(a,g){var e=this,b=0,d,c;a=e.prepareItems(a);c=a.length;for(;b":"",'
{bodyCls}',' {baseCls}-body-{ui}',' {parent.baseCls}-body-{parent.ui}-{.}','" style="{bodyStyle}">',"{%this.renderContainer(out,values);%}","
","{% this.renderDockedItems(out,values,1); %}"],bodyPosProps:{x:"x",y:"y"},border:true,emptyArray:[],initComponent:function(){var a=this;if(a.frame&&a.border&&a.bodyBorder===undefined){a.bodyBorder=false}if(a.frame&&a.border&&(a.bodyBorder===false||a.bodyBorder===0)){a.manageBodyBorders=true}a.callParent()},beforeDestroy:function(){this.destroyDockedItems();this.callParent()},initItems:function(){this.callParent();this.initDockingItems()},initRenderData:function(){var a=this,b=a.callParent();a.initBodyStyles();a.protoBody.writeTo(b);delete a.protoBody;return b},getComponent:function(a){var b=this.callParent(arguments);if(b===undefined&&!Ext.isNumber(a)){b=this.getDockedComponent(a)}return b},getProtoBody:function(){var b=this,a=b.protoBody;if(!a){b.protoBody=a=new Ext.util.ProtoElement({cls:b.bodyCls,style:b.bodyStyle,clsProp:"bodyCls",styleProp:"bodyStyle",styleIsText:true})}return a},initBodyStyles:function(){var c=this,a=c.getProtoBody(),b=Ext.Element;if(c.bodyPadding!==undefined){a.setStyle("padding",b.unitizeBox((c.bodyPadding===true)?5:c.bodyPadding))}if(c.frame&&c.bodyBorder){if(!Ext.isNumber(c.bodyBorder)){c.bodyBorder=1}a.setStyle("border-width",b.unitizeBox(c.bodyBorder))}},getCollapsedDockedItems:function(){var a=this;return a.collapseMode=="placeholder"?a.emptyArray:[a.getReExpander()]},setBodyStyle:function(b,d){var c=this,a=c.rendered?c.body:c.getProtoBody();if(Ext.isFunction(b)){b=b()}if(arguments.length==1){if(Ext.isString(b)){b=Ext.Element.parseStyles(b)}a.setStyle(b)}else{a.setStyle(b,d)}return c},addBodyCls:function(b){var c=this,a=c.rendered?c.body:c.getProtoBody();a.addCls(b);return c},removeBodyCls:function(b){var c=this,a=c.rendered?c.body:c.getProtoBody();a.removeCls(b);return c},addUIClsToElement:function(b){var c=this,a=c.callParent(arguments);c.addBodyCls([Ext.baseCSSPrefix+b,c.baseCls+"-body-"+b,c.baseCls+"-body-"+c.ui+"-"+b]);return a},removeUIClsFromElement:function(b){var c=this,a=c.callParent(arguments);c.removeBodyCls([Ext.baseCSSPrefix+b,c.baseCls+"-body-"+b,c.baseCls+"-body-"+c.ui+"-"+b]);return a},addUIToElement:function(){var a=this;a.callParent(arguments);a.addBodyCls(a.baseCls+"-body-"+a.ui)},removeUIFromElement:function(){var a=this;a.callParent(arguments);a.removeBodyCls(a.baseCls+"-body-"+a.ui)},getTargetEl:function(){return this.body},getRefItems:function(a){var b=this.callParent(arguments);return this.getDockingRefItems(a,b)},setupRenderTpl:function(a){this.callParent(arguments);this.setupDockingRenderTpl(a)}});Ext.define("Ext.layout.component.Body",{alias:["layout.body"],extend:"Ext.layout.component.Auto",type:"body",beginLayout:function(a){this.callParent(arguments);a.bodyContext=a.getEl("body")},calculateOwnerHeightFromContentHeight:function(c,b){var a=this.callParent(arguments);if(c.targetContext!=c){a+=c.getPaddingInfo().height}return a},calculateOwnerWidthFromContentWidth:function(c,a){var b=this.callParent(arguments);if(c.targetContext!=c){b+=c.getPaddingInfo().width}return b},measureContentWidth:function(a){return a.bodyContext.setWidth(a.bodyContext.el.dom.offsetWidth,false)},measureContentHeight:function(a){return a.bodyContext.setHeight(a.bodyContext.el.dom.offsetHeight,false)},publishInnerHeight:function(c,a){var d=a-c.getFrameInfo().height,b=c.targetContext;if(b!=c){d-=c.getPaddingInfo().height}return c.bodyContext.setHeight(d,!c.heightModel.natural)},publishInnerWidth:function(d,c){var a=c-d.getFrameInfo().width,b=d.targetContext;if(b!=d){a-=d.getPaddingInfo().width}d.bodyContext.setWidth(a,!d.widthModel.natural)}});Ext.define("Ext.panel.Header",{extend:"Ext.container.Container",uses:["Ext.panel.Tool","Ext.draw.Component","Ext.util.CSS","Ext.layout.component.Body","Ext.Img"],alias:"widget.header",isHeader:true,defaultType:"tool",indicateDrag:false,weight:-1,componentLayout:"body",titleAlign:"left",childEls:["body"],renderTpl:['
{parent.baseCls}-body-{parent.ui}-{.}"',' style="{bodyStyle}">',"{%this.renderContainer(out,values)%}","
"],headingTpl:'{title}',shrinkWrap:3,initComponent:function(){var b=this,e,d,a,c,g;b.addEvents("click","dblclick");b.indicateDragCls=b.baseCls+"-draggable";b.title=b.title||" ";b.tools=b.tools||[];b.items=b.items||[];b.orientation=b.orientation||"horizontal";b.dock=(b.dock)?b.dock:(b.orientation=="horizontal")?"top":"left";b.addClsWithUI([b.orientation,b.dock]);if(b.indicateDrag){b.addCls(b.indicateDragCls)}if(!Ext.isEmpty(b.iconCls)||!Ext.isEmpty(b.icon)){b.initIconCmp();b.items.push(b.iconCmp)}if(b.orientation=="vertical"){b.layout={type:"vbox",align:"center"};b.textConfig={width:16,cls:b.baseCls+"-text",type:"text",text:b.title,rotate:{degrees:90}};c=b.ui;if(Ext.isArray(c)){c=c[0]}e="."+b.baseCls+"-text-"+c;if(Ext.scopeResetCSS){e="."+Ext.baseCSSPrefix+"reset "+e}d=Ext.util.CSS.getRule(e);if(d){a=d.style}else{a=(g=Ext.resetElement.createChild({style:"position:absolute",cls:b.baseCls+"-text-"+c})).getStyles("fontFamily","fontWeight","fontSize","color");g.remove()}if(a){Ext.apply(b.textConfig,{"font-family":a.fontFamily,"font-weight":a.fontWeight,"font-size":a.fontSize,fill:a.color})}b.titleCmp=new Ext.draw.Component({width:16,ariaRole:"heading",focusable:false,viewBox:false,flex:1,id:b.id+"_hd",autoSize:true,items:b.textConfig,xhooks:{setSize:function(h){this.callParent([h])}},childEls:[{name:"textEl",select:"."+b.baseCls+"-text"}]})}else{b.layout={type:"hbox",align:"middle"};b.titleCmp=new Ext.Component({ariaRole:"heading",focusable:false,noWrap:true,flex:1,id:b.id+"_hd",style:"text-align:"+b.titleAlign,cls:b.baseCls+"-text-container",renderTpl:b.getTpl("headingTpl"),renderData:{title:b.title,cls:b.baseCls,ui:b.ui},childEls:["textEl"]})}b.items.push(b.titleCmp);b.items=b.items.concat(b.tools);b.callParent();b.on({dblclick:b.onDblClick,click:b.onClick,element:"el",scope:b})},initIconCmp:function(){var b=this,a={focusable:false,src:Ext.BLANK_IMAGE_URL,cls:[b.baseCls+"-icon",b.iconCls],id:b.id+"-iconEl",iconCls:b.iconCls};if(!Ext.isEmpty(b.icon)){delete a.iconCls;a.src=b.icon}b.iconCmp=new Ext.Img(a)},afterRender:function(){this.el.unselectable();this.callParent()},addUIClsToElement:function(b){var e=this,a=e.callParent(arguments),d=[e.baseCls+"-body-"+b,e.baseCls+"-body-"+e.ui+"-"+b],g,c;if(e.bodyCls){g=e.bodyCls.split(" ");for(c=0;c=e.duration),g,i;g=this.collectTargetData(e,a,h,c);if(h){e.target.setAttr(g.anims[e.id].attributes,true);d.collectTargetData(e,e.duration,h,c);e.paused=true;g=e.target.target;if(e.target.isComposite){g=e.target.target.last()}i={};i[Ext.supports.CSS3TransitionEnd]=e.lastFrame;i.scope=e;i.single=true;g.on(i)}},collectTargetData:function(c,a,e,g){var b=c.target.getId(),d=this.targetArr[b];if(!d){d=this.targetArr[b]={id:b,el:c.target,anims:{}}}d.anims[c.id]={id:c.id,anim:c,elapsed:a,isLastFrame:g,attributes:[{duration:c.duration,easing:(e&&c.reverse)?c.easingFn.reverse().toCSS3():c.easing,attrs:c.runAnim(a)}]};return d},applyPendingAttrs:function(){var e=this.targetArr,g,c,b,d,a;for(c in e){if(e.hasOwnProperty(c)){g=e[c];for(a in g.anims){if(g.anims.hasOwnProperty(a)){b=g.anims[a];d=b.anim;if(b.attributes&&d.isRunning()){g.el.setAttr(b.attributes,false,b.isLastFrame);if(b.isLastFrame){d.lastFrame()}}}}}}}});Ext.define("Ext.fx.Animator",{mixins:{observable:"Ext.util.Observable"},requires:["Ext.fx.Manager"],isAnimator:true,duration:250,delay:0,delayStart:0,dynamic:false,easing:"ease",running:false,paused:false,damper:1,iterations:1,currentIteration:0,keyframeStep:0,animKeyFramesRE:/^(from|to|\d+%?)$/,constructor:function(a){var b=this;a=Ext.apply(b,a||{});b.config=a;b.id=Ext.id(null,"ext-animator-");b.addEvents("beforeanimate","keyframe","afteranimate");b.mixins.observable.constructor.call(b,a);b.timeline=[];b.createTimeline(b.keyframes);if(b.target){b.applyAnimator(b.target);Ext.fx.Manager.addAnim(b)}},sorter:function(d,c){return d.pct-c.pct},createTimeline:function(g){var k=this,n=[],l=k.to||{},c=k.duration,o,a,e,j,m,b,d,h;for(m in g){if(g.hasOwnProperty(m)&&k.animKeyFramesRE.test(m)){h={attrs:Ext.apply(g[m],l)};if(m=="from"){m=0}else{if(m=="to"){m=100}}h.pct=parseInt(m,10);n.push(h)}}Ext.Array.sort(n,k.sorter);j=n.length;for(e=0;e0},isRunning:function(){return false}});Ext.define("Ext.fx.CubicBezier",{singleton:true,cubicBezierAtTime:function(o,d,b,n,m,i){var j=3*d,l=3*(n-d)-j,a=1-j-l,h=3*b,k=3*(m-b)-h,p=1-h-k;function g(q){return((a*q+l)*q+j)*q}function c(q,s){var r=e(q,s);return((p*r+k)*r+h)*r}function e(q,y){var w,v,t,r,u,s;for(t=q,s=0;s<8;s++){r=g(t)-q;if(Math.abs(r)v){return v}while(wr){w=t}else{v=t}t=(v-w)/2+w}return t}return c(o,1/(200*i))},cubicBezier:function(b,e,a,c){var d=function(g){return Ext.fx.CubicBezier.cubicBezierAtTime(g,b,e,a,c,1)};d.toCSS3=function(){return"cubic-bezier("+[b,e,a,c].join(",")+")"};d.reverse=function(){return Ext.fx.CubicBezier.cubicBezier(1-a,1-c,1-b,1-e)};return d}});Ext.ns("Ext.fx");Ext.require("Ext.fx.CubicBezier",function(){var e=Math,h=e.PI,d=e.pow,b=e.sin,g=e.sqrt,a=e.abs,c=1.70158;Ext.fx.Easing={};Ext.apply(Ext.fx.Easing,{linear:function(i){return i},ease:function(l){var i=0.07813-l/2,m=-0.25,o=g(0.0066+i*i),r=o-i,k=d(a(r),1/3)*(r<0?-1:1),p=-o-i,j=d(a(p),1/3)*(p<0?-1:1),s=k+j+0.25;return d(1-s,2)*3*s*0.1+(1-s)*3*s*s+s*s*s},easeIn:function(i){return d(i,1.7)},easeOut:function(i){return d(i,0.48)},easeInOut:function(r){var l=0.48-r/1.04,k=g(0.1734+l*l),i=k-l,p=d(a(i),1/3)*(i<0?-1:1),o=-k-l,m=d(a(o),1/3)*(o<0?-1:1),j=p+m+0.5;return(1-j)*3*j*j+j*j*j},backIn:function(i){return i*i*((c+1)*i-c)},backOut:function(i){i=i-1;return i*i*((c+1)*i+c)+1},elasticIn:function(k){if(k===0||k===1){return k}var j=0.3,i=j/4;return d(2,-10*k)*b((k-i)*(2*h)/j)+1},elasticOut:function(i){return 1-Ext.fx.Easing.elasticIn(1-i)},bounceIn:function(i){return 1-Ext.fx.Easing.bounceOut(1-i)},bounceOut:function(m){var j=7.5625,k=2.75,i;if(m<(1/k)){i=j*m*m}else{if(m<(2/k)){m-=(1.5/k);i=j*m*m+0.75}else{if(m<(2.5/k)){m-=(2.25/k);i=j*m*m+0.9375}else{m-=(2.625/k);i=j*m*m+0.984375}}}return i}});Ext.apply(Ext.fx.Easing,{"back-in":Ext.fx.Easing.backIn,"back-out":Ext.fx.Easing.backOut,"ease-in":Ext.fx.Easing.easeIn,"ease-out":Ext.fx.Easing.easeOut,"elastic-in":Ext.fx.Easing.elasticIn,"elastic-out":Ext.fx.Easing.elasticIn,"bounce-in":Ext.fx.Easing.bounceIn,"bounce-out":Ext.fx.Easing.bounceOut,"ease-in-out":Ext.fx.Easing.easeInOut})});Ext.define("Ext.draw.Color",{colorToHexRe:/(.*?)rgb\((\d+),\s*(\d+),\s*(\d+)\)/,rgbRe:/\s*rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)\s*/,hexRe:/\s*#([0-9a-fA-F][0-9a-fA-F]?)([0-9a-fA-F][0-9a-fA-F]?)([0-9a-fA-F][0-9a-fA-F]?)\s*/,lightnessFactor:0.2,constructor:function(d,c,a){var b=this,e=Ext.Number.constrain;b.r=e(d,0,255);b.g=e(c,0,255);b.b=e(a,0,255)},getRed:function(){return this.r},getGreen:function(){return this.g},getBlue:function(){return this.b},getRGB:function(){var a=this;return[a.r,a.g,a.b]},getHSL:function(){var j=this,a=j.r/255,i=j.g/255,k=j.b/255,m=Math.max(a,i,k),d=Math.min(a,i,k),n=m-d,e,o=0,c=0.5*(m+d);if(d!=m){o=(c<0.5)?n/(m+d):n/(2-m-d);if(a==m){e=60*(i-k)/n}else{if(i==m){e=120+60*(k-a)/n}else{e=240+60*(a-i)/n}}if(e<0){e+=360}if(e>=360){e-=360}}return[e,o,c]},getLighter:function(b){var a=this.getHSL();b=b||this.lightnessFactor;a[2]=Ext.Number.constrain(a[2]+b,0,1);return this.fromHSL(a[0],a[1],a[2])},getDarker:function(a){a=a||this.lightnessFactor;return this.getLighter(-a)},toString:function(){var h=this,c=Math.round,e=c(h.r).toString(16),d=c(h.g).toString(16),a=c(h.b).toString(16);e=(e.length==1)?"0"+e:e;d=(d.length==1)?"0"+d:d;a=(a.length==1)?"0"+a:a;return["#",e,d,a].join("")},toHex:function(b){if(Ext.isArray(b)){b=b[0]}if(!Ext.isString(b)){return""}if(b.substr(0,1)==="#"){return b}var e=this.colorToHexRe.exec(b),g,d,a,c;if(Ext.isArray(e)){g=parseInt(e[2],10);d=parseInt(e[3],10);a=parseInt(e[4],10);c=a|(d<<8)|(g<<16);return e[1]+"#"+("000000"+c.toString(16)).slice(-6)}else{return b}},fromString:function(i){var c,e,d,a,h=parseInt;if((i.length==4||i.length==7)&&i.substr(0,1)==="#"){c=i.match(this.hexRe);if(c){e=h(c[1],16)>>0;d=h(c[2],16)>>0;a=h(c[3],16)>>0;if(i.length==4){e+=(e*16);d+=(d*16);a+=(a*16)}}}else{c=i.match(this.rgbRe);if(c){e=c[1];d=c[2];a=c[3]}}return(typeof e=="undefined")?undefined:new Ext.draw.Color(e,d,a)},getGrayscale:function(){return this.r*0.3+this.g*0.59+this.b*0.11},fromHSL:function(g,o,d){var a,b,c,e,k=[],n=Math.abs,j=Math.floor;if(o==0||g==null){k=[d,d,d]}else{g/=60;a=o*(1-n(2*d-1));b=a*(1-n(g-2*j(g/2)-1));c=d-a/2;switch(j(g)){case 0:k=[a,b,0];break;case 1:k=[b,a,0];break;case 2:k=[0,a,b];break;case 3:k=[0,b,a];break;case 4:k=[b,0,a];break;case 5:k=[a,0,b];break}k=[k[0]+c,k[1]+c,k[2]+c]}return new Ext.draw.Color(k[0]*255,k[1]*255,k[2]*255)}},function(){var a=this.prototype;this.addStatics({fromHSL:function(){return a.fromHSL.apply(a,arguments)},fromString:function(){return a.fromString.apply(a,arguments)},toHex:function(){return a.toHex.apply(a,arguments)}})});Ext.define("Ext.draw.Draw",{singleton:true,requires:["Ext.draw.Color"],pathToStringRE:/,?([achlmqrstvxz]),?/gi,pathCommandRE:/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,pathValuesRE:/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,stopsRE:/^(\d+%?)$/,radian:Math.PI/180,availableAnimAttrs:{along:"along",blur:null,"clip-rect":"csv",cx:null,cy:null,fill:"color","fill-opacity":null,"font-size":null,height:null,opacity:null,path:"path",r:null,rotation:"csv",rx:null,ry:null,scale:"csv",stroke:"color","stroke-opacity":null,"stroke-width":null,translation:"csv",width:null,x:null,y:null},is:function(b,a){a=String(a).toLowerCase();return(a=="object"&&b===Object(b))||(a=="undefined"&&typeof b==a)||(a=="null"&&b===null)||(a=="array"&&Array.isArray&&Array.isArray(b))||(Object.prototype.toString.call(b).toLowerCase().slice(8,-1))==a},ellipsePath:function(b){var a=b.attr;return Ext.String.format("M{0},{1}A{2},{3},0,1,1,{0},{4}A{2},{3},0,1,1,{0},{1}z",a.x,a.y-a.ry,a.rx,a.ry,a.y+a.ry)},rectPath:function(b){var a=b.attr;if(a.radius){return Ext.String.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z",a.x+a.radius,a.y,a.width-a.radius*2,a.radius,-a.radius,a.height-a.radius*2,a.radius*2-a.width,a.radius*2-a.height)}else{return Ext.String.format("M{0},{1}L{2},{1},{2},{3},{0},{3}z",a.x,a.y,a.width+a.x,a.height+a.y)}},path2string:function(){return this.join(",").replace(Ext.draw.Draw.pathToStringRE,"$1")},pathToString:function(a){return a.join(",").replace(Ext.draw.Draw.pathToStringRE,"$1")},parsePathString:function(a){if(!a){return null}var d={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},c=[],b=this;if(b.is(a,"array")&&b.is(a[0],"array")){c=b.pathClone(a)}if(!c.length){String(a).replace(b.pathCommandRE,function(g,e,j){var i=[],h=e.toLowerCase();j.replace(b.pathValuesRE,function(l,k){k&&i.push(+k)});if(h=="m"&&i.length>2){c.push([e].concat(Ext.Array.splice(i,0,2)));h="l";e=(e=="m")?"l":"L"}while(i.length>=d[h]){c.push([e].concat(Ext.Array.splice(i,0,d[h])));if(!d[h]){break}}})}c.toString=b.path2string;return c},mapPath:function(l,g){if(!g){return l}var h,e,c,k,a,d,b;l=this.path2curve(l);for(c=0,k=l.length;c7){h[b].shift();e=h[b];while(e.length){Ext.Array.splice(h,b++,0,["C"].concat(Ext.Array.splice(e,0,6)))}Ext.Array.erase(h,b,1);c=h.length;b--}a=h[b];g=a.length;j.x=a[g-2];j.y=a[g-1];j.bx=parseFloat(a[g-4])||j.x;j.by=parseFloat(a[g-3])||j.y}return h},interpolatePaths:function(r,l){var j=this,d=j.pathToAbsolute(r),m=j.pathToAbsolute(l),n={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},b=function(p,s){if(p[s].length>7){p[s].shift();var t=p[s];while(t.length){Ext.Array.splice(p,s++,0,["C"].concat(Ext.Array.splice(t,0,6)))}Ext.Array.erase(p,s,1);o=Math.max(d.length,m.length||0)}},c=function(v,u,s,p,t){if(v&&u&&v[t][0]=="M"&&u[t][0]!="M"){Ext.Array.splice(u,t,0,["M",p.x,p.y]);s.bx=0;s.by=0;s.x=v[t][1];s.y=v[t][2];o=Math.max(d.length,m.length||0)}},h,o,g,q,e,k;for(h=0,o=Math.max(d.length,m.length||0);h1){ac=X(ac);J=ac*J;H=ac*H}d=J*J;T=H*H;W=(o==j?-1:1)*X(w((d*T-d*P*P-T*Q*Q)/(d*P*P+T*Q*Q)));E=W*J*P/H+(v+u)/2;D=W*-H*Q/J+(ah+ag)/2;n=p(((ah-D)/H).toFixed(7));m=p(((ag-D)/H).toFixed(7));n=vm){n=n-e*2}if(!j&&m>n){m=m-e*2}}else{n=C[0];m=C[1];E=C[2];D=C[3]}s=m-n;if(w(s)>G){F=m;I=u;q=ag;m=n+G*(j&&m>n?1:-1);u=E+J*V(m);ag=D+H*a(m);O=z.arc2curve(u,ag,J,H,B,0,j,I,q,[m,F,E,D])}s=m-n;l=V(n);af=a(n);g=V(m);ae=a(m);R=L.tan(s/4);U=4/3*J*R;S=4/3*H*R;ad=[v,ah];ab=[v+U*af,ah-S*l];aa=[u+U*ae,ag-S*g];Y=[u,ag];ab[0]=2*ad[0]-ab[0];ab[1]=2*ad[1]-ab[1];if(C){return[ab,aa,Y].concat(O)}else{O=[ab,aa,Y].concat(O).join().split(",");N=[];M=O.length;for(Z=0;Z(a[1]-c[1])*(b[0]-c[0])},intersectIntersection:function(n,m,g,d){var c=[],b=g[0]-d[0],a=g[1]-d[1],k=n[0]-m[0],i=n[1]-m[1],l=g[0]*d[1]-g[1]*d[0],j=n[0]*m[1]-n[1]*m[0],h=1/(b*i-a*k);c[0]=(l*k-j*b)*h;c[1]=(l*i-j*a)*h;return c},intersect:function(o,c){var n=this,k=0,m=c.length,h=c[m-1],q=o,g,r,l,p,a,b,d;for(;k0){v.push(g)}}else{j=t-3*q+3*n-m;p=2*(t-q-q+n);h=t-q;u=p*p-4*j*h;e=j+j;if(u===0){g=p/e;if(g<1&&g>0){v.push(g)}}else{if(u>0){w=Math.sqrt(u);g=(w+p)/e;if(g<1&&g>0){v.push(g)}g=(p-w)/e;if(g<1&&g>0){v.push(g)}}}}k=Math.min(t,m);o=Math.max(t,m);for(l=0;l=d&&j>=u)||(j<=d&&j<=u)){h=l=r}else{h=g((k-e)/m(j-d));if(dr){c-=p}h+=c;l+=c;o=k-t*a(h);n=j+t*b(h);x=k+s*a(l);w=j+s*b(l);if((j>d&&nd)){o+=m(d-n)*(o-k)/(n-j);n=d}if((j>u&&wu)){x-=m(u-w)*(x-k)/(w-j);w=u}return{x1:o,y1:n,x2:x,y2:w}},smooth:function(a,r){var q=this.path2curve(a),e=[q[0]],k=q[0][1],h=q[0][2],s,u,v=1,l=q.length,g=1,n=k,m=h,c=0,b=0,A,z,w,o,t,p,d;for(;v=b.x&&a<=(b.x+b.width)&&c>=b.y&&c<=(b.y+b.height))},parseGradient:function(k){var e=this,g=k.type||"linear",c=k.angle||0,i=e.radian,l=k.stops,a=[],j,b,h,d;if(g=="linear"){b=[0,0,Math.cos(c*i),Math.sin(c*i)];h=1/(Math.max(Math.abs(b[2]),Math.abs(b[3]))||1);b[2]*=h;b[3]*=h;if(b[2]<0){b[0]=-b[2];b[2]=0}if(b[3]<0){b[1]=-b[3];b[3]=0}}for(j in l){if(l.hasOwnProperty(j)&&e.stopsRE.test(j)){d={offset:parseInt(j,10),color:Ext.draw.Color.toHex(l[j].color)||"#ffffff",opacity:l[j].opacity||1};a.push(d)}}Ext.Array.sort(a,e.sorter);if(g=="linear"){return{id:k.id,type:g,vector:b,stops:a}}else{return{id:k.id,type:g,centerX:k.centerX,centerY:k.centerY,focalX:k.focalX,focalY:k.focalY,radius:k.radius,vector:b,stops:a}}}});Ext.define("Ext.fx.PropertyHandler",{requires:["Ext.draw.Draw"],statics:{defaultHandler:{pixelDefaultsRE:/width|height|top$|bottom$|left$|right$/i,unitRE:/^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/,scrollRE:/^scroll/i,computeDelta:function(j,c,a,g,i){a=(typeof a=="number")?a:1;var h=this.unitRE,d=h.exec(j),b,e;if(d){j=d[1];e=d[2];if(!this.scrollRE.test(i)&&!e&&this.pixelDefaultsRE.test(i)){e="px"}}j=+j||0;d=h.exec(c);if(d){c=d[1];e=d[2]||e}c=+c||0;b=(g!=null)?g:j;return{from:j,delta:(c-b)*a,units:e}},get:function(o,b,a,n,k){var m=o.length,d=[],e,h,l,c,g;for(e=0;e=d){l=d;a=true}if(i.reverse){l=d-l}for(e in k){if(k.hasOwnProperty(e)){j=k[e];h=a?1:c(l/d);g[e]=b[e].set(j,h)}}i.frameCount++;return g},lastFrame:function(){var c=this,a=c.iterations,b=c.currentIteration;b++;if(b0},isRunning:function(){return this.paused===false&&this.running===true&&this.isAnimator!==true}});Ext.enableFx=true;Ext.define("Ext.dd.DragDrop",{requires:["Ext.dd.DragDropManager"],constructor:function(c,a,b){if(c){this.init(c,a,b)}},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true},moveOnly:false,unlock:function(){this.locked=false},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(a,b){},startDrag:function(a,b){},b4Drag:function(a){},onDrag:function(a){},onDragEnter:function(a,b){},b4DragOver:function(a){},onDragOver:function(a,b){},b4DragOut:function(a){},onDragOut:function(a,b){},b4DragDrop:function(a){},onDragDrop:function(a,b){},onInvalidDrop:function(a){},b4EndDrag:function(a){},endDrag:function(a){},b4MouseDown:function(a){},onMouseDown:function(a){},onMouseUp:function(a){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(i,g,n){if(Ext.isNumber(g)){g={left:g,right:g,top:g,bottom:g}}g=g||this.defaultPadding;var k=Ext.get(this.getEl()).getBox(),a=Ext.get(i),m=a.getScroll(),j,d=a.dom,l,h,e;if(d==document.body){j={x:m.left,y:m.top,width:Ext.Element.getViewWidth(),height:Ext.Element.getViewHeight()}}else{l=a.getXY();j={x:l[0],y:l[1],width:d.clientWidth,height:d.clientHeight}}h=k.y-j.y;e=k.x-j.x;this.resetConstraints();this.setXConstraint(e-(g.left||0),j.width-e-k.width-(g.right||0),this.xTickSize);this.setYConstraint(h-(g.top||0),j.height-h-k.height-(g.bottom||0),this.yTickSize)},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id)}return this._domRef},getDragEl:function(){return Ext.getDom(this.dragElId)},init:function(c,a,b){this.initTarget(c,a,b);Ext.EventManager.on(this.id,"mousedown",this.handleMouseDown,this)},initTarget:function(c,a,b){this.config=b||{};this.DDMInstance=Ext.dd.DragDropManager;this.groups={};if(typeof c!=="string"){c=Ext.id(c)}this.id=c;this.addToGroup((a)?a:"default");this.handleElId=c;this.setDragElId(c);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable()},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false)},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable()},setPadding:function(c,a,d,b){if(!a&&0!==a){this.padding=[c,c,c,c]}else{if(!d&&0!==d){this.padding=[c,a,c,a]}else{this.padding=[c,a,d,b]}}},setInitPosition:function(d,c){var e=this.getEl(),b,a,g;if(!this.DDMInstance.verifyEl(e)){return}b=d||0;a=c||0;g=Ext.Element.getXY(e);this.initPageX=g[0]-b;this.initPageY=g[1]-a;this.lastPageX=g[0];this.lastPageY=g[1];this.setStartPosition(g)},setStartPosition:function(b){var a=b||Ext.Element.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=a[0];this.startPageY=a[1]},addToGroup:function(a){this.groups[a]=true;this.DDMInstance.regDragDrop(this,a)},removeFromGroup:function(a){if(this.groups[a]){delete this.groups[a]}this.DDMInstance.removeDDFromGroup(this,a)},setDragElId:function(a){this.dragElId=a},setHandleElId:function(a){if(typeof a!=="string"){a=Ext.id(a)}this.handleElId=a;this.DDMInstance.regHandle(this.id,a)},setOuterHandleElId:function(a){if(typeof a!=="string"){a=Ext.id(a)}Ext.EventManager.on(a,"mousedown",this.handleMouseDown,this);this.setHandleElId(a);this.hasOuterHandles=true},unreg:function(){Ext.EventManager.un(this.id,"mousedown",this.handleMouseDown,this);this._domRef=null;this.DDMInstance._remove(this)},destroy:function(){this.unreg()},isLocked:function(){return(this.DDMInstance.isLocked()||this.locked)},handleMouseDown:function(b,a){if(this.primaryButtonOnly&&b.button!=0){return}if(this.isLocked()){return}this.DDMInstance.refreshCache(this.groups);if(this.hasOuterHandles||this.DDMInstance.isOverTarget(b.getPoint(),this)){if(this.clickValidator(b)){this.setStartPosition();this.b4MouseDown(b);this.onMouseDown(b);this.DDMInstance.handleMouseDown(b,this);this.DDMInstance.stopEvent(b)}}},clickValidator:function(b){var a=b.getTarget();return(this.isValidHandleChild(a)&&(this.id==this.handleElId||this.DDMInstance.handleWasClicked(a,this.id)))},addInvalidHandleType:function(a){var b=a.toUpperCase();this.invalidHandleTypes[b]=b},addInvalidHandleId:function(a){if(typeof a!=="string"){a=Ext.id(a)}this.invalidHandleIds[a]=a},addInvalidHandleClass:function(a){this.invalidHandleClasses.push(a)},removeInvalidHandleType:function(a){var b=a.toUpperCase();delete this.invalidHandleTypes[b]},removeInvalidHandleId:function(a){if(typeof a!=="string"){a=Ext.id(a)}delete this.invalidHandleIds[a]},removeInvalidHandleClass:function(b){for(var c=0,a=this.invalidHandleClasses.length;c=this.minX;b=b-a){if(!c[b]){this.xTicks[this.xTicks.length]=b;c[b]=true}}for(b=this.initPageX;b<=this.maxX;b=b+a){if(!c[b]){this.xTicks[this.xTicks.length]=b;c[b]=true}}Ext.Array.sort(this.xTicks,this.DDMInstance.numericSort)},setYTicks:function(d,a){this.yTicks=[];this.yTickSize=a;var c={},b;for(b=this.initPageY;b>=this.minY;b=b-a){if(!c[b]){this.yTicks[this.yTicks.length]=b;c[b]=true}}for(b=this.initPageY;b<=this.maxY;b=b+a){if(!c[b]){this.yTicks[this.yTicks.length]=b;c[b]=true}}Ext.Array.sort(this.yTicks,this.DDMInstance.numericSort)},setXConstraint:function(c,b,a){this.leftConstraint=c;this.rightConstraint=b;this.minX=this.initPageX-c;this.maxX=this.initPageX+b;if(a){this.setXTicks(this.initPageX,a)}this.constrainX=true},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks()},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0},setYConstraint:function(a,c,b){this.topConstraint=a;this.bottomConstraint=c;this.minY=this.initPageY-a;this.maxY=this.initPageY+c;if(b){this.setYTicks(this.initPageY,b)}this.constrainY=true},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var b=(this.maintainOffset)?this.lastPageX-this.initPageX:0,a=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(b,a)}else{this.setInitPosition()}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize)}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)}},getTick:function(h,d){if(!d){return h}else{if(d[0]>=h){return d[0]}else{var b,a,c,g,e;for(b=0,a=d.length;b=h){g=h-d[b];e=d[c]-h;return(e>g)?d[b]:d[c]}}return d[d.length-1]}}},toString:function(){return("DragDrop "+this.id)}});Ext.define("Ext.dd.DD",{extend:"Ext.dd.DragDrop",requires:["Ext.dd.DragDropManager"],constructor:function(c,a,b){if(c){this.init(c,a,b)}},scroll:true,autoOffset:function(c,b){var a=c-this.startPageX,d=b-this.startPageY;this.setDelta(a,d)},setDelta:function(b,a){this.deltaX=b;this.deltaY=a},setDragElPos:function(c,b){var a=this.getDragEl();this.alignElWithMouse(a,c,b)},alignElWithMouse:function(b,e,c){var g=this.getTargetCoord(e,c),d=b.dom?b:Ext.fly(b,"_dd"),l=d.getSize(),i=Ext.Element,j,a,k,h;if(!this.deltaSetXY){j=this.cachedViewportSize={width:i.getDocumentWidth(),height:i.getDocumentHeight()};a=[Math.max(0,Math.min(g.x,j.width-l.width)),Math.max(0,Math.min(g.y,j.height-l.height))];d.setXY(a);k=d.getLocalX();h=d.getLocalY();this.deltaSetXY=[k-g.x,h-g.y]}else{j=this.cachedViewportSize;d.setLeftTop(Math.max(0,Math.min(g.x+this.deltaSetXY[0],j.width-l.width)),Math.max(0,Math.min(g.y+this.deltaSetXY[1],j.height-l.height)))}this.cachePosition(g.x,g.y);this.autoScroll(g.x,g.y,b.offsetHeight,b.offsetWidth);return g},cachePosition:function(b,a){if(b){this.lastPageX=b;this.lastPageY=a}else{var c=Ext.Element.getXY(this.getEl());this.lastPageX=c[0];this.lastPageY=c[1]}},autoScroll:function(l,k,e,m){if(this.scroll){var n=Ext.Element.getViewHeight(),b=Ext.Element.getViewWidth(),p=this.DDMInstance.getScrollTop(),d=this.DDMInstance.getScrollLeft(),j=e+k,o=m+l,i=(n+p-k-this.deltaY),g=(b+d-l-this.deltaX),c=40,a=(document.all)?80:30;if(j>n&&i0&&k-pb&&g0&&l-dthis.maxX){a=this.maxX}}if(this.constrainY){if(dthis.maxY){d=this.maxY}}a=this.getTick(a,this.xTicks);d=this.getTick(d,this.yTicks);return{x:a,y:d}},applyConfig:function(){this.callParent();this.scroll=(this.config.scroll!==false)},b4MouseDown:function(a){this.autoOffset(a.getPageX(),a.getPageY())},b4Drag:function(a){this.setDragElPos(a.getPageX(),a.getPageY())},toString:function(){return("DD "+this.id)}});Ext.define("Ext.dd.DDProxy",{extend:"Ext.dd.DD",statics:{dragElId:"ygddfdiv"},constructor:function(c,a,b){if(c){this.init(c,a,b);this.initFrame()}},resizeFrame:true,centerFrame:false,createFrame:function(){var b=this,a=document.body,d,c;if(!a||!a.firstChild){setTimeout(function(){b.createFrame()},50);return}d=this.getDragEl();if(!d){d=document.createElement("div");d.id=this.dragElId;c=d.style;c.position="absolute";c.visibility="hidden";c.cursor="move";c.border="2px solid #aaa";c.zIndex=999;a.insertBefore(d,a.firstChild)}},initFrame:function(){this.createFrame()},applyConfig:function(){this.callParent();this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId)},showFrame:function(e,d){var c=this.getEl(),a=this.getDragEl(),b=a.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(b.width,10)/2),Math.round(parseInt(b.height,10)/2))}this.setDragElPos(e,d);Ext.fly(a).show()},_resizeProxy:function(){if(this.resizeFrame){var a=this.getEl();Ext.fly(this.getDragEl()).setSize(a.offsetWidth,a.offsetHeight)}},b4MouseDown:function(b){var a=b.getPageX(),c=b.getPageY();this.autoOffset(a,c);this.setDragElPos(a,c)},b4StartDrag:function(a,b){this.showFrame(a,b)},b4EndDrag:function(a){Ext.fly(this.getDragEl()).hide()},endDrag:function(c){var b=this.getEl(),a=this.getDragEl();a.style.visibility="";this.beforeMove();b.style.visibility="hidden";Ext.dd.DDM.moveToEl(b,a);a.style.visibility="hidden";b.style.visibility="";this.afterDrag()},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id)}});Ext.define("Ext.dd.StatusProxy",{extend:"Ext.Component",animRepair:false,childEls:["ghost"],renderTpl:['
'],constructor:function(a){var b=this;a=a||{};Ext.apply(b,{hideMode:"visibility",hidden:true,floating:true,id:b.id||Ext.id(),cls:Ext.baseCSSPrefix+"dd-drag-proxy "+this.dropNotAllowed,shadow:a.shadow||false,renderTo:Ext.getDetachedBody()});b.callParent(arguments);this.dropStatus=this.dropNotAllowed},dropAllowed:Ext.baseCSSPrefix+"dd-drop-ok",dropNotAllowed:Ext.baseCSSPrefix+"dd-drop-nodrop",setStatus:function(a){a=a||this.dropNotAllowed;if(this.dropStatus!=a){this.el.replaceCls(this.dropStatus,a);this.dropStatus=a}},reset:function(b){var c=this,a=Ext.baseCSSPrefix+"dd-drag-proxy ";c.el.replaceCls(a+c.dropAllowed,a+c.dropNotAllowed);c.dropStatus=c.dropNotAllowed;if(b){c.ghost.update("")}},update:function(a){if(typeof a=="string"){this.ghost.update(a)}else{this.ghost.update("");a.style.margin="0";this.ghost.dom.appendChild(a)}var b=this.ghost.dom.firstChild;if(b){Ext.fly(b).setStyle("float","none")}},getGhost:function(){return this.ghost},hide:function(a){this.callParent();if(a){this.reset(true)}},stop:function(){if(this.anim&&this.anim.isAnimated&&this.anim.isAnimated()){this.anim.stop()}},sync:function(){this.el.sync()},repair:function(c,d,a){var b=this;b.callback=d;b.scope=a;if(c&&b.animRepair!==false){b.el.addCls(Ext.baseCSSPrefix+"dd-drag-repair");b.el.hideUnders(true);b.anim=b.el.animate({duration:b.repairDuration||500,easing:"ease-out",to:{x:c[0],y:c[1]},stopAnimation:true,callback:b.afterRepair,scope:b})}else{b.afterRepair()}},afterRepair:function(){var a=this;a.hide(true);a.el.removeCls(Ext.baseCSSPrefix+"dd-drag-repair");if(typeof a.callback=="function"){a.callback.call(a.scope||a)}delete a.callback;delete a.scope}});Ext.define("Ext.dd.DragSource",{extend:"Ext.dd.DDProxy",requires:["Ext.dd.StatusProxy","Ext.dd.DragDropManager"],dropAllowed:Ext.baseCSSPrefix+"dd-drop-ok",dropNotAllowed:Ext.baseCSSPrefix+"dd-drop-nodrop",animRepair:true,repairHighlightColor:"c3daf9",constructor:function(b,a){this.el=Ext.get(b);if(!this.dragData){this.dragData={}}Ext.apply(this,a);if(!this.proxy){this.proxy=new Ext.dd.StatusProxy({id:this.el.id+"-drag-status-proxy",animRepair:this.animRepair})}this.callParent([this.el.dom,this.ddGroup||this.group,{dragElId:this.proxy.id,resizeFrame:false,isTarget:false,scroll:this.scroll===true}]);this.dragging=false},getDragData:function(a){return this.dragData},onDragEnter:function(c,d){var b=Ext.dd.DragDropManager.getDDById(d),a;this.cachedTarget=b;if(this.beforeDragEnter(b,c,d)!==false){if(b.isNotifyTarget){a=b.notifyEnter(this,c,this.dragData);this.proxy.setStatus(a)}else{this.proxy.setStatus(this.dropAllowed)}if(this.afterDragEnter){this.afterDragEnter(b,c,d)}}},beforeDragEnter:function(b,a,c){return true},onDragOver:function(c,d){var b=this.cachedTarget||Ext.dd.DragDropManager.getDDById(d),a;if(this.beforeDragOver(b,c,d)!==false){if(b.isNotifyTarget){a=b.notifyOver(this,c,this.dragData);this.proxy.setStatus(a)}if(this.afterDragOver){this.afterDragOver(b,c,d)}}},beforeDragOver:function(b,a,c){return true},onDragOut:function(b,c){var a=this.cachedTarget||Ext.dd.DragDropManager.getDDById(c);if(this.beforeDragOut(a,b,c)!==false){if(a.isNotifyTarget){a.notifyOut(this,b,this.dragData)}this.proxy.reset();if(this.afterDragOut){this.afterDragOut(a,b,c)}}this.cachedTarget=null},beforeDragOut:function(b,a,c){return true},onDragDrop:function(b,c){var a=this.cachedTarget||Ext.dd.DragDropManager.getDDById(c);if(this.beforeDragDrop(a,b,c)!==false){if(a.isNotifyTarget){if(a.notifyDrop(this,b,this.dragData)!==false){this.onValidDrop(a,b,c)}else{this.onInvalidDrop(a,b,c)}}else{this.onValidDrop(a,b,c)}if(this.afterDragDrop){this.afterDragDrop(a,b,c)}}delete this.cachedTarget},beforeDragDrop:function(b,a,c){return true},onValidDrop:function(b,a,c){this.hideProxy();if(this.afterValidDrop){this.afterValidDrop(b,a,c)}},getRepairXY:function(b,a){return this.el.getXY()},onInvalidDrop:function(b,a,c){if(!a){a=b;b=null;c=a.getTarget().id}this.beforeInvalidDrop(b,a,c);if(this.cachedTarget){if(this.cachedTarget.isNotifyTarget){this.cachedTarget.notifyOut(this,a,this.dragData)}this.cacheTarget=null}this.proxy.repair(this.getRepairXY(a,this.dragData),this.afterRepair,this);if(this.afterInvalidDrop){this.afterInvalidDrop(a,c)}},afterRepair:function(){var a=this;if(Ext.enableFx){a.el.highlight(a.repairHighlightColor)}a.dragging=false},beforeInvalidDrop:function(b,a,c){return true},handleMouseDown:function(b){if(this.dragging){return}var a=this.getDragData(b);if(a&&this.onBeforeDrag(a,b)!==false){this.dragData=a;this.proxy.stop();this.callParent(arguments)}},onBeforeDrag:function(a,b){return true},onStartDrag:Ext.emptyFn,alignElWithMouse:function(){this.proxy.ensureAttachedToBody(true);return this.callParent(arguments)},startDrag:function(a,b){this.proxy.reset();this.proxy.hidden=false;this.dragging=true;this.proxy.update("");this.onInitDrag(a,b);this.proxy.show()},onInitDrag:function(a,c){var b=this.el.dom.cloneNode(true);b.id=Ext.id();this.proxy.update(b);this.onStartDrag(a,c);return true},getProxy:function(){return this.proxy},hideProxy:function(){this.proxy.hide();this.proxy.reset(true);this.dragging=false},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups)},b4EndDrag:function(a){},endDrag:function(a){this.onEndDrag(this.dragData,a)},onEndDrag:function(a,b){},autoOffset:function(a,b){this.setDelta(-12,-20)},destroy:function(){this.callParent();Ext.destroy(this.proxy)}});Ext.define("Ext.panel.Proxy",{alternateClassName:"Ext.dd.PanelProxy",moveOnDrag:true,constructor:function(a,b){var c=this;c.panel=a;c.id=c.panel.id+"-ddproxy";Ext.apply(c,b)},insertProxy:true,setStatus:Ext.emptyFn,reset:Ext.emptyFn,update:Ext.emptyFn,stop:Ext.emptyFn,sync:Ext.emptyFn,getEl:function(){return this.ghost.el},getGhost:function(){return this.ghost},getProxy:function(){return this.proxy},hide:function(){var a=this;if(a.ghost){if(a.proxy){a.proxy.remove();delete a.proxy}a.panel.unghost(null,a.moveOnDrag);delete a.ghost}},show:function(){var b=this,a;if(!b.ghost){a=b.panel.getSize();b.panel.el.setVisibilityMode(Ext.Element.DISPLAY);b.ghost=b.panel.ghost();if(b.insertProxy){b.proxy=b.panel.el.insertSibling({cls:Ext.baseCSSPrefix+"panel-dd-spacer"});b.proxy.setSize(a)}}},repair:function(b,c,a){this.hide();Ext.callback(c,a||this)},moveProxy:function(a,b){if(this.proxy){a.insertBefore(this.proxy.dom,b)}}});Ext.define("Ext.panel.DD",{extend:"Ext.dd.DragSource",requires:["Ext.panel.Proxy"],constructor:function(b,a){var c=this;c.panel=b;c.dragData={panel:b};c.panelProxy=new Ext.panel.Proxy(b,a);c.proxy=c.panelProxy.proxy;c.callParent([b.el,a]);c.setupEl(b)},setupEl:function(a){var c=this,d=a.header,b=a.body;if(d){c.setHandleElId(d.id);b=d.el}if(b){b.setStyle("cursor","move");c.scroll=false}else{a.on("boxready",c.setupEl,c,{single:true})}},showFrame:Ext.emptyFn,startDrag:Ext.emptyFn,b4StartDrag:function(a,b){this.panelProxy.show()},b4MouseDown:function(b){var a=b.getPageX(),c=b.getPageY();this.autoOffset(a,c)},onInitDrag:function(a,b){this.onStartDrag(a,b);return true},createFrame:Ext.emptyFn,getDragEl:function(a){return this.panelProxy.ghost.el.dom},endDrag:function(a){this.panelProxy.hide();this.panel.saveState()},autoOffset:function(a,b){a-=this.startPageX;b-=this.startPageY;this.setDelta(a,b)},onInvalidDrop:function(c,b,d){var a=this;a.beforeInvalidDrop(c,b,d);if(a.cachedTarget){if(a.cachedTarget.isNotifyTarget){a.cachedTarget.notifyOut(a,b,a.dragData)}a.cacheTarget=null}if(a.afterInvalidDrop){a.afterInvalidDrop(b,d)}}});Ext.define("Ext.util.Memento",(function(){function d(i,h,j,g){i[g?g+j:j]=h[j]}function c(h,g,i){delete h[i]}function e(k,j,l,i){var g=i?i+l:l,h=k[g];if(h||k.hasOwnProperty(g)){a(j,l,h)}}function a(h,i,g){if(Ext.isDefined(g)){h[i]=g}else{delete h[i]}}function b(h,m,l,i,j){if(m){if(Ext.isArray(i)){var k,g=i.length;for(k=0;ka){if(j.anchorToTarget){j.defaultAlign="r-l";if(j.mouseOffset){j.mouseOffset[0]*=-1}}j.anchor="right";return j.getTargetXY()}if(b[1]i){if(j.anchorToTarget){j.defaultAlign="b-t";if(j.mouseOffset){j.mouseOffset[1]*=-1}}j.anchor="bottom";return j.getTargetXY()}}j.anchorCls=Ext.baseCSSPrefix+"tip-anchor-"+j.getAnchorPosition();j.anchorEl.addCls(j.anchorCls);j.targetCounter=0;return b}else{d=j.getMouseOffset();return(j.targetXY)?[j.targetXY[0]+d[0],j.targetXY[1]+d[1]]:d}},getMouseOffset:function(){var a=this,b=a.anchor?[0,0]:[15,18];if(a.mouseOffset){b[0]+=a.mouseOffset[0];b[1]+=a.mouseOffset[1]}return b},getAnchorPosition:function(){var b=this,a;if(b.anchor){b.tipAnchor=b.anchor.charAt(0)}else{a=b.defaultAlign.match(/^([a-z]+)-([a-z]+)(\?)?$/);b.tipAnchor=a[1].charAt(0)}switch(b.tipAnchor){case"t":return"top";case"b":return"bottom";case"r":return"right"}return"left"},getAnchorAlign:function(){switch(this.anchor){case"top":return"tl-bl";case"left":return"tl-tr";case"right":return"tr-tl";default:return"bl-tl"}},getOffsets:function(){var c=this,d,b,a=c.getAnchorPosition().charAt(0);if(c.anchorToTarget&&!c.trackMouse){switch(a){case"t":b=[0,9];break;case"b":b=[0,-13];break;case"r":b=[-13,0];break;default:b=[9,0];break}}else{switch(a){case"t":b=[-15-c.anchorOffset,30];break;case"b":b=[-19-c.anchorOffset,-13-c.el.dom.offsetHeight];break;case"r":b=[-15-c.el.dom.offsetWidth,-13-c.anchorOffset];break;default:b=[25,-13-c.anchorOffset];break}}d=c.getMouseOffset();b[0]+=d[0];b[1]+=d[1];return b},onTargetOver:function(c){var b=this,a;if(b.disabled||c.within(b.target.dom,true)){return}a=c.getTarget(b.delegate);if(a){b.triggerElement=a;b.clearTimer("hide");b.targetXY=c.getXY();b.delayShow()}},delayShow:function(){var a=this;if(a.hidden&&!a.showTimer){if(Ext.Date.getElapsed(a.lastActive)b){e=d[a];for(c in e){if(e[c]){e[c].hide(true)}}}}});Ext.define("Ext.layout.component.Draw",{alias:"layout.draw",extend:"Ext.layout.component.Auto",type:"draw",measureContentWidth:function(b){var c=b.target,a=b.getPaddingInfo(),d=this.getBBox(b);if(!c.viewBox){if(c.autoSize){return d.width+a.width}else{return d.x+d.width+a.width}}else{if(b.heightModel.shrinkWrap){return a.width}else{return d.width/d.height*(b.getProp("contentHeight")-a.height)+a.width}}},measureContentHeight:function(b){var c=b.target,a=b.getPaddingInfo(),d=this.getBBox(b);if(!b.target.viewBox){if(c.autoSize){return d.height+a.height}else{return d.y+d.height+a.height}}else{if(b.widthModel.shrinkWrap){return a.height}else{return d.height/d.width*(b.getProp("contentWidth")-a.width)+a.height}}},getBBox:function(a){var b=a.surfaceBBox;if(!b){b=a.target.surface.items.getBBox();if(b.width===-Infinity&&b.height===-Infinity){b.width=b.height=b.x=b.y=0}a.surfaceBBox=b}return b},publishInnerWidth:function(b,a){b.setContentWidth(a-b.getFrameInfo().width,true)},publishInnerHeight:function(b,a){b.setContentHeight(a-b.getFrameInfo().height,true)},finishedLayout:function(c){var b=c.props,a=c.getPaddingInfo();this.owner.setSurfaceSize(b.contentWidth-a.width,b.contentHeight-a.height);this.callParent(arguments)}});Ext.define("Ext.draw.CompositeSprite",{extend:"Ext.util.MixedCollection",mixins:{animate:"Ext.util.Animate"},autoDestroy:false,isCompositeSprite:true,constructor:function(a){var b=this;a=a||{};Ext.apply(b,a);b.addEvents("mousedown","mouseup","mouseover","mouseout","click");b.id=Ext.id(null,"ext-sprite-group-");b.callParent()},onClick:function(a){this.fireEvent("click",a)},onMouseUp:function(a){this.fireEvent("mouseup",a)},onMouseDown:function(a){this.fireEvent("mousedown",a)},onMouseOver:function(a){this.fireEvent("mouseover",a)},onMouseOut:function(a){this.fireEvent("mouseout",a)},attachEvents:function(b){var a=this;b.on({scope:a,mousedown:a.onMouseDown,mouseup:a.onMouseUp,mouseover:a.onMouseOver,mouseout:a.onMouseOut,click:a.onClick})},add:function(b,c){var a=this.callParent(arguments);this.attachEvents(a);return a},insert:function(a,b,c){return this.callParent(arguments)},remove:function(b){var a=this;b.un({scope:a,mousedown:a.onMouseDown,mouseup:a.onMouseUp,mouseover:a.onMouseOver,mouseout:a.onMouseOut,click:a.onClick});return a.callParent(arguments)},getBBox:function(){var e=0,n,j,k=this.items,g=this.length,h=Infinity,c=h,m=-h,b=h,l=-h,d,a;for(;e0){b=d.first();d.remove(b);a.remove(b,c)}}d.clearListeners()}});Ext.define("Ext.draw.Surface",{mixins:{observable:"Ext.util.Observable"},requires:["Ext.draw.CompositeSprite"],uses:["Ext.draw.engine.Svg","Ext.draw.engine.Vml","Ext.draw.engine.SvgExporter","Ext.draw.engine.ImageExporter"],separatorRe:/[, ]+/,statics:{create:function(b,d){d=d||["Svg","Vml"];var c=0,a=d.length,e;for(;c1,h,b,c,e,k;if(a||Ext.isArray(g[0])){h=a?g:g[0];b=[];for(c=0,e=h.length;ch){b=i-1}else{if(a-1;b--){this.remove(a[b],d)}},onRemove:Ext.emptyFn,onDestroy:Ext.emptyFn,applyViewBox:function(){var d=this,l=d.viewBox,a=d.width||1,h=d.height||1,g,e,j,b,i,c,k;if(l&&(a||h)){g=l.x;e=l.y;j=l.width;b=l.height;i=h/b;c=a/j;k=Math.min(c,i);if(j*k0.85){e=e.getDarker(0.3)}else{if(h>0.7){e=e.getDarker(0.15)}}}}c.colors=[e.getDarker(0.3).toString(),e.getDarker(0.15).toString(),e.toString(),e.getLighter(0.15).toString(),e.getLighter(0.3).toString()];delete c.baseColor}if(c.colors){a=c.colors.slice();s=b.markerThemes;r=b.seriesThemes;j=a.length;b.colors=a;for(;m0?s:s+m,y:k>0?r:r+k,width:j(m),height:j(k)};u.mask.updateBox(u.maskSelection);u.mask.show();u.maskSprite.setAttributes({hidden:true},true)}else{if(o=="horizontal"){l=["M",s,h,"L",s,k]}else{if(o=="vertical"){l=["M",i,r,"L",m,r]}else{l=["M",s,h,"L",s,k,"M",i,r,"L",m,r]}}u.maskSprite.setAttributes({path:l,fill:u.maskMouseDown?u.maskSprite.stroke:false,"stroke-width":o===true?1:3,hidden:false},true)}},onMouseLeave:function(b){var a=this;a.mouseMoved=false;a.mouseDown=false;a.maskMouseDown=false;a.mask.hide();a.maskSprite.hide(true)}});Ext.define("Ext.chart.Navigation",{constructor:function(){this.originalStore=this.store},setZoom:function(k){var j=this,g=j.axes,a=g.items,e,h,c,p=j.chartBBox,o=1/p.width,b=1/p.height,d={x:k.x*o,y:k.y*b,width:k.width*o,height:k.height*b},l,n,m;for(e=0,h=a.length;e0.5?0.2:0.8;F.setAttributes({fill:String(m.fromHSL.apply({},B))},true)}}E++;y++}}l=q.length;while(l>c){K.push(c);c++}}o.hideLabels(K)},hideLabels:function(b){var a=this.labelsGroup,c=!!b&&b.length;if(!a){return}if(c===false){c=a.getCount();while(c--){a.getAt(c).hide(true)}}else{while(c--){a.getAt(b[c]).hide(true)}}}});Ext.define("Ext.chart.TipSurface",{extend:"Ext.draw.Component",spriteArray:false,renderFirst:true,constructor:function(a){this.callParent([a]);if(a.sprites){this.spriteArray=[].concat(a.sprites);delete a.sprites}},onRender:function(){var c=this,b=0,a=0,d,e;this.callParent(arguments);e=c.spriteArray;if(c.renderFirst&&e){c.renderFirst=false;for(a=e.length;bs){u=s}if(y0){u=0}if(y=y){y=u+1}return{min:u,max:y}},calcEnds:function(){var h=this,d=h.getRange(),g=d.min,a=d.max,c,i,e,b;c=(Ext.isNumber(h.majorTickSteps)?h.majorTickSteps+1:h.steps);i=!(Ext.isNumber(h.maximum)&&Ext.isNumber(h.minimum)&&Ext.isNumber(h.majorTickSteps)&&h.majorTickSteps>0);e=Ext.draw.Draw.snapEnds(g,a,c,i);if(Ext.isNumber(h.maximum)){e.to=h.maximum;b=true}if(Ext.isNumber(h.minimum)){e.from=h.minimum;b=true}if(h.adjustMaximumByMajorUnit){e.to=Math.ceil(e.to/e.step)*e.step;b=true}if(h.adjustMinimumByMajorUnit){e.from=Math.floor(e.from/e.step)*e.step;b=true}if(b){e.steps=Math.ceil((e.to-e.from)/e.step)}h.prevMin=(g==a?0:g);h.prevMax=a;return e},drawAxis:function(r){var C=this,s,j=C.x,h=C.y,A=C.chart.maxGutter[0],z=C.chart.maxGutter[1],e=C.dashSize,w=C.minorTickSteps||0,v=C.minorTickSteps||0,b=C.length,D=C.position,g=[],m=false,c=C.applyData(),d=c.step,t=c.steps,q=c.from,a=c.to,u,p,o,n,l,k,B;if(C.hidden||isNaN(d)||(q>a)){return}C.from=c.from;C.to=c.to;if(D=="left"||D=="right"){p=Math.floor(j)+0.5;n=["M",p,h,"l",0,-b];u=b-(z*2)}else{o=Math.floor(h)+0.5;n=["M",j,o,"l",b,0];u=b-(A*2)}B=t&&u/t;l=Math.max(w+1,0);k=Math.max(v+1,0);if(C.type=="Numeric"||C.type=="Time"){m=true;C.labels=[c.from]}if(D=="right"||D=="left"){o=h-z;p=j-((D=="left")*e*2);while(o>=h-z-u){n.push("M",p,Math.floor(o)+0.5,"l",e*2+1,0);if(o!=h-z){for(s=1;s=0){if(!this.sprites){for(e=0;e<=l;e++){n=a.add({type:"path",path:["M",d+(m-c)*o(e/l*g-g),b+(m-c)*k(e/l*g-g),"L",d+m*o(e/l*g-g),b+m*k(e/l*g-g),"Z"],stroke:"#ccc"});n.setAttributes({hidden:false},true);h.push(n)}}else{h=this.sprites;for(e=0;e<=l;e++){h[e].setAttributes({path:["M",d+(m-c)*o(e/l*g-g),b+(m-c)*k(e/l*g-g),"L",d+m*o(e/l*g-g),b+m*k(e/l*g-g),"Z"],stroke:"#ccc"},true)}}}this.sprites=h;this.drawLabel();if(this.title){this.drawTitle()}},drawTitle:function(){var e=this,d=e.chart,a=d.surface,g=d.chartBBox,c=e.titleSprite,b;if(!c){e.titleSprite=c=a.add({type:"text",zIndex:2})}c.setAttributes(Ext.apply({text:e.title},e.label||{}),true);b=c.getBBox();c.setAttributes({x:g.x+(g.width/2)-(b.width/2),y:g.y+g.height-(b.height/2)-4},true)},setTitle:function(a){this.title=a;this.drawTitle()},drawLabel:function(){var l=this.chart,p=l.surface,b=l.chartBBox,j=b.x+(b.width/2),h=b.y+b.height,m=this.margin||10,d=Math.min(b.width,2*b.height)/2+2*m,u=Math.round,n=[],g,s=this.maximum||0,k=this.minimum||0,r=this.steps,q=0,v,t=Math.PI,c=Math.cos,a=Math.sin,e=this.label,o=e.renderer||function(i){return i};if(!this.labelArray){for(q=0;q<=r;q++){v=(q===0||q===r)?7:0;g=p.add({type:"text",text:o(u(k+q/r*(s-k))),x:j+d*c(q/r*t-t),y:h+d*a(q/r*t-t)-v,"text-anchor":"middle","stroke-width":0.2,zIndex:10,stroke:"#333"});g.setAttributes({hidden:false},true);n.push(g)}}else{n=this.labelArray;for(q=0;q<=r;q++){v=(q===0||q===r)?7:0;n[q].setAttributes({text:o(u(k+q/r*(s-k))),x:j+d*c(q/r*t-t),y:h+d*a(q/r*t-t)-v},true)}}this.labelArray=n}});Ext.define("Ext.chart.axis.Numeric",{extend:"Ext.chart.axis.Axis",alternateClassName:"Ext.chart.NumericAxis",type:"numeric",alias:"axis.numeric",uses:["Ext.data.Store"],constructor:function(c){var d=this,a=!!(c.label&&c.label.renderer),b;d.callParent([c]);b=d.label;if(c.constrain==null){d.constrain=(c.minimum!=null&&c.maximum!=null)}if(!a){b.renderer=function(e){return d.roundToDecimal(e,d.decimals)}}},roundToDecimal:function(a,c){var b=Math.pow(10,c||0);return Math.round(a*b)/b},minimum:NaN,maximum:NaN,constrain:true,decimals:2,scale:"linear",doConstrain:function(){var t=this,b=t.chart.store,h=b.data.items,s,u,a,e=t.chart.series.items,j=t.fields,c=j.length,g=t.calcEnds(),m=g.from,p=g.to,q,n,r=false,k,v=[],o;for(q=0,n=e.length;q+p){o=false;break}}if(o){v.push(a)}}t.chart.substore=Ext.create("Ext.data.Store",{model:b.model});t.chart.substore.loadData(v)},position:"left",adjustMaximumByMajorUnit:false,adjustMinimumByMajorUnit:false,processView:function(){var a=this,b=a.constrain;if(b){a.doConstrain()}},applyData:function(){this.callParent();return this.calcEnds()}});Ext.define("Ext.chart.axis.Radial",{extend:"Ext.chart.axis.Abstract",position:"radial",alias:"axis.radial",drawAxis:function(u){var m=this.chart,a=m.surface,t=m.chartBBox,q=m.store,b=q.getCount(),e=t.x+(t.width/2),c=t.y+(t.height/2),p=Math.min(t.width,t.height)/2,k=[],r,o=this.steps,g,d,h=Math.PI*2,s=Math.cos,n=Math.sin;if(this.sprites&&!m.resizing){this.drawLabel();return}if(!this.sprites){for(g=1;g<=o;g++){r=a.add({type:"circle",x:e,y:c,radius:Math.max(p*g/o,0),stroke:"#ccc"});r.setAttributes({hidden:false},true);k.push(r)}for(g=0;g>0),e)}}}},processView:function(){var a=this;if(a.fromDate){a.minimum=+a.fromDate}if(a.toDate){a.maximum=+a.toDate}if(a.constrain){a.doConstrain()}},calcEnds:function(){var c=this,a,b=c.step;if(b){a=c.getRange();a=Ext.draw.Draw.snapEndsByDateAndStep(new Date(a.min),new Date(a.max),Ext.isNumber(b)?[Date.MILLI,b]:b);if(c.minimum){a.from=c.minimum}if(c.maximum){a.to=c.maximum}a.step=(a.to-a.from)/a.steps;return a}else{return c.callParent(arguments)}}});Ext.define("Ext.chart.series.Series",{mixins:{observable:"Ext.util.Observable",labels:"Ext.chart.Label",highlights:"Ext.chart.Highlight",tips:"Ext.chart.Tip",callouts:"Ext.chart.Callout"},type:null,title:null,showInLegend:true,renderer:function(e,a,c,d,b){return c},shadowAttributes:null,animating:false,constructor:function(a){var b=this;if(a){Ext.apply(b,a)}b.shadowGroups=[];b.mixins.labels.constructor.call(b,a);b.mixins.highlights.constructor.call(b,a);b.mixins.tips.constructor.call(b,a);b.mixins.callouts.constructor.call(b,a);b.addEvents({scope:b,itemmouseover:true,itemmouseout:true,itemmousedown:true,itemmouseup:true,mouseleave:true,afterdraw:true,titlechange:true});b.mixins.observable.constructor.call(b,a);b.on({scope:b,itemmouseover:b.onItemMouseOver,itemmouseout:b.onItemMouseOut,mouseleave:b.onMouseLeave});if(b.style){Ext.apply(b.seriesStyle,b.style)}},eachRecord:function(c,b){var a=this.chart;(a.substore||a.store).each(c,b)},getRecordCount:function(){var b=this.chart,a=b.substore||b.store;return a?a.getCount():0},isExcluded:function(a){var b=this.__excludes;return !!(b&&b[a])},setBBox:function(a){var e=this,c=e.chart,b=c.chartBBox,g=a?0:c.maxGutter[0],d=a?0:c.maxGutter[1],h,i;h={x:b.x,y:b.y,width:b.width,height:b.height};e.clipBox=h;i={x:(h.x+g)-(c.zoom.x*c.zoom.width),y:(h.y+d)-(c.zoom.y*c.zoom.height),width:(h.width-(g*2))*c.zoom.width,height:(h.height-(d*2))*c.zoom.height};e.bbox=i},onAnimate:function(b,a){var c=this;b.stopAnimation();if(c.animating){return b.animate(Ext.applyIf(a,c.chart.animate))}else{c.animating=true;return b.animate(Ext.apply(Ext.applyIf(a,c.chart.animate),{listeners:{afteranimate:function(){c.animating=false;c.fireEvent("afterrender")}}}))}},getGutters:function(){return[0,0]},onItemMouseOver:function(b){var a=this;if(b.series===a){if(a.highlight){a.highlightItem(b)}if(a.tooltip){a.showTip(b)}}},onItemMouseOut:function(b){var a=this;if(b.series===a){a.unHighlightItem();if(a.tooltip){a.hideTip(b)}}},onMouseLeave:function(){var a=this;a.unHighlightItem();if(a.tooltip){a.hideTip()}},getItemForPoint:function(a,j){if(!this.items||!this.items.length||this.seriesIsHidden){return null}var g=this,b=g.items,h=g.bbox,e,c,d;if(!Ext.draw.Draw.withinBox(a,j,h)){return null}for(c=0,d=b.length;c0){c=Infinity;l=-c;for(e=0,h=d.length;el){l=b}if(bl){l=r}if(r0){b=Infinity;l=-b;for(d=0,h=c.length;dl){l=n}if(m-1){b="top"}else{if(Ext.Array.indexOf(d,"bottom")>-1){b="bottom"}else{if(l.get("top")&&l.get("bottom")){for(h=0,k=o.length;h-1){a="left"}else{if(Ext.Array.indexOf(d,"right")>-1){a="right"}else{if(l.get("left")&&l.get("right")){for(h=0,k=e.length;hk.width)&&j.areas){H=j.shrink(z,D,k.width);z=H.x;D=H.y}return{bbox:k,minX:C,minY:B,xValues:z,yValues:D,xScale:h,yScale:E,areasLen:A}},getPaths:function(){var w=this,m=w.chart,c=m.getChartStore(),e=true,g=w.getBounds(),a=g.bbox,n=w.items=[],v=[],b,d=0,p=[],s,j,k,h,q,t,l,z,r,u,o;j=g.xValues.length;for(s=0;sa.x+a.width)?(j-(j+n-a.x-a.width)):j;h=h-ma.y+a.height)?(h-(h+m-a.y-a.height)):h;if(u.chart.animate&&!u.chart.resizing){g.show(true);u.onAnimate(g,{to:{x:j,y:h}})}else{g.setAttributes({x:j,y:h},true);if(r){u.animation.on("afteranimate",function(){g.show(true)})}else{g.show(true)}}},onPlaceCallout:function(m,r,J,G,F,d,k){var M=this,s=M.chart,D=s.surface,H=s.resizing,L=M.callouts,t=M.items,v=(G==0)?false:t[G-1].point,z=(G==t.length-1)?false:t[G+1].point,c=J.point,A,g,N,K,o,q,b=m.label.getBBox(),I=30,C=10,B=3,h,e,j,w,u,E=M.clipRect,n,l;if(!v){v=c}if(!z){z=c}K=(z[1]-v[1])/(z[0]-v[0]);o=(c[1]-v[1])/(c[0]-v[0]);q=(z[1]-c[1])/(z[0]-c[0]);g=Math.sqrt(1+K*K);A=[1/g,K/g];N=[-A[1],A[0]];if(o>0&&q<0&&N[1]<0||o<0&&q>0&&N[1]>0){N[0]*=-1;N[1]*=-1}else{if(Math.abs(o)Math.abs(q)&&N[0]>0){N[0]*=-1;N[1]*=-1}}n=c[0]+N[0]*I;l=c[1]+N[1]*I;h=n+(N[0]>0?0:-(b.width+2*B));e=l-b.height/2-B;j=b.width+2*B;w=b.height+2*B;if(h(E[0]+E[2])){N[0]*=-1}if(e(E[1]+E[3])){N[1]*=-1}n=c[0]+N[0]*I;l=c[1]+N[1]*I;h=n+(N[0]>0?0:-(b.width+2*B));e=l-b.height/2-B;j=b.width+2*B;w=b.height+2*B;m.lines.setAttributes({path:["M",c[0],c[1],"L",n,l,"Z"]},true);m.box.setAttributes({x:h,y:e,width:j,height:w},true);m.label.setAttributes({x:n+(N[0]>0?B:-(b.width+B)),y:l},true);for(u in m){m[u].show(true)}},isItemInPoint:function(j,h,m,c){var g=this,b=m.pointsUp,d=m.pointsDown,q=Math.abs,o=false,l=false,e=Infinity,a,n,k;for(a=0,n=b.length;aq(j-k[0])){e=q(j-k[0]);o=true;if(l){++a}}if(!o||(o&&l)){k=b[a-1];if(h>=k[1]&&(!d.length||h<=(d[a-1][1]))){m.storeIndex=a-1;m.storeField=g.yField[c];m.storeItem=g.chart.store.getAt(a-1);m._points=d.length?[k,d[a-1]]:[k];return true}else{break}}}return false},highlightSeries:function(){var a,c,b;if(this._index!==undefined){a=this.areas[this._index];if(a.__highlightAnim){a.__highlightAnim.paused=true}a.__highlighted=true;a.__prevOpacity=a.__prevOpacity||a.attr.opacity||1;a.__prevFill=a.__prevFill||a.attr.fill;a.__prevLineWidth=a.__prevLineWidth||a.attr.lineWidth;b=Ext.draw.Color.fromString(a.__prevFill);c={lineWidth:(a.__prevLineWidth||0)+2};if(b){c.fill=b.getLighter(0.2).toString()}else{c.opacity=Math.max(a.__prevOpacity-0.3,0)}if(this.chart.animate){a.__highlightAnim=new Ext.fx.Anim(Ext.apply({target:a,to:c},this.chart.animate))}else{a.setAttributes(c,true)}}},unHighlightSeries:function(){var a;if(this._index!==undefined){a=this.areas[this._index];if(a.__highlightAnim){a.__highlightAnim.paused=true}if(a.__highlighted){a.__highlighted=false;a.__highlightAnim=new Ext.fx.Anim({target:a,to:{fill:a.__prevFill,opacity:a.__prevOpacity,lineWidth:a.__prevLineWidth}})}}},highlightItem:function(c){var b=this,a,d;if(!c){this.highlightSeries();return}a=c._points;d=a.length==2?["M",a[0][0],a[0][1],"L",a[1][0],a[1][1]]:["M",a[0][0],a[0][1],"L",a[0][0],b.bbox.y+b.bbox.height];b.highlightSprite.setAttributes({path:d,hidden:false},true)},unHighlightItem:function(a){if(!a){this.unHighlightSeries()}if(this.highlightSprite){this.highlightSprite.hide(true)}},hideAll:function(a){var b=this;a=(isNaN(b._index)?a:b._index)||0;b.__excludes[a]=true;b.areas[a].hide(true);b.redraw()},showAll:function(a){var b=this;a=(isNaN(b._index)?a:b._index)||0;b.__excludes[a]=false;b.areas[a].show(true);b.redraw()},redraw:function(){var a=this,b;b=a.chart.legend.rebuild;a.chart.legend.rebuild=false;a.chart.redraw();a.chart.legend.rebuild=b},hide:function(){if(this.areas){var h=this,b=h.areas,d,c,a,g,e;if(b&&b.length){for(d=0,g=b.length;d0)][M]+=n(I)}}w[+(r>0)].push(n(r));w[+(F>0)].push(n(F));g=k.apply(u,w[0]);d=k.apply(u,w[1]);z=(H?q.height-m*2:q.width-h*2)/(d+g);a=a+g*z*(H?-1:1)}else{if(F/r<0){a=a-F*z*(H?-1:1)}}return{bars:v,bbox:q,shrunkBarWidth:C,barsLen:p,groupBarsLen:l,barWidth:t,groupBarWidth:e,scale:z,zero:a,xPadding:h,yPadding:m,signed:F/r<0,minY:F,maxY:r}},getPaths:function(){var v=this,X=v.chart,b=X.getChartStore(),W=b.data.items,V,E,L,G=v.bounds=v.getBounds(),z=v.items=[],P=v.yField,l=v.gutter/100,c=v.groupGutter/100,T=X.animate,N=v.column,x=v.group,m=X.shadow,R=v.shadowGroups,Q=v.shadowAttributes,q=R.length,y=G.bbox,B=G.barWidth,K=G.shrunkBarWidth,n=v.xPadding,r=v.yPadding,S=v.stacked,w=G.barsLen,O=v.colorArrayStyle,h=O&&O.length||0,C=Math,o=C.max,I=C.min,u=C.abs,U,Y,e,J,D,a,k,t,s,p,g,d,F,A,M,H;for(V=0,E=W.length;V1?U:0)%h]};if(N){Ext.apply(s,{height:e,width:o(G.groupBarWidth,0),x:(y.x+n+(B-K)*0.5+V*B*(1+l)+g*G.groupBarWidth*(1+c)*!S),y:a-e})}else{M=(E-1)-V;Ext.apply(s,{height:o(G.groupBarWidth,0),width:e+(a==G.zero),x:a+(a!=G.zero),y:(y.y+r+(B-K)*0.5+M*B*(1+l)+g*G.groupBarWidth*(1+c)*!S+1)})}if(e<0){if(N){s.y=k;s.height=u(e)}else{s.x=k+e;s.width=u(e)}}if(S){if(e<0){k+=e*(N?-1:1)}else{a+=e*(N?-1:1)}J+=u(e);if(e<0){D+=u(e)}}s.x=Math.floor(s.x)+1;H=Math.floor(s.y);if(!Ext.isIE9&&s.y>H){H--}s.y=H;s.width=Math.floor(s.width);s.height=Math.floor(s.height);z.push({series:v,yField:P[U],storeItem:L,value:[L.get(v.xField),Y],attr:s,point:N?[s.x+s.width/2,Y>=0?s.y:s.y+s.height]:[Y>=0?s.x+s.width:s.x,s.y+s.height/2]});if(T&&X.resizing){p=N?{x:s.x,y:G.zero,width:s.width,height:0}:{x:G.zero,y:s.y,width:0,height:s.height};if(m&&(S&&!t||!S)){t=true;for(d=0;d(O>=0?b-u.y:u.y+u.height-b)){p=M}}else{if(c+C>l.height){p=k;G.isOutside=true}}D=l.x+d/2;B=p==q?(b+((c/2+3)*(O>=0?-1:1))):(O>=0?(l.y+((c/2+3)*(p==k?-1:1))):(l.y+l.height+((c/2+3)*(p===k?1:-1))))}else{if(p==k){if(a+E+l.width>(O>=0?u.x+u.width-b:b-u.x)){p=M}}else{if(a+E>l.width){p=k;G.isOutside=true}}D=p==q?(b+((a/2+5)*(O>=0?1:-1))):(O>=0?(l.x+l.width+((a/2+5)*(p===k?1:-1))):(l.x+((a/2+5)*(p===k?-1:1))));B=l.y+d/2}w={x:D,y:B};if(K){w.rotate={x:D,y:B,degrees:270}}if(H&&A){if(F){D=l.x+l.width/2;B=b}else{D=b;B=l.y+l.height/2}G.setAttributes({x:D,y:B},true);if(K){G.setAttributes({rotate:{x:D,y:B,degrees:270}},true)}}if(H){m.onAnimate(G,{to:w})}else{G.setAttributes(Ext.apply(w,{hidden:false}),true)}},getLabelSize:function(g){var k=this.testerLabel,a=this.label,d=Ext.apply({},a,this.seriesLabelStyle||{}),b=a.orientation==="vertical",j,i,e,c;if(!k){k=this.testerLabel=this.chart.surface.add(Ext.apply({type:"text",opacity:0},d))}k.setAttributes({text:g},true);j=k.getBBox();i=j.width;e=j.height;return{width:b?e:i,height:b?i:e}},onAnimate:function(b,a){b.show();return this.callParent(arguments)},isItemInPoint:function(a,d,b){var c=b.sprite.getBBox();return c.x<=a&&c.y<=d&&(c.x+c.width)>=a&&(c.y+c.height)>=d},hideAll:function(a){var e=this.chart.axes,c=e.items,d=c.length,b=0;a=(isNaN(this._index)?a:this._index)||0;if(!this.__excludes){this.__excludes=[]}this.__excludes[a]=true;this.drawSeries();for(b;b180,D=Math.min(q,p)*B,A=Math.max(q,p)*B,o=false;k+=l*d(j);i+=l*a(j);w=k+b.startRho*d(D);h=i+b.startRho*a(D);v=k+b.endRho*d(D);g=i+b.endRho*a(D);u=k+b.startRho*d(A);e=i+b.startRho*a(A);s=k+b.endRho*d(A);c=i+b.endRho*a(A);if(n(w-u)<=z&&n(h-e)<=z){o=true}if(o){return{path:[["M",w,h],["L",v,g],["A",b.endRho,b.endRho,0,+t,1,s,c],["Z"]]}}else{return{path:[["M",w,h],["L",v,g],["A",b.endRho,b.endRho,0,+t,1,s,c],["L",u,e],["A",b.startRho,b.startRho,0,+t,0,w,h],["Z"]]}}},calcMiddle:function(p){var k=this,l=k.rad,o=p.slice,n=k.centerX,m=k.centerY,j=o.startAngle,e=o.endAngle,i=Math.max(("rho" in o)?o.rho:k.radius,k.label.minMargin),h=+k.donut,b=Math.min(j,e)*l,a=Math.max(j,e)*l,d=-(b+(a-b)/2),g=n+(p.endRho+p.startRho)/2*Math.cos(d),c=m-(p.endRho+p.startRho)/2*Math.sin(d);p.middle={x:g,y:c}},drawSeries:function(){var w=this,W=w.chart,b=W.getChartStore(),A=w.group,S=w.chart.animate,D=w.chart.axes.get(0),E=D&&D.minimum||w.minimum||0,I=D&&D.maximum||w.maximum||0,n=w.angleField||w.field||w.xField,M=W.surface,H=W.chartBBox,h=w.rad,c=+w.donut,X={},B=[],m=w.seriesStyle,a=w.seriesLabelStyle,g=w.colorArrayStyle,z=g&&g.length||0,K=W.maxGutter[0],J=W.maxGutter[1],k=Math.cos,s=Math.sin,t,e,d,v,r,C,O,F,G,L,U,T,l,V,x,o,Q,R,q,y,u,P,N;Ext.apply(m,w.style||{});w.setBBox();y=w.bbox;if(w.colorSet){g=w.colorSet;z=g.length}if(!b||!b.getCount()||w.seriesIsHidden){w.hide();w.items=[];return}e=w.centerX=H.x+(H.width/2);d=w.centerY=H.y+H.height;w.radius=Math.min(e-H.x,d-H.y);w.slices=r=[];w.items=B=[];if(!w.value){L=b.getAt(0);w.value=L.get(n)}O=w.value;if(w.needle){P={series:w,value:O,startAngle:-180,endAngle:0,rho:w.radius};u=-180*(1-(O-E)/(I-E));r.push(P)}else{u=-180*(1-(O-E)/(I-E));P={series:w,value:O,startAngle:-180,endAngle:u,rho:w.radius};N={series:w,value:w.maximum-O,startAngle:u,endAngle:0,rho:w.radius};r.push(P,N)}for(U=0,G=r.length;U=g&&b=n.startRho&&k<=n.endRho)},showAll:function(){if(!isNaN(this._index)){this.__excludes[this._index]=false;this.drawSeries()}},getLegendColor:function(a){var b=this;return b.colorArrayStyle[a%b.colorArrayStyle.length]}});Ext.define("Ext.chart.series.Line",{extend:"Ext.chart.series.Cartesian",alternateClassName:["Ext.chart.LineSeries","Ext.chart.LineChart"],requires:["Ext.chart.axis.Axis","Ext.chart.Shape","Ext.draw.Draw","Ext.fx.Anim"],type:"line",alias:"series.line",selectionTolerance:20,showMarkers:true,markerConfig:{},style:{},smooth:false,defaultSmoothness:3,fill:false,constructor:function(c){this.callParent(arguments);var e=this,a=e.chart.surface,g=e.chart.shadow,d,b;c.highlightCfg=Ext.Object.merge({"stroke-width":3},c.highlightCfg);Ext.apply(e,c,{shadowAttributes:[{"stroke-width":6,"stroke-opacity":0.05,stroke:"rgb(0, 0, 0)",translate:{x:1,y:1}},{"stroke-width":4,"stroke-opacity":0.1,stroke:"rgb(0, 0, 0)",translate:{x:1,y:1}},{"stroke-width":2,"stroke-opacity":0.15,stroke:"rgb(0, 0, 0)",translate:{x:1,y:1}}]});e.group=a.getGroup(e.seriesId);if(e.showMarkers){e.markerGroup=a.getGroup(e.seriesId+"-markers")}if(g){for(d=0,b=e.shadowAttributes.length;dau.width){a=an.shrink(aB,ae,au.width);aB=a.x;ae=a.y}an.items=[];l=0;az=aB.length;for(Q=0;Qa.x+a.width)?(j-(j+n-a.x-a.width)):j;h=(h-ma.x+a.width)?(j-(j+n-a.x-a.width)):j;h=h-ma.y+a.height)?(h-(h+m-a.y-a.height)):h}}if(u.chart.animate&&!u.chart.resizing){g.show(true);u.onAnimate(g,{to:{x:j,y:h}})}else{g.setAttributes({x:j,y:h},true);if(r&&u.animation){u.animation.on("afteranimate",function(){g.show(true)})}else{g.show(true)}}},highlightItem:function(){var a=this;a.callParent(arguments);if(a.line&&!a.highlighted){if(!("__strokeWidth" in a.line)){a.line.__strokeWidth=parseFloat(a.line.attr["stroke-width"])||0}if(a.line.__anim){a.line.__anim.paused=true}a.line.__anim=Ext.create("Ext.fx.Anim",{target:a.line,to:{"stroke-width":a.line.__strokeWidth+3}});a.highlighted=true}},unHighlightItem:function(){var a=this;a.callParent(arguments);if(a.line&&a.highlighted){a.line.__anim=Ext.create("Ext.fx.Anim",{target:a.line,to:{"stroke-width":a.line.__strokeWidth}});a.highlighted=false}},onPlaceCallout:function(m,r,J,G,F,d,k){if(!F){return}var M=this,s=M.chart,D=s.surface,H=s.resizing,L=M.callouts,t=M.items,v=G==0?false:t[G-1].point,z=(G==t.length-1)?false:t[G+1].point,c=[+J.point[0],+J.point[1]],A,g,N,K,o,q,I=L.offsetFromViz||30,C=L.offsetToSide||10,B=L.offsetBox||3,h,e,j,w,u,E=M.clipRect,b={width:L.styles.width||10,height:L.styles.height||10},n,l;if(!v){v=c}if(!z){z=c}K=(z[1]-v[1])/(z[0]-v[0]);o=(c[1]-v[1])/(c[0]-v[0]);q=(z[1]-c[1])/(z[0]-c[0]);g=Math.sqrt(1+K*K);A=[1/g,K/g];N=[-A[1],A[0]];if(o>0&&q<0&&N[1]<0||o<0&&q>0&&N[1]>0){N[0]*=-1;N[1]*=-1}else{if(Math.abs(o)Math.abs(q)&&N[0]>0){N[0]*=-1;N[1]*=-1}}n=c[0]+N[0]*I;l=c[1]+N[1]*I;h=n+(N[0]>0?0:-(b.width+2*B));e=l-b.height/2-B;j=b.width+2*B;w=b.height+2*B;if(h(E[0]+E[2])){N[0]*=-1}if(e(E[1]+E[3])){N[1]*=-1}n=c[0]+N[0]*I;l=c[1]+N[1]*I;h=n+(N[0]>0?0:-(b.width+2*B));e=l-b.height/2-B;j=b.width+2*B;w=b.height+2*B;if(s.animate){M.onAnimate(m.lines,{to:{path:["M",c[0],c[1],"L",n,l,"Z"]}});if(m.panel){m.panel.setPosition(h,e,true)}}else{m.lines.setAttributes({path:["M",c[0],c[1],"L",n,l,"Z"]},true);if(m.panel){m.panel.setPosition(h,e)}}for(u in m){m[u].show(true)}},isItemInPoint:function(j,g,A,q){var C=this,n=C.items,s=C.selectionTolerance,k=null,z,c,p,v,h,w,b,t,a,l,B,e,d,o,u,r,D=Math.sqrt,m=Math.abs;c=n[q];z=q&&n[q-1];if(q>=h){z=n[h-1]}p=z&&z.point;v=c&&c.point;w=z?p[0]:v[0]-s;b=z?p[1]:v[1];t=c?v[0]:p[0]+s;a=c?v[1]:p[1];e=D((j-w)*(j-w)+(g-b)*(g-b));d=D((j-t)*(j-t)+(g-a)*(g-a));o=Math.min(e,d);if(o<=s){return o==e?z:c}return false},toggleAll:function(a){var e=this,b,d,g,c;if(!a){Ext.chart.series.Cartesian.prototype.hideAll.call(e)}else{Ext.chart.series.Cartesian.prototype.showAll.call(e)}if(e.line){e.line.setAttributes({hidden:!a},true);if(e.line.shadows){for(b=0,c=e.line.shadows,d=c.length;b1?T:U)%w]}||{}));D=Ext.apply({},o.segment,{slice:r,series:s,storeItem:r.storeItem,index:U});s.calcMiddle(D);if(g){D.shadows=r.shadowAttrs[T]}y[U]=D;if(!z){m=Ext.apply({type:"path",group:x,middle:D.middle},Ext.apply(h,e&&{fill:e[(K>1?T:U)%w]}||{}));z=J.add(Ext.apply(m,o))}r.sprite=r.sprite||[];D.sprite=z;r.sprite.push(z);r.point=[D.middle.x,D.middle.y];if(S){o=s.renderer(z,a.getAt(U),o,U,a);z._to=o;z._animating=true;s.onAnimate(z,{to:o,listeners:{afteranimate:{fn:function(){this._animating=false},scope:z}}})}else{o=s.renderer(z,a.getAt(U),Ext.apply(o,{hidden:false}),U,a);z.setAttributes(o,true)}B+=q}}F=x.getCount();for(U=0;U>0]&&x.getAt(U)){x.getAt(U).hide(true)}}if(g){aa=Q.length;for(E=0;E>0]){for(T=0;T90&&v<270)?v+180:v;h=k.attr.rotation.degrees;if(h!=null&&Math.abs(h-v)>180*0.5){if(v>h){v-=360}else{v+=360}v=v%360}else{v=a(v)}b.rotate={degrees:v,x:b.x,y:b.y};break;default:break}b.translate={x:0,y:0};if(e&&!w&&(s!="rotate"||h!=null)){B.onAnimate(k,{to:b})}else{k.setAttributes(b,true)}k._from=r},onPlaceCallout:function(l,o,z,v,u,d,e){var A=this,q=A.chart,j=A.centerX,h=A.centerY,B=z.middle,b={x:B.x,y:B.y},m=B.x-j,k=B.y-h,c=1,n,g=Math.atan2(k,m||1),a=l.label.getBBox(),w=20,t=10,s=10,r;c=z.endRho+w;n=(z.endRho+z.startRho)/2+(z.endRho-z.startRho)/3;b.x=c*Math.cos(g)+j;b.y=c*Math.sin(g)+h;m=n*Math.cos(g);k=n*Math.sin(g);if(q.animate){A.onAnimate(l.lines,{to:{path:["M",m+j,k+h,"L",b.x,b.y,"Z","M",b.x,b.y,"l",m>0?t:-t,0,"z"]}});A.onAnimate(l.box,{to:{x:b.x+(m>0?t:-(t+a.width+2*s)),y:b.y+(k>0?(-a.height-s/2):(-a.height-s/2)),width:a.width+2*s,height:a.height+2*s}});A.onAnimate(l.label,{to:{x:b.x+(m>0?(t+s):-(t+a.width+s)),y:b.y+(k>0?-a.height/4:-a.height/4)}})}else{l.lines.setAttributes({path:["M",m+j,k+h,"L",b.x,b.y,"Z","M",b.x,b.y,"l",m>0?t:-t,0,"z"]},true);l.box.setAttributes({x:b.x+(m>0?t:-(t+a.width+2*s)),y:b.y+(k>0?(-a.height-s/2):(-a.height-s/2)),width:a.width+2*s,height:a.height+2*s},true);l.label.setAttributes({x:b.x+(m>0?(t+s):-(t+a.width+s)),y:b.y+(k>0?-a.height/4:-a.height/4)},true)}for(r in l){l[r].show(true)}},onAnimate:function(b,a){b.show();return this.callParent(arguments)},isItemInPoint:function(l,j,n,e){var h=this,d=h.centerX,c=h.centerY,p=Math.abs,o=p(l-d),m=p(j-c),g=n.startAngle,a=n.endAngle,k=Math.sqrt(o*o+m*m),b=Math.atan2(j-c,l-d)/h.rad;if(b>h.firstAngle){b-=h.accuracy}return(b<=g&&b>a&&k>=n.startRho&&k<=n.endRho)},hideAll:function(c){var g,b,j,h,e,a,d;c=(isNaN(this._index)?c:this._index)||0;this.__excludes=this.__excludes||[];this.__excludes[c]=true;d=this.slices[c].sprite;for(e=0,a=d.length;ea.x+a.width)?(j-(j+n-a.x-a.width)):j;h=(h-ma.x+a.width)?(j-(j+n-a.x-a.width)):j;h=h-ma.y+a.height)?(h-(h+m-a.y-a.height)):h}}if(!l.animate){g.setAttributes({x:j,y:h},true);g.show(true)}else{if(s){o=t.sprite.getActiveAnimation();if(o){o.on("afteranimate",function(){g.setAttributes({x:j,y:h},true);g.show(true)})}else{g.show(true)}}else{v.onAnimate(g,{to:{x:j,y:h}})}}},onPlaceCallout:function(k,m,B,z,w,c,h){var E=this,n=E.chart,u=n.surface,A=n.resizing,D=E.callouts,o=E.items,b=B.point,F,a=k.label.getBBox(),C=30,t=10,s=3,e,d,g,r,q,v=E.bbox,l,j;F=[Math.cos(Math.PI/4),-Math.sin(Math.PI/4)];l=b[0]+F[0]*C;j=b[1]+F[1]*C;e=l+(F[0]>0?0:-(a.width+2*s));d=j-a.height/2-s;g=a.width+2*s;r=a.height+2*s;if(e(v[0]+v[2])){F[0]*=-1}if(d(v[1]+v[3])){F[1]*=-1}l=b[0]+F[0]*C;j=b[1]+F[1]*C;e=l+(F[0]>0?0:-(a.width+2*s));d=j-a.height/2-s;g=a.width+2*s;r=a.height+2*s;if(n.animate){E.onAnimate(k.lines,{to:{path:["M",b[0],b[1],"L",l,j,"Z"]}},true);E.onAnimate(k.box,{to:{x:e,y:d,width:g,height:r}},true);E.onAnimate(k.label,{to:{x:l+(F[0]>0?s:-(a.width+s)),y:j}},true)}else{k.lines.setAttributes({path:["M",b[0],b[1],"L",l,j,"Z"]},true);k.box.setAttributes({x:e,y:d,width:g,height:r},true);k.label.setAttributes({x:l+(F[0]>0?s:-(a.width+s)),y:j},true)}for(q in k){k[q].show(true)}},onAnimate:function(b,a){b.show();return this.callParent(arguments)},isItemInPoint:function(c,h,e){var b,d=10,a=Math.abs;function g(i){var k=a(i[0]-c),j=a(i[1]-h);return Math.sqrt(k*k+j*j)}b=e.point;return(b[0]-d<=c&&b[0]+d>=c&&b[1]-d<=h&&b[1]+d>=h)}});Ext.define("Ext.layout.container.Table",{alias:["layout.table"],extend:"Ext.layout.container.Container",alternateClassName:"Ext.layout.TableLayout",monitorResize:false,type:"table",clearEl:true,targetCls:Ext.baseCSSPrefix+"table-layout-ct",tableCls:Ext.baseCSSPrefix+"table-layout",cellCls:Ext.baseCSSPrefix+"table-layout-cell",tableAttrs:null,itemSizePolicy:{setsWidth:0,setsHeight:0},getItemSizePolicy:function(a){return this.itemSizePolicy},getLayoutItems:function(){var g=this,b=[],c=g.callParent(),e,a=c.length,d;for(d=0;d=h||n[d]>0){if(d>=h){d=0;a=0;b++;for(c=0;c0){n[c]--}}}else{d++}}m.push({rowIdx:b,cellIdx:a});for(c=l.colspan||1;c;--c){n[d]=l.rowspan||1;++d}++a}return m},getRenderTree:function(){var k=this,h=k.getLayoutItems(),o,p=[],q=Ext.apply({tag:"table",role:"presentation",cls:k.tableCls,cellspacing:0,cn:{tag:"tbody",cn:p}},k.tableAttrs),c=k.tdAttrs,d=k.needsDivWrap(),e,g=h.length,n,m,j,b,a,l;o=k.calculateCells(h);for(e=0;e0){b.create=g;h=true}if(d.length>0){b.update=d;h=true}if(a.length>0){b.destroy=a;h=true}if(h&&e.fireEvent("beforesync",b)!==false){c=c||{};e.proxy.batch(Ext.apply(c,{operations:b,listeners:e.getBatchListeners()}))}return e},getBatchListeners:function(){var b=this,a={scope:b,exception:b.onBatchException};if(b.batchUpdateMode=="operation"){a.operationcomplete=b.onBatchOperationComplete}else{a.complete=b.onBatchComplete}return a},save:function(){return this.sync.apply(this,arguments)},load:function(b){var c=this,a;b=Ext.apply({action:"read",filters:c.filters.items,sorters:c.getSorters()},b);c.lastOptions=b;a=new Ext.data.Operation(b);if(c.fireEvent("beforeload",c,a)!==false){c.loading=true;c.proxy.read(a,c.onProxyLoad,c)}return c},reload:function(a){return this.load(Ext.apply(this.lastOptions,a))},afterEdit:function(a,e){var d=this,b,c;if(d.autoSync&&!d.autoSyncSuspended){for(b=e.length;b--;){if(a.fields.get(e[b]).persist){c=true;break}}if(c){d.sync()}}d.fireEvent("update",d,a,Ext.data.Model.EDIT,e)},afterReject:function(a){this.fireEvent("update",this,a,Ext.data.Model.REJECT,null)},afterCommit:function(a){this.fireEvent("update",this,a,Ext.data.Model.COMMIT,null)},destroyStore:function(){var a=this;if(!a.isDestroyed){if(a.storeId){Ext.data.StoreManager.unregister(a)}a.clearData();a.data=a.tree=a.sorters=a.filters=a.groupers=null;if(a.reader){a.reader.destroyReader()}a.proxy=a.reader=a.writer=null;a.clearListeners();a.isDestroyed=true;if(a.implicitModel){Ext.destroy(a.model)}else{a.model=null}}},doSort:function(a){var b=this;if(b.remoteSort){b.load()}else{b.data.sortBy(a);b.fireEvent("datachanged",b);b.fireEvent("refresh",b)}},clearData:Ext.emptyFn,getCount:Ext.emptyFn,getById:Ext.emptyFn,removeAll:Ext.emptyFn,isLoading:function(){return !!this.loading},suspendAutoSync:function(){this.autoSyncSuspended=true},resumeAutoSync:function(){this.autoSyncSuspended=false}});Ext.define("Ext.data.ResultSet",{loaded:true,count:0,total:0,success:false,constructor:function(a){Ext.apply(this,a);this.totalRecords=this.total;if(a.count===undefined){this.count=this.records.length}}});Ext.define("Ext.data.reader.Reader",{requires:["Ext.data.ResultSet","Ext.XTemplate"],alternateClassName:["Ext.data.Reader","Ext.data.DataReader"],mixins:{observable:"Ext.util.Observable"},totalProperty:"total",successProperty:"success",root:"",implicitIncludes:true,readRecordsOnFailure:true,isReader:true,applyDefaults:true,lastFieldGeneration:null,constructor:function(a){var b=this;b.mixins.observable.constructor.call(b,a);b.fieldCount=0;b.model=Ext.ModelManager.getModel(b.model);b.accessExpressionFn=Ext.Function.bind(b.createFieldAccessExpression,b);if(b.model&&b.model.prototype.fields){b.buildExtractors()}this.addEvents("exception")},setModel:function(a,c){var b=this;b.model=Ext.ModelManager.getModel(a);b.buildExtractors(true);if(c&&b.proxy){b.proxy.setModel(b.model,true)}},read:function(a){var b;if(a){b=a.responseText?this.getResponseData(a):this.readRecords(a)}return b||this.nullResultSet},readRecords:function(c){var d=this,i,b,a,g,e,h,j;if(d.lastFieldGeneration!==d.model.prototype.fields.generation){d.buildExtractors(true)}d.rawData=c;c=d.getData(c);i=true;b=0;a=[];if(d.successProperty){h=d.getSuccess(c);if(h===false||h==="false"){i=false}}if(d.messageProperty){j=d.getMessage(c)}if(d.readRecordsOnFailure||i){g=Ext.isArray(c)?c:d.getRoot(c);if(g){e=g.length}if(d.totalProperty){h=parseInt(d.getTotal(c),10);if(!isNaN(h)){e=h}}if(g){a=d.extractData(g);b=a.length}}return new Ext.data.ResultSet({total:e||b,count:b,records:a,success:i,message:j})},extractData:function(k){var j=this,d=[],b=j.model,a=k.length,e,c,h,g;if(!k.length&&Ext.isObject(k)){k=[k];a=1}for(g=0;g',' ,__field{#} = fields.get("{name}")\n',"",";\n","return function(dest, source, record) {\n",'',' value = {[ this.createFieldAccessExpression(values, "__field" + xindex, "source") ]};\n','',' dest["{name}"] = value === undefined ? __field{#}.convert(__field{#}.defaultValue, record) : __field{#}.convert(value, record);\n',''," if (value === undefined) {\n"," if (me.applyDefaults) {\n",'',' dest["{name}"] = __field{#}.convert(__field{#}.defaultValue, record);\n',"",' dest["{name}"] = __field{#}.defaultValue\n',""," };\n"," } else {\n",'',' dest["{name}"] = __field{#}.convert(value, record);\n',"",' dest["{name}"] = value;\n',""," };",""," if (value !== undefined) {\n",'',' dest["{name}"] = __field{#}.convert(value, record);\n',"",' dest["{name}"] = value;\n',""," }\n","","",'',' if (record && (internalId = {[ this.createFieldAccessExpression({mapping: values.clientIdProp}, null, "source") ]})) {\n',' record.{["internalId"]} = internalId;\n'," }\n","","};"],buildRecordDataExtractor:function(){var c=this,a=c.model.prototype,b={clientIdProp:a.clientIdProperty,fields:a.fields.items};c.recordDataExtractorTemplate.createFieldAccessExpression=c.accessExpressionFn;return Ext.functionFactory(c.recordDataExtractorTemplate.apply(b)).call(c)},destroyReader:function(){var a=this;delete a.proxy;delete a.model;delete a.convertRecordData;delete a.getId;delete a.getTotal;delete a.getSuccess;delete a.getMessage}},function(){var a=this.prototype;Ext.apply(a,{nullResultSet:new Ext.data.ResultSet({total:0,count:0,records:[],success:true}),recordDataExtractorTemplate:new Ext.XTemplate(a.recordDataExtractorTemplate)})});Ext.define("Ext.data.reader.Json",{extend:"Ext.data.reader.Reader",alternateClassName:"Ext.data.JsonReader",alias:"reader.json",root:"",useSimpleAccessors:false,readRecords:function(a){if(a.metaData){this.onMetaChange(a.metaData)}this.jsonData=a;return this.callParent([a])},getResponseData:function(a){var d,b;try{d=Ext.decode(a.responseText);return this.readRecords(d)}catch(c){b=new Ext.data.ResultSet({total:0,count:0,records:[],success:false,message:c.message});this.fireEvent("exception",this,a,b);Ext.Logger.warn("Unable to parse the JSON returned by the server");return b}},buildExtractors:function(){var a=this;a.callParent(arguments);if(a.root){a.getRoot=a.createAccessor(a.root)}else{a.getRoot=function(b){return b}}},extractData:function(a){var e=this.record,d=[],c,b;if(e){c=a.length;if(!c&&Ext.isObject(a)){c=1;a=[a]}for(b=0;b=0){return Ext.functionFactory("obj","return obj"+(b>0?".":"")+c)}}return function(d){return d[c]}}}()),createFieldAccessExpression:(function(){var a=/[\[\.]/;return function(i,d,c){var e=this,g=(i.mapping!==null),h=g?i.mapping:i.name,b,j;if(typeof h==="function"){b=d+".mapping("+c+", this)"}else{if(this.useSimpleAccessors===true||((j=String(h).search(a))<0)){if(!g||isNaN(h)){h='"'+h+'"'}b=c+"["+h+"]"}else{b=c+(j>0?".":"")+h}}return b}}())});Ext.define("Ext.data.writer.Writer",{alias:"writer.base",alternateClassName:["Ext.data.DataWriter","Ext.data.Writer"],writeAllFields:true,nameProperty:"name",isWriter:true,constructor:function(a){Ext.apply(this,a)},write:function(e){var c=e.operation,b=c.records||[],a=b.length,d=0,g=[];for(;d1){e[l]=g.internalId}}else{e[g.idProperty]=g.getId()}return e}});Ext.define("Ext.data.writer.Json",{extend:"Ext.data.writer.Writer",alternateClassName:"Ext.data.JsonWriter",alias:"writer.json",root:undefined,encode:false,allowSingle:true,writeRecords:function(b,c){var a=this.root;if(this.allowSingle&&c.length==1){c=c[0]}if(this.encode){if(a){b.params[a]=Ext.encode(c)}else{}}else{b.jsonData=b.jsonData||{};if(a){b.jsonData[a]=c}else{b.jsonData=c}}return b}});Ext.define("Ext.data.proxy.Server",{extend:"Ext.data.proxy.Proxy",alias:"proxy.server",alternateClassName:"Ext.data.ServerProxy",uses:["Ext.data.Request"],pageParam:"page",startParam:"start",limitParam:"limit",groupParam:"group",groupDirectionParam:"groupDir",sortParam:"sort",filterParam:"filter",directionParam:"dir",simpleSortMode:false,simpleGroupMode:false,noCache:true,cacheString:"_dc",timeout:30000,constructor:function(a){var b=this;a=a||{};b.callParent([a]);b.extraParams=a.extraParams||{};b.api=Ext.apply({},a.api||b.api);b.nocache=b.noCache},create:function(){return this.doRequest.apply(this,arguments)},read:function(){return this.doRequest.apply(this,arguments)},update:function(){return this.doRequest.apply(this,arguments)},destroy:function(){return this.doRequest.apply(this,arguments)},setExtraParam:function(a,b){this.extraParams[a]=b},buildRequest:function(a){var c=this,d=Ext.applyIf(a.params||{},c.extraParams||{}),b;d=Ext.applyIf(d,c.getParams(a));if(a.id!==undefined&&d.id===undefined){d.id=a.id}b=new Ext.data.Request({params:d,action:a.action,records:a.records,operation:a,url:a.url,proxy:c});b.url=c.buildUrl(b);a.request=b;return b},processResponse:function(h,a,c,b,g,i){var e=this,d,j;if(h===true){d=e.getReader();d.applyDefaults=a.action==="read";j=d.read(e.extractResponseData(b));if(j.success!==false){Ext.apply(a,{response:b,resultSet:j});a.commitRecords(j.records);a.setCompleted();a.setSuccessful()}else{a.setException(j.message);e.fireEvent("exception",this,b,a)}}else{e.setException(a,b);e.fireEvent("exception",this,b,a)}if(typeof g=="function"){g.call(i||e,a)}e.afterRequest(c,h)},setException:function(b,a){b.setException({status:a.status,statusText:a.statusText})},extractResponseData:function(a){return a},applyEncoding:function(a){return Ext.encode(a)},encodeSorters:function(d){var b=[],c=d.length,a=0;for(;a0){if(d){t[c]=r[0].property;t[k]=r[0].direction||"ASC"}else{t[c]=u.encodeSorters(r)}}if(e&&a&&a.length>0){if(j){t[e]=a[0].property;t[m]=a[0].direction}else{t[e]=u.encodeSorters(a)}}if(o&&l&&l.length>0){t[o]=u.encodeFilters(l)}return t},buildUrl:function(c){var b=this,a=b.getUrl(c);if(b.noCache){a=Ext.urlAppend(a,Ext.String.format("{0}={1}",b.cacheString,Ext.Date.now()))}return a},getUrl:function(a){return a.url||this.api[a.action]||this.url},doRequest:function(a,c,b){},afterRequest:Ext.emptyFn,onDestroy:function(){Ext.destroy(this.reader,this.writer)}});Ext.define("Ext.data.proxy.Ajax",{requires:["Ext.util.MixedCollection","Ext.Ajax"],extend:"Ext.data.proxy.Server",alias:"proxy.ajax",alternateClassName:["Ext.data.HttpProxy","Ext.data.AjaxProxy"],actionMethods:{create:"POST",read:"GET",update:"POST",destroy:"POST"},doRequest:function(a,e,b){var d=this.getWriter(),c=this.buildRequest(a,e,b);if(a.allowWrite()){c=d.write(c)}Ext.apply(c,{headers:this.headers,timeout:this.timeout,scope:this,callback:this.createRequestCallback(c,a,e,b),method:this.getMethod(c),disableCaching:false});Ext.Ajax.request(c);return c},getMethod:function(a){return this.actionMethods[a.action]},createRequestCallback:function(d,a,e,b){var c=this;return function(h,i,g){c.processResponse(i,a,d,g,e,b)}}},function(){Ext.data.HttpProxy=this});Ext.define("Ext.data.proxy.Client",{extend:"Ext.data.proxy.Proxy",alternateClassName:"Ext.data.ClientProxy",isSynchronous:true,clear:function(){}});Ext.define("Ext.data.proxy.Memory",{extend:"Ext.data.proxy.Client",alias:"proxy.memory",alternateClassName:"Ext.data.MemoryProxy",constructor:function(a){this.callParent([a]);this.setReader(this.reader)},updateOperation:function(b,g,d){var c=0,e=b.getRecords(),a=e.length;for(c;c0){for(;a.first&&b;b--){a.removeAtKey(a.first.key)}}}});Ext.define("Ext.data.Store",{extend:"Ext.data.AbstractStore",alias:"store.store",requires:["Ext.data.StoreManager","Ext.data.Model","Ext.data.proxy.Ajax","Ext.data.proxy.Memory","Ext.data.reader.Json","Ext.data.writer.Json","Ext.util.LruCache"],uses:["Ext.ModelManager","Ext.util.Grouper"],remoteSort:false,remoteFilter:false,remoteGroup:false,groupField:undefined,groupDir:"ASC",trailingBufferZone:25,leadingBufferZone:200,pageSize:undefined,currentPage:1,clearOnPageLoad:true,loading:false,sortOnFilter:true,buffered:false,purgePageCount:5,clearRemovedOnLoad:true,defaultPageSize:25,addRecordsOptions:{addRecords:true},statics:{recordIdFn:function(a){return a.internalId},recordIndexFn:function(a){return a.index}},onClassExtended:function(b,d,a){var c=d.model,e;if(typeof c=="string"){e=a.onBeforeCreated;a.onBeforeCreated=function(){var h=this,g=arguments;Ext.require(c,function(){e.apply(h,g)})}}},constructor:function(b){b=Ext.Object.merge({},b);var d=this,g=b.groupers||d.groupers,a=b.groupField||d.groupField,c,e;e=b.data||d.data;d.data=new Ext.util.MixedCollection(false,Ext.data.Store.recordIdFn);if(e){d.inlineData=e;delete b.data}if(!g&&a){g=[{property:a,direction:b.groupDir||d.groupDir}]}delete b.groupers;d.groupers=new Ext.util.MixedCollection();d.groupers.addAll(d.decodeGroupers(g));this.callParent([b]);if(d.buffered){d.pageMap=new d.PageMap({pageSize:d.pageSize,maxSize:d.purgePageCount,listeners:{clear:d.cancelAllPrefetches,scope:d}});d.pageRequests={};d.sortOnLoad=false;d.filterOnLoad=false}if(d.remoteGroup){d.remoteSort=true}if(d.groupers.items.length&&!d.remoteGroup){d.sort(d.groupers.items,"prepend",false)}c=d.proxy;e=d.inlineData;if(!d.buffered&&!d.pageSize){d.pageSize=d.defaultPageSize}if(e){if(c instanceof Ext.data.proxy.Memory){c.data=e;d.read()}else{d.add.apply(d,[e])}d.sort();delete d.inlineData}else{if(d.autoLoad){Ext.defer(d.load,10,d,[typeof d.autoLoad==="object"?d.autoLoad:undefined])}}},destroyStore:function(){this.callParent(arguments);if(this.pageMap){this.pageMap.clear()}},onBeforeSort:function(){var a=this.groupers;if(a.getCount()>0){this.sort(a.items,"prepend",false)}},decodeGroupers:function(e){if(!Ext.isArray(e)){if(e===undefined){e=[]}else{e=[e]}}var d=e.length,g=Ext.util.Grouper,b,c,a=[];for(c=0;c0},fireGroupChange:function(){this.fireEvent("groupchange",this,this.groupers)},getGroups:function(b){var d=this.data.items,a=d.length,c=[],k={},g,h,j,e;for(e=0;e-1){b=e.phantom!==true;if(!k&&b){e.removedFrom=g;h.removed.push(e)}e.unjoin(h);h.data.remove(e);j=j||b;h.fireEvent("remove",h,e,g)}}h.fireEvent("datachanged",h);if(!k&&h.autoSync&&j&&!h.autoSyncSuspended){h.sync()}},removeAt:function(b){var a=this.getAt(b);if(a){this.remove(a)}},load:function(a){var b=this;a=a||{};if(typeof a=="function"){a={callback:a}}a.groupers=a.groupers||b.groupers.items;a.page=a.page||b.currentPage;a.start=(a.start!==undefined)?a.start:(a.page-1)*b.pageSize;a.limit=a.limit||b.pageSize;a.addRecords=a.addRecords||false;if(b.buffered){return b.loadToPrefetch(a)}return b.callParent([a])},reload:function(l){var g=this,h,b,e,k,d,a,j,c;if(!l){l={}}if(g.buffered){delete g.totalCount;a=function(){if(g.rangeCached(h,b)){g.loading=false;g.pageMap.un("pageAdded",a);c=g.pageMap.getRange(h,b);g.loadRecords(c,{start:h});g.fireEvent("load",g,c,true)}};j=Math.ceil((g.leadingBufferZone+g.trailingBufferZone)/2);h=l.start||g.getAt(0).index;b=h+(l.count||g.getCount())-1;e=g.getPageFromRecordIndex(Math.max(h-j,0));k=g.getPageFromRecordIndex(b+j);g.pageMap.clear(true);if(g.fireEvent("beforeload",g,l)!==false){g.loading=true;for(d=e;d<=k;d++){g.prefetchPage(d,l)}g.pageMap.on("pageAdded",a)}}else{return g.callParent(arguments)}},onProxyLoad:function(b){var d=this,c=b.getResultSet(),a=b.getRecords(),e=b.wasSuccessful();if(c){d.totalCount=c.total}if(e){d.loadRecords(a,b)}d.loading=false;if(d.hasListeners.load){d.fireEvent("load",d,a,e)}if(d.hasListeners.read){d.fireEvent("read",d,a,e)}Ext.callback(b.callback,b.scope||d,[a,b,e])},getNewRecords:function(){return this.data.filterBy(this.filterNew).items},getUpdatedRecords:function(){return this.data.filterBy(this.filterUpdated).items},filter:function(e,g){if(Ext.isString(e)){e={property:e,value:g}}var d=this,a=d.decodeFilters(e),b=0,h=d.sorters.length&&d.sortOnFilter&&!d.remoteSort,c=a.length;for(;bthis.totalCount)?this.totalCount-1:c;var h=this,e=h.lastRequestStart,d={prefetchStart:i,prefetchEnd:c,cb:a,scope:g},b;h.lastRequestStart=i;if(h.rangeCached(i,c)){if(i0){c=b[0].get(g)}for(;d0){a=c[0].get(g)}for(;da){a=e}}return a},average:function(c,a){var b=this;if(a&&b.isGrouped()){return b.aggregate(b.getAverage,b,true,[c])}else{return b.getAverage(b.data.items,c)}},getAverage:function(b,e){var c=0,a=b.length,d=0;if(b.length>0){for(;c1){for(a=b.length;c0){g.timeout=setTimeout(Ext.bind(j.handleTimeout,j,[g]),m)}j.setupErrorHandling(g);j[l]=Ext.bind(j.handleResponse,j,[g],true);j.loadScript(g);return g},abort:function(c){var b=this,d=b.requests,a;if(c){if(!c.id){c=d[c]}b.handleAbort(c)}else{for(a in d){if(d.hasOwnProperty(a)){b.abort(d[a])}}}},setupErrorHandling:function(a){a.script.onerror=Ext.bind(this.handleError,this,[a])},handleAbort:function(a){a.errorType="abort";this.handleResponse(null,a)},handleError:function(a){a.errorType="error";this.handleResponse(null,a)},cleanupErrorHandling:function(a){a.script.onerror=null},handleTimeout:function(a){a.errorType="timeout";this.handleResponse(null,a)},handleResponse:function(a,b){var c=true;if(b.timeout){clearTimeout(b.timeout)}delete this[b.callbackName];delete this.requests[b.id];this.cleanupErrorHandling(b);Ext.fly(b.script).remove();if(b.errorType){c=false;Ext.callback(b.failure,b.scope,[b.errorType])}else{Ext.callback(b.success,b.scope,[a])}Ext.callback(b.callback,b.scope,[c,a,b.errorType])},createScript:function(c,d,b){var a=document.createElement("script");a.setAttribute("src",Ext.urlAppend(c,Ext.Object.toQueryString(d)));a.setAttribute("async",true);a.setAttribute("type","text/javascript");return a},loadScript:function(a){Ext.getHead().appendChild(a.script)}});Ext.define("Ext.data.proxy.JsonP",{extend:"Ext.data.proxy.Server",alternateClassName:"Ext.data.ScriptTagProxy",alias:["proxy.jsonp","proxy.scripttag"],requires:["Ext.data.JsonP"],defaultWriterType:"base",callbackKey:"callback",recordParam:"records",autoAppendParams:true,constructor:function(){this.addEvents("exception");this.callParent(arguments)},doRequest:function(a,h,b){var d=this,e=d.getWriter(),c=d.buildRequest(a),g=c.params;if(a.allowWrite()){c=e.write(c)}Ext.apply(c,{callbackKey:d.callbackKey,timeout:d.timeout,scope:d,disableCaching:false,callback:d.createRequestCallback(c,a,h,b)});if(d.autoAppendParams){c.params={}}c.jsonp=Ext.data.JsonP.request(c);c.params=g;a.setStarted();d.lastRequest=c;return c},createRequestCallback:function(d,a,e,b){var c=this;return function(i,g,h){delete c.lastRequest;c.processResponse(i,a,d,g,e,b)}},setException:function(b,a){b.setException(b.request.jsonp.errorType)},buildUrl:function(h){var g=this,b=g.callParent(arguments),j=Ext.apply({},h.params),e=j.filters,a,d,c;delete j.filters;if(g.autoAppendParams){b=Ext.urlAppend(b,Ext.Object.toQueryString(j))}if(e&&e.length){for(c=0;c0){b=Ext.urlAppend(b,Ext.String.format("{0}={1}",g.recordParam,g.encodeRecords(a)))}return b},destroy:function(){this.abort();this.callParent(arguments)},abort:function(){var a=this.lastRequest;if(a){Ext.data.JsonP.abort(a.jsonp)}},encodeRecords:function(b){var d="",c=0,a=b.length;for(;c0},isExpandable:function(){var a=this;if(a.get("expandable")){return !(a.isLeaf()||(a.isLoaded()&&!a.hasChildNodes()))}return false},triggerUIUpdate:function(){this.afterEdit([])},appendChild:function(b,k,c){var h=this,d,g,e,j,a;if(Ext.isArray(b)){h.callStore("suspendAutoSync");for(d=0,g=b.length-1;d0?c-1:0,a=h.childNodes.length;d0?k-1:0,c=h.childNodes.length;d0){Ext.Array.sort(d,g);for(c=0;cj){i=i.substring(i.length-j)}else{if(i.length>>16)&4095)|(j.version<<12),4);k[3]=a(128|((j.clockSeq>>>8)&63),2)+a(j.clockSeq&255,2);k[4]=a(j.salt.hi,4)+a(j.salt.lo,8);if(j.version==4){j.init()}else{++i.lo;if(i.lo>=c){i.lo=0;++i.hi}}return k.join("-").toLowerCase()},getRecId:function(i){return i.getId()},init:function(){var j=this,i,k;if(j.version==4){j.clockSeq=d(0,h-1);i=j.salt||(j.salt={});k=j.timestamp||(j.timestamp={});i.lo=d(0,c-1);i.hi=d(0,g-1);k.lo=d(0,c-1);k.hi=d(0,e-1)}else{j.salt=b(j.salt);j.timestamp=b(j.timestamp);j.salt.hi|=256}},reconfigure:function(i){Ext.apply(this,i);this.init()}}}()));Ext.define("Ext.data.reader.Xml",{extend:"Ext.data.reader.Reader",alternateClassName:"Ext.data.XmlReader",alias:"reader.xml",createAccessor:function(b){var a=this;if(Ext.isEmpty(b)){return Ext.emptyFn}if(Ext.isFunction(b)){return b}return function(c){return a.getNodeValue(Ext.DomQuery.selectNode(b,c))}},getNodeValue:function(a){if(a&&a.firstChild){return a.firstChild.nodeValue}return undefined},getResponseData:function(a){var c=a.responseXML,b,d;if(!c){d="XML data not found in the response";b=new Ext.data.ResultSet({total:0,count:0,records:[],success:false,message:d});this.fireEvent("exception",this,a,b);Ext.Logger.warn(d);return b}return this.readRecords(c)},getData:function(a){return a.documentElement||a},getRoot:function(b){var c=b.nodeName,a=this.root;if(!a||(c&&c==a)){return b}else{if(Ext.DomQuery.isXml(b)){return Ext.DomQuery.selectNode(a,b)}}},extractData:function(a){var b=this.record;if(b!=a.nodeName){a=Ext.DomQuery.select(b,a)}else{a=[a]}return this.callParent([a])},getAssociatedDataRoot:function(b,a){return Ext.DomQuery.select(a,b)[0]},readRecords:function(a){if(Ext.isArray(a)){a=a[0]}this.xmlData=a;return this.callParent([a])},createFieldAccessExpression:function(e,d,c){var b=e.mapping||e.name,a;if(typeof b==="function"){a=d+".mapping("+c+", this)"}else{a='me.getNodeValue(Ext.DomQuery.selectNode("'+b+'", '+c+"))"}return a}});Ext.define("Ext.data.writer.Xml",{extend:"Ext.data.writer.Writer",alternateClassName:"Ext.data.XmlWriter",alias:"writer.xml",documentRoot:"xmlData",defaultDocumentRoot:"xmlData",header:"",record:"record",writeRecords:function(a,b){var h=this,d=[],c=0,g=b.length,j=h.documentRoot,e=h.record,m=b.length!==1,l,k;d.push(h.header||"");if(!j&&m){j=h.defaultDocumentRoot}if(j){d.push("<",j,">")}for(;c");for(k in l){if(l.hasOwnProperty(k)){d.push("<",k,">",l[k],"")}}d.push("")}if(j){d.push("")}a.xmlData=d.join("");return a}});Ext.define("Ext.data.XmlStore",{extend:"Ext.data.Store",alias:"store.xml",requires:["Ext.data.proxy.Ajax","Ext.data.reader.Xml","Ext.data.writer.Xml"],constructor:function(a){a=Ext.apply({proxy:{type:"ajax",reader:"xml",writer:"xml"}},a);this.callParent([a])}});Ext.define("Ext.data.association.BelongsTo",{extend:"Ext.data.association.Association",alternateClassName:"Ext.data.BelongsToAssociation",alias:"association.belongsto",constructor:function(c){this.callParent(arguments);var e=this,a=e.ownerModel.prototype,g=e.associatedName,d=e.getterName||"get"+g,b=e.setterName||"set"+g;Ext.applyIf(e,{name:g,foreignKey:g.toLowerCase()+"_id",instanceName:g+"BelongsToInstance",associationKey:g.toLowerCase()});a[d]=e.createGetter();a[b]=e.createSetter()},createSetter:function(){var b=this,a=b.foreignKey;return function(e,c,d){if(e&&e.isModel){e=e.getId()}this.set(a,e);if(Ext.isFunction(c)){c={callback:c,scope:d||this}}if(Ext.isObject(c)){return this.save(c)}}},createGetter:function(){var d=this,e=d.associatedName,g=d.associatedModel,c=d.foreignKey,b=d.primaryKey,a=d.instanceName;return function(k,l){k=k||{};var j=this,m=j.get(c),n,h,i;if(k.reload===true||j[a]===undefined){h=Ext.ModelManager.create({},e);h.set(b,m);if(typeof k=="function"){k={callback:k,scope:l||j}}n=k.success;k.success=function(o){j[a]=o;if(n){n.apply(this,arguments)}};g.load(m,k);j[a]=h;return h}else{h=j[a];i=[h];l=l||k.scope||j;Ext.callback(k,l,i);Ext.callback(k.success,l,i);Ext.callback(k.failure,l,i);Ext.callback(k.callback,l,i);return h}}},read:function(b,a,c){b[this.instanceName]=a.read([c]).records[0]}});Ext.define("Ext.util.Inflector",{singleton:true,plurals:[[(/(quiz)$/i),"$1zes"],[(/^(ox)$/i),"$1en"],[(/([m|l])ouse$/i),"$1ice"],[(/(matr|vert|ind)ix|ex$/i),"$1ices"],[(/(x|ch|ss|sh)$/i),"$1es"],[(/([^aeiouy]|qu)y$/i),"$1ies"],[(/(hive)$/i),"$1s"],[(/(?:([^f])fe|([lr])f)$/i),"$1$2ves"],[(/sis$/i),"ses"],[(/([ti])um$/i),"$1a"],[(/(buffal|tomat|potat)o$/i),"$1oes"],[(/(bu)s$/i),"$1ses"],[(/(alias|status|sex)$/i),"$1es"],[(/(octop|vir)us$/i),"$1i"],[(/(ax|test)is$/i),"$1es"],[(/^person$/),"people"],[(/^man$/),"men"],[(/^(child)$/),"$1ren"],[(/s$/i),"s"],[(/$/),"s"]],singulars:[[(/(quiz)zes$/i),"$1"],[(/(matr)ices$/i),"$1ix"],[(/(vert|ind)ices$/i),"$1ex"],[(/^(ox)en/i),"$1"],[(/(alias|status)es$/i),"$1"],[(/(octop|vir)i$/i),"$1us"],[(/(cris|ax|test)es$/i),"$1is"],[(/(shoe)s$/i),"$1"],[(/(o)es$/i),"$1"],[(/(bus)es$/i),"$1"],[(/([m|l])ice$/i),"$1ouse"],[(/(x|ch|ss|sh)es$/i),"$1"],[(/(m)ovies$/i),"$1ovie"],[(/(s)eries$/i),"$1eries"],[(/([^aeiouy]|qu)ies$/i),"$1y"],[(/([lr])ves$/i),"$1f"],[(/(tive)s$/i),"$1"],[(/(hive)s$/i),"$1"],[(/([^f])ves$/i),"$1fe"],[(/(^analy)ses$/i),"$1sis"],[(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i),"$1$2sis"],[(/([ti])a$/i),"$1um"],[(/(n)ews$/i),"$1ews"],[(/people$/i),"person"],[(/s$/i),""]],uncountable:["sheep","fish","series","species","money","rice","information","equipment","grass","mud","offspring","deer","means"],singular:function(b,a){this.singulars.unshift([b,a])},plural:function(b,a){this.plurals.unshift([b,a])},clearSingulars:function(){this.singulars=[]},clearPlurals:function(){this.plurals=[]},isTransnumeral:function(a){return Ext.Array.indexOf(this.uncountable,a)!=-1},pluralize:function(g){if(this.isTransnumeral(g)){return g}var e=this.plurals,d=e.length,a,c,b;for(b=0;bb.tolerance){b.triggerStart(g)}else{return}}if(b.fireEvent("mousemove",b,g)===false){b.onMouseUp(g)}else{b.onDrag(g);b.fireEvent("drag",b,g)}},onMouseUp:function(b){var a=this;a.mouseIsDown=false;if(a.mouseIsOut){a.mouseIsOut=false;a.onMouseOut(b)}b.preventDefault();if(Ext.isIE&&document.releaseCapture){document.releaseCapture()}a.fireEvent("mouseup",a,b);a.endDrag(b)},endDrag:function(d){var b=this,c=Ext.getDoc(),a=b.active;c.un("mousemove",b.onMouseMove,b);c.un("mouseup",b.onMouseUp,b);c.un("selectstart",b.stopSelect,b);b.clearStart();b.active=false;if(a){b.onEnd(d);b.fireEvent("dragend",b,d)}delete b._constrainRegion;delete Ext.EventObject.dragTracked},triggerStart:function(b){var a=this;a.clearStart();a.active=true;a.onStart(b);a.fireEvent("dragstart",a,b)},clearStart:function(){var a=this.timer;if(a){clearTimeout(a);delete this.timer}},stopSelect:function(a){a.stopEvent();return false},onBeforeStart:function(a){},onStart:function(a){},onDrag:function(a){},onEnd:function(a){},getDragTarget:function(){return this.dragTarget},getDragCt:function(){return this.el},getConstrainRegion:function(){var a=this;if(a.constrainTo){if(a.constrainTo instanceof Ext.util.Region){return a.constrainTo}if(!a._constrainRegion){a._constrainRegion=Ext.fly(a.constrainTo).getViewRegion()}}else{if(!a._constrainRegion){a._constrainRegion=a.getDragCt().getViewRegion()}}return a._constrainRegion},getXY:function(a){return a?this.constrainModes[a](this,this.lastXY):this.lastXY},getOffset:function(c){var b=this.getXY(c),a=this.startXY;return[b[0]-a[0],b[1]-a[1]]},constrainModes:{point:function(b,d){var c=b.dragRegion,a=b.getConstrainRegion();if(!a){return d}c.x=c.left=c[0]=c.right=d[0];c.y=c.top=c[1]=c.bottom=d[1];c.constrainTo(a);return[c.left,c.top]},dragTarget:function(c,g){var b=c.startXY,e=c.startRegion.copy(),a=c.getConstrainRegion(),d;if(!a){return g}e.translateBy(g[0]-b[0],g[1]-b[1]);if(e.right>a.right){g[0]+=d=(a.right-e.right);e.left+=d}if(e.lefta.bottom){g[1]+=d=(a.bottom-e.bottom);e.top+=d}if(e.top0){if(b){for(d=0,a=b.length;d0){this.sendRequest(a==1?b[0]:b);this.callBuffer=[]}},configureFormRequest:function(e,a,b,i,j){var h=this,c=new Ext.direct.Transaction({provider:h,action:e,method:a.name,args:[b,i,j],callback:j&&Ext.isFunction(i)?Ext.Function.bind(i,j):i,isForm:true}),g,d;if(h.fireEvent("beforecall",h,c,a)!==false){Ext.direct.Manager.addTransaction(c);g=String(b.getAttribute("enctype")).toLowerCase()=="multipart/form-data";d={extTID:c.id,extAction:e,extMethod:a.name,extType:"rpc",extUpload:String(g)};Ext.apply(c,{form:Ext.getDom(b),isUpload:g,params:i&&Ext.isObject(i.params)?Ext.apply(d,i.params):d});h.fireEvent("call",h,c,a);h.sendFormRequest(c)}},sendFormRequest:function(a){Ext.Ajax.request({url:this.url,params:a.params,callback:this.onData,scope:this,form:a.form,isUpload:a.isUpload,transaction:a})}});Ext.define("Ext.draw.Matrix",{requires:["Ext.draw.Draw"],constructor:function(h,g,l,k,j,i){if(h!=null){this.matrix=[[h,l,j],[g,k,i],[0,0,1]]}else{this.matrix=[[1,0,0],[0,1,0],[0,0,1]]}},add:function(s,p,m,k,i,h){var n=this,g=[[],[],[]],r=[[s,m,i],[p,k,h],[0,0,1]],q,o,l,j;for(q=0;q<3;q++){for(o=0;o<3;o++){j=0;for(l=0;l<3;l++){j+=n.matrix[q][l]*r[l][o]}g[q][o]=j}}n.matrix=g},prepend:function(s,p,m,k,i,h){var n=this,g=[[],[],[]],r=[[s,m,i],[p,k,h],[0,0,1]],q,o,l,j;for(q=0;q<3;q++){for(o=0;o<3;o++){j=0;for(l=0;l<3;l++){j+=r[q][l]*n.matrix[l][o]}g[q][o]=j}}n.matrix=g},invert:function(){var j=this.matrix,i=j[0][0],h=j[1][0],n=j[0][1],m=j[1][1],l=j[0][2],k=j[1][2],g=i*m-h*n;return new Ext.draw.Matrix(m/g,-h/g,-n/g,i/g,(n*k-m*l)/g,(h*l-i*k)/g)},clone:function(){var i=this.matrix,h=i[0][0],g=i[1][0],m=i[0][1],l=i[1][1],k=i[0][2],j=i[1][2];return new Ext.draw.Matrix(h,g,m,l,k,j)},translate:function(a,b){this.prepend(1,0,0,1,a,b)},scale:function(b,e,a,d){var c=this;if(e==null){e=b}c.add(b,0,0,e,a*(1-b),d*(1-e))},rotate:function(c,b,h){c=Ext.draw.Draw.rad(c);var e=this,g=+Math.cos(c).toFixed(9),d=+Math.sin(c).toFixed(9);e.add(g,d,-d,g,b-g*b+d*h,-(d*b)+h-g*h)},x:function(a,c){var b=this.matrix;return a*b[0][0]+c*b[0][1]+b[0][2]},y:function(a,c){var b=this.matrix;return a*b[1][0]+c*b[1][1]+b[1][2]},get:function(b,a){return +this.matrix[b][a].toFixed(4)},toString:function(){var a=this;return[a.get(0,0),a.get(0,1),a.get(1,0),a.get(1,1),0,0].join()},toSvg:function(){var a=this;return"matrix("+[a.get(0,0),a.get(1,0),a.get(0,1),a.get(1,1),a.get(0,2),a.get(1,2)].join()+")"},toFilter:function(b,a){var c=this;b=b||0;a=a||0;return"progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', filterType='bilinear', M11="+c.get(0,0)+", M12="+c.get(0,1)+", M21="+c.get(1,0)+", M22="+c.get(1,1)+", Dx="+(c.get(0,2)+b)+", Dy="+(c.get(1,2)+a)+")"},offset:function(){var a=this.matrix;return[(a[0][2]||0).toFixed(4),(a[1][2]||0).toFixed(4)]},split:function(){function d(g){return g[0]*g[0]+g[1]*g[1]}function b(g){var h=Math.sqrt(d(g));g[0]/=h;g[1]/=h}var a=this.matrix,c={translateX:a[0][2],translateY:a[1][2]},e;e=[[a[0][0],a[0][1]],[a[1][1],a[1][1]]];c.scaleX=Math.sqrt(d(e[0]));b(e[0]);c.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1];e[1]=[e[1][0]-e[0][0]*c.shear,e[1][1]-e[0][1]*c.shear];c.scaleY=Math.sqrt(d(e[1]));b(e[1]);c.shear/=c.scaleY;c.rotate=Math.asin(-e[0][1]);c.isSimple=!+c.shear.toFixed(9)&&(c.scaleX.toFixed(9)==c.scaleY.toFixed(9)||!c.rotate);return c}});Ext.define("Ext.draw.SpriteDD",{extend:"Ext.dd.DragSource",constructor:function(b,a){var d=this,c=b.el;d.sprite=b;d.el=c;d.dragData={el:c,sprite:b};d.callParent([c,a]);d.sprite.setStyle("cursor","move")},showFrame:Ext.emptyFn,createFrame:Ext.emptyFn,getDragEl:function(a){return this.el},getRegion:function(){var j=this,g=j.el,m,d,c,o,n,s,a,k,h,q,p;p=j.sprite;q=p.getBBox();try{m=Ext.Element.getXY(g)}catch(i){}if(!m){return null}d=m[0];c=d+q.width;o=m[1];n=o+q.height;return new Ext.util.Region(o,c,n,d)},startDrag:function(b,d){var c=this,a=c.sprite.attr;c.prev=c.sprite.surface.transformToViewBox(b,d)},onDrag:function(i){var h=i.getXY(),g=this,d=g.sprite,a=d.attr,c,b;h=g.sprite.surface.transformToViewBox(h[0],h[1]);c=h[0]-g.prev[0];b=h[1]-g.prev[1];d.setAttributes({translate:{x:a.translation.x+c,y:a.translation.y+b}},true);g.prev=h},setDragElPos:function(){return false}});Ext.define("Ext.draw.Sprite",{mixins:{observable:"Ext.util.Observable",animate:"Ext.util.Animate"},requires:["Ext.draw.SpriteDD"],dirty:false,dirtyHidden:false,dirtyTransform:false,dirtyPath:true,dirtyFont:true,zIndexDirty:true,isSprite:true,zIndex:0,fontProperties:["font","font-size","font-weight","font-style","font-family","text-anchor","text"],pathProperties:["x","y","d","path","height","width","radius","r","rx","ry","cx","cy"],constructor:function(a){var b=this;a=Ext.merge({},a||{});b.id=Ext.id(null,"ext-sprite-");b.transformations=[];Ext.copyTo(this,a,"surface,group,type,draggable");b.bbox={};b.attr={zIndex:0,translation:{x:null,y:null},rotation:{degrees:null,x:null,y:null},scaling:{x:null,y:null,cx:null,cy:null}};delete a.surface;delete a.group;delete a.type;delete a.draggable;b.setAttributes(a);b.addEvents("beforedestroy","destroy","render","mousedown","mouseup","mouseover","mouseout","mousemove","click");b.mixins.observable.constructor.apply(this,arguments)},initDraggable:function(){var a=this;a.draggable=true;if(!a.el){a.surface.createSpriteElement(a)}a.dd=new Ext.draw.SpriteDD(a,Ext.isBoolean(a.draggable)?null:a.draggable);a.on("beforedestroy",a.dd.destroy,a.dd)},setAttributes:function(l,o){var t=this,j=t.fontProperties,q=j.length,h=t.pathProperties,g=h.length,r=!!t.surface,a=r&&t.surface.customAttributes||{},c=t.attr,b=false,m,p,k,d,s,n,u,e;l=Ext.apply({},l);for(m in a){if(l.hasOwnProperty(m)&&typeof a[m]=="function"){Ext.apply(l,a[m].apply(t,[].concat(l[m])))}}if(!!l.hidden!==!!c.hidden){t.dirtyHidden=true}for(p=0;p-1)&&(p[o] in g)){p[o]=g[p[o]]}if(o=="hidden"&&r.type=="text"){continue}if(o in s){c.dom.setAttribute(o,s[o](p[o],r,m))}else{c.dom.setAttribute(o,p[o])}}}if(r.type=="text"){m.tuneText(r,p)}r.dirtyFont=false;b=j.style;if(b){c.setStyle(b)}r.dirty=false;if(Ext.isSafari3){m.webkitRect.show();setTimeout(function(){m.webkitRect.hide()})}},setClip:function(b,g){var e=this,d=g["clip-rect"],a,c;if(d){if(b.clip){b.clip.parentNode.parentNode.removeChild(b.clip.parentNode)}a=e.createSvgElement("clipPath");c=e.createSvgElement("rect");a.id=Ext.id(null,"ext-clip-");c.setAttribute("x",d.x);c.setAttribute("y",d.y);c.setAttribute("width",d.width);c.setAttribute("height",d.height);a.appendChild(c);e.getDefs().appendChild(a);b.el.dom.setAttribute("clip-path","url(#"+a.id+")");b.clip=c}},applyZIndex:function(d){var g=this,b=g.items,a=b.indexOf(d),e=d.el,c;if(g.el.dom.childNodes[a+2]!==e.dom){if(a>0){do{c=b.getAt(--a).el}while(!c&&a>0)}e.insertAfter(c||g.bgRect)}d.zIndexDirty=false},createItem:function(a){var b=new Ext.draw.Sprite(a);b.surface=this;return b},addGradient:function(h){h=Ext.draw.Draw.parseGradient(h);var e=this,d=h.stops.length,a=h.vector,l=Ext.isSafari&&!Ext.isStrict,j,g,k,c,b;b=e.gradientsMap||{};if(!l){if(h.type=="linear"){j=e.createSvgElement("linearGradient");j.setAttribute("x1",a[0]);j.setAttribute("y1",a[1]);j.setAttribute("x2",a[2]);j.setAttribute("y2",a[3])}else{j=e.createSvgElement("radialGradient");j.setAttribute("cx",h.centerX);j.setAttribute("cy",h.centerY);j.setAttribute("r",h.radius);if(Ext.isNumber(h.focalX)&&Ext.isNumber(h.focalY)){j.setAttribute("fx",h.focalX);j.setAttribute("fy",h.focalY)}}j.id=h.id;e.getDefs().appendChild(j);for(c=0;c"},text:function(u){var r=u.attr,q=c.exec(r.font),w=(q&&q[1])||"12",p=(q&&q[3])||"Arial",v=r.text,t=(Ext.isFF3_0||Ext.isFF3_5)?2:4,o="",s;u.getBBox();o+='';o+=Ext.htmlEncode(v)+"";s=d({x:r.x,y:r.y,"font-size":w,"font-family":p,"font-weight":r["font-weight"],"text-anchor":r["text-anchor"],fill:r.fill||"#000","fill-opacity":r.opacity,transform:u.matrix.toSvg()});return""+o+""},rect:function(p){var o=p.attr,q=d({x:o.x,y:o.y,rx:o.rx,ry:o.ry,width:o.width,height:o.height,fill:o.fill||"none","fill-opacity":o.opacity,stroke:o.stroke,"stroke-opacity":o["stroke-opacity"],"stroke-width":o["stroke-width"],transform:p.matrix&&p.matrix.toSvg()});return""},circle:function(p){var o=p.attr,q=d({cx:o.x,cy:o.y,r:o.radius,fill:o.translation.fill||o.fill||"none","fill-opacity":o.opacity,stroke:o.stroke,"stroke-opacity":o["stroke-opacity"],"stroke-width":o["stroke-width"],transform:p.matrix.toSvg()});return""},image:function(p){var o=p.attr,q=d({x:o.x-(o.width/2>>0),y:o.y-(o.height/2>>0),width:o.width,height:o.height,"xlink:href":o.src,transform:p.matrix.toSvg()});return""}},a=function(){var o='';o+='';return o},l=function(){var w='',p="",H,F,v,q,G,J,z,x,t,y,B,o,K,u,E,C,I,D,s,r;v=g.items.items;F=v.length;G=function(O){var V=O.childNodes,S=V.length,R=0,P,Q,L="",M,U,N,T;for(;R0){L+=G(M)}L+=""}return L};if(g.getDefs){p=G(g.getDefs())}else{x=g.gradientsColl;if(x){t=x.keys;y=x.items;B=0;o=t.length}for(;B';var A=q.colors.replace(j,"rgb($1|$2|$3)");A=A.replace(h,"rgba($1|$2|$3|$4)");J=A.split(",");for(E=0,I=J.length;E'}p+=""}}w+=""+p+"";w+=k.rect({attr:{width:"100%",height:"100%",fill:"#fff",stroke:"none",opacity:"0"}});D=new Array(F);for(E=0;E";return w},d=function(q){var p="",o;for(o in q){if(q.hasOwnProperty(o)&&q[o]!=null){p+=o+'="'+q[o]+'" '}}return p};return{singleton:true,generate:function(o,p){p=p||{};n(o);return a()+l()}}});Ext.define("Ext.draw.engine.Vml",{extend:"Ext.draw.Surface",requires:["Ext.draw.Draw","Ext.draw.Color","Ext.draw.Sprite","Ext.draw.Matrix","Ext.Element"],engine:"Vml",map:{M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},bitesRe:/([clmz]),?([^clmz]*)/gi,valRe:/-?[^,\s\-]+/g,fillUrlRe:/^url\(\s*['"]?([^\)]+?)['"]?\s*\)$/i,pathlike:/^(path|rect)$/,NonVmlPathRe:/[ahqstv]/ig,partialPathRe:/[clmz]/g,fontFamilyRe:/^['"]+|['"]+$/g,baseVmlCls:Ext.baseCSSPrefix+"vml-base",vmlGroupCls:Ext.baseCSSPrefix+"vml-group",spriteCls:Ext.baseCSSPrefix+"vml-sprite",measureSpanCls:Ext.baseCSSPrefix+"vml-measure-span",zoom:21600,coordsize:1000,coordorigin:"0 0",zIndexShift:0,orderSpritesByZIndex:false,path2vml:function(t){var n=this,u=n.NonVmlPathRe,b=n.map,e=n.valRe,s=n.zoom,d=n.bitesRe,g=Ext.Function.bind(Ext.draw.Draw.pathToAbsolute,Ext.draw.Draw),m,o,c,a,k,q,h,l;if(String(t).match(u)){g=Ext.Function.bind(Ext.draw.Draw.path2curve,Ext.draw.Draw)}else{if(!String(t).match(n.partialPathRe)){m=String(t).replace(d,function(r,w,j){var v=[],i=w.toLowerCase()=="m",p=b[w];j.replace(e,function(x){if(i&&v.length===2){p+=v+b[w=="m"?"l":"L"];v=[]}v.push(Math.round(x*s))});return p+v});return m}}o=g(t);m=[];for(k=0,q=o.length;k")}a.W=h.span.offsetWidth;a.H=h.span.offsetHeight+2;if(c["text-anchor"]=="middle"){e["v-text-align"]="center"}else{if(c["text-anchor"]=="end"){e["v-text-align"]="right";a.bbx=-Math.round(a.W/2)}else{e["v-text-align"]="left";a.bbx=Math.round(a.W/2)}}}a.X=c.x;a.Y=c.y;a.path.v=Ext.String.format("m{0},{1}l{2},{1}",Math.round(a.X*j),Math.round(a.Y*j),Math.round(a.X*j)+1);i.bbox.plain=null;i.bbox.transform=null;i.dirtyFont=false},setText:function(a,b){a.vml.textpath.string=Ext.htmlDecode(b)},hide:function(){this.el.hide()},show:function(){this.el.show()},hidePrim:function(a){a.el.addCls(Ext.baseCSSPrefix+"hide-visibility")},showPrim:function(a){a.el.removeCls(Ext.baseCSSPrefix+"hide-visibility")},setSize:function(b,a){var c=this;b=b||c.width;a=a||c.height;c.width=b;c.height=a;if(c.el){if(b!=undefined){c.el.setWidth(b)}if(a!=undefined){c.el.setHeight(a)}}c.callParent(arguments)},applyViewBox:function(){var g=this,h=g.viewBox,e=g.width,b=g.height,c,a,d;g.callParent();if(h&&(e||b)){c=g.items.items;a=c.length;for(d=0;d')}}catch(d){c.createNode=function(e){return g.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}}if(!c.el){b=g.createElement("div");c.el=Ext.get(b);c.el.addCls(c.baseVmlCls);c.span=g.createElement("span");Ext.get(c.span).addCls(c.measureSpanCls);b.appendChild(c.span);c.el.setSize(c.width||0,c.height||0);a.appendChild(b);c.el.on({scope:c,mouseup:c.onMouseUp,mousedown:c.onMouseDown,mouseover:c.onMouseOver,mouseout:c.onMouseOut,mousemove:c.onMouseMove,mouseenter:c.onMouseEnter,mouseleave:c.onMouseLeave,click:c.onClick,dblclick:c.onDblClick})}c.renderAll()},renderAll:function(){this.items.each(this.renderItem,this)},redraw:function(a){a.dirty=true;this.renderItem(a)},renderItem:function(a){if(!this.el){return}if(!a.el){this.createSpriteElement(a)}if(a.dirty){this.applyAttrs(a);if(a.dirtyTransform){this.applyTransformations(a)}}},rotationCompensation:function(d,c,a){var b=new Ext.draw.Matrix();b.rotate(-d,0.5,0.5);return{x:b.x(c,a),y:b.y(c,a)}},transform:function(x,I){var H=this,b=H.getBBox(x,true),j=b.x+b.width*0.5,h=b.y+b.height*0.5,B=new Ext.draw.Matrix(),q=x.transformations,v=q.length,C=0,o=0,d=1,c=1,n="",g=x.el,E=g.dom,z=E.style,a=H.zoom,k=x.skew,D=H.viewBoxShift,G,F,s,l,r,p,A,w,u,t,e,m;for(;C32767){m[0]=32767}else{if(m[0]<-32768){m[0]=-32768}}if(m[1]>32767){m[1]=32767}else{if(m[1]<-32768){m[1]=-32768}}k.offset=m}else{z.filter=B.toFilter();z.left=Math.min(B.x(b.x,b.y),B.x(b.x+b.width,b.y),B.x(b.x,b.y+b.height),B.x(b.x+b.width,b.y+b.height))+"px";z.top=Math.min(B.y(b.x,b.y),B.y(b.x+b.width,b.y),B.y(b.x,b.y+b.height),B.y(b.x+b.width,b.y+b.height))+"px"}},createItem:function(a){return Ext.create("Ext.draw.Sprite",a)},getRegion:function(){return this.el.getRegion()},addCls:function(a,b){if(a&&a.el){a.el.addCls(b)}},removeCls:function(a,b){if(a&&a.el){a.el.removeCls(b)}},addGradient:function(g){var d=this.gradientsColl||(this.gradientsColl=Ext.create("Ext.util.MixedCollection")),a=[],j=Ext.create("Ext.util.MixedCollection"),l,e,b,h,k,c;j.addAll(g.stops);j.sortByKey("ASC",function(m,i){m=parseInt(m,10);i=parseInt(i,10);return m>i?1:(m'],initComponent:function(){this.callParent();this.addEvents("success","failure")},beforeRender:function(){this.callParent();Ext.applyIf(this.renderData,{swfId:this.getSwfId()})},afterRender:function(){var b=this,a=Ext.apply({},b.flashParams),c=Ext.apply({},b.flashVars);b.callParent();a=Ext.apply({allowScriptAccess:"always",bgcolor:b.backgroundColor,wmode:b.wmode},a);c=Ext.apply({allowedDomain:document.location.hostname},c);new swfobject.embedSWF(b.url,b.getSwfId(),b.swfWidth,b.swfHeight,b.flashVersion,b.expressInstall?b.statics.EXPRESS_INSTALL_URL:undefined,c,a,b.flashAttributes,Ext.bind(b.swfCallback,b))},swfCallback:function(b){var a=this;if(b.success){a.swf=Ext.get(b.ref);a.onSuccess();a.fireEvent("success",a)}else{a.onFailure();a.fireEvent("failure",a)}},getSwfId:function(){return this.swfId||(this.swfId="extswf"+this.getAutoId())},onSuccess:function(){this.swf.setStyle("visibility","inherit")},onFailure:Ext.emptyFn,beforeDestroy:function(){var b=this,a=b.swf;if(a){swfobject.removeSWF(b.getSwfId());Ext.destroy(a);delete b.swf}b.callParent()},statics:{EXPRESS_INSTALL_URL:"http://swfobject.googlecode.com/svn/trunk/swfobject/expressInstall.swf"}});Ext.define("Ext.form.action.Action",{alternateClassName:"Ext.form.Action",submitEmptyText:true,constructor:function(a){if(a){Ext.apply(this,a)}var b=a.params;if(Ext.isString(b)){this.params=Ext.Object.fromQueryString(b)}},run:Ext.emptyFn,onFailure:function(a){this.response=a;this.failureType=Ext.form.action.Action.CONNECT_FAILURE;this.form.afterAction(this,false)},processResponse:function(a){this.response=a;if(!a.responseText&&!a.responseXML){return true}return(this.result=this.handleResponse(a))},getUrl:function(){return this.url||this.form.url},getMethod:function(){return(this.method||this.form.method||"POST").toUpperCase()},getParams:function(){return Ext.apply({},this.params,this.form.baseParams)},createCallback:function(){var c=this,a,b=c.form;return{success:c.onSuccess,failure:c.onFailure,scope:c,timeout:(this.timeout*1000)||(b.timeout*1000),upload:b.fileUpload?c.onSuccess:a}},statics:{CLIENT_INVALID:"client",SERVER_INVALID:"server",CONNECT_FAILURE:"connect",LOAD_FAILURE:"load"}});Ext.define("Ext.form.action.Load",{extend:"Ext.form.action.Action",requires:["Ext.data.Connection"],alternateClassName:"Ext.form.Action.Load",alias:"formaction.load",type:"load",run:function(){Ext.Ajax.request(Ext.apply(this.createCallback(),{method:this.getMethod(),url:this.getUrl(),headers:this.headers,params:this.getParams()}))},onSuccess:function(b){var a=this.processResponse(b),c=this.form;if(a===true||!a.success||!a.data){this.failureType=Ext.form.action.Action.LOAD_FAILURE;c.afterAction(this,false);return}c.clearInvalid();c.setValues(a.data);c.afterAction(this,true)},handleResponse:function(c){var a=this.form.reader,b,d;if(a){b=a.read(c);d=b.records&&b.records[0]?b.records[0].data:null;return{success:b.success,data:d}}return Ext.decode(c.responseText)}});Ext.define("Ext.form.action.Submit",{extend:"Ext.form.action.Action",alternateClassName:"Ext.form.Action.Submit",alias:"formaction.submit",type:"submit",run:function(){var a=this.form;if(this.clientValidation===false||a.isValid()){this.doSubmit()}else{this.failureType=Ext.form.action.Action.CLIENT_INVALID;a.afterAction(this,false)}},doSubmit:function(){var b,a=Ext.apply(this.createCallback(),{url:this.getUrl(),method:this.getMethod(),headers:this.headers});if(this.form.hasUpload()){b=a.form=this.buildForm();a.isUpload=true}else{a.params=this.getParams()}Ext.Ajax.request(a);if(b){Ext.removeNode(b)}},getParams:function(){var c=false,b=this.callParent(),a=this.form.getValues(c,c,this.submitEmptyText!==c);return Ext.apply({},a,b)},buildForm:function(){var k=[],i,q,e=this.form,d=this.getParams(),c=[],g=e.getFields().items,h,r=g.length,j,o,m,n,l,p,b;for(h=0;hid="{id}">','','',"{beforeLabelTpl}",' class="{labelCls}"',' style="{labelStyle}">',"{beforeLabelTextTpl}",'{fieldLabel}{labelSeparator}',"{afterLabelTextTpl}","","{afterLabelTpl}","","",'',"{beforeBodyEl}","","{beforeLabelTpl}",'
','","
","{afterLabelTpl}","
","{beforeSubTpl}","{[values.$comp.getSubTplMarkup()]}","{afterSubTpl}","","{afterBodyEl}","","",'',"","",'',"{afterBodyEl}","","","",{disableFormats:true}],activeErrorsTpl:['','
  • {.}
',"
"],isFieldLabelable:true,formItemCls:Ext.baseCSSPrefix+"form-item",labelCls:Ext.baseCSSPrefix+"form-item-label",errorMsgCls:Ext.baseCSSPrefix+"form-error-msg",baseBodyCls:Ext.baseCSSPrefix+"form-item-body",fieldBodyCls:"",clearCls:Ext.baseCSSPrefix+"clear",invalidCls:Ext.baseCSSPrefix+"form-invalid",fieldLabel:undefined,labelAlign:"left",labelWidth:100,labelPad:5,labelSeparator:":",hideLabel:false,hideEmptyLabel:true,preventMark:false,autoFitErrors:true,msgTarget:"qtip",noWrap:true,labelableInsertions:["beforeBodyEl","afterBodyEl","beforeLabelTpl","afterLabelTpl","beforeSubTpl","afterSubTpl","beforeLabelTextTpl","afterLabelTextTpl","labelAttrTpl"],labelableRenderProps:["allowBlank","id","labelAlign","fieldBodyCls","baseBodyCls","clearCls","labelSeparator","msgTarget"],initLabelable:function(){var a=this,b=a.padding;if(b){a.padding=undefined;a.extraMargins=Ext.Element.parseBox(b)}a.addCls(a.formItemCls);a.lastActiveError="";a.addEvents("errorchange")},trimLabelSeparator:function(){var c=this,d=c.labelSeparator,a=c.fieldLabel||"",b=a.substr(a.length-1);return b===d?a.slice(0,-1):a},getFieldLabel:function(){return this.trimLabelSeparator()},setFieldLabel:function(b){b=b||"";var c=this,d=c.labelSeparator,a=c.labelEl;c.fieldLabel=b;if(c.rendered){if(Ext.isEmpty(b)&&c.hideEmptyLabel){a.parent().setDisplayed("none")}else{if(d){b=c.trimLabelSeparator()+d}a.update(b);a.parent().setDisplayed("")}c.updateLayout()}},getInsertionRenderData:function(d,e){var b=e.length,a,c;while(b--){a=e[b];c=this[a];if(c){if(typeof c!="string"){if(!c.isTemplate){c=Ext.XTemplate.getTpl(this,a)}c=c.apply(d)}}d[a]=c||""}return d},getLabelableRenderData:function(){var b=this,c,d,a=b.labelAlign==="top";if(!Ext.form.Labelable.errorIconWidth){Ext.form.Labelable.errorIconWidth=(d=Ext.resetElement.createChild({style:"position:absolute",cls:Ext.baseCSSPrefix+"form-invalid-icon"})).getWidth();d.remove()}c=Ext.copyTo({inFormLayout:b.ownerLayout&&b.ownerLayout.type==="form",inputId:b.getInputId(),labelOnLeft:!a,hideLabel:!b.hasVisibleLabel(),fieldLabel:b.getFieldLabel(),labelCellStyle:b.getLabelCellStyle(),labelCellAttrs:b.getLabelCellAttrs(),labelCls:b.getLabelCls(),labelStyle:b.getLabelStyle(),bodyColspan:b.getBodyColspan(),externalError:!b.autoFitErrors,errorMsgCls:b.getErrorMsgCls(),errorIconWidth:Ext.form.Labelable.errorIconWidth},b,b.labelableRenderProps,true);b.getInsertionRenderData(c,b.labelableInsertions);return c},beforeLabelableRender:function(){var a=this;if(a.ownerLayout){a.addCls(Ext.baseCSSPrefix+a.ownerLayout.type+"-form-item")}},onLabelableRender:function(){var c=this,d,a,b={};if(c.extraMargins){d=c.el.getMargin();for(a in d){if(d.hasOwnProperty(a)){b["margin-"+a]=(d[a]+c.extraMargins[a])+"px"}}c.el.setStyle(b)}},hasVisibleLabel:function(){if(this.hideLabel){return false}return !(this.hideEmptyLabel&&!this.getFieldLabel())},getBodyColspan:function(){var b=this,a;if(b.msgTarget==="side"&&(!b.autoFitErrors||b.hasActiveError())){a=1}else{a=2}if(b.labelAlign!=="top"&&!b.hasVisibleLabel()){a++}return a},getLabelCls:function(){var b=this.labelCls,a=this.labelClsExtra;if(this.labelAlign==="top"){b+="-top"}return a?b+" "+a:b},getLabelCellStyle:function(){var b=this,a=b.hideLabel||(!b.fieldLabel&&b.hideEmptyLabel);return a?"display:none;":""},getErrorMsgCls:function(){var b=this,a=(b.hideLabel||(!b.fieldLabel&&b.hideEmptyLabel));return b.errorMsgCls+(!a&&b.labelAlign==="top"?" "+Ext.baseCSSPrefix+"lbl-top-err-icon":"")},getLabelCellAttrs:function(){var c=this,b=c.labelAlign,a="";if(b!=="top"){a='valign="top" halign="'+b+'" width="'+(c.labelWidth+c.labelPad)+'"'}return a+' class="'+Ext.baseCSSPrefix+'field-label-cell"'},getLabelStyle:function(){var c=this,b=c.labelPad,a="";if(c.labelAlign!=="top"){if(c.labelWidth){a="width:"+c.labelWidth+"px;"}a+="margin-right:"+b+"px;"}return a+(c.labelStyle||"")},getSubTplMarkup:function(){return""},getInputId:function(){return""},getActiveError:function(){return this.activeError||""},hasActiveError:function(){return !!this.getActiveError()},setActiveError:function(a){this.setActiveErrors(a)},getActiveErrors:function(){return this.activeErrors||[]},setActiveErrors:function(a){a=Ext.Array.from(a);this.activeError=a[0];this.activeErrors=a;this.activeError=this.getTpl("activeErrorsTpl").apply({errors:a});this.renderActiveError()},unsetActiveError:function(){delete this.activeError;delete this.activeErrors;this.renderActiveError()},renderActiveError:function(){var c=this,b=c.getActiveError(),a=!!b;if(b!==c.lastActiveError){c.fireEvent("errorchange",c,b);c.lastActiveError=b}if(c.rendered&&!c.isDestroyed&&!c.preventMark){c.el[a?"addCls":"removeCls"](c.invalidCls);c.getActionEl().dom.setAttribute("aria-invalid",a);if(c.errorEl){c.errorEl.dom.innerHTML=b}}},setFieldDefaults:function(c){var b=this,d,a;for(a in c){if(c.hasOwnProperty(a)){d=c[a];if(!b.hasOwnProperty(a)){b[a]=d}}}}});Ext.define("Ext.form.field.Field",{isFormField:true,disabled:false,submitValue:true,validateOnChange:true,suspendCheckChange:0,initField:function(){this.addEvents("change","validitychange","dirtychange");this.initValue()},initValue:function(){var a=this;a.value=a.transformOriginalValue(a.value);a.originalValue=a.lastValue=a.value;a.suspendCheckChange++;a.setValue(a.value);a.suspendCheckChange--},transformOriginalValue:function(a){return a},getName:function(){return this.name},getValue:function(){return this.value},setValue:function(b){var a=this;a.value=b;a.checkChange();return a},isEqual:function(b,a){return String(b)===String(a)},isEqualAsString:function(b,a){return String(Ext.value(b,""))===String(Ext.value(a,""))},getSubmitData:function(){var a=this,b=null;if(!a.disabled&&a.submitValue&&!a.isFileUpload()){b={};b[a.getName()]=""+a.getValue()}return b},getModelData:function(){var a=this,b=null;if(!a.disabled&&!a.isFileUpload()){b={};b[a.getName()]=a.getValue()}return b},reset:function(){var a=this;a.beforeReset();a.setValue(a.originalValue);a.clearInvalid();delete a.wasValid},beforeReset:Ext.emptyFn,resetOriginalValue:function(){this.originalValue=this.getValue();this.checkDirty()},checkChange:function(){if(!this.suspendCheckChange){var c=this,b=c.getValue(),a=c.lastValue;if(!c.isEqual(b,a)&&!c.isDestroyed){c.lastValue=b;c.fireEvent("change",c,b,a);c.onChange(b,a)}}},onChange:function(b,a){if(this.validateOnChange){this.validate()}this.checkDirty()},isDirty:function(){var a=this;return !a.disabled&&!a.isEqual(a.getValue(),a.originalValue)},checkDirty:function(){var a=this,b=a.isDirty();if(b!==a.wasDirty){a.fireEvent("dirtychange",a,b);a.onDirtyChange(b);a.wasDirty=b}},onDirtyChange:Ext.emptyFn,getErrors:function(a){return[]},isValid:function(){var a=this;return a.disabled||Ext.isEmpty(a.getErrors())},validate:function(){var a=this,b=a.isValid();if(b!==a.wasValid){a.wasValid=b;a.fireEvent("validitychange",a,b)}return b},batchChanges:function(a){try{this.suspendCheckChange++;a()}catch(b){throw b}finally{this.suspendCheckChange--}this.checkChange()},isFileUpload:function(){return false},extractFileInput:function(){return null},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.define("Ext.form.field.Base",{extend:"Ext.Component",mixins:{labelable:"Ext.form.Labelable",field:"Ext.form.field.Field"},alias:"widget.field",alternateClassName:["Ext.form.Field","Ext.form.BaseField"],requires:["Ext.util.DelayedTask","Ext.XTemplate","Ext.layout.component.field.Field"],fieldSubTpl:[' name="{name}"
',' value="{[Ext.util.Format.htmlEncode(values.value)]}"',' placeholder="{placeholder}"','{%if (values.maxLength !== undefined){%} maxlength="{maxLength}"{%}%}',' readonly="readonly"',' disabled="disabled"',' tabIndex="{tabIdx}"',' style="{fieldStyle}"',' class="{fieldCls} {typeCls} {editableCls}" autocomplete="off"/>',{disableFormats:true}],subTplInsertions:["inputAttrTpl"],inputType:"text",invalidText:"The value in this field is invalid",fieldCls:Ext.baseCSSPrefix+"form-field",focusCls:"form-focus",dirtyCls:Ext.baseCSSPrefix+"form-dirty",checkChangeEvents:Ext.isIE&&(!document.documentMode||document.documentMode<9)?["change","propertychange"]:["change","input","textInput","keyup","dragdrop"],checkChangeBuffer:50,componentLayout:"field",readOnly:false,readOnlyCls:Ext.baseCSSPrefix+"form-readonly",validateOnBlur:true,hasFocus:false,baseCls:Ext.baseCSSPrefix+"field",maskOnDisable:false,initComponent:function(){var a=this;a.callParent();a.subTplData=a.subTplData||{};a.addEvents("specialkey","writeablechange");a.initLabelable();a.initField();if(!a.name){a.name=a.getInputId()}},beforeRender:function(){var a=this;a.callParent(arguments);a.beforeLabelableRender(arguments);if(a.readOnly){a.addCls(a.readOnlyCls)}},getInputId:function(){return this.inputId||(this.inputId=this.id+"-inputEl")},getSubTplData:function(){var c=this,b=c.inputType,a=c.getInputId(),d;d=Ext.apply({id:a,cmpId:c.id,name:c.name||a,disabled:c.disabled,readOnly:c.readOnly,value:c.getRawValue(),type:b,fieldCls:c.fieldCls,fieldStyle:c.getFieldStyle(),tabIdx:c.tabIndex,typeCls:Ext.baseCSSPrefix+"form-"+(b==="password"?"text":b)},c.subTplData);c.getInsertionRenderData(d,c.subTplInsertions);return d},afterFirstLayout:function(){this.callParent();var a=this.inputEl;if(a){a.selectable()}},applyRenderSelectors:function(){var a=this;a.callParent();a.inputEl=a.el.getById(a.getInputId())},getSubTplMarkup:function(){return this.getTpl("fieldSubTpl").apply(this.getSubTplData())},initRenderTpl:function(){var a=this;if(!a.hasOwnProperty("renderTpl")){a.renderTpl=a.getTpl("labelableRenderTpl")}return a.callParent()},initRenderData:function(){return Ext.applyIf(this.callParent(),this.getLabelableRenderData())},setFieldStyle:function(a){var b=this,c=b.inputEl;if(c){c.applyStyles(a)}b.fieldStyle=a},getFieldStyle:function(){return"width:100%;"+(Ext.isObject(this.fieldStyle)?Ext.DomHelper.generateStyles(this.fieldStyle):this.fieldStyle||"")},onRender:function(){var a=this;a.callParent(arguments);a.onLabelableRender();a.renderActiveError()},getFocusEl:function(){return this.inputEl},isFileUpload:function(){return this.inputType==="file"},extractFileInput:function(){var b=this,a=b.isFileUpload()?b.inputEl.dom:null,c;if(a){c=a.cloneNode(true);a.parentNode.replaceChild(c,a);b.inputEl=Ext.get(c)}return a},getSubmitData:function(){var a=this,b=null,c;if(!a.disabled&&a.submitValue&&!a.isFileUpload()){c=a.getSubmitValue();if(c!==null){b={};b[a.getName()]=c}}return b},getSubmitValue:function(){return this.processRawValue(this.getRawValue())},getRawValue:function(){var b=this,a=(b.inputEl?b.inputEl.getValue():Ext.value(b.rawValue,""));b.rawValue=a;return a},setRawValue:function(b){var a=this;b=Ext.value(a.transformRawValue(b),"");a.rawValue=b;if(a.inputEl){a.inputEl.dom.value=b}return b},transformRawValue:function(a){return a},valueToRaw:function(a){return""+Ext.value(a,"")},rawToValue:function(a){return a},processRawValue:function(a){return a},getValue:function(){var a=this,b=a.rawToValue(a.processRawValue(a.getRawValue()));a.value=b;return b},setValue:function(b){var a=this;a.setRawValue(a.valueToRaw(b));return a.mixins.field.setValue.call(a,b)},onBoxReady:function(){var a=this;a.callParent();if(a.setReadOnlyOnBoxReady){a.setReadOnly(a.readOnly)}},onDisable:function(){var a=this,b=a.inputEl;a.callParent();if(b){b.dom.disabled=true;if(a.hasActiveError()){a.clearInvalid();a.needsValidateOnEnable=true}}},onEnable:function(){var a=this,b=a.inputEl;a.callParent();if(b){b.dom.disabled=false;if(a.needsValidateOnEnable){delete a.needsValidateOnEnable;a.forceValidation=true;a.isValid();delete a.forceValidation}}},setReadOnly:function(c){var a=this,b=a.inputEl;c=!!c;a[c?"addCls":"removeCls"](a.readOnlyCls);a.readOnly=c;if(b){b.dom.readOnly=c}else{if(a.rendering){a.setReadOnlyOnBoxReady=true}}a.fireEvent("writeablechange",a,c)},fireKey:function(a){if(a.isSpecialKey()){this.fireEvent("specialkey",this,new Ext.EventObjectImpl(a))}},initEvents:function(){var g=this,i=g.inputEl,b,j,c=g.checkChangeEvents,h,a=c.length,d;if(g.inEditor){g.onBlur=Ext.Function.createBuffered(g.onBlur,10)}if(i){g.mon(i,Ext.EventManager.getKeyEvent(),g.fireKey,g);b=new Ext.util.DelayedTask(g.checkChange,g);g.onChangeEvent=j=function(){b.delay(g.checkChangeBuffer)};for(h=0;hg.maxLength){k.push(j(g.maxLengthText,g.maxLength))}if(e){if(!h[e](l,g)){k.push(g.vtypeText||h[e+"Text"])}}if(i&&!i.test(l)){k.push(g.regexText||g.invalidText)}return k},selectText:function(i,a){var h=this,c=h.getRawValue(),d=true,g=h.inputEl.dom,e,b;if(c.length>0){i=i===e?0:i;a=a===e?c.length:a;if(g.setSelectionRange){g.setSelectionRange(i,a)}else{if(g.createTextRange){b=g.createTextRange();b.moveStart("character",i);b.moveEnd("character",a-c.length);b.select()}}d=Ext.isGecko||Ext.isOpera}if(d){h.focus()}},autoSize:function(){var a=this;if(a.grow&&a.rendered){a.autoSizing=true;a.updateLayout()}},afterComponentLayout:function(){var b=this,a;b.callParent(arguments);if(b.autoSizing){a=b.inputEl.getWidth();if(a!==b.lastInputWidth){b.fireEvent("autosize",b,a);b.lastInputWidth=a;delete b.autoSizing}}}});Ext.define("Ext.layout.component.field.TextArea",{extend:"Ext.layout.component.field.Text",alias:"layout.textareafield",type:"textareafield",canGrowWidth:false,naturalSizingProp:"cols",beginLayout:function(a){this.callParent(arguments);a.target.inputEl.setStyle("height","")},measureContentHeight:function(b){var e=this,a=e.owner,k=e.callParent(arguments),c,i,h,g,d,j;if(a.grow&&!b.state.growHandled){c=b.inputContext;i=a.inputEl;d=i.getWidth(true);h=Ext.util.Format.htmlEncode(i.dom.value)||" ";h+=a.growAppend;h=h.replace(/\n/g,"
");j=Ext.util.TextMetrics.measure(i,h,d).height+c.getBorderInfo().height+c.getPaddingInfo().height;j=Ext.Number.constrain(j,a.growMin,a.growMax);c.setHeight(j);b.state.growHandled=true;c.domBlock(e,"height");k=NaN}return k}});Ext.define("Ext.form.field.TextArea",{extend:"Ext.form.field.Text",alias:["widget.textareafield","widget.textarea"],alternateClassName:"Ext.form.TextArea",requires:["Ext.XTemplate","Ext.layout.component.field.TextArea","Ext.util.DelayedTask"],fieldSubTpl:['",{disableFormats:true}],growMin:60,growMax:1000,growAppend:"\n-",cols:20,rows:4,enterIsSpecial:false,preventScrollbars:false,componentLayout:"textareafield",setGrowSizePolicy:Ext.emptyFn,returnRe:/\r/g,getSubTplData:function(){var c=this,b=c.getFieldStyle(),a=c.callParent();if(c.grow){if(c.preventScrollbars){a.fieldStyle=(b||"")+";overflow:hidden;height:"+c.growMin+"px"}}Ext.applyIf(a,{cols:c.cols,rows:c.rows});return a},afterRender:function(){var a=this;a.callParent(arguments);a.needsMaxCheck=a.enforceMaxLength&&a.maxLength!==Number.MAX_VALUE&&!Ext.supports.TextAreaMaxLength;if(a.needsMaxCheck){a.inputEl.on("paste",a.onPaste,a)}},transformRawValue:function(a){return this.stripReturns(a)},transformOriginalValue:function(a){return this.stripReturns(a)},valueToRaw:function(a){a=this.stripReturns(a);return this.callParent([a])},stripReturns:function(a){if(a){a=a.replace(this.returnRe,"")}return a},onPaste:function(b){var a=this;if(!a.pasteTask){a.pasteTask=new Ext.util.DelayedTask(a.pasteCheck,a)}a.pasteTask.delay(1)},pasteCheck:function(){var b=this,c=b.getValue(),a=b.maxLength;if(c.length>a){c=c.substr(0,a);b.setValue(c)}},fireKey:function(d){var b=this,a=d.getKey(),c;if(d.isSpecialKey()&&(b.enterIsSpecial||(a!==d.ENTER||d.hasModifier()))){b.fireEvent("specialkey",b,d)}if(b.needsMaxCheck&&a!==d.BACKSPACE&&a!==d.DELETE&&!d.isNavKeyPress()&&!b.isCutCopyPasteSelectAll(d,a)){c=b.getValue();if(c.length>=b.maxLength){d.stopEvent()}}},isCutCopyPasteSelectAll:function(b,a){if(b.CTRL){return a===b.A||a===b.C||a===b.V||a===b.X}return false},autoSize:function(){var b=this,a;if(b.grow&&b.rendered){b.updateLayout();a=b.inputEl.getHeight();if(a!==b.lastInputHeight){b.fireEvent("autosize",b,a);b.lastInputHeight=a}}},initAria:function(){this.callParent(arguments);this.getActionEl().dom.setAttribute("aria-multiline",true)},beforeDestroy:function(){var a=this.pasteTask;if(a){a.delay()}this.callParent()}});Ext.define("Ext.form.field.Display",{extend:"Ext.form.field.Base",alias:"widget.displayfield",requires:["Ext.util.Format","Ext.XTemplate"],alternateClassName:["Ext.form.DisplayField","Ext.form.Display"],fieldSubTpl:['
style="{fieldStyle}"',' class="{fieldCls}">{value}
',{compiled:true,disableFormats:true}],fieldCls:Ext.baseCSSPrefix+"form-display-field",htmlEncode:false,validateOnChange:false,initEvents:Ext.emptyFn,submitValue:false,isDirty:function(){return false},isValid:function(){return true},validate:function(){return true},getRawValue:function(){return this.rawValue},setRawValue:function(b){var a=this,c;b=Ext.value(b,"");a.rawValue=b;if(a.rendered){a.inputEl.dom.innerHTML=a.getDisplayValue();a.updateLayout()}return b},getDisplayValue:function(){var a=this,b=this.getRawValue(),c;if(a.renderer){c=a.renderer.call(a.scope||a,b,a)}else{c=a.htmlEncode?Ext.util.Format.htmlEncode(b):b}return c},getSubTplData:function(){var a=this.callParent(arguments);a.value=this.getDisplayValue();return a}});Ext.define("Ext.layout.container.Anchor",{alias:"layout.anchor",extend:"Ext.layout.container.Container",alternateClassName:"Ext.layout.AnchorLayout",type:"anchor",manageOverflow:2,renderTpl:["{%this.renderBody(out,values);this.renderPadder(out,values)%}"],defaultAnchor:"100%",parseAnchorRE:/^(r|right|b|bottom)$/i,beginLayout:function(c){var j=this,a=0,g,k,e,d,b,h;j.callParent(arguments);e=c.childItems;b=e.length;for(d=0;d','','',"{% this.renderColumn(out,parent,xindex-1) %}","","",""],lastOwnerItemsGeneration:null,beginLayout:function(b){var k=this,e,d,h,a,j,g=0,m=0,l=k.autoFlex,c=k.innerCt.dom.style;k.callParent(arguments);e=k.columnNodes;b.innerCtContext=b.getEl("innerCt",k);if(!b.widthModel.shrinkWrap){d=e.length;if(k.columnsArray){for(h=0;ha){d=b-a;g=e.rowEl;for(c=0;c',"{%this.renderContainer(out,values);%}",""],stateEvents:["collapse","expand"],maskOnDisable:false,beforeDestroy:function(){var b=this,a=b.legend;if(a){delete a.ownerCt;a.destroy();b.legend=null}b.callParent()},initComponent:function(){var b=this,a=b.baseCls;b.callParent();b.addEvents("beforeexpand","beforecollapse","expand","collapse");if(b.collapsed){b.addCls(a+"-collapsed");b.collapse()}if(b.title){b.addCls(a+"-with-title")}if(b.title||b.checkboxToggle||b.collapsible){b.addCls(a+"-with-legend");b.legend=Ext.widget(b.createLegendCt())}},initRenderData:function(){var a=this.callParent();a.baseCls=this.baseCls;return a},getState:function(){var a=this.callParent();a=this.addPropertyToState(a,"collapsed");return a},afterCollapse:Ext.emptyFn,afterExpand:Ext.emptyFn,collapsedHorizontal:function(){return true},collapsedVertical:function(){return true},createLegendCt:function(){var c=this,a=[],b={xtype:"container",baseCls:c.baseCls+"-header",id:c.id+"-legend",autoEl:"legend",items:a,ownerCt:c,ownerLayout:c.componentLayout};if(c.checkboxToggle){a.push(c.createCheckboxCmp())}else{if(c.collapsible){a.push(c.createToggleCmp())}}a.push(c.createTitleCmp());return b},createTitleCmp:function(){var b=this,a={xtype:"component",html:b.title,cls:b.baseCls+"-header-text",id:b.id+"-legendTitle"};if(b.collapsible&&b.toggleOnTitleClick){a.listeners={el:{scope:b,click:b.toggle}};a.cls+=" "+b.baseCls+"-header-text-collapsible"}return(b.titleCmp=Ext.widget(a))},createCheckboxCmp:function(){var a=this,b="-checkbox";a.checkboxCmp=Ext.widget({xtype:"checkbox",hideEmptyLabel:true,name:a.checkboxName||a.id+b,cls:a.baseCls+"-header"+b,id:a.id+"-legendChk",checked:!a.collapsed,listeners:{change:a.onCheckChange,scope:a}});return a.checkboxCmp},createToggleCmp:function(){var a=this;a.toggleCmp=Ext.widget({xtype:"tool",type:"toggle",handler:a.toggle,id:a.id+"-legendToggle",scope:a});return a.toggleCmp},doRenderLegend:function(b,e){var d=e.$comp,c=d.legend,a;if(c){c.ownerLayout.configureItem(c);a=c.getRenderTree();Ext.DomHelper.generateMarkup(a,b)}},finishRender:function(){var a=this.legend;this.callParent();if(a){a.finishRender()}},getCollapsed:function(){return this.collapsed?"top":false},getCollapsedDockedItems:function(){var a=this.legend;return a?[a]:[]},setTitle:function(c){var b=this,a=b.legend;b.title=c;if(b.rendered){if(!b.legend){b.legend=a=Ext.widget(b.createLegendCt());a.ownerLayout.configureItem(a);a.render(b.el,0)}b.titleCmp.update(c)}return b},getTargetEl:function(){return this.body||this.frameBody||this.el},getContentTarget:function(){return this.body},expand:function(){return this.setExpanded(true)},collapse:function(){return this.setExpanded(false)},setExpanded:function(b){var c=this,d=c.checkboxCmp,a=b?"expand":"collapse";if(!c.rendered||c.fireEvent("before"+a,c)!==false){b=!!b;if(d){d.setValue(b)}if(b){c.removeCls(c.baseCls+"-collapsed")}else{c.addCls(c.baseCls+"-collapsed")}c.collapsed=!b;if(c.rendered){c.updateLayout({isRoot:false});c.fireEvent(a,c)}}return c},getRefItems:function(a){var c=this.callParent(arguments),b=this.legend;if(b){c.unshift(b);if(a){c.unshift.apply(c,b.getRefItems(true))}}return c},toggle:function(){this.setExpanded(!!this.collapsed)},onCheckChange:function(b,a){this.setExpanded(a)},setupRenderTpl:function(a){this.callParent(arguments);a.renderLegend=this.doRenderLegend}});Ext.define("Ext.form.Label",{extend:"Ext.Component",alias:"widget.label",requires:["Ext.util.Format"],autoEl:"label",maskOnDisable:false,getElConfig:function(){var a=this;a.html=a.text?Ext.util.Format.htmlEncode(a.text):(a.html||"");return Ext.apply(a.callParent(),{htmlFor:a.forId||""})},setText:function(c,b){var a=this;b=b!==false;if(b){a.text=c;delete a.html}else{a.html=c;delete a.text}if(a.rendered){a.el.dom.innerHTML=b!==false?Ext.util.Format.htmlEncode(c):c;a.updateLayout()}return a}});Ext.define("Ext.form.Panel",{extend:"Ext.panel.Panel",mixins:{fieldAncestor:"Ext.form.FieldAncestor"},alias:"widget.form",alternateClassName:["Ext.FormPanel","Ext.form.FormPanel"],requires:["Ext.form.Basic","Ext.util.TaskRunner"],layout:"anchor",ariaRole:"form",basicFormConfigs:["api","baseParams","errorReader","method","paramOrder","paramsAsHash","reader","standardSubmit","timeout","trackResetOnLoad","url","waitMsgTarget","waitTitle"],initComponent:function(){var a=this;if(a.frame){a.border=false}a.initFieldAncestor();a.callParent();a.relayEvents(a.form,["beforeaction","actionfailed","actioncomplete","validitychange","dirtychange"]);if(a.pollForChanges){a.startPolling(a.pollInterval||500)}},initItems:function(){var a=this;a.form=a.createForm();a.callParent()},afterFirstLayout:function(){this.callParent();this.form.initialize()},createForm:function(){var b={},d=this.basicFormConfigs,a=d.length,c=0,e;for(;c","{beforeBoxLabelTpl}",'","{afterBoxLabelTpl}","
",' tabIndex="{tabIdx}"
',' disabled="disabled"',' style="{fieldStyle}"',' class="{fieldCls} {typeCls}" autocomplete="off" hidefocus="true" />',"","{beforeBoxLabelTpl}",'","{afterBoxLabelTpl}","",{disableFormats:true,compiled:true}],subTplInsertions:["beforeBoxLabelTpl","afterBoxLabelTpl","beforeBoxLabelTextTpl","afterBoxLabelTextTpl","boxLabelAttrTpl","inputAttrTpl"],isCheckbox:true,focusCls:"form-cb-focus",fieldBodyCls:Ext.baseCSSPrefix+"form-cb-wrap",checked:false,checkedCls:Ext.baseCSSPrefix+"form-cb-checked",boxLabelCls:Ext.baseCSSPrefix+"form-cb-label",boxLabelAlign:"after",inputValue:"on",checkChangeEvents:[],inputType:"checkbox",onRe:/^on$/i,initComponent:function(){this.callParent(arguments);this.getManager().add(this)},initValue:function(){var b=this,a=!!b.checked;b.originalValue=b.lastValue=a;b.setValue(a)},getElConfig:function(){var a=this;if(a.isChecked(a.rawValue,a.inputValue)){a.addCls(a.checkedCls)}return a.callParent()},getFieldStyle:function(){return Ext.isObject(this.fieldStyle)?Ext.DomHelper.generateStyles(this.fieldStyle):this.fieldStyle||""},getSubTplData:function(){var a=this;return Ext.apply(a.callParent(),{disabled:a.readOnly||a.disabled,boxLabel:a.boxLabel,boxLabelCls:a.boxLabelCls,boxLabelAlign:a.boxLabelAlign})},initEvents:function(){var a=this;a.callParent();a.mon(a.inputEl,"click",a.onBoxClick,a)},onBoxClick:function(b){var a=this;if(!a.disabled&&!a.readOnly){this.setValue(!this.checked)}},getRawValue:function(){return this.checked},getValue:function(){return this.checked},getSubmitValue:function(){var a=this.uncheckedValue,b=Ext.isDefined(a)?a:null;return this.checked?this.inputValue:b},isChecked:function(b,a){return(b===true||b==="true"||b==="1"||b===1||(((Ext.isString(b)||Ext.isNumber(b))&&a)?b==a:this.onRe.test(b)))},setRawValue:function(c){var b=this,d=b.inputEl,a=b.isChecked(c,b.inputValue);if(d){b[a?"addCls":"removeCls"](b.checkedCls)}b.checked=b.rawValue=a;return a},setValue:function(g){var e=this,c,b,a,d;if(Ext.isArray(g)){c=e.getManager().getByName(e.name,e.getFormId()).items;a=c.length;for(b=0;bc){c=g;k=m}}a=Math.max(h.callParent(arguments),b.inputEl.getTextWidth(k+b.growAppend));if(!h.startingWidth||b.removingRecords){h.startingWidth=a;if(a'+b+""+a.getTriggerMarkup()+""},getSubTplData:function(){var b=this,c=b.callParent(),d=b.readOnly===true,a=b.editable!==false;return Ext.apply(c,{editableCls:(d||!a)?" "+b.triggerNoEditCls:"",readOnly:!a||d})},getLabelableRenderData:function(){var b=this,c=b.triggerWrapCls,a=b.callParent(arguments);return Ext.applyIf(a,{triggerWrapCls:c,triggerMarkup:b.getTriggerMarkup()})},getTriggerMarkup:function(){var c=this,b=0,d=(c.readOnly||c.hideTrigger),g,e=c.triggerBaseCls,a=[];if(!c.trigger1Cls){c.trigger1Cls=c.triggerCls}for(b=0;(g=c["trigger"+(b+1)+"Cls"])||b<1;b++){a.push({tag:"td",valign:"top",cls:Ext.baseCSSPrefix+"trigger-cell",style:"width:"+c.triggerWidth+(d?"px;display:none":"px"),cn:{cls:[Ext.baseCSSPrefix+"trigger-index-"+b,e,g].join(" "),role:"button"}})}a[b-1].cn.cls+=" "+e+"-last";return Ext.DomHelper.markup(a)},disableCheck:function(){return !this.disabled},beforeRender:function(){var a=this,b=a.triggerBaseCls,c;if(!a.triggerWidth){c=Ext.resetElement.createChild({style:"position: absolute;",cls:Ext.baseCSSPrefix+"form-trigger"});Ext.form.field.Trigger.prototype.triggerWidth=c.getWidth();c.remove()}a.callParent();if(b!=Ext.baseCSSPrefix+"form-trigger"){a.addChildEls({name:"triggerEl",select:"."+b})}a.lastTriggerStateFlags=a.getTriggerStateFlags()},onRender:function(){var a=this;a.callParent(arguments);a.doc=Ext.getDoc();a.initTrigger();a.triggerEl.unselectable()},getTriggerWidth:function(){var b=this,a=0;if(b.triggerWrap&&!b.hideTrigger&&!b.readOnly){a=b.triggerEl.getCount()*b.triggerWidth}return a},setHideTrigger:function(a){if(a!=this.hideTrigger){this.hideTrigger=a;this.updateLayout()}},setEditable:function(a){if(a!=this.editable){this.editable=a;this.updateLayout()}},setReadOnly:function(a){if(a!=this.readOnly){this.readOnly=a;this.updateLayout()}},initTrigger:function(){var h=this,i=h.triggerWrap,k=h.triggerEl,a=h.disableCheck,d,c,b,g,j;if(h.repeatTriggerClick){h.triggerRepeater=new Ext.util.ClickRepeater(i,{preventDefault:true,handler:h.onTriggerWrapClick,listeners:{mouseup:h.onTriggerWrapMouseup,scope:h},scope:h})}else{h.mon(i,{click:h.onTriggerWrapClick,mouseup:h.onTriggerWrapMouseup,scope:h})}k.setVisibilityMode(Ext.Element.DISPLAY);k.addClsOnOver(h.triggerBaseCls+"-over",a,h);d=k.elements;c=d.length;for(g=0;g1){b.doSelect(a,c,false)}else{b.doSelect(a,false)}}}}break;case"SIMPLE":if(b.isSelected(a)){b.doDeselect(a)}else{b.doSelect(a,true)}break;case"SINGLE":if(b.allowDeselect&&b.isSelected(a)){b.doDeselect(a)}else{b.doSelect(a,false)}break}},selectRange:function(l,e,m,c){var j=this,k=j.store,d=0,h,g,a,b=[];if(j.isLocked()){return}if(!m){j.deselectAll(true)}if(!Ext.isNumber(l)){l=k.indexOf(l)}if(!Ext.isNumber(e)){e=k.indexOf(e)}if(l>e){g=e;e=l;l=g}for(h=l;h<=e;h++){if(j.isSelected(k.getAt(h))){d++}}if(!c){a=-1}else{a=(c=="up")?l:e}for(h=l;h<=e;h++){if(d==(e-l+1)){if(h!=a){j.doDeselect(h,true)}}else{b.push(k.getAt(h))}}j.doMultiSelect(b,true)},select:function(b,c,a){if(Ext.isDefined(b)){this.doSelect(b,c,a)}},deselect:function(b,a){this.doDeselect(b,a)},doSelect:function(c,e,b){var d=this,a;if(d.locked||!d.store){return}if(typeof c==="number"){c=[d.store.getAt(c)]}if(d.selectionMode=="SINGLE"&&c){a=c.length?c[0]:c;d.doSingleSelect(a,b)}else{d.doMultiSelect(c,e,b)}},doMultiSelect:function(a,l,k){var h=this,b=h.selected,j=false,d=0,g,e;if(h.locked){return}a=!Ext.isArray(a)?[a]:a;g=a.length;if(!l&&b.getCount()>0){if(h.doDeselect(h.getSelection(),k)===false){return}}function c(){b.add(e);j=true}for(;d0&&!k);return g===l},doSingleSelect:function(a,b){var d=this,g=false,c=d.selected;if(d.locked){return}if(d.isSelected(a)){return}function e(){d.bulkChange=true;if(c.getCount()>0&&d.doDeselect(d.lastSelected,b)===false){delete d.bulkChange;return false}delete d.bulkChange;c.add(a);d.lastSelected=a;g=true}d.onSelectChange(a,true,b,e);if(g){if(!b){d.setLastFocused(a)}d.maybeFireSelectionChange(!b)}},setLastFocused:function(c,b){var d=this,a=d.lastFocused;d.lastFocused=c;if(c!==a){d.onLastFocusChanged(a,c,b)}},isFocused:function(a){return a===this.getLastFocused()},maybeFireSelectionChange:function(a){var b=this;if(a&&!b.bulkChange){b.fireEvent("selectionchange",b,b.getSelection())}},getLastSelected:function(){return this.lastSelected},getLastFocused:function(){return this.lastFocused},getSelection:function(){return this.selected.getRange()},getSelectionMode:function(){return this.selectionMode},setSelectionMode:function(a){a=a?a.toUpperCase():"SINGLE";this.selectionMode=this.modes[a]?a:"SINGLE"},isLocked:function(){return this.locked},setLocked:function(a){this.locked=!!a},isSelected:function(a){a=Ext.isNumber(a)?this.store.getAt(a):a;return this.selected.indexOf(a)!==-1},hasSelection:function(){return this.selected.getCount()>0},refresh:function(){var e=this,j=e.store,c=[],a=e.getSelection(),d=a.length,h,g,b=0,k=e.getLastFocused();if(!j){return}for(;b0){this.clearSelections();this.maybeFireSelectionChange(true)}},onStoreRemove:function(b,a,c){var e=this,d=e.selected;if(e.locked||!e.pruneRemoved){return}if(d.remove(a)){if(e.lastSelected==a){e.lastSelected=null}if(e.getLastFocused()==a){e.setLastFocused(null)}e.maybeFireSelectionChange(true)}},getCount:function(){return this.selected.getCount()},destroy:Ext.emptyFn,onStoreUpdate:Ext.emptyFn,onStoreLoad:Ext.emptyFn,onSelectChange:Ext.emptyFn,onLastFocusChanged:function(b,a){this.fireEvent("focuschange",this,b,a)},onEditorKey:Ext.emptyFn,bindComponent:Ext.emptyFn,beforeViewRender:Ext.emptyFn});Ext.define("Ext.selection.DataViewModel",{extend:"Ext.selection.Model",requires:["Ext.util.KeyNav"],deselectOnContainerClick:true,enableKeyNav:true,constructor:function(a){this.addEvents("beforedeselect","beforeselect","deselect","select");this.callParent(arguments)},bindComponent:function(a){var b=this,c={refresh:b.refresh,scope:b};b.view=a;b.bindStore(a.getStore());c[a.triggerEvent]=b.onItemClick;c[a.triggerCtEvent]=b.onContainerClick;a.on(c);if(b.enableKeyNav){b.initKeyNav(a)}},onItemClick:function(b,a,d,c,g){this.selectWithEvent(a,g)},onContainerClick:function(){if(this.deselectOnContainerClick){this.deselectAll()}},initKeyNav:function(a){var b=this;if(!a.rendered){a.on({render:Ext.Function.bind(b.initKeyNav,b,[a]),single:true});return}a.el.set({tabIndex:-1});b.keyNav=new Ext.util.KeyNav({target:a.el,ignoreInputFields:true,down:Ext.pass(b.onNavKey,[1],b),right:Ext.pass(b.onNavKey,[1],b),left:Ext.pass(b.onNavKey,[-1],b),up:Ext.pass(b.onNavKey,[-1],b),scope:b})},onNavKey:function(g){g=g||1;var e=this,b=e.view,d=e.getSelection()[0],c=e.view.store.getCount(),a;if(d){a=b.indexOf(b.getNode(d))+g}else{a=0}if(a<0){a=c-1}else{if(a>=c){a=0}}e.select(a)},onSelectChange:function(b,e,d,h){var g=this,a=g.view,c=e?"select":"deselect";if((d||g.fireEvent("before"+c,g,b))!==false&&h()!==false){if(a){if(e){a.onItemSelect(b)}else{a.onItemDeselect(b)}}if(!d){g.fireEvent(c,g,b)}}},destroy:function(){Ext.destroy(this.keyNav);this.callParent()}});Ext.define("Ext.view.AbstractView",{extend:"Ext.Component",requires:["Ext.LoadMask","Ext.data.StoreManager","Ext.CompositeElementLite","Ext.DomQuery","Ext.selection.DataViewModel"],mixins:{bindable:"Ext.util.Bindable"},inheritableStatics:{getRecord:function(a){return this.getBoundView(a).getRecord(a)},getBoundView:function(a){return Ext.getCmp(a.boundView)}},deferInitialRefresh:true,itemCls:Ext.baseCSSPrefix+"dataview-item",loadingText:"Loading...",loadMask:true,loadingUseMsg:true,selectedItemCls:Ext.baseCSSPrefix+"item-selected",emptyText:"",deferEmptyText:true,trackOver:false,blockRefresh:false,preserveScrollOnRefresh:false,last:false,triggerEvent:"itemclick",triggerCtEvent:"containerclick",addCmpEvents:function(){},initComponent:function(){var c=this,a=Ext.isDefined,d=c.itemTpl,b={};if(d){if(Ext.isArray(d)){d=d.join("")}else{if(Ext.isObject(d)){b=Ext.apply(b,d.initialConfig);d=d.html}}if(!c.itemSelector){c.itemSelector="."+c.itemCls}d=Ext.String.format('
{1}
',c.itemCls,d);c.tpl=new Ext.XTemplate(d,b)}c.callParent();if(Ext.isString(c.tpl)||Ext.isArray(c.tpl)){c.tpl=new Ext.XTemplate(c.tpl)}c.addEvents("beforerefresh","refresh","viewready","itemupdate","itemadd","itemremove");c.addCmpEvents();c.store=Ext.data.StoreManager.lookup(c.store||"ext-empty-store");c.bindStore(c.store,true);c.all=new Ext.CompositeElementLite();c.scrollState={top:0,left:0};c.on({scroll:c.onViewScroll,element:"el",scope:c})},onRender:function(){var c=this,b=c.loadMask,a={msg:c.loadingText,msgCls:c.loadingCls,useMsg:c.loadingUseMsg,store:c.getMaskStore()};c.callParent(arguments);if(b){if(Ext.isObject(b)){a=Ext.apply(a,b)}c.loadMask=new Ext.LoadMask(c,a);c.loadMask.on({scope:c,beforeshow:c.onMaskBeforeShow,hide:c.onMaskHide})}},finishRender:function(){var a=this;a.callParent(arguments);if(!a.up("[collapsed],[hidden]")){a.doFirstRefresh(a.store)}},onBoxReady:function(){var a=this;a.callParent(arguments);if(!a.firstRefreshDone){a.doFirstRefresh(a.store)}},getMaskStore:function(){return this.store},onMaskBeforeShow:function(){var b=this,a=b.loadingHeight;b.getSelectionModel().deselectAll();b.all.clear();if(a&&a>b.getHeight()){b.hasLoadingHeight=true;b.oldMinHeight=b.minHeight;b.minHeight=a;b.updateLayout()}},onMaskHide:function(){var a=this;if(!a.destroying&&a.hasLoadingHeight){a.minHeight=a.oldMinHeight;a.updateLayout();delete a.hasLoadingHeight}},beforeRender:function(){this.callParent(arguments);this.getSelectionModel().beforeViewRender(this)},afterRender:function(){this.callParent(arguments);this.getSelectionModel().bindComponent(this)},getSelectionModel:function(){var a=this,b="SINGLE";if(!a.selModel){a.selModel={}}if(a.simpleSelect){b="SIMPLE"}else{if(a.multiSelect){b="MULTI"}}Ext.applyIf(a.selModel,{allowDeselect:a.allowDeselect,mode:b});if(!a.selModel.events){a.selModel=new Ext.selection.DataViewModel(a.selModel)}if(!a.selModel.hasRelaySetup){a.relayEvents(a.selModel,["selectionchange","beforeselect","beforedeselect","select","deselect","focuschange"]);a.selModel.hasRelaySetup=true}if(a.disableSelection){a.selModel.locked=true}return a.selModel},refresh:function(){var c=this,h,b,e,d,g,a;if(!c.rendered||c.isDestroyed){return}if(!c.hasListeners.beforerefresh||c.fireEvent("beforerefresh",c)!==false){h=c.getTargetEl();a=c.store.getRange();g=h.dom;if(!c.preserveScrollOnRefresh){b=g.parentNode;e=g.style.display;g.style.display="none";d=g.nextSibling;b.removeChild(g)}if(c.refreshCounter){c.clearViewEl()}else{c.fixedNodes=h.dom.childNodes.length;c.refreshCounter=1}c.tpl.append(h,c.collectData(a,0));if(a.length<1){if(!c.deferEmptyText||c.hasSkippedEmptyText){Ext.core.DomHelper.insertHtml("beforeEnd",h.dom,c.emptyText)}c.all.clear()}else{c.all.fill(Ext.query(c.getItemSelector(),h.dom));c.updateIndexes(0)}c.selModel.refresh();c.hasSkippedEmptyText=true;if(!c.preserveScrollOnRefresh){b.insertBefore(g,d);g.style.display=e}this.refreshSize();c.fireEvent("refresh",c);if(!c.viewReady){c.viewReady=true;c.fireEvent("viewready",c)}}},refreshSize:function(){var a=this.getSizeModel();if(a.height.shrinkWrap||a.width.shrinkWrap){this.updateLayout()}},clearViewEl:function(){var b=this,a=b.getTargetEl();if(b.fixedNodes){while(a.dom.childNodes[b.fixedNodes]){a.dom.removeChild(a.dom.childNodes[b.fixedNodes])}}else{a.update("")}b.refreshCounter++},onViewScroll:Ext.emptyFn,saveScrollState:function(){if(this.rendered){var b=this.el.dom,a=this.scrollState;a.left=b.scrollLeft;a.top=b.scrollTop}},restoreScrollState:function(){if(this.rendered){var b=this.el.dom,a=this.scrollState;b.scrollLeft=a.left;b.scrollTop=a.top}},prepareData:function(e,d,c){var b,a;if(c){b=c.getAssociatedData();for(a in b){if(b.hasOwnProperty(a)){e[a]=b[a]}}}return e},collectData:function(c,g){var e=[],d=0,a=c.length,b;for(;d-1){c=d.bufferRender([a],b)[0];if(d.getNode(a)){d.all.replaceElement(b,c,true);d.updateIndexes(b,b);d.selModel.refresh();if(d.hasListeners.itemupdate){d.fireEvent("itemupdate",a,b,c)}return c}}}},onAdd:function(e,b,c){var d=this,a;if(d.rendered){if(d.all.getCount()===0){d.refresh();return}a=d.bufferRender(b,c);d.doAdd(a,b,c);d.selModel.refresh();d.updateIndexes(c);d.refreshSize();if(d.hasListeners.itemadd){d.fireEvent("itemadd",b,c,a)}}},doAdd:function(b,a,c){var d=this.all,e=d.getCount();if(e===0){this.clearViewEl();this.getTargetEl().appendChild(b)}else{if(c
',initComponent:function(){this.callParent();this.addEvents("spin","spinup","spindown")},onRender:function(){var b=this,a;b.callParent(arguments);a=b.triggerEl;b.spinUpEl=a.item(0);b.spinDownEl=a.item(1);b.triggerCell=b.spinUpEl.parent();b.setSpinUpEnabled(b.spinUpEnabled);b.setSpinDownEnabled(b.spinDownEnabled);if(b.keyNavEnabled){b.spinnerKeyNav=new Ext.util.KeyNav(b.inputEl,{scope:b,up:b.spinUp,down:b.spinDown})}if(b.mouseWheelEnabled){b.mon(b.bodyEl,"mousewheel",b.onMouseWheel,b)}},getSubTplMarkup:function(){var a=this,b=Ext.form.field.Base.prototype.getSubTplMarkup.apply(a,arguments);return'"+a.getTriggerMarkup()+"
'+b+"
"},getTriggerMarkup:function(){var a=this,b=(a.readOnly||a.hideTrigger);return a.getTpl("triggerTpl").apply({triggerStyle:"width:"+a.triggerWidth+(b?"px;display:none":"px")})},getTriggerWidth:function(){var b=this,a=0;if(b.triggerWrap&&!b.hideTrigger&&!b.readOnly){a=b.triggerWidth}return a},onTrigger1Click:function(){this.spinUp()},onTrigger2Click:function(){this.spinDown()},onTriggerWrapMouseup:function(){this.inputEl.focus()},spinUp:function(){var a=this;if(a.spinUpEnabled&&!a.disabled){a.fireEvent("spin",a,"up");a.fireEvent("spinup",a);a.onSpinUp()}},spinDown:function(){var a=this;if(a.spinDownEnabled&&!a.disabled){a.fireEvent("spin",a,"down");a.fireEvent("spindown",a);a.onSpinDown()}},setSpinUpEnabled:function(a){var b=this,c=b.spinUpEnabled;b.spinUpEnabled=a;if(c!==a&&b.rendered){b.spinUpEl[a?"removeCls":"addCls"](b.trigger1Cls+"-disabled")}},setSpinDownEnabled:function(a){var b=this,c=b.spinDownEnabled;b.spinDownEnabled=a;if(c!==a&&b.rendered){b.spinDownEl[a?"removeCls":"addCls"](b.trigger2Cls+"-disabled")}},onMouseWheel:function(b){var a=this,c;if(a.hasFocus){c=b.getWheelDelta();if(c>0){a.spinUp()}else{if(c<0){a.spinDown()}}b.stopEvent()}},onDestroy:function(){Ext.destroyMembers(this,"spinnerKeyNav","spinUpEl","spinDownEl");this.callParent()}});Ext.define("Ext.form.field.Number",{extend:"Ext.form.field.Spinner",alias:"widget.numberfield",alternateClassName:["Ext.form.NumberField","Ext.form.Number"],allowDecimals:true,decimalSeparator:".",submitLocaleSeparator:true,decimalPrecision:2,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,step:1,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",negativeText:"The value cannot be negative",baseChars:"0123456789",autoStripChars:false,initComponent:function(){var a=this,b;a.callParent();a.setMinValue(a.minValue);a.setMaxValue(a.maxValue);if(a.disableKeyFilter!==true){b=a.baseChars+"";if(a.allowDecimals){b+=a.decimalSeparator}if(a.minValue<0){b+="-"}b=Ext.String.escapeRegex(b);a.maskRe=new RegExp("["+b+"]");if(a.autoStripChars){a.stripCharsRe=new RegExp("[^"+b+"]","gi")}}},getErrors:function(c){var b=this,e=b.callParent(arguments),d=Ext.String.format,a;c=Ext.isDefined(c)?c:this.processRawValue(this.getRawValue());if(c.length<1){return e}c=String(c).replace(b.decimalSeparator,".");if(isNaN(c)){e.push(d(b.nanText,c))}a=b.parseValue(c);if(b.minValue===0&&a<0){e.push(this.negativeText)}else{if(ab.maxValue){e.push(d(b.maxText,b.maxValue))}return e},rawToValue:function(b){var a=this.fixPrecision(this.parseValue(b));if(a===null){a=b||null}return a},valueToRaw:function(c){var b=this,a=b.decimalSeparator;c=b.parseValue(c);c=b.fixPrecision(c);c=Ext.isNumber(c)?c:parseFloat(String(c).replace(a,"."));c=isNaN(c)?"":String(c).replace(".",a);return c},getSubmitValue:function(){var a=this,b=a.callParent();if(!a.submitLocaleSeparator){b=b.replace(a.decimalSeparator,".")}return b},onChange:function(){this.toggleSpinners();this.callParent(arguments)},toggleSpinners:function(){var b=this,c=b.getValue(),a=c===null;b.setSpinUpEnabled(a||cb.minValue)},setMinValue:function(a){this.minValue=Ext.Number.from(a,Number.NEGATIVE_INFINITY);this.toggleSpinners()},setMaxValue:function(a){this.maxValue=Ext.Number.from(a,Number.MAX_VALUE);this.toggleSpinners()},parseValue:function(a){a=parseFloat(String(a).replace(this.decimalSeparator,"."));return isNaN(a)?null:a},fixPrecision:function(d){var c=this,b=isNaN(d),a=c.decimalPrecision;if(b||!d){return b?"":d}else{if(!c.allowDecimals||a<=0){a=0}}return parseFloat(Ext.Number.toFixed(parseFloat(d),a))},beforeBlur:function(){var b=this,a=b.parseValue(b.getRawValue());if(!Ext.isEmpty(a)){b.setValue(a)}},onSpinUp:function(){var a=this;if(!a.readOnly){a.setValue(Ext.Number.constrain(a.getValue()+a.step,a.minValue,a.maxValue))}},onSpinDown:function(){var a=this;if(!a.readOnly){a.setValue(Ext.Number.constrain(a.getValue()-a.step,a.minValue,a.maxValue))}}});Ext.define("Ext.toolbar.Paging",{extend:"Ext.toolbar.Toolbar",alias:"widget.pagingtoolbar",alternateClassName:"Ext.PagingToolbar",requires:["Ext.toolbar.TextItem","Ext.form.field.Number"],mixins:{bindable:"Ext.util.Bindable"},displayInfo:false,prependButtons:false,displayMsg:"Displaying {0} - {1} of {2}",emptyMsg:"No data to display",beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",inputItemWidth:30,getPagingItems:function(){var a=this;return[{itemId:"first",tooltip:a.firstText,overflowText:a.firstText,iconCls:Ext.baseCSSPrefix+"tbar-page-first",disabled:true,handler:a.moveFirst,scope:a},{itemId:"prev",tooltip:a.prevText,overflowText:a.prevText,iconCls:Ext.baseCSSPrefix+"tbar-page-prev",disabled:true,handler:a.movePrevious,scope:a},"-",a.beforePageText,{xtype:"numberfield",itemId:"inputItem",name:"inputItem",cls:Ext.baseCSSPrefix+"tbar-page-number",allowDecimals:false,minValue:1,hideTrigger:true,enableKeyEvents:true,keyNavEnabled:false,selectOnFocus:true,submitValue:false,isFormField:false,width:a.inputItemWidth,margins:"-1 2 3 2",listeners:{scope:a,keydown:a.onPagingKeyDown,blur:a.onPagingBlur}},{xtype:"tbtext",itemId:"afterTextItem",text:Ext.String.format(a.afterPageText,1)},"-",{itemId:"next",tooltip:a.nextText,overflowText:a.nextText,iconCls:Ext.baseCSSPrefix+"tbar-page-next",disabled:true,handler:a.moveNext,scope:a},{itemId:"last",tooltip:a.lastText,overflowText:a.lastText,iconCls:Ext.baseCSSPrefix+"tbar-page-last",disabled:true,handler:a.moveLast,scope:a},"-",{itemId:"refresh",tooltip:a.refreshText,overflowText:a.refreshText,iconCls:Ext.baseCSSPrefix+"tbar-loading",handler:a.doRefresh,scope:a}]},initComponent:function(){var b=this,c=b.getPagingItems(),a=b.items||b.buttons||[];if(b.prependButtons){b.items=a.concat(c)}else{b.items=c.concat(a)}delete b.buttons;if(b.displayInfo){b.items.push("->");b.items.push({xtype:"tbtext",itemId:"displayItem"})}b.callParent();b.addEvents("change","beforechange");b.on("beforerender",b.onLoad,b,{single:true});b.bindStore(b.store||"ext-empty-store",true)},updateInfo:function(){var e=this,c=e.child("#displayItem"),a=e.store,b=e.getPageData(),d,g;if(c){d=a.getCount();if(d===0){g=e.emptyMsg}else{g=Ext.String.format(e.displayMsg,b.fromRecord,b.toRecord,b.total)}c.setText(g)}},onLoad:function(){var g=this,d,b,c,a,e,h;e=g.store.getCount();h=e===0;if(!h){d=g.getPageData();b=d.currentPage;c=d.pageCount;a=Ext.String.format(g.afterPageText,isNaN(c)?1:c)}else{b=0;c=0;a=Ext.String.format(g.afterPageText,0)}Ext.suspendLayouts();g.child("#afterTextItem").setText(a);g.child("#inputItem").setDisabled(h).setValue(b);g.child("#first").setDisabled(b===1||h);g.child("#prev").setDisabled(b===1||h);g.child("#next").setDisabled(b===c||h);g.child("#last").setDisabled(b===c||h);g.child("#refresh").enable();g.updateInfo();Ext.resumeLayouts(true);if(g.rendered){g.fireEvent("change",g,d)}},getPageData:function(){var b=this.store,a=b.getTotalCount();return{total:a,currentPage:b.currentPage,pageCount:Math.ceil(a/b.pageSize),fromRecord:((b.currentPage-1)*b.pageSize)+1,toRecord:Math.min(b.currentPage*b.pageSize,a)}},onLoadError:function(){if(!this.rendered){return}this.child("#refresh").enable()},readPageFromInput:function(b){var a=this.child("#inputItem").getValue(),c=parseInt(a,10);if(!a||isNaN(c)){this.child("#inputItem").setValue(b.currentPage);return false}return c},onPagingFocus:function(){this.child("#inputItem").select()},onPagingBlur:function(b){var a=this.getPageData().currentPage;this.child("#inputItem").setValue(a)},onPagingKeyDown:function(i,h){var d=this,b=h.getKey(),c=d.getPageData(),a=h.shiftKey?10:1,g;if(b==h.RETURN){h.stopEvent();g=d.readPageFromInput(c);if(g!==false){g=Math.min(Math.max(1,g),c.pageCount);if(d.fireEvent("beforechange",d,g)!==false){d.store.loadPage(g)}}}else{if(b==h.HOME||b==h.END){h.stopEvent();g=b==h.HOME?1:c.pageCount;i.setValue(g)}else{if(b==h.UP||b==h.PAGE_UP||b==h.DOWN||b==h.PAGE_DOWN){h.stopEvent();g=d.readPageFromInput(c);if(g){if(b==h.DOWN||b==h.PAGE_DOWN){a*=-1}g+=a;if(g>=1&&g<=c.pageCount){i.setValue(g)}}}}}},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable()}},moveFirst:function(){if(this.fireEvent("beforechange",this,1)!==false){this.store.loadPage(1)}},movePrevious:function(){var b=this,a=b.store.currentPage-1;if(a>0){if(b.fireEvent("beforechange",b,a)!==false){b.store.previousPage()}}},moveNext:function(){var c=this,b=c.getPageData().pageCount,a=c.store.currentPage+1;if(a<=b){if(c.fireEvent("beforechange",c,a)!==false){c.store.nextPage()}}},moveLast:function(){var b=this,a=b.getPageData().pageCount;if(b.fireEvent("beforechange",b,a)!==false){b.store.loadPage(a)}},doRefresh:function(){var a=this,b=a.store.currentPage;if(a.fireEvent("beforechange",a,b)!==false){a.store.loadPage(b)}},getStoreListeners:function(){return{beforeload:this.beforeLoad,load:this.onLoad,exception:this.onLoadError}},unbind:function(a){this.bindStore(null)},bind:function(a){this.bindStore(a)},onDestroy:function(){this.unbind();this.callParent()}});Ext.define("Ext.view.BoundList",{extend:"Ext.view.View",alias:"widget.boundlist",alternateClassName:"Ext.BoundList",requires:["Ext.layout.component.BoundList","Ext.toolbar.Paging"],pageSize:0,baseCls:Ext.baseCSSPrefix+"boundlist",itemCls:Ext.baseCSSPrefix+"boundlist-item",listItemCls:"",shadow:false,trackOver:true,refreshed:0,deferInitialRefresh:false,componentLayout:"boundlist",childEls:["listEl"],renderTpl:['
',"{%","var me=values.$comp, pagingToolbar=me.pagingToolbar;","if (pagingToolbar) {","pagingToolbar.ownerLayout = me.componentLayout;","Ext.DomHelper.generateMarkup(pagingToolbar.getRenderTree(), out);","}","%}",{disableFormats:true}],initComponent:function(){var b=this,a=b.baseCls,c=b.itemCls;b.selectedItemCls=a+"-selected";b.overItemCls=a+"-item-over";b.itemSelector="."+c;if(b.floating){b.addCls(a+"-floating")}if(!b.tpl){b.tpl=new Ext.XTemplate('
    ','
  • '+b.getInnerTpl(b.displayField)+"
  • ","
")}else{if(Ext.isString(b.tpl)){b.tpl=new Ext.XTemplate(b.tpl)}}if(b.pageSize){b.pagingToolbar=b.createPagingToolbar()}b.callParent()},beforeRender:function(){var a=this;a.callParent(arguments);if(a.up("menu")){a.addCls(Ext.baseCSSPrefix+"menu")}},getBubbleTarget:function(){return this.pickerField},getRefItems:function(){return this.pagingToolbar?[this.pagingToolbar]:[]},createPagingToolbar:function(){return Ext.widget("pagingtoolbar",{id:this.id+"-paging-toolbar",pageSize:this.pageSize,store:this.store,border:false,ownerCt:this,ownerLayout:this.getComponentLayout()})},finishRenderChildren:function(){var a=this.pagingToolbar;this.callParent(arguments);if(a){a.finishRender()}},refresh:function(){var b=this,a=b.pagingToolbar;b.callParent();if(b.rendered&&a&&a.rendered&&!b.preserveScrollOnRefresh){b.el.appendChild(a.el)}},bindStore:function(a,b){var c=this.pagingToolbar;this.callParent(arguments);if(c){c.bindStore(this.store,b)}},getTargetEl:function(){return this.listEl||this.el},getInnerTpl:function(a){return"{"+a+"}"},onDestroy:function(){Ext.destroyMembers(this,"pagingToolbar","listEl");this.callParent()}});Ext.define("Ext.view.BoundListKeyNav",{extend:"Ext.util.KeyNav",requires:"Ext.view.BoundList",constructor:function(b,a){var c=this;c.boundList=a.boundList;c.callParent([b,Ext.apply({},a,c.defaultHandlers)])},defaultHandlers:{up:function(){var e=this,b=e.boundList,d=b.all,g=b.highlightedItem,c=g?b.indexOf(g):-1,a=c>0?c-1:d.getCount()-1;e.highlightAt(a)},down:function(){var e=this,b=e.boundList,d=b.all,g=b.highlightedItem,c=g?b.indexOf(g):-1,a=c',' value="{[Ext.util.Format.htmlEncode(values.value)]}"
',' name="{name}"',' placeholder="{placeholder}"',' size="{size}"',' maxlength="{maxLength}"',' readonly="readonly"',' disabled="disabled"',' tabIndex="{tabIdx}"',' style="{fieldStyle}"',"/>",{compiled:true,disableFormats:true}],getSubTplData:function(){var a=this;Ext.applyIf(a.subTplData,{hiddenDataCls:a.hiddenDataCls});return a.callParent(arguments)},afterRender:function(){var a=this;a.callParent(arguments);a.setHiddenValue(a.value)},multiSelect:false,delimiter:", ",displayField:"text",triggerAction:"all",allQuery:"",queryParam:"query",queryMode:"remote",queryCaching:true,pageSize:0,autoSelect:true,typeAhead:false,typeAheadDelay:250,selectOnTab:true,forceSelection:false,growToLongestValue:true,defaultListConfig:{loadingHeight:70,minWidth:70,maxHeight:300,shadow:"sides"},ignoreSelection:0,removingRecords:null,resizeComboToGrow:function(){var a=this;return a.grow&&a.growToLongestValue},initComponent:function(){var e=this,c=Ext.isDefined,b=e.store,d=e.transform,a,g;Ext.applyIf(e.renderSelectors,{hiddenDataEl:"."+e.hiddenDataCls.split(" ").join(".")});this.addEvents("beforequery","select","beforeselect","beforedeselect");if(d){a=Ext.getDom(d);if(a){if(!e.store){b=Ext.Array.map(Ext.Array.from(a.options),function(h){return[h.value,h.text]})}if(!e.name){e.name=a.name}if(!("value" in e)){e.value=a.value}}}e.bindStore(b||"ext-empty-store",true);b=e.store;if(b.autoCreated){e.queryMode="local";e.valueField=e.displayField="field1";if(!b.expanded){e.displayField="field2"}}if(!c(e.valueField)){e.valueField=e.displayField}g=e.queryMode==="local";if(!c(e.queryDelay)){e.queryDelay=g?10:500}if(!c(e.minChars)){e.minChars=g?0:4}if(!e.displayTpl){e.displayTpl=new Ext.XTemplate('{[typeof values === "string" ? values : values["'+e.displayField+'"]]}'+e.delimiter+"")}else{if(Ext.isString(e.displayTpl)){e.displayTpl=new Ext.XTemplate(e.displayTpl)}}e.callParent();e.doQueryTask=new Ext.util.DelayedTask(e.doRawQuery,e);if(e.store.getCount()>0){e.setValue(e.value)}if(a){e.render(a.parentNode,a);Ext.removeNode(a);delete e.renderTo}},getStore:function(){return this.store},beforeBlur:function(){this.doQueryTask.cancel();this.assertValue()},assertValue:function(){var a=this,b=a.getRawValue(),c;if(a.forceSelection){if(a.multiSelect){if(b!==a.getDisplayValue()){a.setValue(a.lastSelection)}}else{c=a.findRecordByDisplay(b);if(c){a.select(c)}else{a.setValue(a.lastSelection)}}}a.collapse()},onTypeAhead:function(){var e=this,d=e.displayField,b=e.store.findRecord(d,e.getRawValue()),c=e.getPicker(),g,a,h;if(b){g=b.get(d);a=g.length;h=e.getRawValue().length;c.highlightItem(c.getNode(b));if(h!==0&&h!==a){e.setRawValue(g);e.selectText(h,g.length)}}},resetToDefault:Ext.emptyFn,beforeReset:function(){this.callParent();this.clearFilter()},onUnbindStore:function(a){var b=this.picker;if(!a&&b){b.bindStore(null)}this.clearFilter()},onBindStore:function(a,c){var b=this.picker;if(!c){this.resetToDefault()}if(b){b.bindStore(a)}},getStoreListeners:function(){var a=this;return{beforeload:a.onBeforeLoad,clear:a.onClear,datachanged:a.onDataChanged,load:a.onLoad,exception:a.onException,remove:a.onRemove}},onBeforeLoad:function(){++this.ignoreSelection},onDataChanged:function(){var a=this;if(a.resizeComboToGrow()){a.updateLayout()}},onClear:function(){var a=this;if(a.resizeComboToGrow()){a.removingRecords=true;a.onDataChanged()}},onRemove:function(){var a=this;if(a.resizeComboToGrow()){a.removingRecords=true}},onException:function(){if(this.ignoreSelection>0){--this.ignoreSelection}this.collapse()},onLoad:function(){var a=this,b=a.value;if(a.ignoreSelection>0){--a.ignoreSelection}if(a.rawQuery){a.rawQuery=false;a.syncSelection();if(a.picker&&!a.picker.getSelectionModel().hasSelection()){a.doAutoSelect()}}else{if(a.value||a.value===0){a.setValue(a.value)}else{if(a.store.getCount()){a.doAutoSelect()}else{a.setValue(a.value)}}}},doRawQuery:function(){this.doQuery(this.getRawValue(),false,true)},doQuery:function(i,d,g){i=i||"";var e=this,b={query:i,forceAll:d,combo:e,cancel:false},a=e.store,h=e.queryMode==="local",c;if(e.fireEvent("beforequery",b)===false||b.cancel){return false}i=b.query;d=b.forceAll;if(d||(i.length>=e.minChars)){e.expand();if(!e.queryCaching||e.lastQuery!==i){e.lastQuery=i;if(h){a.suspendEvents();c=e.clearFilter();if(i||!d){e.activeFilter=new Ext.util.Filter({root:"data",property:e.displayField,value:i});a.filter(e.activeFilter);c=true}else{delete e.activeFilter}a.resumeEvents();if(e.rendered&&c){e.getPicker().refresh()}}else{e.rawQuery=g;if(e.pageSize){e.loadPage(1)}else{a.load({params:e.getParams(i)})}}}if(e.getRawValue()!==e.getDisplayValue()){e.ignoreSelection++;e.picker.getSelectionModel().deselectAll();e.ignoreSelection--}if(h){e.doAutoSelect()}if(e.typeAhead){e.doTypeAhead()}}return true},clearFilter:function(){var a=this.store,c=this.activeFilter,d=a.filters,b;if(c){if(d.getCount()>1){d.remove(c);b=d.getRange()}a.clearFilter(true);if(b){a.filter(b)}}return !!c},loadPage:function(a){this.store.loadPage(a,{params:this.getParams(this.lastQuery)})},onPageChange:function(b,a){this.loadPage(a);return false},getParams:function(c){var b={},a=this.queryParam;if(a){b[a]=c}return b},doAutoSelect:function(){var b=this,a=b.picker,c,d;if(a&&b.autoSelect&&b.store.getCount()>0){c=a.getSelectionModel().lastSelected;d=a.getNode(c||0);if(d){a.highlightItem(d);a.listEl.scrollChildIntoView(d,false)}}},doTypeAhead:function(){if(!this.typeAheadTask){this.typeAheadTask=new Ext.util.DelayedTask(this.onTypeAhead,this)}if(this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.typeAheadTask.delay(this.typeAheadDelay)}},onTriggerClick:function(){var a=this;if(!a.readOnly&&!a.disabled){if(a.isExpanded){a.collapse()}else{a.onFocus({});if(a.triggerAction==="all"){a.doQuery(a.allQuery,true)}else{a.doQuery(a.getRawValue(),false,true)}}a.inputEl.focus()}},onKeyUp:function(d,b){var c=this,a=d.getKey();if(!c.readOnly&&!c.disabled&&c.editable){c.lastKey=a;if(!d.isSpecialKey()||a==d.BACKSPACE||a==d.DELETE){c.doQueryTask.delay(c.queryDelay)}}if(c.enableKeyEvents){c.callParent(arguments)}},initEvents:function(){var a=this;a.callParent();if(!a.enableKeyEvents){a.mon(a.inputEl,"keyup",a.onKeyUp,a)}},onDestroy:function(){this.bindStore(null);this.callParent()},onAdded:function(){var a=this;a.callParent(arguments);if(a.picker){a.picker.ownerCt=a.up("[floating]");a.picker.registerWithOwnerCt()}},createPicker:function(){var c=this,b,a=Ext.apply({xtype:"boundlist",pickerField:c,selModel:{mode:c.multiSelect?"SIMPLE":"SINGLE"},floating:true,hidden:true,store:c.store,displayField:c.displayField,focusOnToFront:false,pageSize:c.pageSize,tpl:c.tpl},c.listConfig,c.defaultListConfig);b=c.picker=Ext.widget(a);if(c.pageSize){b.pagingToolbar.on("beforechange",c.onPageChange,c)}c.mon(b,{itemclick:c.onItemClick,refresh:c.onListRefresh,scope:c});c.mon(b.getSelectionModel(),{beforeselect:c.onBeforeSelect,beforedeselect:c.onBeforeDeselect,selectionchange:c.onListSelectionChange,scope:c});return b},alignPicker:function(){var b=this,a=b.getPicker(),e=b.getPosition()[1]-Ext.getBody().getScroll().top,d=Ext.Element.getViewHeight()-e-b.getHeight(),c=Math.max(e,d);if(a.height){delete a.height;a.updateLayout()}if(a.getHeight()>c-5){a.setHeight(c-5)}b.callParent()},onListRefresh:function(){this.alignPicker();this.syncSelection()},onItemClick:function(c,a){var e=this,d=e.picker.getSelectionModel().getSelection(),b=e.valueField;if(!e.multiSelect&&d.length){if(a.get(b)===d[0].get(b)){e.displayTplData=[a.data];e.setRawValue(e.getDisplayValue());e.collapse()}}},onBeforeSelect:function(b,a){return this.fireEvent("beforeselect",this,a,a.index)},onBeforeDeselect:function(b,a){return this.fireEvent("beforedeselect",this,a,a.index)},onListSelectionChange:function(b,d){var a=this,e=a.multiSelect,c=d.length>0;if(!a.ignoreSelection&&a.isExpanded){if(!e){Ext.defer(a.collapse,1,a)}if(e||c){a.setValue(d,false)}if(c){a.fireEvent("select",a,d)}a.inputEl.focus()}},onExpand:function(){var d=this,a=d.listKeyNav,c=d.selectOnTab,b=d.getPicker();if(a){a.enable()}else{a=d.listKeyNav=new Ext.view.BoundListKeyNav(this.inputEl,{boundList:b,forceKeyDown:true,tab:function(g){if(c){this.selectHighlighted(g);d.triggerBlur()}return true}})}if(c){d.ignoreMonitorTab=true}Ext.defer(a.enable,1,a);d.inputEl.focus()},onCollapse:function(){var b=this,a=b.listKeyNav;if(a){a.disable();b.ignoreMonitorTab=false}},select:function(a){this.setValue(a,true)},findRecord:function(d,c){var b=this.store,a=b.findExact(d,c);return a!==-1?b.getAt(a):false},findRecordByValue:function(a){return this.findRecord(this.valueField,a)},findRecordByDisplay:function(a){return this.findRecord(this.displayField,a)},setValue:function(m,e){var k=this,c=k.valueNotFoundText,n=k.inputEl,g,j,h,a,l=[],b=[],d=[];if(k.store.loading){k.value=m;k.setHiddenValue(k.value);return k}m=Ext.Array.from(m);for(g=0,j=m.length;g0){e.hiddenDataEl.update(Ext.DomHelper.markup({tag:"input",type:"hidden",name:a}));c=1;h=b.firstChild}while(c>g){b.removeChild(k[0]);--c}while(c=0){g.push(i)}}h.ignoreSelection++;c=d.getSelectionModel();c.deselectAll();if(g.length){c.select(g)}h.ignoreSelection--}},onEditorTab:function(b){var a=this.listKeyNav;if(this.selectOnTab&&a){a.selectHighlighted(b)}}});Ext.define("Ext.picker.Month",{extend:"Ext.Component",requires:["Ext.XTemplate","Ext.util.ClickRepeater","Ext.Date","Ext.button.Button"],alias:"widget.monthpicker",alternateClassName:"Ext.MonthPicker",childEls:["bodyEl","prevEl","nextEl","buttonsEl","monthEl","yearEl"],renderTpl:['
','
','','',"","
",'
','
','','',"
",'','',"","
",'
',"
",'','
{%',"var me=values.$comp, okBtn=me.okBtn, cancelBtn=me.cancelBtn;","okBtn.ownerLayout = cancelBtn.ownerLayout = me.componentLayout;","okBtn.ownerCt = cancelBtn.ownerCt = me;","Ext.DomHelper.generateMarkup(okBtn.getRenderTree(), out);","Ext.DomHelper.generateMarkup(cancelBtn.getRenderTree(), out);","%}
","
"],okText:"OK",cancelText:"Cancel",baseCls:Ext.baseCSSPrefix+"monthpicker",showButtons:true,width:178,measureWidth:35,measureMaxHeight:20,smallCls:Ext.baseCSSPrefix+"monthpicker-small",totalYears:10,yearOffset:5,monthOffset:6,initComponent:function(){var a=this;a.selectedCls=a.baseCls+"-selected";a.addEvents("cancelclick","monthclick","monthdblclick","okclick","select","yearclick","yeardblclick");if(a.small){a.addCls(a.smallCls)}a.setValue(a.value);a.activeYear=a.getYear(new Date().getFullYear()-4,-4);if(a.showButtons){a.okBtn=new Ext.button.Button({text:a.okText,handler:a.onOkClick,scope:a});a.cancelBtn=new Ext.button.Button({text:a.cancelText,handler:a.onCancelClick,scope:a})}this.callParent()},beforeRender:function(){var g=this,c=0,b=[],a=Ext.Date.getShortMonthName,e=g.monthOffset,h=g.monthMargin,d="";g.callParent();for(;cd.measureMaxHeight){--c;a.setStyle("margin","0 "+c+"px")}return c},getLargest:function(a){var b=0;this.months.each(function(d){var c=d.getHeight();if(c>b){b=c}});return b},setValue:function(d){var c=this,e=c.activeYear,g=c.monthOffset,b,a;if(!d){c.value=[null,null]}else{if(Ext.isDate(d)){c.value=[d.getMonth(),d.getFullYear()]}else{c.value=[d[0],d[1]]}}if(c.rendered){b=c.value[1];if(b!==null){if((be+c.yearOffset)){c.activeYear=b-c.yearOffset+1}}c.updateBody()}return c},getValue:function(){return this.value},hasSelection:function(){var a=this.value;return a[0]!==null&&a[1]!==null},getYears:function(){var d=this,e=d.yearOffset,g=d.activeYear,a=g+e,c=g,b=[];for(;c','",'','','','',"","",'','',"{#:this.isEndOfWeek}",'","","","",'','',"","",{firstInitial:function(a){return Ext.picker.Date.prototype.getDayInitial(a)},isEndOfWeek:function(b){b--;var a=b%7===0&&b!==0;return a?'':""},renderTodayBtn:function(a,b){Ext.DomHelper.generateMarkup(a.$comp.todayBtn.getRenderTree(),b)},renderMonthBtn:function(a,b){Ext.DomHelper.generateMarkup(a.$comp.monthBtn.getRenderTree(),b)}}],todayText:"Today",ariaTitle:"Date Picker: {0}",ariaTitleDateFormat:"F d, Y",todayTip:"{0} (Spacebar)",minText:"This date is before the minimum date",maxText:"This date is after the maximum date",disabledDaysText:"Disabled",disabledDatesText:"Disabled",nextText:"Next Month (Control+Right)",prevText:"Previous Month (Control+Left)",monthYearText:"Choose a month (Control+Up/Down to move years)",monthYearFormat:"F Y",startDay:0,showToday:true,disableAnim:false,baseCls:Ext.baseCSSPrefix+"datepicker",longDayFormat:"F d, Y",focusOnShow:false,focusOnSelect:true,width:178,initHour:12,numDays:42,initComponent:function(){var b=this,a=Ext.Date.clearTime;b.selectedCls=b.baseCls+"-selected";b.disabledCellCls=b.baseCls+"-disabled";b.prevCls=b.baseCls+"-prevday";b.activeCls=b.baseCls+"-active";b.nextCls=b.baseCls+"-prevday";b.todayCls=b.baseCls+"-today";b.dayNames=b.dayNames.slice(b.startDay).concat(b.dayNames.slice(0,b.startDay));b.listeners=Ext.apply(b.listeners||{},{mousewheel:{element:"eventEl",fn:b.handleMouseWheel,scope:b},click:{element:"eventEl",fn:b.handleDateClick,scope:b,delegate:"a."+b.baseCls+"-date"}});this.callParent();b.value=b.value?a(b.value,true):a(new Date());b.addEvents("select");b.initDisabledDays()},beforeRender:function(){var b=this,c=new Array(b.numDays),a=Ext.Date.format(new Date(),b.format);if(b.up("menu")){b.addCls(Ext.baseCSSPrefix+"menu")}b.monthBtn=new Ext.button.Split({ownerCt:b,ownerLayout:b.getComponentLayout(),text:"",tooltip:b.monthYearText,listeners:{click:b.showMonthPicker,arrowclick:b.showMonthPicker,scope:b}});if(this.showToday){b.todayBtn=new Ext.button.Button({ownerCt:b,ownerLayout:b.getComponentLayout(),text:Ext.String.format(b.todayText,a),tooltip:Ext.String.format(b.todayTip,a),tooltipType:"title",handler:b.selectToday,scope:b})}b.callParent();Ext.applyIf(b,{renderData:{}});Ext.apply(b.renderData,{dayNames:b.dayNames,showToday:b.showToday,prevText:b.prevText,nextText:b.nextText,days:c})},finishRenderChildren:function(){var a=this;a.callParent();a.monthBtn.finishRender();if(a.showToday){a.todayBtn.finishRender()}},onRender:function(b,a){var c=this;c.callParent(arguments);c.el.unselectable();c.cells=c.eventEl.select("tbody td");c.textNodes=c.eventEl.query("tbody td span")},initEvents:function(){var c=this,a=Ext.Date,b=a.DAY;c.callParent();c.prevRepeater=new Ext.util.ClickRepeater(c.prevEl,{handler:c.showPrevMonth,scope:c,preventDefault:true,stopDefault:true});c.nextRepeater=new Ext.util.ClickRepeater(c.nextEl,{handler:c.showNextMonth,scope:c,preventDefault:true,stopDefault:true});c.keyNav=new Ext.util.KeyNav(c.eventEl,Ext.apply({scope:c,left:function(d){if(d.ctrlKey){c.showPrevMonth()}else{c.update(a.add(c.activeDate,b,-1))}},right:function(d){if(d.ctrlKey){c.showNextMonth()}else{c.update(a.add(c.activeDate,b,1))}},up:function(d){if(d.ctrlKey){c.showNextYear()}else{c.update(a.add(c.activeDate,b,-7))}},down:function(d){if(d.ctrlKey){c.showPrevYear()}else{c.update(a.add(c.activeDate,b,7))}},pageUp:c.showNextMonth,pageDown:c.showPrevMonth,enter:function(d){d.stopPropagation();return true}},c.keyNavConfig));if(c.showToday){c.todayKeyListener=c.eventEl.addKeyListener(Ext.EventObject.SPACE,c.selectToday,c)}c.update(c.value)},initDisabledDays:function(){var h=this,b=h.disabledDates,g="(?:",a,i,c,e;if(!h.disabledDatesRE&&b){a=b.length-1;c=b.length;for(i=0;i0){this.showPrevMonth()}else{if(b<0){this.showNextMonth()}}}},handleDateClick:function(d,a){var c=this,b=c.handler;d.stopEvent();if(!c.disabled&&a.dateValue&&!Ext.fly(a.parentNode).hasCls(c.disabledCellCls)){c.doCancelFocus=c.focusOnSelect===false;c.setValue(new Date(a.dateValue));delete c.doCancelFocus;c.fireEvent("select",c,c.value);if(b){b.call(c.scope||c,c,c.value)}c.onSelect()}},onSelect:function(){if(this.hideOnSelect){this.hide()}},selectToday:function(){var c=this,a=c.todayBtn,b=c.handler;if(a&&!a.disabled){c.setValue(Ext.Date.clearTime(new Date()));c.fireEvent("select",c,c.value);if(b){b.call(c.scope||c,c,c.value)}c.onSelect()}return c},selectedUpdate:function(a){var d=this,i=a.getTime(),j=d.cells,k=d.selectedCls,g=j.elements,b,e=g.length,h;j.removeCls(k);for(b=0;bv||(C&&x&&C.test(n.dateFormat(F,x)))||(H&&H.indexOf(F.getDay())!=-1));if(!E.disabled){E.todayBtn.setDisabled(a);E.todayKeyListener.setDisabled(a)}}m=function(i){r=+n.clearTime(q,true);i.title=n.format(q,b);i.firstChild.dateValue=r;if(r==z){i.className+=" "+E.todayCls;i.title=E.todayText}if(r==u){i.className+=" "+E.selectedCls;E.fireEvent("highlightitem",E,i);if(e&&E.floating){Ext.fly(i.firstChild).focus(50)}}if(rv){i.className=G;i.title=E.maxText;return}if(H){if(H.indexOf(q.getDay())!=-1){i.title=B;i.className=G}}if(C&&x){j=n.dateFormat(q,x);if(C.test(j)){i.title=s.replace("%0",j);i.className=G}}};for(;w=l){o=(++D);c=E.nextCls}else{o=w-h+1;c=E.activeCls}}d[w].innerHTML=o;g[w].className=c;q.setDate(q.getDate()+1);m(g[w])}E.monthBtn.setText(Ext.Date.format(A,E.monthYearFormat))},update:function(a,d){var b=this,c=b.activeDate;if(b.rendered){b.activeDate=a;if(!d&&c&&b.el&&c.getMonth()==a.getMonth()&&c.getFullYear()==a.getFullYear()){b.selectedUpdate(a,c)}else{b.fullUpdate(a,c)}b.innerEl.dom.title=Ext.String.format(b.ariaTitle,Ext.Date.format(b.activeDate,b.ariaTitleDateFormat))}return b},beforeDestroy:function(){var a=this;if(a.rendered){Ext.destroy(a.todayKeyListener,a.keyNav,a.monthPicker,a.monthBtn,a.nextRepeater,a.prevRepeater,a.todayBtn);delete a.textNodes;delete a.cells.elements}a.callParent()},onShow:function(){this.callParent(arguments);if(this.focusOnShow){this.focus()}}},function(){var b=this.prototype,a=Ext.Date;b.monthNames=a.monthNames;b.dayNames=a.dayNames;b.format=a.defaultFormat});Ext.define("Ext.form.field.Date",{extend:"Ext.form.field.Picker",alias:"widget.datefield",requires:["Ext.picker.Date"],alternateClassName:["Ext.form.DateField","Ext.form.Date"],format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|n-j|n/j",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerCls:Ext.baseCSSPrefix+"form-date-trigger",showToday:true,useStrict:undefined,initTime:"12",initTimeFormat:"H",matchFieldWidth:false,startDay:0,initComponent:function(){var d=this,b=Ext.isString,c,a;c=d.minValue;a=d.maxValue;if(b(c)){d.minValue=d.parseDate(c)}if(b(a)){d.maxValue=d.parseDate(a)}d.disabledDatesRE=null;d.initDisabledDays();d.callParent()},initValue:function(){var a=this,b=a.value;if(Ext.isString(b)){a.value=a.rawToValue(b)}a.callParent()},initDisabledDays:function(){if(this.disabledDates){var b=this.disabledDates,a=b.length-1,g="(?:",h,e=b.length,c;for(h=0;hk(h).getTime()){o.push(p(j.maxText,j.formatDate(h)))}if(n){l=q.getDay();for(;e'+Ext.DomHelper.markup(b)+"";c.destroy();return a},createFileInput:function(){var a=this;a.fileInputEl=a.buttonEl.createChild({name:a.getName(),id:a.id+"-fileInputEl",cls:Ext.baseCSSPrefix+"form-file-input",tag:"input",type:"file",size:1});a.fileInputEl.on({scope:a,change:a.onFileChange})},onFileChange:function(){this.lastValue=null;Ext.form.field.File.superclass.setValue.call(this,this.fileInputEl.dom.value)},setValue:Ext.emptyFn,reset:function(){var a=this;if(a.rendered){a.fileInputEl.remove();a.createFileInput();a.inputEl.dom.value=""}a.callParent()},onDisable:function(){this.callParent();this.disableItems()},disableItems:function(){var a=this.fileInputEl;if(a){a.dom.disabled=true}this["buttonEl-btnEl"].dom.disabled=true},onEnable:function(){var a=this;a.callParent();a.fileInputEl.dom.disabled=false;this["buttonEl-btnEl"].dom.disabled=false},isFileUpload:function(){return true},extractFileInput:function(){var a=this.fileInputEl.dom;this.reset();return a},onDestroy:function(){Ext.destroyMembers(this,"fileInputEl","buttonEl");this.callParent()}});Ext.define("Ext.form.field.Hidden",{extend:"Ext.form.field.Base",alias:["widget.hiddenfield","widget.hidden"],alternateClassName:"Ext.form.Hidden",inputType:"hidden",hideLabel:true,initComponent:function(){this.formItemCls+="-hidden";this.callParent()},isEqual:function(b,a){return this.isEqualAsString(b,a)},initEvents:Ext.emptyFn,setSize:Ext.emptyFn,setWidth:Ext.emptyFn,setHeight:Ext.emptyFn,setPosition:Ext.emptyFn,setPagePosition:Ext.emptyFn,markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.define("Ext.layout.component.field.HtmlEditor",{extend:"Ext.layout.component.field.Field",alias:["layout.htmleditor"],type:"htmleditor",toolbarSizePolicy:{setsWidth:0,setsHeight:0},beginLayout:function(a){this.callParent(arguments);a.textAreaContext=a.getEl("textareaEl");a.iframeContext=a.getEl("iframeEl");a.toolbarContext=a.context.getCmp(this.owner.getToolbar())},renderItems:Ext.emptyFn,getItemSizePolicy:function(a){return this.toolbarSizePolicy},getLayoutItems:function(){var a=this.owner.getToolbar();return a?[a]:[]},getRenderTarget:function(){return this.owner.bodyEl},publishInnerHeight:function(c,a){var b=this,d=a-b.measureLabelErrorHeight(c)-c.toolbarContext.getProp("height")-c.bodyCellContext.getPaddingInfo().height;if(Ext.isNumber(d)){c.textAreaContext.setHeight(d);c.iframeContext.setHeight(d)}else{b.done=false}}});Ext.define("Ext.picker.Color",{extend:"Ext.Component",requires:"Ext.XTemplate",alias:"widget.colorpicker",alternateClassName:"Ext.ColorPalette",componentCls:Ext.baseCSSPrefix+"color-picker",selectedCls:Ext.baseCSSPrefix+"color-picker-selected",value:null,clickEvent:"click",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],colorRe:/(?:^|\s)color-(.{6})(?:\s|$)/,renderTpl:['','',' ',"",""],initComponent:function(){var a=this;a.callParent(arguments);a.addEvents("select");if(a.handler){a.on("select",a.handler,a.scope,true)}},initRenderData:function(){var a=this;return Ext.apply(a.callParent(),{itemCls:a.itemCls,colors:a.colors})},onRender:function(){var b=this,a=b.clickEvent;b.callParent(arguments);b.mon(b.el,a,b.handleClick,b,{delegate:"a"});if(a!="click"){b.mon(b.el,"click",Ext.emptyFn,b,{delegate:"a",stopEvent:true})}},afterRender:function(){var a=this,b;a.callParent(arguments);if(a.value){b=a.value;a.value=null;a.select(b,true)}},handleClick:function(c,d){var b=this,a;c.stopEvent();if(!b.disabled){a=d.className.match(b.colorRe)[1];b.select(a.toUpperCase())}},select:function(b,a){var d=this,g=d.selectedCls,e=d.value,c;b=b.replace("#","");if(!d.rendered){d.value=b;return}if(b!=e||d.allowReselect){c=d.el;if(d.value){c.down("a.color-"+e).removeCls(g)}c.down("a.color-"+b).addCls(g);d.value=b;if(a!==true){d.fireEvent("select",d,b)}}},getValue:function(){return this.value||null}});Ext.define("Ext.form.field.HtmlEditor",{extend:"Ext.Component",mixins:{labelable:"Ext.form.Labelable",field:"Ext.form.field.Field"},alias:"widget.htmleditor",alternateClassName:"Ext.form.HtmlEditor",requires:["Ext.tip.QuickTipManager","Ext.picker.Color","Ext.toolbar.Item","Ext.toolbar.Toolbar","Ext.util.Format","Ext.layout.component.field.HtmlEditor"],childEls:["iframeEl","textareaEl"],fieldSubTpl:["{beforeTextAreaTpl}",'","{afterTextAreaTpl}","{beforeIFrameTpl}",'',"{afterIFrameTpl}",{disableFormats:true}],subTplInsertions:["beforeTextAreaTpl","afterTextAreaTpl","beforeIFrameTpl","afterIFrameTpl","iframeAttrTpl","inputAttrTpl"],enableFormat:true,enableFontSize:true,enableColors:true,enableAlignments:true,enableLists:true,enableSourceEdit:true,enableLinks:true,enableFont:true,createLinkText:"Please enter the URL for the link:",defaultLinkValue:"http://",fontFamilies:["Arial","Courier New","Tahoma","Times New Roman","Verdana"],defaultFont:"tahoma",defaultValue:(Ext.isOpera||Ext.isIE6)?" ":"​",editorWrapCls:Ext.baseCSSPrefix+"html-editor-wrap",componentLayout:"htmleditor",initialized:false,activated:false,sourceEditMode:false,iframePad:3,hideMode:"offsets",afterBodyEl:"",maskOnDisable:true,initComponent:function(){var a=this;a.addEvents("initialize","activate","beforesync","beforepush","sync","push","editmodechange");a.callParent(arguments);a.createToolbar(a);a.initLabelable();a.initField()},getRefItems:function(){return[this.toolbar]},createToolbar:function(g){var j=this,h=[],c,l=Ext.tip.QuickTipManager&&Ext.tip.QuickTipManager.isEnabled(),e=Ext.baseCSSPrefix,d,k,b;function a(n,i,m){return{itemId:n,cls:e+"btn-icon",iconCls:e+"edit-"+n,enableToggle:i!==false,scope:g,handler:m||g.relayBtnCmd,clickEvent:"mousedown",tooltip:l?g.buttonTips[n]||b:b,overflowText:g.buttonTips[n].title||b,tabIndex:-1}}if(j.enableFont&&!Ext.isSafari2){d=Ext.widget("component",{renderTpl:['"],renderData:{cls:e+"font-select",fonts:j.fontFamilies,defaultFont:j.defaultFont},childEls:["selectEl"],afterRender:function(){j.fontSelect=this.selectEl;Ext.Component.prototype.afterRender.apply(this,arguments)},onDisable:function(){var i=this.selectEl;if(i){i.dom.disabled=true}Ext.Component.prototype.onDisable.apply(this,arguments)},onEnable:function(){var i=this.selectEl;if(i){i.dom.disabled=false}Ext.Component.prototype.onEnable.apply(this,arguments)},listeners:{change:function(){j.relayCmd("fontname",j.fontSelect.dom.value);j.deferFocus()},element:"selectEl"}});h.push(d,"-")}if(j.enableFormat){h.push(a("bold"),a("italic"),a("underline"))}if(j.enableFontSize){h.push("-",a("increasefontsize",false,j.adjustFont),a("decreasefontsize",false,j.adjustFont))}if(j.enableColors){h.push("-",{itemId:"forecolor",cls:e+"btn-icon",iconCls:e+"edit-forecolor",overflowText:g.buttonTips.forecolor.title,tooltip:l?g.buttonTips.forecolor||b:b,tabIndex:-1,menu:Ext.widget("menu",{plain:true,items:[{xtype:"colorpicker",allowReselect:true,focus:Ext.emptyFn,value:"000000",plain:true,clickEvent:"mousedown",handler:function(m,i){j.execCmd("forecolor",Ext.isWebKit||Ext.isIE?"#"+i:i);j.deferFocus();this.up("menu").hide()}}]})},{itemId:"backcolor",cls:e+"btn-icon",iconCls:e+"edit-backcolor",overflowText:g.buttonTips.backcolor.title,tooltip:l?g.buttonTips.backcolor||b:b,tabIndex:-1,menu:Ext.widget("menu",{plain:true,items:[{xtype:"colorpicker",focus:Ext.emptyFn,value:"FFFFFF",plain:true,allowReselect:true,clickEvent:"mousedown",handler:function(m,i){if(Ext.isGecko){j.execCmd("useCSS",false);j.execCmd("hilitecolor",i);j.execCmd("useCSS",true);j.deferFocus()}else{j.execCmd(Ext.isOpera?"hilitecolor":"backcolor",Ext.isWebKit||Ext.isIE?"#"+i:i);j.deferFocus()}this.up("menu").hide()}}]})})}if(j.enableAlignments){h.push("-",a("justifyleft"),a("justifycenter"),a("justifyright"))}if(!Ext.isSafari2){if(j.enableLinks){h.push("-",a("createlink",false,j.createLink))}if(j.enableLists){h.push("-",a("insertorderedlist"),a("insertunorderedlist"))}if(j.enableSourceEdit){h.push("-",a("sourceedit",true,function(i){j.toggleSourceEdit(!j.sourceEditMode)}))}}for(c=0;c',b.iframePad,a)},getEditorBody:function(){var a=this.getDoc();return a.body||a.documentElement},getDoc:function(){return(!Ext.isIE&&this.iframeEl.dom.contentDocument)||this.getWin().document},getWin:function(){return Ext.isIE?this.iframeEl.dom.contentWindow:window.frames[this.iframeEl.dom.name]},finishRenderChildren:function(){this.callParent();this.toolbar.finishRender()},onRender:function(){var a=this;a.callParent(arguments);a.inputEl=a.iframeEl;a.monitorTask=Ext.TaskManager.start({run:a.checkDesignMode,scope:a,interval:100})},initRenderTpl:function(){var a=this;if(!a.hasOwnProperty("renderTpl")){a.renderTpl=a.getTpl("labelableRenderTpl")}return a.callParent()},initRenderData:function(){this.beforeSubTpl='
'+Ext.DomHelper.markup(this.toolbar.getRenderTree());return Ext.applyIf(this.callParent(),this.getLabelableRenderData())},getSubTplData:function(){return{$comp:this,cmpId:this.id,id:this.getInputId(),textareaCls:Ext.baseCSSPrefix+"hidden",value:this.value,iframeName:Ext.id(),iframeSrc:Ext.SSL_SECURE_URL,size:"height:100px;width:100%"}},getSubTplMarkup:function(){return this.getTpl("fieldSubTpl").apply(this.getSubTplData())},initFrameDoc:function(){var b=this,c,a;Ext.TaskManager.stop(b.monitorTask);c=b.getDoc();b.win=b.getWin();c.open();c.write(b.getDocMarkup());c.close();a={run:function(){var d=b.getDoc();if(d.body||d.readyState==="complete"){Ext.TaskManager.stop(a);b.setDesignMode(true);Ext.defer(b.initEditor,10,b)}},interval:10,duration:10000,scope:b};Ext.TaskManager.start(a)},checkDesignMode:function(){var a=this,b=a.getDoc();if(b&&(!b.editorInitialized||a.getDesignMode()!=="on")){a.initFrameDoc()}},setDesignMode:function(c){var a=this,b=a.getDoc();if(b){if(a.readOnly){c=false}b.designMode=(/on|true/i).test(String(c).toLowerCase())?"on":"off"}},getDesignMode:function(){var a=this.getDoc();return !a?"":String(a.designMode).toLowerCase()},disableItems:function(d){var b=this.getToolbar().items.items,c,a=b.length,e;for(c=0;c'+d+"
"}}d=e.cleanHtml(d);if(e.fireEvent("beforesync",e,d)!==false){if(e.textareaEl.dom.value!=d){e.textareaEl.dom.value=d;g=true}e.fireEvent("sync",e,d);if(g){e.checkChange()}}}},getValue:function(){var a=this,b;if(!a.sourceEditMode){a.syncValue()}b=a.rendered?a.textareaEl.dom.value:a.value;a.value=b;return b},pushValue:function(){var b=this,a;if(b.initialized){a=b.textareaEl.dom.value||"";if(!b.activated&&a.length<1){a=b.defaultValue}if(b.fireEvent("beforepush",b,a)!==false){b.getEditorBody().innerHTML=a;if(Ext.isGecko){b.setDesignMode(false);b.setDesignMode(true)}b.fireEvent("push",b,a)}}},deferFocus:function(){this.focus(false,true)},getFocusEl:function(){var a=this,b=a.win;return b&&!a.sourceEditMode?b:a.textareaEl},initEditor:function(){try{var g=this,d=g.getEditorBody(),b=g.textareaEl.getStyles("font-size","font-family","background-image","background-repeat","background-color","color"),i,c;b["background-attachment"]="fixed";d.bgProperties="fixed";Ext.DomHelper.applyStyles(d,b);i=g.getDoc();if(i){try{Ext.EventManager.removeAll(i)}catch(h){}}c=Ext.Function.bind(g.onEditorEvent,g);Ext.EventManager.on(i,{mousedown:c,dblclick:c,click:c,keyup:c,buffer:100});c=g.onRelayedEvent;Ext.EventManager.on(i,{mousedown:c,mousemove:c,mouseup:c,click:c,dblclick:c,scope:g});if(Ext.isGecko){Ext.EventManager.on(i,"keypress",g.applyCommand,g)}if(g.fixKeys){Ext.EventManager.on(i,"keydown",g.fixKeys,g)}Ext.EventManager.on(window,"unload",g.beforeDestroy,g);i.editorInitialized=true;g.initialized=true;g.pushValue();g.setReadOnly(g.readOnly);g.fireEvent("initialize",g)}catch(a){}},beforeDestroy:function(){var a=this,d=a.monitorTask,c,g;if(d){Ext.TaskManager.stop(d)}if(a.rendered){try{c=a.getDoc();if(c){Ext.EventManager.removeAll(Ext.fly(c));for(g in c){if(c.hasOwnProperty&&c.hasOwnProperty(g)){delete c[g]}}}}catch(b){}Ext.destroyMembers(a,"toolbar","iframeEl","textareaEl")}a.callParent()},onRelayedEvent:function(c){var b=this.iframeEl,d=b.getXY(),a=c.getXY();c.xy=[d[0]+a[0],d[1]+a[1]];c.injectEvent(b);c.xy=a},onFirstFocus:function(){var c=this,b,a;c.activated=true;c.disableItems(c.readOnly);if(Ext.isGecko){c.win.focus();b=c.win.getSelection();if(!b.focusNode||b.focusNode.nodeType!==3){a=b.getRangeAt(0);a.selectNodeContents(c.getEditorBody());a.collapse(true);c.deferFocus()}try{c.execCmd("useCSS",true);c.execCmd("styleWithCSS",false)}catch(d){}}c.fireEvent("activate",c)},adjustFont:function(d){var e=d.getItemId()==="increasefontsize"?1:-1,c=this.getDoc().queryCommandValue("FontSize")||"2",a=Ext.isString(c)&&c.indexOf("px")!==-1,b;c=parseInt(c,10);if(a){if(c<=10){c=1+e}else{if(c<=13){c=2+e}else{if(c<=16){c=3+e}else{if(c<=18){c=4+e}else{if(c<=24){c=5+e}else{c=6+e}}}}}c=Ext.Number.constrain(c,1,6)}else{b=Ext.isSafari;if(b){e*=2}c=Math.max(1,c+e)+(b?"px":0)}this.execCmd("FontSize",c)},onEditorEvent:function(a){this.updateToolbar()},updateToolbar:function(){var e=this,d,g,a,c;if(e.readOnly){return}if(!e.activated){e.onFirstFocus();return}d=e.getToolbar().items.map;g=e.getDoc();if(e.enableFont&&!Ext.isSafari2){a=(g.queryCommandValue("FontName")||e.defaultFont).toLowerCase();c=e.fontSelect.dom;if(a!==c.value){c.value=a}}function b(){for(var k=0,h=arguments.length,j;k0){g=String.fromCharCode(g);switch(g){case"b":b="bold";break;case"i":b="italic";break;case"u":b="underline";break}if(b){a.win.focus();a.execCmd(b);a.deferFocus();d.preventDefault()}}}},insertAtCursor:function(c){var b=this,a;if(b.activated){b.win.focus();if(Ext.isIE){a=b.getDoc().selection.createRange();if(a){a.pasteHTML(c);b.syncValue();b.deferFocus()}}else{b.execCmd("InsertHTML",c);b.deferFocus()}}},fixKeys:(function(){if(Ext.isIE){return function(h){var c=this,b=h.getKey(),g=c.getDoc(),i=c.readOnly,a,d;if(b===h.TAB){h.stopEvent();if(!i){a=g.selection.createRange();if(a){a.collapse(true);a.pasteHTML("    ");c.deferFocus()}}}else{if(b===h.ENTER){if(!i){a=g.selection.createRange();if(a){d=a.parentElement();if(!d||d.tagName.toLowerCase()!=="li"){h.stopEvent();a.pasteHTML("
");a.collapse(false);a.select()}}}}}}}if(Ext.isOpera){return function(b){var a=this;if(b.getKey()===b.TAB){b.stopEvent();if(!a.readOnly){a.win.focus();a.execCmd("InsertHTML","    ");a.deferFocus()}}}}if(Ext.isWebKit){return function(c){var b=this,a=c.getKey(),d=b.readOnly;if(a===c.TAB){c.stopEvent();if(!d){b.execCmd("InsertText","\t");b.deferFocus()}}else{if(a===c.ENTER){c.stopEvent();if(!d){b.execCmd("InsertHtml","

");b.deferFocus()}}}}}return null}()),getToolbar:function(){return this.toolbar},buttonTips:{bold:{title:"Bold (Ctrl+B)",text:"Make the selected text bold.",cls:Ext.baseCSSPrefix+"html-editor-tip"},italic:{title:"Italic (Ctrl+I)",text:"Make the selected text italic.",cls:Ext.baseCSSPrefix+"html-editor-tip"},underline:{title:"Underline (Ctrl+U)",text:"Underline the selected text.",cls:Ext.baseCSSPrefix+"html-editor-tip"},increasefontsize:{title:"Grow Text",text:"Increase the font size.",cls:Ext.baseCSSPrefix+"html-editor-tip"},decreasefontsize:{title:"Shrink Text",text:"Decrease the font size.",cls:Ext.baseCSSPrefix+"html-editor-tip"},backcolor:{title:"Text Highlight Color",text:"Change the background color of the selected text.",cls:Ext.baseCSSPrefix+"html-editor-tip"},forecolor:{title:"Font Color",text:"Change the color of the selected text.",cls:Ext.baseCSSPrefix+"html-editor-tip"},justifyleft:{title:"Align Text Left",text:"Align text to the left.",cls:Ext.baseCSSPrefix+"html-editor-tip"},justifycenter:{title:"Center Text",text:"Center text in the editor.",cls:Ext.baseCSSPrefix+"html-editor-tip"},justifyright:{title:"Align Text Right",text:"Align text to the right.",cls:Ext.baseCSSPrefix+"html-editor-tip"},insertunorderedlist:{title:"Bullet List",text:"Start a bulleted list.",cls:Ext.baseCSSPrefix+"html-editor-tip"},insertorderedlist:{title:"Numbered List",text:"Start a numbered list.",cls:Ext.baseCSSPrefix+"html-editor-tip"},createlink:{title:"Hyperlink",text:"Make the selected text a hyperlink.",cls:Ext.baseCSSPrefix+"html-editor-tip"},sourceedit:{title:"Source Edit",text:"Switch to source editing mode.",cls:Ext.baseCSSPrefix+"html-editor-tip"}}});Ext.define("Ext.form.field.Radio",{extend:"Ext.form.field.Checkbox",alias:["widget.radiofield","widget.radio"],alternateClassName:"Ext.form.Radio",requires:["Ext.form.RadioManager"],isRadio:true,inputType:"radio",ariaRole:"radio",formId:null,getGroupValue:function(){var a=this.getManager().getChecked(this.name,this.getFormId());return a?a.inputValue:null},onBoxClick:function(b){var a=this;if(!a.disabled&&!a.readOnly){this.setValue(true)}},onRemoved:function(){this.callParent(arguments);this.formId=null},setValue:function(a){var b=this,c;if(Ext.isBoolean(a)){b.callParent(arguments)}else{c=b.getManager().getWithValue(b.name,a,b.getFormId()).getAt(0);if(c){c.setValue(true)}}return b},getSubmitValue:function(){return this.checked?this.inputValue:null},getModelData:function(){return this.getSubmitData()},onChange:function(c,a){var g=this,e,d,b,h;g.callParent(arguments);if(c){h=g.getManager().getByName(g.name,g.getFormId()).items;d=h.length;for(e=0;e=b&&e<=a})},createStore:function(){var d=this,c=Ext.Date,e=[],b=d.absMin,a=d.absMax;while(b<=a){e.push({disp:c.dateFormat(b,d.format),date:b});b=c.add(b,"mi",d.increment)}return new Ext.data.Store({fields:["disp","date"],data:e})}});Ext.define("Ext.form.field.Time",{extend:"Ext.form.field.ComboBox",alias:"widget.timefield",requires:["Ext.form.field.Date","Ext.picker.Time","Ext.view.BoundListKeyNav","Ext.Date"],alternateClassName:["Ext.form.TimeField","Ext.form.Time"],triggerCls:Ext.baseCSSPrefix+"form-time-trigger",minText:"The time in this field must be equal to or after {0}",maxText:"The time in this field must be equal to or before {0}",invalidText:"{0} is not a valid time",format:"g:i A",altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|gi a|hi a|giA|hiA|gi A|hi A",increment:15,pickerMaxHeight:300,selectOnTab:true,snapToIncrement:false,initDate:"1/1/2008",initDateFormat:"j/n/Y",ignoreSelection:0,queryMode:"local",displayField:"disp",valueField:"date",initComponent:function(){var c=this,b=c.minValue,a=c.maxValue;if(b){c.setMinValue(b)}if(a){c.setMaxValue(a)}c.displayTpl=new Ext.XTemplate('{[typeof values === "string" ? values : this.formatDate(values["'+c.displayField+'"])]}'+c.delimiter+"",{formatDate:Ext.Function.bind(c.formatDate,c)});this.callParent()},transformOriginalValue:function(a){if(Ext.isString(a)){return this.rawToValue(a)}return a},isEqual:function(b,a){return Ext.Date.isEqual(b,a)},setMinValue:function(c){var b=this,a=b.picker;b.setLimit(c,true);if(a){a.setMinValue(b.minValue)}},setMaxValue:function(c){var b=this,a=b.picker;b.setLimit(c,false);if(a){a.setMaxValue(b.maxValue)}},setLimit:function(b,g){var a=this,e,c;if(Ext.isString(b)){e=a.parseDate(b)}else{if(Ext.isDate(b)){e=b}}if(e){c=Ext.Date.clearTime(new Date(a.initDate));c.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())}else{c=null}a[g?"minValue":"maxValue"]=c},rawToValue:function(a){return this.parseDate(a)||a||null},valueToRaw:function(a){return this.formatDate(this.parseDate(a))},getErrors:function(d){var b=this,g=Ext.String.format,h=b.callParent(arguments),c=b.minValue,e=b.maxValue,a;d=b.formatDate(d||b.processRawValue(b.getRawValue()));if(d===null||d.length<1){return h}a=b.parseDate(d);if(!a){h.push(g(b.invalidText,d,Ext.Date.unescapeFormat(b.format)));return h}if(c&&ae){h.push(g(b.maxText,b.formatDate(e)))}return h},formatDate:function(){return Ext.form.field.Date.prototype.formatDate.apply(this,arguments)},parseDate:function(e){var d=this,h=e,b=d.altFormats,g=d.altFormatsArray,c=0,a;if(e&&!Ext.isDate(e)){h=d.safeParse(e,d.format);if(!h&&b){g=g||b.split("|");a=g.length;for(;c0){c=c[0];if(c&&Ext.Date.isEqual(a.get("date"),c.get("date"))){d.collapse()}}},onListSelectionChange:function(c,e){var b=this,a=e[0],d=a?a.get("date"):null;if(!b.ignoreSelection){b.skipSync=true;b.setValue(d);b.skipSync=false;b.fireEvent("select",b,d);b.picker.clearHighlight();b.collapse();b.inputEl.focus()}},syncSelection:function(){var j=this,h=j.picker,c,g,k,b,i,e,a;if(h&&!j.skipSync){h.clearHighlight();k=j.getValue();g=h.getSelectionModel();j.ignoreSelection++;if(k===null){g.deselectAll()}else{if(Ext.isDate(k)){b=h.store.data.items;e=b.length;for(i=0;i1||(g===1&&c[0].nodeType!==3))){b=j.last();i=b.getOffsetsTo(j)[0]+b.getWidth();m=j.getWidth();a=m-i;if(!k.editingPlugin.grid.columnLines){a--}d[0]+=i;k.addCls(Ext.baseCSSPrefix+"grid-editor-on-text-node")}else{a=h.getWidth()-1}if(e===true){k.field.setWidth(a)}k.alignTo(h,k.alignment,d)},onEditorTab:function(b){var a=this.field;if(a.onEditorTab){a.onEditorTab(b)}},alignment:"tl-tl",hideEl:false,cls:Ext.baseCSSPrefix+"small-editor "+Ext.baseCSSPrefix+"grid-editor",shim:false,shadow:false});Ext.define("Ext.grid.ColumnComponentLayout",{extend:"Ext.layout.component.Auto",alias:"layout.columncomponent",type:"columncomponent",setWidthInDom:true,getContentHeight:function(a){return this.owner.isGroupHeader?a.getProp("contentHeight"):this.callParent(arguments)},calculateOwnerHeightFromContentHeight:function(c,b){var a=this.callParent(arguments);if(this.owner.isGroupHeader){a+=this.owner.titleEl.dom.offsetHeight}return a},getContentWidth:function(a){return this.owner.isGroupHeader?a.getProp("contentWidth"):this.callParent(arguments)},calculateOwnerWidthFromContentWidth:function(b,a){return a+b.getPaddingInfo().width}});Ext.define("Ext.grid.ColumnLayout",{extend:"Ext.layout.container.HBox",alias:"layout.gridcolumn",type:"gridcolumn",reserveOffset:false,firstHeaderCls:Ext.baseCSSPrefix+"column-header-first",lastHeaderCls:Ext.baseCSSPrefix+"column-header-last",initLayout:function(){this.grid=this.owner.up("[scrollerOwner]");this.callParent()},beginLayout:function(j){var h=this,e=h.grid,b=e.view,d=0,c=h.getVisibleItems(),a=c.length,g;j.gridContext=j.context.getCmp(h.grid);if(e.lockable){if(h.owner.up("tablepanel")===b.normalGrid){b=b.normalGrid.getView()}else{b=null}}h.callParent(arguments);for(;d0){c[0].addCls(h.firstHeaderCls);c[a-1].addCls(h.lastHeaderCls)}if(!h.owner.isHeader&&Ext.getScrollbarSize().width&&!e.collapsed&&b&&b.table.dom&&(b.autoScroll||b.overflowY)){j.viewContext=j.context.getCmp(b)}},roundFlex:function(a){return Math.floor(a)},calculate:function(e){var d=this,c=e.viewContext,b,a;d.callParent(arguments);if(e.state.parallelDone){e.setProp("columnWidthsDone",true)}if(c&&!e.state.overflowAdjust.width&&!e.gridContext.heightModel.shrinkWrap){b=c.tableContext.getProp("height");a=c.getProp("height");if(isNaN(b+a)){d.done=false}else{if(b>=a){e.gridContext.invalidate({after:function(){e.state.overflowAdjust={width:Ext.getScrollbarSize().width,height:0}}})}}}},completeLayout:function(c){var j=this,b=j.owner,a=c.state,g=false,k=j.sizeModels.calculated,e,h,d,m,l;j.callParent(arguments);if(!a.flexesCalculated&&b.forceFit&&!b.isHeader){e=c.childItems;h=e.length;for(d=0;d",initComponent:function(){var b=this,a=b.scroll;b.table=new Ext.dom.Element.Fly();b.table.id=b.id+"gridTable";b.autoScroll=undefined;if(a===true||a==="both"){b.autoScroll=true}else{if(a==="horizontal"){b.overflowX="auto"}else{if(a==="vertical"){b.overflowY="auto"}}}b.selModel.view=b;b.headerCt.view=b;b.headerCt.markDirty=b.markDirty;b.initFeatures(b.grid);delete b.grid;b.tpl=b.getTpl("initialTpl");b.callParent()},moveColumn:function(a,p,d){var n=this,l=(d>1)?document.createDocumentFragment():undefined,c=p,q=n.getGridColumns().length,o=q-1,b=(n.firstCls||n.lastCls)&&(p===0||p==q||a===0||a==o),g,e,r,k,m,h;if(n.rendered){h=n.el.query(n.headerRowSelector);r=n.el.query(n.rowSelector);if(p>a&&l){c-=d}for(g=0,k=h.length;ge){i=j.bottom-e}}d=g.getRecord(k);b=g.store.indexOf(d);if(i){a.scrollByDeltaY(i)}g.fireEvent("rowfocus",d,k,b)}},focusCell:function(h){var j=this,k=j.getCellByPosition(h),b=j.el,d=0,e=0,c=b.getRegion(),a=j.ownerCt,i,g;c.bottom=c.top+b.dom.clientHeight;c.right=c.left+b.dom.clientWidth;if(k){i=k.getRegion();if(i.topc.bottom){d=i.bottom-c.bottom}}if(i.leftc.right){e=i.right-c.right}}if(d){a.scrollByDeltaY(d)}if(e){a.scrollByDeltaX(e)}b.focus();j.fireEvent("cellfocus",g,k,h)}},scrollByDelta:function(c,b){b=b||"scrollTop";var a=this.el.dom;a[b]=(a[b]+=c)},onUpdate:function(g,e,k,p){var v=this,j,d,l,s,r,u,q,b,c,w,t,r,a,n,m,h,o=v.editingPlugin&&v.editingPlugin.editing;if(v.viewReady){j=v.store.indexOf(e);a=v.headerCt.getGridColumns();n=v.overItemCls;if(a.length&&j>-1){d=v.bufferRender([e],j)[0];q=v.all.item(j);if(q){b=q.dom;m=q.hasCls(n);if(b.mergeAttributes){b.mergeAttributes(d,true)}else{l=d.attributes;s=l.length;for(r=0;re){e=b}}return e},getPositionByEvent:function(g){var d=this,b=g.getTarget(d.cellSelector),c=g.getTarget(d.itemSelector),a=d.getRecord(c),h=d.getHeaderByCell(b);return d.getPosition(a,h)},getHeaderByCell:function(b){if(b){var a=b.className.match(this.cellRe);if(a&&a[1]){return Ext.getCmp(a[1])}}return false},walkCells:function(l,m,h,n,a,o){if(!l){return}var j=this,p=l.row,d=l.column,k=j.store.getCount(),g=j.getFirstVisibleColumnIndex(),b=j.getLastVisibleColumnIndex(),i={row:p,column:d},c=j.headerCt.getHeaderAtIndex(d);if(!c||c.hidden){return false}h=h||{};m=m.toLowerCase();switch(m){case"right":if(d===b){if(n||p===k-1){return false}if(!h.ctrlKey){i.row=p+1;i.column=g}}else{if(!h.ctrlKey){i.column=d+j.getRightGap(c)}else{i.column=b}}break;case"left":if(d===g){if(n||p===0){return false}if(!h.ctrlKey){i.row=p-1;i.column=b}}else{if(!h.ctrlKey){i.column=d+j.getLeftGap(c)}else{i.column=g}}break;case"up":if(p===0){return false}else{if(!h.ctrlKey){i.row=p-1}else{i.row=0}}break;case"down":if(p===k-1){return false}else{if(!h.ctrlKey){i.row=p+1}else{i.row=k-1}}break}if(a&&a.call(o||window,i)!==true){return false}else{return i}},getFirstVisibleColumnIndex:function(){var a=this.getHeaderCt().getVisibleGridColumns()[0];return a?a.getIndex():-1},getLastVisibleColumnIndex:function(){var b=this.getHeaderCt().getVisibleGridColumns(),a=b[b.length-1];return a.getIndex()},getHeaderCt:function(){return this.headerCt},getPosition:function(a,e){var d=this,b=d.store,c=d.headerCt.getGridColumns();return{row:b.indexOf(a),column:Ext.Array.indexOf(c,e)}},getRightGap:function(a){var g=this.getHeaderCt(),e=g.getGridColumns(),b=Ext.Array.indexOf(e,a),c=b+1,d;for(;c<=e.length;c++){if(!e[c].hidden){d=c;break}}return d-b},beforeDestroy:function(){if(this.rendered){this.el.removeAllListeners()}this.callParent(arguments)},getLeftGap:function(a){var g=this.getHeaderCt(),e=g.getGridColumns(),c=Ext.Array.indexOf(e,a),d=c-1,b;for(;d>=0;d--){if(!e[d].hidden){b=d;break}}return b-c},onAdd:function(c,a,b){this.callParent(arguments);this.doStripeRows(b)},onRemove:function(c,a,b){this.callParent(arguments);this.doStripeRows(b)},doStripeRows:function(b,a){var d=this,e,h,c,g;if(d.rendered&&d.stripeRows){e=d.getNodes(b,a);for(c=0,h=e.length;c>#normalHeaderCt"},normal:{items:c,itemId:"normalHeaderCt",stretchMaxPartner:"^^>>#lockedHeaderCt"}}},onLockedViewMouseWheel:function(i){var d=this,h=-d.scrollDelta,a=h*i.getWheelDeltas().y,b=d.lockedGrid.getView().el.dom,c,g;if(b){c=b.scrollTop!==b.scrollHeight-b.clientHeight;g=b.scrollTop!==0}if((a<0&&g)||(a>0&&c)){i.stopEvent();d.scrolling=true;b.scrollTop+=a;d.normalGrid.getView().el.dom.scrollTop=b.scrollTop;d.scrolling=false;d.onNormalViewScroll()}},onLockedViewScroll:function(){var e=this,d=e.lockedGrid.getView(),c=e.normalGrid.getView(),a,b;if(!e.scrolling){e.scrolling=true;c.el.dom.scrollTop=d.el.dom.scrollTop;if(e.store.buffered){b=d.el.child("table",true);a=c.el.child("table",true);b.style.position="absolute"}e.scrolling=false}},onNormalViewScroll:function(){var e=this,d=e.lockedGrid.getView(),c=e.normalGrid.getView(),a,b;if(!e.scrolling){e.scrolling=true;d.el.dom.scrollTop=c.el.dom.scrollTop;if(e.store.buffered){b=d.el.child("table",true);a=c.el.child("table",true);b.style.position="absolute";b.style.top=a.style.top}e.scrolling=false}},onLockedHeaderMove:function(){if(this.syncRowHeight){this.onNormalViewRefresh()}},onNormalHeaderMove:function(){if(this.syncRowHeight){this.onLockedViewRefresh()}},updateSpacer:function(){var d=this,b=d.lockedGrid.getView().el,c=d.normalGrid.getView().el.dom,a=b.dom.id+"-spacer",e=(c.offsetHeight-c.clientHeight)+"px";d.spacerEl=Ext.getDom(a);if(d.spacerEl){d.spacerEl.style.height=e}else{Ext.core.DomHelper.append(b,{id:a,style:"height: "+e})}},onLockedViewRefresh:function(){if(this.normalGrid.headerCt.getGridColumns().length){var e=this,a=e.lockedGrid.getView(),c=a.el,g=c.query(a.getItemSelector()),d=g.length,b=0;e.lockedHeights=[];for(;bk[e]){Ext.fly(g[e]).setHeight(a[e])}else{if(a[e]0){a.setWidth(b);a.show()}else{a.hide()}Ext.resumeLayouts(true);return b>0},onLockedHeaderResize:function(){this.syncLockedWidth()},onLockedHeaderHide:function(){this.syncLockedWidth()},onLockedHeaderShow:function(){this.syncLockedWidth()},onLockedHeaderSortChange:function(b,c,a){if(a){this.normalGrid.headerCt.clearOtherSortStates(null,true)}},onNormalHeaderSortChange:function(b,c,a){if(a){this.lockedGrid.headerCt.clearOtherSortStates(null,true)}},unlock:function(a,e){var d=this,g=d.normalGrid,i=d.lockedGrid,h=g.headerCt,c=i.headerCt,b=false;if(!Ext.isDefined(e)){e=0}a=a||c.getMenu().activeHeader;Ext.suspendLayouts();a.ownerCt.remove(a,false);if(d.syncLockedWidth()){b=true}a.locked=false;h.insert(e,a);d.normalGrid.getView().refresh();if(b){d.lockedGrid.getView().refresh()}Ext.resumeLayouts(true);d.fireEvent("unlockcolumn",d,a)},applyColumnsState:function(h){var p=this,e=p.lockedGrid,g=e.headerCt,n=p.normalGrid.headerCt,q=Ext.Array.toMap(g.items,"headerId"),j=Ext.Array.toMap(n.items,"headerId"),m=[],o=[],l=1,b=h.length,k,a,d,c;for(k=0;ke.viewSize){e.viewSize=e.store.viewSize=c;e.handleViewScroll(e.lastScrollDirection||1)}},beforeViewRefresh:function(){var b=this,a=b.view,c,d;b.focusOnRefresh=Ext.Element.getActiveElement===a.el.dom;if(b.variableRowHeight){d=b.lastScrollDirection;b.commonRecordIndex=undefined;if(d&&(b.previousStart!==undefined)&&(b.scrollProportion===undefined)&&(c=a.getNodes()).length){if(d===1){if(b.tableStart<=b.previousEnd){b.commonRecordIndex=c.length-1}}else{if(d===-1){if(b.tableEnd>=b.previousStart){b.commonRecordIndex=0}}}b.scrollOffset=-a.el.getOffsetsTo(c[b.commonRecordIndex])[1];b.commonRecordIndex-=(b.tableStart-b.previousStart)}else{b.scrollOffset=undefined}}},onLockRefresh:function(a){a.table.dom.style.position="absolute"},onViewRefresh:function(){var d=this,g=d.store,c,e=d.view,j=e.el,k=j.dom,m,i,b,l=e.table.dom,h,a;if(d.focusOnRefresh){j.focus();d.focusOnRefresh=false}d.disabled=true;if(g.getCount()===g.getTotalCount()||(g.isFiltered()&&!g.remoteFilter)){d.stretcher.setHeight(0);d.position=k.scrollTop=0;d.setTablePosition("absolute");return}d.stretcher.setHeight(c=d.getScrollHeight());a=k.scrollTop;d.isScrollRefresh=(a>0);if(d.scrollProportion!==undefined){d.setTablePosition("absolute");d.setTableTop((d.scrollProportion?(c*d.scrollProportion)-(l.offsetHeight*d.scrollProportion):0)+"px")}else{d.setTablePosition("absolute");d.setTableTop((h=(d.tableStart||0)*d.rowHeight)+"px");if(d.scrollOffset){m=e.getNodes();i=-j.getOffsetsTo(m[d.commonRecordIndex])[1];b=i-d.scrollOffset;d.position=(k.scrollTop+=b)}else{if((h>a)||((h+l.offsetHeight)b?1:-1;if(b!==d.position){d.handleViewScroll(d.lastScrollDirection)}}},handleViewScroll:function(i){var e=this,k=e.store,h=e.view,g=e.viewSize,l=k.getTotalCount(),d=l-g,c=e.getFirstVisibleRowIndex(),j=e.getLastVisibleRowIndex(),a=h.el.dom,b,m;if(l>=g){e.scrollProportion=undefined;if(i==-1){if(e.tableStart){if(c!==undefined){if(c<(e.tableStart+e.numFromEdge)){b=Math.max(0,j+e.trailingBufferZone-g)}}else{e.scrollProportion=a.scrollTop/(a.scrollHeight-a.clientHeight);b=Math.max(0,l*e.scrollProportion-(g/2)-e.numFromEdge-((e.leadingBufferZone+e.trailingBufferZone)/2))}}}else{if(c!==undefined){if(j>(e.tableEnd-e.numFromEdge)){b=Math.max(0,c-e.trailingBufferZone)}}else{e.scrollProportion=a.scrollTop/(a.scrollHeight-a.clientHeight);b=l*e.scrollProportion-(g/2)-e.numFromEdge-((e.leadingBufferZone+e.trailingBufferZone)/2)}}if(b!==undefined){if(b>d){b=d&~1;m=l-1}else{b=b&~1;m=b+g-1}if(k.rangeCached(b,m)){e.cancelLoad();k.guaranteeRange(b,m)}else{e.attemptLoad(b,m)}}}},getFirstVisibleRowIndex:function(){var d=this,a=d.view,h=a.el.dom.scrollTop,e,c,b,g;if(d.variableRowHeight){e=a.getNodes();c=e.length;if(!c){return}g=Ext.fly(e[0]).getOffsetsTo(a.el)[1];for(b=0;ba.el.dom.clientHeight){return}if(g>0){return a.getRecord(e[b]).index}}}else{return Math.floor(h/d.rowHeight)}},getLastVisibleRowIndex:function(){var h=this,c=h.store,a=h.view,b=a.el.dom.clientHeight,j,g,e,d;if(h.variableRowHeight){j=a.getNodes();if(!j.length){return}g=c.getCount()-1;d=Ext.fly(j[g]).getOffsetsTo(a.el)[1]+j[g].offsetHeight;for(e=g;e>=0;e--){d-=j[e].offsetHeight;if(d<0){return}if(de.viewSize){g-=e.rowHeight}}}else{if(c){h=a.el.down(a.getItemSelector());if(h){e.rowHeight=h.getHeight(false,true)}}}return Math.floor(b.getTotalCount()*e.rowHeight)+g},attemptLoad:function(c,a){var b=this;if(b.scrollToLoadBuffer){if(!b.loadTask){b.loadTask=new Ext.util.DelayedTask(b.doAttemptLoad,b,[])}b.loadTask.delay(b.scrollToLoadBuffer,b.doAttemptLoad,b,[c,a])}else{b.store.guaranteeRange(c,a)}},cancelLoad:function(){if(this.loadTask){this.loadTask.cancel()}},doAttemptLoad:function(b,a){this.store.guaranteeRange(b,a)},destroy:function(){var b=this,a=b.viewListeners.scroll;b.store.un({guaranteedrange:b.onGuaranteedRange,scope:b});b.view.un(b.viewListeners);if(b.view.rendered){b.stretcher.remove();b.view.el.un("scroll",a.fn,a.scope)}}});Ext.define("Ext.layout.container.Fit",{extend:"Ext.layout.container.Container",alternateClassName:"Ext.layout.FitLayout",alias:"layout.fit",itemCls:Ext.baseCSSPrefix+"fit-item",targetCls:Ext.baseCSSPrefix+"layout-fit",type:"fit",defaultMargins:{top:0,right:0,bottom:0,left:0},manageMargins:true,sizePolicies:{0:{setsWidth:0,setsHeight:0},1:{setsWidth:1,setsHeight:0},2:{setsWidth:0,setsHeight:1},3:{setsWidth:1,setsHeight:1}},getItemSizePolicy:function(b,c){var a=c||this.owner.getSizeModel(),d=(a.width.shrinkWrap?0:1)|(a.height.shrinkWrap?0:2);return this.sizePolicies[d]},beginLayoutCycle:function(k,g){var t=this,u=t.lastHeightModel&&t.lastHeightModel.calculated,h=t.lastWidthModel&&t.lastWidthModel.calculated,o=h||u,l=0,m=0,s,b,p,r,e,a,j,n,q,d;t.callParent(arguments);if(o&&k.targetContext.el.dom.tagName.toUpperCase()!="TD"){o=h=u=false}b=k.childItems;e=b.length;for(p=0;p'+a.emptyText+"":""}));a.view.getComponentLayout().headerCt=a.headerCt;a.mon(a.view,{uievent:a.processEvent,scope:a});b.view=a.view;a.headerCt.view=a.view;a.relayEvents(a.view,["cellclick","celldblclick"])}return a.view},setAutoScroll:Ext.emptyFn,processEvent:function(g,b,a,c,d,i){var h=this,j;if(d!==-1){j=h.headerCt.getGridColumns()[d];return j.processEvent.apply(j,arguments)}},determineScrollbars:function(){},invalidateScroller:function(){},scrollByDeltaY:function(b,a){this.getView().scrollBy(0,b,a)},scrollByDeltaX:function(b,a){this.getView().scrollBy(b,0,a)},afterCollapse:function(){var a=this;a.saveScrollPos();a.saveScrollPos();a.callParent(arguments)},afterExpand:function(){var a=this;a.callParent(arguments);a.restoreScrollPos();a.restoreScrollPos()},saveScrollPos:Ext.emptyFn,restoreScrollPos:Ext.emptyFn,onHeaderResize:function(){this.delayScroll()},onHeaderMove:function(e,g,a,b,d){var c=this;if(c.optimizedColumnMove===false){c.view.refresh()}else{c.view.moveColumn(b,d,a)}c.delayScroll()},onHeaderHide:function(a,b){this.delayScroll()},onHeaderShow:function(a,b){this.delayScroll()},delayScroll:function(){var a=this.getScrollTarget().el;if(a){this.scrollTask.delay(10,null,null,[a.dom.scrollLeft])}},onViewReady:function(){this.fireEvent("viewready",this)},onRestoreHorzScroll:function(){var a=this.scrollLeftPos;if(a){this.syncHorizontalScroll(a,true)}},getScrollerOwner:function(){var a=this;if(!this.scrollerOwner){a=this.up("[scrollerOwner]")}return a},getLhsMarker:function(){var a=this;return a.lhsMarker||(a.lhsMarker=Ext.DomHelper.append(a.el,{cls:Ext.baseCSSPrefix+"grid-resize-marker"},true))},getRhsMarker:function(){var a=this;return a.rhsMarker||(a.rhsMarker=Ext.DomHelper.append(a.el,{cls:Ext.baseCSSPrefix+"grid-resize-marker"},true))},getSelectionModel:function(){if(!this.selModel){this.selModel={}}var b="SINGLE",a;if(this.simpleSelect){b="SIMPLE"}else{if(this.multiSelect){b="MULTI"}}Ext.applyIf(this.selModel,{allowDeselect:this.allowDeselect,mode:b});if(!this.selModel.events){a=this.selModel.selType||this.selType;this.selModel=Ext.create("selection."+a,this.selModel)}if(!this.selModel.hasRelaySetup){this.relayEvents(this.selModel,["selectionchange","beforeselect","beforedeselect","select","deselect"]);this.selModel.hasRelaySetup=true}if(this.disableSelection){this.selModel.locked=true}return this.selModel},getScrollTarget:function(){var a=this.getScrollerOwner(),b=a.query("tableview");return b[1]||b[0]},onHorizontalScroll:function(a,b){this.syncHorizontalScroll(b.scrollLeft)},syncHorizontalScroll:function(d,b){var c=this,a;b=b===true;if(c.rendered&&(b||d!==c.scrollLeftPos)){if(b){a=c.getScrollTarget();a.el.dom.scrollLeft=d}c.headerCt.el.dom.scrollLeft=d;c.scrollLeftPos=d}},onStoreLoad:Ext.emptyFn,getEditorParent:function(){return this.body},bindStore:function(a){var b=this;b.store=a;b.getView().bindStore(a)},beforeDestroy:function(){Ext.destroy(this.verticalScroller);this.callParent()},reconfigure:function(a,b){var c=this,d=c.headerCt;if(c.lockable){c.reconfigureLockable(a,b)}else{Ext.suspendLayouts();if(b){delete c.scrollLeftPos;d.removeAll();d.add(b)}if(a){a=Ext.StoreManager.lookup(a);c.bindStore(a)}else{c.getView().refresh()}d.setSortState();Ext.resumeLayouts(true)}c.fireEvent("reconfigure",c,a,b)}});Ext.define("Ext.grid.View",{extend:"Ext.view.Table",alias:"widget.gridview",stripeRows:true,autoScroll:true});Ext.define("Ext.grid.Panel",{extend:"Ext.panel.Table",requires:["Ext.grid.View"],alias:["widget.gridpanel","widget.grid"],alternateClassName:["Ext.list.ListView","Ext.ListView","Ext.grid.GridPanel"],viewType:"gridview",lockable:false,bothCfgCopy:["invalidateScrollerOnRefresh","hideHeaders","enableColumnHide","enableColumnMove","enableColumnResize","sortableColumns"],normalCfgCopy:["verticalScroller","verticalScrollDock","verticalScrollerType","scroll"],lockedCfgCopy:[],rowLines:true});Ext.define("Ext.grid.RowEditor",{extend:"Ext.form.Panel",requires:["Ext.tip.ToolTip","Ext.util.HashMap","Ext.util.KeyNav"],saveBtnText:"Update",cancelBtnText:"Cancel",errorsText:"Errors",dirtyText:"You need to commit or cancel your changes",lastScrollLeft:0,lastScrollTop:0,border:false,hideMode:"offsets",initComponent:function(){var b=this,a;b.cls=Ext.baseCSSPrefix+"grid-row-editor";b.layout={type:"hbox",align:"middle"};b.columns=new Ext.util.HashMap();b.columns.getKey=function(d){var c;if(d.getEditor){c=d.getEditor();if(c){return c.id}}return d.id};b.mon(b.columns,{add:b.onFieldAdd,remove:b.onFieldRemove,replace:b.onFieldReplace,scope:b});b.callParent(arguments);if(b.fields){b.setField(b.fields);delete b.fields}b.mon(Ext.container.Container.hierarchyEventSource,{scope:b,show:b.repositionIfVisible});a=b.getForm();a.trackResetOnLoad=true},onFieldChange:function(){var c=this,b=c.getForm(),a=b.isValid();if(c.errorSummary&&c.isVisible()){c[a?"hideToolTip":"showToolTip"]()}c.updateButton(a);c.isValid=a},updateButton:function(b){var a=this.floatingButtons;if(a){a.child("#update").setDisabled(!b)}},afterRender:function(){var b=this,a=b.editingPlugin;b.callParent(arguments);b.mon(b.renderTo,"scroll",b.onCtScroll,b,{buffer:100});b.mon(b.el,{click:Ext.emptyFn,stopPropagation:true});b.el.swallowEvent(["keypress","keydown"]);b.keyNav=new Ext.util.KeyNav(b.el,{enter:a.completeEdit,esc:a.onEscKey,scope:a});b.mon(a.view,{beforerefresh:b.onBeforeViewRefresh,refresh:b.onViewRefresh,itemremove:b.onViewItemRemove,scope:b})},onBeforeViewRefresh:function(b){var c=this,a=b.el.dom;if(c.el.dom.parentNode===a){a.removeChild(c.el.dom)}},onViewRefresh:function(c){var e=this,b=c.el.dom,d=e.context,a;b.appendChild(e.el.dom);if(d&&(a=d.store.indexOf(d.record))>=0){d.row=c.getNode(a);e.reposition();if(e.tooltip&&e.tooltip.isVisible()){e.tooltip.setTarget(d.row)}}else{e.editingPlugin.cancelEdit()}},onViewItemRemove:function(a,b){var c=this.context;if(c&&a===c.record){this.editingPlugin.cancelEdit()}},onCtScroll:function(d,c){var a=this,b=c.scrollTop,g=c.scrollLeft;if(b!==a.lastScrollTop){a.lastScrollTop=b;if((a.tooltip&&a.tooltip.isVisible())||a.hiddenTip){a.repositionTip()}}if(g!==a.lastScrollLeft){a.lastScrollLeft=g;a.reposition()}},onColumnAdd:function(a){if(!a.isGroupHeader){this.setField(a)}},onColumnRemove:function(a){this.columns.remove(a)},onColumnResize:function(b,a){if(!b.isGroupHeader){b.getEditor().setWidth(a-2);this.repositionIfVisible()}},onColumnHide:function(a){if(!a.isGroupHeader){a.getEditor().hide();this.repositionIfVisible()}},onColumnShow:function(a){var b=a.getEditor();b.setWidth(a.getWidth()-2).show();this.repositionIfVisible()},onColumnMove:function(b,a,c){if(!b.isGroupHeader){var d=b.getEditor();if(this.items.indexOf(d)!=c){this.move(a,c)}}},onFieldAdd:function(e,a,b){var c=this,g,d;if(!b.isGroupHeader){g=c.editingPlugin.grid.headerCt.getHeaderIndex(b);d=b.getEditor({xtype:"displayfield"});c.insert(g,d)}},onFieldRemove:function(g,a,b){var c=this,e,d;if(!b.isGroupHeader){e=b.getEditor();d=e.el;c.remove(e,false);if(d){d.remove()}}},onFieldReplace:function(d,a,c,b){this.onFieldRemove(d,a,b)},clearFields:function(){var b=this.columns,a;for(a in b){if(b.hasOwnProperty(a)){b.removeAtKey(a)}}},getFloatingButtons:function(){var e=this,g=Ext.baseCSSPrefix,d=g+"grid-row-editor-buttons",c=e.editingPlugin,a=Ext.panel.Panel.prototype.minButtonWidth,b;if(!e.floatingButtons){b=e.floatingButtons=new Ext.Container({renderTpl:['
','
','
','
','
',"{%this.renderContainer(out,values)%}"],width:200,renderTo:e.el,baseCls:d,layout:{type:"hbox",align:"middle"},defaults:{flex:1,margins:"0 1 0 1"},items:[{itemId:"update",xtype:"button",handler:c.completeEdit,scope:c,text:e.saveBtnText,minWidth:a},{xtype:"button",handler:c.cancelEdit,scope:c,text:e.cancelBtnText,minWidth:a}]});e.mon(b.el,{mousedown:Ext.emptyFn,click:Ext.emptyFn,stopEvent:true})}return e.floatingButtons},repositionIfVisible:function(d){var b=this,a=b.view;if(d&&(d==b||!a.isDescendantOf(d))){return}if(b.isVisible()&&a.isVisible(true)){b.reposition()}},reposition:function(r){var s=this,c=s.context,e=c&&Ext.get(c.row),p=s.getFloatingButtons(),q=p.el,a=s.editingPlugin.grid,g=a.view.el,o=a.headerCt.getFullWidth(),t=a.getWidth(),l=Math.min(o,t),n=a.view.el.dom.scrollLeft,i=p.getWidth(),d=(l-i)/2+n,j,h,m,k=function(){q.scrollIntoView(g,false);if(r&&r.callback){r.callback.call(r.scope||s)}},b;if(e&&Ext.isElement(e.dom)){e.scrollIntoView(g,false);j=e.getXY()[1]-5;h=e.getHeight();m=h+(s.editingPlugin.grid.rowLines?9:10);if(s.getHeight()!=m){s.setHeight(m);s.el.setLeft(0)}if(r){b={to:{y:j},duration:r.duration||125,listeners:{afteranimate:function(){k();j=e.getXY()[1]-5}}};s.el.animate(b)}else{s.el.setY(j);k()}}if(s.getWidth()!=o){s.setWidth(o)}q.setLeft(d)},getEditor:function(a){var b=this;if(Ext.isNumber(a)){return b.query(">[isFormField]")[a]}else{if(a.isHeader&&!a.isGroupHeader){return a.getEditor()}}},removeField:function(b){var a=this;b=a.getEditor(b);a.mun(b,"validitychange",a.onValidityChange,a);a.columns.removeAtKey(b.id);Ext.destroy(b)},setField:function(b){var d=this,a,c,e;if(Ext.isArray(b)){c=b.length;for(a=0;adisplayfield");b=g.length;for(c=0;cg&&a":"",h=[],a=d.query(">[isFormField]"),c=a.length,b;function g(i){return"
  • "+i+"
  • "}for(b=0;b"+h.join("")+""},beforeDestroy:function(){Ext.destroy(this.floatingButtons,this.tooltip);this.callParent()}});Ext.define("Ext.grid.plugin.HeaderResizer",{extend:"Ext.AbstractPlugin",requires:["Ext.dd.DragTracker","Ext.util.Region"],alias:"plugin.gridheaderresizer",disabled:false,config:{dynamic:false},colHeaderCls:Ext.baseCSSPrefix+"column-header",minColWidth:40,maxColWidth:1000,wResizeCursor:"col-resize",eResizeCursor:"col-resize",init:function(a){this.headerCt=a;a.on("render",this.afterHeaderRender,this,{single:true})},destroy:function(){if(this.tracker){this.tracker.destroy()}},afterHeaderRender:function(){var b=this.headerCt,a=b.el;b.mon(a,"mousemove",this.onHeaderCtMouseMove,this);this.tracker=new Ext.dd.DragTracker({disabled:this.disabled,onBeforeStart:Ext.Function.bind(this.onBeforeStart,this),onStart:Ext.Function.bind(this.onStart,this),onDrag:Ext.Function.bind(this.onDrag,this),onEnd:Ext.Function.bind(this.onEnd,this),tolerance:3,autoStart:300,el:a})},onHeaderCtMouseMove:function(b,k){var d=this,a,i,j,g,c,h;if(d.headerCt.dragging){if(d.activeHd){d.activeHd.el.dom.style.cursor="";delete d.activeHd}}else{i=b.getTarget("."+d.colHeaderCls,3,true);if(i){j=Ext.getCmp(i.id);if(j.isOnLeftEdge(b)){g=j.previousNode("gridcolumn:not([hidden]):not([isGroupHeader])");if(g){h=d.headerCt.up("tablepanel");c=g.up("tablepanel");if(!((c===h)||((h.ownerCt.isXType("tablepanel"))&&h.ownerCt.view.lockedGrid===c))){g=null}}}else{if(j.isOnRightEdge(b)){g=j}else{g=null}}if(g){if(g.isGroupHeader){a=g.getGridColumns();g=a[a.length-1]}if(g&&!(g.fixed||(g.resizable===false)||d.disabled)){d.activeHd=g;j.el.dom.style.cursor=d.eResizeCursor}}else{j.el.dom.style.cursor="";delete d.activeHd}}}},onBeforeStart:function(b){var a=b.getTarget();this.dragHd=this.activeHd;if(!!this.dragHd&&!Ext.fly(a).hasCls(Ext.baseCSSPrefix+"column-header-trigger")&&!this.headerCt.dragging){this.tracker.constrainTo=this.getConstrainRegion();return true}else{this.headerCt.dragging=false;return false}},getConstrainRegion:function(){var c=this,a=c.dragHd.el,d=Ext.util.Region.getRegion(a),b;if(c.headerCt.forceFit){b=c.dragHd.nextNode("gridcolumn:not([hidden]):not([isGroupHeader])")}return d.adjust(0,c.headerCt.forceFit?(b?b.getWidth()-c.minColWidth:0):c.maxColWidth-a.getWidth(),0,c.minColWidth)},onStart:function(u){var v=this,h=v.dragHd,b=h.el,o=b.getWidth(),j=v.headerCt,l=u.getTarget(),d,r,g,k,c,n,a,i,s,q,p,m;if(v.dragHd&&!Ext.fly(l).hasCls(Ext.baseCSSPrefix+"column-header-trigger")){j.dragging=true}v.origWidth=o;if(!v.dynamic){d=b.getXY();r=j.up("[scrollerOwner]");g=v.dragHd.up(":not([isGroupHeader])");k=g.up();c=r.getLhsMarker();n=r.getRhsMarker();a=n.parent();i=a.getLocalX();s=a.getLocalY();q=a.translatePoints(d);p=k.body.getHeight()+j.getHeight();m=q.top-s;c.setTop(m);n.setTop(m);c.setHeight(p);n.setHeight(p);c.setLeft(q.left-i);n.setLeft(q.left+o-i)}},onDrag:function(h){if(!this.dynamic){var g=this.tracker.getXY("point"),a=this.headerCt.up("[scrollerOwner]"),i=a.getRhsMarker(),c=i.parent(),b=c.translatePoints(g),d=c.getLocalX();i.setLeft(b.left-d)}else{this.doResize()}},onEnd:function(g){this.headerCt.dragging=false;if(this.dragHd){if(!this.dynamic){var d=this.dragHd,b=this.headerCt.up("[scrollerOwner]"),c=b.getLhsMarker(),h=b.getRhsMarker(),a=-9999;c.setLeft(a);h.setLeft(a)}this.doResize()}},doResize:function(){if(this.dragHd){var b=this.dragHd,a,c=this.tracker.getOffset("point");if(b.flex){delete b.flex}Ext.suspendLayouts();b.setWidth(this.origWidth+c[0]);if(this.headerCt.forceFit){a=b.nextNode("gridcolumn:not([hidden]):not([isGroupHeader])");if(a){delete a.flex;a.setWidth(a.getWidth()-c[0])}}Ext.resumeLayouts(true)}},disable:function(){this.disabled=true;if(this.tracker){this.tracker.disable()}},enable:function(){this.disabled=false;if(this.tracker){this.tracker.enable()}}});Ext.define("Ext.grid.header.DragZone",{extend:"Ext.dd.DragZone",colHeaderCls:Ext.baseCSSPrefix+"column-header",maxProxyWidth:120,constructor:function(a){this.headerCt=a;this.ddGroup=this.getDDGroup();this.callParent([a.el]);this.proxy.el.addCls(Ext.baseCSSPrefix+"grid-col-dd")},getDDGroup:function(){return"header-dd-zone-"+this.headerCt.up("[scrollerOwner]").id},getDragData:function(b){var d=b.getTarget("."+this.colHeaderCls),a,c;if(d){a=Ext.getCmp(d.id);if(!this.headerCt.dragging&&a.draggable&&!(a.isOnLeftEdge(b)||a.isOnRightEdge(b))){c=document.createElement("div");c.innerHTML=Ext.getCmp(d.id).text;return{ddel:c,header:a}}}return false},onBeforeDrag:function(){return !(this.headerCt.dragging||this.disabled)},onInitDrag:function(){this.headerCt.dragging=true;this.callParent(arguments)},onDragDrop:function(){this.headerCt.dragging=false;this.callParent(arguments)},afterRepair:function(){this.callParent();this.headerCt.dragging=false},getRepairXY:function(){return this.dragData.header.el.getXY()},disable:function(){this.disabled=true},enable:function(){this.disabled=false}});Ext.define("Ext.grid.header.DropZone",{extend:"Ext.dd.DropZone",colHeaderCls:Ext.baseCSSPrefix+"column-header",proxyOffsets:[-4,-9],constructor:function(a){this.headerCt=a;this.ddGroup=this.getDDGroup();this.callParent([a.el])},getDDGroup:function(){return"header-dd-zone-"+this.headerCt.up("[scrollerOwner]").id},getTargetFromEvent:function(a){return a.getTarget("."+this.colHeaderCls)},getTopIndicator:function(){if(!this.topIndicator){this.topIndicator=Ext.DomHelper.append(Ext.getBody(),{cls:"col-move-top",html:" "},true)}return this.topIndicator},getBottomIndicator:function(){if(!this.bottomIndicator){this.bottomIndicator=Ext.DomHelper.append(Ext.getBody(),{cls:"col-move-bottom",html:" "},true)}return this.bottomIndicator},getLocation:function(d,b){var a=d.getXY()[0],c=Ext.fly(b).getRegion(),h,g;if((c.right-a)<=(c.right-c.left)/2){h="after"}else{h="before"}return{pos:h,header:Ext.getCmp(b.id),node:b}},positionIndicator:function(v,o,u){var a=this.getLocation(u,o),q=a.header,g=a.pos,d=v.nextSibling("gridcolumn:not([hidden])"),t=v.previousSibling("gridcolumn:not([hidden])"),l,r,s,b,c,k,m,x,w,n,j,p,h;if(!q.draggable&&q.getIndex()===0){return false}this.lastLocation=a;if((v!==q)&&((g==="before"&&d!==q)||(g==="after"&&t!==q))&&!q.isDescendantOf(v)){n=Ext.dd.DragDropManager.getRelated(this);j=n.length;p=0;for(;pl)){p-=1}Ext.suspendLayouts();if(t!==a){t.remove(q,false);if(t.isGroupHeader){if(!t.items.getCount()){c=t.ownerCt;c.remove(t,false);t.el.dom.parentNode.removeChild(t.el.dom)}}}if(t===a){a.move(l,p)}else{a.insert(p,q)}if(a.isGroupHeader){if(a!==t){q.savedFlex=q.flex;delete q.flex;q.width=q.getWidth()}}else{if(q.savedFlex){q.flex=q.savedFlex;delete q.width}}i.purgeCache();Ext.resumeLayouts(true);i.onHeaderMoved(q,m,b,s);if(!t.items.getCount()){t.destroy()}}}}}});Ext.define("Ext.grid.plugin.HeaderReorderer",{extend:"Ext.AbstractPlugin",requires:["Ext.grid.header.DragZone","Ext.grid.header.DropZone"],alias:"plugin.gridheaderreorderer",init:function(a){this.headerCt=a;a.on({render:this.onHeaderCtRender,single:true,scope:this})},destroy:function(){Ext.destroy(this.dragZone,this.dropZone)},onHeaderCtRender:function(){var a=this;a.dragZone=new Ext.grid.header.DragZone(a.headerCt);a.dropZone=new Ext.grid.header.DropZone(a.headerCt);if(a.disabled){a.dragZone.disable()}},enable:function(){this.disabled=false;if(this.dragZone){this.dragZone.enable()}},disable:function(){this.disabled=true;if(this.dragZone){this.dragZone.disable()}}});Ext.define("Ext.grid.header.Container",{extend:"Ext.container.Container",requires:["Ext.grid.ColumnLayout","Ext.grid.plugin.HeaderResizer","Ext.grid.plugin.HeaderReorderer"],uses:["Ext.grid.column.Column","Ext.menu.Menu","Ext.menu.CheckItem","Ext.menu.Separator"],border:true,alias:"widget.headercontainer",baseCls:Ext.baseCSSPrefix+"grid-header-ct",dock:"top",weight:100,defaultType:"gridcolumn",detachOnRemove:false,defaultWidth:100,sortAscText:"Sort Ascending",sortDescText:"Sort Descending",sortClearText:"Clear Sort",columnsText:"Columns",headerOpenCls:Ext.baseCSSPrefix+"column-header-open",triStateSort:false,ddLock:false,dragging:false,sortable:true,initComponent:function(){var a=this;a.headerCounter=0;a.plugins=a.plugins||[];if(!a.isHeader){if(a.enableColumnResize){a.resizer=new Ext.grid.plugin.HeaderResizer();a.plugins.push(a.resizer)}if(a.enableColumnMove){a.reorderer=new Ext.grid.plugin.HeaderReorderer();a.plugins.push(a.reorderer)}}if(a.isHeader&&!a.items){a.layout=a.layout||"auto"}else{a.layout=Ext.apply({type:"gridcolumn",align:"stretchmax"},a.initialConfig.layout)}a.defaults=a.defaults||{};Ext.applyIf(a.defaults,{triStateSort:a.triStateSort,sortable:a.sortable});a.menuTask=new Ext.util.DelayedTask(a.updateMenuDisabledState,a);a.callParent();a.addEvents("columnresize","headerclick","headertriggerclick","columnmove","columnhide","columnshow","sortchange","menucreate")},onDestroy:function(){var a=this;a.menuTask.cancel();Ext.destroy(a.resizer,a.reorderer);a.callParent()},applyColumnsState:function(e){if(!e||!e.length){return}var m=this,k=m.items.items,j=k.length,g=0,b=e.length,l,d,a,h;for(l=0;lgridcolumn[hideable]"),h=a.length,d;for(;b{text}
    {%this.renderContainer(out,values)%}',dataIndex:null,text:" ",menuText:null,emptyCellText:" ",sortable:true,resizable:true,hideable:true,menuDisabled:false,renderer:false,editRenderer:false,align:"left",draggable:true,tooltipType:"qtip",initDraggable:Ext.emptyFn,isHeader:true,componentLayout:"columncomponent",initResizable:Ext.emptyFn,initComponent:function(){var a=this,b;if(Ext.isDefined(a.header)){a.text=a.header;delete a.header}if(!a.triStateSort){a.possibleSortStates.length=2}if(Ext.isDefined(a.columns)){a.isGroupHeader=true;a.items=a.columns;delete a.columns;delete a.flex;delete a.width;a.cls=(a.cls||"")+" "+Ext.baseCSSPrefix+"group-header";a.sortable=false;a.resizable=false;a.align="center"}else{a.isContainer=false;if(a.flex){a.minWidth=a.minWidth||Ext.grid.plugin.HeaderResizer.prototype.minColWidth}}a.addCls(Ext.baseCSSPrefix+"column-header-align-"+a.align);b=a.renderer;if(b){if(typeof b=="string"){a.renderer=Ext.util.Format[b]}a.hasCustomRenderer=true}else{if(a.defaultRenderer){a.scope=a;a.renderer=a.defaultRenderer}}a.callParent(arguments);a.on({element:"el",click:a.onElClick,dblclick:a.onElDblClick,scope:a});a.on({element:"titleEl",mouseenter:a.onTitleMouseOver,mouseleave:a.onTitleMouseOut,scope:a})},onAdd:function(a){a.isSubHeader=true;a.addCls(Ext.baseCSSPrefix+"group-sub-header");this.callParent(arguments)},onRemove:function(a){a.isSubHeader=false;a.removeCls(Ext.baseCSSPrefix+"group-sub-header");this.callParent(arguments)},initRenderData:function(){var b=this,d="",c=b.tooltip,a=b.tooltipType=="qtip"?"data-qtip":"title";if(!Ext.isEmpty(c)){d=a+'="'+c+'" '}return Ext.applyIf(b.callParent(arguments),{text:b.text,menuDisabled:b.menuDisabled,tipMarkup:d})},applyColumnState:function(b){var a=this,c=Ext.isDefined;a.applyColumnsState(b.columns);if(c(b.hidden)){a.hidden=b.hidden}if(c(b.locked)){a.locked=b.locked}if(c(b.sortable)){a.sortable=b.sortable}if(c(b.width)){delete a.flex;a.width=b.width}else{if(c(b.flex)){delete a.width;a.flex=b.flex}}},getColumnState:function(){var e=this,b=e.items.items,a=b?b.length:0,d,c=[],g={id:e.getStateId()};e.savePropsToState(["hidden","sortable","locked","flex","width"],g);if(e.isGroupHeader){for(d=0;d:not([hidden])");if(h.length===1&&h[0]==j){j.ownerCt.hide();return}}Ext.suspendLayouts();if(j.isGroupHeader){h=j.items.items;for(d=0,g=h.length;d*");for(e=0,a=c.length;e
    ',indicatorCls:Ext.baseCSSPrefix+"grid-drop-indicator",constructor:function(a){var b=this;Ext.apply(b,a);if(!b.ddGroup){b.ddGroup="view-dd-zone-"+b.view.id}b.callParent([b.view.el])},fireViewEvent:function(){var b=this,a;b.lock();a=b.view.fireEvent.apply(b.view,arguments);b.unlock();return a},getTargetFromEvent:function(k){var j=k.getTarget(this.view.getItemSelector()),d,c,b,g,a,h;if(!j){d=k.getPageY();for(g=0,c=this.view.getNodes(),a=c.length;g=(b.bottom-b.top)/2){d="before"}else{d="after"}return d},containsRecordAtOffset:function(d,b,g){if(!b){return false}var a=this.view,c=a.indexOf(b),e=a.getNode(c+g),h=e?a.getRecord(e):null;return h&&Ext.Array.contains(d,h)},positionIndicator:function(b,c,d){var g=this,i=g.view,h=g.getPosition(d,b),k=i.getRecord(b),a=c.records,j;if(!Ext.Array.contains(a,k)&&(h=="before"&&!g.containsRecordAtOffset(a,k,-1)||h=="after"&&!g.containsRecordAtOffset(a,k,1))){g.valid=true;if(g.overRecord!=k||g.currentPosition!=h){j=Ext.fly(b).getY()-i.el.getY()-1;if(h=="after"){j+=Ext.fly(b).getHeight()}g.getIndicator().setWidth(Ext.fly(i.el).getWidth()).showAt(0,j);g.overRecord=k;g.currentPosition=h}}else{g.invalidateDrop()}},invalidateDrop:function(){if(this.valid){this.valid=false;this.getIndicator().hide()}},onNodeOver:function(c,a,g,d){var b=this;if(!Ext.Array.contains(d.records,b.view.getRecord(c))){b.positionIndicator(c,d,g)}return b.valid?b.dropAllowed:b.dropNotAllowed},notifyOut:function(c,a,g,d){var b=this;b.callParent(arguments);delete b.overRecord;delete b.currentPosition;if(b.indicator){b.indicator.hide()}},onContainerOver:function(a,h,g){var d=this,b=d.view,c=b.store.getCount();if(c){d.positionIndicator(b.getNode(c-1),g,h)}else{delete d.overRecord;delete d.currentPosition;d.getIndicator().setWidth(Ext.fly(b.el).getWidth()).showAt(0,0);d.valid=true}return d.dropAllowed},onContainerDrop:function(a,c,b){return this.onNodeDrop(a,null,c,b)},onNodeDrop:function(g,a,i,h){var d=this,c=false,b={wait:false,processDrop:function(){d.invalidateDrop();d.handleNodeDrop(h,d.overRecord,d.currentPosition);c=true;d.fireViewEvent("drop",g,h,d.overRecord,d.currentPosition)},cancelDrop:function(){d.invalidateDrop();c=true}},j=false;if(d.valid){j=d.fireViewEvent("beforedrop",g,h,d.overRecord,d.currentPosition,b);if(b.wait){return}if(j!==false){if(!c){b.processDrop()}}}return j},destroy:function(){Ext.destroy(this.indicator);delete this.indicator;this.callParent()}});Ext.define("Ext.grid.ViewDropZone",{extend:"Ext.view.DropZone",indicatorHtml:'
    ',indicatorCls:Ext.baseCSSPrefix+"grid-drop-indicator",handleNodeDrop:function(b,d,e){var j=this.view,k=j.getStore(),h,a,c,g;if(b.copy){a=b.records;b.records=[];for(c=0,g=a.length;cActions",sortable:false,constructor:function(d){var g=this,b=Ext.apply({},d),c=b.items||[g],h,e,a;g.origRenderer=b.renderer||g.renderer;g.origScope=b.scope||g.scope;delete g.renderer;delete g.scope;delete b.renderer;delete b.scope;delete b.items;g.callParent([b]);g.items=c;for(e=0,a=c.length;e"}return g},enableAction:function(b,a){var c=this;if(!b){b=0}else{if(!Ext.isNumber(b)){b=Ext.Array.indexOf(c.items,b)}}c.items[b].disabled=false;c.up("tablepanel").el.select("."+Ext.baseCSSPrefix+"action-col-"+b).removeCls(c.disabledCls);if(!a){c.fireEvent("enable",c)}},disableAction:function(b,a){var c=this;if(!b){b=0}else{if(!Ext.isNumber(b)){b=Ext.Array.indexOf(c.items,b)}}c.items[b].disabled=true;c.up("tablepanel").el.select("."+Ext.baseCSSPrefix+"action-col-"+b).addCls(c.disabledCls);if(!a){c.fireEvent("disable",c)}},destroy:function(){delete this.items;delete this.renderer;return this.callParent(arguments)},processEvent:function(i,l,n,a,j,g,c,p){var h=this,d=g.getTarget(),b,o,k,m=i=="keydown"&&g.getKey();if(m&&!Ext.fly(d).findParent(l.cellSelector)){d=Ext.fly(n).down("."+Ext.baseCSSPrefix+"action-col-icon",true)}if(d&&(b=d.className.match(h.actionIdRe))){o=h.items[parseInt(b[1],10)];if(o){if(i=="click"||(m==g.ENTER||m==g.SPACE)){k=o.handler||h.handler;if(k&&!o.disabled){k.call(o.scope||h.origScope||h,l,a,j,o,g,c,p)}}else{if(i=="mousedown"&&o.stopSelection!==false){return false}}}}return h.callParent(arguments)},cascade:function(b,a){b.call(a||this,this)},getRefItems:function(){return[]}});Ext.define("Ext.grid.column.Boolean",{extend:"Ext.grid.column.Column",alias:["widget.booleancolumn"],alternateClassName:"Ext.grid.BooleanColumn",trueText:"true",falseText:"false",undefinedText:" ",defaultRenderer:function(a){if(a===undefined){return this.undefinedText}if(!a||a==="false"){return this.falseText}return this.trueText}});Ext.define("Ext.grid.column.Date",{extend:"Ext.grid.column.Column",alias:["widget.datecolumn"],requires:["Ext.Date"],alternateClassName:"Ext.grid.DateColumn",initComponent:function(){if(!this.format){this.format=Ext.Date.defaultFormat}this.callParent(arguments)},defaultRenderer:function(a){return Ext.util.Format.date(a,this.format)}});Ext.define("Ext.grid.column.Number",{extend:"Ext.grid.column.Column",alias:["widget.numbercolumn"],requires:["Ext.util.Format"],alternateClassName:"Ext.grid.NumberColumn",format:"0,000.00",defaultRenderer:function(a){return Ext.util.Format.number(a,this.format)}});Ext.define("Ext.grid.column.Template",{extend:"Ext.grid.column.Column",alias:["widget.templatecolumn"],requires:["Ext.XTemplate"],alternateClassName:"Ext.grid.TemplateColumn",initComponent:function(){var a=this;a.tpl=(!Ext.isPrimitive(a.tpl)&&a.tpl.compile)?a.tpl:new Ext.XTemplate(a.tpl);a.hasCustomRenderer=true;a.callParent(arguments)},defaultRenderer:function(c,d,a){var b=Ext.apply({},a.data,a.getAssociatedData());return this.tpl.apply(b)}});Ext.define("Ext.grid.feature.Feature",{extend:"Ext.util.Observable",alias:"feature.feature",isFeature:true,disabled:false,hasFeatureEvent:true,eventPrefix:null,eventSelector:null,view:null,grid:null,collectData:false,constructor:function(a){this.initialConfig=a;this.callParent(arguments)},clone:function(){return new this.self(this.initialConfig)},init:Ext.emptyFn,getFeatureTpl:function(){return""},getFireEventArgs:function(b,a,c,d){return[b,a,c,d]},attachEvents:function(){},getFragmentTpl:Ext.emptyFn,mutateMetaRowTpl:Ext.emptyFn,getMetaRowTplFragments:function(){return{}},getTableFragments:function(){return{}},getAdditionalData:function(c,a,b,d){return{}},enable:function(){this.disabled=false},disable:function(){this.disabled=true}});Ext.define("Ext.grid.feature.AbstractSummary",{extend:"Ext.grid.feature.Feature",alias:"feature.abstractsummary",showSummaryRow:true,nestedIdRe:/\{\{id\}([\w\-]*)\}/g,init:function(){var a=this;a.grid.optimizedColumnMove=false;a.view.mon(a.view.store,{update:a.onStoreUpdate,scope:a})},onStoreUpdate:function(){var a=this.view;if(this.showSummaryRow){a.saveScrollState();a.refresh();a.restoreScrollState()}},toggleSummaryRow:function(a){this.showSummaryRow=!!a},getSummaryFragments:function(){var a={};if(this.showSummaryRow){Ext.apply(a,{printSummaryRow:Ext.bind(this.printSummaryRow,this)})}return a},printSummaryRow:function(b){var a=this.view.getTableChunker().metaRowTpl.join(""),c=Ext.baseCSSPrefix;a=a.replace(c+"grid-row",c+"grid-row-summary");a=a.replace("{{id}}","{gridSummaryValue}");a=a.replace(this.nestedIdRe,"{id$1}");a=a.replace("{[this.embedRowCls()]}","{rowCls}");a=a.replace("{[this.embedRowAttr()]}","{rowAttr}");a=new Ext.XTemplate(a,{firstOrLastCls:Ext.view.TableChunker.firstOrLastCls});return a.applyTemplate({columns:this.getPrintData(b)})},getColumnValue:function(c,a){var b=Ext.getCmp(c.id),e=a[c.id],d=b.summaryRenderer;if(!e&&e!==0){e="\u00a0"}if(d){e=d.call(b.scope||this,e,a,c.dataIndex)}return e},getSummary:function(a,b,d,c){if(b){if(Ext.isFunction(b)){return a.aggregate(b,null,c)}switch(b){case"count":return a.count(c);case"min":return a.min(d,c);case"max":return a.max(d,c);case"sum":return a.sum(d,c);case"average":return a.average(d,c);default:return c?{}:""}}}});Ext.define("Ext.grid.feature.Chunking",{extend:"Ext.grid.feature.Feature",alias:"feature.chunking",chunkSize:20,rowHeight:Ext.isIE?27:26,visibleChunk:0,hasFeatureEvent:false,attachEvents:function(){this.view.el.on("scroll",this.onBodyScroll,this,{buffer:300})},onBodyScroll:function(g,c){var b=this.view,d=c.scrollTop,a=Math.floor(d/this.rowHeight/this.chunkSize);if(a!==this.visibleChunk){this.visibleChunk=a;b.refresh();b.el.dom.scrollTop=d;b.el.dom.scrollTop=d}},collectData:function(d,m,l,k,c){var j=this,e=c.rows.length,b=0,g=0,a=j.visibleChunk,p,n,h=c.rows;delete c.rows;c.chunks=[];for(;be){n=e-b}else{n=j.chunkSize}if(g>=a-1&&g<=a+1){p=h.slice(b,b+j.chunkSize)}else{p=[]}c.chunks.push({rows:p,fullWidth:k,chunkHeight:n*j.rowHeight})}return c},getTableFragments:function(){return{openTableWrap:function(){return'
    '},closeTableWrap:function(){return"
    "}}}});Ext.define("Ext.grid.feature.Grouping",{extend:"Ext.grid.feature.Feature",alias:"feature.grouping",eventPrefix:"group",eventSelector:"."+Ext.baseCSSPrefix+"grid-group-hd",bodySelector:"."+Ext.baseCSSPrefix+"grid-group-body",constructor:function(){var a=this;a.collapsedState={};a.callParent(arguments)},groupHeaderTpl:"{columnName}: {name}",depthToIndent:17,collapsedCls:Ext.baseCSSPrefix+"grid-group-collapsed",hdCollapsedCls:Ext.baseCSSPrefix+"grid-group-hd-collapsed",hdCollapsibleCls:Ext.baseCSSPrefix+"grid-group-hd-collapsible",groupByText:"Group by this field",showGroupsText:"Show in groups",hideGroupedHeader:false,startCollapsed:false,enableGroupingMenu:true,enableNoGroups:true,collapsible:true,enable:function(){var c=this,a=c.view,b=a.store,d;c.lastGroupField=c.getGroupField();if(c.lastGroupIndex){c.block();b.group(c.lastGroupIndex);c.unblock()}c.callParent();d=c.view.headerCt.getMenu().down("#groupToggleMenuItem");d.setChecked(true,true);c.refreshIf()},disable:function(){var d=this,a=d.view,b=a.store,g=b.remoteGroup,e,c;c=b.groupers.first();if(c){d.lastGroupIndex=c.property;d.block();b.clearGrouping();d.unblock()}d.callParent();e=d.view.headerCt.getMenu().down("#groupToggleMenuItem");e.setChecked(true,true);e.setChecked(false,true);d.refreshIf()},refreshIf:function(){var b=this.grid.ownerCt,a=this.view;if(!a.store.remoteGroup&&!this.blockRefresh){if(b&&b.lockable){b.view.refresh()}else{a.refresh()}}},getFeatureTpl:function(b,c,a,d){return["",'
    {collapsed}{[this.renderGroupHeaderTpl(values, parent)]}
    ','{[this.recurse(values)]}',"
    "].join("")},getFragmentTpl:function(){var a=this;return{indentByDepth:a.indentByDepth,depthToIndent:a.depthToIndent,renderGroupHeaderTpl:function(b,c){return Ext.XTemplate.getTpl(a,"groupHeaderTpl").apply(b,c)}}},indentByDepth:function(a){return'style="padding-left:'+((a.depth||0)*this.depthToIndent)+'px;"'},destroy:function(){delete this.view;delete this.prunedHeader},attachEvents:function(){var b=this,a=b.view;a.on({scope:b,groupclick:b.onGroupClick,rowfocus:b.onRowFocus});a.mon(a.store,{scope:b,groupchange:b.onGroupChange,remove:b.onRemove,add:b.onAdd,update:b.onUpdate});if(b.enableGroupingMenu){b.injectGroupingMenu()}b.pruneGroupedHeader();b.lastGroupField=b.getGroupField();b.block();b.onGroupChange();b.unblock()},onAdd:function(l,c){var j=this,k=j.view,a=j.getGroupField(),g=0,h=c.length,n,d,b,e,m;if(k.rendered){d={};n={};for(;g"},closeRow:function(){return""},mutateMetaRowTpl:function(a){a.unshift("{[this.isRow()]}");a.push("{[this.closeRow()]}")},getAdditionalData:function(e,j,g,i){var h=this.view,d=h.headerCt,c=d.items.getAt(0),b={},a;if(c){a=c.id+"-tdAttr";b[a]=this.indentByDepth(e)+" "+(i[a]?i[a]:"");b.collapsed="true";b.data=g.getData()}return b},getGroupRows:function(m,d,n,k){var i=this,c=m.children,o=m.rows=[],j=i.view,g=i.getGroupedHeader(),b=i.getGroupField(),h=-1,a,l=d.length,e;if(j.store.buffered){i.collapsible=false}m.viewId=j.id;for(a=0;a-1){m.name=m.renderedValue=n[h][g.id]}if(i.collapsedState[m.name]){m.collapsedCls=i.collapsedCls;m.hdCollapsedCls=i.hdCollapsedCls}else{m.collapsedCls=m.hdCollapsedCls=""}if(i.collapsible){m.collapsibleClass=i.hdCollapsibleCls}else{m.collapsibleClass=""}return m},getGroupHeaderId:function(a){return this.view.id+"-hd-"+a},getGroupBodyId:function(a){return this.view.id+"-bd-"+a},getGroupName:function(a){var b=this,c;c=Ext.fly(a).findParent(b.eventSelector);if(c){return c.id.split(this.view.id+"-hd-")[1]}c=Ext.fly(a).findParent(b.bodySelector);if(c){return c.id.split(this.view.id+"-bd-")[1]}},collectData:function(c,p,n,k,a){var h=this,l=h.view.store,j=h.collapsedState,e,d,b,i,m;if(h.startCollapsed){h.startCollapsed=false;e=true}if(!h.disabled&&l.isGrouped()){a.rows=b=l.getGroups();i=b.length;for(d=0;d","");a+="{[this.printSummaryRow(xindex)]}"}return a},getFragmentTpl:function(){var b=this,a=b.callParent();Ext.apply(a,b.getSummaryFragments());if(b.showSummaryRow){b.summaryGroups=b.view.store.getGroups();b.summaryData=b.generateSummaryData()}return a},getPrintData:function(j){var k=this,e=k.view.headerCt.getColumnsForTpl(),h=0,b=e.length,g=[],a=k.summaryGroups[j-1].name,d=k.summaryData[a],c;for(;h','','
    {rowBody}
    ',"",""].join("")},getMetaRowTplFragments:function(){return{getRowBody:this.getRowBody,rowBodyTrCls:this.rowBodyTrCls,rowBodyTdCls:this.rowBodyTdCls,rowBodyDivCls:this.rowBodyDivCls}},mutateMetaRowTpl:function(a){a.push("{[this.getRowBody(values)]}")},getAdditionalData:function(c,a,b,g){var d=this.view.headerCt,e=d.getColumnCount();return{rowBody:"",rowBodyCls:this.rowBodyCls,rowBodyColspan:e}}});Ext.define("Ext.grid.feature.RowWrap",{extend:"Ext.grid.feature.Feature",alias:"feature.rowwrap",hasFeatureEvent:false,init:function(){if(!this.disabled){this.enable()}},getRowSelector:function(){return"tr:has(> "+this.view.cellSelector+")"},enable:function(){var b=this,a=b.view;b.callParent();b.savedRowSelector=a.rowSelector;a.rowSelector=b.getRowSelector();a.getComponentLayout().getColumnSelector=b.getColumnSelector},disable:function(){var c=this,a=c.view,b=c.savedRowSelector;c.callParent();if(b){a.rowSelector=b}delete c.savedRowSelector},mutateMetaRowTpl:function(a){var b=Ext.baseCSSPrefix;a[0]=a[0].replace(b+"grid-row","");a[0]=a[0].replace("{[this.embedRowCls()]}","");a.unshift('');a.unshift('
    ');a.push("
    ");a.push("")},embedColSpan:function(){return"{colspan}"},embedFullWidth:function(){return"{fullWidth}"},getAdditionalData:function(h,p,k,m){var d=this.view.headerCt,c=d.getColumnCount(),n=d.getFullWidth(),l=d.query("gridcolumn"),q=l.length,g=0,b={colspan:c,fullWidth:n},a,j,e;for(;g{[this.printSummaryRow()]}"},getPrintData:function(a){var g=this,c=g.view.headerCt.getColumnsForTpl(),b=0,e=c.length,h=[],j=g.summaryData,d;for(;bc?1:0))}},setColumnField:function(b,d){var c=this,a=c.getEditor();a.removeField(b);c.callParent(arguments);c.getEditor().setField(b)}});Ext.define("Ext.grid.property.Grid",{extend:"Ext.grid.Panel",alias:"widget.propertygrid",alternateClassName:"Ext.grid.PropertyGrid",uses:["Ext.grid.plugin.CellEditing","Ext.grid.property.Store","Ext.grid.property.HeaderContainer","Ext.XTemplate","Ext.grid.CellEditor","Ext.form.field.Date","Ext.form.field.Text","Ext.form.field.Number","Ext.form.field.ComboBox"],valueField:"value",nameField:"name",enableColumnMove:false,columnLines:true,stripeRows:false,trackMouseOver:false,clicksToEdit:1,enableHdMenu:false,initComponent:function(){var a=this;a.addCls(Ext.baseCSSPrefix+"property-grid");a.plugins=a.plugins||[];a.plugins.push(new Ext.grid.plugin.CellEditing({clicksToEdit:a.clicksToEdit,startEdit:function(b,c){return this.self.prototype.startEdit.call(this,b,a.headerCt.child("#"+a.valueField))}}));a.selModel={selType:"cellmodel",onCellSelect:function(b){if(b.column!=1){b.column=1}return this.self.prototype.onCellSelect.call(this,b)}};a.customRenderers=a.customRenderers||{};a.customEditors=a.customEditors||{};if(!a.store){a.propStore=a.store=new Ext.grid.property.Store(a,a.source)}if(a.sortableColumns){a.store.sort("name","ASC")}a.columns=new Ext.grid.property.HeaderContainer(a,a.store);a.addEvents("beforepropertychange","propertychange");a.callParent();a.getView().walkCells=this.walkCells;a.editors={date:new Ext.grid.CellEditor({field:new Ext.form.field.Date({selectOnFocus:true})}),string:new Ext.grid.CellEditor({field:new Ext.form.field.Text({selectOnFocus:true})}),number:new Ext.grid.CellEditor({field:new Ext.form.field.Number({selectOnFocus:true})}),"boolean":new Ext.grid.CellEditor({field:new Ext.form.field.ComboBox({editable:false,store:[[true,a.headerCt.trueText],[false,a.headerCt.falseText]]})})};a.store.on("update",a.onUpdate,a)},onUpdate:function(d,a,c){var g=this,b,e;if(g.rendered&&c==Ext.data.Model.EDIT){b=a.get(g.valueField);e=a.modified.value;if(g.fireEvent("beforepropertychange",g.source,a.getId(),b,e)!==false){if(g.source){g.source[a.getId()]=b}a.commit();g.fireEvent("propertychange",g.source,a.getId(),b,e)}else{a.reject()}}},walkCells:function(h,g,d,c,a,b){if(g=="left"){g="up"}else{if(g=="right"){g="down"}}h=Ext.view.Table.prototype.walkCells.call(this,h,g,d,c,a,b);if(!h.column){h.column=1}return h},getCellEditor:function(a,c){var d=this,e=a.get(d.nameField),g=a.get(d.valueField),b=d.customEditors[e];if(b){if(!(b instanceof Ext.grid.CellEditor)){if(!(b instanceof Ext.form.field.Base)){b=Ext.ComponentManager.create(b,"textfield")}b=d.customEditors[e]=new Ext.grid.CellEditor({field:b})}}else{if(Ext.isDate(g)){b=d.editors.date}else{if(Ext.isNumber(g)){b=d.editors.number}else{if(Ext.isBoolean(g)){b=d.editors["boolean"]}else{b=d.editors.string}}}}b.editorId=e;return b},beforeDestroy:function(){var a=this;a.callParent();a.destroyEditors(a.editors);a.destroyEditors(a.customEditors);delete a.source},destroyEditors:function(b){for(var a in b){if(b.hasOwnProperty(a)){Ext.destroy(b[a])}}},setSource:function(a){this.source=a;this.propStore.setSource(a)},getSource:function(){return this.propStore.getSource()},setProperty:function(c,b,a){this.propStore.setValue(c,b,a)},removeProperty:function(a){this.propStore.remove(a)}});Ext.define("Ext.grid.property.HeaderContainer",{extend:"Ext.grid.header.Container",alternateClassName:"Ext.grid.PropertyColumnModel",nameWidth:115,nameText:"Name",valueText:"Value",dateFormat:"m/j/Y",trueText:"true",falseText:"false",nameColumnCls:Ext.baseCSSPrefix+"grid-property-name",constructor:function(b,a){var c=this;c.grid=b;c.store=a;c.callParent([{items:[{header:c.nameText,width:b.nameColumnWidth||c.nameWidth,sortable:b.sortableColumns,dataIndex:b.nameField,renderer:Ext.Function.bind(c.renderProp,c),itemId:b.nameField,menuDisabled:true,tdCls:c.nameColumnCls},{header:c.valueText,renderer:Ext.Function.bind(c.renderCell,c),getEditor:Ext.Function.bind(c.getCellEditor,c),sortable:b.sortableColumns,flex:1,fixed:true,dataIndex:b.valueField,itemId:b.valueField,menuDisabled:true}]}])},getCellEditor:function(a){return this.grid.getCellEditor(a,this)},renderProp:function(a){return this.getPropertyName(a)},renderCell:function(g,d,e){var b=this,c=b.grid.customRenderers[e.get(b.grid.nameField)],a=g;if(c){return c.apply(b,arguments)}if(Ext.isDate(g)){a=b.renderDate(g)}else{if(Ext.isBoolean(g)){a=b.renderBool(g)}}return Ext.util.Format.htmlEncode(a)},renderDate:Ext.util.Format.date,renderBool:function(a){return this[a?"trueText":"falseText"]},getPropertyName:function(b){var a=this.grid.propertyNames;return a&&a[b]?a[b]:b}});Ext.define("Ext.grid.property.Property",{extend:"Ext.data.Model",alternateClassName:"Ext.PropGridProperty",fields:[{name:"name",type:"string"},{name:"value"}],idProperty:"name"});Ext.define("Ext.grid.property.Store",{extend:"Ext.data.Store",alternateClassName:"Ext.grid.PropertyStore",sortOnLoad:false,uses:["Ext.data.reader.Reader","Ext.data.proxy.Proxy","Ext.data.ResultSet","Ext.grid.property.Property"],constructor:function(a,c){var b=this;b.grid=a;b.source=c;b.callParent([{data:c,model:Ext.grid.property.Property,proxy:b.getProxy()}])},getProxy:function(){if(!this.proxy){Ext.grid.property.Store.prototype.proxy=new Ext.data.proxy.Memory({model:Ext.grid.property.Property,reader:this.getReader()})}return this.proxy},getReader:function(){if(!this.reader){Ext.grid.property.Store.prototype.reader=new Ext.data.reader.Reader({model:Ext.grid.property.Property,buildExtractors:Ext.emptyFn,read:function(a){return this.readRecords(a)},readRecords:function(b){var d,c,a={records:[],success:true};for(c in b){if(b.hasOwnProperty(c)){d=b[c];if(this.isEditableValue(d)){a.records.push(new Ext.grid.property.Property({name:c,value:d},c))}}}a.total=a.count=a.records.length;return new Ext.data.ResultSet(a)},isEditableValue:function(a){return Ext.isPrimitive(a)||Ext.isDate(a)}})}return this.reader},setSource:function(a){var b=this;b.source=a;b.suspendEvents();b.removeAll();b.proxy.data=a;b.load();b.resumeEvents();b.fireEvent("datachanged",b);b.fireEvent("refresh",b)},getProperty:function(a){return Ext.isNumber(a)?this.getAt(a):this.getById(a)},setValue:function(e,c,a){var b=this,d=b.getRec(e);if(d){d.set("value",c);b.source[e]=c}else{if(a){b.source[e]=c;d=new Ext.grid.property.Property({name:e,value:c},e);b.add(d)}}},remove:function(b){var a=this.getRec(b);if(a){this.callParent([a]);delete this.source[b]}},getRec:function(a){return this.getById(a)},getSource:function(){return this.source}});Ext.define("Ext.layout.ClassList",(function(){var b=Ext.String.splitWords,a=Ext.Array.toMap;return{dirty:false,constructor:function(c){this.owner=c;this.map=a(this.classes=b(c.el.className))},add:function(c){var d=this;if(!d.map[c]){d.map[c]=true;d.classes.push(c);if(!d.dirty){d.dirty=true;d.owner.markDirty()}}},addMany:function(c){Ext.each(b(c),this.add,this)},contains:function(c){return this.map[c]},flush:function(){this.owner.el.className=this.classes.join(" ");this.dirty=false},remove:function(c){var d=this;if(d.map[c]){delete d.map[c];d.classes=Ext.Array.filter(d.classes,function(e){return e!=c});if(!d.dirty){d.dirty=true;d.owner.markDirty()}}},removeMany:function(d){var e=this,c=a(b(d));e.classes=Ext.Array.filter(e.classes,function(g){if(!c[g]){return true}delete e.map[g];if(!e.dirty){e.dirty=true;e.owner.markDirty()}return false})}}}()));Ext.define("Ext.util.Queue",{constructor:function(){this.clear()},add:function(c){var b=this,a=b.getKey(c);if(!b.map[a]){++b.length;b.items.push(c);b.map[a]=c}return c},clear:function(){var b=this,a=b.items;b.items=[];b.map={};b.length=0;return a},contains:function(b){var a=this.getKey(b);return this.map.hasOwnProperty(a)},getCount:function(){return this.length},getKey:function(a){return a.id},remove:function(e){var d=this,c=d.getKey(e),a=d.items,b;if(d.map[c]){b=Ext.Array.indexOf(a,e);Ext.Array.erase(a,b,1);delete d.map[c];--d.length}return e}});Ext.define("Ext.layout.ContextItem",{requires:["Ext.layout.ClassList"],heightModel:null,widthModel:null,sizeModel:null,boxChildren:null,boxParent:null,children:[],dirty:null,dirtyCount:0,hasRawContent:true,isContextItem:true,isTopLevel:false,consumersContentHeight:0,consumersContentWidth:0,consumersContainerHeight:0,consumersContainerWidth:0,consumersHeight:0,consumersWidth:0,ownerCtContext:null,remainingChildLayouts:0,remainingComponentChildLayouts:0,remainingContainerChildLayouts:0,props:null,state:null,wrapsComponent:false,constructor:function(b){var g=this,e,d,a,c,h;Ext.apply(g,b);e=g.el;g.id=e.id;g.lastBox=e.lastBox;g.flushedProps={};g.props={};g.styles={};h=g.target;if(h.isComponent){g.wrapsComponent=true;d=h.ownerCt;if(d&&(a=g.context.items[d.el.id])){g.ownerCtContext=a}g.sizeModel=c=h.getSizeModel(a&&a.widthModel.pairsByHeightOrdinal[a.heightModel.ordinal]);g.widthModel=c.width;g.heightModel=c.height}},init:function(j,c){var s=this,a=s.props,d=s.dirty,l=s.ownerCtContext,p=s.target.ownerLayout,h=!s.state,t=j||h,e,o,m,q,b,u,v=s.heightModel,g=s.widthModel,k,r;s.dirty=s.invalid=false;s.props={};if(s.boxChildren){s.boxChildren.length=0}if(!h){s.clearAllBlocks("blocks");s.clearAllBlocks("domBlocks")}if(!s.wrapsComponent){return t}u=s.target;s.state={};if(h){if(u.beforeLayout){u.beforeLayout()}if(!l&&(q=u.ownerCt)){l=s.context.items[q.el.id]}if(l){s.ownerCtContext=l;s.isBoxParent=u.ownerLayout.isItemBoxParent(s)}else{s.isTopLevel=true}s.frameBodyContext=s.getEl("frameBody")}else{l=s.ownerCtContext;s.isTopLevel=!l;e=s.children;for(o=0,m=e.length;o0);if(j){s.widthModel=s.heightModel=null;b=u.getSizeModel(l&&l.widthModel.pairsByHeightOrdinal[l.heightModel.ordinal]);if(h){s.sizeModel=b}s.widthModel=b.width;s.heightModel=b.height}else{if(a){s.recoverProp("x",a,d);s.recoverProp("y",a,d);if(s.widthModel.calculated){s.recoverProp("width",a,d)}if(s.heightModel.calculated){s.recoverProp("height",a,d)}}}if(a&&p&&p.manageMargins){s.recoverProp("margin-top",a,d);s.recoverProp("margin-right",a,d);s.recoverProp("margin-bottom",a,d);s.recoverProp("margin-left",a,d)}if(c){k=c.heightModel;r=c.widthModel;if(r&&k&&g&&v){if(g.shrinkWrap&&v.shrinkWrap){if(r.constrainedMax&&k.constrainedMin){k=null}}}if(r){s.widthModel=r}if(k){s.heightModel=k}if(c.state){Ext.apply(s.state,c.state)}}return t},initContinue:function(d){var e=this,c=e.ownerCtContext,b=e.widthModel,a;if(d){if(c&&b.shrinkWrap){a=c.isBoxParent?c:c.boxParent;if(a){a.addBoxChild(e)}}else{if(b.natural){e.boxParent=c}}}return d},initDone:function(b,g,a,h){var d=this,c=d.props,e=d.state;if(g){c.componentChildrenDone=true}if(a){c.containerChildrenDone=true}if(h){c.containerLayoutDone=true}if(d.boxChildren&&d.boxChildren.length&&d.widthModel.shrinkWrap){d.el.setWidth(10000);e.blocks=(e.blocks||0)+1}},initAnimation:function(){var b=this,c=b.target,a=b.ownerCtContext;if(a&&a.isTopLevel){b.animatePolicy=c.ownerLayout.getAnimatePolicy(b)}else{if(!a&&c.isCollapsingOrExpanding&&c.animCollapse){b.animatePolicy=c.componentLayout.getAnimatePolicy(b)}}if(b.animatePolicy){b.context.queueAnimation(b)}},noFraming:{left:0,top:0,right:0,bottom:0,width:0,height:0},addCls:function(a){this.getClassList().addMany(a)},removeCls:function(a){this.getClassList().removeMany(a)},addBlock:function(b,d,e){var c=this,g=c[b]||(c[b]={}),a=g[e]||(g[e]={});if(!a[d.id]){a[d.id]=d;++d.blockCount;++c.context.blockCount}},addBoxChild:function(d){var c=this,b,a=d.widthModel;d.boxParent=this;d.measuresBox=a.shrinkWrap?d.hasRawContent:a.natural;if(d.measuresBox){b=c.boxChildren;if(b){b.push(d)}else{c.boxChildren=[d]}}},addTrigger:function(g,h){var e=this,a=h?"domTriggers":"triggers",i=e[a]||(e[a]={}),b=e.context,d=b.currentLayout,c=i[g]||(i[g]={});if(!c[d.id]){c[d.id]=d;++d.triggerCount;c=b.triggers[h?"dom":"data"];(c[d.id]||(c[d.id]=[])).push({item:this,prop:g});if(e.props[g]!==undefined){if(!h||!(e.dirty&&(g in e.dirty))){++d.firedTriggers}}}},boxChildMeasured:function(){var b=this,c=b.state,a=(c.boxesMeasured=(c.boxesMeasured||0)+1);if(a==b.boxChildren.length){c.clearBoxWidth=1;++b.context.progressCount;b.markDirty()}},borderNames:["border-top-width","border-right-width","border-bottom-width","border-left-width"],marginNames:["margin-top","margin-right","margin-bottom","margin-left"],paddingNames:["padding-top","padding-right","padding-bottom","padding-left"],trblNames:["top","right","bottom","left"],cacheMissHandlers:{borderInfo:function(a){var b=a.getStyles(a.borderNames,a.trblNames);b.width=b.left+b.right;b.height=b.top+b.bottom;return b},marginInfo:function(a){var b=a.getStyles(a.marginNames,a.trblNames);b.width=b.left+b.right;b.height=b.top+b.bottom;return b},paddingInfo:function(b){var a=b.frameBodyContext||b,c=a.getStyles(b.paddingNames,b.trblNames);c.width=c.left+c.right;c.height=c.top+c.bottom;return c}},checkCache:function(a){return this.cacheMissHandlers[a](this)},clearAllBlocks:function(a){var c=this[a],b;if(c){for(b in c){this.clearBlocks(a,b)}}},clearBlocks:function(c,g){var h=this[c],b=h&&h[g],d,e,a;if(b){delete h[g];d=this.context;for(a in b){e=b[a];--d.blockCount;if(!--e.blockCount&&!e.pending&&!e.done){d.queueLayout(e)}}}},block:function(a,b){this.addBlock("blocks",a,b)},domBlock:function(a,b){this.addBlock("domBlocks",a,b)},fireTriggers:function(b,g){var h=this[b],d=h&&h[g],c=this.context,e,a;if(d){for(a in d){e=d[a];++e.firedTriggers;if(!e.done&&!e.blockCount&&!e.pending){c.queueLayout(e)}}}},flush:function(){var b=this,a=b.dirty,c=b.state,d=b.el;b.dirtyCount=0;if(b.classList&&b.classList.dirty){b.classList.flush()}if("attributes" in b){d.set(b.attributes);delete b.attributes}if("innerHTML" in b){d.innerHTML=b.innerHTML;delete b.innerHTML}if(c&&c.clearBoxWidth){c.clearBoxWidth=0;b.el.setStyle("width",null);if(!--c.blocks){b.context.queueItemLayouts(b)}}if(a){delete b.dirty;b.writeProps(a,true)}},flushAnimations:function(){var o=this,c=o.lastBox,l,n,e,h,g,d,i,m,k,a,b;if(c){l=o.target;n=l.layout&&l.layout.animate;if(n){e=Ext.isNumber(n)?n:n.duration}h=Ext.Object.getKeys(o.animatePolicy);g=Ext.apply({},{from:{},to:{},duration:e||Ext.fx.Anim.prototype.duration},n);for(d=0,i=0,m=h.length;i0||p>0)){if(!C.frameBodyContext){z=C.paddingInfo.width;o=C.paddingInfo.height}if(t){t=v(parseInt(t,10)-(C.borderInfo.width+z),0);i.width=t+"px";++h}if(p){p=v(parseInt(p,10)-(C.borderInfo.height+o),0);i.height=p+"px";++h}}if(C.wrapsComponent&&Ext.isIE9&&Ext.isStrict){if((g=t!==undefined&&C.hasOverflowY)||(a=p!==undefined&&C.hasOverflowX)){s=C.isAbsolute;if(s===undefined){s=false;q=C.target.getTargetEl();w=q.getStyle("position");if(w=="absolute"){w=q.getStyle("box-sizing");s=(w=="border-box")}C.isAbsolute=s}if(s){u=Ext.getScrollbarSize();if(g){t=parseInt(t,10)+u.width;i.width=t+"px";++h}if(a){p=parseInt(p,10)+u.height;i.height=p+"px";++h}}}}if(h){c.setStyle(i)}}},function(){var c={dom:true,parseInt:true,suffix:"px"},b={dom:true},a={dom:false};this.prototype.styleInfo={childrenDone:a,componentChildrenDone:a,containerChildrenDone:a,containerLayoutDone:a,displayed:a,done:a,x:a,y:a,columnWidthsDone:a,left:c,top:c,right:c,bottom:c,width:c,height:c,"border-top-width":c,"border-right-width":c,"border-bottom-width":c,"border-left-width":c,"margin-top":c,"margin-right":c,"margin-bottom":c,"margin-left":c,"padding-top":c,"padding-right":c,"padding-bottom":c,"padding-left":c,"line-height":b,display:b}});Ext.define("Ext.layout.Context",{requires:["Ext.util.Queue","Ext.layout.ContextItem","Ext.layout.Layout","Ext.fx.Anim","Ext.fx.Manager"],remainingLayouts:0,state:0,constructor:function(a){var b=this;Ext.apply(b,a);b.items={};b.layouts={};b.blockCount=0;b.cycleCount=0;b.flushCount=0;b.calcCount=0;b.animateQueue=b.newQueue();b.completionQueue=b.newQueue();b.finalizeQueue=b.newQueue();b.finishQueue=b.newQueue();b.flushQueue=b.newQueue();b.invalidateData={};b.layoutQueue=b.newQueue();b.invalidQueue=[];b.triggers={data:{},dom:{}}},callLayout:function(b,a){this.currentLayout=b;b[a](this.getCmp(b.owner))},cancelComponent:function(j,a,m){var p=this,h=j,l=!j.isComponent,b=l?h.length:1,d,c,o,n,g,s,q,r,t,e;for(d=0;d0},runLayout:function(b){var a=this,c=a.getCmp(b.owner);b.pending=false;if(c.state.blocks){return}b.done=true;++b.calcCount;++a.calcCount;b.calculate(c);if(b.done){a.layoutDone(b);if(b.completeLayout){a.queueCompletion(b)}if(b.finalizeLayout){a.queueFinalize(b)}}else{if(!b.pending&&!b.invalid&&!(b.blockCount+b.triggerCount-b.firedTriggers)){a.queueLayout(b)}}},setItemSize:function(h,g,b){var d=h,a=1,c,e;if(h.isComposite){d=h.elements;a=d.length;h=d[0]}else{if(!h.dom&&!h.el){a=d.length;h=d[0]}}for(e=0;epanel:not([collapsed])");g=c.length;for(d=0;dpanel:not([collapsed])");if(c.length===1){g.expand()}}else{if(g){g.expand()}}a.deferLayouts=b;e.processing=false}},onComponentShow:function(a){this.onComponentExpand(a)}});Ext.define("Ext.resizer.Splitter",{extend:"Ext.Component",requires:["Ext.XTemplate"],uses:["Ext.resizer.SplitterTracker"],alias:"widget.splitter",childEls:["collapseEl"],renderTpl:['','
     
    ',"
    "],baseCls:Ext.baseCSSPrefix+"splitter",collapsedClsInternal:Ext.baseCSSPrefix+"splitter-collapsed",canResize:true,collapsible:false,collapseOnDblClick:true,defaultSplitMin:40,defaultSplitMax:1000,collapseTarget:"next",horizontal:false,vertical:false,getTrackerConfig:function(){return{xclass:"Ext.resizer.SplitterTracker",el:this.el,splitter:this}},beforeRender:function(){var d=this,e=d.getCollapseTarget(),g=d.getCollapseDirection(),c=d.vertical,b=c?"width":"height",h=c?"height":"width",a;d.callParent();if(!d.hasOwnProperty(h)){d[h]="100%"}if(!d.hasOwnProperty(b)){d[b]=5}if(e.collapsed){d.addCls(d.collapsedClsInternal)}a=d.baseCls+"-"+d.orientation;d.addCls(a);if(!d.canResize){d.addCls(a+"-noresize")}Ext.applyIf(d.renderData,{collapseDir:g,collapsible:d.collapsible||e.collapsible})},onRender:function(){var a=this;a.callParent(arguments);if(a.performCollapse!==false){if(a.renderData.collapsible){a.mon(a.collapseEl,"click",a.toggleTargetCmp,a)}if(a.collapseOnDblClick){a.mon(a.el,"dblclick",a.toggleTargetCmp,a)}}a.mon(a.getCollapseTarget(),{collapse:a.onTargetCollapse,expand:a.onTargetExpand,scope:a});a.el.unselectable();if(a.canResize){a.tracker=Ext.create(a.getTrackerConfig());a.relayEvents(a.tracker,["beforedragstart","dragstart","dragend"])}},getCollapseDirection:function(){var g=this,c=g.collapseDirection,e,a,b,d;if(!c){e=g.collapseTarget;if(e.isComponent){c=e.collapseDirection}if(!c){d=g.ownerCt.layout.type;if(e.isComponent){b=g.ownerCt.items;a=Number(b.indexOf(e)==b.indexOf(g)-1)<<1|Number(d=="hbox")}else{a=Number(g.collapseTarget=="prev")<<1|Number(d=="hbox")}c=["bottom","right","top","left"][a]}g.collapseDirection=c}g.orientation=(c=="top"||c=="bottom")?"horizontal":"vertical";g[g.orientation]=true;return c},getCollapseTarget:function(){var a=this;return a.collapseTarget.isComponent?a.collapseTarget:a.collapseTarget=="prev"?a.previousSibling():a.nextSibling()},onTargetCollapse:function(a){this.el.addCls([this.collapsedClsInternal,this.collapsedCls])},onTargetExpand:function(a){this.el.removeCls([this.collapsedClsInternal,this.collapsedCls])},toggleTargetCmp:function(d,b){var c=this.getCollapseTarget(),g=c.placeholder,a;if(g&&!g.hidden){a=true}else{a=!c.hidden}if(a){if(c.collapsed){c.expand()}else{if(c.collapseDirection){c.collapse()}else{c.collapse(this.renderData.collapseDir)}}}},setSize:function(){var a=this;a.callParent(arguments);if(Ext.isIE&&a.el){a.el.repaint()}},beforeDestroy:function(){Ext.destroy(this.tracker);this.callParent()}});Ext.define("Ext.resizer.BorderSplitter",{extend:"Ext.resizer.Splitter",uses:["Ext.resizer.BorderSplitterTracker"],alias:"widget.bordersplitter",collapseTarget:null,getTrackerConfig:function(){var a=this.callParent();a.xclass="Ext.resizer.BorderSplitterTracker";return a}});Ext.define("Ext.layout.container.Border",{alias:"layout.border",extend:"Ext.layout.container.Container",requires:["Ext.resizer.BorderSplitter","Ext.Component","Ext.fx.Anim"],alternateClassName:"Ext.layout.BorderLayout",targetCls:Ext.baseCSSPrefix+"border-layout-ct",itemCls:[Ext.baseCSSPrefix+"border-item",Ext.baseCSSPrefix+"box-item"],type:"border",padding:undefined,percentageRe:/(\d+)%/,axisProps:{horz:{borderBegin:"west",borderEnd:"east",horizontal:true,posProp:"x",sizeProp:"width",sizePropCap:"Width"},vert:{borderBegin:"north",borderEnd:"south",horizontal:false,posProp:"y",sizeProp:"height",sizePropCap:"Height"}},centerRegion:null,collapseDirections:{north:"top",south:"bottom",east:"right",west:"left"},manageMargins:true,panelCollapseAnimate:true,panelCollapseMode:"placeholder",regionWeights:{north:20,south:10,center:0,west:-10,east:-20},beginAxis:function(m,b,w){var u=this,c=u.axisProps[w],r=!c.horizontal,l=c.sizeProp,p=0,a=m.childItems,g=a.length,t,q,o,h,s,e,k,n,d,v,j;for(q=0;q',"{%this.renderBody(out,values)%}",'
    ',"","{%this.renderPadder(out,values)%}"],getItemSizePolicy:function(a){if(a.columnWidth){return this.columnWidthSizePolicy}return this.autoSizePolicy},beginLayout:function(){this.callParent(arguments);this.innerCt.dom.style.width=""},calculate:function(c){var a=this,d=a.getContainerSize(c),b=c.state;if(b.calculatedColumns||(b.calculatedColumns=a.calculateColumns(c))){if(a.calculateHeights(c)){a.calculateOverflow(c,d);return}}a.done=false},calculateColumns:function(d){var m=this,a=m.getContainerSize(d),o=d.getEl("innerCt",m),l=d.childItems,j=l.length,b=0,g,n,e,c,h,k;if(!d.heightModel.shrinkWrap&&!d.targetContext.hasProp("height")){return false}if(!a.gotWidth){d.targetContext.block(m,"width");g=true}else{n=a.width;o.setWidth(n)}for(e=0;e',renderTpl:['',"{%this.renderBody(out,values)%}","
    ","{%this.renderPadder(out,values)%}"],getRenderData:function(){var a=this.callParent();a.tableCls=this.tableCls;return a},calculate:function(e){var d=this,h=d.getContainerSize(e,true),a,g,b=0,c;if(h.gotWidth){this.callParent(arguments);a=d.formTable.dom.offsetWidth;g=e.childItems;for(c=g.length;b',"{text}","",'target="{hrefTarget}" hidefocus="true" unselectable="on">','','style="margin-right: 17px;" >{text}','',"",""],maskOnDisable:false,activate:function(){var a=this;if(!a.activated&&a.canActivate&&a.rendered&&!a.isDisabled()&&a.isVisible()){a.el.addCls(a.activeCls);a.focus();a.activated=true;a.fireEvent("activate",a)}},getFocusEl:function(){return this.itemEl},deactivate:function(){var a=this;if(a.activated){a.el.removeCls(a.activeCls);a.blur();a.hideMenu();a.activated=false;a.fireEvent("deactivate",a)}},deferExpandMenu:function(){var a=this;if(a.activated&&(!a.menu.rendered||!a.menu.isVisible())){a.parentMenu.activeChild=a.menu;a.menu.parentItem=a;a.menu.parentMenu=a.menu.ownerCt=a.parentMenu;a.menu.showBy(a,a.menuAlign)}},deferHideMenu:function(){if(this.menu.isVisible()){this.menu.hide()}},cancelDeferHide:function(){clearTimeout(this.hideMenuTimer)},deferHideParentMenus:function(){var a;Ext.menu.Manager.hideAll();if(!Ext.Element.getActiveElement()){a=this.up(":not([hidden])");if(a){a.focus()}}},expandMenu:function(a){var b=this;if(b.menu){b.cancelDeferHide();if(a===0){b.deferExpandMenu()}else{b.expandMenuTimer=Ext.defer(b.deferExpandMenu,Ext.isNumber(a)?a:b.menuExpandDelay,b)}}},getRefItems:function(a){var c=this.menu,b;if(c){b=c.getRefItems(a);b.unshift(c)}return b||[]},hideMenu:function(a){var b=this;if(b.menu){clearTimeout(b.expandMenuTimer);b.hideMenuTimer=Ext.defer(b.deferHideMenu,Ext.isNumber(a)?a:b.menuHideDelay,b)}},initComponent:function(){var b=this,c=Ext.baseCSSPrefix,a=[c+"menu-item"],d;b.addEvents("activate","click","deactivate");if(b.plain){a.push(c+"menu-item-plain")}if(b.cls){a.push(b.cls)}b.cls=a.join(" ");if(b.menu){d=b.menu;delete b.menu;b.setMenu(d)}b.callParent(arguments)},onClick:function(b){var a=this;if(!a.href){b.stopEvent()}if(a.disabled){return}if(a.hideOnClick){a.deferHideParentMenusTimer=Ext.defer(a.deferHideParentMenus,a.clickHideDelay,a)}Ext.callback(a.handler,a.scope||a,[a,b]);a.fireEvent("click",a,b);if(!a.hideOnClick){a.focus()}},onRemoved:function(){var a=this;if(a.activated&&a.parentMenu.activeItem===a){a.parentMenu.deactivateActiveItem()}a.callParent(arguments);delete a.parentMenu;delete a.ownerButton},beforeDestroy:function(){var a=this;if(a.rendered){a.clearTip()}a.callParent()},onDestroy:function(){var a=this;clearTimeout(a.expandMenuTimer);a.cancelDeferHide();clearTimeout(a.deferHideParentMenusTimer);a.setMenu(null);a.callParent(arguments)},beforeRender:function(){var b=this,d=Ext.BLANK_IMAGE_URL,a,c;b.callParent();if(b.iconAlign==="right"){a=b.checkChangeDisabled?b.disabledCls:"";c=Ext.baseCSSPrefix+"menu-item-icon-right "+b.iconCls}else{a=b.iconCls+(b.checkChangeDisabled?" "+b.disabledCls:"");c=b.menu?b.arrowCls:""}Ext.applyIf(b.renderData,{href:b.href||"#",hrefTarget:b.hrefTarget,icon:b.icon||d,iconCls:a,plain:b.plain,text:b.text,arrowCls:c,blank:d})},onRender:function(){var a=this;a.callParent(arguments);if(a.tooltip){a.setTooltip(a.tooltip,true)}},setMenu:function(e,d){var c=this,b=c.menu,a=c.arrowEl;if(b){delete b.parentItem;delete b.parentMenu;delete b.ownerCt;delete b.ownerItem;if(d===true||(d!==false&&c.destroyMenu)){Ext.destroy(b)}}if(e){c.menu=Ext.menu.Manager.get(e);c.menu.ownerItem=c}else{c.menu=null}if(c.rendered&&!c.destroying&&a){a[c.menu?"addCls":"removeCls"](c.arrowCls)}},setHandler:function(b,a){this.handler=b||null;this.scope=a},setIcon:function(b){var a=this.iconEl;if(a){a.src=b||Ext.BLANK_IMAGE_URL}this.icon=b},setIconCls:function(b){var c=this,a=c.iconEl;if(a){if(c.iconCls){a.removeCls(c.iconCls)}if(b){a.addCls(b)}}c.iconCls=b},setText:function(c){var b=this,a=b.textEl||b.el;b.text=c;if(b.rendered){a.update(c||"");b.ownerCt.updateLayout()}},getTipAttr:function(){return this.tooltipType=="qtip"?"data-qtip":"title"},clearTip:function(){if(Ext.isObject(this.tooltip)){Ext.tip.QuickTipManager.unregister(this.itemEl)}},setTooltip:function(c,a){var b=this;if(b.rendered){if(!a){b.clearTip()}if(Ext.isObject(c)){Ext.tip.QuickTipManager.register(Ext.apply({target:b.itemEl.id},c));b.tooltip=c}else{b.itemEl.dom.setAttribute(b.getTipAttr(),c)}}else{b.tooltip=c}return b}});Ext.define("Ext.menu.CheckItem",{extend:"Ext.menu.Item",alias:"widget.menucheckitem",checkedCls:Ext.baseCSSPrefix+"menu-item-checked",uncheckedCls:Ext.baseCSSPrefix+"menu-item-unchecked",groupCls:Ext.baseCSSPrefix+"menu-group-icon",hideOnClick:false,checkChangeDisabled:false,afterRender:function(){var a=this;a.callParent();a.checked=!a.checked;a.setChecked(!a.checked,true);if(a.checkChangeDisabled){a.disableCheckChange()}},initComponent:function(){var a=this;a.addEvents("beforecheckchange","checkchange");a.callParent(arguments);Ext.menu.Manager.registerCheckable(a);if(a.group){if(!a.iconCls){a.iconCls=a.groupCls}if(a.initialConfig.hideOnClick!==false){a.hideOnClick=true}}},disableCheckChange:function(){var b=this,a=b.iconEl;if(a){a.addCls(b.disabledCls)}if(!(Ext.isIE9&&Ext.isStrict)&&b.rendered){b.el.repaint()}b.checkChangeDisabled=true},enableCheckChange:function(){var b=this,a=b.iconEl;if(a){a.removeCls(b.disabledCls)}b.checkChangeDisabled=false},onClick:function(b){var a=this;if(!a.disabled&&!a.checkChangeDisabled&&!(a.checked&&a.group)){a.setChecked(!a.checked)}this.callParent([b])},onDestroy:function(){Ext.menu.Manager.unregisterCheckable(this);this.callParent(arguments)},setChecked:function(c,a){var b=this;if(b.checked!==c&&(a||b.fireEvent("beforecheckchange",b,c)!==false)){if(b.el){b.el[c?"addCls":"removeCls"](b.checkedCls)[!c?"addCls":"removeCls"](b.uncheckedCls)}b.checked=c;Ext.menu.Manager.onCheckChange(b,c);if(!a){Ext.callback(b.checkHandler,b.scope,[b,c]);b.fireEvent("checkchange",b,c)}}}});Ext.define("Ext.menu.KeyNav",{extend:"Ext.util.KeyNav",requires:["Ext.FocusManager"],constructor:function(b){var a=this;a.menu=b;a.callParent([b.el,{down:a.down,enter:a.enter,esc:a.escape,left:a.left,right:a.right,space:a.enter,tab:a.tab,up:a.up}])},down:function(b){var a=this,c=a.menu.focusedItem;if(c&&b.getKey()==Ext.EventObject.DOWN&&a.isWhitelisted(c)){return true}a.focusNextItem(1)},enter:function(b){var c=this.menu,a=c.focusedItem;if(c.activeItem){c.onClick(b)}else{if(a&&a.isFormField){return true}}},escape:function(a){Ext.menu.Manager.hideAll()},focusNextItem:function(g){var h=this.menu,b=h.items,d=h.focusedItem,c=d?b.indexOf(d):-1,a=c+g,e;while(a!=c){if(a<0){a=b.length-1}else{if(a>=b.length){a=0}}e=b.getAt(a);if(h.canActivateItem(e)){h.setActiveItem(e);break}a+=g}},isWhitelisted:function(a){return Ext.FocusManager.isWhitelisted(a)},left:function(b){var c=this.menu,d=c.focusedItem,a=c.activeItem;if(d&&this.isWhitelisted(d)){return true}c.hide();if(c.parentMenu){c.parentMenu.focus()}},right:function(c){var d=this.menu,g=d.focusedItem,a=d.activeItem,b;if(g&&this.isWhitelisted(g)){return true}if(a){b=d.activeItem.menu;if(b){a.expandMenu(0);Ext.defer(function(){b.setActiveItem(b.items.getAt(0))},25)}}},tab:function(b){var a=this;if(b.shiftKey){a.up(b)}else{a.down(b)}},up:function(b){var a=this,c=a.menu.focusedItem;if(c&&b.getKey()==Ext.EventObject.UP&&a.isWhitelisted(c)){return true}a.focusNextItem(-1)}});Ext.define("Ext.menu.Separator",{extend:"Ext.menu.Item",alias:"widget.menuseparator",canActivate:false,focusable:false,hideOnClick:false,plain:true,separatorCls:Ext.baseCSSPrefix+"menu-item-separator",text:" ",beforeRender:function(a,c){var b=this;b.callParent();b.addCls(b.separatorCls)}});Ext.define("Ext.menu.Menu",{extend:"Ext.panel.Panel",alias:"widget.menu",requires:["Ext.layout.container.Fit","Ext.layout.container.VBox","Ext.menu.CheckItem","Ext.menu.Item","Ext.menu.KeyNav","Ext.menu.Manager","Ext.menu.Separator"],enableKeyNav:true,allowOtherMenus:false,ariaRole:"menu",defaultAlign:"tl-bl?",floating:true,constrain:true,hidden:true,hideMode:"visibility",ignoreParentClicks:false,isMenu:true,showSeparator:true,minWidth:undefined,defaultMinWidth:120,initComponent:function(){var b=this,d=Ext.baseCSSPrefix,a=[d+"menu"],c=b.bodyCls?[b.bodyCls]:[],e=b.floating!==false;b.addEvents("click","mouseenter","mouseleave","mouseover");Ext.menu.Manager.register(b);if(b.plain){a.push(d+"menu-plain")}b.cls=a.join(" ");c.unshift(d+"menu-body");b.bodyCls=c.join(" ");if(!b.layout){b.layout={type:"vbox",align:"stretchmax",overflowHandler:"Scroller"}}if(e&&b.minWidth===undefined){b.minWidth=b.defaultMinWidth}if(!e&&b.initialConfig.hidden!==true){b.hidden=false}b.callParent(arguments);b.on("beforeshow",function(){var g=!!b.items.length;if(g&&b.rendered){b.el.setStyle("visibility",null)}return g})},beforeRender:function(){this.callParent(arguments);if(!this.getSizeModel().width.shrinkWrap){this.layout.align="stretch"}},onBoxReady:function(){var a=this,b;a.callParent(arguments);if(a.showSeparator){b={cls:Ext.baseCSSPrefix+"menu-icon-separator",html:" "};if((!Ext.isStrict&&Ext.isIE)||Ext.isIE6){b.style="height:"+a.el.getHeight()+"px"}a.iconSepEl=a.layout.getElementTarget().insertFirst(b)}a.mon(a.el,{click:a.onClick,mouseover:a.onMouseOver,scope:a});a.mouseMonitor=a.el.monitorMouseLeave(100,a.onMouseLeave,a);if(a.enableKeyNav){a.keyNav=new Ext.menu.KeyNav(a)}},getBubbleTarget:function(){return this.parentMenu||this.ownerButton||this.callParent(arguments)},canActivateItem:function(a){return a&&!a.isDisabled()&&a.isVisible()&&(a.canActivate||a.getXTypes().indexOf("menuitem")<0)},deactivateActiveItem:function(b){var c=this,d=c.activeItem,a=c.focusedItem;if(d){d.deactivate();if(!d.activated){delete c.activeItem}}if(a&&b){a.blur();delete c.focusedItem}},getFocusEl:function(){return this.focusedItem||this.el},hide:function(){this.deactivateActiveItem(true);this.callParent(arguments)},getItemFromEvent:function(a){return this.getChildByElement(a.getTarget())},lookupComponent:function(b){var a=this;if(typeof b=="string"){b=a.lookupItemFromString(b)}else{if(Ext.isObject(b)){b=a.lookupItemFromObject(b)}}b.minWidth=b.minWidth||a.minWidth;return b},lookupItemFromObject:function(c){var b=this,d=Ext.baseCSSPrefix,a;if(!c.isComponent){if(!c.xtype){c=Ext.create("Ext.menu."+(Ext.isBoolean(c.checked)?"Check":"")+"Item",c)}else{c=Ext.ComponentManager.create(c,c.xtype)}}if(c.isMenuItem){c.parentMenu=b}if(!c.isMenuItem&&!c.dock){a=[d+"menu-item",d+"menu-item-cmp"];if(!b.plain&&(c.indent===true||c.iconCls==="no-icon")){a.push(d+"menu-item-indent")}if(c.rendered){c.el.addCls(a)}else{c.cls=(c.cls?c.cls:"")+" "+a.join(" ")}}return c},lookupItemFromString:function(a){return(a=="separator"||a=="-")?new Ext.menu.Separator():new Ext.menu.Item({canActivate:false,hideOnClick:false,plain:true,text:a})},onClick:function(c){var b=this,a;if(b.disabled){c.stopEvent();return}a=(c.type==="click")?b.getItemFromEvent(c):b.activeItem;if(a&&a.isMenuItem){if(!a.menu||!b.ignoreParentClicks){a.onClick(c)}else{c.stopEvent()}}if(!a||a.disabled){a=undefined}b.fireEvent("click",b,a,c)},onDestroy:function(){var a=this;Ext.menu.Manager.unregister(a);delete a.parentMenu;delete a.ownerButton;if(a.rendered){a.el.un(a.mouseMonitor);Ext.destroy(a.keyNav);delete a.keyNav}a.callParent(arguments)},onMouseLeave:function(b){var a=this;a.deactivateActiveItem();if(a.disabled){return}a.fireEvent("mouseleave",a,b)},onMouseOver:function(h){var g=this,i=h.getRelatedTarget(),b=!g.el.contains(i),d=g.getItemFromEvent(h),c=g.parentMenu,a=g.parentItem;if(b&&c){c.setActiveItem(a);a.cancelDeferHide();c.mouseMonitor.mouseenter()}if(g.disabled){return}if(d&&!d.activated){g.setActiveItem(d);if(d.activated&&d.expandMenu){d.expandMenu()}}if(b){g.fireEvent("mouseenter",g,h)}g.fireEvent("mouseover",g,d,h)},setActiveItem:function(b){var a=this;if(b&&(b!=a.activeItem)){a.deactivateActiveItem();if(a.canActivateItem(b)){if(b.activate){b.activate();if(b.activated){a.activeItem=b;a.focusedItem=b;a.focus()}}else{b.focus();a.focusedItem=b}}b.el.scrollIntoView(a.layout.getRenderTarget())}},showBy:function(b,d,c){var a=this;if(a.floating&&b){a.show();a.setPagePosition(a.el.getAlignToXY(b.el||b,d||a.defaultAlign,c));a.setVerticalPosition()}return a},show:function(){var d=this,c,b,a,e=d.maxHeight;if(!d.rendered){d.doAutoRender()}if(d.floating){c=Ext.fly(d.el.getScopeParent());b=c.getViewSize().height;d.maxHeight=Math.min(e||b,b)}a=d.callParent(arguments);d.maxHeight=e;return a},afterComponentLayout:function(c,a,b,e){var d=this;d.callParent(arguments);if(d.showSeparator){d.iconSepEl.setHeight(d.componentLayout.lastComponentSize.contentHeight)}},setVerticalPosition:function(){var d=this,g,e=d.el.getY(),h=e,j=d.getHeight(),b=Ext.Element.getViewportHeight().height,c=Ext.fly(d.el.getScopeParent()),a=c.getViewSize().height,i=e-c.getScroll().top;c=null;if(d.floating){g=d.maxHeight?d.maxHeight:a-i;if(j>a){h=e-i}else{if(gb){h=b-j}}}}d.el.setY(h)}});Ext.define("Ext.menu.ColorPicker",{extend:"Ext.menu.Menu",alias:"widget.colormenu",requires:["Ext.picker.Color"],hideOnClick:true,pickerId:null,initComponent:function(){var b=this,a=Ext.apply({},b.initialConfig);delete a.listeners;Ext.apply(b,{plain:true,showSeparator:false,items:Ext.applyIf({cls:Ext.baseCSSPrefix+"menu-color-item",id:b.pickerId,xtype:"colorpicker"},a)});b.callParent(arguments);b.picker=b.down("colorpicker");b.relayEvents(b.picker,["select"]);if(b.hideOnClick){b.on("select",b.hidePickerOnSelect,b)}},hidePickerOnSelect:function(){Ext.menu.Manager.hideAll()}});Ext.define("Ext.menu.DatePicker",{extend:"Ext.menu.Menu",alias:"widget.datemenu",requires:["Ext.picker.Date"],hideOnClick:true,pickerId:null,initComponent:function(){var b=this,a=Ext.apply({},b.initialConfig);delete a.listeners;Ext.apply(b,{showSeparator:false,plain:true,border:false,bodyPadding:0,items:Ext.applyIf({cls:Ext.baseCSSPrefix+"menu-date-item",id:b.pickerId,xtype:"datepicker"},a)});b.callParent(arguments);b.picker=b.down("datepicker");b.relayEvents(b.picker,["select"]);if(b.hideOnClick){b.on("select",b.hidePickerOnSelect,b)}},hidePickerOnSelect:function(){Ext.menu.Manager.hideAll()}});Ext.define("Ext.panel.Tool",{extend:"Ext.Component",requires:["Ext.tip.QuickTipManager"],alias:"widget.tool",baseCls:Ext.baseCSSPrefix+"tool",disabledCls:Ext.baseCSSPrefix+"tool-disabled",toolPressedCls:Ext.baseCSSPrefix+"tool-pressed",toolOverCls:Ext.baseCSSPrefix+"tool-over",ariaRole:"button",childEls:["toolEl"],renderTpl:[''],tooltipType:"qtip",stopEvent:true,height:15,width:15,initComponent:function(){var a=this;a.addEvents("click");a.type=a.type||a.id;Ext.applyIf(a.renderData,{baseCls:a.baseCls,blank:Ext.BLANK_IMAGE_URL,type:a.type});a.tooltip=a.tooltip||a.qtip;a.callParent();a.on({element:"toolEl",click:a.onClick,mousedown:a.onMouseDown,mouseover:a.onMouseOver,mouseout:a.onMouseOut,scope:a})},afterRender:function(){var b=this,a;b.callParent(arguments);if(b.tooltip){if(Ext.isObject(b.tooltip)){Ext.tip.QuickTipManager.register(Ext.apply({target:b.id},b.tooltip))}else{a=b.tooltipType=="qtip"?"data-qtip":"title";b.toolEl.dom.setAttribute(a,b.tooltip)}}},getFocusEl:function(){return this.el},setType:function(a){var b=this;b.type=a;if(b.rendered){b.toolEl.dom.className=b.baseCls+"-"+a}return b},bindTo:function(a){this.owner=a},onClick:function(d,c){var b=this,a;if(b.disabled){return false}a=b.owner||b.ownerCt;b.el.removeCls(b.toolPressedCls);b.el.removeCls(b.toolOverCls);if(b.stopEvent!==false){d.stopEvent()}Ext.callback(b.handler,b.scope||b,[d,c,a,b]);b.fireEvent("click",b,d);return true},onDestroy:function(){if(Ext.isObject(this.tooltip)){Ext.tip.QuickTipManager.unregister(this.id)}this.callParent()},onMouseDown:function(){if(this.disabled){return false}this.el.addCls(this.toolPressedCls)},onMouseOver:function(){if(this.disabled){return false}this.el.addCls(this.toolOverCls)},onMouseOut:function(){this.el.removeCls(this.toolOverCls)}});Ext.define("Ext.resizer.SplitterTracker",{extend:"Ext.dd.DragTracker",requires:["Ext.util.Region"],enabled:true,overlayCls:Ext.baseCSSPrefix+"resizable-overlay",createDragOverlay:function(){var a;a=this.overlay=Ext.getBody().createChild({cls:this.overlayCls,html:" "});a.unselectable();a.setSize(Ext.Element.getViewWidth(true),Ext.Element.getViewHeight(true));a.show()},getPrevCmp:function(){var a=this.getSplitter();return a.previousSibling()},getNextCmp:function(){var a=this.getSplitter();return a.nextSibling()},onBeforeStart:function(i){var d=this,g=d.getPrevCmp(),a=d.getNextCmp(),c=d.getSplitter().collapseEl,h=i.getTarget(),b;if(c&&h===d.getSplitter().collapseEl.dom){return false}if(a.collapsed||g.collapsed){return false}d.prevBox=g.getEl().getBox();d.nextBox=a.getEl().getBox();d.constrainTo=b=d.calculateConstrainRegion();if(!b){return false}d.createDragOverlay();return b},onStart:function(b){var a=this.getSplitter();a.addCls(a.baseCls+"-active")},calculateConstrainRegion:function(){var g=this,a=g.getSplitter(),h=a.getWidth(),i=a.defaultSplitMin,b=a.orientation,d=g.prevBox,j=g.getPrevCmp(),c=g.nextBox,e=g.getNextCmp(),l,k;if(b==="vertical"){l=new Ext.util.Region(d.y,(j.maxWidth?d.x+j.maxWidth:c.right-(e.minWidth||i))+h,d.bottom,d.x+(j.minWidth||i));k=new Ext.util.Region(c.y,c.right-(e.minWidth||i),c.bottom,(e.maxWidth?c.right-e.maxWidth:d.x+(d.minWidth||i))-h)}else{l=new Ext.util.Region(d.y+(j.minHeight||i),d.right,(j.maxHeight?d.y+j.maxHeight:c.bottom-(e.minHeight||i))+h,d.x);k=new Ext.util.Region((e.maxHeight?c.bottom-e.maxHeight:d.y+(j.minHeight||i))-h,c.right,c.bottom-(e.minHeight||i),c.x)}return l.intersect(k)},performResize:function(m,g){var o=this,a=o.getSplitter(),h=a.orientation,p=o.getPrevCmp(),n=o.getNextCmp(),b=a.ownerCt,k=b.query(">[flex]"),l=k.length,j=0,d,q,c=0;for(;jq){v=q}}if(v-m<2){return null}n=new Ext.util.Region(p,x,k,g);y.constraintAdjusters[a.collapseDirection](n,m,v,a);y.dragInfo={minRange:m,maxRange:v,targetSize:b};return n},constraintAdjusters:{left:function(c,a,b,d){c[0]=c.x=c.left=c.right+a;c.right+=b+d.getWidth()},top:function(c,a,b,d){c[1]=c.y=c.top=c.bottom+a;c.bottom+=b+d.getHeight()},bottom:function(c,a,b,d){c.bottom=c.top-a;c.top-=b+d.getHeight()},right:function(c,a,b,d){c.right=c.left-a;c.left-=b+d.getWidth()}},onBeforeStart:function(h){var k=this,b=k.splitter,a=b.collapseTarget,m=b.neighbors,d=k.getSplitter().collapseEl,j=h.getTarget(),c=m.length,g,l;if(d&&j===b.collapseEl.dom){return false}if(a.collapsed){return false}for(g=0;gc){d.minWidth=d.el.getWidth()*a}else{d.minHeight=d.el.getHeight()*c}}if(d.throttle){e=Ext.Function.createThrottled(function(){Ext.resizer.ResizeTracker.prototype.resize.apply(d,arguments)},d.throttle);d.resize=function(h,i,g){if(g){Ext.resizer.ResizeTracker.prototype.resize.apply(d,arguments)}else{e.apply(null,arguments)}}}},onBeforeStart:function(a){this.startBox=this.el.getBox()},getDynamicTarget:function(){var a=this,b=a.target;if(a.dynamic){return b}else{if(!a.proxy){a.proxy=a.createProxy(b)}}a.proxy.show();return a.proxy},createProxy:function(c){var b,a=this.proxyCls,d;if(c.isComponent){b=c.getProxy().addCls(a)}else{d=Ext.getBody();if(Ext.scopeResetCSS){d=Ext.getBody().createChild({cls:Ext.resetCls})}b=c.createProxy({tag:"div",cls:a,id:c.id+"-rzproxy"},d)}b.removeCls(Ext.baseCSSPrefix+"proxy-el");return b},onStart:function(a){this.activeResizeHandle=Ext.get(this.getDragTarget().id);if(!this.dynamic){this.resize(this.startBox,{horizontal:"none",vertical:"none"})}},onDrag:function(a){if(this.dynamic||this.proxy){this.updateDimensions(a)}},updateDimensions:function(s,m){var t=this,c=t.activeResizeHandle.region,g=t.getOffset(t.constrainTo?"dragTarget":null),k=t.startBox,h,p=0,u=0,j,q,a=0,w=0,v,n=g[0]<0?"right":"left",r=g[1]<0?"down":"up",i,b,d,o,l;switch(c){case"south":u=g[1];b=2;break;case"north":u=-g[1];w=-u;b=2;break;case"east":p=g[0];b=1;break;case"west":p=-g[0];a=-p;b=1;break;case"northeast":u=-g[1];w=-u;p=g[0];i=[k.x,k.y+k.height];b=3;break;case"southeast":u=g[1];p=g[0];i=[k.x,k.y];b=3;break;case"southwest":p=-g[0];a=-p;u=g[1];i=[k.x+k.width,k.y];b=3;break;case"northwest":u=-g[1];w=-u;p=-g[0];a=-p;i=[k.x+k.width,k.y+k.height];b=3;break}d={width:k.width+p,height:k.height+u,x:k.x+a,y:k.y+w};j=Ext.Number.snap(d.width,t.widthIncrement);q=Ext.Number.snap(d.height,t.heightIncrement);if(j!=d.width||q!=d.height){switch(c){case"northeast":d.y-=q-d.height;break;case"north":d.y-=q-d.height;break;case"southwest":d.x-=j-d.width;break;case"west":d.x-=j-d.width;break;case"northwest":d.x-=j-d.width;d.y-=q-d.height}d.width=j;d.height=q}if(d.widtht.maxWidth){d.width=Ext.Number.constrain(d.width,t.minWidth,t.maxWidth);if(a){d.x=k.x+(k.width-d.width)}}else{t.lastX=d.x}if(d.heightt.maxHeight){d.height=Ext.Number.constrain(d.height,t.minHeight,t.maxHeight);if(w){d.y=k.y+(k.height-d.height)}}else{t.lastY=d.y}if(t.preserveRatio||s.shiftKey){h=t.startBox.width/t.startBox.height;o=Math.min(Math.max(t.minHeight,d.width/h),t.maxHeight);l=Math.min(Math.max(t.minWidth,d.height*h),t.maxWidth);if(b==1){d.height=o}else{if(b==2){d.width=l}else{v=Math.abs(i[0]-this.lastXY[0])/Math.abs(i[1]-this.lastXY[1]);if(v>h){d.height=o}else{d.width=l}if(c=="northeast"){d.y=k.y-(d.height-k.height)}else{if(c=="northwest"){d.y=k.y-(d.height-k.height);d.x=k.x-(d.width-k.width)}else{if(c=="southwest"){d.x=k.x-(d.width-k.width)}}}}}}if(u===0){r="none"}if(p===0){n="none"}t.resize(d,{horizontal:n,vertical:r},m)},getResizeTarget:function(a){return a?this.target:this.getDynamicTarget()},resize:function(b,d,a){var c=this.getResizeTarget(a);if(c.isComponent){c.setSize(b.width,b.height);if(c.floating){c.setPagePosition(b.x,b.y)}}else{c.setBox(b)}c=this.originalTarget;if(c&&(this.dynamic||a)){if(c.isComponent){c.setSize(b.width,b.height);if(c.floating){c.setPagePosition(b.x,b.y)}}else{c.setBox(b)}}},onEnd:function(a){this.updateDimensions(a,true);if(this.proxy){this.proxy.hide()}}});Ext.define("Ext.resizer.Resizer",{mixins:{observable:"Ext.util.Observable"},uses:["Ext.resizer.ResizeTracker","Ext.Component"],alternateClassName:"Ext.Resizable",handleCls:Ext.baseCSSPrefix+"resizable-handle",pinnedCls:Ext.baseCSSPrefix+"resizable-pinned",overCls:Ext.baseCSSPrefix+"resizable-over",wrapCls:Ext.baseCSSPrefix+"resizable-wrap",dynamic:true,handles:"s e se",height:null,width:null,heightIncrement:0,widthIncrement:0,minHeight:20,minWidth:20,maxHeight:10000,maxWidth:10000,pinned:false,preserveRatio:false,transparent:false,possiblePositions:{n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"},constructor:function(b){var k=this,j,o,q,p=k.handles,c,n,g,d=0,m,l=[],h,a,e;k.addEvents("beforeresize","resizedrag","resize");if(Ext.isString(b)||Ext.isElement(b)||b.dom){j=b;b=arguments[1]||{};b.target=j}k.mixins.observable.constructor.call(k,b);j=k.target;if(j){if(j.isComponent){k.el=j.getEl();if(j.minWidth){k.minWidth=j.minWidth}if(j.minHeight){k.minHeight=j.minHeight}if(j.maxWidth){k.maxWidth=j.maxWidth}if(j.maxHeight){k.maxHeight=j.maxHeight}if(j.floating){if(!k.hasOwnProperty("handles")){k.handles="n ne e se s sw w nw"}}}else{k.el=k.target=Ext.get(j)}}else{k.target=k.el=Ext.get(k.el)}q=k.el.dom.tagName.toUpperCase();if(q=="TEXTAREA"||q=="IMG"||q=="TABLE"){k.originalTarget=k.target;o=k.el;e=o.getBox();k.target=k.el=k.el.wrap({cls:k.wrapCls,id:k.el.id+"-rzwrap",style:o.getStyles("margin-top","margin-bottom")});k.el.setPositioning(o.getPositioning());o.clearPositioning();k.el.setBox(e);o.setStyle("position","absolute")}k.el.position();if(k.pinned){k.el.addCls(k.pinnedCls)}k.resizeTracker=new Ext.resizer.ResizeTracker({disabled:k.disabled,target:k.target,constrainTo:k.constrainTo,overCls:k.overCls,throttle:k.throttle,originalTarget:k.originalTarget,delegate:"."+k.handleCls,dynamic:k.dynamic,preserveRatio:k.preserveRatio,heightIncrement:k.heightIncrement,widthIncrement:k.widthIncrement,minHeight:k.minHeight,maxHeight:k.maxHeight,minWidth:k.minWidth,maxWidth:k.maxWidth});k.resizeTracker.on({mousedown:k.onBeforeResize,drag:k.onResize,dragend:k.onResizeEnd,scope:k});if(k.handles=="all"){k.handles="n s e w ne nw se sw"}p=k.handles=k.handles.split(/ |\s*?[,;]\s*?/);n=k.possiblePositions;g=p.length;c=k.handleCls+" "+(k.target.isComponent?(k.target.baseCls+"-handle "):"")+k.handleCls+"-";h=Ext.isIE6?' style="height:'+k.el.getHeight()+'px"':"";for(;d")}}Ext.DomHelper.append(k.el,l.join(""));for(d=0;d-1){this.doSelect(a.view.getStore().getAt(a.row),false,b)}},onCellDeselect:function(a,b){if(a&&a.row!==undefined){this.doDeselect(a.view.getStore().getAt(a.row),b)}},onSelectChange:function(b,e,d,h){var g=this,i,c,a;if(e){i=g.nextSelection;c="select"}else{i=g.lastSelection||g.noSelection;c="deselect"}a=i.view||g.primaryView;if((d||g.fireEvent("before"+c,g,b,i.row,i.column))!==false&&h()!==false){if(e){a.onCellSelect(i);a.onCellFocus(i)}else{a.onCellDeselect(i);delete g.selection}if(!d){g.fireEvent(c,g,b,i.row,i.column)}}},onKeyTab:function(d,b){var c=this,a=c.getCurrentPosition().view.editingPlugin;if(a&&c.wasEditing){c.onEditorTab(a,d)}else{c.move(d.shiftKey?"left":"right",d)}},onEditorTab:function(b,g){var c=this,d=g.shiftKey?"left":"right",a=c.move(d,g);if(a){if(b.startEditByPosition(a)){c.wasEditing=false}else{c.wasEditing=true;if(!a.columnHeader.dataIndex){c.onEditorTab(b,g)}}}},refresh:function(){var b=this.getCurrentPosition(),a;if(b&&(a=this.store.indexOf(this.selected.last()))!==-1){b.row=a}},onColumnMove:function(d,e,b,c){var a=d.up("tablepanel");if(a){this.onViewRefresh(a.view)}},onViewRefresh:function(b){var c=this,g=c.getCurrentPosition(),e=b.headerCt,a,d;if(g&&g.view===b){a=g.record;d=g.columnHeader;if(!d.isDescendantOf(e)){d=e.queryById(d.id)||e.down('[text="'+d.text+'"]')||e.down('[dataIndex="'+d.dataIndex+'"]')}if(d&&(b.store.indexOfId(a.getId())!==-1)){c.setCurrentPosition({row:a,column:d,view:b})}}},selectByPosition:function(a){this.setCurrentPosition(a)}},function(){var a=this.prototype.Selection=function(b){this.model=b};a.prototype.setPosition=function(e,c){var d=this,b;if(arguments.length===1){if(e.view){d.view=b=e.view}c=e.column;e=e.row}if(!b){d.view=b=d.model.primaryView}if(typeof e==="number"){d.row=e;d.record=b.store.getAt(e)}else{if(e.isModel){d.record=e;d.row=b.indexOf(e)}else{if(e.tagName){d.record=b.getRecord(e);d.row=b.indexOf(d.record)}}}if(typeof c==="number"){d.column=c;d.columnHeader=b.getHeaderAtIndex(c)}else{d.columnHeader=c;d.column=c.getIndex()}return d}});Ext.define("Ext.selection.RowModel",{extend:"Ext.selection.Model",alias:"selection.rowmodel",requires:["Ext.util.KeyNav"],deltaScroll:5,enableKeyNav:true,ignoreRightMouseSelection:false,constructor:function(){this.addEvents("beforedeselect","beforeselect","deselect","select");this.views=[];this.callParent(arguments)},bindComponent:function(a){var b=this;b.views=b.views||[];b.views.push(a);b.bindStore(a.getStore(),true);a.on({itemmousedown:b.onRowMouseDown,scope:b});if(b.enableKeyNav){b.initKeyNav(a)}},initKeyNav:function(a){var b=this;if(!a.rendered){a.on("render",Ext.Function.bind(b.initKeyNav,b,[a],0),b,{single:true});return}a.el.set({tabIndex:-1});b.keyNav=new Ext.util.KeyNav({target:a,ignoreInputFields:true,eventName:"itemkeydown",processEvent:function(d,c,h,e,g){g.record=c;g.recordIndex=e;return g},up:b.onKeyUp,down:b.onKeyDown,right:b.onKeyRight,left:b.onKeyLeft,pageDown:b.onKeyPageDown,pageUp:b.onKeyPageUp,home:b.onKeyHome,end:b.onKeyEnd,space:b.onKeySpace,enter:b.onKeyEnter,scope:b})},getRowsVisible:function(){var e=false,a=this.views[0],d=a.getNode(0),b,c;if(d){b=Ext.fly(d).getHeight();c=a.el.getHeight();e=Math.floor(c/b)}return e},onKeyEnd:function(c){var b=this,a=b.store.getAt(b.store.getCount()-1);if(a){if(c.shiftKey){b.selectRange(a,b.lastFocused||0);b.setLastFocused(a)}else{if(c.ctrlKey){b.setLastFocused(a)}else{b.doSelect(a)}}}},onKeyHome:function(b){var a=this,c=a.store.getAt(0);if(c){if(b.shiftKey){a.selectRange(c,a.lastFocused||0);a.setLastFocused(c)}else{if(b.ctrlKey){a.setLastFocused(c)}else{a.doSelect(c,false)}}}},onKeyPageUp:function(g){var d=this,h=d.getRowsVisible(),b,c,a;if(h){b=g.recordIndex;c=b-h;if(c<0){c=0}a=d.store.getAt(c);if(g.shiftKey){d.selectRange(a,g.record,g.ctrlKey,"up");d.setLastFocused(a)}else{if(g.ctrlKey){g.preventDefault();d.setLastFocused(a)}else{d.doSelect(a)}}}},onKeyPageDown:function(g){var c=this,h=c.getRowsVisible(),a,d,b;if(h){a=g.recordIndex;d=a+h;if(d>=c.store.getCount()){d=c.store.getCount()-1}b=c.store.getAt(d);if(g.shiftKey){c.selectRange(b,g.record,g.ctrlKey,"down");c.setLastFocused(b)}else{if(g.ctrlKey){g.preventDefault();c.setLastFocused(b)}else{c.doSelect(b)}}}},onKeySpace:function(c){var b=this,a=b.lastFocused;if(a){if(b.isSelected(a)){b.doDeselect(a,false)}else{b.doSelect(a,true)}}},onKeyEnter:Ext.emptyFn,onKeyUp:function(d){var c=this,a=c.store.indexOf(c.lastFocused),b;if(a>0){b=c.store.getAt(a-1);if(d.shiftKey&&c.lastFocused){if(c.isSelected(c.lastFocused)&&c.isSelected(b)){c.doDeselect(c.lastFocused,true);c.setLastFocused(b)}else{if(!c.isSelected(c.lastFocused)){c.doSelect(c.lastFocused,true);c.doSelect(b,true)}else{c.doSelect(b,true)}}}else{if(d.ctrlKey){c.setLastFocused(b)}else{c.doSelect(b)}}}},onKeyDown:function(d){var c=this,a=c.store.indexOf(c.lastFocused),b;if(a+1 '},onRowMouseDown:function(b,a,h,d,i){b.el.focus();var g=this,c=i.getTarget("."+Ext.baseCSSPrefix+"grid-row-checker"),j;if(!g.allowRightMouseSelection(i)){return}if(g.checkOnly&&!c){return}if(c){j=g.getSelectionMode();if(j!=="SINGLE"){g.setSelectionMode("SIMPLE")}g.selectWithEvent(a,i);g.setSelectionMode(j)}else{g.selectWithEvent(a,i)}},onSelectChange:function(){var a=this;a.callParent(arguments);a.updateHeaderState()},onStoreLoad:function(){var a=this;a.callParent(arguments);a.updateHeaderState()},updateHeaderState:function(){var a=this.selected.getCount()===this.store.getCount();this.toggleUiHeader(a)}});Ext.define("Ext.selection.TreeModel",{extend:"Ext.selection.RowModel",alias:"selection.treemodel",pruneRemoved:false,onKeyRight:function(d,b){var c=this.getLastFocused(),a=this.view;if(c){if(c.isExpanded()){this.onKeyDown(d,b)}else{if(c.isExpandable()){a.expand(c)}}}},onKeyLeft:function(i,d){var h=this.getLastFocused(),c=this.view,b=c.getSelectionModel(),a,g;if(h){a=h.parentNode;if(h.isExpanded()){c.collapse(h)}else{if(a&&!a.isRoot()){if(i.shiftKey){b.selectRange(a,h,i.ctrlKey,"up");b.setLastFocused(a)}else{if(i.ctrlKey){b.setLastFocused(a)}else{b.select(a)}}}}}},onKeySpace:function(b,a){this.toggleCheck(b)},onKeyEnter:function(b,a){this.toggleCheck(b)},toggleCheck:function(b){b.stopEvent();var a=this.getLastSelected();if(a){this.view.onCheckChange(a)}}});Ext.define("Ext.slider.Thumb",{requires:["Ext.dd.DragTracker","Ext.util.Format"],topZIndex:10000,constructor:function(a){var b=this;Ext.apply(b,a||{},{cls:Ext.baseCSSPrefix+"slider-thumb",constrain:false});b.callParent([a])},render:function(){var a=this;a.el=a.slider.innerEl.insertFirst(a.getElConfig());a.onRender()},onRender:function(){if(this.disabled){this.disable()}this.initEvents()},getElConfig:function(){var c=this,b=c.slider,a={};a[b.vertical?"bottom":"left"]=b.calculateThumbPosition(b.normalizeValue(c.value))+"%";return{style:a,id:this.id,cls:this.cls}},move:function(c,b){var d=this.el,a=this.slider.vertical?"bottom":"left",g,e;c+="%";if(!b){d.dom.style[a]=c}else{g={};g[a]=c;if(!Ext.supports.GetPositionPercentage){e={};e[a]=d.dom.style[a]}new Ext.fx.Anim({target:d,duration:350,from:e,to:g})}},bringToFront:function(){this.el.setStyle("zIndex",this.topZIndex)},sendToBack:function(){this.el.setStyle("zIndex","")},enable:function(){var a=this;a.disabled=false;if(a.el){a.el.removeCls(a.slider.disabledCls)}},disable:function(){var a=this;a.disabled=true;if(a.el){a.el.addCls(a.slider.disabledCls)}},initEvents:function(){var b=this,a=b.el;b.tracker=new Ext.dd.DragTracker({onBeforeStart:Ext.Function.bind(b.onBeforeDragStart,b),onStart:Ext.Function.bind(b.onDragStart,b),onDrag:Ext.Function.bind(b.onDrag,b),onEnd:Ext.Function.bind(b.onDragEnd,b),tolerance:3,autoStart:300,overCls:Ext.baseCSSPrefix+"slider-thumb-over"});b.tracker.initEl(a)},onBeforeDragStart:function(a){if(this.disabled){return false}else{this.slider.promoteThumb(this);return true}},onDragStart:function(b){var a=this;a.el.addCls(Ext.baseCSSPrefix+"slider-thumb-drag");a.dragging=a.slider.dragging=true;a.dragStartValue=a.value;a.slider.fireEvent("dragstart",a.slider,b,a)},onDrag:function(h){var d=this,c=d.slider,b=d.index,g=d.getValueFromTracker(),a,i;if(g!==undefined){if(d.constrain){a=c.thumbs[b+1];i=c.thumbs[b-1];if(i!==undefined&&g<=i.value){g=i.value}if(a!==undefined&&g>=a.value){g=a.value}}c.setValue(b,g,false);c.fireEvent("drag",c,h,d)}},getValueFromTracker:function(){var a=this.slider,b=a.getTrackpoint(this.tracker.getXY());if(b!==undefined){return a.reversePixelValue(b)}},onDragEnd:function(d){var b=this,a=b.slider,c=b.value;b.el.removeCls(Ext.baseCSSPrefix+"slider-thumb-drag");b.dragging=a.dragging=false;a.fireEvent("dragend",a,d);if(b.dragStartValue!=c){a.fireEvent("changecomplete",a,c,b)}},destroy:function(){Ext.destroy(this.tracker)}});Ext.define("Ext.slider.Tip",{extend:"Ext.tip.Tip",minWidth:10,alias:"widget.slidertip",offsets:null,align:null,position:"",defaultVerticalPosition:"left",defaultHorizontalPosition:"top",isSliderTip:true,init:function(c){var b=this,d,a;if(!b.position){b.position=c.vertical?b.defaultVerticalPosition:b.defaultHorizontalPosition}switch(b.position){case"top":a=[0,-10];d="b-t?";break;case"bottom":a=[0,10];d="t-b?";break;case"left":a=[-10,0];d="r-l?";break;case"right":a=[10,0];d="l-r?"}if(!b.align){b.align=d}if(!b.offsets){b.offsets=a}c.on({scope:b,dragstart:b.onSlide,drag:b.onSlide,dragend:b.hide,destroy:b.destroy})},onSlide:function(c,d,a){var b=this;b.show();b.update(b.getText(a));b.el.alignTo(a.el,b.align,b.offsets)},getText:function(a){return String(a.value)}});Ext.define("Ext.slider.Multi",{extend:"Ext.form.field.Base",alias:"widget.multislider",alternateClassName:"Ext.slider.MultiSlider",requires:["Ext.slider.Thumb","Ext.slider.Tip","Ext.Number","Ext.util.Format","Ext.Template","Ext.layout.component.field.Slider"],childEls:["endEl","innerEl"],fieldSubTpl:['
    ','","
    ",{renderThumbs:function(g,e){var j=e.$comp,h=0,c=j.thumbs,b=c.length,d,a;for(;hg?g:c.value}e.syncThumbs()},setValue:function(c,g,b,e){var d=this,a=d.thumbs[c];g=d.normalizeValue(g);if(g!==a.value&&d.fireEvent("beforechange",d,g,a.value,a)!==false){a.value=g;if(d.rendered){d.inputEl.set({"aria-valuenow":g,"aria-valuetext":g});a.move(d.calculateThumbPosition(g),Ext.isDefined(b)?b!==false:d.animate);d.fireEvent("change",d,g,a);d.checkDirty();if(e){d.fireEvent("changecomplete",d,g,a)}}}},calculateThumbPosition:function(a){return(a-this.minValue)/(this.maxValue-this.minValue)*100},getRatio:function(){var b=this,a=this.vertical?this.innerEl.getHeight():this.innerEl.getWidth(),c=this.maxValue-this.minValue;return c===0?a:(a/c)},reversePixelValue:function(a){return this.minValue+(a/this.getRatio())},reversePercentageValue:function(a){return this.minValue+(this.maxValue-this.minValue)*(a/100)},onDisable:function(){var g=this,d=0,b=g.thumbs,a=b.length,c,e,h;g.callParent();for(;d {baseCls}-body-{ui} {parent.baseCls}-body-{parent.ui}-{.}" style="{bodyStyle}">',"{%this.renderContainer(out,values)%}","",'
    {baseCls}-strip-{ui} {parent.baseCls}-strip-{parent.ui}-{.}">
    '],initComponent:function(){var a=this;if(a.plain){a.setUI(a.ui+"-plain")}a.addClsWithUI(a.dock);a.addEvents("change");a.callParent(arguments);a.layout.align=(a.orientation=="vertical")?"left":"top";a.layout.overflowHandler=new Ext.layout.container.boxOverflow.Scroller(a.layout);a.remove(a.titleCmp);delete a.titleCmp;Ext.apply(a.renderData,{bodyCls:a.bodyCls})},getLayout:function(){var a=this;a.layout.type=(a.dock==="top"||a.dock==="bottom")?"hbox":"vbox";return a.callParent(arguments)},onAdd:function(a){a.position=this.dock;this.callParent(arguments)},onRemove:function(a){var b=this;if(a===b.previousTab){b.previousTab=null}b.callParent(arguments)},afterComponentLayout:function(a){this.callParent(arguments);this.strip.setWidth(a)},onClick:function(g,d){var c=this,i=g.getTarget("."+Ext.tab.Tab.prototype.baseCls),b=i&&Ext.getCmp(i.id),h=c.tabPanel,a=b&&b.closeEl&&(d===b.closeEl.dom);if(a){g.preventDefault()}if(b&&b.isDisabled&&!b.isDisabled()){if(b.closable&&a){b.onCloseClick()}else{if(h){h.setActiveTab(b.card)}else{c.setActiveTab(b)}b.focus()}}},closeTab:function(c){var d=this,b=c.card,e=d.tabPanel,a;if(b&&b.fireEvent("beforeclose",b)===false){return false}a=d.findNextActivatable(c);Ext.suspendLayouts();if(e&&b){delete c.ownerCt;b.fireEvent("close",b);e.remove(b);if(!e.getComponent(b)){c.fireClose();d.remove(c)}else{c.ownerCt=d;Ext.resumeLayouts(true);return false}}if(a){if(e){e.setActiveTab(a.card)}else{d.setActiveTab(a)}a.focus()}Ext.resumeLayouts(true)},findNextActivatable:function(a){var b=this;if(a.active&&b.items.getCount()>1){return(b.previousTab&&b.previousTab!==a&&!b.previousTab.disabled)?b.previousTab:(a.next("tab[disabled=false]")||a.prev("tab[disabled=false]"))}},setActiveTab:function(a){var b=this;if(!a.disabled&&a!==b.activeTab){if(b.activeTab){if(b.activeTab.isDestroyed){b.previousTab=null}else{b.previousTab=b.activeTab;b.activeTab.deactivate()}}a.activate();b.activeTab=a;b.fireEvent("change",b,a,a.card);b.on({afterlayout:b.afterTabActivate,scope:b,single:true});b.updateLayout()}},afterTabActivate:function(){this.layout.overflowHandler.scrollToItem(this.activeTab)}});Ext.define("Ext.tab.Panel",{extend:"Ext.panel.Panel",alias:"widget.tabpanel",alternateClassName:["Ext.TabPanel"],requires:["Ext.layout.container.Card","Ext.tab.Bar"],tabPosition:"top",removePanelHeader:true,plain:false,itemCls:Ext.baseCSSPrefix+"tabpanel-child",minTabWidth:undefined,maxTabWidth:undefined,deferredRender:true,initComponent:function(){var c=this,b=[].concat(c.dockedItems||[]),a=c.activeTab||(c.activeTab=0);c.layout=new Ext.layout.container.Card(Ext.apply({owner:c,deferredRender:c.deferredRender,itemCls:c.itemCls,activeItem:c.activeTab},c.layout));c.tabBar=new Ext.tab.Bar(Ext.apply({dock:c.tabPosition,plain:c.plain,border:c.border,cardLayout:c.layout,tabPanel:c},c.tabBar));b.push(c.tabBar);c.dockedItems=b;c.addEvents("beforetabchange","tabchange");c.callParent(arguments);c.activeTab=c.getComponent(a);if(c.activeTab){c.activeTab.tab.activate(true);c.tabBar.activeTab=c.activeTab.tab}},setActiveTab:function(a){var c=this,b;a=c.getComponent(a);if(a){b=c.getActiveTab();if(b!==a&&c.fireEvent("beforetabchange",c,a,b)===false){return false}if(!a.isComponent){Ext.suspendLayouts();a=c.add(a);Ext.resumeLayouts()}c.activeTab=a;Ext.suspendLayouts();c.layout.setActiveItem(a);a=c.activeTab=c.layout.getActiveItem();if(a&&a!==b){c.tabBar.setActiveTab(a.tab);Ext.resumeLayouts(true);if(b!==a){c.fireEvent("tabchange",c,a,b)}}else{Ext.resumeLayouts(true)}return a}},getActiveTab:function(){var b=this,a=b.getComponent(b.activeTab);if(a&&b.items.indexOf(a)!=-1){b.activeTab=a}else{b.activeTab=null}return b.activeTab},getTabBar:function(){return this.tabBar},onAdd:function(e,c){var d=this,b=e.tabConfig||{},a={xtype:"tab",card:e,disabled:e.disabled,closable:e.closable,hidden:e.hidden&&!e.hiddenByLayout,tooltip:e.tooltip,tabBar:d.tabBar,closeText:e.closeText};b=Ext.applyIf(b,a);e.tab=d.tabBar.insert(c,b);e.on({scope:d,enable:d.onItemEnable,disable:d.onItemDisable,beforeshow:d.onItemBeforeShow,iconchange:d.onItemIconChange,iconclschange:d.onItemIconClsChange,titlechange:d.onItemTitleChange});if(e.isPanel){if(d.removePanelHeader){if(e.rendered){if(e.header){e.header.hide()}}else{e.header=false}}if(e.isPanel&&d.border){e.setBorder(false)}}},onItemEnable:function(a){a.tab.enable()},onItemDisable:function(a){a.tab.disable()},onItemBeforeShow:function(a){if(a!==this.activeTab){this.setActiveTab(a);return false}},onItemIconChange:function(b,a){b.tab.setIcon(a)},onItemIconClsChange:function(b,a){b.tab.setIconCls(a)},onItemTitleChange:function(a,b){a.tab.setText(b)},doRemove:function(d,b){var c=this,a;if(c.destroying||c.items.getCount()==1){c.activeTab=null}else{if((a=c.tabBar.items.indexOf(c.tabBar.findNextActivatable(d.tab)))!==-1){c.setActiveTab(a)}}this.callParent(arguments);delete d.tab.card;delete d.tab},onRemove:function(b,c){var a=this;b.un({scope:a,enable:a.onItemEnable,disable:a.onItemDisable,beforeshow:a.onItemBeforeShow});if(!a.destroying&&b.tab.ownerCt===a.tabBar){a.tabBar.remove(b.tab)}}});Ext.define("Ext.toolbar.Spacer",{extend:"Ext.Component",alias:"widget.tbspacer",alternateClassName:"Ext.Toolbar.Spacer",baseCls:Ext.baseCSSPrefix+"toolbar-spacer",focusable:false});Ext.define("Ext.tree.Column",{extend:"Ext.grid.column.Column",alias:"widget.treecolumn",tdCls:Ext.baseCSSPrefix+"grid-cell-treecolumn",treePrefix:Ext.baseCSSPrefix+"tree-",elbowPrefix:Ext.baseCSSPrefix+"tree-elbow-",expanderCls:Ext.baseCSSPrefix+"tree-expander",imgText:'',checkboxText:'',initComponent:function(){var a=this;a.origRenderer=a.renderer||a.defaultRenderer;a.origScope=a.scope||window;a.renderer=a.treeRenderer;a.scope=a;a.callParent()},treeRenderer:function(l,n,c,b,k,e,j){var s=this,r=[],p=Ext.String.format,u=c.getDepth(),q=s.treePrefix,d=s.elbowPrefix,m=s.expanderCls,i=s.imgText,v=s.checkboxText,h=s.origRenderer.apply(s.origScope,arguments),g=Ext.BLANK_IMAGE_URL,o=c.get("href"),t=c.get("hrefTarget"),a=c.get("cls");while(c){if(!c.isRoot()||(c.isRoot()&&j.rootVisible)){if(c.getDepth()===u){r.unshift(p(i,q+"icon "+q+"icon"+(c.get("icon")?"-inline ":(c.isLeaf()?"-leaf ":"-parent "))+(c.get("iconCls")||""),c.get("icon")||g));if(c.get("checked")!==null){r.unshift(p(v,(q+"checkbox")+(c.get("checked")?" "+q+"checkbox-checked":""),c.get("checked")?'aria-checked="true"':""));if(c.get("checked")){n.tdCls+=(" "+q+"checked")}}if(c.isLast()){if(c.isExpandable()){r.unshift(p(i,(d+"end-plus "+m),g))}else{r.unshift(p(i,(d+"end"),g))}}else{if(c.isExpandable()){r.unshift(p(i,(d+"plus "+m),g))}else{r.unshift(p(i,(q+"elbow"),g))}}}else{if(c.isLast()||c.getDepth()===0){r.unshift(p(i,(d+"empty"),g))}else{if(c.getDepth()!==0){r.unshift(p(i,(d+"line"),g))}}}}c=c.parentNode}if(o){r.push('',h,"")}else{r.push(h)}if(a){n.tdCls+=" "+a}return r.join("")},defaultRenderer:function(a){return a}});Ext.define("Ext.tree.View",{extend:"Ext.view.Table",alias:"widget.treeview",requires:["Ext.data.NodeStore"],loadingCls:Ext.baseCSSPrefix+"grid-tree-loading",expandedCls:Ext.baseCSSPrefix+"grid-tree-node-expanded",leafCls:Ext.baseCSSPrefix+"grid-tree-node-leaf",expanderSelector:"."+Ext.baseCSSPrefix+"tree-expander",checkboxSelector:"."+Ext.baseCSSPrefix+"tree-checkbox",expanderIconOverCls:Ext.baseCSSPrefix+"tree-expander-over",nodeAnimWrapCls:Ext.baseCSSPrefix+"tree-animator-wrap",blockRefresh:true,loadMask:false,rootVisible:true,deferInitialRefresh:false,expandDuration:250,collapseDuration:250,toggleOnDblClick:true,stripeRows:false,uiFields:["expanded","loaded","checked","expandable","leaf","icon","iconCls","loading","qtip","qtitle"],initComponent:function(){var a=this,b=a.panel.getStore();if(a.initialConfig.animate===undefined){a.animate=Ext.enableFx}a.store=new Ext.data.NodeStore({treeStore:b,recursive:true,rootVisible:a.rootVisible,listeners:{beforeexpand:a.onBeforeExpand,expand:a.onExpand,beforecollapse:a.onBeforeCollapse,collapse:a.onCollapse,write:a.onStoreWrite,datachanged:a.onStoreDataChanged,scope:a}});if(a.node){a.setRootNode(a.node)}a.animQueue={};a.animWraps={};a.addEvents("afteritemexpand","afteritemcollapse");a.callParent(arguments);a.on({element:"el",scope:a,delegate:a.expanderSelector,mouseover:a.onExpanderMouseOver,mouseout:a.onExpanderMouseOut});a.on({element:"el",scope:a,delegate:a.checkboxSelector,click:a.onCheckboxChange})},getMaskStore:function(){return this.panel.getStore()},afterComponentLayout:function(){this.callParent(arguments);var a=this.stretcher;if(a){a.setWidth((this.getWidth()-Ext.getScrollbarSize().width))}},processUIEvent:function(a){if(a.getTarget("."+this.nodeAnimWrapCls,this.el)){return false}return this.callParent(arguments)},onClear:function(){this.store.removeAll()},setRootNode:function(b){var a=this;a.store.setNode(b);a.node=b},onCheckboxChange:function(d,a){var c=this,b=d.getTarget(c.getItemSelector(),c.getTargetEl());if(b){c.onCheckChange(c.getRecord(b))}},onCheckChange:function(a){var b=a.get("checked");if(Ext.isBoolean(b)){b=!b;a.set("checked",b);this.fireEvent("checkchange",a,b)}},getChecked:function(){var a=[];this.node.cascadeBy(function(b){if(b.get("checked")){a.push(b)}});return a},isItemChecked:function(a){return a.get("checked")},createAnimWrap:function(j,k){var g="",e=this.panel.headerCt,b=e.getGridColumns(),h=0,l=b.length,m,d=this.getNode(j),a,c;for(;h'}c=Ext.get(d);a=c.insertSibling({tag:"tr",html:['','
    ','',g,"
    ","
    ",""].join("")},"after");return{record:j,node:d,el:a,expanding:false,collapsing:false,animating:false,animateEl:a.down("div"),targetEl:a.down("tbody")}},getAnimWrap:function(d,a){if(!this.animate){return null}var b=this.animWraps,c=b[d.internalId];if(a!==false){while(!c&&d){d=d.parentNode;if(d){c=b[d.internalId]}}}return c},doAdd:function(b,d,i){var j=this,g=d[0],l=g.parentNode,k=j.all.elements,n=0,e=j.getAnimWrap(l),m,c,h;if(!e||!e.expanding){return j.callParent(arguments)}l=e.record;m=e.targetEl;c=m.dom.childNodes;h=c.length-1;n=i-j.indexOf(l)-1;if(!h||n>=h){m.appendChild(b)}else{Ext.fly(c[n+1]).insertSibling(b,"before",true)}Ext.Array.insert(k,i,b);if(e.isAnimating){j.onExpand(l)}},beginBulkUpdate:function(){this.bulkUpdate=true},endBulkUpdate:function(){this.bulkUpdate=false},onRemove:function(e,a,b){var d=this,c=d.bulkUpdate;if(d.viewReady){d.doRemove(a,b);if(!c){d.updateIndexes(b)}if(d.store.getCount()===0){d.refresh()}if(!c){d.fireEvent("itemremove",a,b)}}},doRemove:function(a,c){var h=this,d=h.all,b=h.getAnimWrap(a),g=d.item(c),e=g?g.dom:null;if(!e||!b||!b.collapsing){return h.callParent(arguments)}b.targetEl.appendChild(e);d.removeElement(c)},onBeforeExpand:function(d,b,c){var e=this,a;if(!e.rendered||!e.animate){return}if(e.getNode(d)){a=e.getAnimWrap(d,false);if(!a){a=e.animWraps[d.internalId]=e.createAnimWrap(d);a.animateEl.setHeight(0)}else{if(a.collapsing){a.targetEl.select(e.itemSelector).remove()}}a.expanding=true;a.collapsing=false}},onExpand:function(i){var h=this,e=h.animQueue,a=i.getId(),c=h.getNode(i),g=c?h.indexOf(c):-1,d,b,j;if(h.singleExpand){h.ensureSingleExpand(i)}if(g===-1){return}d=h.getAnimWrap(i,false);if(!d){h.isExpandingOrCollapsing=false;h.fireEvent("afteritemexpand",i,g,c);return}b=d.animateEl;j=d.targetEl;b.stopAnimation();e[a]=true;b.slideIn("t",{duration:h.expandDuration,listeners:{scope:h,lastframe:function(){d.el.insertSibling(j.query(h.itemSelector),"before");d.el.remove();h.refreshSize();delete h.animWraps[d.record.internalId];delete e[a]}},callback:function(){h.isExpandingOrCollapsing=false;h.fireEvent("afteritemexpand",i,g,c)}});d.isAnimating=true},onBeforeCollapse:function(d,b,c){var e=this,a;if(!e.rendered||!e.animate){return}if(e.getNode(d)){a=e.getAnimWrap(d);if(!a){a=e.animWraps[d.internalId]=e.createAnimWrap(d,c)}else{if(a.expanding){a.targetEl.select(this.itemSelector).remove()}}a.expanding=false;a.collapsing=true}},onCollapse:function(i){var h=this,e=h.animQueue,a=i.getId(),c=h.getNode(i),g=c?h.indexOf(c):-1,d=h.getAnimWrap(i),b,j;if(g===-1){return}if(!d){h.isExpandingOrCollapsing=false;h.fireEvent("afteritemcollapse",i,g,c);return}b=d.animateEl;j=d.targetEl;e[a]=true;b.stopAnimation();b.slideOut("t",{duration:h.collapseDuration,listeners:{scope:h,lastframe:function(){d.el.remove();h.refreshSize();delete h.animWraps[d.record.internalId];delete e[a]}},callback:function(){h.isExpandingOrCollapsing=false;h.fireEvent("afteritemcollapse",i,g,c)}});d.isAnimating=true},isAnimating:function(a){return !!this.animQueue[a.getId()]},collectData:function(c){var g=this.callParent(arguments),e=g.rows,a=e.length,d=0,h,b;for(;d1){b.expandPath(h.join(a),d,a,function(m,l){var k=l;if(m&&l){l=l.findChild(d,e);if(l){b.getSelectionModel().select(l);Ext.callback(g,i||b,[true,l]);return}}Ext.callback(g,i||b,[false,k])},b)}else{c=b.getRootNode();if(c.getId()===e){b.getSelectionModel().select(c);Ext.callback(g,i||b,[true,c])}else{Ext.callback(g,i||b,[false,null])}}}});Ext.define("Ext.view.DragZone",{extend:"Ext.dd.DragZone",containerScroll:false,constructor:function(b){var e=this,a,d,c;Ext.apply(e,b);if(!e.ddGroup){e.ddGroup="view-dd-zone-"+e.view.id}a=e.view;d=a.ownerCt;if(d){c=d.getTargetEl().dom}else{c=a.el.dom.parentNode}e.callParent([c]);e.ddel=Ext.get(document.createElement("div"));e.ddel.addCls(Ext.baseCSSPrefix+"grid-dd-wrap")},init:function(c,a,b){this.initTarget(c,a,b);this.view.mon(this.view,{itemmousedown:this.onItemMouseDown,scope:this})},onValidDrop:function(b,a,c){this.callParent();b.el.focus()},onItemMouseDown:function(b,a,d,c,g){if(!this.isPreventDrag(g,a,d,c)){this.view.focus();this.handleMouseDown(g);if(b.getSelectionModel().selectionMode=="MULTI"&&!g.ctrlKey&&b.getSelectionModel().isSelected(a)){return false}}},isPreventDrag:function(a){return false},getDragData:function(c){var a=this.view,b=c.getTarget(a.getItemSelector());if(b){return{copy:a.copy||(a.allowCopy&&c.ctrlKey),event:new Ext.EventObjectImpl(c),view:a,ddel:this.ddel,item:b,records:a.getSelectionModel().getSelection(),fromPosition:Ext.fly(b).getXY()}}},onInitDrag:function(b,j){var g=this,h=g.dragData,d=h.view,a=d.getSelectionModel(),c=d.getRecord(h.item),i=h.event;if(!a.isSelected(c)){a.select(c,true)}h.records=a.getSelection();g.ddel.update(g.getDragText());g.proxy.update(g.ddel.dom);g.onStartDrag(b,j);return true},getDragText:function(){var a=this.dragData.records.length;return Ext.String.format(this.dragText,a,a==1?"":"s")},getRepairXY:function(b,a){return a?a.fromPosition:false}});Ext.define("Ext.tree.ViewDragZone",{extend:"Ext.view.DragZone",isPreventDrag:function(b,a){return(a.get("allowDrag")===false)||!!b.getTarget(this.view.expanderSelector)},afterRepair:function(){var h=this,a=h.view,i=a.selectedItemCls,b=h.dragData.records,g,e=b.length,c=Ext.fly,d;if(Ext.enableFx&&h.repairHighlight){for(g=0;g=i.top&&h<(i.top+d)){return"before"}else{if(!a&&(k||(h>=(i.bottom-d)&&h<=i.bottom))){return"after"}else{return"append"}}},isValidDropPoint:function(b,j,n,k,g){if(!b||!g.item){return false}var o=this.view,l=o.getRecord(b),d=g.records,a=d.length,m=d.length,c,h;if(!(l&&j&&a)){return false}for(c=0;c=0;--k){m=o[k].selectorText;if(m){m=m.split(",");h=m.length;for(g=0;g2)?a[2]:null,h=(i>3)?a[3]:"/",d=(i>4)?a[4]:null,g=(i>5)?a[5]:false;document.cookie=c+"="+escape(e)+((b===null)?"":("; expires="+b.toGMTString()))+((h===null)?"":("; path="+h))+((d===null)?"":("; domain="+d))+((g===true)?"; secure":"")},get:function(d){var b=d+"=",g=b.length,a=document.cookie.length,e=0,c=0;while(e=0?a.substr(b+1):null},setHash:function(d){var a=this,c=a.useTopWindow?window.top:window;try{c.location.hash=d}catch(b){}},doSave:function(){this.hiddenField.value=this.currentToken},handleStateChange:function(a){this.currentToken=a;this.fireEvent("change",a)},updateIFrame:function(b){var a='
    '+Ext.util.Format.htmlEncode(b)+"
    ",d;try{d=this.iframe.contentWindow.document;d.open();d.write(a);d.close();return true}catch(c){return false}},checkIFrame:function(){var d=this,b=d.iframe.contentWindow,e,c,a,g;if(!b||!b.document){Ext.Function.defer(this.checkIFrame,10,this);return}e=b.document;c=e.getElementById("state");a=c?c.innerText:null;g=d.getHash();Ext.TaskManager.start({run:function(){var k=b.document,j=k.getElementById("state"),h=j?j.innerText:null,i=d.getHash();if(h!==a){a=h;d.handleStateChange(h);d.setHash(h);g=h;d.doSave()}else{if(i!==g){g=i;d.updateIFrame(i)}}},interval:50,scope:d});d.ready=true;d.fireEvent("ready",d)},startUp:function(){var a=this,b;a.currentToken=a.hiddenField.value||this.getHash();if(a.oldIEMode){a.checkIFrame()}else{b=a.getHash();Ext.TaskManager.start({run:function(){var c=a.getHash();if(c!==b){b=c;a.handleStateChange(b);a.doSave()}},interval:50,scope:a});a.ready=true;a.fireEvent("ready",a)}},init:function(d,b){var c=this,a=Ext.DomHelper;if(c.ready){Ext.callback(d,b,[c]);return}if(!Ext.isReady){Ext.onReady(function(){c.init(d,b)});return}c.hiddenField=Ext.getDom(c.fieldId);if(!c.hiddenField){c.hiddenField=Ext.getBody().createChild({id:Ext.id(),tag:"form",cls:Ext.baseCSSPrefix+"hide-display",children:[{tag:"input",type:"hidden",id:c.fieldId}]},false,true).firstChild}if(c.oldIEMode){c.iframe=Ext.getDom(c.iframeId);if(!c.iframe){c.iframe=a.append(c.hiddenField.parentNode,{tag:"iframe",id:c.iframeId,src:Ext.SSL_SECURE_URL})}}c.addEvents("ready","change");if(d){c.on("ready",d,b,{single:true})}c.startUp()},add:function(a,c){var b=this;if(c!==false){if(b.getToken()===a){return true}}if(b.oldIEMode){return b.updateIFrame(a)}else{b.setHash(a);return true}},back:function(){window.history.go(-1)},forward:function(){window.history.go(1)},getToken:function(){return this.ready?this.currentToken:this.getHash()}});Ext.define("Ext.util.Point",{extend:"Ext.util.Region",statics:{fromEvent:function(a){a=(a.changedTouches&&a.changedTouches.length>0)?a.changedTouches[0]:a;return new this(a.pageX,a.pageY)}},constructor:function(a,b){this.callParent([b,a,b,a])},toString:function(){return"Point["+this.x+","+this.y+"]"},equals:function(a){return(this.x==a.x&&this.y==a.y)},isWithin:function(b,a){if(!Ext.isObject(a)){a={x:a,y:a}}return(this.x<=b.x+a.x&&this.x>=b.x-a.x&&this.y<=b.y+a.y&&this.y>=b.y-a.y)},roundedEquals:function(a){return(Math.round(this.x)==Math.round(a.x)&&Math.round(this.y)==Math.round(a.y))}},function(){this.prototype.translate=Ext.util.Region.prototype.translateBy});Ext.define("Ext.view.TableChunker",{singleton:true,requires:["Ext.XTemplate"],metaTableTpl:["{%if (this.openTableWrap)out.push(this.openTableWrap())%}",'',"",'','','',"","","{[this.openRows()]}","{row}",'',"{[this.embedFeature(values, parent, xindex, xcount)]}","","{[this.closeRows()]}","","
    ","{%if (this.closeTableWrap)out.push(this.closeTableWrap())%}"],constructor:function(){Ext.XTemplate.prototype.recurse=function(b,a){return this.apply(a?b[a]:b)}},embedFeature:function(b,d,a,e){var c="";if(!b.disabled){c=b.getFeatureTpl(b,d,a,e)}return c},embedFullWidth:function(b){var a='style="width:{fullWidth}px;';if(!b.rowCount){a+="height:1px;"}return a+'"'},openRows:function(){return''},closeRows:function(){return""},metaRowTpl:['','','','
    {{id}}
    ',"","
    ",""],firstOrLastCls:function(a,b){if(a===1){return Ext.view.Table.prototype.firstCls}else{if(a===b){return Ext.view.Table.prototype.lastCls}}},embedRowCls:function(){return"{rowCls}"},embedRowAttr:function(){return"{rowAttr}"},openTableWrap:undefined,closeTableWrap:undefined,getTableTpl:function(k,b){var j,h={openRows:this.openRows,closeRows:this.closeRows,embedFeature:this.embedFeature,embedFullWidth:this.embedFullWidth,openTableWrap:this.openTableWrap,closeTableWrap:this.closeTableWrap},g={},c=k.features||[],m=c.length,e=0,l={embedRowCls:this.embedRowCls,embedRowAttr:this.embedRowAttr,firstOrLastCls:this.firstOrLastCls,unselectableAttr:k.enableTextSelection?"":'unselectable="on"',unselectableCls:k.enableTextSelection?"":Ext.baseCSSPrefix+"unselectable"},d=Array.prototype.slice.call(this.metaRowTpl,0),a;for(;e 0) { + ln--; + args[ln] = 'var Ext=window.' + Ext.name + ';' + args[ln]; + } + } + idx = args.join(''); + fn = cache[idx]; + if (!fn) { + fn = Function.prototype.constructor.apply(Function.prototype, args); + + cache[idx] = fn; + } + return fn; + }, + + functionFactory: function() { + var me = this, + args = Array.prototype.slice.call(arguments), + ln; + + if (Ext.isSandboxed) { + ln = args.length; + if (ln > 0) { + ln--; + args[ln] = 'var Ext=window.' + Ext.name + ';' + args[ln]; + } + } + + return Function.prototype.constructor.apply(Function.prototype, args); + }, + + + Logger: { + verbose: emptyFn, + log: emptyFn, + info: emptyFn, + warn: emptyFn, + error: function(message) { + throw new Error(message); + }, + deprecate: emptyFn + } + }); + + + Ext.type = Ext.typeOf; + + + + + ExtApp = Ext.app; + if (!ExtApp) { + ExtApp = Ext.app = {}; + } + Ext.apply(ExtApp, { + namespaces: {}, + + + collectNamespaces: function(paths) { + var namespaces = Ext.app.namespaces, + path; + + for (path in paths) { + if (paths.hasOwnProperty(path)) { + namespaces[path] = true; + } + } + }, + + + addNamespaces: function(ns) { + var namespaces = Ext.app.namespaces, + i, l; + + if (!Ext.isArray(ns)) { + ns = [ns]; + } + + for (i = 0, l = ns.length; i < l; i++) { + namespaces[ns[i]] = true; + } + }, + + + clearNamespaces: function() { + Ext.app.namespaces = {}; + }, + + + getNamespace: function(className) { + var namespaces = Ext.app.namespaces, + deepestPrefix = '', + prefix; + + for (prefix in namespaces) { + if (namespaces.hasOwnProperty(prefix) && + prefix.length > deepestPrefix.length && + (prefix + '.' === className.substring(0, prefix.length + 1))) { + deepestPrefix = prefix; + } + } + + return deepestPrefix === '' ? undefined : deepestPrefix; + } + }); +}()); + + +Ext.globalEval = Ext.global.execScript + ? function(code) { + execScript(code); + } + : function($$code) { + + + (function(){ + + + + var Ext = this.Ext; + eval($$code); + }()); + }; + +//@tag foundation,core + +//@require ../Ext.js + + + +(function() { + + + +var version = '4.2.0.663', Version; + Ext.Version = Version = Ext.extend(Object, { + + + constructor: function(version) { + var parts, releaseStartIndex; + + if (version instanceof Version) { + return version; + } + + this.version = this.shortVersion = String(version).toLowerCase().replace(/_/g, '.').replace(/[\-+]/g, ''); + + releaseStartIndex = this.version.search(/([^\d\.])/); + + if (releaseStartIndex !== -1) { + this.release = this.version.substr(releaseStartIndex, version.length); + this.shortVersion = this.version.substr(0, releaseStartIndex); + } + + this.shortVersion = this.shortVersion.replace(/[^\d]/g, ''); + + parts = this.version.split('.'); + + this.major = parseInt(parts.shift() || 0, 10); + this.minor = parseInt(parts.shift() || 0, 10); + this.patch = parseInt(parts.shift() || 0, 10); + this.build = parseInt(parts.shift() || 0, 10); + + return this; + }, + + + toString: function() { + return this.version; + }, + + + valueOf: function() { + return this.version; + }, + + + getMajor: function() { + return this.major || 0; + }, + + + getMinor: function() { + return this.minor || 0; + }, + + + getPatch: function() { + return this.patch || 0; + }, + + + getBuild: function() { + return this.build || 0; + }, + + + getRelease: function() { + return this.release || ''; + }, + + + isGreaterThan: function(target) { + return Version.compare(this.version, target) === 1; + }, + + + isGreaterThanOrEqual: function(target) { + return Version.compare(this.version, target) >= 0; + }, + + + isLessThan: function(target) { + return Version.compare(this.version, target) === -1; + }, + + + isLessThanOrEqual: function(target) { + return Version.compare(this.version, target) <= 0; + }, + + + equals: function(target) { + return Version.compare(this.version, target) === 0; + }, + + + match: function(target) { + target = String(target); + return this.version.substr(0, target.length) === target; + }, + + + toArray: function() { + return [this.getMajor(), this.getMinor(), this.getPatch(), this.getBuild(), this.getRelease()]; + }, + + + getShortVersion: function() { + return this.shortVersion; + }, + + + gt: function() { + return this.isGreaterThan.apply(this, arguments); + }, + + + lt: function() { + return this.isLessThan.apply(this, arguments); + }, + + + gtEq: function() { + return this.isGreaterThanOrEqual.apply(this, arguments); + }, + + + ltEq: function() { + return this.isLessThanOrEqual.apply(this, arguments); + } + }); + + Ext.apply(Version, { + + releaseValueMap: { + 'dev': -6, + 'alpha': -5, + 'a': -5, + 'beta': -4, + 'b': -4, + 'rc': -3, + '#': -2, + 'p': -1, + 'pl': -1 + }, + + + getComponentValue: function(value) { + return !value ? 0 : (isNaN(value) ? this.releaseValueMap[value] || value : parseInt(value, 10)); + }, + + + compare: function(current, target) { + var currentValue, targetValue, i; + + current = new Version(current).toArray(); + target = new Version(target).toArray(); + + for (i = 0; i < Math.max(current.length, target.length); i++) { + currentValue = this.getComponentValue(current[i]); + targetValue = this.getComponentValue(target[i]); + + if (currentValue < targetValue) { + return -1; + } else if (currentValue > targetValue) { + return 1; + } + } + + return 0; + } + }); + + + Ext.apply(Ext, { + + versions: {}, + + + lastRegisteredVersion: null, + + + setVersion: function(packageName, version) { + Ext.versions[packageName] = new Version(version); + Ext.lastRegisteredVersion = Ext.versions[packageName]; + + return this; + }, + + + getVersion: function(packageName) { + if (packageName === undefined) { + return Ext.lastRegisteredVersion; + } + + return Ext.versions[packageName]; + }, + + + deprecate: function(packageName, since, closure, scope) { + if (Version.compare(Ext.getVersion(packageName), since) < 1) { + closure.call(scope); + } + } + }); + + Ext.setVersion('core', version); + +}()); + +//@tag foundation,core + +//@require ../version/Version.js + + + + +Ext.String = (function() { + var trimRegex = /^[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+|[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+$/g, + escapeRe = /('|\\)/g, + formatRe = /\{(\d+)\}/g, + escapeRegexRe = /([-.*+?\^${}()|\[\]\/\\])/g, + basicTrimRe = /^\s+|\s+$/g, + whitespaceRe = /\s+/, + varReplace = /(^[^a-z]*|[^\w])/gi, + charToEntity, + entityToChar, + charToEntityRegex, + entityToCharRegex, + htmlEncodeReplaceFn = function(match, capture) { + return charToEntity[capture]; + }, + htmlDecodeReplaceFn = function(match, capture) { + return (capture in entityToChar) ? entityToChar[capture] : String.fromCharCode(parseInt(capture.substr(2), 10)); + }, + boundsCheck = function(s, other){ + if (s === null || s === undefined || other === null || other === undefined) { + return false; + } + + return other.length <= s.length; + }; + + return { + + + insert: function(s, value, index) { + if (!s) { + return value; + } + + if (!value) { + return s; + } + + var len = s.length; + + if (!index && index !== 0) { + index = len; + } + + if (index < 0) { + index *= -1; + if (index >= len) { + + index = 0; + } else { + index = len - index; + } + } + + if (index === 0) { + s = value + s; + } else if (index >= s.length) { + s += value; + } else { + s = s.substr(0, index) + value + s.substr(index); + } + return s; + }, + + + startsWith: function(s, start, ignoreCase){ + var result = boundsCheck(s, start); + + if (result) { + if (ignoreCase) { + s = s.toLowerCase(); + start = start.toLowerCase(); + } + result = s.lastIndexOf(start, 0) === 0; + } + return result; + }, + + + endsWith: function(s, end, ignoreCase){ + var result = boundsCheck(s, end); + + if (result) { + if (ignoreCase) { + s = s.toLowerCase(); + end = end.toLowerCase(); + } + result = s.indexOf(end, s.length - end.length) !== -1; + } + return result; + }, + + + createVarName: function(s) { + return s.replace(varReplace, ''); + }, + + + htmlEncode: function(value) { + return (!value) ? value : String(value).replace(charToEntityRegex, htmlEncodeReplaceFn); + }, + + + htmlDecode: function(value) { + return (!value) ? value : String(value).replace(entityToCharRegex, htmlDecodeReplaceFn); + }, + + + addCharacterEntities: function(newEntities) { + var charKeys = [], + entityKeys = [], + key, echar; + for (key in newEntities) { + echar = newEntities[key]; + entityToChar[key] = echar; + charToEntity[echar] = key; + charKeys.push(echar); + entityKeys.push(key); + } + charToEntityRegex = new RegExp('(' + charKeys.join('|') + ')', 'g'); + entityToCharRegex = new RegExp('(' + entityKeys.join('|') + '|&#[0-9]{1,5};' + ')', 'g'); + }, + + + resetCharacterEntities: function() { + charToEntity = {}; + entityToChar = {}; + + this.addCharacterEntities({ + '&' : '&', + '>' : '>', + '<' : '<', + '"' : '"', + ''' : "'" + }); + }, + + + urlAppend : function(url, string) { + if (!Ext.isEmpty(string)) { + return url + (url.indexOf('?') === -1 ? '?' : '&') + string; + } + + return url; + }, + + + trim: function(string) { + return string.replace(trimRegex, ""); + }, + + + capitalize: function(string) { + return string.charAt(0).toUpperCase() + string.substr(1); + }, + + + uncapitalize: function(string) { + return string.charAt(0).toLowerCase() + string.substr(1); + }, + + + ellipsis: function(value, len, word) { + if (value && value.length > len) { + if (word) { + var vs = value.substr(0, len - 2), + index = Math.max(vs.lastIndexOf(' '), vs.lastIndexOf('.'), vs.lastIndexOf('!'), vs.lastIndexOf('?')); + if (index !== -1 && index >= (len - 15)) { + return vs.substr(0, index) + "..."; + } + } + return value.substr(0, len - 3) + "..."; + } + return value; + }, + + + escapeRegex: function(string) { + return string.replace(escapeRegexRe, "\\$1"); + }, + + + escape: function(string) { + return string.replace(escapeRe, "\\$1"); + }, + + + toggle: function(string, value, other) { + return string === value ? other : value; + }, + + + leftPad: function(string, size, character) { + var result = String(string); + character = character || " "; + while (result.length < size) { + result = character + result; + } + return result; + }, + + + format: function(format) { + var args = Ext.Array.toArray(arguments, 1); + return format.replace(formatRe, function(m, i) { + return args[i]; + }); + }, + + + repeat: function(pattern, count, sep) { + if (count < 1) { + count = 0; + } + for (var buf = [], i = count; i--; ) { + buf.push(pattern); + } + return buf.join(sep || ''); + }, + + + splitWords: function (words) { + if (words && typeof words == 'string') { + return words.replace(basicTrimRe, '').split(whitespaceRe); + } + return words || []; + } + }; +}()); + + +Ext.String.resetCharacterEntities(); + + +Ext.htmlEncode = Ext.String.htmlEncode; + + + +Ext.htmlDecode = Ext.String.htmlDecode; + + +Ext.urlAppend = Ext.String.urlAppend; + +//@tag foundation,core + +//@require String.js + +//@define Ext.Number + + + + +Ext.Number = new function() { + + var me = this, + isToFixedBroken = (0.9).toFixed() !== '1', + math = Math; + + Ext.apply(this, { + + constrain: function(number, min, max) { + var x = parseFloat(number); + + + + + + + + + + return (x < min) ? min : ((x > max) ? max : x); + }, + + + snap : function(value, increment, minValue, maxValue) { + var m; + + + + if (value === undefined || value < minValue) { + return minValue || 0; + } + + if (increment) { + m = value % increment; + if (m !== 0) { + value -= m; + if (m * 2 >= increment) { + value += increment; + } else if (m * 2 < -increment) { + value -= increment; + } + } + } + return me.constrain(value, minValue, maxValue); + }, + + + snapInRange : function(value, increment, minValue, maxValue) { + var tween; + + + minValue = (minValue || 0); + + + if (value === undefined || value < minValue) { + return minValue; + } + + + if (increment && (tween = ((value - minValue) % increment))) { + value -= tween; + tween *= 2; + if (tween >= increment) { + value += increment; + } + } + + + if (maxValue !== undefined) { + if (value > (maxValue = me.snapInRange(maxValue, increment, minValue))) { + value = maxValue; + } + } + + return value; + }, + + + toFixed: isToFixedBroken ? function(value, precision) { + precision = precision || 0; + var pow = math.pow(10, precision); + return (math.round(value * pow) / pow).toFixed(precision); + } : function(value, precision) { + return value.toFixed(precision); + }, + + + from: function(value, defaultValue) { + if (isFinite(value)) { + value = parseFloat(value); + } + + return !isNaN(value) ? value : defaultValue; + }, + + + randomInt: function (from, to) { + return math.floor(math.random() * (to - from + 1) + from); + }, + + + correctFloat: function(n) { + + + + return parseFloat(n.toPrecision(14)); + } + }); + + + Ext.num = function() { + return me.from.apply(this, arguments); + }; +}; + +//@tag foundation,core + +//@require Number.js + + + +(function() { + + var arrayPrototype = Array.prototype, + slice = arrayPrototype.slice, + supportsSplice = (function () { + var array = [], + lengthBefore, + j = 20; + + if (!array.splice) { + return false; + } + + + + + while (j--) { + array.push("A"); + } + + array.splice(15, 0, "F", "F", "F", "F", "F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F"); + + lengthBefore = array.length; + array.splice(13, 0, "XXX"); + + if (lengthBefore+1 != array.length) { + return false; + } + + + return true; + }()), + supportsForEach = 'forEach' in arrayPrototype, + supportsMap = 'map' in arrayPrototype, + supportsIndexOf = 'indexOf' in arrayPrototype, + supportsEvery = 'every' in arrayPrototype, + supportsSome = 'some' in arrayPrototype, + supportsFilter = 'filter' in arrayPrototype, + supportsSort = (function() { + var a = [1,2,3,4,5].sort(function(){ return 0; }); + return a[0] === 1 && a[1] === 2 && a[2] === 3 && a[3] === 4 && a[4] === 5; + }()), + supportsSliceOnNodeList = true, + ExtArray, + erase, + replace, + splice; + + try { + + if (typeof document !== 'undefined') { + slice.call(document.getElementsByTagName('body')); + } + } catch (e) { + supportsSliceOnNodeList = false; + } + + function fixArrayIndex (array, index) { + return (index < 0) ? Math.max(0, array.length + index) + : Math.min(array.length, index); + } + + + function replaceSim (array, index, removeCount, insert) { + var add = insert ? insert.length : 0, + length = array.length, + pos = fixArrayIndex(array, index), + remove, + tailOldPos, + tailNewPos, + tailCount, + lengthAfterRemove, + i; + + + if (pos === length) { + if (add) { + array.push.apply(array, insert); + } + } else { + remove = Math.min(removeCount, length - pos); + tailOldPos = pos + remove; + tailNewPos = tailOldPos + add - remove; + tailCount = length - tailOldPos; + lengthAfterRemove = length - remove; + + if (tailNewPos < tailOldPos) { + for (i = 0; i < tailCount; ++i) { + array[tailNewPos+i] = array[tailOldPos+i]; + } + } else if (tailNewPos > tailOldPos) { + for (i = tailCount; i--; ) { + array[tailNewPos+i] = array[tailOldPos+i]; + } + } + + if (add && pos === lengthAfterRemove) { + array.length = lengthAfterRemove; + array.push.apply(array, insert); + } else { + array.length = lengthAfterRemove + add; + for (i = 0; i < add; ++i) { + array[pos+i] = insert[i]; + } + } + } + + return array; + } + + function replaceNative (array, index, removeCount, insert) { + if (insert && insert.length) { + + if (index === 0 && !removeCount) { + array.unshift.apply(array, insert); + } + + else if (index < array.length) { + array.splice.apply(array, [index, removeCount].concat(insert)); + } + + else { + array.push.apply(array, insert); + } + } else { + array.splice(index, removeCount); + } + return array; + } + + function eraseSim (array, index, removeCount) { + return replaceSim(array, index, removeCount); + } + + function eraseNative (array, index, removeCount) { + array.splice(index, removeCount); + return array; + } + + function spliceSim (array, index, removeCount) { + var pos = fixArrayIndex(array, index), + removed = array.slice(index, fixArrayIndex(array, pos+removeCount)); + + if (arguments.length < 4) { + replaceSim(array, pos, removeCount); + } else { + replaceSim(array, pos, removeCount, slice.call(arguments, 3)); + } + + return removed; + } + + function spliceNative (array) { + return array.splice.apply(array, slice.call(arguments, 1)); + } + + erase = supportsSplice ? eraseNative : eraseSim; + replace = supportsSplice ? replaceNative : replaceSim; + splice = supportsSplice ? spliceNative : spliceSim; + + + + ExtArray = Ext.Array = { + + each: function(array, fn, scope, reverse) { + array = ExtArray.from(array); + + var i, + ln = array.length; + + if (reverse !== true) { + for (i = 0; i < ln; i++) { + if (fn.call(scope || array[i], array[i], i, array) === false) { + return i; + } + } + } + else { + for (i = ln - 1; i > -1; i--) { + if (fn.call(scope || array[i], array[i], i, array) === false) { + return i; + } + } + } + + return true; + }, + + + forEach: supportsForEach ? function(array, fn, scope) { + array.forEach(fn, scope); + } : function(array, fn, scope) { + var i = 0, + ln = array.length; + + for (; i < ln; i++) { + fn.call(scope, array[i], i, array); + } + }, + + + indexOf: supportsIndexOf ? function(array, item, from) { + return arrayPrototype.indexOf.call(array, item, from); + } : function(array, item, from) { + var i, length = array.length; + + for (i = (from < 0) ? Math.max(0, length + from) : from || 0; i < length; i++) { + if (array[i] === item) { + return i; + } + } + + return -1; + }, + + + contains: supportsIndexOf ? function(array, item) { + return arrayPrototype.indexOf.call(array, item) !== -1; + } : function(array, item) { + var i, ln; + + for (i = 0, ln = array.length; i < ln; i++) { + if (array[i] === item) { + return true; + } + } + + return false; + }, + + + toArray: function(iterable, start, end){ + if (!iterable || !iterable.length) { + return []; + } + + if (typeof iterable === 'string') { + iterable = iterable.split(''); + } + + if (supportsSliceOnNodeList) { + return slice.call(iterable, start || 0, end || iterable.length); + } + + var array = [], + i; + + start = start || 0; + end = end ? ((end < 0) ? iterable.length + end : end) : iterable.length; + + for (i = start; i < end; i++) { + array.push(iterable[i]); + } + + return array; + }, + + + pluck: function(array, propertyName) { + var ret = [], + i, ln, item; + + for (i = 0, ln = array.length; i < ln; i++) { + item = array[i]; + + ret.push(item[propertyName]); + } + + return ret; + }, + + + map: supportsMap ? function(array, fn, scope) { + return array.map(fn, scope); + } : function(array, fn, scope) { + var results = [], + i = 0, + len = array.length; + + for (; i < len; i++) { + results[i] = fn.call(scope, array[i], i, array); + } + + return results; + }, + + + every: supportsEvery ? function(array, fn, scope) { + return array.every(fn, scope); + } : function(array, fn, scope) { + var i = 0, + ln = array.length; + + for (; i < ln; ++i) { + if (!fn.call(scope, array[i], i, array)) { + return false; + } + } + + return true; + }, + + + some: supportsSome ? function(array, fn, scope) { + return array.some(fn, scope); + } : function(array, fn, scope) { + var i = 0, + ln = array.length; + + for (; i < ln; ++i) { + if (fn.call(scope, array[i], i, array)) { + return true; + } + } + + return false; + }, + + + equals: function(array1, array2) { + var len1 = array1.length, + len2 = array2.length, + i; + + + if (array1 === array2) { + return true; + } + + if (len1 !== len2) { + return false; + } + + for (i = 0; i < len1; ++i) { + if (array1[i] !== array2[i]) { + return false; + } + } + + return true; + }, + + + clean: function(array) { + var results = [], + i = 0, + ln = array.length, + item; + + for (; i < ln; i++) { + item = array[i]; + + if (!Ext.isEmpty(item)) { + results.push(item); + } + } + + return results; + }, + + + unique: function(array) { + var clone = [], + i = 0, + ln = array.length, + item; + + for (; i < ln; i++) { + item = array[i]; + + if (ExtArray.indexOf(clone, item) === -1) { + clone.push(item); + } + } + + return clone; + }, + + + filter: supportsFilter ? function(array, fn, scope) { + return array.filter(fn, scope); + } : function(array, fn, scope) { + var results = [], + i = 0, + ln = array.length; + + for (; i < ln; i++) { + if (fn.call(scope, array[i], i, array)) { + results.push(array[i]); + } + } + + return results; + }, + + + findBy : function(array, fn, scope) { + var i = 0, + len = array.length; + + for (; i < len; i++) { + if (fn.call(scope || array, array[i], i)) { + return array[i]; + } + } + return null; + }, + + + from: function(value, newReference) { + if (value === undefined || value === null) { + return []; + } + + if (Ext.isArray(value)) { + return (newReference) ? slice.call(value) : value; + } + + var type = typeof value; + + + if (value && value.length !== undefined && type !== 'string' && (type !== 'function' || !value.apply)) { + return ExtArray.toArray(value); + } + + return [value]; + }, + + + remove: function(array, item) { + var index = ExtArray.indexOf(array, item); + + if (index !== -1) { + erase(array, index, 1); + } + + return array; + }, + + + include: function(array, item) { + if (!ExtArray.contains(array, item)) { + array.push(item); + } + }, + + + clone: function(array) { + return slice.call(array); + }, + + + merge: function() { + var args = slice.call(arguments), + array = [], + i, ln; + + for (i = 0, ln = args.length; i < ln; i++) { + array = array.concat(args[i]); + } + + return ExtArray.unique(array); + }, + + + intersect: function() { + var intersection = [], + arrays = slice.call(arguments), + arraysLength, + array, + arrayLength, + minArray, + minArrayIndex, + minArrayCandidate, + minArrayLength, + element, + elementCandidate, + elementCount, + i, j, k; + + if (!arrays.length) { + return intersection; + } + + + arraysLength = arrays.length; + for (i = minArrayIndex = 0; i < arraysLength; i++) { + minArrayCandidate = arrays[i]; + if (!minArray || minArrayCandidate.length < minArray.length) { + minArray = minArrayCandidate; + minArrayIndex = i; + } + } + + minArray = ExtArray.unique(minArray); + erase(arrays, minArrayIndex, 1); + + + + + minArrayLength = minArray.length; + arraysLength = arrays.length; + for (i = 0; i < minArrayLength; i++) { + element = minArray[i]; + elementCount = 0; + + for (j = 0; j < arraysLength; j++) { + array = arrays[j]; + arrayLength = array.length; + for (k = 0; k < arrayLength; k++) { + elementCandidate = array[k]; + if (element === elementCandidate) { + elementCount++; + break; + } + } + } + + if (elementCount === arraysLength) { + intersection.push(element); + } + } + + return intersection; + }, + + + difference: function(arrayA, arrayB) { + var clone = slice.call(arrayA), + ln = clone.length, + i, j, lnB; + + for (i = 0,lnB = arrayB.length; i < lnB; i++) { + for (j = 0; j < ln; j++) { + if (clone[j] === arrayB[i]) { + erase(clone, j, 1); + j--; + ln--; + } + } + } + + return clone; + }, + + + + slice: ([1,2].slice(1, undefined).length ? + function (array, begin, end) { + return slice.call(array, begin, end); + } : + + function (array, begin, end) { + + + if (typeof begin === 'undefined') { + return slice.call(array); + } + if (typeof end === 'undefined') { + return slice.call(array, begin); + } + return slice.call(array, begin, end); + } + ), + + + sort: supportsSort ? function(array, sortFn) { + if (sortFn) { + return array.sort(sortFn); + } else { + return array.sort(); + } + } : function(array, sortFn) { + var length = array.length, + i = 0, + comparison, + j, min, tmp; + + for (; i < length; i++) { + min = i; + for (j = i + 1; j < length; j++) { + if (sortFn) { + comparison = sortFn(array[j], array[min]); + if (comparison < 0) { + min = j; + } + } else if (array[j] < array[min]) { + min = j; + } + } + if (min !== i) { + tmp = array[i]; + array[i] = array[min]; + array[min] = tmp; + } + } + + return array; + }, + + + flatten: function(array) { + var worker = []; + + function rFlatten(a) { + var i, ln, v; + + for (i = 0, ln = a.length; i < ln; i++) { + v = a[i]; + + if (Ext.isArray(v)) { + rFlatten(v); + } else { + worker.push(v); + } + } + + return worker; + } + + return rFlatten(array); + }, + + + min: function(array, comparisonFn) { + var min = array[0], + i, ln, item; + + for (i = 0, ln = array.length; i < ln; i++) { + item = array[i]; + + if (comparisonFn) { + if (comparisonFn(min, item) === 1) { + min = item; + } + } + else { + if (item < min) { + min = item; + } + } + } + + return min; + }, + + + max: function(array, comparisonFn) { + var max = array[0], + i, ln, item; + + for (i = 0, ln = array.length; i < ln; i++) { + item = array[i]; + + if (comparisonFn) { + if (comparisonFn(max, item) === -1) { + max = item; + } + } + else { + if (item > max) { + max = item; + } + } + } + + return max; + }, + + + mean: function(array) { + return array.length > 0 ? ExtArray.sum(array) / array.length : undefined; + }, + + + sum: function(array) { + var sum = 0, + i, ln, item; + + for (i = 0,ln = array.length; i < ln; i++) { + item = array[i]; + + sum += item; + } + + return sum; + }, + + + toMap: function(array, getKey, scope) { + var map = {}, + i = array.length; + + if (!getKey) { + while (i--) { + map[array[i]] = i+1; + } + } else if (typeof getKey == 'string') { + while (i--) { + map[array[i][getKey]] = i+1; + } + } else { + while (i--) { + map[getKey.call(scope, array[i])] = i+1; + } + } + + return map; + }, + + + toValueMap: function(array, getKey, scope) { + var map = {}, + i = array.length; + + if (!getKey) { + while (i--) { + map[array[i]] = array[i]; + } + } else if (typeof getKey == 'string') { + while (i--) { + map[array[i][getKey]] = array[i]; + } + } else { + while (i--) { + map[getKey.call(scope, array[i])] = array[i]; + } + } + + return map; + }, + + + + erase: erase, + + + insert: function (array, index, items) { + return replace(array, index, 0, items); + }, + + + replace: replace, + + + splice: splice, + + + push: function(array) { + var len = arguments.length, + i = 1, + newItem; + + if (array === undefined) { + array = []; + } else if (!Ext.isArray(array)) { + array = [array]; + } + for (; i < len; i++) { + newItem = arguments[i]; + Array.prototype.push[Ext.isIterable(newItem) ? 'apply' : 'call'](array, newItem); + } + return array; + } + }; + + + Ext.each = ExtArray.each; + + + ExtArray.union = ExtArray.merge; + + + Ext.min = ExtArray.min; + + + Ext.max = ExtArray.max; + + + Ext.sum = ExtArray.sum; + + + Ext.mean = ExtArray.mean; + + + Ext.flatten = ExtArray.flatten; + + + Ext.clean = ExtArray.clean; + + + Ext.unique = ExtArray.unique; + + + Ext.pluck = ExtArray.pluck; + + + Ext.toArray = function() { + return ExtArray.toArray.apply(ExtArray, arguments); + }; +}()); + +//@tag foundation,core + +//@require Array.js + + + +Ext.Function = { + + + flexSetter: function(fn) { + return function(a, b) { + var k, i; + + if (a === null) { + return this; + } + + if (typeof a !== 'string') { + for (k in a) { + if (a.hasOwnProperty(k)) { + fn.call(this, k, a[k]); + } + } + + if (Ext.enumerables) { + for (i = Ext.enumerables.length; i--;) { + k = Ext.enumerables[i]; + if (a.hasOwnProperty(k)) { + fn.call(this, k, a[k]); + } + } + } + } else { + fn.call(this, a, b); + } + + return this; + }; + }, + + + bind: function(fn, scope, args, appendArgs) { + if (arguments.length === 2) { + return function() { + return fn.apply(scope, arguments); + }; + } + + var method = fn, + slice = Array.prototype.slice; + + return function() { + var callArgs = args || arguments; + + if (appendArgs === true) { + callArgs = slice.call(arguments, 0); + callArgs = callArgs.concat(args); + } + else if (typeof appendArgs == 'number') { + callArgs = slice.call(arguments, 0); + Ext.Array.insert(callArgs, appendArgs, args); + } + + return method.apply(scope || Ext.global, callArgs); + }; + }, + + + pass: function(fn, args, scope) { + if (!Ext.isArray(args)) { + if (Ext.isIterable(args)) { + args = Ext.Array.clone(args); + } else { + args = args !== undefined ? [args] : []; + } + } + + return function() { + var fnArgs = [].concat(args); + fnArgs.push.apply(fnArgs, arguments); + return fn.apply(scope || this, fnArgs); + }; + }, + + + alias: function(object, methodName) { + return function() { + return object[methodName].apply(object, arguments); + }; + }, + + + clone: function(method) { + return function() { + return method.apply(this, arguments); + }; + }, + + + createInterceptor: function(origFn, newFn, scope, returnValue) { + var method = origFn; + if (!Ext.isFunction(newFn)) { + return origFn; + } else { + returnValue = Ext.isDefined(returnValue) ? returnValue : null; + return function() { + var me = this, + args = arguments; + + newFn.target = me; + newFn.method = origFn; + return (newFn.apply(scope || me || Ext.global, args) !== false) ? origFn.apply(me || Ext.global, args) : returnValue; + }; + } + }, + + + createDelayed: function(fn, delay, scope, args, appendArgs) { + if (scope || args) { + fn = Ext.Function.bind(fn, scope, args, appendArgs); + } + + return function() { + var me = this, + args = Array.prototype.slice.call(arguments); + + setTimeout(function() { + fn.apply(me, args); + }, delay); + }; + }, + + + defer: function(fn, millis, scope, args, appendArgs) { + fn = Ext.Function.bind(fn, scope, args, appendArgs); + if (millis > 0) { + return setTimeout(Ext.supports.TimeoutActualLateness ? function () { + fn(); + } : fn, millis); + } + fn(); + return 0; + }, + + + createSequence: function(originalFn, newFn, scope) { + if (!newFn) { + return originalFn; + } + else { + return function() { + var result = originalFn.apply(this, arguments); + newFn.apply(scope || this, arguments); + return result; + }; + } + }, + + + createBuffered: function(fn, buffer, scope, args) { + var timerId; + + return function() { + var callArgs = args || Array.prototype.slice.call(arguments, 0), + me = scope || this; + + if (timerId) { + clearTimeout(timerId); + } + + timerId = setTimeout(function(){ + fn.apply(me, callArgs); + }, buffer); + }; + }, + + + createThrottled: function(fn, interval, scope) { + var lastCallTime, elapsed, lastArgs, timer, execute = function() { + fn.apply(scope || this, lastArgs); + lastCallTime = new Date().getTime(); + }; + + return function() { + elapsed = new Date().getTime() - lastCallTime; + lastArgs = arguments; + + clearTimeout(timer); + if (!lastCallTime || (elapsed >= interval)) { + execute(); + } else { + timer = setTimeout(execute, interval - elapsed); + } + }; + }, + + + + interceptBefore: function(object, methodName, fn, scope) { + var method = object[methodName] || Ext.emptyFn; + + return (object[methodName] = function() { + var ret = fn.apply(scope || this, arguments); + method.apply(this, arguments); + + return ret; + }); + }, + + + interceptAfter: function(object, methodName, fn, scope) { + var method = object[methodName] || Ext.emptyFn; + + return (object[methodName] = function() { + method.apply(this, arguments); + return fn.apply(scope || this, arguments); + }); + } +}; + + +Ext.defer = Ext.Function.alias(Ext.Function, 'defer'); + + +Ext.pass = Ext.Function.alias(Ext.Function, 'pass'); + + +Ext.bind = Ext.Function.alias(Ext.Function, 'bind'); + +//@tag foundation,core + +//@require Function.js + + + + +(function() { + + +var TemplateClass = function(){}, + ExtObject = Ext.Object = { + + + chain: Object.create || function (object) { + TemplateClass.prototype = object; + var result = new TemplateClass(); + TemplateClass.prototype = null; + return result; + }, + + + toQueryObjects: function(name, value, recursive) { + var self = ExtObject.toQueryObjects, + objects = [], + i, ln; + + if (Ext.isArray(value)) { + for (i = 0, ln = value.length; i < ln; i++) { + if (recursive) { + objects = objects.concat(self(name + '[' + i + ']', value[i], true)); + } + else { + objects.push({ + name: name, + value: value[i] + }); + } + } + } + else if (Ext.isObject(value)) { + for (i in value) { + if (value.hasOwnProperty(i)) { + if (recursive) { + objects = objects.concat(self(name + '[' + i + ']', value[i], true)); + } + else { + objects.push({ + name: name, + value: value[i] + }); + } + } + } + } + else { + objects.push({ + name: name, + value: value + }); + } + + return objects; + }, + + + toQueryString: function(object, recursive) { + var paramObjects = [], + params = [], + i, j, ln, paramObject, value; + + for (i in object) { + if (object.hasOwnProperty(i)) { + paramObjects = paramObjects.concat(ExtObject.toQueryObjects(i, object[i], recursive)); + } + } + + for (j = 0, ln = paramObjects.length; j < ln; j++) { + paramObject = paramObjects[j]; + value = paramObject.value; + + if (Ext.isEmpty(value)) { + value = ''; + } else if (Ext.isDate(value)) { + value = Ext.Date.toString(value); + } + + params.push(encodeURIComponent(paramObject.name) + '=' + encodeURIComponent(String(value))); + } + + return params.join('&'); + }, + + + fromQueryString: function(queryString, recursive) { + var parts = queryString.replace(/^\?/, '').split('&'), + object = {}, + temp, components, name, value, i, ln, + part, j, subLn, matchedKeys, matchedName, + keys, key, nextKey; + + for (i = 0, ln = parts.length; i < ln; i++) { + part = parts[i]; + + if (part.length > 0) { + components = part.split('='); + name = decodeURIComponent(components[0]); + value = (components[1] !== undefined) ? decodeURIComponent(components[1]) : ''; + + if (!recursive) { + if (object.hasOwnProperty(name)) { + if (!Ext.isArray(object[name])) { + object[name] = [object[name]]; + } + + object[name].push(value); + } + else { + object[name] = value; + } + } + else { + matchedKeys = name.match(/(\[):?([^\]]*)\]/g); + matchedName = name.match(/^([^\[]+)/); + + + name = matchedName[0]; + keys = []; + + if (matchedKeys === null) { + object[name] = value; + continue; + } + + for (j = 0, subLn = matchedKeys.length; j < subLn; j++) { + key = matchedKeys[j]; + key = (key.length === 2) ? '' : key.substring(1, key.length - 1); + keys.push(key); + } + + keys.unshift(name); + + temp = object; + + for (j = 0, subLn = keys.length; j < subLn; j++) { + key = keys[j]; + + if (j === subLn - 1) { + if (Ext.isArray(temp) && key === '') { + temp.push(value); + } + else { + temp[key] = value; + } + } + else { + if (temp[key] === undefined || typeof temp[key] === 'string') { + nextKey = keys[j+1]; + + temp[key] = (Ext.isNumeric(nextKey) || nextKey === '') ? [] : {}; + } + + temp = temp[key]; + } + } + } + } + } + + return object; + }, + + + each: function(object, fn, scope) { + for (var property in object) { + if (object.hasOwnProperty(property)) { + if (fn.call(scope || object, property, object[property], object) === false) { + return; + } + } + } + }, + + + merge: function(destination) { + var i = 1, + ln = arguments.length, + mergeFn = ExtObject.merge, + cloneFn = Ext.clone, + object, key, value, sourceKey; + + for (; i < ln; i++) { + object = arguments[i]; + + for (key in object) { + value = object[key]; + if (value && value.constructor === Object) { + sourceKey = destination[key]; + if (sourceKey && sourceKey.constructor === Object) { + mergeFn(sourceKey, value); + } + else { + destination[key] = cloneFn(value); + } + } + else { + destination[key] = value; + } + } + } + + return destination; + }, + + + mergeIf: function(destination) { + var i = 1, + ln = arguments.length, + cloneFn = Ext.clone, + object, key, value; + + for (; i < ln; i++) { + object = arguments[i]; + + for (key in object) { + if (!(key in destination)) { + value = object[key]; + + if (value && value.constructor === Object) { + destination[key] = cloneFn(value); + } + else { + destination[key] = value; + } + } + } + } + + return destination; + }, + + + getKey: function(object, value) { + for (var property in object) { + if (object.hasOwnProperty(property) && object[property] === value) { + return property; + } + } + + return null; + }, + + + getValues: function(object) { + var values = [], + property; + + for (property in object) { + if (object.hasOwnProperty(property)) { + values.push(object[property]); + } + } + + return values; + }, + + + getKeys: (typeof Object.keys == 'function') + ? function(object){ + if (!object) { + return []; + } + return Object.keys(object); + } + : function(object) { + var keys = [], + property; + + for (property in object) { + if (object.hasOwnProperty(property)) { + keys.push(property); + } + } + + return keys; + }, + + + getSize: function(object) { + var size = 0, + property; + + for (property in object) { + if (object.hasOwnProperty(property)) { + size++; + } + } + + return size; + }, + + + isEmpty: function(object){ + for (var key in object) { + if (object.hasOwnProperty(key)) { + return false; + } + } + return true; + }, + + + equals: (function() { + var check = function(o1, o2) { + var key; + + for (key in o1) { + if (o1.hasOwnProperty(key)) { + if (o1[key] !== o2[key]) { + return false; + } + } + } + return true; + }; + + return function(object1, object2) { + + + if (object1 === object2) { + return true; + } if (object1 && object2) { + + + return check(object1, object2) && check(object2, object1); + } else if (!object1 && !object2) { + return object1 === object2; + } else { + return false; + } + }; + })(), + + + classify: function(object) { + var prototype = object, + objectProperties = [], + propertyClassesMap = {}, + objectClass = function() { + var i = 0, + ln = objectProperties.length, + property; + + for (; i < ln; i++) { + property = objectProperties[i]; + this[property] = new propertyClassesMap[property](); + } + }, + key, value; + + for (key in object) { + if (object.hasOwnProperty(key)) { + value = object[key]; + + if (value && value.constructor === Object) { + objectProperties.push(key); + propertyClassesMap[key] = ExtObject.classify(value); + } + } + } + + objectClass.prototype = prototype; + + return objectClass; + } +}; + + +Ext.merge = Ext.Object.merge; + + +Ext.mergeIf = Ext.Object.mergeIf; + + +Ext.urlEncode = function() { + var args = Ext.Array.from(arguments), + prefix = ''; + + + if ((typeof args[1] === 'string')) { + prefix = args[1] + '&'; + args[1] = false; + } + + return prefix + ExtObject.toQueryString.apply(ExtObject, args); +}; + + +Ext.urlDecode = function() { + return ExtObject.fromQueryString.apply(ExtObject, arguments); +}; + +}()); + +//@tag foundation,core + +//@require Object.js + +//@define Ext.Date + + + + + + +Ext.Date = new function() { + var utilDate = this, + stripEscapeRe = /(\\.)/g, + hourInfoRe = /([gGhHisucUOPZ]|MS)/, + dateInfoRe = /([djzmnYycU]|MS)/, + slashRe = /\\/gi, + numberTokenRe = /\{(\d+)\}/g, + MSFormatRe = new RegExp('\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/'), + code = [ + + "var me = this, dt, y, m, d, h, i, s, ms, o, O, z, zz, u, v, W, year, jan4, week1monday,", + "def = me.defaults,", + "from = Ext.Number.from,", + "results = String(input).match(me.parseRegexes[{0}]);", + + "if(results){", + "{1}", + + "if(u != null){", + "v = new Date(u * 1000);", + "}else{", + + + + "dt = me.clearTime(new Date);", + + "y = from(y, from(def.y, dt.getFullYear()));", + "m = from(m, from(def.m - 1, dt.getMonth()));", + "d = from(d, from(def.d, dt.getDate()));", + + "h = from(h, from(def.h, dt.getHours()));", + "i = from(i, from(def.i, dt.getMinutes()));", + "s = from(s, from(def.s, dt.getSeconds()));", + "ms = from(ms, from(def.ms, dt.getMilliseconds()));", + + "if(z >= 0 && y >= 0){", + + + + + + "v = me.add(new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);", + + + "v = !strict? v : (strict === true && (z <= 364 || (me.isLeapYear(v) && z <= 365))? me.add(v, me.DAY, z) : null);", + "}else if(strict === true && !me.isValid(y, m + 1, d, h, i, s, ms)){", + "v = null;", + "}else{", + "if (W) {", + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "year = y || (new Date()).getFullYear(),", + "jan4 = new Date(year, 0, 4, 0, 0, 0),", + "week1monday = new Date(jan4.getTime() - ((jan4.getDay() - 1) * 86400000));", + "v = Ext.Date.clearTime(new Date(week1monday.getTime() + ((W - 1) * 604800000)));", + "} else {", + + + "v = me.add(new Date(y < 100 ? 100 : y, m, d, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);", + "}", + "}", + "}", + "}", + + "if(v){", + + "if(zz != null){", + + "v = me.add(v, me.SECOND, -v.getTimezoneOffset() * 60 - zz);", + "}else if(o){", + + "v = me.add(v, me.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));", + "}", + "}", + + "return v;" + ].join('\n'); + + + + + function xf(format) { + var args = Array.prototype.slice.call(arguments, 1); + return format.replace(numberTokenRe, function(m, i) { + return args[i]; + }); + } + + Ext.apply(utilDate, { + + now: Date.now || function() { + return +new Date(); + }, + + + toString: function(date) { + var pad = Ext.String.leftPad; + + return date.getFullYear() + "-" + + pad(date.getMonth() + 1, 2, '0') + "-" + + pad(date.getDate(), 2, '0') + "T" + + pad(date.getHours(), 2, '0') + ":" + + pad(date.getMinutes(), 2, '0') + ":" + + pad(date.getSeconds(), 2, '0'); + }, + + + getElapsed: function(dateA, dateB) { + return Math.abs(dateA - (dateB || new Date())); + }, + + + useStrict: false, + + + formatCodeToRegex: function(character, currentGroup) { + + var p = utilDate.parseCodes[character]; + + if (p) { + p = typeof p == 'function'? p() : p; + utilDate.parseCodes[character] = p; + } + + return p ? Ext.applyIf({ + c: p.c ? xf(p.c, currentGroup || "{0}") : p.c + }, p) : { + g: 0, + c: null, + s: Ext.String.escapeRegex(character) + }; + }, + + + parseFunctions: { + "MS": function(input, strict) { + + + var r = (input || '').match(MSFormatRe); + return r ? new Date(((r[1] || '') + r[2]) * 1) : null; + }, + "time": function(input, strict) { + var num = parseInt(input, 10); + if (num || num === 0) { + return new Date(num); + } + return null; + }, + "timestamp": function(input, strict) { + var num = parseInt(input, 10); + if (num || num === 0) { + return new Date(num * 1000); + } + return null; + } + }, + parseRegexes: [], + + + formatFunctions: { + "MS": function() { + + return '\\/Date(' + this.getTime() + ')\\/'; + }, + "time": function(){ + return this.getTime().toString(); + }, + "timestamp": function(){ + return utilDate.format(this, 'U'); + } + }, + + y2kYear : 50, + + + MILLI : "ms", + + + SECOND : "s", + + + MINUTE : "mi", + + + HOUR : "h", + + + DAY : "d", + + + MONTH : "mo", + + + YEAR : "y", + + + defaults: {}, + + + + dayNames : [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + + + + + monthNames : [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + + + + + monthNumbers : { + January: 0, + Jan: 0, + February: 1, + Feb: 1, + March: 2, + Mar: 2, + April: 3, + Apr: 3, + May: 4, + June: 5, + Jun: 5, + July: 6, + Jul: 6, + August: 7, + Aug: 7, + September: 8, + Sep: 8, + October: 9, + Oct: 9, + November: 10, + Nov: 10, + December: 11, + Dec: 11 + }, + + + + + defaultFormat : "m/d/Y", + + + + getShortMonthName : function(month) { + return Ext.Date.monthNames[month].substring(0, 3); + }, + + + + + getShortDayName : function(day) { + return Ext.Date.dayNames[day].substring(0, 3); + }, + + + + + getMonthNumber : function(name) { + + return Ext.Date.monthNumbers[name.substring(0, 1).toUpperCase() + name.substring(1, 3).toLowerCase()]; + }, + + + + formatContainsHourInfo : function(format){ + return hourInfoRe.test(format.replace(stripEscapeRe, '')); + }, + + + formatContainsDateInfo : function(format){ + return dateInfoRe.test(format.replace(stripEscapeRe, '')); + }, + + + unescapeFormat: function(format) { + + + + return format.replace(slashRe, ''); + }, + + + formatCodes : { + d: "Ext.String.leftPad(this.getDate(), 2, '0')", + D: "Ext.Date.getShortDayName(this.getDay())", + j: "this.getDate()", + l: "Ext.Date.dayNames[this.getDay()]", + N: "(this.getDay() ? this.getDay() : 7)", + S: "Ext.Date.getSuffix(this)", + w: "this.getDay()", + z: "Ext.Date.getDayOfYear(this)", + W: "Ext.String.leftPad(Ext.Date.getWeekOfYear(this), 2, '0')", + F: "Ext.Date.monthNames[this.getMonth()]", + m: "Ext.String.leftPad(this.getMonth() + 1, 2, '0')", + M: "Ext.Date.getShortMonthName(this.getMonth())", + n: "(this.getMonth() + 1)", + t: "Ext.Date.getDaysInMonth(this)", + L: "(Ext.Date.isLeapYear(this) ? 1 : 0)", + o: "(this.getFullYear() + (Ext.Date.getWeekOfYear(this) == 1 && this.getMonth() > 0 ? +1 : (Ext.Date.getWeekOfYear(this) >= 52 && this.getMonth() < 11 ? -1 : 0)))", + Y: "Ext.String.leftPad(this.getFullYear(), 4, '0')", + y: "('' + this.getFullYear()).substring(2, 4)", + a: "(this.getHours() < 12 ? 'am' : 'pm')", + A: "(this.getHours() < 12 ? 'AM' : 'PM')", + g: "((this.getHours() % 12) ? this.getHours() % 12 : 12)", + G: "this.getHours()", + h: "Ext.String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')", + H: "Ext.String.leftPad(this.getHours(), 2, '0')", + i: "Ext.String.leftPad(this.getMinutes(), 2, '0')", + s: "Ext.String.leftPad(this.getSeconds(), 2, '0')", + u: "Ext.String.leftPad(this.getMilliseconds(), 3, '0')", + O: "Ext.Date.getGMTOffset(this)", + P: "Ext.Date.getGMTOffset(this, true)", + T: "Ext.Date.getTimezone(this)", + Z: "(this.getTimezoneOffset() * -60)", + + c: function() { + var c, code, i, l, e; + for (c = "Y-m-dTH:i:sP", code = [], i = 0, l = c.length; i < l; ++i) { + e = c.charAt(i); + code.push(e == "T" ? "'T'" : utilDate.getFormatCode(e)); + } + return code.join(" + "); + }, + + + U: "Math.round(this.getTime() / 1000)" + }, + + + isValid : function(y, m, d, h, i, s, ms) { + + h = h || 0; + i = i || 0; + s = s || 0; + ms = ms || 0; + + + var dt = utilDate.add(new Date(y < 100 ? 100 : y, m - 1, d, h, i, s, ms), utilDate.YEAR, y < 100 ? y - 100 : 0); + + return y == dt.getFullYear() && + m == dt.getMonth() + 1 && + d == dt.getDate() && + h == dt.getHours() && + i == dt.getMinutes() && + s == dt.getSeconds() && + ms == dt.getMilliseconds(); + }, + + + parse : function(input, format, strict) { + var p = utilDate.parseFunctions; + if (p[format] == null) { + utilDate.createParser(format); + } + return p[format].call(utilDate, input, Ext.isDefined(strict) ? strict : utilDate.useStrict); + }, + + + parseDate: function(input, format, strict){ + return utilDate.parse(input, format, strict); + }, + + + + getFormatCode : function(character) { + var f = utilDate.formatCodes[character]; + + if (f) { + f = typeof f == 'function'? f() : f; + utilDate.formatCodes[character] = f; + } + + + return f || ("'" + Ext.String.escape(character) + "'"); + }, + + + createFormat : function(format) { + var code = [], + special = false, + ch = '', + i; + + for (i = 0; i < format.length; ++i) { + ch = format.charAt(i); + if (!special && ch == "\\") { + special = true; + } else if (special) { + special = false; + code.push("'" + Ext.String.escape(ch) + "'"); + } else { + code.push(utilDate.getFormatCode(ch)); + } + } + utilDate.formatFunctions[format] = Ext.functionFactory("return " + code.join('+')); + }, + + + createParser : function(format) { + var regexNum = utilDate.parseRegexes.length, + currentGroup = 1, + calc = [], + regex = [], + special = false, + ch = "", + i = 0, + len = format.length, + atEnd = [], + obj; + + for (; i < len; ++i) { + ch = format.charAt(i); + if (!special && ch == "\\") { + special = true; + } else if (special) { + special = false; + regex.push(Ext.String.escape(ch)); + } else { + obj = utilDate.formatCodeToRegex(ch, currentGroup); + currentGroup += obj.g; + regex.push(obj.s); + if (obj.g && obj.c) { + if (obj.calcAtEnd) { + atEnd.push(obj.c); + } else { + calc.push(obj.c); + } + } + } + } + + calc = calc.concat(atEnd); + + utilDate.parseRegexes[regexNum] = new RegExp("^" + regex.join('') + "$", 'i'); + utilDate.parseFunctions[format] = Ext.functionFactory("input", "strict", xf(code, regexNum, calc.join(''))); + }, + + + parseCodes : { + + d: { + g:1, + c:"d = parseInt(results[{0}], 10);\n", + s:"(3[0-1]|[1-2][0-9]|0[1-9])" + }, + j: { + g:1, + c:"d = parseInt(results[{0}], 10);\n", + s:"(3[0-1]|[1-2][0-9]|[1-9])" + }, + D: function() { + for (var a = [], i = 0; i < 7; a.push(utilDate.getShortDayName(i)), ++i); + return { + g:0, + c:null, + s:"(?:" + a.join("|") +")" + }; + }, + l: function() { + return { + g:0, + c:null, + s:"(?:" + utilDate.dayNames.join("|") + ")" + }; + }, + N: { + g:0, + c:null, + s:"[1-7]" + }, + + S: { + g:0, + c:null, + s:"(?:st|nd|rd|th)" + }, + + w: { + g:0, + c:null, + s:"[0-6]" + }, + z: { + g:1, + c:"z = parseInt(results[{0}], 10);\n", + s:"(\\d{1,3})" + }, + W: { + g:1, + c:"W = parseInt(results[{0}], 10);\n", + s:"(\\d{2})" + }, + F: function() { + return { + g:1, + c:"m = parseInt(me.getMonthNumber(results[{0}]), 10);\n", + s:"(" + utilDate.monthNames.join("|") + ")" + }; + }, + M: function() { + for (var a = [], i = 0; i < 12; a.push(utilDate.getShortMonthName(i)), ++i); + return Ext.applyIf({ + s:"(" + a.join("|") + ")" + }, utilDate.formatCodeToRegex("F")); + }, + m: { + g:1, + c:"m = parseInt(results[{0}], 10) - 1;\n", + s:"(1[0-2]|0[1-9])" + }, + n: { + g:1, + c:"m = parseInt(results[{0}], 10) - 1;\n", + s:"(1[0-2]|[1-9])" + }, + t: { + g:0, + c:null, + s:"(?:\\d{2})" + }, + L: { + g:0, + c:null, + s:"(?:1|0)" + }, + o: { + g: 1, + c: "y = parseInt(results[{0}], 10);\n", + s: "(\\d{4})" + + }, + Y: { + g:1, + c:"y = parseInt(results[{0}], 10);\n", + s:"(\\d{4})" + }, + y: { + g:1, + c:"var ty = parseInt(results[{0}], 10);\n" + + "y = ty > me.y2kYear ? 1900 + ty : 2000 + ty;\n", + s:"(\\d{1,2})" + }, + + + a: { + g:1, + c:"if (/(am)/i.test(results[{0}])) {\n" + + "if (!h || h == 12) { h = 0; }\n" + + "} else { if (!h || h < 12) { h = (h || 0) + 12; }}", + s:"(am|pm|AM|PM)", + calcAtEnd: true + }, + + + A: { + g:1, + c:"if (/(am)/i.test(results[{0}])) {\n" + + "if (!h || h == 12) { h = 0; }\n" + + "} else { if (!h || h < 12) { h = (h || 0) + 12; }}", + s:"(AM|PM|am|pm)", + calcAtEnd: true + }, + + g: { + g:1, + c:"h = parseInt(results[{0}], 10);\n", + s:"(1[0-2]|[0-9])" + }, + G: { + g:1, + c:"h = parseInt(results[{0}], 10);\n", + s:"(2[0-3]|1[0-9]|[0-9])" + }, + h: { + g:1, + c:"h = parseInt(results[{0}], 10);\n", + s:"(1[0-2]|0[1-9])" + }, + H: { + g:1, + c:"h = parseInt(results[{0}], 10);\n", + s:"(2[0-3]|[0-1][0-9])" + }, + i: { + g:1, + c:"i = parseInt(results[{0}], 10);\n", + s:"([0-5][0-9])" + }, + s: { + g:1, + c:"s = parseInt(results[{0}], 10);\n", + s:"([0-5][0-9])" + }, + u: { + g:1, + c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n", + s:"(\\d+)" + }, + O: { + g:1, + c:[ + "o = results[{0}];", + "var sn = o.substring(0,1),", + "hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),", + "mn = o.substring(3,5) % 60;", + "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n" + ].join("\n"), + s: "([+-]\\d{4})" + }, + P: { + g:1, + c:[ + "o = results[{0}];", + "var sn = o.substring(0,1),", + "hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),", + "mn = o.substring(4,6) % 60;", + "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n" + ].join("\n"), + s: "([+-]\\d{2}:\\d{2})" + }, + T: { + g:0, + c:null, + s:"[A-Z]{1,5}" + }, + Z: { + g:1, + c:"zz = results[{0}] * 1;\n" + + "zz = (-43200 <= zz && zz <= 50400)? zz : null;\n", + s:"([+-]?\\d{1,5})" + }, + c: function() { + var calc = [], + arr = [ + utilDate.formatCodeToRegex("Y", 1), + utilDate.formatCodeToRegex("m", 2), + utilDate.formatCodeToRegex("d", 3), + utilDate.formatCodeToRegex("H", 4), + utilDate.formatCodeToRegex("i", 5), + utilDate.formatCodeToRegex("s", 6), + {c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"}, + {c:[ + "if(results[8]) {", + "if(results[8] == 'Z'){", + "zz = 0;", + "}else if (results[8].indexOf(':') > -1){", + utilDate.formatCodeToRegex("P", 8).c, + "}else{", + utilDate.formatCodeToRegex("O", 8).c, + "}", + "}" + ].join('\n')} + ], + i, + l; + + for (i = 0, l = arr.length; i < l; ++i) { + calc.push(arr[i].c); + } + + return { + g:1, + c:calc.join(""), + s:[ + arr[0].s, + "(?:", "-", arr[1].s, + "(?:", "-", arr[2].s, + "(?:", + "(?:T| )?", + arr[3].s, ":", arr[4].s, + "(?::", arr[5].s, ")?", + "(?:(?:\\.|,)(\\d+))?", + "(Z|(?:[-+]\\d{2}(?::)?\\d{2}))?", + ")?", + ")?", + ")?" + ].join("") + }; + }, + U: { + g:1, + c:"u = parseInt(results[{0}], 10);\n", + s:"(-?\\d+)" + } + }, + + + + dateFormat: function(date, format) { + return utilDate.format(date, format); + }, + + + isEqual: function(date1, date2) { + + if (date1 && date2) { + return (date1.getTime() === date2.getTime()); + } + + return !(date1 || date2); + }, + + + format: function(date, format) { + var formatFunctions = utilDate.formatFunctions; + + if (!Ext.isDate(date)) { + return ''; + } + + if (formatFunctions[format] == null) { + utilDate.createFormat(format); + } + + return formatFunctions[format].call(date) + ''; + }, + + + getTimezone : function(date) { + + + + + + + + + + + + + return date.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,5})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/, "$1$2").replace(/[^A-Z]/g, ""); + }, + + + getGMTOffset : function(date, colon) { + var offset = date.getTimezoneOffset(); + return (offset > 0 ? "-" : "+") + + Ext.String.leftPad(Math.floor(Math.abs(offset) / 60), 2, "0") + + (colon ? ":" : "") + + Ext.String.leftPad(Math.abs(offset % 60), 2, "0"); + }, + + + getDayOfYear: function(date) { + var num = 0, + d = Ext.Date.clone(date), + m = date.getMonth(), + i; + + for (i = 0, d.setDate(1), d.setMonth(0); i < m; d.setMonth(++i)) { + num += utilDate.getDaysInMonth(d); + } + return num + date.getDate() - 1; + }, + + + getWeekOfYear : (function() { + + var ms1d = 864e5, + ms7d = 7 * ms1d; + + return function(date) { + var DC3 = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate() + 3) / ms1d, + AWN = Math.floor(DC3 / 7), + Wyr = new Date(AWN * ms7d).getUTCFullYear(); + + return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1; + }; + }()), + + + isLeapYear : function(date) { + var year = date.getFullYear(); + return !!((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year))); + }, + + + getFirstDayOfMonth : function(date) { + var day = (date.getDay() - (date.getDate() - 1)) % 7; + return (day < 0) ? (day + 7) : day; + }, + + + getLastDayOfMonth : function(date) { + return utilDate.getLastDateOfMonth(date).getDay(); + }, + + + + getFirstDateOfMonth : function(date) { + return new Date(date.getFullYear(), date.getMonth(), 1); + }, + + + getLastDateOfMonth : function(date) { + return new Date(date.getFullYear(), date.getMonth(), utilDate.getDaysInMonth(date)); + }, + + + getDaysInMonth: (function() { + var daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + + return function(date) { + var m = date.getMonth(); + + return m == 1 && utilDate.isLeapYear(date) ? 29 : daysInMonth[m]; + }; + }()), + + + + getSuffix : function(date) { + switch (date.getDate()) { + case 1: + case 21: + case 31: + return "st"; + case 2: + case 22: + return "nd"; + case 3: + case 23: + return "rd"; + default: + return "th"; + } + }, + + + + clone : function(date) { + return new Date(date.getTime()); + }, + + + isDST : function(date) { + + + return new Date(date.getFullYear(), 0, 1).getTimezoneOffset() != date.getTimezoneOffset(); + }, + + + clearTime : function(date, clone) { + if (clone) { + return Ext.Date.clearTime(Ext.Date.clone(date)); + } + + + var d = date.getDate(), + hr, + c; + + + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + + if (date.getDate() != d) { + + + + + for (hr = 1, c = utilDate.add(date, Ext.Date.HOUR, hr); c.getDate() != d; hr++, c = utilDate.add(date, Ext.Date.HOUR, hr)); + + date.setDate(d); + date.setHours(c.getHours()); + } + + return date; + }, + + + add : function(date, interval, value) { + var d = Ext.Date.clone(date), + Date = Ext.Date, + day, decimalValue, base = 0; + if (!interval || value === 0) { + return d; + } + + decimalValue = value - parseInt(value, 10); + value = parseInt(value, 10); + + if (value) { + switch(interval.toLowerCase()) { + + + + + + + + + + + + + + + + + + + case Ext.Date.MILLI: + d.setTime(d.getTime() + value); + break; + case Ext.Date.SECOND: + d.setTime(d.getTime() + value * 1000); + break; + case Ext.Date.MINUTE: + d.setTime(d.getTime() + value * 60 * 1000); + break; + case Ext.Date.HOUR: + d.setTime(d.getTime() + value * 60 * 60 * 1000); + break; + case Ext.Date.DAY: + d.setDate(d.getDate() + value); + break; + case Ext.Date.MONTH: + day = date.getDate(); + if (day > 28) { + day = Math.min(day, Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(date), Ext.Date.MONTH, value)).getDate()); + } + d.setDate(day); + d.setMonth(date.getMonth() + value); + break; + case Ext.Date.YEAR: + day = date.getDate(); + if (day > 28) { + day = Math.min(day, Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(date), Ext.Date.YEAR, value)).getDate()); + } + d.setDate(day); + d.setFullYear(date.getFullYear() + value); + break; + } + } + + if (decimalValue) { + switch (interval.toLowerCase()) { + case Ext.Date.MILLI: base = 1; break; + case Ext.Date.SECOND: base = 1000; break; + case Ext.Date.MINUTE: base = 1000*60; break; + case Ext.Date.HOUR: base = 1000*60*60; break; + case Ext.Date.DAY: base = 1000*60*60*24; break; + + case Ext.Date.MONTH: + day = utilDate.getDaysInMonth(d); + base = 1000*60*60*24*day; + break; + + case Ext.Date.YEAR: + day = (utilDate.isLeapYear(d) ? 366 : 365); + base = 1000*60*60*24*day; + break; + } + if (base) { + d.setTime(d.getTime() + base * decimalValue); + } + } + + return d; + }, + + + subtract: function(date, interval, value){ + return utilDate.add(date, interval, -value); + }, + + + between : function(date, start, end) { + var t = date.getTime(); + return start.getTime() <= t && t <= end.getTime(); + }, + + + compat: function() { + var nativeDate = window.Date, + p, + statics = ['useStrict', 'formatCodeToRegex', 'parseFunctions', 'parseRegexes', 'formatFunctions', 'y2kYear', 'MILLI', 'SECOND', 'MINUTE', 'HOUR', 'DAY', 'MONTH', 'YEAR', 'defaults', 'dayNames', 'monthNames', 'monthNumbers', 'getShortMonthName', 'getShortDayName', 'getMonthNumber', 'formatCodes', 'isValid', 'parseDate', 'getFormatCode', 'createFormat', 'createParser', 'parseCodes'], + proto = ['dateFormat', 'format', 'getTimezone', 'getGMTOffset', 'getDayOfYear', 'getWeekOfYear', 'isLeapYear', 'getFirstDayOfMonth', 'getLastDayOfMonth', 'getDaysInMonth', 'getSuffix', 'clone', 'isDST', 'clearTime', 'add', 'between'], + sLen = statics.length, + pLen = proto.length, + stat, prot, s; + + + for (s = 0; s < sLen; s++) { + stat = statics[s]; + nativeDate[stat] = utilDate[stat]; + } + + + for (p = 0; p < pLen; p++) { + prot = proto[p]; + nativeDate.prototype[prot] = function() { + var args = Array.prototype.slice.call(arguments); + args.unshift(this); + return utilDate[prot].apply(utilDate, args); + }; + } + } + }); +}; + +//@tag foundation,core + +//@require ../lang/Date.js + + + +(function(flexSetter) { + +var noArgs = [], + Base = function(){}, + hookFunctionFactory = function(hookFunction, underriddenFunction, methodName, owningClass) { + var result = function() { + var result = this.callParent(arguments); + hookFunction.apply(this, arguments); + return result; + }; + result.$name = methodName; + result.$owner = owningClass; + if (underriddenFunction) { + result.$previous = underriddenFunction.$previous; + underriddenFunction.$previous = result; + } + return result; + }; + + + Ext.apply(Base, { + $className: 'Ext.Base', + + $isClass: true, + + + create: function() { + return Ext.create.apply(Ext, [this].concat(Array.prototype.slice.call(arguments, 0))); + }, + + + extend: function(parent) { + var parentPrototype = parent.prototype, + basePrototype, prototype, i, ln, name, statics; + + prototype = this.prototype = Ext.Object.chain(parentPrototype); + prototype.self = this; + + this.superclass = prototype.superclass = parentPrototype; + + if (!parent.$isClass) { + basePrototype = Ext.Base.prototype; + + for (i in basePrototype) { + if (i in prototype) { + prototype[i] = basePrototype[i]; + } + } + } + + + statics = parentPrototype.$inheritableStatics; + + if (statics) { + for (i = 0,ln = statics.length; i < ln; i++) { + name = statics[i]; + + if (!this.hasOwnProperty(name)) { + this[name] = parent[name]; + } + } + } + + if (parent.$onExtended) { + this.$onExtended = parent.$onExtended.slice(); + } + + prototype.config = new prototype.configClass(); + prototype.initConfigList = prototype.initConfigList.slice(); + prototype.initConfigMap = Ext.clone(prototype.initConfigMap); + prototype.configMap = Ext.Object.chain(prototype.configMap); + }, + + + $onExtended: [], + + + triggerExtended: function() { + + var callbacks = this.$onExtended, + ln = callbacks.length, + i, callback; + + if (ln > 0) { + for (i = 0; i < ln; i++) { + callback = callbacks[i]; + callback.fn.apply(callback.scope || this, arguments); + } + } + }, + + + onExtended: function(fn, scope) { + this.$onExtended.push({ + fn: fn, + scope: scope + }); + + return this; + }, + + + addConfig: function(config, fullMerge) { + var prototype = this.prototype, + configNameCache = Ext.Class.configNameCache, + hasConfig = prototype.configMap, + initConfigList = prototype.initConfigList, + initConfigMap = prototype.initConfigMap, + defaultConfig = prototype.config, + initializedName, name, value; + + for (name in config) { + if (config.hasOwnProperty(name)) { + if (!hasConfig[name]) { + hasConfig[name] = true; + } + + value = config[name]; + + initializedName = configNameCache[name].initialized; + + if (!initConfigMap[name] && value !== null && !prototype[initializedName]) { + initConfigMap[name] = true; + initConfigList.push(name); + } + } + } + + if (fullMerge) { + Ext.merge(defaultConfig, config); + } + else { + Ext.mergeIf(defaultConfig, config); + } + + prototype.configClass = Ext.Object.classify(defaultConfig); + }, + + + addStatics: function(members) { + var member, name; + + for (name in members) { + if (members.hasOwnProperty(name)) { + member = members[name]; + if (typeof member == 'function' && !member.$isClass && member !== Ext.emptyFn && member !== Ext.identityFn) { + member.$owner = this; + member.$name = name; + } + this[name] = member; + } + } + + return this; + }, + + + addInheritableStatics: function(members) { + var inheritableStatics, + hasInheritableStatics, + prototype = this.prototype, + name, member; + + inheritableStatics = prototype.$inheritableStatics; + hasInheritableStatics = prototype.$hasInheritableStatics; + + if (!inheritableStatics) { + inheritableStatics = prototype.$inheritableStatics = []; + hasInheritableStatics = prototype.$hasInheritableStatics = {}; + } + + for (name in members) { + if (members.hasOwnProperty(name)) { + member = members[name]; + this[name] = member; + + if (!hasInheritableStatics[name]) { + hasInheritableStatics[name] = true; + inheritableStatics.push(name); + } + } + } + + return this; + }, + + + addMembers: function(members) { + var prototype = this.prototype, + enumerables = Ext.enumerables, + names = [], + i, ln, name, member; + + for (name in members) { + names.push(name); + } + + if (enumerables) { + names.push.apply(names, enumerables); + } + + for (i = 0,ln = names.length; i < ln; i++) { + name = names[i]; + + if (members.hasOwnProperty(name)) { + member = members[name]; + + if (typeof member == 'function' && !member.$isClass && member !== Ext.emptyFn && member !== Ext.identityFn) { + member.$owner = this; + member.$name = name; + } + + prototype[name] = member; + } + } + + return this; + }, + + + addMember: function(name, member) { + if (typeof member == 'function' && !member.$isClass && member !== Ext.emptyFn && member !== Ext.identityFn) { + member.$owner = this; + member.$name = name; + } + + this.prototype[name] = member; + return this; + }, + + + implement: function() { + this.addMembers.apply(this, arguments); + }, + + + borrow: function(fromClass, members) { + + var prototype = this.prototype, + fromPrototype = fromClass.prototype, + i, ln, name, fn, toBorrow; + + members = Ext.Array.from(members); + + for (i = 0,ln = members.length; i < ln; i++) { + name = members[i]; + + toBorrow = fromPrototype[name]; + + if (typeof toBorrow == 'function') { + fn = Ext.Function.clone(toBorrow); + + + fn.$owner = this; + fn.$name = name; + + prototype[name] = fn; + } + else { + prototype[name] = toBorrow; + } + } + + return this; + }, + + + override: function(members) { + var me = this, + enumerables = Ext.enumerables, + target = me.prototype, + cloneFunction = Ext.Function.clone, + name, index, member, statics, names, previous; + + if (arguments.length === 2) { + name = members; + members = {}; + members[name] = arguments[1]; + enumerables = null; + } + + do { + names = []; + statics = null; + + for (name in members) { + if (name == 'statics') { + statics = members[name]; + } else if (name == 'inheritableStatics'){ + me.addInheritableStatics(members[name]); + } else if (name == 'config') { + me.addConfig(members[name], true); + } else { + names.push(name); + } + } + + if (enumerables) { + names.push.apply(names, enumerables); + } + + for (index = names.length; index--; ) { + name = names[index]; + + if (members.hasOwnProperty(name)) { + member = members[name]; + + if (typeof member == 'function' && !member.$className && member !== Ext.emptyFn && member !== Ext.identityFn) { + if (typeof member.$owner != 'undefined') { + member = cloneFunction(member); + } + + + member.$owner = me; + member.$name = name; + + previous = target[name]; + if (previous) { + member.$previous = previous; + } + } + + target[name] = member; + } + } + + target = me; + members = statics; + } while (members); + + return this; + }, + + + callParent: function(args) { + var method; + + + return (method = this.callParent.caller) && (method.$previous || + ((method = method.$owner ? method : method.caller) && + method.$owner.superclass.self[method.$name])).apply(this, args || noArgs); + }, + + + callSuper: function(args) { + var method; + + + return (method = this.callSuper.caller) && + ((method = method.$owner ? method : method.caller) && + method.$owner.superclass.self[method.$name]).apply(this, args || noArgs); + }, + + + mixin: function(name, mixinClass) { + var me = this, + mixin = mixinClass.prototype, + prototype = me.prototype, + key, statics, i, ln, staticName, + mixinValue, hookKey, hookFunction; + + if (typeof mixin.onClassMixedIn != 'undefined') { + mixin.onClassMixedIn.call(mixinClass, me); + } + + if (!prototype.hasOwnProperty('mixins')) { + if ('mixins' in prototype) { + prototype.mixins = Ext.Object.chain(prototype.mixins); + } + else { + prototype.mixins = {}; + } + } + + for (key in mixin) { + mixinValue = mixin[key]; + if (key === 'mixins') { + Ext.merge(prototype.mixins, mixinValue); + } + else if (key === 'xhooks') { + for (hookKey in mixinValue) { + hookFunction = mixinValue[hookKey]; + + + hookFunction.$previous = Ext.emptyFn; + + if (prototype.hasOwnProperty(hookKey)) { + + + + + hookFunctionFactory(hookFunction, prototype[hookKey], hookKey, me); + } else { + + + prototype[hookKey] = hookFunctionFactory(hookFunction, null, hookKey, me); + } + } + } + else if (!(key === 'mixinId' || key === 'config') && (prototype[key] === undefined)) { + prototype[key] = mixinValue; + } + } + + + statics = mixin.$inheritableStatics; + + if (statics) { + for (i = 0, ln = statics.length; i < ln; i++) { + staticName = statics[i]; + + if (!me.hasOwnProperty(staticName)) { + me[staticName] = mixinClass[staticName]; + } + } + } + + if ('config' in mixin) { + me.addConfig(mixin.config, false); + } + + prototype.mixins[name] = mixin; + return me; + }, + + + getName: function() { + return Ext.getClassName(this); + }, + + + createAlias: flexSetter(function(alias, origin) { + this.override(alias, function() { + return this[origin].apply(this, arguments); + }); + }), + + + addXtype: function(xtype) { + var prototype = this.prototype, + xtypesMap = prototype.xtypesMap, + xtypes = prototype.xtypes, + xtypesChain = prototype.xtypesChain; + + if (!prototype.hasOwnProperty('xtypesMap')) { + xtypesMap = prototype.xtypesMap = Ext.merge({}, prototype.xtypesMap || {}); + xtypes = prototype.xtypes = prototype.xtypes ? [].concat(prototype.xtypes) : []; + xtypesChain = prototype.xtypesChain = prototype.xtypesChain ? [].concat(prototype.xtypesChain) : []; + prototype.xtype = xtype; + } + + if (!xtypesMap[xtype]) { + xtypesMap[xtype] = true; + xtypes.push(xtype); + xtypesChain.push(xtype); + Ext.ClassManager.setAlias(this, 'widget.' + xtype); + } + + return this; + } + }); + + Base.implement({ + + isInstance: true, + + + $className: 'Ext.Base', + + + configClass: Ext.emptyFn, + + + initConfigList: [], + + + configMap: {}, + + + initConfigMap: {}, + + + statics: function() { + var method = this.statics.caller, + self = this.self; + + if (!method) { + return self; + } + + return method.$owner; + }, + + + callParent: function(args) { + + + + + var method, + superMethod = (method = this.callParent.caller) && (method.$previous || + ((method = method.$owner ? method : method.caller) && + method.$owner.superclass[method.$name])); + + + return superMethod.apply(this, args || noArgs); + }, + + + callSuper: function(args) { + + + + + var method, + superMethod = (method = this.callSuper.caller) && + ((method = method.$owner ? method : method.caller) && + method.$owner.superclass[method.$name]); + + + return superMethod.apply(this, args || noArgs); + }, + + + self: Base, + + + constructor: function() { + return this; + }, + + + initConfig: function(config) { + var instanceConfig = config, + configNameCache = Ext.Class.configNameCache, + defaultConfig = new this.configClass(), + defaultConfigList = this.initConfigList, + hasConfig = this.configMap, + nameMap, i, ln, name, initializedName; + + this.initConfig = Ext.emptyFn; + + this.initialConfig = instanceConfig || {}; + + this.config = config = (instanceConfig) ? Ext.merge(defaultConfig, config) : defaultConfig; + + if (instanceConfig) { + defaultConfigList = defaultConfigList.slice(); + + for (name in instanceConfig) { + if (hasConfig[name]) { + if (instanceConfig[name] !== null) { + defaultConfigList.push(name); + this[configNameCache[name].initialized] = false; + } + } + } + } + + for (i = 0,ln = defaultConfigList.length; i < ln; i++) { + name = defaultConfigList[i]; + nameMap = configNameCache[name]; + initializedName = nameMap.initialized; + + if (!this[initializedName]) { + this[initializedName] = true; + this[nameMap.set].call(this, config[name]); + } + } + + return this; + }, + + + hasConfig: function(name) { + return Boolean(this.configMap[name]); + }, + + + setConfig: function(config, applyIfNotSet) { + if (!config) { + return this; + } + + var configNameCache = Ext.Class.configNameCache, + currentConfig = this.config, + hasConfig = this.configMap, + initialConfig = this.initialConfig, + name, value; + + applyIfNotSet = Boolean(applyIfNotSet); + + for (name in config) { + if (applyIfNotSet && initialConfig.hasOwnProperty(name)) { + continue; + } + + value = config[name]; + currentConfig[name] = value; + + if (hasConfig[name]) { + this[configNameCache[name].set](value); + } + } + + return this; + }, + + + getConfig: function(name) { + var configNameCache = Ext.Class.configNameCache; + + return this[configNameCache[name].get](); + }, + + + getInitialConfig: function(name) { + var config = this.config; + + if (!name) { + return config; + } + else { + return config[name]; + } + }, + + + onConfigUpdate: function(names, callback, scope) { + var self = this.self, + i, ln, name, + updaterName, updater, newUpdater; + + names = Ext.Array.from(names); + + scope = scope || this; + + for (i = 0,ln = names.length; i < ln; i++) { + name = names[i]; + updaterName = 'update' + Ext.String.capitalize(name); + updater = this[updaterName] || Ext.emptyFn; + newUpdater = function() { + updater.apply(this, arguments); + scope[callback].apply(scope, arguments); + }; + newUpdater.$name = updaterName; + newUpdater.$owner = self; + + this[updaterName] = newUpdater; + } + }, + + + destroy: function() { + this.destroy = Ext.emptyFn; + } + }); + + + Base.prototype.callOverridden = Base.prototype.callParent; + + Ext.Base = Base; + +}(Ext.Function.flexSetter)); + +//@tag foundation,core + +//@require Base.js + + + +(function() { + var ExtClass, + Base = Ext.Base, + baseStaticMembers = [], + baseStaticMember, baseStaticMemberLength; + + for (baseStaticMember in Base) { + if (Base.hasOwnProperty(baseStaticMember)) { + baseStaticMembers.push(baseStaticMember); + } + } + + baseStaticMemberLength = baseStaticMembers.length; + + + function makeCtor (className) { + function constructor () { + + + return this.constructor.apply(this, arguments) || null; + } + return constructor; + } + + + Ext.Class = ExtClass = function(Class, data, onCreated) { + if (typeof Class != 'function') { + onCreated = data; + data = Class; + Class = null; + } + + if (!data) { + data = {}; + } + + Class = ExtClass.create(Class, data); + + ExtClass.process(Class, data, onCreated); + + return Class; + }; + + Ext.apply(ExtClass, { + + onBeforeCreated: function(Class, data, hooks) { + + Class.addMembers(data); + + hooks.onCreated.call(Class, Class); + + }, + + + create: function(Class, data) { + var name, i; + + if (!Class) { + Class = makeCtor( + ); + } + + for (i = 0; i < baseStaticMemberLength; i++) { + name = baseStaticMembers[i]; + Class[name] = Base[name]; + } + + return Class; + }, + + + process: function(Class, data, onCreated) { + var preprocessorStack = data.preprocessors || ExtClass.defaultPreprocessors, + registeredPreprocessors = this.preprocessors, + hooks = { + onBeforeCreated: this.onBeforeCreated + }, + preprocessors = [], + preprocessor, preprocessorsProperties, + i, ln, j, subLn, preprocessorProperty; + + delete data.preprocessors; + + for (i = 0,ln = preprocessorStack.length; i < ln; i++) { + preprocessor = preprocessorStack[i]; + + if (typeof preprocessor == 'string') { + preprocessor = registeredPreprocessors[preprocessor]; + preprocessorsProperties = preprocessor.properties; + + if (preprocessorsProperties === true) { + preprocessors.push(preprocessor.fn); + } + else if (preprocessorsProperties) { + for (j = 0,subLn = preprocessorsProperties.length; j < subLn; j++) { + preprocessorProperty = preprocessorsProperties[j]; + + if (data.hasOwnProperty(preprocessorProperty)) { + preprocessors.push(preprocessor.fn); + break; + } + } + } + } + else { + preprocessors.push(preprocessor); + } + } + + hooks.onCreated = onCreated ? onCreated : Ext.emptyFn; + hooks.preprocessors = preprocessors; + + this.doProcess(Class, data, hooks); + }, + + doProcess: function(Class, data, hooks) { + var me = this, + preprocessors = hooks.preprocessors, + preprocessor = preprocessors.shift(), + doProcess = me.doProcess; + + for ( ; preprocessor ; preprocessor = preprocessors.shift()) { + + if (preprocessor.call(me, Class, data, hooks, doProcess) === false) { + return; + } + } + hooks.onBeforeCreated.apply(me, arguments); + }, + + + preprocessors: {}, + + + registerPreprocessor: function(name, fn, properties, position, relativeTo) { + if (!position) { + position = 'last'; + } + + if (!properties) { + properties = [name]; + } + + this.preprocessors[name] = { + name: name, + properties: properties || false, + fn: fn + }; + + this.setDefaultPreprocessorPosition(name, position, relativeTo); + + return this; + }, + + + getPreprocessor: function(name) { + return this.preprocessors[name]; + }, + + + getPreprocessors: function() { + return this.preprocessors; + }, + + + defaultPreprocessors: [], + + + getDefaultPreprocessors: function() { + return this.defaultPreprocessors; + }, + + + setDefaultPreprocessors: function(preprocessors) { + this.defaultPreprocessors = Ext.Array.from(preprocessors); + + return this; + }, + + + setDefaultPreprocessorPosition: function(name, offset, relativeName) { + var defaultPreprocessors = this.defaultPreprocessors, + index; + + if (typeof offset == 'string') { + if (offset === 'first') { + defaultPreprocessors.unshift(name); + + return this; + } + else if (offset === 'last') { + defaultPreprocessors.push(name); + + return this; + } + + offset = (offset === 'after') ? 1 : -1; + } + + index = Ext.Array.indexOf(defaultPreprocessors, relativeName); + + if (index !== -1) { + Ext.Array.splice(defaultPreprocessors, Math.max(0, index + offset), 0, name); + } + + return this; + }, + + configNameCache: {}, + + getConfigNameMap: function(name) { + var cache = this.configNameCache, + map = cache[name], + capitalizedName; + + if (!map) { + capitalizedName = name.charAt(0).toUpperCase() + name.substr(1); + + map = cache[name] = { + internal: name, + initialized: '_is' + capitalizedName + 'Initialized', + apply: 'apply' + capitalizedName, + update: 'update' + capitalizedName, + 'set': 'set' + capitalizedName, + 'get': 'get' + capitalizedName, + doSet : 'doSet' + capitalizedName, + changeEvent: name.toLowerCase() + 'change' + }; + } + + return map; + } + }); + + + ExtClass.registerPreprocessor('extend', function(Class, data, hooks) { + + var Base = Ext.Base, + basePrototype = Base.prototype, + extend = data.extend, + Parent, parentPrototype, i; + + delete data.extend; + + if (extend && extend !== Object) { + Parent = extend; + } + else { + Parent = Base; + } + + parentPrototype = Parent.prototype; + + if (!Parent.$isClass) { + for (i in basePrototype) { + if (!parentPrototype[i]) { + parentPrototype[i] = basePrototype[i]; + } + } + } + + Class.extend(Parent); + + Class.triggerExtended.apply(Class, arguments); + + if (data.onClassExtended) { + Class.onExtended(data.onClassExtended, Class); + delete data.onClassExtended; + } + + }, true); + + + ExtClass.registerPreprocessor('statics', function(Class, data) { + + Class.addStatics(data.statics); + + delete data.statics; + }); + + + ExtClass.registerPreprocessor('inheritableStatics', function(Class, data) { + + Class.addInheritableStatics(data.inheritableStatics); + + delete data.inheritableStatics; + }); + + + ExtClass.registerPreprocessor('config', function(Class, data) { + + var config = data.config, + prototype = Class.prototype; + + delete data.config; + + Ext.Object.each(config, function(name, value) { + var nameMap = ExtClass.getConfigNameMap(name), + internalName = nameMap.internal, + initializedName = nameMap.initialized, + applyName = nameMap.apply, + updateName = nameMap.update, + setName = nameMap.set, + getName = nameMap.get, + hasOwnSetter = (setName in prototype) || data.hasOwnProperty(setName), + hasOwnApplier = (applyName in prototype) || data.hasOwnProperty(applyName), + hasOwnUpdater = (updateName in prototype) || data.hasOwnProperty(updateName), + optimizedGetter, customGetter; + + if (value === null || (!hasOwnSetter && !hasOwnApplier && !hasOwnUpdater)) { + prototype[internalName] = value; + prototype[initializedName] = true; + } + else { + prototype[initializedName] = false; + } + + if (!hasOwnSetter) { + data[setName] = function(value) { + var oldValue = this[internalName], + applier = this[applyName], + updater = this[updateName]; + + if (!this[initializedName]) { + this[initializedName] = true; + } + + if (applier) { + value = applier.call(this, value, oldValue); + } + + if (typeof value != 'undefined') { + this[internalName] = value; + + if (updater && value !== oldValue) { + updater.call(this, value, oldValue); + } + } + + return this; + }; + } + + if (!(getName in prototype) || data.hasOwnProperty(getName)) { + customGetter = data[getName] || false; + + if (customGetter) { + optimizedGetter = function() { + return customGetter.apply(this, arguments); + }; + } + else { + optimizedGetter = function() { + return this[internalName]; + }; + } + + data[getName] = function() { + var currentGetter; + + if (!this[initializedName]) { + this[initializedName] = true; + this[setName](this.config[name]); + } + + currentGetter = this[getName]; + + if ('$previous' in currentGetter) { + currentGetter.$previous = optimizedGetter; + } + else { + this[getName] = optimizedGetter; + } + + return optimizedGetter.apply(this, arguments); + }; + } + }); + + Class.addConfig(config, true); + }); + + + ExtClass.registerPreprocessor('mixins', function(Class, data, hooks) { + + var mixins = data.mixins, + name, mixin, i, ln; + + delete data.mixins; + + Ext.Function.interceptBefore(hooks, 'onCreated', function() { + + if (mixins instanceof Array) { + for (i = 0,ln = mixins.length; i < ln; i++) { + mixin = mixins[i]; + name = mixin.prototype.mixinId || mixin.$className; + + Class.mixin(name, mixin); + } + } + else { + for (var mixinName in mixins) { + if (mixins.hasOwnProperty(mixinName)) { + Class.mixin(mixinName, mixins[mixinName]); + } + } + } + }); + }); + + + Ext.extend = function(Class, Parent, members) { + + if (arguments.length === 2 && Ext.isObject(Parent)) { + members = Parent; + Parent = Class; + Class = null; + } + + var cls; + + if (!Parent) { + throw new Error("[Ext.extend] Attempting to extend from a class which has not been loaded on the page."); + } + + members.extend = Parent; + members.preprocessors = [ + 'extend' + ,'statics' + ,'inheritableStatics' + ,'mixins' + ,'config' + ]; + + if (Class) { + cls = new ExtClass(Class, members); + + cls.prototype.constructor = Class; + } else { + cls = new ExtClass(members); + } + + cls.prototype.override = function(o) { + for (var m in o) { + if (o.hasOwnProperty(m)) { + this[m] = o[m]; + } + } + }; + + return cls; + }; +}()); + +//@tag foundation,core + +//@require Class.js + + + +(function(Class, alias, arraySlice, arrayFrom, global) { + + + function makeCtor () { + function constructor () { + + + return this.constructor.apply(this, arguments) || null; + } + return constructor; + } + + var Manager = Ext.ClassManager = { + + + classes: {}, + + + existCache: {}, + + + namespaceRewrites: [{ + from: 'Ext.', + to: Ext + }], + + + maps: { + alternateToName: {}, + aliasToName: {}, + nameToAliases: {}, + nameToAlternates: {} + }, + + + enableNamespaceParseCache: true, + + + namespaceParseCache: {}, + + + instantiators: [], + + + isCreated: function(className) { + var existCache = this.existCache, + i, ln, part, root, parts; + + + if (this.classes[className] || existCache[className]) { + return true; + } + + root = global; + parts = this.parseNamespace(className); + + for (i = 0, ln = parts.length; i < ln; i++) { + part = parts[i]; + + if (typeof part != 'string') { + root = part; + } else { + if (!root || !root[part]) { + return false; + } + + root = root[part]; + } + } + + existCache[className] = true; + + this.triggerCreated(className); + + return true; + }, + + + createdListeners: [], + + + nameCreatedListeners: {}, + + + triggerCreated: function(className) { + var listeners = this.createdListeners, + nameListeners = this.nameCreatedListeners, + alternateNames = this.maps.nameToAlternates[className], + names = [className], + i, ln, j, subLn, listener, name; + + for (i = 0,ln = listeners.length; i < ln; i++) { + listener = listeners[i]; + listener.fn.call(listener.scope, className); + } + + if (alternateNames) { + names.push.apply(names, alternateNames); + } + + for (i = 0,ln = names.length; i < ln; i++) { + name = names[i]; + listeners = nameListeners[name]; + + if (listeners) { + for (j = 0,subLn = listeners.length; j < subLn; j++) { + listener = listeners[j]; + listener.fn.call(listener.scope, name); + } + delete nameListeners[name]; + } + } + }, + + + onCreated: function(fn, scope, className) { + + var listeners = this.createdListeners, + nameListeners = this.nameCreatedListeners, + listener = { + fn: fn, + scope: scope + }; + + if (className) { + if (this.isCreated(className)) { + fn.call(scope, className); + return; + } + + if (!nameListeners[className]) { + nameListeners[className] = []; + } + + nameListeners[className].push(listener); + } + else { + listeners.push(listener); + } + }, + + + parseNamespace: function(namespace) { + + var cache = this.namespaceParseCache, + parts, + rewrites, + root, + name, + rewrite, from, to, i, ln; + + if (this.enableNamespaceParseCache) { + if (cache.hasOwnProperty(namespace)) { + return cache[namespace]; + } + } + + parts = []; + rewrites = this.namespaceRewrites; + root = global; + name = namespace; + + for (i = 0, ln = rewrites.length; i < ln; i++) { + rewrite = rewrites[i]; + from = rewrite.from; + to = rewrite.to; + + if (name === from || name.substring(0, from.length) === from) { + name = name.substring(from.length); + + if (typeof to != 'string') { + root = to; + } else { + parts = parts.concat(to.split('.')); + } + + break; + } + } + + parts.push(root); + + parts = parts.concat(name.split('.')); + + if (this.enableNamespaceParseCache) { + cache[namespace] = parts; + } + + return parts; + }, + + + setNamespace: function(name, value) { + var root = global, + parts = this.parseNamespace(name), + ln = parts.length - 1, + leaf = parts[ln], + i, part; + + for (i = 0; i < ln; i++) { + part = parts[i]; + + if (typeof part != 'string') { + root = part; + } else { + if (!root[part]) { + root[part] = {}; + } + + root = root[part]; + } + } + + root[leaf] = value; + + return root[leaf]; + }, + + + createNamespaces: function() { + var root = global, + parts, part, i, j, ln, subLn; + + for (i = 0, ln = arguments.length; i < ln; i++) { + parts = this.parseNamespace(arguments[i]); + + for (j = 0, subLn = parts.length; j < subLn; j++) { + part = parts[j]; + + if (typeof part != 'string') { + root = part; + } else { + if (!root[part]) { + root[part] = {}; + } + + root = root[part]; + } + } + } + + return root; + }, + + + set: function(name, value) { + var me = this, + maps = me.maps, + nameToAlternates = maps.nameToAlternates, + targetName = me.getName(value), + alternates; + + me.classes[name] = me.setNamespace(name, value); + + if (targetName && targetName !== name) { + maps.alternateToName[name] = targetName; + alternates = nameToAlternates[targetName] || (nameToAlternates[targetName] = []); + alternates.push(name); + } + + return this; + }, + + + get: function(name) { + var classes = this.classes, + root, + parts, + part, i, ln; + + if (classes[name]) { + return classes[name]; + } + + root = global; + parts = this.parseNamespace(name); + + for (i = 0, ln = parts.length; i < ln; i++) { + part = parts[i]; + + if (typeof part != 'string') { + root = part; + } else { + if (!root || !root[part]) { + return null; + } + + root = root[part]; + } + } + + return root; + }, + + + setAlias: function(cls, alias) { + var aliasToNameMap = this.maps.aliasToName, + nameToAliasesMap = this.maps.nameToAliases, + className; + + if (typeof cls == 'string') { + className = cls; + } else { + className = this.getName(cls); + } + + if (alias && aliasToNameMap[alias] !== className) { + + aliasToNameMap[alias] = className; + } + + if (!nameToAliasesMap[className]) { + nameToAliasesMap[className] = []; + } + + if (alias) { + Ext.Array.include(nameToAliasesMap[className], alias); + } + + return this; + }, + + + addNameAliasMappings: function(aliases){ + var aliasToNameMap = this.maps.aliasToName, + nameToAliasesMap = this.maps.nameToAliases, + className, aliasList, alias, i; + + for (className in aliases) { + aliasList = nameToAliasesMap[className] || + (nameToAliasesMap[className] = []); + + for (i = 0; i < aliases[className].length; i++) { + alias = aliases[className][i]; + if (!aliasToNameMap[alias]) { + aliasToNameMap[alias] = className; + aliasList.push(alias); + } + } + + } + return this; + }, + + + addNameAlternateMappings: function(alternates) { + var alternateToName = this.maps.alternateToName, + nameToAlternates = this.maps.nameToAlternates, + className, aliasList, alternate, i; + + for (className in alternates) { + aliasList = nameToAlternates[className] || + (nameToAlternates[className] = []); + + for (i = 0; i < alternates[className].length; i++) { + alternate = alternates[className]; + if (!alternateToName[alternate]) { + alternateToName[alternate] = className; + aliasList.push(alternate); + } + } + + } + return this; + }, + + + getByAlias: function(alias) { + return this.get(this.getNameByAlias(alias)); + }, + + + getNameByAlias: function(alias) { + return this.maps.aliasToName[alias] || ''; + }, + + + getNameByAlternate: function(alternate) { + return this.maps.alternateToName[alternate] || ''; + }, + + + getAliasesByName: function(name) { + return this.maps.nameToAliases[name] || []; + }, + + + getName: function(object) { + return object && object.$className || ''; + }, + + + getClass: function(object) { + return object && object.self || null; + }, + + + create: function(className, data, createdFn) { + + var ctor = makeCtor(); + if (typeof data == 'function') { + data = data(ctor); + } + + + data.$className = className; + + return new Class(ctor, data, function() { + var postprocessorStack = data.postprocessors || Manager.defaultPostprocessors, + registeredPostprocessors = Manager.postprocessors, + postprocessors = [], + postprocessor, i, ln, j, subLn, postprocessorProperties, postprocessorProperty; + + delete data.postprocessors; + + for (i = 0,ln = postprocessorStack.length; i < ln; i++) { + postprocessor = postprocessorStack[i]; + + if (typeof postprocessor == 'string') { + postprocessor = registeredPostprocessors[postprocessor]; + postprocessorProperties = postprocessor.properties; + + if (postprocessorProperties === true) { + postprocessors.push(postprocessor.fn); + } + else if (postprocessorProperties) { + for (j = 0,subLn = postprocessorProperties.length; j < subLn; j++) { + postprocessorProperty = postprocessorProperties[j]; + + if (data.hasOwnProperty(postprocessorProperty)) { + postprocessors.push(postprocessor.fn); + break; + } + } + } + } + else { + postprocessors.push(postprocessor); + } + } + + data.postprocessors = postprocessors; + data.createdFn = createdFn; + Manager.processCreate(className, this, data); + }); + }, + + processCreate: function(className, cls, clsData){ + var me = this, + postprocessor = clsData.postprocessors.shift(), + createdFn = clsData.createdFn; + + if (!postprocessor) { + + if (className) { + me.set(className, cls); + } + + if (createdFn) { + createdFn.call(cls, cls); + } + + if (className) { + me.triggerCreated(className); + } + return; + } + + if (postprocessor.call(me, className, cls, clsData, me.processCreate) !== false) { + me.processCreate(className, cls, clsData); + } + }, + + createOverride: function (className, data, createdFn) { + var me = this, + overriddenClassName = data.override, + requires = data.requires, + uses = data.uses, + classReady = function () { + var cls, temp; + + if (requires) { + temp = requires; + requires = null; + + + + + Ext.Loader.require(temp, classReady); + } else { + + + cls = me.get(overriddenClassName); + + + delete data.override; + delete data.requires; + delete data.uses; + + Ext.override(cls, data); + + + + + me.triggerCreated(className); + + if (uses) { + Ext.Loader.addUsedClasses(uses); + } + + if (createdFn) { + createdFn.call(cls); + } + } + }; + + me.existCache[className] = true; + + + me.onCreated(classReady, me, overriddenClassName); + + return me; + }, + + + instantiateByAlias: function() { + var alias = arguments[0], + args = arraySlice.call(arguments), + className = this.getNameByAlias(alias); + + if (!className) { + className = this.maps.aliasToName[alias]; + + + + Ext.syncRequire(className); + } + + args[0] = className; + + return this.instantiate.apply(this, args); + }, + + + instantiate: function() { + var name = arguments[0], + nameType = typeof name, + args = arraySlice.call(arguments, 1), + alias = name, + possibleName, cls; + + if (nameType != 'function') { + if (nameType != 'string' && args.length === 0) { + args = [name]; + name = name.xclass; + } + + + cls = this.get(name); + } + else { + cls = name; + } + + + if (!cls) { + possibleName = this.getNameByAlias(name); + + if (possibleName) { + name = possibleName; + + cls = this.get(name); + } + } + + + if (!cls) { + possibleName = this.getNameByAlternate(name); + + if (possibleName) { + name = possibleName; + + cls = this.get(name); + } + } + + + if (!cls) { + + Ext.syncRequire(name); + + cls = this.get(name); + } + + + return this.getInstantiator(args.length)(cls, args); + }, + + + dynInstantiate: function(name, args) { + args = arrayFrom(args, true); + args.unshift(name); + + return this.instantiate.apply(this, args); + }, + + + getInstantiator: function(length) { + var instantiators = this.instantiators, + instantiator, + i, + args; + + instantiator = instantiators[length]; + + if (!instantiator) { + i = length; + args = []; + + for (i = 0; i < length; i++) { + args.push('a[' + i + ']'); + } + + instantiator = instantiators[length] = new Function('c', 'a', 'return new c(' + args.join(',') + ')'); + } + + return instantiator; + }, + + + postprocessors: {}, + + + defaultPostprocessors: [], + + + registerPostprocessor: function(name, fn, properties, position, relativeTo) { + if (!position) { + position = 'last'; + } + + if (!properties) { + properties = [name]; + } + + this.postprocessors[name] = { + name: name, + properties: properties || false, + fn: fn + }; + + this.setDefaultPostprocessorPosition(name, position, relativeTo); + + return this; + }, + + + setDefaultPostprocessors: function(postprocessors) { + this.defaultPostprocessors = arrayFrom(postprocessors); + + return this; + }, + + + setDefaultPostprocessorPosition: function(name, offset, relativeName) { + var defaultPostprocessors = this.defaultPostprocessors, + index; + + if (typeof offset == 'string') { + if (offset === 'first') { + defaultPostprocessors.unshift(name); + + return this; + } + else if (offset === 'last') { + defaultPostprocessors.push(name); + + return this; + } + + offset = (offset === 'after') ? 1 : -1; + } + + index = Ext.Array.indexOf(defaultPostprocessors, relativeName); + + if (index !== -1) { + Ext.Array.splice(defaultPostprocessors, Math.max(0, index + offset), 0, name); + } + + return this; + }, + + + getNamesByExpression: function(expression) { + var nameToAliasesMap = this.maps.nameToAliases, + names = [], + name, alias, aliases, possibleName, regex, i, ln; + + + if (expression.indexOf('*') !== -1) { + expression = expression.replace(/\*/g, '(.*?)'); + regex = new RegExp('^' + expression + '$'); + + for (name in nameToAliasesMap) { + if (nameToAliasesMap.hasOwnProperty(name)) { + aliases = nameToAliasesMap[name]; + + if (name.search(regex) !== -1) { + names.push(name); + } + else { + for (i = 0, ln = aliases.length; i < ln; i++) { + alias = aliases[i]; + + if (alias.search(regex) !== -1) { + names.push(name); + break; + } + } + } + } + } + + } else { + possibleName = this.getNameByAlias(expression); + + if (possibleName) { + names.push(possibleName); + } else { + possibleName = this.getNameByAlternate(expression); + + if (possibleName) { + names.push(possibleName); + } else { + names.push(expression); + } + } + } + + return names; + } + }; + + + Manager.registerPostprocessor('alias', function(name, cls, data) { + + var aliases = data.alias, + i, ln; + + for (i = 0,ln = aliases.length; i < ln; i++) { + alias = aliases[i]; + + this.setAlias(cls, alias); + } + + }, ['xtype', 'alias']); + + + Manager.registerPostprocessor('singleton', function(name, cls, data, fn) { + + if (data.singleton) { + fn.call(this, name, new cls(), data); + } + else { + return true; + } + return false; + }); + + + Manager.registerPostprocessor('alternateClassName', function(name, cls, data) { + + var alternates = data.alternateClassName, + i, ln, alternate; + + if (!(alternates instanceof Array)) { + alternates = [alternates]; + } + + for (i = 0, ln = alternates.length; i < ln; i++) { + alternate = alternates[i]; + + + this.set(alternate, cls); + } + }); + + Ext.apply(Ext, { + + create: alias(Manager, 'instantiate'), + + + widget: function(name, config) { + + + + + + + + var xtype = name, + alias, className, T, load; + + if (typeof xtype != 'string') { + + config = name; + xtype = config.xtype; + } else { + config = config || {}; + } + + if (config.isComponent) { + return config; + } + + alias = 'widget.' + xtype; + className = Manager.getNameByAlias(alias); + + + if (!className) { + load = true; + } + + T = Manager.get(className); + if (load || !T) { + return Manager.instantiateByAlias(alias, config); + } + return new T(config); + }, + + + createByAlias: alias(Manager, 'instantiateByAlias'), + + + define: function (className, data, createdFn) { + + if (data.override) { + return Manager.createOverride.apply(Manager, arguments); + } + + return Manager.create.apply(Manager, arguments); + }, + + + + getClassName: alias(Manager, 'getName'), + + + getDisplayName: function(object) { + if (object) { + if (object.displayName) { + return object.displayName; + } + + if (object.$name && object.$class) { + return Ext.getClassName(object.$class) + '#' + object.$name; + } + + if (object.$className) { + return object.$className; + } + } + + return 'Anonymous'; + }, + + + getClass: alias(Manager, 'getClass'), + + + namespace: alias(Manager, 'createNamespaces') + }); + + + Ext.createWidget = Ext.widget; + + + Ext.ns = Ext.namespace; + + Class.registerPreprocessor('className', function(cls, data) { + if (data.$className) { + cls.$className = data.$className; + } + + }, true, 'first'); + + Class.registerPreprocessor('alias', function(cls, data) { + + var prototype = cls.prototype, + xtypes = arrayFrom(data.xtype), + aliases = arrayFrom(data.alias), + widgetPrefix = 'widget.', + widgetPrefixLength = widgetPrefix.length, + xtypesChain = Array.prototype.slice.call(prototype.xtypesChain || []), + xtypesMap = Ext.merge({}, prototype.xtypesMap || {}), + i, ln, alias, xtype; + + for (i = 0,ln = aliases.length; i < ln; i++) { + alias = aliases[i]; + + + if (alias.substring(0, widgetPrefixLength) === widgetPrefix) { + xtype = alias.substring(widgetPrefixLength); + Ext.Array.include(xtypes, xtype); + } + } + + cls.xtype = data.xtype = xtypes[0]; + data.xtypes = xtypes; + + for (i = 0,ln = xtypes.length; i < ln; i++) { + xtype = xtypes[i]; + + if (!xtypesMap[xtype]) { + xtypesMap[xtype] = true; + xtypesChain.push(xtype); + } + } + + data.xtypesChain = xtypesChain; + data.xtypesMap = xtypesMap; + + Ext.Function.interceptAfter(data, 'onClassCreated', function() { + + var mixins = prototype.mixins, + key, mixin; + + for (key in mixins) { + if (mixins.hasOwnProperty(key)) { + mixin = mixins[key]; + + xtypes = mixin.xtypes; + + if (xtypes) { + for (i = 0,ln = xtypes.length; i < ln; i++) { + xtype = xtypes[i]; + + if (!xtypesMap[xtype]) { + xtypesMap[xtype] = true; + xtypesChain.push(xtype); + } + } + } + } + } + }); + + for (i = 0,ln = xtypes.length; i < ln; i++) { + xtype = xtypes[i]; + + + Ext.Array.include(aliases, widgetPrefix + xtype); + } + + data.alias = aliases; + + }, ['xtype', 'alias']); + +}(Ext.Class, Ext.Function.alias, Array.prototype.slice, Ext.Array.from, Ext.global)); + + + +if (Ext._alternatesMetadata) { + Ext.ClassManager.addNameAlternateMappings(Ext._alternatesMetadata); + Ext._alternatesMetadata = null; +} + +if (Ext._aliasMetadata) { + Ext.ClassManager.addNameAliasMappings(Ext._aliasMetadata); + Ext._aliasMetadata = null; +} + +//@tag foundation,core + +//@require ClassManager.js + +//@define Ext.Loader + + + + +Ext.Loader = new function() { + var Loader = this, + Manager = Ext.ClassManager, + Class = Ext.Class, + flexSetter = Ext.Function.flexSetter, + alias = Ext.Function.alias, + pass = Ext.Function.pass, + defer = Ext.Function.defer, + arrayErase = Ext.Array.erase, + dependencyProperties = ['extend', 'mixins', 'requires'], + isInHistory = {}, + history = [], + slashDotSlashRe = /\/\.\//g, + dotRe = /\./g, + setPathCount = 0; + + Ext.apply(Loader, { + + + isInHistory: isInHistory, + + + history: history, + + + config: { + + enabled: false, + + + scriptChainDelay : false, + + + disableCaching: true, + + + disableCachingParam: '_dc', + + + garbageCollect : false, + + + paths: { + 'Ext': '.' + }, + + + preserveScripts : true, + + + scriptCharset : undefined + }, + + + setConfig: function(name, value) { + if (Ext.isObject(name) && arguments.length === 1) { + Ext.merge(Loader.config, name); + + if ('paths' in name) { + Ext.app.collectNamespaces(name.paths); + } + } + else { + Loader.config[name] = (Ext.isObject(value)) ? Ext.merge(Loader.config[name], value) : value; + + if (name === 'paths') { + Ext.app.collectNamespaces(value); + } + } + + return Loader; + }, + + + getConfig: function(name) { + if (name) { + return Loader.config[name]; + } + + return Loader.config; + }, + + + setPath: flexSetter(function(name, path) { + Loader.config.paths[name] = path; + Ext.app.namespaces[name] = true; + setPathCount++; + + return Loader; + }), + + + addClassPathMappings: function(paths) { + var name; + + if(setPathCount == 0){ + Loader.config.paths = paths; + } else { + for(name in paths){ + Loader.config.paths[name] = paths[name]; + } + } + setPathCount++; + return Loader; + }, + + + getPath: function(className) { + var path = '', + paths = Loader.config.paths, + prefix = Loader.getPrefix(className); + + if (prefix.length > 0) { + if (prefix === className) { + return paths[prefix]; + } + + path = paths[prefix]; + className = className.substring(prefix.length + 1); + } + + if (path.length > 0) { + path += '/'; + } + + return path.replace(slashDotSlashRe, '/') + className.replace(dotRe, "/") + '.js'; + }, + + + getPrefix: function(className) { + var paths = Loader.config.paths, + prefix, deepestPrefix = ''; + + if (paths.hasOwnProperty(className)) { + return className; + } + + for (prefix in paths) { + if (paths.hasOwnProperty(prefix) && prefix + '.' === className.substring(0, prefix.length + 1)) { + if (prefix.length > deepestPrefix.length) { + deepestPrefix = prefix; + } + } + } + + return deepestPrefix; + }, + + + isAClassNameWithAKnownPrefix: function(className) { + var prefix = Loader.getPrefix(className); + + + return prefix !== '' && prefix !== className; + }, + + + require: function(expressions, fn, scope, excludes) { + if (fn) { + fn.call(scope); + } + }, + + + syncRequire: function() {}, + + + exclude: function(excludes) { + return { + require: function(expressions, fn, scope) { + return Loader.require(expressions, fn, scope, excludes); + }, + + syncRequire: function(expressions, fn, scope) { + return Loader.syncRequire(expressions, fn, scope, excludes); + } + }; + }, + + + onReady: function(fn, scope, withDomReady, options) { + var oldFn; + + if (withDomReady !== false && Ext.onDocumentReady) { + oldFn = fn; + + fn = function() { + Ext.onDocumentReady(oldFn, scope, options); + }; + } + + fn.call(scope); + } + }); + + var queue = [], + isClassFileLoaded = {}, + isFileLoaded = {}, + classNameToFilePathMap = {}, + scriptElements = {}, + readyListeners = [], + usedClasses = [], + requiresMap = {}, + comparePriority = function(listenerA, listenerB) { + return listenerB.priority - listenerA.priority; + }; + + Ext.apply(Loader, { + + documentHead: typeof document != 'undefined' && (document.head || document.getElementsByTagName('head')[0]), + + + isLoading: false, + + + queue: queue, + + + isClassFileLoaded: isClassFileLoaded, + + + isFileLoaded: isFileLoaded, + + + readyListeners: readyListeners, + + + optionalRequires: usedClasses, + + + requiresMap: requiresMap, + + + numPendingFiles: 0, + + + numLoadedFiles: 0, + + + hasFileLoadError: false, + + + classNameToFilePathMap: classNameToFilePathMap, + + + scriptsLoading: 0, + + + syncModeEnabled: false, + + scriptElements: scriptElements, + + + refreshQueue: function() { + var ln = queue.length, + i, item, j, requires; + + + + if (!ln && !Loader.scriptsLoading) { + return Loader.triggerReady(); + } + + for (i = 0; i < ln; i++) { + item = queue[i]; + + if (item) { + requires = item.requires; + + + + if (requires.length > Loader.numLoadedFiles) { + continue; + } + + + for (j = 0; j < requires.length; ) { + if (Manager.isCreated(requires[j])) { + + arrayErase(requires, j, 1); + } + else { + j++; + } + } + + + if (item.requires.length === 0) { + arrayErase(queue, i, 1); + item.callback.call(item.scope); + Loader.refreshQueue(); + break; + } + } + } + + return Loader; + }, + + + injectScriptElement: function(url, onLoad, onError, scope, charset) { + var script = document.createElement('script'), + dispatched = false, + config = Loader.config, + onLoadFn = function() { + + if(!dispatched) { + dispatched = true; + script.onload = script.onreadystatechange = script.onerror = null; + if (typeof config.scriptChainDelay == 'number') { + + defer(onLoad, config.scriptChainDelay, scope); + } else { + onLoad.call(scope); + } + Loader.cleanupScriptElement(script, config.preserveScripts === false, config.garbageCollect); + } + + }, + onErrorFn = function(arg) { + defer(onError, 1, scope); + Loader.cleanupScriptElement(script, config.preserveScripts === false, config.garbageCollect); + }; + + script.type = 'text/javascript'; + script.onerror = onErrorFn; + charset = charset || config.scriptCharset; + if (charset) { + script.charset = charset; + } + + + if ('addEventListener' in script ) { + script.onload = onLoadFn; + } else if ('readyState' in script) { + script.onreadystatechange = function() { + if ( this.readyState == 'loaded' || this.readyState == 'complete' ) { + onLoadFn(); + } + }; + } else { + script.onload = onLoadFn; + } + + script.src = url; + (Loader.documentHead || document.getElementsByTagName('head')[0]).appendChild(script); + + return script; + }, + + + removeScriptElement: function(url) { + if (scriptElements[url]) { + Loader.cleanupScriptElement(scriptElements[url], true, !!Loader.getConfig('garbageCollect')); + delete scriptElements[url]; + } + + return Loader; + }, + + + cleanupScriptElement: function(script, remove, collect) { + var prop; + script.onload = script.onreadystatechange = script.onerror = null; + if (remove) { + Ext.removeNode(script); + if (collect) { + for (prop in script) { + try { + if (prop != 'src') { + + + script[prop] = null; + } + delete script[prop]; + } catch (cleanEx) { + + } + } + } + } + + return Loader; + }, + + + loadScript: function (options) { + var config = Loader.getConfig(), + isString = typeof options == 'string', + url = isString ? options : options.url, + onError = !isString && options.onError, + onLoad = !isString && options.onLoad, + scope = !isString && options.scope, + onScriptError = function() { + Loader.numPendingFiles--; + Loader.scriptsLoading--; + + if (onError) { + onError.call(scope, "Failed loading '" + url + "', please verify that the file exists"); + } + + if (Loader.numPendingFiles + Loader.scriptsLoading === 0) { + Loader.refreshQueue(); + } + }, + onScriptLoad = function () { + Loader.numPendingFiles--; + Loader.scriptsLoading--; + + if (onLoad) { + onLoad.call(scope); + } + + if (Loader.numPendingFiles + Loader.scriptsLoading === 0) { + Loader.refreshQueue(); + } + }, + src; + + Loader.isLoading = true; + Loader.numPendingFiles++; + Loader.scriptsLoading++; + + src = config.disableCaching ? + (url + '?' + config.disableCachingParam + '=' + Ext.Date.now()) : url; + + scriptElements[url] = Loader.injectScriptElement(src, onScriptLoad, onScriptError); + }, + + + loadScriptFile: function(url, onLoad, onError, scope, synchronous) { + if (isFileLoaded[url]) { + return Loader; + } + + var config = Loader.getConfig(), + noCacheUrl = url + (config.disableCaching ? ('?' + config.disableCachingParam + '=' + Ext.Date.now()) : ''), + isCrossOriginRestricted = false, + xhr, status, onScriptError, + debugSourceURL = ""; + + scope = scope || Loader; + + Loader.isLoading = true; + + if (!synchronous) { + onScriptError = function() { + }; + + scriptElements[url] = Loader.injectScriptElement(noCacheUrl, onLoad, onScriptError, scope); + } else { + if (typeof XMLHttpRequest != 'undefined') { + xhr = new XMLHttpRequest(); + } else { + xhr = new ActiveXObject('Microsoft.XMLHTTP'); + } + + try { + xhr.open('GET', noCacheUrl, false); + xhr.send(null); + } catch (e) { + isCrossOriginRestricted = true; + } + + status = (xhr.status === 1223) ? 204 : + (xhr.status === 0 && ((self.location || {}).protocol == 'file:' || (self.location || {}).protocol == 'ionp:')) ? 200 : xhr.status; + + isCrossOriginRestricted = isCrossOriginRestricted || (status === 0); + + if (isCrossOriginRestricted + ) { + } + else if ((status >= 200 && status < 300) || (status === 304) + ) { + + + if (!Ext.isIE) { + debugSourceURL = "\n//@ sourceURL=" + url; + } + + Ext.globalEval(xhr.responseText + debugSourceURL); + + onLoad.call(scope); + } + else { + } + + + xhr = null; + } + }, + + + syncRequire: function() { + var syncModeEnabled = Loader.syncModeEnabled; + + if (!syncModeEnabled) { + Loader.syncModeEnabled = true; + } + + Loader.require.apply(Loader, arguments); + + if (!syncModeEnabled) { + Loader.syncModeEnabled = false; + } + + Loader.refreshQueue(); + }, + + + require: function(expressions, fn, scope, excludes) { + var excluded = {}, + included = {}, + excludedClassNames = [], + possibleClassNames = [], + classNames = [], + references = [], + callback, + syncModeEnabled, + filePath, expression, exclude, className, + possibleClassName, i, j, ln, subLn; + + if (excludes) { + + excludes = (typeof excludes === 'string') ? [ excludes ] : excludes; + + for (i = 0,ln = excludes.length; i < ln; i++) { + exclude = excludes[i]; + + if (typeof exclude == 'string' && exclude.length > 0) { + excludedClassNames = Manager.getNamesByExpression(exclude); + + for (j = 0,subLn = excludedClassNames.length; j < subLn; j++) { + excluded[excludedClassNames[j]] = true; + } + } + } + } + + + expressions = (typeof expressions === 'string') ? [ expressions ] : (expressions ? expressions : []); + + if (fn) { + if (fn.length > 0) { + callback = function() { + var classes = [], + i, ln; + + for (i = 0,ln = references.length; i < ln; i++) { + classes.push(Manager.get(references[i])); + } + + return fn.apply(this, classes); + }; + } + else { + callback = fn; + } + } + else { + callback = Ext.emptyFn; + } + + scope = scope || Ext.global; + + for (i = 0,ln = expressions.length; i < ln; i++) { + expression = expressions[i]; + + if (typeof expression == 'string' && expression.length > 0) { + possibleClassNames = Manager.getNamesByExpression(expression); + subLn = possibleClassNames.length; + + for (j = 0; j < subLn; j++) { + possibleClassName = possibleClassNames[j]; + + if (excluded[possibleClassName] !== true) { + references.push(possibleClassName); + + if (!Manager.isCreated(possibleClassName) && !included[possibleClassName]) { + included[possibleClassName] = true; + classNames.push(possibleClassName); + } + } + } + } + } + + + + if (classNames.length > 0) { + if (!Loader.config.enabled) { + throw new Error("Ext.Loader is not enabled, so dependencies cannot be resolved dynamically. " + + "Missing required class" + ((classNames.length > 1) ? "es" : "") + ": " + classNames.join(', ')); + } + } + else { + callback.call(scope); + return Loader; + } + + syncModeEnabled = Loader.syncModeEnabled; + + if (!syncModeEnabled) { + queue.push({ + requires: classNames.slice(), + + callback: callback, + scope: scope + }); + } + + ln = classNames.length; + + for (i = 0; i < ln; i++) { + className = classNames[i]; + + filePath = Loader.getPath(className); + + + + + if (syncModeEnabled && isClassFileLoaded.hasOwnProperty(className)) { + if (!isClassFileLoaded[className]) { + Loader.numPendingFiles--; + Loader.removeScriptElement(filePath); + delete isClassFileLoaded[className]; + } + } + + if (!isClassFileLoaded.hasOwnProperty(className)) { + isClassFileLoaded[className] = false; + classNameToFilePathMap[className] = filePath; + + Loader.numPendingFiles++; + Loader.loadScriptFile( + filePath, + pass(Loader.onFileLoaded, [className, filePath], Loader), + pass(Loader.onFileLoadError, [className, filePath], Loader), + Loader, + syncModeEnabled + ); + } + } + + if (syncModeEnabled) { + callback.call(scope); + + if (ln === 1) { + return Manager.get(className); + } + } + + return Loader; + }, + + + onFileLoaded: function(className, filePath) { + var loaded = isClassFileLoaded[className]; + Loader.numLoadedFiles++; + + isClassFileLoaded[className] = true; + isFileLoaded[filePath] = true; + + + + if (!loaded) { + Loader.numPendingFiles--; + } + + if (Loader.numPendingFiles === 0) { + Loader.refreshQueue(); + } + + }, + + + onFileLoadError: function(className, filePath, errorMessage, isSynchronous) { + Loader.numPendingFiles--; + Loader.hasFileLoadError = true; + + }, + + + addUsedClasses: function (classes) { + var cls, i, ln; + + if (classes) { + classes = (typeof classes == 'string') ? [classes] : classes; + for (i = 0, ln = classes.length; i < ln; i++) { + cls = classes[i]; + if (typeof cls == 'string' && !Ext.Array.contains(usedClasses, cls)) { + usedClasses.push(cls); + } + } + } + + return Loader; + }, + + + triggerReady: function() { + var listener, + refClasses = usedClasses; + + if (Loader.isLoading) { + Loader.isLoading = false; + + if (refClasses.length !== 0) { + + refClasses = refClasses.slice(); + usedClasses.length = 0; + + + Loader.require(refClasses, Loader.triggerReady, Loader); + return Loader; + } + } + + Ext.Array.sort(readyListeners, comparePriority); + + + + + while (readyListeners.length && !Loader.isLoading) { + + + listener = readyListeners.shift(); + listener.fn.call(listener.scope); + } + + return Loader; + }, + + + onReady: function(fn, scope, withDomReady, options) { + var oldFn; + + if (withDomReady !== false && Ext.onDocumentReady) { + oldFn = fn; + + fn = function() { + Ext.onDocumentReady(oldFn, scope, options); + }; + } + + if (!Loader.isLoading) { + fn.call(scope); + } + else { + readyListeners.push({ + fn: fn, + scope: scope, + priority: (options && options.priority) || 0 + }); + } + }, + + + historyPush: function(className) { + if (className && isClassFileLoaded.hasOwnProperty(className) && !isInHistory[className]) { + isInHistory[className] = true; + history.push(className); + } + return Loader; + } + }); + + + Ext.disableCacheBuster = function (disable, path) { + var date = new Date(); + date.setTime(date.getTime() + (disable ? 10*365 : -1) * 24*60*60*1000); + date = date.toGMTString(); + document.cookie = 'ext-cache=1; expires=' + date + '; path='+(path || '/'); + }; + + + + Ext.require = alias(Loader, 'require'); + + + Ext.syncRequire = alias(Loader, 'syncRequire'); + + + Ext.exclude = alias(Loader, 'exclude'); + + + Ext.onReady = function(fn, scope, options) { + Loader.onReady(fn, scope, true, options); + }; + + + Class.registerPreprocessor('loader', function(cls, data, hooks, continueFn) { + + var me = this, + dependencies = [], + dependency, + className = Manager.getName(cls), + i, j, ln, subLn, value, propertyName, propertyValue, + requiredMap, requiredDep; + + + + for (i = 0,ln = dependencyProperties.length; i < ln; i++) { + propertyName = dependencyProperties[i]; + + if (data.hasOwnProperty(propertyName)) { + propertyValue = data[propertyName]; + + if (typeof propertyValue == 'string') { + dependencies.push(propertyValue); + } + else if (propertyValue instanceof Array) { + for (j = 0, subLn = propertyValue.length; j < subLn; j++) { + value = propertyValue[j]; + + if (typeof value == 'string') { + dependencies.push(value); + } + } + } + else if (typeof propertyValue != 'function') { + for (j in propertyValue) { + if (propertyValue.hasOwnProperty(j)) { + value = propertyValue[j]; + + if (typeof value == 'string') { + dependencies.push(value); + } + } + } + } + } + } + + if (dependencies.length === 0) { + return; + } + + + Loader.require(dependencies, function() { + for (i = 0,ln = dependencyProperties.length; i < ln; i++) { + propertyName = dependencyProperties[i]; + + if (data.hasOwnProperty(propertyName)) { + propertyValue = data[propertyName]; + + if (typeof propertyValue == 'string') { + data[propertyName] = Manager.get(propertyValue); + } + else if (propertyValue instanceof Array) { + for (j = 0, subLn = propertyValue.length; j < subLn; j++) { + value = propertyValue[j]; + + if (typeof value == 'string') { + data[propertyName][j] = Manager.get(value); + } + } + } + else if (typeof propertyValue != 'function') { + for (var k in propertyValue) { + if (propertyValue.hasOwnProperty(k)) { + value = propertyValue[k]; + + if (typeof value == 'string') { + data[propertyName][k] = Manager.get(value); + } + } + } + } + } + } + + continueFn.call(me, cls, data, hooks); + }); + + return false; + }, true, 'after', 'className'); + + + Manager.registerPostprocessor('uses', function(name, cls, data) { + + var uses = data.uses; + if (uses) { + Loader.addUsedClasses(uses); + } + }); + + Manager.onCreated(Loader.historyPush); +}; + + + +if (Ext._classPathMetadata) { + Ext.Loader.addClassPathMappings(Ext._classPathMetadata); + Ext._classPathMetadata = null; +} + + +(function() { + var scripts = document.getElementsByTagName('script'), + currentScript = scripts[scripts.length - 1], + src = currentScript.src, + path = src.substring(0, src.lastIndexOf('/') + 1), + Loader = Ext.Loader; + + + Loader.setConfig({ + enabled: true, + disableCaching: true, + paths: { + 'Ext': path + 'src' + } + }); +})(); + + + +Ext._endTime = new Date().getTime(); +if (Ext._beforereadyhandler){ + Ext._beforereadyhandler(); +} + +//@tag foundation,core + +//@require ../class/Loader.js + + + +Ext.Error = Ext.extend(Error, { + statics: { + + ignore: false, + + + + + + raise: function(err){ + err = err || {}; + if (Ext.isString(err)) { + err = { msg: err }; + } + + var method = this.raise.caller, + msg; + + if (method) { + if (method.$name) { + err.sourceMethod = method.$name; + } + if (method.$owner) { + err.sourceClass = method.$owner.$className; + } + } + + if (Ext.Error.handle(err) !== true) { + msg = Ext.Error.prototype.toString.call(err); + + Ext.log({ + msg: msg, + level: 'error', + dump: err, + stack: true + }); + + throw new Ext.Error(err); + } + }, + + + handle: function(){ + return Ext.Error.ignore; + } + }, + + + name: 'Ext.Error', + + + constructor: function(config){ + if (Ext.isString(config)) { + config = { msg: config }; + } + + var me = this; + + Ext.apply(me, config); + + me.message = me.message || me.msg; + + }, + + + toString: function(){ + var me = this, + className = me.sourceClass ? me.sourceClass : '', + methodName = me.sourceMethod ? '.' + me.sourceMethod + '(): ' : '', + msg = me.msg || '(No description provided)'; + + return className + methodName + msg; + } +}); + + +Ext.deprecated = function (suggestion) { + return Ext.emptyFn; +}; + + + +//@tag extras,core + +//@require ../lang/Error.js + + + +Ext.JSON = (new(function() { + var me = this, + encodingFunction, + decodingFunction, + useNative = null, + useHasOwn = !! {}.hasOwnProperty, + isNative = function() { + if (useNative === null) { + useNative = Ext.USE_NATIVE_JSON && window.JSON && JSON.toString() == '[object JSON]'; + } + return useNative; + }, + pad = function(n) { + return n < 10 ? "0" + n : n; + }, + doDecode = function(json) { + return eval("(" + json + ')'); + }, + doEncode = function(o, newline) { + + if (o === null || o === undefined) { + return "null"; + } else if (Ext.isDate(o)) { + return Ext.JSON.encodeDate(o); + } else if (Ext.isString(o)) { + return Ext.JSON.encodeString(o); + } else if (typeof o == "number") { + + return isFinite(o) ? String(o) : "null"; + } else if (Ext.isBoolean(o)) { + return String(o); + } + + + else if (o.toJSON) { + return o.toJSON(); + } else if (Ext.isArray(o)) { + return encodeArray(o, newline); + } else if (Ext.isObject(o)) { + return encodeObject(o, newline); + } else if (typeof o === "function") { + return "null"; + } + return 'undefined'; + }, + m = { + "\b": '\\b', + "\t": '\\t', + "\n": '\\n', + "\f": '\\f', + "\r": '\\r', + '"': '\\"', + "\\": '\\\\', + '\x0b': '\\u000b' + }, + charToReplace = /[\\\"\x00-\x1f\x7f-\uffff]/g, + encodeString = function(s) { + return '"' + s.replace(charToReplace, function(a) { + var c = m[a]; + return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"'; + }, + + + encodeArray = function(o, newline) { + + var a = ["[", ""], + len = o.length, + i; + for (i = 0; i < len; i += 1) { + a.push(Ext.JSON.encodeValue(o[i]), ','); + } + + a[a.length - 1] = ']'; + return a.join(""); + }, + + encodeObject = function(o, newline) { + + var a = ["{", ""], + i, val; + for (i in o) { + val = o[i]; + if (!useHasOwn || o.hasOwnProperty(i)) { + + if (typeof val === 'function' || val === undefined) { + continue; + } + a.push(Ext.JSON.encodeValue(i), ":", Ext.JSON.encodeValue(val), ','); + + } + } + + a[a.length - 1] = '}'; + return a.join(""); + }; + + + me.encodeString = encodeString; + + + me.encodeValue = doEncode; + + + me.encodeDate = function(o) { + return '"' + o.getFullYear() + "-" + + pad(o.getMonth() + 1) + "-" + + pad(o.getDate()) + "T" + + pad(o.getHours()) + ":" + + pad(o.getMinutes()) + ":" + + pad(o.getSeconds()) + '"'; + }; + + + me.encode = function(o) { + if (!encodingFunction) { + + encodingFunction = isNative() ? JSON.stringify : me.encodeValue; + } + return encodingFunction(o); + }; + + + me.decode = function(json, safe) { + if (!decodingFunction) { + + decodingFunction = isNative() ? JSON.parse : doDecode; + } + try { + return decodingFunction(json); + } catch (e) { + if (safe === true) { + return null; + } + Ext.Error.raise({ + sourceClass: "Ext.JSON", + sourceMethod: "decode", + msg: "You're trying to decode an invalid JSON String: " + json + }); + } + }; +})()); + +Ext.encode = Ext.JSON.encode; + +Ext.decode = Ext.JSON.decode; + +//@tag extras,core + +//@require misc/JSON.js + + + +Ext.apply(Ext, { + userAgent: navigator.userAgent.toLowerCase(), + cache: {}, + idSeed: 1000, + windowId: 'ext-window', + documentId: 'ext-document', + + + isReady: false, + + + enableGarbageCollector: true, + + + enableListenerCollection: true, + + + rootHierarchyState: {}, + + addCacheEntry: function(id, el, dom) { + dom = dom || el.dom; + + + var cache = Ext.cache, + key = id || (el && el.id) || dom.id, + entry = cache[key] || (cache[key] = { + data: {}, + events: {}, + + dom: dom, + + + skipGarbageCollection: !!(dom.getElementById || dom.navigator) + }); + + if (el) { + el.$cache = entry; + + + entry.el = el; + } + + return entry; + }, + + updateCacheEntry: function(cacheItem, dom){ + cacheItem.dom = dom; + if (cacheItem.el) { + cacheItem.el.dom = dom; + } + return cacheItem; + }, + + + id: function(el, prefix) { + var me = this, + sandboxPrefix = ''; + el = Ext.getDom(el, true) || {}; + if (el === document) { + el.id = me.documentId; + } + else if (el === window) { + el.id = me.windowId; + } + if (!el.id) { + if (me.isSandboxed) { + sandboxPrefix = Ext.sandboxName.toLowerCase() + '-'; + } + el.id = sandboxPrefix + (prefix || "ext-gen") + (++Ext.idSeed); + } + return el.id; + }, + + escapeId: (function(){ + var validIdRe = /^[a-zA-Z_][a-zA-Z0-9_\-]*$/i, + escapeRx = /([\W]{1})/g, + leadingNumRx = /^(\d)/g, + escapeFn = function(match, capture){ + return "\\" + capture; + }, + numEscapeFn = function(match, capture){ + return '\\00' + capture.charCodeAt(0).toString(16) + ' '; + }; + + return function(id) { + return validIdRe.test(id) + ? id + + + : id.replace(escapeRx, escapeFn) + .replace(leadingNumRx, numEscapeFn); + }; + }()), + + + getBody: (function() { + var body; + return function() { + return body || (body = Ext.get(document.body)); + }; + }()), + + + getHead: (function() { + var head; + return function() { + return head || (head = Ext.get(document.getElementsByTagName("head")[0])); + }; + }()), + + + getDoc: (function() { + var doc; + return function() { + return doc || (doc = Ext.get(document)); + }; + }()), + + + getOrientation: function() { + return window.innerHeight > window.innerWidth ? 'portrait' : 'landscape'; + }, + + + destroy: function() { + var ln = arguments.length, + i, arg; + + for (i = 0; i < ln; i++) { + arg = arguments[i]; + if (arg) { + if (Ext.isArray(arg)) { + this.destroy.apply(this, arg); + } + else if (Ext.isFunction(arg.destroy)) { + arg.destroy(); + } + else if (arg.dom) { + arg.remove(); + } + } + } + }, + + + callback: function(callback, scope, args, delay){ + if(Ext.isFunction(callback)){ + args = args || []; + scope = scope || window; + if (delay) { + Ext.defer(callback, delay, scope, args); + } else { + callback.apply(scope, args); + } + } + }, + + + htmlEncode : function(value) { + return Ext.String.htmlEncode(value); + }, + + + htmlDecode : function(value) { + return Ext.String.htmlDecode(value); + }, + + + urlAppend : function(url, s) { + return Ext.String.urlAppend(url, s); + } +}); + + +Ext.ns = Ext.namespace; + + +window.undefined = window.undefined; + + +(function(){ + + var check = function(regex){ + return regex.test(Ext.userAgent); + }, + isStrict = document.compatMode == "CSS1Compat", + version = function (is, regex) { + var m; + return (is && (m = regex.exec(Ext.userAgent))) ? parseFloat(m[1]) : 0; + }, + docMode = document.documentMode, + isOpera = check(/opera/), + isOpera10_5 = isOpera && check(/version\/10\.5/), + isChrome = check(/\bchrome\b/), + isWebKit = check(/webkit/), + isSafari = !isChrome && check(/safari/), + isSafari2 = isSafari && check(/applewebkit\/4/), + isSafari3 = isSafari && check(/version\/3/), + isSafari4 = isSafari && check(/version\/4/), + isSafari5_0 = isSafari && check(/version\/5\.0/), + isSafari5 = isSafari && check(/version\/5/), + isIE = !isOpera && check(/msie/), + isIE7 = isIE && ((check(/msie 7/) && docMode != 8 && docMode != 9 && docMode != 10) || docMode == 7), + isIE8 = isIE && ((check(/msie 8/) && docMode != 7 && docMode != 9 && docMode != 10) || docMode == 8), + isIE9 = isIE && ((check(/msie 9/) && docMode != 7 && docMode != 8 && docMode != 10) || docMode == 9), + isIE10 = isIE && ((check(/msie 10/) && docMode != 7 && docMode != 8 && docMode != 9) || docMode == 10), + isIE6 = isIE && check(/msie 6/), + isGecko = !isWebKit && check(/gecko/), + isGecko3 = isGecko && check(/rv:1\.9/), + isGecko4 = isGecko && check(/rv:2\.0/), + isGecko5 = isGecko && check(/rv:5\./), + isGecko10 = isGecko && check(/rv:10\./), + isFF3_0 = isGecko3 && check(/rv:1\.9\.0/), + isFF3_5 = isGecko3 && check(/rv:1\.9\.1/), + isFF3_6 = isGecko3 && check(/rv:1\.9\.2/), + isWindows = check(/windows|win32/), + isMac = check(/macintosh|mac os x/), + isLinux = check(/linux/), + scrollbarSize = null, + chromeVersion = version(true, /\bchrome\/(\d+\.\d+)/), + firefoxVersion = version(true, /\bfirefox\/(\d+\.\d+)/), + ieVersion = version(isIE, /msie (\d+\.\d+)/), + operaVersion = version(isOpera, /version\/(\d+\.\d+)/), + safariVersion = version(isSafari, /version\/(\d+\.\d+)/), + webKitVersion = version(isWebKit, /webkit\/(\d+\.\d+)/), + isSecure = /^https/i.test(window.location.protocol), + nullLog; + + + try { + document.execCommand("BackgroundImageCache", false, true); + } catch(e) {} + + + + nullLog = function () {}; + nullLog.info = nullLog.warn = nullLog.error = Ext.emptyFn; + + + Ext.setVersion('extjs', '4.2.0.663'); + Ext.apply(Ext, { + + SSL_SECURE_URL : isSecure && isIE ? 'javascript:\'\'' : 'about:blank', + + + + plainTableCls: Ext.buildSettings.baseCSSPrefix + 'table-plain', + + plainListCls: Ext.buildSettings.baseCSSPrefix + 'list-plain', + + + enableNestedListenerRemoval : false, + + + USE_NATIVE_JSON : false, + + + getDom : function(el, strict) { + if (!el || !document) { + return null; + } + if (el.dom) { + return el.dom; + } else { + if (typeof el == 'string') { + var e = Ext.getElementById(el); + + + if (e && isIE && strict) { + if (el == e.getAttribute('id')) { + return e; + } else { + return null; + } + } + return e; + } else { + return el; + } + } + }, + + + removeNode : isIE6 || isIE7 || isIE8 + ? (function() { + var d; + return function(n){ + if(n && n.tagName.toUpperCase() != 'BODY'){ + (Ext.enableNestedListenerRemoval) ? Ext.EventManager.purgeElement(n) : Ext.EventManager.removeAll(n); + + var cache = Ext.cache, + id = n.id; + + if (cache[id]) { + delete cache[id].dom; + delete cache[id]; + } + + if (isIE8 && n.parentNode) { + n.parentNode.removeChild(n); + } + d = d || document.createElement('div'); + d.appendChild(n); + d.innerHTML = ''; + } + }; + }()) + : function(n) { + if (n && n.parentNode && n.tagName.toUpperCase() != 'BODY') { + (Ext.enableNestedListenerRemoval) ? Ext.EventManager.purgeElement(n) : Ext.EventManager.removeAll(n); + + var cache = Ext.cache, + id = n.id; + + if (cache[id]) { + delete cache[id].dom; + delete cache[id]; + } + + n.parentNode.removeChild(n); + } + }, + + isStrict: isStrict, + + + isIEQuirks: isIE && (!isStrict && (isIE6 || isIE7 || isIE8 || isIE9)), + + + isOpera : isOpera, + + + isOpera10_5 : isOpera10_5, + + + isWebKit : isWebKit, + + + isChrome : isChrome, + + + isSafari : isSafari, + + + isSafari3 : isSafari3, + + + isSafari4 : isSafari4, + + + isSafari5 : isSafari5, + + + isSafari5_0 : isSafari5_0, + + + + isSafari2 : isSafari2, + + + isIE : isIE, + + + isIE6 : isIE6, + + + isIE7 : isIE7, + + + isIE7m : isIE6 || isIE7, + + + isIE7p : isIE && !isIE6, + + + isIE8 : isIE8, + + + isIE8m : isIE6 || isIE7 || isIE8, + + + isIE8p : isIE && !(isIE6 || isIE7), + + + isIE9 : isIE9, + + + isIE9m : isIE6 || isIE7 || isIE8 || isIE9, + + + isIE9p : isIE && !(isIE6 || isIE7 || isIE8), + + + isIE10 : isIE10, + + + isIE10m : isIE6 || isIE7 || isIE8 || isIE9 || isIE10, + + + isIE10p : isIE && !(isIE6 || isIE7 || isIE8 || isIE9), + + + isGecko : isGecko, + + + isGecko3 : isGecko3, + + + isGecko4 : isGecko4, + + + isGecko5 : isGecko5, + + + isGecko10 : isGecko10, + + + isFF3_0 : isFF3_0, + + + isFF3_5 : isFF3_5, + + + isFF3_6 : isFF3_6, + + + isFF4 : 4 <= firefoxVersion && firefoxVersion < 5, + + + isFF5 : 5 <= firefoxVersion && firefoxVersion < 6, + + + isFF10 : 10 <= firefoxVersion && firefoxVersion < 11, + + + isLinux : isLinux, + + + isWindows : isWindows, + + + isMac : isMac, + + + chromeVersion: chromeVersion, + + + firefoxVersion: firefoxVersion, + + + ieVersion: ieVersion, + + + operaVersion: operaVersion, + + + safariVersion: safariVersion, + + + webKitVersion: webKitVersion, + + + isSecure: isSecure, + + + BLANK_IMAGE_URL : (isIE6 || isIE7) ? '/' + '/www.sencha.com/s.gif' : 'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', + + + value : function(v, defaultValue, allowBlank){ + return Ext.isEmpty(v, allowBlank) ? defaultValue : v; + }, + + + escapeRe : function(s) { + return s.replace(/([-.*+?\^${}()|\[\]\/\\])/g, "\\$1"); + }, + + + addBehaviors : function(o){ + if(!Ext.isReady){ + Ext.onReady(function(){ + Ext.addBehaviors(o); + }); + } else { + var cache = {}, + parts, + b, + s; + for (b in o) { + if ((parts = b.split('@'))[1]) { + s = parts[0]; + if(!cache[s]){ + cache[s] = Ext.select(s); + } + cache[s].on(parts[1], o[b]); + } + } + cache = null; + } + }, + + + getScrollbarSize: function (force) { + if (!Ext.isReady) { + return {}; + } + + if (force || !scrollbarSize) { + var db = document.body, + div = document.createElement('div'); + + div.style.width = div.style.height = '100px'; + div.style.overflow = 'scroll'; + div.style.position = 'absolute'; + + db.appendChild(div); + + + scrollbarSize = { + width: div.offsetWidth - div.clientWidth, + height: div.offsetHeight - div.clientHeight + }; + + db.removeChild(div); + } + + return scrollbarSize; + }, + + + getScrollBarWidth: function(force){ + var size = Ext.getScrollbarSize(force); + return size.width + 2; + }, + + + copyTo : function(dest, source, names, usePrototypeKeys){ + if(typeof names == 'string'){ + names = names.split(/[,;\s]/); + } + + var n, + nLen = names? names.length : 0, + name; + + for(n = 0; n < nLen; n++) { + name = names[n]; + + if(usePrototypeKeys || source.hasOwnProperty(name)){ + dest[name] = source[name]; + } + } + + return dest; + }, + + + destroyMembers : function(o){ + for (var i = 1, a = arguments, len = a.length; i < len; i++) { + Ext.destroy(o[a[i]]); + delete o[a[i]]; + } + }, + + + log : + nullLog, + + + partition : function(arr, truth){ + var ret = [[],[]], + a, v, + aLen = arr.length; + + for (a = 0; a < aLen; a++) { + v = arr[a]; + ret[ (truth && truth(v, a, arr)) || (!truth && v) ? 0 : 1].push(v); + } + + return ret; + }, + + + invoke : function(arr, methodName){ + var ret = [], + args = Array.prototype.slice.call(arguments, 2), + a, v, + aLen = arr.length; + + for (a = 0; a < aLen; a++) { + v = arr[a]; + + if (v && typeof v[methodName] == 'function') { + ret.push(v[methodName].apply(v, args)); + } else { + ret.push(undefined); + } + } + + return ret; + }, + + + zip : function(){ + var parts = Ext.partition(arguments, function( val ){ return typeof val != 'function'; }), + arrs = parts[0], + fn = parts[1][0], + len = Ext.max(Ext.pluck(arrs, "length")), + ret = [], + i, + j, + aLen; + + for (i = 0; i < len; i++) { + ret[i] = []; + if(fn){ + ret[i] = fn.apply(fn, Ext.pluck(arrs, i)); + }else{ + for (j = 0, aLen = arrs.length; j < aLen; j++){ + ret[i].push( arrs[j][i] ); + } + } + } + return ret; + }, + + + toSentence: function(items, connector) { + var length = items.length, + head, + tail; + + if (length <= 1) { + return items[0]; + } else { + head = items.slice(0, length - 1); + tail = items[length - 1]; + + return Ext.util.Format.format("{0} {1} {2}", head.join(", "), connector || 'and', tail); + } + }, + + + setGlyphFontFamily: function(fontFamily) { + Ext._glyphFontFamily = fontFamily; + }, + + + useShims: isIE6 + }); +}()); + + +Ext.application = function(config) { + var App, paths, ns; + + if (typeof config === "string") { + Ext.require(config, function(){ + App = Ext.ClassManager.get(config); + }); + } + else { + + + Ext.Loader.setPath(config.name, config.appFolder || 'app'); + + if (paths = config.paths) { + for (ns in paths) { + if (paths.hasOwnProperty(ns)) { + Ext.Loader.setPath(ns, paths[ns]); + } + } + } + + config['paths processed'] = true; + + + + Ext.define(config.name + ".$application", Ext.apply({ + extend: 'Ext.app.Application' + }, config), + + function () { + App = this; + }); + } + + Ext.onReady(function() { + + + Ext.app.Application.instance = new App(); + }); +}; + +//@tag extras,core + +//@require ../Ext-more.js + +//@define Ext.util.Format + + + +(function() { + Ext.ns('Ext.util'); + + Ext.util.Format = {}; + var UtilFormat = Ext.util.Format, + stripTagsRE = /<\/?[^>]+>/gi, + stripScriptsRe = /(?:)((\n|\r|.)*?)(?:<\/script>)/ig, + nl2brRe = /\r?\n/g, + + + formatCleanRe = /[^\d\.]/g, + + + + I18NFormatCleanRe; + + Ext.apply(UtilFormat, { + + + thousandSeparator: ',', + + + + + decimalSeparator: '.', + + + + + currencyPrecision: 2, + + + + + currencySign: '$', + + + + + currencyAtEnd: false, + + + + undef : function(value) { + return value !== undefined ? value : ""; + }, + + + defaultValue : function(value, defaultValue) { + return value !== undefined && value !== '' ? value : defaultValue; + }, + + + substr : 'ab'.substr(-1) != 'b' + ? function (value, start, length) { + var str = String(value); + return (start < 0) + ? str.substr(Math.max(str.length + start, 0), length) + : str.substr(start, length); + } + : function(value, start, length) { + return String(value).substr(start, length); + }, + + + lowercase : function(value) { + return String(value).toLowerCase(); + }, + + + uppercase : function(value) { + return String(value).toUpperCase(); + }, + + + usMoney : function(v) { + return UtilFormat.currency(v, '$', 2); + }, + + + currency: function(v, currencySign, decimals, end) { + var negativeSign = '', + format = ",0", + i = 0; + v = v - 0; + if (v < 0) { + v = -v; + negativeSign = '-'; + } + decimals = Ext.isDefined(decimals) ? decimals : UtilFormat.currencyPrecision; + format += format + (decimals > 0 ? '.' : ''); + for (; i < decimals; i++) { + format += '0'; + } + v = UtilFormat.number(v, format); + if ((end || UtilFormat.currencyAtEnd) === true) { + return Ext.String.format("{0}{1}{2}", negativeSign, v, currencySign || UtilFormat.currencySign); + } else { + return Ext.String.format("{0}{1}{2}", negativeSign, currencySign || UtilFormat.currencySign, v); + } + }, + + + date: function(v, format) { + if (!v) { + return ""; + } + if (!Ext.isDate(v)) { + v = new Date(Date.parse(v)); + } + return Ext.Date.dateFormat(v, format || Ext.Date.defaultFormat); + }, + + + dateRenderer : function(format) { + return function(v) { + return UtilFormat.date(v, format); + }; + }, + + + stripTags : function(v) { + return !v ? v : String(v).replace(stripTagsRE, ""); + }, + + + stripScripts : function(v) { + return !v ? v : String(v).replace(stripScriptsRe, ""); + }, + + + fileSize : function(size) { + if (size < 1024) { + return size + " bytes"; + } else if (size < 1048576) { + return (Math.round(((size*10) / 1024))/10) + " KB"; + } else { + return (Math.round(((size*10) / 1048576))/10) + " MB"; + } + }, + + + math : (function(){ + var fns = {}; + + return function(v, a){ + if (!fns[a]) { + fns[a] = Ext.functionFactory('v', 'return v ' + a + ';'); + } + return fns[a](v); + }; + }()), + + + round : function(value, precision) { + var result = Number(value); + if (typeof precision == 'number') { + precision = Math.pow(10, precision); + result = Math.round(value * precision) / precision; + } + return result; + }, + + + number : function(v, formatString) { + if (!formatString) { + return v; + } + v = Ext.Number.from(v, NaN); + if (isNaN(v)) { + return ''; + } + var comma = UtilFormat.thousandSeparator, + dec = UtilFormat.decimalSeparator, + neg = v < 0, + hasComma, + psplit, + fnum, + cnum, + parr, + j, + m, + n, + i; + + v = Math.abs(v); + + + + + + if (formatString.substr(formatString.length - 2) == '/i') { + if (!I18NFormatCleanRe) { + I18NFormatCleanRe = new RegExp('[^\\d\\' + UtilFormat.decimalSeparator + ']','g'); + } + formatString = formatString.substr(0, formatString.length - 2); + hasComma = formatString.indexOf(comma) != -1; + psplit = formatString.replace(I18NFormatCleanRe, '').split(dec); + } else { + hasComma = formatString.indexOf(',') != -1; + psplit = formatString.replace(formatCleanRe, '').split('.'); + } + + if (psplit.length > 2) { + } else if (psplit.length > 1) { + v = Ext.Number.toFixed(v, psplit[1].length); + } else { + v = Ext.Number.toFixed(v, 0); + } + + fnum = v.toString(); + + psplit = fnum.split('.'); + + if (hasComma) { + cnum = psplit[0]; + parr = []; + j = cnum.length; + m = Math.floor(j / 3); + n = cnum.length % 3 || 3; + + for (i = 0; i < j; i += n) { + if (i !== 0) { + n = 3; + } + + parr[parr.length] = cnum.substr(i, n); + m -= 1; + } + fnum = parr.join(comma); + if (psplit[1]) { + fnum += dec + psplit[1]; + } + } else { + if (psplit[1]) { + fnum = psplit[0] + dec + psplit[1]; + } + } + + if (neg) { + + neg = fnum.replace(/[^1-9]/g, '') !== ''; + } + + return (neg ? '-' : '') + formatString.replace(/[\d,?\.?]+/, fnum); + }, + + + numberRenderer : function(format) { + return function(v) { + return UtilFormat.number(v, format); + }; + }, + + + attributes: function(attributes) { + if (typeof attributes === 'object') { + var result = [], + name; + + for (name in attributes) { + result.push(name, '="', name === 'style' ? Ext.DomHelper.generateStyles(attributes[name]) : Ext.htmlEncode(attributes[name]), '"'); + } + attributes = result.join(''); + } + return attributes||''; + }, + + + plural : function(v, s, p) { + return v +' ' + (v == 1 ? s : (p ? p : s+'s')); + }, + + + nl2br : function(v) { + return Ext.isEmpty(v) ? '' : v.replace(nl2brRe, '
    '); + }, + + + capitalize: Ext.String.capitalize, + + + ellipsis: Ext.String.ellipsis, + + + format: Ext.String.format, + + + htmlDecode: Ext.String.htmlDecode, + + + htmlEncode: Ext.String.htmlEncode, + + + leftPad: Ext.String.leftPad, + + + trim : Ext.String.trim, + + + parseBox : function(box) { + box = box || 0; + + if (typeof box === 'number') { + return { + top : box, + right : box, + bottom: box, + left : box + }; + } + + var parts = box.split(' '), + ln = parts.length; + + if (ln == 1) { + parts[1] = parts[2] = parts[3] = parts[0]; + } + else if (ln == 2) { + parts[2] = parts[0]; + parts[3] = parts[1]; + } + else if (ln == 3) { + parts[3] = parts[1]; + } + + return { + top :parseInt(parts[0], 10) || 0, + right :parseInt(parts[1], 10) || 0, + bottom:parseInt(parts[2], 10) || 0, + left :parseInt(parts[3], 10) || 0 + }; + }, + + + escapeRegex : function(s) { + return s.replace(/([\-.*+?\^${}()|\[\]\/\\])/g, "\\$1"); + } + }); +}()); + +//@tag extras,core + +//@require Format.js + + + +Ext.define('Ext.util.TaskRunner', { + + + + interval: 10, + + + timerId: null, + + constructor: function (interval) { + var me = this; + + if (typeof interval == 'number') { + me.interval = interval; + } else if (interval) { + Ext.apply(me, interval); + } + + me.tasks = []; + me.timerFn = Ext.Function.bind(me.onTick, me); + }, + + + newTask: function (config) { + var task = new Ext.util.TaskRunner.Task(config); + task.manager = this; + return task; + }, + + + start: function(task) { + var me = this, + now = new Date().getTime(); + + if (!task.pending) { + me.tasks.push(task); + task.pending = true; + } + + task.stopped = false; + task.taskStartTime = now; + task.taskRunTime = task.fireOnStart !== false ? 0 : task.taskStartTime; + task.taskRunCount = 0; + + if (!me.firing) { + if (task.fireOnStart !== false) { + me.startTimer(0, now); + } else { + me.startTimer(task.interval, now); + } + } + + return task; + }, + + + stop: function(task) { + + + + if (!task.stopped) { + task.stopped = true; + + if (task.onStop) { + task.onStop.call(task.scope || task, task); + } + } + + return task; + }, + + + stopAll: function() { + + Ext.each(this.tasks, this.stop, this); + }, + + + + firing: false, + + nextExpires: 1e99, + + + onTick: function () { + var me = this, + tasks = me.tasks, + now = new Date().getTime(), + nextExpires = 1e99, + len = tasks.length, + expires, newTasks, i, task, rt, remove; + + me.timerId = null; + me.firing = true; + + + + + + for (i = 0; i < len || i < (len = tasks.length); ++i) { + task = tasks[i]; + + if (!(remove = task.stopped)) { + expires = task.taskRunTime + task.interval; + + if (expires <= now) { + rt = 1; + try { + rt = task.run.apply(task.scope || task, task.args || [++task.taskRunCount]); + } catch (taskError) { + try { + if (task.onError) { + rt = task.onError.call(task.scope || task, task, taskError); + } + } catch (ignore) { } + } + task.taskRunTime = now; + if (rt === false || task.taskRunCount === task.repeat) { + me.stop(task); + remove = true; + } else { + remove = task.stopped; + expires = now + task.interval; + } + } + + if (!remove && task.duration && task.duration <= (now - task.taskStartTime)) { + me.stop(task); + remove = true; + } + } + + if (remove) { + task.pending = false; + + + + + + + if (!newTasks) { + newTasks = tasks.slice(0, i); + + + + } + } else { + if (newTasks) { + newTasks.push(task); + } + + if (nextExpires > expires) { + nextExpires = expires; + } + } + } + + if (newTasks) { + + + me.tasks = newTasks; + } + + me.firing = false; + + if (me.tasks.length) { + + + + me.startTimer(nextExpires - now, new Date().getTime()); + } + + + if (me.fireIdleEvent !== false) { + Ext.EventManager.idleEvent.fire(); + } + }, + + + startTimer: function (timeout, now) { + var me = this, + expires = now + timeout, + timerId = me.timerId; + + + + if (timerId && me.nextExpires - expires > me.interval) { + clearTimeout(timerId); + timerId = null; + } + + if (!timerId) { + if (timeout < me.interval) { + timeout = me.interval; + } + + me.timerId = setTimeout(me.timerFn, timeout); + me.nextExpires = expires; + } + } +}, +function () { + var me = this, + proto = me.prototype; + + + proto.destroy = proto.stopAll; + + + Ext.util.TaskManager = Ext.TaskManager = new me(); + + + me.Task = new Ext.Class({ + isTask: true, + + + stopped: true, + + + fireOnStart: false, + + constructor: function (config) { + Ext.apply(this, config); + }, + + + restart: function (interval) { + if (interval !== undefined) { + this.interval = interval; + } + + this.manager.start(this); + }, + + + start: function (interval) { + if (this.stopped) { + this.restart(interval); + } + }, + + + stop: function () { + this.manager.stop(this); + } + }); + + proto = me.Task.prototype; + + + proto.destroy = proto.stop; +}); + + + + + + + + + + +//@tag extras,core + + +Ext.define('Ext.util.TaskManager', { + extend: Ext.util.TaskRunner , + + alternateClassName: [ + 'Ext.TaskManager' + ], + + singleton: true +}); + +//@tag extras,core + +//@require ../util/TaskManager.js + + + +Ext.define('Ext.perf.Accumulator', (function () { + var currentFrame = null, + khrome = Ext.global['chrome'], + formatTpl, + + + getTimestamp = function () { + + getTimestamp = function () { + return new Date().getTime(); + }; + + var interval, toolbox; + + + if (Ext.isChrome && khrome && khrome.Interval) { + interval = new khrome.Interval(); + interval.start(); + getTimestamp = function () { + return interval.microseconds() / 1000; + }; + } else if (window.ActiveXObject) { + try { + + toolbox = new ActiveXObject('SenchaToolbox.Toolbox'); + Ext.senchaToolbox = toolbox; + getTimestamp = function () { + return toolbox.milliseconds; + }; + } catch (e) { + + } + } else if (Date.now) { + getTimestamp = Date.now; + } + + Ext.perf.getTimestamp = Ext.perf.Accumulator.getTimestamp = getTimestamp; + return getTimestamp(); + }; + + function adjustSet (set, time) { + set.sum += time; + set.min = Math.min(set.min, time); + set.max = Math.max(set.max, time); + } + + function leaveFrame (time) { + var totalTime = time ? time : (getTimestamp() - this.time), + me = this, + accum = me.accum; + + ++accum.count; + if (! --accum.depth) { + adjustSet(accum.total, totalTime); + } + adjustSet(accum.pure, totalTime - me.childTime); + + currentFrame = me.parent; + if (currentFrame) { + ++currentFrame.accum.childCount; + currentFrame.childTime += totalTime; + } + } + + function makeSet () { + return { + min: Number.MAX_VALUE, + max: 0, + sum: 0 + }; + } + + function makeTap (me, fn) { + return function () { + var frame = me.enter(), + ret = fn.apply(this, arguments); + + frame.leave(); + return ret; + }; + } + + function round (x) { + return Math.round(x * 100) / 100; + } + + function setToJSON (count, childCount, calibration, set) { + var data = { + avg: 0, + min: set.min, + max: set.max, + sum: 0 + }; + + if (count) { + calibration = calibration || 0; + data.sum = set.sum - childCount * calibration; + data.avg = data.sum / count; + + + } + + return data; + } + + return { + constructor: function (name) { + var me = this; + + me.count = me.childCount = me.depth = me.maxDepth = 0; + me.pure = makeSet(); + me.total = makeSet(); + me.name = name; + }, + + statics: { + getTimestamp: getTimestamp + }, + + format: function (calibration) { + if (!formatTpl) { + formatTpl = new Ext.XTemplate([ + '{name} - {count} call(s)', + '', + '', + ' ({childCount} children)', + '', + '', + ' ({depth} deep)', + '', + '', + ', {type}: {[this.time(values.sum)]} msec (', + + 'avg={[this.time(values.sum / parent.count)]}', + + ')', + '', + '' + ].join(''), { + time: function (t) { + return Math.round(t * 100) / 100; + } + }); + } + + var data = this.getData(calibration); + data.name = this.name; + data.pure.type = 'Pure'; + data.total.type = 'Total'; + data.times = [data.pure, data.total]; + return formatTpl.apply(data); + }, + + getData: function (calibration) { + var me = this; + + return { + count: me.count, + childCount: me.childCount, + depth: me.maxDepth, + pure: setToJSON(me.count, me.childCount, calibration, me.pure), + total: setToJSON(me.count, me.childCount, calibration, me.total) + }; + }, + + enter: function () { + var me = this, + frame = { + accum: me, + leave: leaveFrame, + childTime: 0, + parent: currentFrame + }; + + ++me.depth; + if (me.maxDepth < me.depth) { + me.maxDepth = me.depth; + } + + currentFrame = frame; + frame.time = getTimestamp(); + return frame; + }, + + monitor: function (fn, scope, args) { + var frame = this.enter(); + if (args) { + fn.apply(scope, args); + } else { + fn.call(scope); + } + frame.leave(); + }, + + report: function () { + Ext.log(this.format()); + }, + + tap: function (className, methodName) { + var me = this, + methods = typeof methodName == 'string' ? [methodName] : methodName, + klass, statik, i, parts, length, name, src, + tapFunc; + + tapFunc = function(){ + if (typeof className == 'string') { + klass = Ext.global; + parts = className.split('.'); + for (i = 0, length = parts.length; i < length; ++i) { + klass = klass[parts[i]]; + } + } else { + klass = className; + } + + for (i = 0, length = methods.length; i < length; ++i) { + name = methods[i]; + statik = name.charAt(0) == '!'; + + if (statik) { + name = name.substring(1); + } else { + statik = !(name in klass.prototype); + } + + src = statik ? klass : klass.prototype; + src[name] = makeTap(me, src[name]); + } + }; + + Ext.ClassManager.onCreated(tapFunc, me, className); + + return me; + } + }; +}()), + +function () { + Ext.perf.getTimestamp = this.getTimestamp; +}); + +//@tag extras,core + +//@require Accumulator.js + + + +Ext.define('Ext.perf.Monitor', { + singleton: true, + alternateClassName: 'Ext.Perf', + + + + + + constructor: function () { + this.accumulators = []; + this.accumulatorsByName = {}; + }, + + calibrate: function () { + var accum = new Ext.perf.Accumulator('$'), + total = accum.total, + getTimestamp = Ext.perf.Accumulator.getTimestamp, + count = 0, + frame, + endTime, + startTime; + + startTime = getTimestamp(); + + do { + frame = accum.enter(); + frame.leave(); + ++count; + } while (total.sum < 100); + + endTime = getTimestamp(); + + return (endTime - startTime) / count; + }, + + get: function (name) { + var me = this, + accum = me.accumulatorsByName[name]; + + if (!accum) { + me.accumulatorsByName[name] = accum = new Ext.perf.Accumulator(name); + me.accumulators.push(accum); + } + + return accum; + }, + + enter: function (name) { + return this.get(name).enter(); + }, + + monitor: function (name, fn, scope) { + this.get(name).monitor(fn, scope); + }, + + report: function () { + var me = this, + accumulators = me.accumulators, + calibration = me.calibrate(); + + accumulators.sort(function (a, b) { + return (a.name < b.name) ? -1 : ((b.name < a.name) ? 1 : 0); + }); + + me.updateGC(); + + Ext.log('Calibration: ' + Math.round(calibration * 100) / 100 + ' msec/sample'); + Ext.each(accumulators, function (accum) { + Ext.log(accum.format(calibration)); + }); + }, + + getData: function (all) { + var ret = {}, + accumulators = this.accumulators; + + Ext.each(accumulators, function (accum) { + if (all || accum.count) { + ret[accum.name] = accum.getData(); + } + }); + + return ret; + }, + + reset: function(){ + Ext.each(this.accumulators, function(accum){ + var me = accum; + me.count = me.childCount = me.depth = me.maxDepth = 0; + me.pure = { + min: Number.MAX_VALUE, + max: 0, + sum: 0 + }; + me.total = { + min: Number.MAX_VALUE, + max: 0, + sum: 0 + }; + }); + }, + + updateGC: function () { + var accumGC = this.accumulatorsByName.GC, + toolbox = Ext.senchaToolbox, + bucket; + + if (accumGC) { + accumGC.count = toolbox.garbageCollectionCounter || 0; + + if (accumGC.count) { + bucket = accumGC.pure; + accumGC.total.sum = bucket.sum = toolbox.garbageCollectionMilliseconds; + bucket.min = bucket.max = bucket.sum / accumGC.count; + bucket = accumGC.total; + bucket.min = bucket.max = bucket.sum / accumGC.count; + } + } + }, + + watchGC: function () { + Ext.perf.getTimestamp(); + + var toolbox = Ext.senchaToolbox; + + if (toolbox) { + this.get("GC"); + toolbox.watchGarbageCollector(false); + } + }, + + setup: function (config) { + if (!config) { + config = { + + + + + + + + + render: { + 'Ext.AbstractComponent': 'render' + }, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + layout: { + 'Ext.layout.Context': 'run' + } + }; + } + + this.currentConfig = config; + + var key, prop, + accum, className, methods; + for (key in config) { + if (config.hasOwnProperty(key)) { + prop = config[key]; + accum = Ext.Perf.get(key); + + for (className in prop) { + if (prop.hasOwnProperty(className)) { + methods = prop[className]; + accum.tap(className, methods); + } + } + } + } + + this.watchGC(); + } +}); + +//@tag extras,core + +//@require perf/Monitor.js + +//@define Ext.Supports + + + +Ext.is = { + init : function(navigator) { + var platforms = this.platforms, + ln = platforms.length, + i, platform; + + navigator = navigator || window.navigator; + + for (i = 0; i < ln; i++) { + platform = platforms[i]; + this[platform.identity] = platform.regex.test(navigator[platform.property]); + } + + + this.Desktop = this.Mac || this.Windows || (this.Linux && !this.Android); + + this.Tablet = this.iPad; + + this.Phone = !this.Desktop && !this.Tablet; + + this.iOS = this.iPhone || this.iPad || this.iPod; + + + this.Standalone = !!window.navigator.standalone; + }, + + + platforms: [{ + property: 'platform', + regex: /iPhone/i, + identity: 'iPhone' + }, + + + { + property: 'platform', + regex: /iPod/i, + identity: 'iPod' + }, + + + { + property: 'userAgent', + regex: /iPad/i, + identity: 'iPad' + }, + + + { + property: 'userAgent', + regex: /Blackberry/i, + identity: 'Blackberry' + }, + + + { + property: 'userAgent', + regex: /Android/i, + identity: 'Android' + }, + + + { + property: 'platform', + regex: /Mac/i, + identity: 'Mac' + }, + + + { + property: 'platform', + regex: /Win/i, + identity: 'Windows' + }, + + + { + property: 'platform', + regex: /Linux/i, + identity: 'Linux' + }] +}; + +Ext.is.init(); + + +(function(){ + + + + + var getStyle = function(element, styleName){ + var view = element.ownerDocument.defaultView, + style = (view ? view.getComputedStyle(element, null) : element.currentStyle) || element.style; + return style[styleName]; + }, + supportsVectors = { + 'IE6-quirks': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0], + 'IE6-strict': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0], + 'IE7-quirks': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0], + 'IE7-strict': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0], + 'IE8-quirks': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0], + 'IE8-strict': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0], + 'IE9-quirks': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0], + 'IE9-strict': [0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0], + 'IE10-quirks': [1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,0], + 'IE10-strict': [1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,0] + }; + +function getBrowserKey() { + var browser = Ext.isIE6 ? 'IE6' : Ext.isIE7 ? 'IE7' : Ext.isIE8 ? 'IE8' : + Ext.isIE9 ? 'IE9': Ext.isIE10 ? 'IE10' : ''; + + return browser ? browser + (Ext.isStrict ? '-strict' : '-quirks') : ''; +} + +Ext.supports = { + + init : function() { + var me = this, + doc = document, + toRun = me.toRun || me.tests, + n = toRun.length, + div = n && Ext.isReady && doc.createElement('div'), + notRun = [], + browserKey = getBrowserKey(), + test, vector, value; + + if (div) { + div.innerHTML = [ + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + '
    ' + ].join(''); + + doc.body.appendChild(div); + } + + vector = supportsVectors[browserKey]; + while (n--) { + test = toRun[n]; + value = vector && vector[n]; + if (value !== undefined) { + me[test.identity] = value; + } else if (div || test.early) { + me[test.identity] = test.fn.call(me, doc, div); + } else { + notRun.push(test); + } + } + + if (div) { + doc.body.removeChild(div); + } + + me.toRun = notRun; + }, + + + + PointerEvents: 'pointerEvents' in document.documentElement.style, + + + + + LocalStorage: (function() { + try { + return 'localStorage' in window && window['localStorage'] !== null; + } catch (e) { + return false; + } + })(), + + + CSS3BoxShadow: 'boxShadow' in document.documentElement.style || 'WebkitBoxShadow' in document.documentElement.style || 'MozBoxShadow' in document.documentElement.style, + + + ClassList: !!document.documentElement.classList, + + + OrientationChange: ((typeof window.orientation != 'undefined') && ('onorientationchange' in window)), + + + DeviceMotion: ('ondevicemotion' in window), + + + + + Touch: ('ontouchstart' in window) && (!Ext.is.Desktop), + + + TimeoutActualLateness: (function(){ + setTimeout(function(){ + Ext.supports.TimeoutActualLateness = arguments.length !== 0; + }, 0); + }()), + + tests: [ + + { + identity: 'Transitions', + fn: function(doc, div) { + var prefix = [ + 'webkit', + 'Moz', + 'o', + 'ms', + 'khtml' + ], + TE = 'TransitionEnd', + transitionEndName = [ + prefix[0] + TE, + 'transitionend', + prefix[2] + TE, + prefix[3] + TE, + prefix[4] + TE + ], + ln = prefix.length, + i = 0, + out = false; + + for (; i < ln; i++) { + if (getStyle(div, prefix[i] + "TransitionProperty")) { + Ext.supports.CSS3Prefix = prefix[i]; + Ext.supports.CSS3TransitionEnd = transitionEndName[i]; + out = true; + break; + } + } + return out; + } + }, + + + { + identity: 'RightMargin', + fn: function(doc, div) { + var view = doc.defaultView; + return !(view && view.getComputedStyle(div.firstChild.firstChild, null).marginRight != '0px'); + } + }, + + + { + identity: 'DisplayChangeInputSelectionBug', + early: true, + fn: function() { + var webKitVersion = Ext.webKitVersion; + + return 0 < webKitVersion && webKitVersion < 533; + } + }, + + + { + identity: 'DisplayChangeTextAreaSelectionBug', + early: true, + fn: function() { + var webKitVersion = Ext.webKitVersion; + + + return 0 < webKitVersion && webKitVersion < 534.24; + } + }, + + + { + identity: 'TransparentColor', + fn: function(doc, div, view) { + view = doc.defaultView; + return !(view && view.getComputedStyle(div.lastChild, null).backgroundColor != 'transparent'); + } + }, + + + { + identity: 'ComputedStyle', + fn: function(doc, div, view) { + view = doc.defaultView; + return view && view.getComputedStyle; + } + }, + + + { + identity: 'Svg', + fn: function(doc) { + return !!doc.createElementNS && !!doc.createElementNS( "http:/" + "/www.w3.org/2000/svg", "svg").createSVGRect; + } + }, + + + { + identity: 'Canvas', + fn: function(doc) { + return !!doc.createElement('canvas').getContext; + } + }, + + + { + identity: 'Vml', + fn: function(doc) { + var d = doc.createElement("div"); + d.innerHTML = ""; + return (d.childNodes.length == 2); + } + }, + + + { + identity: 'Float', + fn: function(doc, div) { + return !!div.lastChild.style.cssFloat; + } + }, + + + { + identity: 'AudioTag', + fn: function(doc) { + return !!doc.createElement('audio').canPlayType; + } + }, + + + { + identity: 'History', + fn: function() { + var history = window.history; + return !!(history && history.pushState); + } + }, + + + { + identity: 'CSS3DTransform', + fn: function() { + return (typeof WebKitCSSMatrix != 'undefined' && new WebKitCSSMatrix().hasOwnProperty('m41')); + } + }, + + + { + identity: 'CSS3LinearGradient', + fn: function(doc, div) { + var property = 'background-image:', + webkit = '-webkit-gradient(linear, left top, right bottom, from(black), to(white))', + w3c = 'linear-gradient(left top, black, white)', + moz = '-moz-' + w3c, + ms = '-ms-' + w3c, + opera = '-o-' + w3c, + options = [property + webkit, property + w3c, property + moz, property + ms, property + opera]; + + div.style.cssText = options.join(';'); + + return (("" + div.style.backgroundImage).indexOf('gradient') !== -1) && !Ext.isIE9; + } + }, + + + { + identity: 'CSS3BorderRadius', + fn: function(doc, div) { + var domPrefixes = ['borderRadius', 'BorderRadius', 'MozBorderRadius', 'WebkitBorderRadius', 'OBorderRadius', 'KhtmlBorderRadius'], + pass = false, + i; + for (i = 0; i < domPrefixes.length; i++) { + if (document.body.style[domPrefixes[i]] !== undefined) { + return true; + } + } + return pass; + } + }, + + + { + identity: 'GeoLocation', + fn: function() { + + return (typeof navigator != 'undefined' && 'geolocation' in navigator) || (typeof google != 'undefined' && typeof google.gears != 'undefined'); + } + }, + + { + identity: 'MouseEnterLeave', + fn: function(doc, div){ + return ('onmouseenter' in div && 'onmouseleave' in div); + } + }, + + { + identity: 'MouseWheel', + fn: function(doc, div) { + return ('onmousewheel' in div); + } + }, + + { + identity: 'Opacity', + fn: function(doc, div){ + + if (Ext.isIE6 || Ext.isIE7 || Ext.isIE8) { + return false; + } + div.firstChild.style.cssText = 'opacity:0.73'; + return div.firstChild.style.opacity == '0.73'; + } + }, + + { + identity: 'Placeholder', + fn: function(doc) { + return 'placeholder' in doc.createElement('input'); + } + }, + + + { + identity: 'Direct2DBug', + fn: function() { + return Ext.isString(document.body.style.msTransformOrigin) && Ext.isIE10m; + } + }, + + { + identity: 'BoundingClientRect', + fn: function(doc, div) { + return Ext.isFunction(div.getBoundingClientRect); + } + }, + + { + identity: 'RotatedBoundingClientRect', + fn: function() { + var body = document.body, + supports = false, + el = document.createElement('div'), + style = el.style; + + if (el.getBoundingClientRect) { + style.WebkitTransform = style.MozTransform = + style.OTransform = style.transform = 'rotate(90deg)'; + style.width = '100px'; + style.height = '30px'; + body.appendChild(el) + + supports = el.getBoundingClientRect().height !== 100; + body.removeChild(el); + } + + return supports; + } + }, + { + identity: 'IncludePaddingInWidthCalculation', + fn: function(doc, div){ + return div.childNodes[1].firstChild.offsetWidth == 210; + } + }, + { + identity: 'IncludePaddingInHeightCalculation', + fn: function(doc, div){ + return div.childNodes[1].firstChild.offsetHeight == 210; + } + }, + + + { + identity: 'ArraySort', + fn: function() { + var a = [1,2,3,4,5].sort(function(){ return 0; }); + return a[0] === 1 && a[1] === 2 && a[2] === 3 && a[3] === 4 && a[4] === 5; + } + }, + + { + identity: 'Range', + fn: function() { + return !!document.createRange; + } + }, + + { + identity: 'CreateContextualFragment', + fn: function() { + var range = Ext.supports.Range ? document.createRange() : false; + + return range && !!range.createContextualFragment; + } + }, + + + { + identity: 'WindowOnError', + fn: function () { + + return Ext.isIE || Ext.isGecko || Ext.webKitVersion >= 534.16; + } + }, + + + { + identity: 'TextAreaMaxLength', + fn: function(){ + var el = document.createElement('textarea'); + return ('maxlength' in el); + } + }, + + + { + identity: 'GetPositionPercentage', + fn: function(doc, div){ + return getStyle(div.childNodes[2], 'left') == '10%'; + } + }, + + { + identity: 'PercentageHeightOverflowBug', + fn: function(doc) { + var hasBug = false, + style, el; + + if (Ext.getScrollbarSize().height) { + + el = doc.createElement('div'); + style = el.style; + style.height = '50px'; + style.width = '50px'; + style.overflow = 'auto'; + style.position = 'absolute'; + + el.innerHTML = [ + '
    ', + + + + '
    ', + '
    ' + ].join(''); + doc.body.appendChild(el); + if (el.firstChild.offsetHeight === 50) { + hasBug = true; + } + doc.body.removeChild(el); + } + + return hasBug; + } + }, + + { + identity: 'xOriginBug', + fn: function(doc, div) { + div.innerHTML = '
    ' + + '
    ' + + '
    ' + + '
    '; + + var outerBox = document.getElementById('b1').getBoundingClientRect(), + b2 = document.getElementById('b2').getBoundingClientRect(), + b3 = document.getElementById('b3').getBoundingClientRect(); + + return (b2.left !== outerBox.left && b3.right !== outerBox.right); + } + } + ] +}; +}()); + +Ext.supports.init(); + +//@tag dom,core + +//@require ../Support.js + +//@define Ext.util.DelayedTask + + + +Ext.util.DelayedTask = function(fn, scope, args, cancelOnDelay) { + var me = this, + id, + delay, + call = function() { + clearInterval(id); + id = null; + fn.apply(scope, args || []); + Ext.EventManager.idleEvent.fire(); + }; + + cancelOnDelay = typeof cancelOnDelay === 'boolean' ? cancelOnDelay : true; + + + me.delay = function(newDelay, newFn, newScope, newArgs) { + if (cancelOnDelay) { + me.cancel(); + } + delay = newDelay || delay, + fn = newFn || fn; + scope = newScope || scope; + args = newArgs || args; + if (!id) { + id = setInterval(call, delay); + } + }; + + + me.cancel = function() { + if (id) { + clearInterval(id); + id = null; + } + }; +}; + +//@tag dom,core + + +Ext.define('Ext.util.Event', function() { + var arraySlice = Array.prototype.slice, + arrayInsert = Ext.Array.insert, + toArray = Ext.Array.toArray, + DelayedTask = Ext.util.DelayedTask; + + return { + + + + isEvent: true, + + + suspended: 0, + + noOptions: {}, + + constructor: function(observable, name) { + this.name = name; + this.observable = observable; + this.listeners = []; + }, + + addListener: function(fn, scope, options) { + var me = this, + listeners, listener, priority, isNegativePriority, highestNegativePriorityIndex, + hasNegativePriorityIndex, length, index, i, listenerPriority; + + scope = scope || me.observable; + + + if (!me.isListening(fn, scope)) { + listener = me.createListener(fn, scope, options); + if (me.firing) { + + me.listeners = me.listeners.slice(0); + } + listeners = me.listeners; + index = length = listeners.length; + priority = options && options.priority; + highestNegativePriorityIndex = me._highestNegativePriorityIndex; + hasNegativePriorityIndex = (highestNegativePriorityIndex !== undefined); + if (priority) { + + + isNegativePriority = (priority < 0); + if (!isNegativePriority || hasNegativePriorityIndex) { + + + + + + + for(i = (isNegativePriority ? highestNegativePriorityIndex : 0); i < length; i++) { + + listenerPriority = listeners[i].o ? listeners[i].o.priority||0 : 0; + if (listenerPriority < priority) { + index = i; + break; + } + } + } else { + + + + me._highestNegativePriorityIndex = index; + } + } else if (hasNegativePriorityIndex) { + + + + + index = highestNegativePriorityIndex; + } + + if (!isNegativePriority && index <= highestNegativePriorityIndex) { + me._highestNegativePriorityIndex ++; + } + if (index === length) { + me.listeners[length] = listener; + } else { + arrayInsert(me.listeners, index, [listener]); + } + } + }, + + createListener: function(fn, scope, o) { + scope = scope || this.observable; + + var me = this, + listener = { + fn: fn, + scope: scope, + ev: me + }, + handler = fn; + + + + if (o) { + listener.o = o; + if (o.single) { + handler = me.createSingle(handler, listener, o, scope); + } + if (o.target) { + handler = me.createTargeted(handler, listener, o, scope); + } + if (o.delay) { + handler = me.createDelayed(handler, listener, o, scope); + } + if (o.buffer) { + handler = me.createBuffered(handler, listener, o, scope); + } + } + + listener.fireFn = handler; + return listener; + }, + + findListener: function(fn, scope) { + var listeners = this.listeners, + i = listeners.length, + listener, + s; + + while (i--) { + listener = listeners[i]; + if (listener) { + s = listener.scope; + + + + + if (listener.fn == fn && (s == (scope || this.observable))) { + return i; + } + } + } + + return - 1; + }, + + isListening: function(fn, scope) { + return this.findListener(fn, scope) !== -1; + }, + + removeListener: function(fn, scope) { + var me = this, + index, + listener, + highestNegativePriorityIndex, + k; + index = me.findListener(fn, scope); + if (index != -1) { + listener = me.listeners[index]; + highestNegativePriorityIndex = me._highestNegativePriorityIndex; + + if (me.firing) { + me.listeners = me.listeners.slice(0); + } + + + if (listener.task) { + listener.task.cancel(); + delete listener.task; + } + + + k = listener.tasks && listener.tasks.length; + if (k) { + while (k--) { + listener.tasks[k].cancel(); + } + delete listener.tasks; + } + + + + + me.listeners.splice(index, 1); + + + + if (highestNegativePriorityIndex) { + if (index < highestNegativePriorityIndex) { + me._highestNegativePriorityIndex --; + } else if (index === highestNegativePriorityIndex && index === me.listeners.length) { + delete me._highestNegativePriorityIndex; + } + } + return true; + } + + return false; + }, + + + clearListeners: function() { + var listeners = this.listeners, + i = listeners.length; + + while (i--) { + this.removeListener(listeners[i].fn, listeners[i].scope); + } + }, + + suspend: function() { + this.suspended += 1; + }, + + resume: function() { + if (this.suspended) { + this.suspended--; + } + }, + + fire: function() { + var me = this, + listeners = me.listeners, + count = listeners.length, + i, + args, + listener, + len; + + if (!me.suspended && count > 0) { + me.firing = true; + args = arguments.length ? arraySlice.call(arguments, 0) : [] + len = args.length; + for (i = 0; i < count; i++) { + listener = listeners[i]; + if (listener.o) { + args[len] = listener.o; + } + if (listener && listener.fireFn.apply(listener.scope || me.observable, args) === false) { + return (me.firing = false); + } + } + } + me.firing = false; + return true; + }, + + createTargeted: function (handler, listener, o, scope) { + return function(){ + if (o.target === arguments[0]){ + handler.apply(scope, arguments); + } + }; + }, + + createBuffered: function (handler, listener, o, scope) { + listener.task = new DelayedTask(); + return function() { + listener.task.delay(o.buffer, handler, scope, toArray(arguments)); + }; + }, + + createDelayed: function (handler, listener, o, scope) { + return function() { + var task = new DelayedTask(); + if (!listener.tasks) { + listener.tasks = []; + } + listener.tasks.push(task); + task.delay(o.delay || 10, handler, scope, toArray(arguments)); + }; + }, + + createSingle: function (handler, listener, o, scope) { + return function() { + var event = listener.ev; + + if (event.removeListener(listener.fn, scope) && event.observable) { + + + event.observable.hasListeners[event.name]--; + } + + return handler.apply(scope, arguments); + }; + } + }; +}); + +//@tag dom,core + +//@require util/Event.js + +//@define Ext.EventManager + + + +Ext.EventManager = new function() { + var EventManager = this, + doc = document, + win = window, + escapeRx = /\\/g, + prefix = Ext.baseCSSPrefix, + readyEvent, + initExtCss = function() { + + var bd = doc.body || doc.getElementsByTagName('body')[0], + cls = [prefix + 'body'], + htmlCls = [], + supportsLG = Ext.supports.CSS3LinearGradient, + supportsBR = Ext.supports.CSS3BorderRadius, + html; + + if (!bd) { + return false; + } + + html = bd.parentNode; + + function add (c) { + cls.push(prefix + c); + } + + + if (Ext.isIE && Ext.isIE9m) { + add('ie'); + + + + + + + + + + + + + if (Ext.isIE6) { + add('ie6'); + } else { + add('ie7p'); + + if (Ext.isIE7) { + add('ie7'); + } else { + add('ie8p'); + + if (Ext.isIE8) { + add('ie8'); + } else { + add('ie9p'); + + if (Ext.isIE9) { + add('ie9'); + } + } + } + } + + if (Ext.isIE7m) { + add('ie7m'); + } + if (Ext.isIE8m) { + add('ie8m'); + } + if (Ext.isIE9m) { + add('ie9m'); + } + if (Ext.isIE7 || Ext.isIE8) { + add('ie78'); + } + } + + if (Ext.isIE10) { + add('ie10'); + } + + if (Ext.isGecko) { + add('gecko'); + if (Ext.isGecko3) { + add('gecko3'); + } + if (Ext.isGecko4) { + add('gecko4'); + } + if (Ext.isGecko5) { + add('gecko5'); + } + } + if (Ext.isOpera) { + add('opera'); + } + if (Ext.isWebKit) { + add('webkit'); + } + if (Ext.isSafari) { + add('safari'); + if (Ext.isSafari2) { + add('safari2'); + } + if (Ext.isSafari3) { + add('safari3'); + } + if (Ext.isSafari4) { + add('safari4'); + } + if (Ext.isSafari5) { + add('safari5'); + } + if (Ext.isSafari5_0) { + add('safari5_0') + } + } + if (Ext.isChrome) { + add('chrome'); + } + if (Ext.isMac) { + add('mac'); + } + if (Ext.isLinux) { + add('linux'); + } + if (!supportsBR) { + add('nbr'); + } + if (!supportsLG) { + add('nlg'); + } + + + if (html) { + if (Ext.isStrict && (Ext.isIE6 || Ext.isIE7)) { + Ext.isBorderBox = false; + } + else { + Ext.isBorderBox = true; + } + + if(Ext.isBorderBox) { + htmlCls.push(prefix + 'border-box'); + } + if (Ext.isStrict) { + htmlCls.push(prefix + 'strict'); + } else { + htmlCls.push(prefix + 'quirks'); + } + Ext.fly(html, '_internal').addCls(htmlCls); + } + + Ext.fly(bd, '_internal').addCls(cls); + return true; + }; + + Ext.apply(EventManager, { + + hasBoundOnReady: false, + + + hasFiredReady: false, + + + deferReadyEvent : 1, + + + onReadyChain : [], + + + readyEvent: + (function () { + readyEvent = new Ext.util.Event(); + readyEvent.fire = function () { + Ext._beforeReadyTime = Ext._beforeReadyTime || new Date().getTime(); + readyEvent.self.prototype.fire.apply(readyEvent, arguments); + Ext._afterReadytime = new Date().getTime(); + }; + return readyEvent; + }()), + + + idleEvent: new Ext.util.Event(), + + + isReadyPaused: function(){ + return (/[?&]ext-pauseReadyFire\b/i.test(location.search) && !Ext._continueFireReady); + }, + + + bindReadyEvent: function() { + if (EventManager.hasBoundOnReady) { + return; + } + + + if ( doc.readyState == 'complete' ) { + EventManager.onReadyEvent({ + type: doc.readyState || 'body' + }); + } else { + doc.addEventListener('DOMContentLoaded', EventManager.onReadyEvent, false); + win.addEventListener('load', EventManager.onReadyEvent, false); + EventManager.hasBoundOnReady = true; + } + }, + + onReadyEvent : function(e) { + if (e && e.type) { + EventManager.onReadyChain.push(e.type); + } + + if (EventManager.hasBoundOnReady) { + doc.removeEventListener('DOMContentLoaded', EventManager.onReadyEvent, false); + win.removeEventListener('load', EventManager.onReadyEvent, false); + } + + if (!Ext.isReady) { + EventManager.fireDocReady(); + } + }, + + + fireDocReady: function() { + if (!Ext.isReady) { + Ext._readyTime = new Date().getTime(); + Ext.isReady = true; + + Ext.supports.init(); + EventManager.onWindowUnload(); + readyEvent.onReadyChain = EventManager.onReadyChain; + + if (Ext.isNumber(EventManager.deferReadyEvent)) { + Ext.Function.defer(EventManager.fireReadyEvent, EventManager.deferReadyEvent); + EventManager.hasDocReadyTimer = true; + } else { + EventManager.fireReadyEvent(); + } + } + }, + + + fireReadyEvent: function() { + + + + EventManager.hasDocReadyTimer = false; + EventManager.isFiring = true; + + + + + while (readyEvent.listeners.length && !EventManager.isReadyPaused()) { + readyEvent.fire(); + } + EventManager.isFiring = false; + EventManager.hasFiredReady = true; + Ext.EventManager.idleEvent.fire(); + }, + + + onDocumentReady: function(fn, scope, options) { + options = options || {}; + + options.single = true; + readyEvent.addListener(fn, scope, options); + + + + if (!(EventManager.isFiring || EventManager.hasDocReadyTimer)) { + if (Ext.isReady) { + EventManager.fireReadyEvent(); + } else { + EventManager.bindReadyEvent(); + } + } + }, + + + + + stoppedMouseDownEvent: new Ext.util.Event(), + + + propRe: /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate|freezeEvent)$/, + + + getId : function(element) { + var id; + + element = Ext.getDom(element); + + if (element === doc || element === win) { + id = element === doc ? Ext.documentId : Ext.windowId; + } + else { + id = Ext.id(element); + } + + if (!Ext.cache[id]) { + Ext.addCacheEntry(id, null, element); + } + + return id; + }, + + + prepareListenerConfig: function(element, config, isRemove) { + var propRe = EventManager.propRe, + key, value, args; + + + for (key in config) { + if (config.hasOwnProperty(key)) { + + if (!propRe.test(key)) { + value = config[key]; + + + if (typeof value == 'function') { + + args = [element, key, value, config.scope, config]; + } else { + + args = [element, key, value.fn, value.scope, value]; + } + + if (isRemove) { + EventManager.removeListener.apply(EventManager, args); + } else { + EventManager.addListener.apply(EventManager, args); + } + } + } + } + }, + + mouseEnterLeaveRe: /mouseenter|mouseleave/, + + + normalizeEvent: function(eventName, fn) { + if (EventManager.mouseEnterLeaveRe.test(eventName) && !Ext.supports.MouseEnterLeave) { + if (fn) { + fn = Ext.Function.createInterceptor(fn, EventManager.contains); + } + eventName = eventName == 'mouseenter' ? 'mouseover' : 'mouseout'; + } else if (eventName == 'mousewheel' && !Ext.supports.MouseWheel && !Ext.isOpera) { + eventName = 'DOMMouseScroll'; + } + return { + eventName: eventName, + fn: fn + }; + }, + + + contains: function(event) { + event = event.browserEvent || event; + var parent = event.currentTarget, + child = EventManager.getRelatedTarget(event); + + if (parent && parent.firstChild) { + while (child) { + if (child === parent) { + return false; + } + child = child.parentNode; + if (child && (child.nodeType != 1)) { + child = null; + } + } + } + return true; + }, + + + addListener: function(element, eventName, fn, scope, options) { + + if (typeof eventName !== 'string') { + EventManager.prepareListenerConfig(element, eventName); + return; + } + + var dom = element.dom || Ext.getDom(element), + bind, wrap, cache, id, cacheItem; + + + + options = options || {}; + + bind = EventManager.normalizeEvent(eventName, fn); + wrap = EventManager.createListenerWrap(dom, eventName, bind.fn, scope, options); + + + cache = EventManager.getEventListenerCache(element.dom ? element : dom, eventName); + eventName = bind.eventName; + + if (dom.attachEvent) { + id = EventManager.normalizeId(dom); + + + if (id) { + cacheItem = Ext.cache[id][eventName]; + if (cacheItem && cacheItem.firing) { + + + + + + + cache = EventManager.cloneEventListenerCache(dom, eventName); + } + } + } + + cache.push({ + fn: fn, + wrap: wrap, + scope: scope + }); + + + if (dom.attachEvent) { + + + if (cache.length === 1) { + id = EventManager.normalizeId(dom, true); + fn = Ext.Function.bind(EventManager.handleSingleEvent, EventManager, [id, eventName], true); + Ext.cache[id][eventName] = { + firing: false, + fn: fn + }; + dom.attachEvent('on' + eventName, fn); + } + } else { + dom.addEventListener(eventName, wrap, options.capture || false); + } + + if (dom == doc && eventName == 'mousedown') { + EventManager.stoppedMouseDownEvent.addListener(wrap); + } + }, + + + + normalizeId: function(dom, force) { + var id; + if (dom === document) { + id = Ext.documentId; + } else if (dom === window) { + id = Ext.windowId; + } else { + id = dom.id; + } + if (!id && force) { + id = EventManager.getId(dom); + } + return id; + }, + + handleSingleEvent: function(e, id, eventName) { + + + + var listenerCache = EventManager.getEventListenerCache(id, eventName), + attachItem = Ext.cache[id][eventName], + len, i; + + + + + if (attachItem.firing) { + return; + } + + attachItem.firing = true; + for (i = 0, len = listenerCache.length; i < len; ++i) { + listenerCache[i].wrap(e); + } + attachItem.firing = false; + + }, + + + removeListener : function(element, eventName, fn, scope) { + + if (typeof eventName !== 'string') { + EventManager.prepareListenerConfig(element, eventName, true); + return; + } + + var dom = Ext.getDom(element), + id, el = element.dom ? element : Ext.get(dom), + cache = EventManager.getEventListenerCache(el, eventName), + bindName = EventManager.normalizeEvent(eventName).eventName, + i = cache.length, j, cacheItem, + listener, wrap; + + + while (i--) { + listener = cache[i]; + + if (listener && (!fn || listener.fn == fn) && (!scope || listener.scope === scope)) { + wrap = listener.wrap; + + + if (wrap.task) { + clearTimeout(wrap.task); + delete wrap.task; + } + + + j = wrap.tasks && wrap.tasks.length; + if (j) { + while (j--) { + clearTimeout(wrap.tasks[j]); + } + delete wrap.tasks; + } + + if (dom.detachEvent) { + + + id = EventManager.normalizeId(dom, true); + cacheItem = Ext.cache[id][bindName]; + if (cacheItem && cacheItem.firing) { + + cache = EventManager.cloneEventListenerCache(dom, bindName); + } + + if (cache.length === 1) { + fn = cacheItem.fn; + delete Ext.cache[id][bindName]; + dom.detachEvent('on' + bindName, fn); + } + } else { + dom.removeEventListener(bindName, wrap, false); + } + + if (wrap && dom == doc && eventName == 'mousedown') { + EventManager.stoppedMouseDownEvent.removeListener(wrap); + } + + + Ext.Array.erase(cache, i, 1); + } + } + }, + + + removeAll : function(element) { + var id = (typeof element === 'string') ? element : element.id, + cache, events, eventName; + + + if (id && (cache = Ext.cache[id])) { + events = cache.events; + + for (eventName in events) { + if (events.hasOwnProperty(eventName)) { + EventManager.removeListener(element, eventName); + } + } + cache.events = {}; + } + }, + + + purgeElement : function(element, eventName) { + var dom = Ext.getDom(element), + i = 0, len, childNodes; + + if (eventName) { + EventManager.removeListener(element, eventName); + } else { + EventManager.removeAll(element); + } + + if (dom && dom.childNodes) { + childNodes = dom.childNodes; + for (len = childNodes.length; i < len; i++) { + EventManager.purgeElement(childNodes[i], eventName); + } + } + }, + + + createListenerWrap : function(dom, ename, fn, scope, options) { + options = options || {}; + + var f, gen, wrap = function(e, args) { + + if (!gen) { + f = ['if(!' + Ext.name + ') {return;}']; + + if (options.buffer || options.delay || options.freezeEvent) { + if (options.freezeEvent) { + + + f.push('e = X.EventObject.setEvent(e);'); + } + f.push('e = new X.EventObjectImpl(e, ' + (options.freezeEvent ? 'true' : 'false' ) + ');'); + } else { + f.push('e = X.EventObject.setEvent(e);'); + } + + if (options.delegate) { + + + f.push('var result, t = e.getTarget("' + (options.delegate + '').replace(escapeRx, '\\\\') + '", this);'); + f.push('if(!t) {return;}'); + } else { + f.push('var t = e.target, result;'); + } + + if (options.target) { + f.push('if(e.target !== options.target) {return;}'); + } + + if (options.stopEvent) { + f.push('e.stopEvent();'); + } else { + if(options.preventDefault) { + f.push('e.preventDefault();'); + } + if(options.stopPropagation) { + f.push('e.stopPropagation();'); + } + } + + if (options.normalized === false) { + f.push('e = e.browserEvent;'); + } + + if (options.buffer) { + f.push('(wrap.task && clearTimeout(wrap.task));'); + f.push('wrap.task = setTimeout(function() {'); + } + + if (options.delay) { + f.push('wrap.tasks = wrap.tasks || [];'); + f.push('wrap.tasks.push(setTimeout(function() {'); + } + + + f.push('result = fn.call(scope || dom, e, t, options);'); + + if (options.single) { + f.push('evtMgr.removeListener(dom, ename, fn, scope);'); + } + + + + if (ename !== 'mousemove' && ename !== 'unload') { + f.push('if (evtMgr.idleEvent.listeners.length) {'); + f.push('evtMgr.idleEvent.fire();'); + f.push('}'); + } + + if (options.delay) { + f.push('}, ' + options.delay + '));'); + } + + if (options.buffer) { + f.push('}, ' + options.buffer + ');'); + } + f.push('return result;'); + + gen = Ext.cacheableFunctionFactory('e', 'options', 'fn', 'scope', 'ename', 'dom', 'wrap', 'args', 'X', 'evtMgr', f.join('\n')); + } + + return gen.call(dom, e, options, fn, scope, ename, dom, wrap, args, Ext, EventManager); + }; + return wrap; + }, + + + getEventCache: function(element) { + var elementCache, eventCache, id; + + if (!element) { + return []; + } + + if (element.$cache) { + elementCache = element.$cache; + } else { + + if (typeof element === 'string') { + id = element; + } else { + id = EventManager.getId(element); + } + elementCache = Ext.cache[id]; + } + eventCache = elementCache.events || (elementCache.events = {}); + return eventCache; + }, + + + getEventListenerCache : function(element, eventName) { + var eventCache = EventManager.getEventCache(element); + return eventCache[eventName] || (eventCache[eventName] = []); + }, + + + cloneEventListenerCache: function(element, eventName){ + var eventCache = EventManager.getEventCache(element), + out; + + if (eventCache[eventName]) { + out = eventCache[eventName].slice(0); + } else { + out = []; + } + eventCache[eventName] = out; + return out; + }, + + + mouseLeaveRe: /(mouseout|mouseleave)/, + mouseEnterRe: /(mouseover|mouseenter)/, + + + stopEvent: function(event) { + EventManager.stopPropagation(event); + EventManager.preventDefault(event); + }, + + + stopPropagation: function(event) { + event = event.browserEvent || event; + if (event.stopPropagation) { + event.stopPropagation(); + } else { + event.cancelBubble = true; + } + }, + + + preventDefault: function(event) { + event = event.browserEvent || event; + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + + try { + + if (event.ctrlKey || event.keyCode > 111 && event.keyCode < 124) { + event.keyCode = -1; + } + } catch (e) { + + } + } + }, + + + getRelatedTarget: function(event) { + event = event.browserEvent || event; + var target = event.relatedTarget; + if (!target) { + if (EventManager.mouseLeaveRe.test(event.type)) { + target = event.toElement; + } else if (EventManager.mouseEnterRe.test(event.type)) { + target = event.fromElement; + } + } + return EventManager.resolveTextNode(target); + }, + + + getPageX: function(event) { + return EventManager.getPageXY(event)[0]; + }, + + + getPageY: function(event) { + return EventManager.getPageXY(event)[1]; + }, + + + getPageXY: function(event) { + event = event.browserEvent || event; + var x = event.pageX, + y = event.pageY, + docEl = doc.documentElement, + body = doc.body; + + + if (!x && x !== 0) { + x = event.clientX + (docEl && docEl.scrollLeft || body && body.scrollLeft || 0) - (docEl && docEl.clientLeft || body && body.clientLeft || 0); + y = event.clientY + (docEl && docEl.scrollTop || body && body.scrollTop || 0) - (docEl && docEl.clientTop || body && body.clientTop || 0); + } + return [x, y]; + }, + + + getTarget: function(event) { + event = event.browserEvent || event; + return EventManager.resolveTextNode(event.target || event.srcElement); + }, + + + + + + resolveTextNode: Ext.isGecko ? + function(node) { + if (node) { + + var s = HTMLElement.prototype.toString.call(node); + if (s !== '[xpconnect wrapped native prototype]' && s !== '[object XULElement]') { + return node.nodeType == 3 ? node.parentNode: node; + } + } + } + : + function(node) { + return node && node.nodeType == 3 ? node.parentNode: node; + }, + + + + + curWidth: 0, + curHeight: 0, + + + onWindowResize: function(fn, scope, options) { + var resize = EventManager.resizeEvent; + + if (!resize) { + EventManager.resizeEvent = resize = new Ext.util.Event(); + EventManager.on(win, 'resize', EventManager.fireResize, null, {buffer: 100}); + } + resize.addListener(fn, scope, options); + }, + + + fireResize: function() { + var w = Ext.Element.getViewWidth(), + h = Ext.Element.getViewHeight(); + + + if (EventManager.curHeight != h || EventManager.curWidth != w) { + EventManager.curHeight = h; + EventManager.curWidth = w; + EventManager.resizeEvent.fire(w, h); + } + }, + + + removeResizeListener: function(fn, scope) { + var resize = EventManager.resizeEvent; + if (resize) { + resize.removeListener(fn, scope); + } + }, + + + onWindowUnload: function(fn, scope, options) { + var unload = EventManager.unloadEvent; + + if (!unload) { + EventManager.unloadEvent = unload = new Ext.util.Event(); + EventManager.addListener(win, 'unload', EventManager.fireUnload); + } + if (fn) { + unload.addListener(fn, scope, options); + } + }, + + + fireUnload: function() { + + try { + + doc = win = undefined; + + var gridviews, i, ln, + el, cache; + + EventManager.unloadEvent.fire(); + + if (Ext.isGecko3) { + gridviews = Ext.ComponentQuery.query('gridview'); + i = 0; + ln = gridviews.length; + for (; i < ln; i++) { + gridviews[i].scrollToTop(); + } + } + + cache = Ext.cache; + + for (el in cache) { + if (cache.hasOwnProperty(el)) { + EventManager.removeAll(el); + } + } + } catch(e) { + } + }, + + + removeUnloadListener: function(fn, scope) { + var unload = EventManager.unloadEvent; + if (unload) { + unload.removeListener(fn, scope); + } + }, + + + useKeyDown: Ext.isWebKit ? + parseInt(navigator.userAgent.match(/AppleWebKit\/(\d+)/)[1], 10) >= 525 : + !((Ext.isGecko && !Ext.isWindows) || Ext.isOpera), + + + getKeyEvent: function() { + return EventManager.useKeyDown ? 'keydown' : 'keypress'; + } + }); + + + if(!('addEventListener' in document) && document.attachEvent) { + Ext.apply( EventManager, { + + + + pollScroll : function() { + var scrollable = true; + + try { + document.documentElement.doScroll('left'); + } catch(e) { + scrollable = false; + } + + + if (scrollable && document.body) { + EventManager.onReadyEvent({ + type:'doScroll' + }); + } else { + + EventManager.scrollTimeout = setTimeout(EventManager.pollScroll, 20); + } + + return scrollable; + }, + + + scrollTimeout: null, + + + readyStatesRe : /complete/i, + + + checkReadyState: function() { + var state = document.readyState; + + if (EventManager.readyStatesRe.test(state)) { + EventManager.onReadyEvent({ + type: state + }); + } + }, + + bindReadyEvent: function() { + var topContext = true; + + if (EventManager.hasBoundOnReady) { + return; + } + + + try { + topContext = window.frameElement === undefined; + } catch(e) { + + + topContext = false; + } + + if (!topContext || !doc.documentElement.doScroll) { + EventManager.pollScroll = Ext.emptyFn; + } + + + if (EventManager.pollScroll() === true) { + return; + } + + + if (doc.readyState == 'complete' ) { + EventManager.onReadyEvent({type: 'already ' + (doc.readyState || 'body') }); + } else { + doc.attachEvent('onreadystatechange', EventManager.checkReadyState); + window.attachEvent('onload', EventManager.onReadyEvent); + EventManager.hasBoundOnReady = true; + } + }, + + onReadyEvent : function(e) { + if (e && e.type) { + EventManager.onReadyChain.push(e.type); + } + + if (EventManager.hasBoundOnReady) { + document.detachEvent('onreadystatechange', EventManager.checkReadyState); + window.detachEvent('onload', EventManager.onReadyEvent); + } + + if (Ext.isNumber(EventManager.scrollTimeout)) { + clearTimeout(EventManager.scrollTimeout); + delete EventManager.scrollTimeout; + } + + if (!Ext.isReady) { + EventManager.fireDocReady(); + } + }, + + + onReadyChain : [] + }); + } + + + + Ext.onReady = function(fn, scope, options) { + Ext.Loader.onReady(fn, scope, true, options); + }; + + + Ext.onDocumentReady = EventManager.onDocumentReady; + + + EventManager.on = EventManager.addListener; + + + EventManager.un = EventManager.removeListener; + + Ext.onReady(initExtCss); +}; + +//@tag core + + +Ext.define('Ext.util.Observable', function(Observable) { + + + var emptyArray = [], + arrayProto = Array.prototype, + arraySlice = arrayProto.slice, + ExtEvent = Ext.util.Event, + ListenerRemover = function(observable) { + + + if (observable instanceof ListenerRemover) { + return observable; + } + + this.observable = observable; + + + + if (arguments[1].isObservable) { + this.managedListeners = true; + } + this.args = arraySlice.call(arguments, 1); + }; + + ListenerRemover.prototype.destroy = function() { + this.observable[this.managedListeners ? 'mun' : 'un'].apply(this.observable, this.args); + }; + + return { + + + + + + statics: { + + releaseCapture: function(o) { + o.fireEvent = this.prototype.fireEvent; + }, + + + capture: function(o, fn, scope) { + o.fireEvent = Ext.Function.createInterceptor(o.fireEvent, fn, scope); + }, + + + observe: function(cls, listeners) { + if (cls) { + if (!cls.isObservable) { + Ext.applyIf(cls, new this()); + this.capture(cls.prototype, cls.fireEvent, cls); + } + if (Ext.isObject(listeners)) { + cls.on(listeners); + } + } + return cls; + }, + + + prepareClass: function (T, mixin) { + + + + + + + if (!T.HasListeners) { + + + + var HasListeners = function () {}, + SuperHL = T.superclass.HasListeners || (mixin && mixin.HasListeners) || + Observable.HasListeners; + + + T.prototype.HasListeners = T.HasListeners = HasListeners; + + + + HasListeners.prototype = T.hasListeners = new SuperHL(); + } + } + }, + + + + + + + isObservable: true, + + + eventsSuspended: 0, + + + + constructor: function(config) { + var me = this; + + Ext.apply(me, config); + + + if (!me.hasListeners) { + me.hasListeners = new me.HasListeners(); + } + + me.events = me.events || {}; + if (me.listeners) { + me.on(me.listeners); + me.listeners = null; + } + + if (me.bubbleEvents) { + me.enableBubble(me.bubbleEvents); + } + }, + + onClassExtended: function (T) { + if (!T.HasListeners) { + + + Observable.prepareClass(T); + } + }, + + + + eventOptionsRe : /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate|element|destroyable|vertical|horizontal|freezeEvent|priority)$/, + + + addManagedListener : function(item, ename, fn, scope, options, noDestroy) { + var me = this, + managedListeners = me.managedListeners = me.managedListeners || [], + config, passedOptions; + + if (typeof ename !== 'string') { + + + + + passedOptions = arguments.length > 4 ? options : ename; + + options = ename; + for (ename in options) { + if (options.hasOwnProperty(ename)) { + config = options[ename]; + if (!me.eventOptionsRe.test(ename)) { + + + me.addManagedListener(item, ename, config.fn || config, config.scope || options.scope || scope, config.fn ? config : passedOptions, true); + } + } + } + if (options && options.destroyable) { + return new ListenerRemover(me, item, options); + } + } + else { + if (typeof fn === 'string') { + scope = scope || me; + fn = scope[fn]; + } + managedListeners.push({ + item: item, + ename: ename, + fn: fn, + scope: scope, + options: options + }); + + item.on(ename, fn, scope, options); + + + if (!noDestroy && options && options.destroyable) { + return new ListenerRemover(me, item, ename, fn, scope); + } + } + }, + + + removeManagedListener : function(item, ename, fn, scope) { + var me = this, + options, + config, + managedListeners, + length, + i; + + if (typeof ename !== 'string') { + options = ename; + for (ename in options) { + if (options.hasOwnProperty(ename)) { + config = options[ename]; + if (!me.eventOptionsRe.test(ename)) { + me.removeManagedListener(item, ename, config.fn || config, config.scope || options.scope || scope); + } + } + } + } else { + + managedListeners = me.managedListeners ? me.managedListeners.slice() : []; + + for (i = 0, length = managedListeners.length; i < length; i++) { + me.removeManagedListenerItem(false, managedListeners[i], item, ename, fn, scope); + } + } + }, + + + fireEvent: function(eventName) { + return this.fireEventArgs(eventName, Array.prototype.slice.call(arguments, 1)); + }, + + + fireEventArgs: function(eventName, args) { + eventName = eventName.toLowerCase(); + var me = this, + events = me.events, + event = events && events[eventName], + ret = true; + + + + if (event && me.hasListeners[eventName]) { + ret = me.continueFireEvent(eventName, args || emptyArray, event.bubble); + } + return ret; + }, + + + continueFireEvent: function(eventName, args, bubbles) { + var target = this, + queue, event, + ret = true; + + do { + if (target.eventsSuspended) { + if ((queue = target.eventQueue)) { + queue.push([eventName, args, bubbles]); + } + return ret; + } else { + event = target.events[eventName]; + + + if (event && event != true) { + if ((ret = event.fire.apply(event, args)) === false) { + break; + } + } + } + } while (bubbles && (target = target.getBubbleParent())); + return ret; + }, + + + getBubbleParent: function() { + var me = this, parent = me.getBubbleTarget && me.getBubbleTarget(); + if (parent && parent.isObservable) { + return parent; + } + return null; + }, + + + addListener: function(ename, fn, scope, options) { + var me = this, + config, event, + prevListenerCount = 0; + + + if (typeof ename !== 'string') { + options = ename; + for (ename in options) { + if (options.hasOwnProperty(ename)) { + config = options[ename]; + if (!me.eventOptionsRe.test(ename)) { + + me.addListener(ename, config.fn || config, config.scope || options.scope, config.fn ? config : options); + } + } + } + if (options && options.destroyable) { + return new ListenerRemover(me, options); + } + } + + else { + ename = ename.toLowerCase(); + event = me.events[ename]; + if (event && event.isEvent) { + prevListenerCount = event.listeners.length; + } else { + me.events[ename] = event = new ExtEvent(me, ename); + } + + + if (typeof fn === 'string') { + scope = scope || me; + fn = scope[fn]; + } + event.addListener(fn, scope, options); + + + + if (event.listeners.length !== prevListenerCount) { + me.hasListeners._incr_(ename); + } + if (options && options.destroyable) { + return new ListenerRemover(me, ename, fn, scope, options); + } + } + }, + + + removeListener: function(ename, fn, scope) { + var me = this, + config, + event, + options; + + if (typeof ename !== 'string') { + options = ename; + for (ename in options) { + if (options.hasOwnProperty(ename)) { + config = options[ename]; + if (!me.eventOptionsRe.test(ename)) { + me.removeListener(ename, config.fn || config, config.scope || options.scope); + } + } + } + } else { + ename = ename.toLowerCase(); + event = me.events[ename]; + if (event && event.isEvent) { + if (event.removeListener(fn, scope)) { + me.hasListeners._decr_(ename); + } + } + } + }, + + + clearListeners: function() { + var events = this.events, + hasListeners = this.hasListeners, + event, + key; + + for (key in events) { + if (events.hasOwnProperty(key)) { + event = events[key]; + if (event.isEvent) { + delete hasListeners[key]; + event.clearListeners(); + } + } + } + + this.clearManagedListeners(); + }, + + + + clearManagedListeners : function() { + var managedListeners = this.managedListeners || [], + i = 0, + len = managedListeners.length; + + for (; i < len; i++) { + this.removeManagedListenerItem(true, managedListeners[i]); + } + + this.managedListeners = []; + }, + + + removeManagedListenerItem: function(isClear, managedListener, item, ename, fn, scope){ + if (isClear || (managedListener.item === item && managedListener.ename === ename && (!fn || managedListener.fn === fn) && (!scope || managedListener.scope === scope))) { + managedListener.item.un(managedListener.ename, managedListener.fn, managedListener.scope); + if (!isClear) { + Ext.Array.remove(this.managedListeners, managedListener); + } + } + }, + + + + addEvents: function(o) { + var me = this, + events = me.events || (me.events = {}), + arg, args, i; + + if (typeof o == 'string') { + for (args = arguments, i = args.length; i--; ) { + arg = args[i]; + if (!events[arg]) { + events[arg] = true; + } + } + } else { + Ext.applyIf(me.events, o); + } + }, + + + hasListener: function(ename) { + return !!this.hasListeners[ename.toLowerCase()]; + }, + + + suspendEvents: function(queueSuspended) { + this.eventsSuspended += 1; + if (queueSuspended && !this.eventQueue) { + this.eventQueue = []; + } + }, + + + suspendEvent: function(eventName) { + var len = arguments.length, + i, event; + + for (i = 0; i < len; i++) { + event = this.events[arguments[i]]; + + + if (event && event.suspend) { + event.suspend(); + } + } + }, + + + resumeEvent: function() { + var len = arguments.length, + i, event; + + for (i = 0; i < len; i++) { + + + event = this.events[arguments[i]]; + if (event && event.resume) { + event.resume(); + } + } + }, + + + resumeEvents: function() { + var me = this, + queued = me.eventQueue, + qLen, q; + + if (me.eventsSuspended && ! --me.eventsSuspended) { + delete me.eventQueue; + + if (queued) { + qLen = queued.length; + for (q = 0; q < qLen; q++) { + me.continueFireEvent.apply(me, queued[q]); + } + } + } + }, + + + relayEvents : function(origin, events, prefix) { + var me = this, + len = events.length, + i = 0, + oldName, + relayers = {}; + + for (; i < len; i++) { + oldName = events[i]; + + + relayers[oldName] = me.createRelayer(prefix ? prefix + oldName : oldName); + } + + + + me.mon(origin, relayers, null, null, undefined); + + + return new ListenerRemover(me, origin, relayers); + }, + + + createRelayer: function(newName, beginEnd) { + var me = this; + return function() { + return me.fireEventArgs.call(me, newName, beginEnd ? Array.prototype.slice.apply(arguments, beginEnd) : arguments); + }; + }, + + + enableBubble: function(eventNames) { + if (eventNames) { + var me = this, + names = (typeof eventNames == 'string') ? arguments : eventNames, + length = names.length, + events = me.events, + ename, event, i; + + for (i = 0; i < length; ++i) { + ename = names[i].toLowerCase(); + event = events[ename]; + + if (!event || typeof event == 'boolean') { + events[ename] = event = new ExtEvent(me, ename); + } + + + + me.hasListeners._incr_(ename); + + event.bubble = true; + } + } + } + }; +}, function() { + var Observable = this, + proto = Observable.prototype, + HasListeners = function () {}, + prepareMixin = function (T) { + if (!T.HasListeners) { + var proto = T.prototype; + + + Observable.prepareClass(T, this); + + + + T.onExtended(function (U) { + + Observable.prepareClass(U); + }); + + + + if (proto.onClassMixedIn) { + + Ext.override(T, { + onClassMixedIn: function (U) { + prepareMixin.call(this, U); + this.callParent(arguments); + } + }); + } else { + + proto.onClassMixedIn = function (U) { + prepareMixin.call(this, U); + }; + } + } + }, + globalEvents; + + HasListeners.prototype = { + + _decr_: function (ev) { + if (! --this[ev]) { + + + + delete this[ev]; + } + }, + _incr_: function (ev) { + if (this.hasOwnProperty(ev)) { + + ++this[ev]; + } else { + + + this[ev] = 1; + } + } + }; + + proto.HasListeners = Observable.HasListeners = HasListeners; + + Observable.createAlias({ + + on: 'addListener', + + un: 'removeListener', + + mon: 'addManagedListener', + + mun: 'removeManagedListener' + }); + + + Observable.observeClass = Observable.observe; + + + Ext.globalEvents = globalEvents = new Observable({ + events: { + idle: Ext.EventManager.idleEvent, + ready: Ext.EventManager.readyEvent + } + }); + + + Ext.on = function() { + return globalEvents.addListener.apply(globalEvents, arguments); + }; + + + Ext.un = function() { + return globalEvents.removeListener.apply(globalEvents, arguments); + }; + + + + + function getMethodEvent(method){ + var e = (this.methodEvents = this.methodEvents || {})[method], + returnValue, + v, + cancel, + obj = this, + makeCall; + + if (!e) { + this.methodEvents[method] = e = {}; + e.originalFn = this[method]; + e.methodName = method; + e.before = []; + e.after = []; + + makeCall = function(fn, scope, args){ + if((v = fn.apply(scope || obj, args)) !== undefined){ + if (typeof v == 'object') { + if(v.returnValue !== undefined){ + returnValue = v.returnValue; + }else{ + returnValue = v; + } + cancel = !!v.cancel; + } + else + if (v === false) { + cancel = true; + } + else { + returnValue = v; + } + } + }; + + this[method] = function(){ + var args = Array.prototype.slice.call(arguments, 0), + b, i, len; + returnValue = v = undefined; + cancel = false; + + for(i = 0, len = e.before.length; i < len; i++){ + b = e.before[i]; + makeCall(b.fn, b.scope, args); + if (cancel) { + return returnValue; + } + } + + if((v = e.originalFn.apply(obj, args)) !== undefined){ + returnValue = v; + } + + for(i = 0, len = e.after.length; i < len; i++){ + b = e.after[i]; + makeCall(b.fn, b.scope, args); + if (cancel) { + return returnValue; + } + } + return returnValue; + }; + } + return e; + } + + Ext.apply(proto, { + onClassMixedIn: prepareMixin, + + + + + beforeMethod : function(method, fn, scope){ + getMethodEvent.call(this, method).before.push({ + fn: fn, + scope: scope + }); + }, + + + afterMethod : function(method, fn, scope){ + getMethodEvent.call(this, method).after.push({ + fn: fn, + scope: scope + }); + }, + + removeMethodListener: function(method, fn, scope){ + var e = this.getMethodEvent(method), + i, len; + for(i = 0, len = e.before.length; i < len; i++){ + if(e.before[i].fn == fn && e.before[i].scope == scope){ + Ext.Array.erase(e.before, i, 1); + return; + } + } + for(i = 0, len = e.after.length; i < len; i++){ + if(e.after[i].fn == fn && e.after[i].scope == scope){ + Ext.Array.erase(e.after, i, 1); + return; + } + } + }, + + toggleEventLogging: function(toggle) { + Ext.util.Observable[toggle ? 'capture' : 'releaseCapture'](this, function(en) { + if (Ext.isDefined(Ext.global.console)) { + Ext.global.console.log(en, arguments); + } + }); + } + }); +}); + +//@tag dom,core + +//@require EventManager.js + +//@define Ext.EventObject + + + +Ext.define('Ext.EventObjectImpl', { + + + + BACKSPACE: 8, + + TAB: 9, + + NUM_CENTER: 12, + + ENTER: 13, + + RETURN: 13, + + SHIFT: 16, + + CTRL: 17, + + ALT: 18, + + PAUSE: 19, + + CAPS_LOCK: 20, + + ESC: 27, + + SPACE: 32, + + PAGE_UP: 33, + + PAGE_DOWN: 34, + + END: 35, + + HOME: 36, + + LEFT: 37, + + UP: 38, + + RIGHT: 39, + + DOWN: 40, + + PRINT_SCREEN: 44, + + INSERT: 45, + + DELETE: 46, + + ZERO: 48, + + ONE: 49, + + TWO: 50, + + THREE: 51, + + FOUR: 52, + + FIVE: 53, + + SIX: 54, + + SEVEN: 55, + + EIGHT: 56, + + NINE: 57, + + A: 65, + + B: 66, + + C: 67, + + D: 68, + + E: 69, + + F: 70, + + G: 71, + + H: 72, + + I: 73, + + J: 74, + + K: 75, + + L: 76, + + M: 77, + + N: 78, + + O: 79, + + P: 80, + + Q: 81, + + R: 82, + + S: 83, + + T: 84, + + U: 85, + + V: 86, + + W: 87, + + X: 88, + + Y: 89, + + Z: 90, + + CONTEXT_MENU: 93, + + NUM_ZERO: 96, + + NUM_ONE: 97, + + NUM_TWO: 98, + + NUM_THREE: 99, + + NUM_FOUR: 100, + + NUM_FIVE: 101, + + NUM_SIX: 102, + + NUM_SEVEN: 103, + + NUM_EIGHT: 104, + + NUM_NINE: 105, + + NUM_MULTIPLY: 106, + + NUM_PLUS: 107, + + NUM_MINUS: 109, + + NUM_PERIOD: 110, + + NUM_DIVISION: 111, + + F1: 112, + + F2: 113, + + F3: 114, + + F4: 115, + + F5: 116, + + F6: 117, + + F7: 118, + + F8: 119, + + F9: 120, + + F10: 121, + + F11: 122, + + F12: 123, + + WHEEL_SCALE: (function () { + var scale; + + if (Ext.isGecko) { + + scale = 3; + } else if (Ext.isMac) { + + + + + if (Ext.isSafari && Ext.webKitVersion >= 532.0) { + + + + + + + scale = 120; + } else { + + + scale = 12; + } + + + + + + scale *= 3; + } else { + + scale = 120; + } + + return scale; + }()), + + + clickRe: /(dbl)?click/, + + safariKeys: { + 3: 13, + 63234: 37, + 63235: 39, + 63232: 38, + 63233: 40, + 63276: 33, + 63277: 34, + 63272: 46, + 63273: 36, + 63275: 35 + }, + + btnMap: Ext.isIE ? { + 1: 0, + 4: 1, + 2: 2 + } : { + 0: 0, + 1: 1, + 2: 2 + }, + + + + + + constructor: function(event, freezeEvent){ + if (event) { + this.setEvent(event.browserEvent || event, freezeEvent); + } + }, + + setEvent: function(event, freezeEvent){ + var me = this, button, options; + + if (event === me || (event && event.browserEvent)) { + return event; + } + me.browserEvent = event; + if (event) { + + button = event.button ? me.btnMap[event.button] : (event.which ? event.which - 1 : -1); + if (me.clickRe.test(event.type) && button == -1) { + button = 0; + } + options = { + type: event.type, + button: button, + shiftKey: event.shiftKey, + + ctrlKey: event.ctrlKey || event.metaKey || false, + altKey: event.altKey, + + keyCode: event.keyCode, + charCode: event.charCode, + + target: Ext.EventManager.getTarget(event), + relatedTarget: Ext.EventManager.getRelatedTarget(event), + currentTarget: event.currentTarget, + xy: (freezeEvent ? me.getXY() : null) + }; + } else { + options = { + button: -1, + shiftKey: false, + ctrlKey: false, + altKey: false, + keyCode: 0, + charCode: 0, + target: null, + xy: [0, 0] + }; + } + Ext.apply(me, options); + return me; + }, + + + stopEvent: function(){ + this.stopPropagation(); + this.preventDefault(); + }, + + + preventDefault: function(){ + if (this.browserEvent) { + Ext.EventManager.preventDefault(this.browserEvent); + } + }, + + + stopPropagation: function(){ + var browserEvent = this.browserEvent; + + if (browserEvent) { + if (browserEvent.type == 'mousedown') { + Ext.EventManager.stoppedMouseDownEvent.fire(this); + } + Ext.EventManager.stopPropagation(browserEvent); + } + }, + + + getCharCode: function(){ + return this.charCode || this.keyCode; + }, + + + getKey: function(){ + return this.normalizeKey(this.keyCode || this.charCode); + }, + + + normalizeKey: function(key){ + + return Ext.isWebKit ? (this.safariKeys[key] || key) : key; + }, + + + getPageX: function(){ + return this.getX(); + }, + + + getPageY: function(){ + return this.getY(); + }, + + + getX: function() { + return this.getXY()[0]; + }, + + + getY: function() { + return this.getXY()[1]; + }, + + + getXY: function() { + if (!this.xy) { + + this.xy = Ext.EventManager.getPageXY(this.browserEvent); + } + return this.xy; + }, + + + getTarget : function(selector, maxDepth, returnEl){ + if (selector) { + return Ext.fly(this.target).findParent(selector, maxDepth, returnEl); + } + return returnEl ? Ext.get(this.target) : this.target; + }, + + + getRelatedTarget : function(selector, maxDepth, returnEl){ + if (selector && this.relatedTarget) { + return Ext.fly(this.relatedTarget).findParent(selector, maxDepth, returnEl); + } + return returnEl ? Ext.get(this.relatedTarget) : this.relatedTarget; + }, + + + correctWheelDelta : function (delta) { + var scale = this.WHEEL_SCALE, + ret = Math.round(delta / scale); + + if (!ret && delta) { + ret = (delta < 0) ? -1 : 1; + } + + return ret; + }, + + + getWheelDeltas : function () { + var me = this, + event = me.browserEvent, + dx = 0, dy = 0; + + if (Ext.isDefined(event.wheelDeltaX)) { + dx = event.wheelDeltaX; + dy = event.wheelDeltaY; + } else if (event.wheelDelta) { + dy = event.wheelDelta; + } else if (event.detail) { + dy = -event.detail; + + + + if (dy > 100) { + dy = 3; + } else if (dy < -100) { + dy = -3; + } + + + + if (Ext.isDefined(event.axis) && event.axis === event.HORIZONTAL_AXIS) { + dx = dy; + dy = 0; + } + } + + return { + x: me.correctWheelDelta(dx), + y: me.correctWheelDelta(dy) + }; + }, + + + getWheelDelta : function(){ + var deltas = this.getWheelDeltas(); + + return deltas.y; + }, + + + within : function(el, related, allowEl){ + if(el){ + var t = related ? this.getRelatedTarget() : this.getTarget(), + result; + + if (t) { + result = Ext.fly(el).contains(t); + if (!result && allowEl) { + result = t == Ext.getDom(el); + } + return result; + } + } + return false; + }, + + + isNavKeyPress : function(){ + var me = this, + k = this.normalizeKey(me.keyCode); + + return (k >= 33 && k <= 40) || + k == me.RETURN || + k == me.TAB || + k == me.ESC; + }, + + + isSpecialKey : function(){ + var k = this.normalizeKey(this.keyCode); + return (this.type == 'keypress' && this.ctrlKey) || + this.isNavKeyPress() || + (k == this.BACKSPACE) || + (k >= 16 && k <= 20) || + (k >= 44 && k <= 46); + }, + + + getPoint : function(){ + var xy = this.getXY(); + return new Ext.util.Point(xy[0], xy[1]); + }, + + + hasModifier : function(){ + return this.ctrlKey || this.altKey || this.shiftKey || this.metaKey; + }, + + + injectEvent: (function () { + var API, + dispatchers = {}, + crazyIEButtons; + + + + + + + if (!Ext.isIE && document.createEvent) { + API = { + createHtmlEvent: function (doc, type, bubbles, cancelable) { + var event = doc.createEvent('HTMLEvents'); + + event.initEvent(type, bubbles, cancelable); + return event; + }, + + createMouseEvent: function (doc, type, bubbles, cancelable, detail, + clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, + button, relatedTarget) { + var event = doc.createEvent('MouseEvents'), + view = doc.defaultView || window; + + if (event.initMouseEvent) { + event.initMouseEvent(type, bubbles, cancelable, view, detail, + clientX, clientY, clientX, clientY, ctrlKey, altKey, + shiftKey, metaKey, button, relatedTarget); + } else { + event = doc.createEvent('UIEvents'); + event.initEvent(type, bubbles, cancelable); + event.view = view; + event.detail = detail; + event.screenX = clientX; + event.screenY = clientY; + event.clientX = clientX; + event.clientY = clientY; + event.ctrlKey = ctrlKey; + event.altKey = altKey; + event.metaKey = metaKey; + event.shiftKey = shiftKey; + event.button = button; + event.relatedTarget = relatedTarget; + } + + return event; + }, + + createUIEvent: function (doc, type, bubbles, cancelable, detail) { + var event = doc.createEvent('UIEvents'), + view = doc.defaultView || window; + + event.initUIEvent(type, bubbles, cancelable, view, detail); + return event; + }, + + fireEvent: function (target, type, event) { + target.dispatchEvent(event); + }, + + fixTarget: function (target) { + + if (target == window && !target.dispatchEvent) { + return document; + } + + return target; + } + }; + } else if (document.createEventObject) { + crazyIEButtons = { 0: 1, 1: 4, 2: 2 }; + + API = { + createHtmlEvent: function (doc, type, bubbles, cancelable) { + var event = doc.createEventObject(); + event.bubbles = bubbles; + event.cancelable = cancelable; + return event; + }, + + createMouseEvent: function (doc, type, bubbles, cancelable, detail, + clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, + button, relatedTarget) { + var event = doc.createEventObject(); + event.bubbles = bubbles; + event.cancelable = cancelable; + event.detail = detail; + event.screenX = clientX; + event.screenY = clientY; + event.clientX = clientX; + event.clientY = clientY; + event.ctrlKey = ctrlKey; + event.altKey = altKey; + event.shiftKey = shiftKey; + event.metaKey = metaKey; + event.button = crazyIEButtons[button] || button; + event.relatedTarget = relatedTarget; + return event; + }, + + createUIEvent: function (doc, type, bubbles, cancelable, detail) { + var event = doc.createEventObject(); + event.bubbles = bubbles; + event.cancelable = cancelable; + return event; + }, + + fireEvent: function (target, type, event) { + target.fireEvent('on' + type, event); + }, + + fixTarget: function (target) { + if (target == document) { + + + return document.documentElement; + } + + return target; + } + }; + } + + + + + Ext.Object.each({ + load: [false, false], + unload: [false, false], + select: [true, false], + change: [true, false], + submit: [true, true], + reset: [true, false], + resize: [true, false], + scroll: [true, false] + }, + function (name, value) { + var bubbles = value[0], cancelable = value[1]; + dispatchers[name] = function (targetEl, srcEvent) { + var e = API.createHtmlEvent(name, bubbles, cancelable); + API.fireEvent(targetEl, name, e); + }; + }); + + + + + function createMouseEventDispatcher (type, detail) { + var cancelable = (type != 'mousemove'); + return function (targetEl, srcEvent) { + var xy = srcEvent.getXY(), + e = API.createMouseEvent(targetEl.ownerDocument, type, true, cancelable, + detail, xy[0], xy[1], srcEvent.ctrlKey, srcEvent.altKey, + srcEvent.shiftKey, srcEvent.metaKey, srcEvent.button, + srcEvent.relatedTarget); + API.fireEvent(targetEl, type, e); + }; + } + + Ext.each(['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 'mouseout'], + function (eventName) { + dispatchers[eventName] = createMouseEventDispatcher(eventName, 1); + }); + + + + + Ext.Object.each({ + focusin: [true, false], + focusout: [true, false], + activate: [true, true], + focus: [false, false], + blur: [false, false] + }, + function (name, value) { + var bubbles = value[0], cancelable = value[1]; + dispatchers[name] = function (targetEl, srcEvent) { + var e = API.createUIEvent(targetEl.ownerDocument, name, bubbles, cancelable, 1); + API.fireEvent(targetEl, name, e); + }; + }); + + + if (!API) { + + + dispatchers = {}; + + API = { + fixTarget: Ext.identityFn + }; + } + + function cannotInject (target, srcEvent) { + } + + return function (target) { + var me = this, + dispatcher = dispatchers[me.type] || cannotInject, + t = target ? (target.dom || target) : me.getTarget(); + + t = API.fixTarget(t); + dispatcher(t, me); + }; + }()) + +}, function() { + +Ext.EventObject = new Ext.EventObjectImpl(); + +}); + + +//@tag dom,core + +//@require ../EventObject.js + + + +Ext.define('Ext.dom.AbstractQuery', { + + select: function(q, root) { + var results = [], + nodes, + i, + j, + qlen, + nlen; + + root = root || document; + + if (typeof root == 'string') { + root = document.getElementById(root); + } + + q = q.split(","); + + for (i = 0,qlen = q.length; i < qlen; i++) { + if (typeof q[i] == 'string') { + + + if (typeof q[i][0] == '@') { + nodes = root.getAttributeNode(q[i].substring(1)); + results.push(nodes); + } else { + nodes = root.querySelectorAll(q[i]); + + for (j = 0,nlen = nodes.length; j < nlen; j++) { + results.push(nodes[j]); + } + } + } + } + + return results; + }, + + + selectNode: function(q, root) { + return this.select(q, root)[0]; + }, + + + is: function(el, q) { + if (typeof el == "string") { + el = document.getElementById(el); + } + return this.select(q).indexOf(el) !== -1; + } + +}); + +//@tag dom,core + +//@require AbstractQuery.js + + + +Ext.define('Ext.dom.AbstractHelper', { + emptyTags : /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i, + confRe : /^(?:tag|children|cn|html|tpl|tplData)$/i, + endRe : /end/i, + styleSepRe: /\s*(?::|;)\s*/, + + + attributeTransform: { cls : 'class', htmlFor : 'for' }, + + closeTags: {}, + + decamelizeName : (function () { + var camelCaseRe = /([a-z])([A-Z])/g, + cache = {}; + + function decamel (match, p1, p2) { + return p1 + '-' + p2.toLowerCase(); + } + + return function (s) { + return cache[s] || (cache[s] = s.replace(camelCaseRe, decamel)); + }; + }()), + + generateMarkup: function(spec, buffer) { + var me = this, + specType = typeof spec, + attr, val, tag, i, closeTags; + + if (specType == "string" || specType == "number") { + buffer.push(spec); + } else if (Ext.isArray(spec)) { + for (i = 0; i < spec.length; i++) { + if (spec[i]) { + me.generateMarkup(spec[i], buffer); + } + } + } else { + tag = spec.tag || 'div'; + buffer.push('<', tag); + + for (attr in spec) { + if (spec.hasOwnProperty(attr)) { + val = spec[attr]; + if (!me.confRe.test(attr)) { + if (typeof val == "object") { + buffer.push(' ', attr, '="'); + me.generateStyles(val, buffer).push('"'); + } else { + buffer.push(' ', me.attributeTransform[attr] || attr, '="', val, '"'); + } + } + } + } + + + if (me.emptyTags.test(tag)) { + buffer.push('/>'); + } else { + buffer.push('>'); + + + if ((val = spec.tpl)) { + val.applyOut(spec.tplData, buffer); + } + if ((val = spec.html)) { + buffer.push(val); + } + if ((val = spec.cn || spec.children)) { + me.generateMarkup(val, buffer); + } + + + closeTags = me.closeTags; + buffer.push(closeTags[tag] || (closeTags[tag] = '')); + } + } + + return buffer; + }, + + + generateStyles: function (styles, buffer) { + var a = buffer || [], + name; + + for (name in styles) { + if (styles.hasOwnProperty(name)) { + a.push(this.decamelizeName(name), ':', styles[name], ';'); + } + } + + return buffer || a.join(''); + }, + + + markup: function(spec) { + if (typeof spec == "string") { + return spec; + } + + var buf = this.generateMarkup(spec, []); + return buf.join(''); + }, + + + applyStyles: function(el, styles) { + if (styles) { + var i = 0, + len; + + el = Ext.fly(el, '_applyStyles'); + if (typeof styles == 'function') { + styles = styles.call(); + } + if (typeof styles == 'string') { + styles = Ext.util.Format.trim(styles).split(this.styleSepRe); + for (len = styles.length; i < len;) { + el.setStyle(styles[i++], styles[i++]); + } + } else if (Ext.isObject(styles)) { + el.setStyle(styles); + } + } + }, + + + insertHtml: function(where, el, html) { + var hash = {}, + setStart, + range, + frag, + rangeEl; + + where = where.toLowerCase(); + + + hash['beforebegin'] = ['BeforeBegin', 'previousSibling']; + hash['afterend'] = ['AfterEnd', 'nextSibling']; + + range = el.ownerDocument.createRange(); + setStart = 'setStart' + (this.endRe.test(where) ? 'After' : 'Before'); + if (hash[where]) { + range[setStart](el); + frag = range.createContextualFragment(html); + el.parentNode.insertBefore(frag, where == 'beforebegin' ? el : el.nextSibling); + return el[(where == 'beforebegin' ? 'previous' : 'next') + 'Sibling']; + } + else { + rangeEl = (where == 'afterbegin' ? 'first' : 'last') + 'Child'; + if (el.firstChild) { + range[setStart](el[rangeEl]); + frag = range.createContextualFragment(html); + if (where == 'afterbegin') { + el.insertBefore(frag, el.firstChild); + } + else { + el.appendChild(frag); + } + } + else { + el.innerHTML = html; + } + return el[rangeEl]; + } + + throw 'Illegal insertion point -> "' + where + '"'; + }, + + + insertBefore: function(el, o, returnElement) { + return this.doInsert(el, o, returnElement, 'beforebegin'); + }, + + + insertAfter: function(el, o, returnElement) { + return this.doInsert(el, o, returnElement, 'afterend', 'nextSibling'); + }, + + + insertFirst: function(el, o, returnElement) { + return this.doInsert(el, o, returnElement, 'afterbegin', 'firstChild'); + }, + + + append: function(el, o, returnElement) { + return this.doInsert(el, o, returnElement, 'beforeend', '', true); + }, + + + overwrite: function(el, o, returnElement) { + el = Ext.getDom(el); + el.innerHTML = this.markup(o); + return returnElement ? Ext.get(el.firstChild) : el.firstChild; + }, + + doInsert: function(el, o, returnElement, pos, sibling, append) { + var newNode = this.insertHtml(pos, Ext.getDom(el), this.markup(o)); + return returnElement ? Ext.get(newNode, true) : newNode; + } + +}); + +//@tag dom,core + + +Ext.define('Ext.dom.AbstractElement_static', { + override: 'Ext.dom.AbstractElement', + + inheritableStatics: { + unitRe: /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i, + camelRe: /(-[a-z])/gi, + msRe: /^-ms-/, + cssRe: /([a-z0-9\-]+)\s*:\s*([^;\s]+(?:\s*[^;\s]+)*)?;?/gi, + opacityRe: /alpha\(opacity=(.*)\)/i, + propertyCache: {}, + defaultUnit : "px", + borders: {l: 'border-left-width', r: 'border-right-width', t: 'border-top-width', b: 'border-bottom-width'}, + paddings: {l: 'padding-left', r: 'padding-right', t: 'padding-top', b: 'padding-bottom'}, + margins: {l: 'margin-left', r: 'margin-right', t: 'margin-top', b: 'margin-bottom'}, + + addUnits: function(size, units) { + + if (typeof size == 'number') { + return size + (units || this.defaultUnit || 'px'); + } + + + if (size === "" || size == "auto" || size === undefined || size === null) { + return size || ''; + } + + + if (!this.unitRe.test(size)) { + return size || ''; + } + + return size; + }, + + + isAncestor: function(p, c) { + var ret = false; + + p = Ext.getDom(p); + c = Ext.getDom(c); + if (p && c) { + if (p.contains) { + return p.contains(c); + } else if (p.compareDocumentPosition) { + return !!(p.compareDocumentPosition(c) & 16); + } else { + while ((c = c.parentNode)) { + ret = c == p || ret; + } + } + } + return ret; + }, + + + parseBox: function(box) { + box = box || 0; + + var type = typeof box, + parts, + ln; + + if (type === 'number') { + return { + top : box, + right : box, + bottom: box, + left : box + }; + } else if (type !== 'string') { + + return box; + } + + parts = box.split(' '); + ln = parts.length; + + if (ln == 1) { + parts[1] = parts[2] = parts[3] = parts[0]; + } else if (ln == 2) { + parts[2] = parts[0]; + parts[3] = parts[1]; + } else if (ln == 3) { + parts[3] = parts[1]; + } + + return { + top :parseFloat(parts[0]) || 0, + right :parseFloat(parts[1]) || 0, + bottom:parseFloat(parts[2]) || 0, + left :parseFloat(parts[3]) || 0 + }; + }, + + + unitizeBox: function(box, units) { + var a = this.addUnits, + b = this.parseBox(box); + + return a(b.top, units) + ' ' + + a(b.right, units) + ' ' + + a(b.bottom, units) + ' ' + + a(b.left, units); + + }, + + + camelReplaceFn: function(m, a) { + return a.charAt(1).toUpperCase(); + }, + + + normalize: function(prop) { + + if (prop == 'float') { + prop = Ext.supports.Float ? 'cssFloat' : 'styleFloat'; + } + + return this.propertyCache[prop] || (this.propertyCache[prop] = prop.replace(this.msRe, 'ms-').replace(this.camelRe, this.camelReplaceFn)); + }, + + + getDocumentHeight: function() { + return Math.max(!Ext.isStrict ? document.body.scrollHeight : document.documentElement.scrollHeight, this.getViewportHeight()); + }, + + + getDocumentWidth: function() { + return Math.max(!Ext.isStrict ? document.body.scrollWidth : document.documentElement.scrollWidth, this.getViewportWidth()); + }, + + + getViewportHeight: function(){ + return window.innerHeight; + }, + + + getViewportWidth: function() { + return window.innerWidth; + }, + + + getViewSize: function() { + return { + width: window.innerWidth, + height: window.innerHeight + }; + }, + + + getOrientation: function() { + if (Ext.supports.OrientationChange) { + return (window.orientation == 0) ? 'portrait' : 'landscape'; + } + + return (window.innerHeight > window.innerWidth) ? 'portrait' : 'landscape'; + }, + + + fromPoint: function(x, y) { + return Ext.get(document.elementFromPoint(x, y)); + }, + + + parseStyles: function(styles){ + var out = {}, + cssRe = this.cssRe, + matches; + + if (styles) { + + + + + cssRe.lastIndex = 0; + while ((matches = cssRe.exec(styles))) { + out[matches[1]] = matches[2]||''; + } + } + return out; + } + } +}, +function () { + var doc = document, + activeElement = null, + isCSS1 = doc.compatMode == "CSS1Compat"; + + + + + if (!('activeElement' in doc) && doc.addEventListener) { + doc.addEventListener('focus', + function (ev) { + if (ev && ev.target) { + activeElement = (ev.target == doc) ? null : ev.target; + } + }, true); + } + + + function makeSelectionRestoreFn (activeEl, start, end) { + return function () { + activeEl.selectionStart = start; + activeEl.selectionEnd = end; + }; + } + + this.addInheritableStatics({ + + getActiveElement: function () { + var active; + + + + try { + active = doc.activeElement; + } catch(e) {} + + + + active = active || activeElement; + if (!active) { + active = activeElement = document.body; + } + return active; + }, + + + getRightMarginFixCleaner: function (target) { + var supports = Ext.supports, + hasInputBug = supports.DisplayChangeInputSelectionBug, + hasTextAreaBug = supports.DisplayChangeTextAreaSelectionBug, + activeEl, + tag, + start, + end; + + if (hasInputBug || hasTextAreaBug) { + activeEl = doc.activeElement || activeElement; + tag = activeEl && activeEl.tagName; + + if ((hasTextAreaBug && tag == 'TEXTAREA') || + (hasInputBug && tag == 'INPUT' && activeEl.type == 'text')) { + if (Ext.dom.Element.isAncestor(target, activeEl)) { + start = activeEl.selectionStart; + end = activeEl.selectionEnd; + + if (Ext.isNumber(start) && Ext.isNumber(end)) { + + + + + return makeSelectionRestoreFn(activeEl, start, end); + } + } + } + } + + return Ext.emptyFn; + }, + + getViewWidth: function(full) { + return full ? Ext.dom.Element.getDocumentWidth() : Ext.dom.Element.getViewportWidth(); + }, + + getViewHeight: function(full) { + return full ? Ext.dom.Element.getDocumentHeight() : Ext.dom.Element.getViewportHeight(); + }, + + getDocumentHeight: function() { + return Math.max(!isCSS1 ? doc.body.scrollHeight : doc.documentElement.scrollHeight, Ext.dom.Element.getViewportHeight()); + }, + + getDocumentWidth: function() { + return Math.max(!isCSS1 ? doc.body.scrollWidth : doc.documentElement.scrollWidth, Ext.dom.Element.getViewportWidth()); + }, + + getViewportHeight: function(){ + return Ext.isIE9m ? + (Ext.isStrict ? doc.documentElement.clientHeight : doc.body.clientHeight) : + self.innerHeight; + }, + + getViewportWidth: function() { + return (!Ext.isStrict && !Ext.isOpera) ? doc.body.clientWidth : + Ext.isIE9m ? doc.documentElement.clientWidth : self.innerWidth; + }, + + + serializeForm: function(form) { + var fElements = form.elements || (document.forms[form] || Ext.getDom(form)).elements, + hasSubmit = false, + encoder = encodeURIComponent, + data = '', + eLen = fElements.length, + element, name, type, options, hasValue, e, + o, oLen, opt; + + for (e = 0; e < eLen; e++) { + element = fElements[e]; + name = element.name; + type = element.type; + options = element.options; + + if (!element.disabled && name) { + if (/select-(one|multiple)/i.test(type)) { + oLen = options.length; + for (o = 0; o < oLen; o++) { + opt = options[o]; + if (opt.selected) { + hasValue = opt.hasAttribute ? opt.hasAttribute('value') : opt.getAttributeNode('value').specified; + data += Ext.String.format("{0}={1}&", encoder(name), encoder(hasValue ? opt.value : opt.text)); + } + } + } else if (!(/file|undefined|reset|button/i.test(type))) { + if (!(/radio|checkbox/i.test(type) && !element.checked) && !(type == 'submit' && hasSubmit)) { + data += encoder(name) + '=' + encoder(element.value) + '&'; + hasSubmit = /submit/i.test(type); + } + } + } + } + return data.substr(0, data.length - 1); + } + }); +}); + +//@tag dom,core + + +Ext.define('Ext.dom.AbstractElement_insertion', { + override: 'Ext.dom.AbstractElement', + + + appendChild: function(el, returnDom) { + var me = this, + insertEl, + eLen, e, oldUseDom; + + if (el.nodeType || el.dom || typeof el == 'string') { + el = Ext.getDom(el); + me.dom.appendChild(el); + return !returnDom ? Ext.get(el) : el; + } else if (el.length) { + + insertEl = Ext.fly(document.createDocumentFragment(), '_internal'); + eLen = el.length; + + + Ext.DomHelper.useDom = true; + for (e = 0; e < eLen; e++) { + insertEl.appendChild(el[e], returnDom); + } + Ext.DomHelper.useDom = oldUseDom; + me.dom.appendChild(insertEl.dom); + return returnDom ? insertEl.dom : insertEl; + } + else { + return me.createChild(el, null, returnDom); + } + }, + + + appendTo: function(el) { + Ext.getDom(el).appendChild(this.dom); + return this; + }, + + + insertBefore: function(el) { + el = Ext.getDom(el); + el.parentNode.insertBefore(this.dom, el); + return this; + }, + + + insertAfter: function(el) { + el = Ext.getDom(el); + el.parentNode.insertBefore(this.dom, el.nextSibling); + return this; + }, + + + insertFirst: function(el, returnDom) { + el = el || {}; + if (el.nodeType || el.dom || typeof el == 'string') { + el = Ext.getDom(el); + this.dom.insertBefore(el, this.dom.firstChild); + return !returnDom ? Ext.get(el) : el; + } + else { + return this.createChild(el, this.dom.firstChild, returnDom); + } + }, + + + insertSibling: function(el, where, returnDom) { + var me = this, + DomHelper = Ext.core.DomHelper, + oldUseDom = DomHelper.useDom, + isAfter = (where || 'before').toLowerCase() == 'after', + rt, insertEl, eLen, e; + + if (Ext.isArray(el)) { + + insertEl = Ext.fly(document.createDocumentFragment(), '_internal'); + eLen = el.length; + + + DomHelper.useDom = true; + for (e = 0; e < eLen; e++) { + rt = insertEl.appendChild(el[e], returnDom); + } + DomHelper.useDom = oldUseDom; + + + me.dom.parentNode.insertBefore(insertEl.dom, isAfter ? me.dom.nextSibling : me.dom); + return rt; + } + + el = el || {}; + + if (el.nodeType || el.dom) { + rt = me.dom.parentNode.insertBefore(Ext.getDom(el), isAfter ? me.dom.nextSibling : me.dom); + if (!returnDom) { + rt = Ext.get(rt); + } + } else { + if (isAfter && !me.dom.nextSibling) { + rt = DomHelper.append(me.dom.parentNode, el, !returnDom); + } else { + rt = DomHelper[isAfter ? 'insertAfter' : 'insertBefore'](me.dom, el, !returnDom); + } + } + return rt; + }, + + + replace: function(el) { + el = Ext.get(el); + this.insertBefore(el); + el.remove(); + return this; + }, + + + replaceWith: function(el){ + var me = this; + + if (el.nodeType || el.dom || typeof el == 'string') { + el = Ext.get(el); + me.dom.parentNode.insertBefore(el.dom, me.dom); + } else { + el = Ext.core.DomHelper.insertBefore(me.dom, el); + } + + delete Ext.cache[me.id]; + Ext.removeNode(me.dom); + me.id = Ext.id(me.dom = el); + Ext.dom.AbstractElement.addToCache(me.isFlyweight ? new Ext.dom.AbstractElement(me.dom) : me); + return me; + }, + + + createChild: function(config, insertBefore, returnDom) { + config = config || {tag:'div'}; + if (insertBefore) { + return Ext.core.DomHelper.insertBefore(insertBefore, config, returnDom !== true); + } + else { + return Ext.core.DomHelper.append(this.dom, config, returnDom !== true); + } + }, + + + wrap: function(config, returnDom, selector) { + var newEl = Ext.core.DomHelper.insertBefore(this.dom, config || {tag: "div"}, true), + target = newEl; + + if (selector) { + target = Ext.DomQuery.selectNode(selector, newEl.dom); + } + + target.appendChild(this.dom); + return returnDom ? newEl.dom : newEl; + }, + + + insertHtml: function(where, html, returnEl) { + var el = Ext.core.DomHelper.insertHtml(where, this.dom, html); + return returnEl ? Ext.get(el) : el; + } +}); + +//@tag dom,core + + +Ext.define('Ext.dom.AbstractElement_style', { + + override: 'Ext.dom.AbstractElement' + +}, function() { + + var Element = this, + wordsRe = /\w/g, + spacesRe = /\s+/, + transparentRe = /^(?:transparent|(?:rgba[(](?:\s*\d+\s*[,]){3}\s*0\s*[)]))$/i, + + + + + hasClassList = Ext.supports.ClassList, + PADDING = 'padding', + MARGIN = 'margin', + BORDER = 'border', + LEFT_SUFFIX = '-left', + RIGHT_SUFFIX = '-right', + TOP_SUFFIX = '-top', + BOTTOM_SUFFIX = '-bottom', + WIDTH = '-width', + + borders = {l: BORDER + LEFT_SUFFIX + WIDTH, r: BORDER + RIGHT_SUFFIX + WIDTH, t: BORDER + TOP_SUFFIX + WIDTH, b: BORDER + BOTTOM_SUFFIX + WIDTH}, + paddings = {l: PADDING + LEFT_SUFFIX, r: PADDING + RIGHT_SUFFIX, t: PADDING + TOP_SUFFIX, b: PADDING + BOTTOM_SUFFIX}, + margins = {l: MARGIN + LEFT_SUFFIX, r: MARGIN + RIGHT_SUFFIX, t: MARGIN + TOP_SUFFIX, b: MARGIN + BOTTOM_SUFFIX}, + internalFly = new Element.Fly(); + + + Ext.override(Element, { + + + styleHooks: {}, + + + addStyles : function(sides, styles){ + var totalSize = 0, + sidesArr = (sides || '').match(wordsRe), + i, + len = sidesArr.length, + side, + styleSides = []; + + if (len == 1) { + totalSize = Math.abs(parseFloat(this.getStyle(styles[sidesArr[0]])) || 0); + } else if (len) { + for (i = 0; i < len; i++) { + side = sidesArr[i]; + styleSides.push(styles[side]); + } + + styleSides = this.getStyle(styleSides); + + for (i=0; i < len; i++) { + side = sidesArr[i]; + totalSize += Math.abs(parseFloat(styleSides[styles[side]]) || 0); + } + } + + return totalSize; + }, + + + addCls: (function(){ + var addWithClassList = function(className) { + var me = this, + dom = me.dom, + trimRe = me.trimRe, + origClassName = className, + classList, + newCls, + i, + len, + cls; + + if (typeof(className) == 'string') { + + className = className.replace(trimRe, '').split(spacesRe); + } + + + + if (dom && className && !!(len = className.length)) { + if (!dom.className) { + dom.className = className.join(' '); + } else { + classList = dom.classList; + if (classList) { + for (i = 0; i < len; ++i) { + cls = className[i]; + if (cls) { + if (!classList.contains(cls)) { + if (newCls) { + newCls.push(cls); + } else { + newCls = dom.className.replace(trimRe, ''); + newCls = newCls ? [newCls, cls] : [cls]; + } + } + } + } + + if (newCls) { + dom.className = newCls.join(' '); + } + } else { + addWithoutClassList(origClassName); + } + } + } + return me; + }, addWithoutClassList = function(className) { + var me = this, + dom = me.dom, + elClasses; + + if (dom && className && className.length) { + elClasses = Ext.Element.mergeClsList(dom.className, className); + if (elClasses.changed) { + dom.className = elClasses.join(' '); + } + } + return me; + }; + + return hasClassList ? addWithClassList : addWithoutClassList; + })(), + + + + removeCls: function(className) { + var me = this, + dom = me.dom, + classList, + len, + elClasses; + + if (typeof(className) == 'string') { + + className = className.replace(me.trimRe, '').split(spacesRe); + } + + if (dom && dom.className && className && !!(len = className.length)) { + classList = dom.classList; + if (len === 1 && classList) { + if (className[0]) { + classList.remove(className[0]); + } + } else { + elClasses = Ext.Element.removeCls(dom.className, className); + if (elClasses.changed) { + dom.className = elClasses.join(' '); + } + } + } + return me; + }, + + + radioCls: function(className) { + var cn = this.dom.parentNode.childNodes, + v, + i, len; + className = Ext.isArray(className) ? className: [className]; + for (i = 0, len = cn.length; i < len; i++) { + v = cn[i]; + if (v && v.nodeType == 1) { + internalFly.attach(v).removeCls(className); + } + } + return this.addCls(className); + }, + + + toggleCls: (function(){ + var toggleWithClassList = function(className){ + var me = this, + dom = me.dom, + classList; + + if (dom) { + className = className.replace(me.trimRe, ''); + if (className) { + classList = dom.classList; + if (classList) { + classList.toggle(className); + } else { + toggleWithoutClassList(className); + } + } + } + + return me; + }, toggleWithoutClassList = function(className){ + return this.hasCls(className) ? this.removeCls(className) : this.addCls(className); + }; + + return hasClassList ? toggleWithClassList : toggleWithoutClassList; + })(), + + + hasCls: (function(){ + var hasClsWithClassList = function(className) { + var dom = this.dom, + out = false, + classList; + + if (dom && className) { + classList = dom.classList; + if (classList) { + out = classList.contains(className); + } else { + out = hasClsWithoutClassList(className); + } + } + return out; + }, hasClsWithoutClassList = function(className){ + var dom = this.dom; + return dom ? className && (' '+dom.className+' ').indexOf(' '+className+' ') !== -1 : false; + }; + + return hasClassList ? hasClsWithClassList : hasClsWithoutClassList; + })(), + + + replaceCls: function(oldClassName, newClassName){ + return this.removeCls(oldClassName).addCls(newClassName); + }, + + + isStyle: function(style, val) { + return this.getStyle(style) == val; + }, + + + getStyle: function (property, inline) { + var me = this, + dom = me.dom, + multiple = typeof property != 'string', + hooks = me.styleHooks, + prop = property, + props = prop, + len = 1, + domStyle, camel, values, hook, out, style, i; + + if (multiple) { + values = {}; + prop = props[0]; + i = 0; + if (!(len = props.length)) { + return values; + } + } + + if (!dom || dom.documentElement) { + return values || ''; + } + + domStyle = dom.style; + + if (inline) { + style = domStyle; + } else { + + + + + style = dom.ownerDocument.defaultView.getComputedStyle(dom, null); + + + if (!style) { + inline = true; + style = domStyle; + } + } + + do { + hook = hooks[prop]; + + if (!hook) { + hooks[prop] = hook = { name: Element.normalize(prop) }; + } + + if (hook.get) { + out = hook.get(dom, me, inline, style); + } else { + camel = hook.name; + out = style[camel]; + } + + if (!multiple) { + return out; + } + + values[prop] = out; + prop = props[++i]; + } while (i < len); + + return values; + }, + + getStyles: function () { + var props = Ext.Array.slice(arguments), + len = props.length, + inline; + + if (len && typeof props[len-1] == 'boolean') { + inline = props.pop(); + } + + return this.getStyle(props, inline); + }, + + + isTransparent: function (prop) { + var value = this.getStyle(prop); + return value ? transparentRe.test(value) : false; + }, + + + setStyle: function(prop, value) { + var me = this, + dom = me.dom, + hooks = me.styleHooks, + style = dom.style, + name = prop, + hook; + + + if (typeof name == 'string') { + hook = hooks[name]; + if (!hook) { + hooks[name] = hook = { name: Element.normalize(name) }; + } + value = (value == null) ? '' : value; + if (hook.set) { + hook.set(dom, value, me); + } else { + style[hook.name] = value; + } + if (hook.afterSet) { + hook.afterSet(dom, value, me); + } + } else { + for (name in prop) { + if (prop.hasOwnProperty(name)) { + hook = hooks[name]; + if (!hook) { + hooks[name] = hook = { name: Element.normalize(name) }; + } + value = prop[name]; + value = (value == null) ? '' : value; + if (hook.set) { + hook.set(dom, value, me); + } else { + style[hook.name] = value; + } + if (hook.afterSet) { + hook.afterSet(dom, value, me); + } + } + } + } + + return me; + }, + + + getHeight: function(contentHeight) { + var dom = this.dom, + height = contentHeight ? (dom.clientHeight - this.getPadding("tb")) : dom.offsetHeight; + return height > 0 ? height: 0; + }, + + + getWidth: function(contentWidth) { + var dom = this.dom, + width = contentWidth ? (dom.clientWidth - this.getPadding("lr")) : dom.offsetWidth; + return width > 0 ? width: 0; + }, + + + setWidth: function(width) { + var me = this; + me.dom.style.width = Element.addUnits(width); + return me; + }, + + + setHeight: function(height) { + var me = this; + me.dom.style.height = Element.addUnits(height); + return me; + }, + + + getBorderWidth: function(side){ + return this.addStyles(side, borders); + }, + + + getPadding: function(side){ + return this.addStyles(side, paddings); + }, + + margins : margins, + + + applyStyles: function(styles) { + if (styles) { + var i, + len, + dom = this.dom; + + if (typeof styles == 'function') { + styles = styles.call(); + } + if (typeof styles == 'string') { + styles = Ext.util.Format.trim(styles).split(/\s*(?::|;)\s*/); + for (i = 0, len = styles.length; i < len;) { + dom.style[Element.normalize(styles[i++])] = styles[i++]; + } + } + else if (typeof styles == 'object') { + this.setStyle(styles); + } + } + }, + + + setSize: function(width, height) { + var me = this, + style = me.dom.style; + + if (Ext.isObject(width)) { + + height = width.height; + width = width.width; + } + + style.width = Element.addUnits(width); + style.height = Element.addUnits(height); + return me; + }, + + + getViewSize: function() { + var doc = document, + dom = this.dom; + + if (dom == doc || dom == doc.body) { + return { + width: Element.getViewportWidth(), + height: Element.getViewportHeight() + }; + } + else { + return { + width: dom.clientWidth, + height: dom.clientHeight + }; + } + }, + + + getSize: function(contentSize) { + var dom = this.dom; + return { + width: Math.max(0, contentSize ? (dom.clientWidth - this.getPadding("lr")) : dom.offsetWidth), + height: Math.max(0, contentSize ? (dom.clientHeight - this.getPadding("tb")) : dom.offsetHeight) + }; + }, + + + repaint: function() { + var dom = this.dom; + this.addCls(Ext.baseCSSPrefix + 'repaint'); + setTimeout(function(){ + internalFly.attach(dom).removeCls(Ext.baseCSSPrefix + 'repaint'); + }, 1); + return this; + }, + + + getMargin: function(side){ + var me = this, + hash = {t:"top", l:"left", r:"right", b: "bottom"}, + key, + o, + margins; + + if (!side) { + margins = []; + for (key in me.margins) { + if(me.margins.hasOwnProperty(key)) { + margins.push(me.margins[key]); + } + } + o = me.getStyle(margins); + if(o && typeof o == 'object') { + + for (key in me.margins) { + if(me.margins.hasOwnProperty(key)) { + o[hash[key]] = parseFloat(o[me.margins[key]]) || 0; + } + } + } + + return o; + } else { + return me.addStyles(side, me.margins); + } + }, + + + mask: function(msg, msgCls, transparent) { + var me = this, + dom = me.dom, + data = (me.$cache || me.getCache()).data, + el = data.mask, + mask, + size, + cls = '', + prefix = Ext.baseCSSPrefix; + + me.addCls(prefix + 'masked'); + if (me.getStyle("position") == "static") { + me.addCls(prefix + 'masked-relative'); + } + if (el) { + el.remove(); + } + if (msgCls && typeof msgCls == 'string' ) { + cls = ' ' + msgCls; + } + else { + cls = ' ' + prefix + 'mask-gray'; + } + + mask = me.createChild({ + cls: prefix + 'mask' + ((transparent !== false) ? '' : (' ' + prefix + 'mask-gray')), + html: msg ? ('
    ' + msg + '
    ') : '' + }); + + size = me.getSize(); + + data.mask = mask; + + if (dom === document.body) { + size.height = window.innerHeight; + if (me.orientationHandler) { + Ext.EventManager.unOrientationChange(me.orientationHandler, me); + } + + me.orientationHandler = function() { + size = me.getSize(); + size.height = window.innerHeight; + mask.setSize(size); + }; + + Ext.EventManager.onOrientationChange(me.orientationHandler, me); + } + mask.setSize(size); + if (Ext.is.iPad) { + Ext.repaint(); + } + }, + + + unmask: function() { + var me = this, + data = (me.$cache || me.getCache()).data, + mask = data.mask, + prefix = Ext.baseCSSPrefix; + + if (mask) { + mask.remove(); + delete data.mask; + } + me.removeCls([prefix + 'masked', prefix + 'masked-relative']); + + if (me.dom === document.body) { + Ext.EventManager.unOrientationChange(me.orientationHandler, me); + delete me.orientationHandler; + } + } + }); + + + Ext.onReady(function () { + var supports = Ext.supports, + styleHooks, + colorStyles, i, name, camel; + + function fixTransparent (dom, el, inline, style) { + var value = style[this.name] || ''; + return transparentRe.test(value) ? 'transparent' : value; + } + + function fixRightMargin (dom, el, inline, style) { + var result = style.marginRight, + domStyle, display; + + + + if (result != '0px') { + domStyle = dom.style; + display = domStyle.display; + domStyle.display = 'inline-block'; + result = (inline ? style : dom.ownerDocument.defaultView.getComputedStyle(dom, null)).marginRight; + domStyle.display = display; + } + + return result; + } + + function fixRightMarginAndInputFocus (dom, el, inline, style) { + var result = style.marginRight, + domStyle, cleaner, display; + + if (result != '0px') { + domStyle = dom.style; + cleaner = Element.getRightMarginFixCleaner(dom); + display = domStyle.display; + domStyle.display = 'inline-block'; + result = (inline ? style : dom.ownerDocument.defaultView.getComputedStyle(dom, '')).marginRight; + domStyle.display = display; + cleaner(); + } + + return result; + } + + styleHooks = Element.prototype.styleHooks; + + + + if (supports.init) { + supports.init(); + } + + + if (!supports.RightMargin) { + styleHooks.marginRight = styleHooks['margin-right'] = { + name: 'marginRight', + + + get: (supports.DisplayChangeInputSelectionBug || supports.DisplayChangeTextAreaSelectionBug) ? + fixRightMarginAndInputFocus : fixRightMargin + }; + } + + if (!supports.TransparentColor) { + colorStyles = ['background-color', 'border-color', 'color', 'outline-color']; + for (i = colorStyles.length; i--; ) { + name = colorStyles[i]; + camel = Element.normalize(name); + + styleHooks[name] = styleHooks[camel] = { + name: camel, + get: fixTransparent + }; + } + } + }); + +}); + +//@tag dom,core + + +Ext.define('Ext.dom.AbstractElement_traversal', { + override: 'Ext.dom.AbstractElement', + + + findParent: function(simpleSelector, limit, returnEl) { + var target = this.dom, + topmost = document.documentElement, + depth = 0, + stopEl; + + limit = limit || 50; + if (isNaN(limit)) { + stopEl = Ext.getDom(limit); + limit = Number.MAX_VALUE; + } + while (target && target.nodeType == 1 && depth < limit && target != topmost && target != stopEl) { + if (Ext.DomQuery.is(target, simpleSelector)) { + return returnEl ? Ext.get(target) : target; + } + depth++; + target = target.parentNode; + } + return null; + }, + + + findParentNode: function(simpleSelector, limit, returnEl) { + var p = Ext.fly(this.dom.parentNode, '_internal'); + return p ? p.findParent(simpleSelector, limit, returnEl) : null; + }, + + + up: function(simpleSelector, limit, returnDom) { + return this.findParentNode(simpleSelector, limit, !returnDom); + }, + + + select: function(selector, composite) { + return Ext.dom.Element.select(selector, this.dom, composite); + }, + + + query: function(selector) { + return Ext.DomQuery.select(selector, this.dom); + }, + + + down: function(selector, returnDom) { + var n = Ext.DomQuery.selectNode(selector, this.dom); + return returnDom ? n : Ext.get(n); + }, + + + child: function(selector, returnDom) { + var node, + me = this, + id; + + + + id = Ext.id(me.dom); + + id = Ext.escapeId(id); + node = Ext.DomQuery.selectNode('#' + id + " > " + selector, me.dom); + return returnDom ? node : Ext.get(node); + }, + + + parent: function(selector, returnDom) { + return this.matchNode('parentNode', 'parentNode', selector, returnDom); + }, + + + next: function(selector, returnDom) { + return this.matchNode('nextSibling', 'nextSibling', selector, returnDom); + }, + + + prev: function(selector, returnDom) { + return this.matchNode('previousSibling', 'previousSibling', selector, returnDom); + }, + + + + first: function(selector, returnDom) { + return this.matchNode('nextSibling', 'firstChild', selector, returnDom); + }, + + + last: function(selector, returnDom) { + return this.matchNode('previousSibling', 'lastChild', selector, returnDom); + }, + + matchNode: function(dir, start, selector, returnDom) { + if (!this.dom) { + return null; + } + + var n = this.dom[start]; + while (n) { + if (n.nodeType == 1 && (!selector || Ext.DomQuery.is(n, selector))) { + return !returnDom ? Ext.get(n) : n; + } + n = n[dir]; + } + return null; + }, + + isAncestor: function(element) { + return this.self.isAncestor.call(this.self, this.dom, element); + } +}); + +//@tag dom,core + +//@require Ext.Supports + + + +Ext.define('Ext.dom.AbstractElement', { + + + + + + + + + trimRe: /^\s+|\s+$/g, + whitespaceRe: /\s/, + + inheritableStatics: { + trimRe: /^\s+|\s+$/g, + whitespaceRe: /\s/, + + + get: function(el) { + var me = this, + document = window.document, + El = Ext.dom.Element, + cacheItem, + docEl, + extEl, + dom, + id; + + if (!el) { + return null; + } + + + if (el.isFly) { + el = el.dom; + } + + if (typeof el == "string") { + if (el == Ext.windowId) { + return El.get(window); + } else if (el == Ext.documentId) { + return El.get(document); + } + + cacheItem = Ext.cache[el]; + + + + + if (cacheItem && cacheItem.skipGarbageCollection) { + extEl = cacheItem.el; + return extEl; + } + + if (!(dom = document.getElementById(el))) { + return null; + } + + if (cacheItem && cacheItem.el) { + extEl = Ext.updateCacheEntry(cacheItem, dom).el; + } else { + + extEl = new El(dom, !!cacheItem); + } + return extEl; + } else if (el.tagName) { + if (!(id = el.id)) { + id = Ext.id(el); + } + cacheItem = Ext.cache[id]; + if (cacheItem && cacheItem.el) { + extEl = Ext.updateCacheEntry(cacheItem, el).el; + } else { + + extEl = new El(el, !!cacheItem); + } + return extEl; + } else if (el instanceof me) { + if (el != me.docEl && el != me.winEl) { + id = el.id; + + + cacheItem = Ext.cache[id]; + if (cacheItem) { + Ext.updateCacheEntry(cacheItem, document.getElementById(id) || el.dom); + } + } + return el; + } else if (el.isComposite) { + return el; + } else if (Ext.isArray(el)) { + return me.select(el); + } else if (el === document) { + + if (!me.docEl) { + docEl = me.docEl = Ext.Object.chain(El.prototype); + docEl.dom = document; + + + + docEl.el = docEl; + docEl.id = Ext.id(document); + me.addToCache(docEl); + } + return me.docEl; + } else if (el === window) { + if (!me.winEl) { + me.winEl = Ext.Object.chain(El.prototype); + me.winEl.dom = window; + me.winEl.id = Ext.id(window); + me.addToCache(me.winEl); + } + return me.winEl; + } + return null; + }, + + addToCache: function(el, id) { + if (el) { + Ext.addCacheEntry(id, el); + } + return el; + }, + + addMethods: function() { + this.override.apply(this, arguments); + }, + + + mergeClsList: function() { + var clsList, clsHash = {}, + i, length, j, listLength, clsName, result = [], + changed = false, + trimRe = this.trimRe, + whitespaceRe = this.whitespaceRe; + + for (i = 0, length = arguments.length; i < length; i++) { + clsList = arguments[i]; + if (Ext.isString(clsList)) { + clsList = clsList.replace(trimRe, '').split(whitespaceRe); + } + if (clsList) { + for (j = 0, listLength = clsList.length; j < listLength; j++) { + clsName = clsList[j]; + if (!clsHash[clsName]) { + if (i) { + changed = true; + } + clsHash[clsName] = true; + } + } + } + } + + for (clsName in clsHash) { + result.push(clsName); + } + result.changed = changed; + return result; + }, + + + removeCls: function(existingClsList, removeClsList) { + var clsHash = {}, + i, length, clsName, result = [], + changed = false, + whitespaceRe = this.whitespaceRe; + + if (existingClsList) { + if (Ext.isString(existingClsList)) { + existingClsList = existingClsList.replace(this.trimRe, '').split(whitespaceRe); + } + for (i = 0, length = existingClsList.length; i < length; i++) { + clsHash[existingClsList[i]] = true; + } + } + if (removeClsList) { + if (Ext.isString(removeClsList)) { + removeClsList = removeClsList.split(whitespaceRe); + } + for (i = 0, length = removeClsList.length; i < length; i++) { + clsName = removeClsList[i]; + if (clsHash[clsName]) { + changed = true; + delete clsHash[clsName]; + } + } + } + for (clsName in clsHash) { + result.push(clsName); + } + result.changed = changed; + return result; + }, + + + VISIBILITY: 1, + + + DISPLAY: 2, + + + OFFSETS: 3, + + + ASCLASS: 4 + }, + + constructor: function(element, forceNew) { + var me = this, + dom = typeof element == 'string' + ? document.getElementById(element) + : element, + id; + + + + + me.el = me; + + if (!dom) { + return null; + } + + id = dom.id; + if (!forceNew && id && Ext.cache[id]) { + + return Ext.cache[id].el; + } + + + me.dom = dom; + + + me.id = id || Ext.id(dom); + + me.self.addToCache(me); + }, + + + set: function(o, useSet) { + var el = this.dom, + attr, + value; + + for (attr in o) { + if (o.hasOwnProperty(attr)) { + value = o[attr]; + if (attr == 'style') { + this.applyStyles(value); + } + else if (attr == 'cls') { + el.className = value; + } + else if (useSet !== false) { + if (value === undefined) { + el.removeAttribute(attr); + } else { + el.setAttribute(attr, value); + } + } + else { + el[attr] = value; + } + } + } + return this; + }, + + + defaultUnit: "px", + + + is: function(simpleSelector) { + return Ext.DomQuery.is(this.dom, simpleSelector); + }, + + + getValue: function(asNumber) { + var val = this.dom.value; + return asNumber ? parseInt(val, 10) : val; + }, + + + remove: function() { + var me = this, + dom = me.dom; + + if (me.isAnimate) { + me.stopAnimation(); + } + + if (dom) { + Ext.removeNode(dom); + delete me.dom; + } + }, + + + contains: function(el) { + if (!el) { + return false; + } + + var me = this, + dom = el.dom || el; + + + return (dom === me.dom) || Ext.dom.AbstractElement.isAncestor(me.dom, dom); + }, + + + getAttribute: function(name, ns) { + var dom = this.dom; + return dom.getAttributeNS(ns, name) || dom.getAttribute(ns + ":" + name) || dom.getAttribute(name) || dom[name]; + }, + + + update: function(html) { + if (this.dom) { + this.dom.innerHTML = html; + } + return this; + }, + + + + setHTML: function(html) { + if(this.dom) { + this.dom.innerHTML = html; + } + return this; + }, + + + getHTML: function() { + return this.dom ? this.dom.innerHTML : ''; + }, + + + hide: function() { + this.setVisible(false); + return this; + }, + + + show: function() { + this.setVisible(true); + return this; + }, + + + setVisible: function(visible, animate) { + var me = this, + statics = me.self, + mode = me.getVisibilityMode(), + prefix = Ext.baseCSSPrefix; + + switch (mode) { + case statics.VISIBILITY: + me.removeCls([prefix + 'hidden-display', prefix + 'hidden-offsets']); + me[visible ? 'removeCls' : 'addCls'](prefix + 'hidden-visibility'); + break; + + case statics.DISPLAY: + me.removeCls([prefix + 'hidden-visibility', prefix + 'hidden-offsets']); + me[visible ? 'removeCls' : 'addCls'](prefix + 'hidden-display'); + break; + + case statics.OFFSETS: + me.removeCls([prefix + 'hidden-visibility', prefix + 'hidden-display']); + me[visible ? 'removeCls' : 'addCls'](prefix + 'hidden-offsets'); + break; + } + + return me; + }, + + getVisibilityMode: function() { + + + + var data = (this.$cache || this.getCache()).data, + visMode = data.visibilityMode; + + if (visMode === undefined) { + data.visibilityMode = visMode = this.self.DISPLAY; + } + + return visMode; + }, + + + setVisibilityMode: function(mode) { + (this.$cache || this.getCache()).data.visibilityMode = mode; + return this; + }, + + getCache: function() { + var me = this, + id = me.dom.id || Ext.id(me.dom); + + + + + me.$cache = Ext.cache[id] || Ext.addCacheEntry(id, null, me.dom); + + return me.$cache; + } +}, +function() { + var AbstractElement = this; + + + Ext.getDetachedBody = function () { + var detachedEl = AbstractElement.detachedBodyEl; + + if (!detachedEl) { + detachedEl = document.createElement('div'); + AbstractElement.detachedBodyEl = detachedEl = new AbstractElement.Fly(detachedEl); + detachedEl.isDetachedBody = true; + } + + return detachedEl; + }; + + + Ext.getElementById = function (id) { + var el = document.getElementById(id), + detachedBodyEl; + + if (!el && (detachedBodyEl = AbstractElement.detachedBodyEl)) { + el = detachedBodyEl.dom.querySelector('#' + Ext.escapeId(id)); + } + + return el; + }; + + + Ext.get = function(el) { + return Ext.dom.Element.get(el); + }; + + this.addStatics({ + + Fly: new Ext.Class({ + + + + + extend: AbstractElement, + + + isFly: true, + + constructor: function(dom) { + this.dom = dom; + + + + this.el = this; + }, + + + attach: function (dom) { + + + this.dom = dom; + + + this.$cache = dom.id ? Ext.cache[dom.id] : null; + return this; + } + }), + + _flyweights: {}, + + + fly: function(dom, named) { + var fly = null, + _flyweights = AbstractElement._flyweights; + + named = named || '_global'; + + dom = Ext.getDom(dom); + + if (dom) { + fly = _flyweights[named] || (_flyweights[named] = new AbstractElement.Fly()); + + + + fly.dom = dom; + + + fly.$cache = dom.id ? Ext.cache[dom.id] : null; + } + return fly; + } + }); + + + Ext.fly = function() { + return AbstractElement.fly.apply(AbstractElement, arguments); + }; + + (function (proto) { + + proto.destroy = proto.remove; + + + if (document.querySelector) { + proto.getById = function (id, asDom) { + + + var dom = document.getElementById(id) || + this.dom.querySelector('#'+Ext.escapeId(id)); + return asDom ? dom : (dom ? Ext.get(dom) : null); + }; + } else { + proto.getById = function (id, asDom) { + var dom = document.getElementById(id); + return asDom ? dom : (dom ? Ext.get(dom) : null); + }; + } + }(this.prototype)); +}); + +//@tag dom,core + +//@define Ext.DomHelper + + +//@define Ext.core.DomHelper + + + +Ext.define('Ext.dom.Helper', (function() { + + +var afterbegin = 'afterbegin', + afterend = 'afterend', + beforebegin = 'beforebegin', + beforeend = 'beforeend', + ts = '', + te = '
    ', + tbs = ts+'', + tbe = ''+te, + trs = tbs + '', + tre = ''+tbe, + detachedDiv = document.createElement('div'), + bbValues = ['BeforeBegin', 'previousSibling'], + aeValues = ['AfterEnd', 'nextSibling'], + bb_ae_PositionHash = { + beforebegin: bbValues, + afterend: aeValues + }, + fullPositionHash = { + beforebegin: bbValues, + afterend: aeValues, + afterbegin: ['AfterBegin', 'firstChild'], + beforeend: ['BeforeEnd', 'lastChild'] + }; + + +return { + extend: Ext.dom.AbstractHelper , + + + tableRe: /^(?:table|thead|tbody|tr|td)$/i, + + tableElRe: /td|tr|tbody|thead/i, + + + useDom : false, + + + createDom: function(o, parentNode){ + var el, + doc = document, + useSet, + attr, + val, + cn, + i, l; + + if (Ext.isArray(o)) { + el = doc.createDocumentFragment(); + for (i = 0, l = o.length; i < l; i++) { + this.createDom(o[i], el); + } + } else if (typeof o == 'string') { + el = doc.createTextNode(o); + } else { + el = doc.createElement(o.tag || 'div'); + useSet = !!el.setAttribute; + for (attr in o) { + if (!this.confRe.test(attr)) { + val = o[attr]; + if (attr == 'cls') { + el.className = val; + } else { + if (useSet) { + el.setAttribute(attr, val); + } else { + el[attr] = val; + } + } + } + } + Ext.DomHelper.applyStyles(el, o.style); + + if ((cn = o.children || o.cn)) { + this.createDom(cn, el); + } else if (o.html) { + el.innerHTML = o.html; + } + } + if (parentNode) { + parentNode.appendChild(el); + } + return el; + }, + + ieTable: function(depth, openingTags, htmlContent, closingTags){ + detachedDiv.innerHTML = [openingTags, htmlContent, closingTags].join(''); + + var i = -1, + el = detachedDiv, + ns; + + while (++i < depth) { + el = el.firstChild; + } + + ns = el.nextSibling; + + if (ns) { + ns = el; + el = document.createDocumentFragment(); + + while (ns) { + nx = ns.nextSibling; + el.appendChild(ns); + ns = nx; + } + } + return el; + }, + + + insertIntoTable: function(tag, where, destinationEl, html) { + var node, + before, + bb = where == beforebegin, + ab = where == afterbegin, + be = where == beforeend, + ae = where == afterend; + + if (tag == 'td' && (ab || be) || !this.tableElRe.test(tag) && (bb || ae)) { + return null; + } + before = bb ? destinationEl : + ae ? destinationEl.nextSibling : + ab ? destinationEl.firstChild : null; + + if (bb || ae) { + destinationEl = destinationEl.parentNode; + } + + if (tag == 'td' || (tag == 'tr' && (be || ab))) { + node = this.ieTable(4, trs, html, tre); + } else if (((tag == 'tbody' || tag == 'thead') && (be || ab)) || + (tag == 'tr' && (bb || ae))) { + node = this.ieTable(3, tbs, html, tbe); + } else { + node = this.ieTable(2, ts, html, te); + } + destinationEl.insertBefore(node, before); + return node; + }, + + + createContextualFragment: function(html) { + var fragment = document.createDocumentFragment(), + length, childNodes; + + detachedDiv.innerHTML = html; + childNodes = detachedDiv.childNodes; + length = childNodes.length; + + + while (length--) { + fragment.appendChild(childNodes[0]); + } + return fragment; + }, + + applyStyles: function(el, styles) { + if (styles) { + if (typeof styles == "function") { + styles = styles.call(); + } + if (typeof styles == "string") { + styles = Ext.dom.Element.parseStyles(styles); + } + if (typeof styles == "object") { + Ext.fly(el, '_applyStyles').setStyle(styles); + } + } + }, + + + createHtml: function(spec) { + return this.markup(spec); + }, + + doInsert: function(el, o, returnElement, pos, sibling, append) { + + el = el.dom || Ext.getDom(el); + + var newNode; + + if (this.useDom) { + newNode = this.createDom(o, null); + + if (append) { + el.appendChild(newNode); + } + else { + (sibling == 'firstChild' ? el : el.parentNode).insertBefore(newNode, el[sibling] || el); + } + + } else { + newNode = this.insertHtml(pos, el, this.markup(o)); + } + return returnElement ? Ext.get(newNode, true) : newNode; + }, + + + overwrite: function(el, html, returnElement) { + var newNode; + + el = Ext.getDom(el); + html = this.markup(html); + + + if (Ext.isIE && this.tableRe.test(el.tagName)) { + + while (el.firstChild) { + el.removeChild(el.firstChild); + } + if (html) { + newNode = this.insertHtml('afterbegin', el, html); + return returnElement ? Ext.get(newNode) : newNode; + } + return null; + } + el.innerHTML = html; + return returnElement ? Ext.get(el.firstChild) : el.firstChild; + }, + + insertHtml: function(where, el, html) { + var hashVal, + range, + rangeEl, + setStart, + frag; + + where = where.toLowerCase(); + + + if (el.insertAdjacentHTML) { + + + if (Ext.isIE && this.tableRe.test(el.tagName) && (frag = this.insertIntoTable(el.tagName.toLowerCase(), where, el, html))) { + return frag; + } + + if ((hashVal = fullPositionHash[where])) { + + if (Ext.global.MSApp && Ext.global.MSApp.execUnsafeLocalFunction) { + + MSApp.execUnsafeLocalFunction(function () { + el.insertAdjacentHTML(hashVal[0], html); + }); + } else { + el.insertAdjacentHTML(hashVal[0], html); + } + + return el[hashVal[1]]; + } + + } else { + + if (el.nodeType === 3) { + where = where === 'afterbegin' ? 'beforebegin' : where; + where = where === 'beforeend' ? 'afterend' : where; + } + range = Ext.supports.CreateContextualFragment ? el.ownerDocument.createRange() : undefined; + setStart = 'setStart' + (this.endRe.test(where) ? 'After' : 'Before'); + if (bb_ae_PositionHash[where]) { + if (range) { + range[setStart](el); + frag = range.createContextualFragment(html); + } else { + frag = this.createContextualFragment(html); + } + el.parentNode.insertBefore(frag, where == beforebegin ? el : el.nextSibling); + return el[(where == beforebegin ? 'previous' : 'next') + 'Sibling']; + } else { + rangeEl = (where == afterbegin ? 'first' : 'last') + 'Child'; + if (el.firstChild) { + if (range) { + range[setStart](el[rangeEl]); + frag = range.createContextualFragment(html); + } else { + frag = this.createContextualFragment(html); + } + + if (where == afterbegin) { + el.insertBefore(frag, el.firstChild); + } else { + el.appendChild(frag); + } + } else { + el.innerHTML = html; + } + return el[rangeEl]; + } + } + }, + + + createTemplate: function(o) { + var html = this.markup(o); + return new Ext.Template(html); + } + +}; +})(), function() { + Ext.ns('Ext.core'); + Ext.DomHelper = Ext.core.DomHelper = new this; +}); + +//@tag core + + +Ext.define('Ext.Template', { + + + + + + inheritableStatics: { + + from: function(el, config) { + el = Ext.getDom(el); + return new this(el.value || el.innerHTML, config || ''); + } + }, + + + + + constructor: function(html) { + var me = this, + args = arguments, + buffer = [], + i = 0, + length = args.length, + value; + + me.initialConfig = {}; + + + + + if (length === 1 && Ext.isArray(html)) { + args = html; + length = args.length; + } + + if (length > 1) { + for (; i < length; i++) { + value = args[i]; + if (typeof value == 'object') { + Ext.apply(me.initialConfig, value); + Ext.apply(me, value); + } else { + buffer.push(value); + } + } + } else { + buffer.push(html); + } + + + me.html = buffer.join(''); + + if (me.compiled) { + me.compile(); + } + }, + + + isTemplate: true, + + + + + disableFormats: false, + + re: /\{([\w\-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, + + + apply: function(values) { + var me = this, + useFormat = me.disableFormats !== true, + fm = Ext.util.Format, + tpl = me, + ret; + + if (me.compiled) { + return me.compiled(values).join(''); + } + + function fn(m, name, format, args) { + if (format && useFormat) { + if (args) { + args = [values[name]].concat(Ext.functionFactory('return ['+ args +'];')()); + } else { + args = [values[name]]; + } + if (format.substr(0, 5) == "this.") { + return tpl[format.substr(5)].apply(tpl, args); + } + else { + return fm[format].apply(fm, args); + } + } + else { + return values[name] !== undefined ? values[name] : ""; + } + } + + ret = me.html.replace(me.re, fn); + return ret; + }, + + + applyOut: function(values, out) { + var me = this; + + if (me.compiled) { + out.push.apply(out, me.compiled(values)); + } else { + out.push(me.apply(values)); + } + + return out; + }, + + + applyTemplate: function () { + return this.apply.apply(this, arguments); + }, + + + set: function(html, compile) { + var me = this; + me.html = html; + me.compiled = null; + return compile ? me.compile() : me; + }, + + compileARe: /\\/g, + compileBRe: /(\r\n|\n)/g, + compileCRe: /'/g, + + /** + * Compiles the template into an internal function, eliminating the RegEx overhead. + * @return {Ext.Template} this + */ + compile: function() { + var me = this, + fm = Ext.util.Format, + useFormat = me.disableFormats !== true, + body, bodyReturn; + + function fn(m, name, format, args) { + if (format && useFormat) { + args = args ? ',' + args: ""; + if (format.substr(0, 5) != "this.") { + format = "fm." + format + '('; + } + else { + format = 'this.' + format.substr(5) + '('; + } + } + else { + args = ''; + format = "(values['" + name + "'] == undefined ? '' : "; + } + return "'," + format + "values['" + name + "']" + args + ") ,'"; + } + + bodyReturn = me.html.replace(me.compileARe, '\\\\').replace(me.compileBRe, '\\n').replace(me.compileCRe, "\\'").replace(me.re, fn); + body = "this.compiled = function(values){ return ['" + bodyReturn + "'];};"; + eval(body); + return me; + }, + + /** + * Applies the supplied values to the template and inserts the new node(s) as the first child of el. + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return a Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + insertFirst: function(el, values, returnElement) { + return this.doInsert('afterBegin', el, values, returnElement); + }, + + /** + * Applies the supplied values to the template and inserts the new node(s) before el. + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return a Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + insertBefore: function(el, values, returnElement) { + return this.doInsert('beforeBegin', el, values, returnElement); + }, + + /** + * Applies the supplied values to the template and inserts the new node(s) after el. + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return a Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + insertAfter: function(el, values, returnElement) { + return this.doInsert('afterEnd', el, values, returnElement); + }, + + /** + * Applies the supplied `values` to the template and appends the new node(s) to the specified `el`. + * + * For example usage see {@link Ext.Template Ext.Template class docs}. + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return an Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + append: function(el, values, returnElement) { + return this.doInsert('beforeEnd', el, values, returnElement); + }, + + doInsert: function(where, el, values, returnElement) { + var newNode = Ext.DomHelper.insertHtml(where, Ext.getDom(el), this.apply(values)); + return returnElement ? Ext.get(newNode) : newNode; + }, + + /** + * Applies the supplied values to the template and overwrites the content of el with the new node(s). + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return a Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + overwrite: function(el, values, returnElement) { + var newNode = Ext.DomHelper.overwrite(Ext.getDom(el), this.apply(values)); + return returnElement ? Ext.get(newNode) : newNode; + } +}); + +//@tag core +/** + * This class parses the XTemplate syntax and calls abstract methods to process the parts. + * @private + */ +Ext.define('Ext.XTemplateParser', { + constructor: function (config) { + Ext.apply(this, config); + }, + + /** + * @property {Number} level The 'for' or 'foreach' loop context level. This is adjusted + * up by one prior to calling {@link #doFor} or {@link #doForEach} and down by one after + * calling the corresponding {@link #doEnd} that closes the loop. This will be 1 on the + * first {@link #doFor} or {@link #doForEach} call. + */ + + /** + * This method is called to process a piece of raw text from the tpl. + * @param {String} text + * @method doText + */ + // doText: function (text) + + /** + * This method is called to process expressions (like `{[expr]}`). + * @param {String} expr The body of the expression (inside "{[" and "]}"). + * @method doExpr + */ + // doExpr: function (expr) + + /** + * This method is called to process simple tags (like `{tag}`). + * @method doTag + */ + // doTag: function (tag) + + /** + * This method is called to process ``. + * @method doElse + */ + // doElse: function () + + /** + * This method is called to process `{% text %}`. + * @param {String} text + * @method doEval + */ + // doEval: function (text) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doIf + */ + // doIf: function (action, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doElseIf + */ + // doElseIf: function (action, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doSwitch + */ + // doSwitch: function (action, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doCase + */ + // doCase: function (action, actions) + + /** + * This method is called to process ``. + * @method doDefault + */ + // doDefault: function () + + /** + * This method is called to process ``. It is given the action type that started + * the tpl and the set of additional actions. + * @param {String} type The type of action that is being ended. + * @param {Object} actions The other actions keyed by the attribute name (such as 'exec'). + * @method doEnd + */ + // doEnd: function (type, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doFor + */ + // doFor: function (action, actions) + + /** + * This method is called to process ``. If there are other + * attributes, these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doForEach + */ + // doForEach: function (action, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name. + * @method doExec + */ + // doExec: function (action, actions) + + /** + * This method is called to process an empty ``. This is unlikely to need to be + * implemented, so a default (do nothing) version is provided. + * @method + */ + doTpl: Ext.emptyFn, + + parse: function (str) { + var me = this, + len = str.length, + aliases = { elseif: 'elif' }, + topRe = me.topRe, + actionsRe = me.actionsRe, + index, stack, s, m, t, prev, frame, subMatch, begin, end, actions, + prop; + + me.level = 0; + me.stack = stack = []; + + for (index = 0; index < len; index = end) { + topRe.lastIndex = index; + m = topRe.exec(str); + + if (!m) { + me.doText(str.substring(index, len)); + break; + } + + begin = m.index; + end = topRe.lastIndex; + + if (index < begin) { + me.doText(str.substring(index, begin)); + } + + if (m[1]) { + end = str.indexOf('%}', begin+2); + me.doEval(str.substring(begin+2, end)); + end += 2; + } else if (m[2]) { + end = str.indexOf(']}', begin+2); + me.doExpr(str.substring(begin+2, end)); + end += 2; + } else if (m[3]) { // if ('{' token) + me.doTag(m[3]); + } else if (m[4]) { // content of a tag + actions = null; + while ((subMatch = actionsRe.exec(m[4])) !== null) { + s = subMatch[2] || subMatch[3]; + if (s) { + s = Ext.String.htmlDecode(s); // decode attr value + t = subMatch[1]; + t = aliases[t] || t; + actions = actions || {}; + prev = actions[t]; + + if (typeof prev == 'string') { + actions[t] = [prev, s]; + } else if (prev) { + actions[t].push(s); + } else { + actions[t] = s; + } + } + } + + if (!actions) { + if (me.elseRe.test(m[4])) { + me.doElse(); + } else if (me.defaultRe.test(m[4])) { + me.doDefault(); + } else { + me.doTpl(); + stack.push({ type: 'tpl' }); + } + } + else if (actions['if']) { + me.doIf(actions['if'], actions); + stack.push({ type: 'if' }); + } + else if (actions['switch']) { + me.doSwitch(actions['switch'], actions); + stack.push({ type: 'switch' }); + } + else if (actions['case']) { + me.doCase(actions['case'], actions); + } + else if (actions['elif']) { + me.doElseIf(actions['elif'], actions); + } + else if (actions['for']) { + ++me.level; + + // Extract property name to use from indexed item + if (prop = me.propRe.exec(m[4])) { + actions.propName = prop[1] || prop[2]; + } + me.doFor(actions['for'], actions); + stack.push({ type: 'for', actions: actions }); + } + else if (actions['foreach']) { + ++me.level; + + // Extract property name to use from indexed item + if (prop = me.propRe.exec(m[4])) { + actions.propName = prop[1] || prop[2]; + } + me.doForEach(actions['foreach'], actions); + stack.push({ type: 'foreach', actions: actions }); + } + else if (actions.exec) { + me.doExec(actions.exec, actions); + stack.push({ type: 'exec', actions: actions }); + } + /* + else { + // todo - error + } + */ + } else if (m[0].length === 5) { + // if the length of m[0] is 5, assume that we're dealing with an opening tpl tag with no attributes (e.g. ...) + // in this case no action is needed other than pushing it on to the stack + stack.push({ type: 'tpl' }); + } else { + frame = stack.pop(); + me.doEnd(frame.type, frame.actions); + if (frame.type == 'for' || frame.type == 'foreach') { + --me.level; + } + } + } + }, + + // Internal regexes + + topRe: /(?:(\{\%)|(\{\[)|\{([^{}]+)\})|(?:]*)\>)|(?:<\/tpl>)/g, + actionsRe: /\s*(elif|elseif|if|for|foreach|exec|switch|case|eval|between)\s*\=\s*(?:(?:"([^"]*)")|(?:'([^']*)'))\s*/g, + propRe: /prop=(?:(?:"([^"]*)")|(?:'([^']*)'))/, + defaultRe: /^\s*default\s*$/, + elseRe: /^\s*else\s*$/ +}); + +//@tag core + + +Ext.define('Ext.XTemplateCompiler', { + extend: Ext.XTemplateParser , + + + + + useEval: Ext.isGecko, + + + + + useIndex: Ext.isIE8m, + + useFormat: true, + + propNameRe: /^[\w\d\$]*$/, + + compile: function (tpl) { + var me = this, + code = me.generate(tpl); + + + + + + return me.useEval ? me.evalTpl(code) : (new Function('Ext', code))(Ext); + }, + + generate: function (tpl) { + var me = this, + + definitions = 'var fm=Ext.util.Format,ts=Object.prototype.toString;', + code; + + + me.maxLevel = 0; + + me.body = [ + 'var c0=values, a0=' + me.createArrayTest(0) + ', p0=parent, n0=xcount, i0=xindex, k0, v;\n' + ]; + if (me.definitions) { + if (typeof me.definitions === 'string') { + me.definitions = [me.definitions, definitions ]; + } else { + me.definitions.push(definitions); + } + } else { + me.definitions = [ definitions ]; + } + me.switches = []; + + me.parse(tpl); + + me.definitions.push( + (me.useEval ? '$=' : 'return') + ' function (' + me.fnArgs + ') {', + me.body.join(''), + '}' + ); + + code = me.definitions.join('\n'); + + + me.definitions.length = me.body.length = me.switches.length = 0; + delete me.definitions; + delete me.body; + delete me.switches; + + return code; + }, + + + + + doText: function (text) { + var me = this, + out = me.body; + + text = text.replace(me.aposRe, "\\'").replace(me.newLineRe, '\\n'); + if (me.useIndex) { + out.push('out[out.length]=\'', text, '\'\n'); + } else { + out.push('out.push(\'', text, '\')\n'); + } + }, + + doExpr: function (expr) { + var out = this.body; + out.push('if ((v=' + expr + ') != null) out'); + + + + if (this.useIndex) { + out.push('[out.length]=v+\'\'\n'); + } else { + out.push('.push(v+\'\')\n'); + } + }, + + doTag: function (tag) { + var expr = this.parseTag(tag); + if (expr) { + this.doExpr(expr); + } else { + + this.doText('{' + tag + '}'); + } + }, + + doElse: function () { + this.body.push('} else {\n'); + }, + + doEval: function (text) { + this.body.push(text, '\n'); + }, + + doIf: function (action, actions) { + var me = this; + + + if (action === '.') { + me.body.push('if (values) {\n'); + } else if (me.propNameRe.test(action)) { + me.body.push('if (', me.parseTag(action), ') {\n'); + } + + else { + me.body.push('if (', me.addFn(action), me.callFn, ') {\n'); + } + if (actions.exec) { + me.doExec(actions.exec); + } + }, + + doElseIf: function (action, actions) { + var me = this; + + + if (action === '.') { + me.body.push('else if (values) {\n'); + } else if (me.propNameRe.test(action)) { + me.body.push('} else if (', me.parseTag(action), ') {\n'); + } + + else { + me.body.push('} else if (', me.addFn(action), me.callFn, ') {\n'); + } + if (actions.exec) { + me.doExec(actions.exec); + } + }, + + doSwitch: function (action) { + var me = this; + + + if (action === '.') { + me.body.push('switch (values) {\n'); + } else if (me.propNameRe.test(action)) { + me.body.push('switch (', me.parseTag(action), ') {\n'); + } + + else { + me.body.push('switch (', me.addFn(action), me.callFn, ') {\n'); + } + me.switches.push(0); + }, + + doCase: function (action) { + var me = this, + cases = Ext.isArray(action) ? action : [action], + n = me.switches.length - 1, + match, i; + + if (me.switches[n]) { + me.body.push('break;\n'); + } else { + me.switches[n]++; + } + + for (i = 0, n = cases.length; i < n; ++i) { + match = me.intRe.exec(cases[i]); + cases[i] = match ? match[1] : ("'" + cases[i].replace(me.aposRe,"\\'") + "'"); + } + + me.body.push('case ', cases.join(': case '), ':\n'); + }, + + doDefault: function () { + var me = this, + n = me.switches.length - 1; + + if (me.switches[n]) { + me.body.push('break;\n'); + } else { + me.switches[n]++; + } + + me.body.push('default:\n'); + }, + + doEnd: function (type, actions) { + var me = this, + L = me.level-1; + + if (type == 'for' || type == 'foreach') { + + if (actions.exec) { + me.doExec(actions.exec); + } + + me.body.push('}\n'); + me.body.push('parent=p',L,';values=r',L+1,';xcount=n'+L+';xindex=i',L,'+1;xkey=k',L,';\n'); + } else if (type == 'if' || type == 'switch') { + me.body.push('}\n'); + } + }, + + doFor: function (action, actions) { + var me = this, + s, + L = me.level, + up = L-1, + parentAssignment; + + + if (action === '.') { + s = 'values'; + } else if (me.propNameRe.test(action)) { + s = me.parseTag(action); + } + + else { + s = me.addFn(action) + me.callFn; + } + + + + + if (me.maxLevel < L) { + me.maxLevel = L; + me.body.push('var '); + } + + if (action == '.') { + parentAssignment = 'c' + L; + } else { + parentAssignment = 'a' + up + '?c' + up + '[i' + up + ']:c' + up; + } + + me.body.push('i',L,'=0,n', L, '=0,c',L,'=',s,',a',L,'=', me.createArrayTest(L),',r',L,'=values,p',L,',k',L,';\n', + 'p',L,'=parent=',parentAssignment,'\n', + 'if (c',L,'){if(a',L,'){n', L,'=c', L, '.length;}else if (c', L, '.isMixedCollection){c',L,'=c',L,'.items;n',L,'=c',L,'.length;}else if(c',L,'.isStore){c',L,'=c',L,'.data.items;n',L,'=c',L,'.length;}else{c',L,'=[c',L,'];n',L,'=1;}}\n', + 'for (xcount=n',L,';i',L,'1){ out.push("',actions.between,'"); } \n'); + } + }, + + doForEach: function (action, actions) { + var me = this, + s, + L = me.level, + up = L-1, + parentAssignment; + + + if (action === '.') { + s = 'values'; + } else if (me.propNameRe.test(action)) { + s = me.parseTag(action); + } + + else { + s = me.addFn(action) + me.callFn; + } + + + + + if (me.maxLevel < L) { + me.maxLevel = L; + me.body.push('var '); + } + + if (action == '.') { + parentAssignment = 'c' + L; + } else { + parentAssignment = 'a' + up + '?c' + up + '[i' + up + ']:c' + up; + } + + me.body.push('i',L,'=-1,n',L,'=0,c',L,'=',s,',a',L,'=',me.createArrayTest(L),',r',L,'=values,p',L,',k',L,';\n', + 'p',L,'=parent=',parentAssignment,'\n', + 'for(k',L,' in c',L,'){\n', + 'xindex=++i',L,'+1;\n', + 'xkey=k',L,';\n', + 'values=c',L,'[k',L,'];'); + if (actions.propName) { + me.body.push('.', actions.propName); + } + + if (actions.between) { + me.body.push('if(xindex>1){ out.push("',actions.between,'"); } \n'); + } + }, + + createArrayTest: ('isArray' in Array) ? function(L) { + return 'Array.isArray(c' + L + ')'; + } : function(L) { + return 'ts.call(c' + L + ')==="[object Array]"'; + }, + + doExec: function (action, actions) { + var me = this, + name = 'f' + me.definitions.length; + + me.definitions.push('function ' + name + '(' + me.fnArgs + ') {', + ' try { with(values) {', + ' ' + action, + ' }} catch(e) {', + '}', + '}'); + + me.body.push(name + me.callFn + '\n'); + }, + + + + + addFn: function (body) { + var me = this, + name = 'f' + me.definitions.length; + + if (body === '.') { + me.definitions.push('function ' + name + '(' + me.fnArgs + ') {', + ' return values', + '}'); + } else if (body === '..') { + me.definitions.push('function ' + name + '(' + me.fnArgs + ') {', + ' return parent', + '}'); + } else { + me.definitions.push('function ' + name + '(' + me.fnArgs + ') {', + ' try { with(values) {', + ' return(' + body + ')', + ' }} catch(e) {', + '}', + '}'); + } + + return name; + }, + + parseTag: function (tag) { + var me = this, + m = me.tagRe.exec(tag), + name, format, args, math, v; + + if (!m) { + return null; + } + + name = m[1]; + format = m[2]; + args = m[3]; + math = m[4]; + + + if (name == '.') { + + if (!me.validTypes) { + me.definitions.push('var validTypes={string:1,number:1,boolean:1};'); + me.validTypes = true; + } + v = 'validTypes[typeof values] || ts.call(values) === "[object Date]" ? values : ""'; + } + + else if (name == '#') { + v = 'xindex'; + } + + else if (name == '$') { + v = 'xkey'; + } + else if (name.substr(0, 7) == "parent.") { + v = name; + } + + else if (isNaN(name) && name.indexOf('-') == -1 && name.indexOf('.') != -1) { + v = "values." + name; + } + + + else { + v = "values['" + name + "']"; + } + + if (math) { + v = '(' + v + math + ')'; + } + + if (format && me.useFormat) { + args = args ? ',' + args : ""; + if (format.substr(0, 5) != "this.") { + format = "fm." + format + '('; + } else { + format += '('; + } + } else { + return v; + } + + return format + v + args + ')'; + }, + + + evalTpl: function ($) { + + + + + + eval($); + return $; + }, + + newLineRe: /\r\n|\r|\n/g, + aposRe: /[']/g, + intRe: /^\s*(\d+)\s*$/, + tagRe: /^([\w-\.\#\$]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\/]\s?[\d\.\+\-\*\/\(\)]+)?$/ + +}, function () { + var proto = this.prototype; + + proto.fnArgs = 'out,values,parent,xindex,xcount,xkey'; + proto.callFn = '.call(this,' + proto.fnArgs + ')'; +}); + +//@tag core +/** + * A template class that supports advanced functionality like: + * + * - Autofilling arrays using templates and sub-templates + * - Conditional processing with basic comparison operators + * - Basic math function support + * - Execute arbitrary inline code with special built-in template variables + * - Custom member functions + * - Many special tags and built-in operators that aren't defined as part of the API, but are supported in the templates that can be created + * + * XTemplate provides the templating mechanism built into {@link Ext.view.View}. + * + * The {@link Ext.Template} describes the acceptable parameters to pass to the constructor. The following examples + * demonstrate all of the supported features. + * + * # Sample Data + * + * This is the data object used for reference in each code example: + * + * var data = { + * name: 'Don Griffin', + * title: 'Senior Technomage', + * company: 'Sencha Inc.', + * drinks: ['Coffee', 'Water', 'More Coffee'], + * kids: [ + * { name: 'Aubrey', age: 17 }, + * { name: 'Joshua', age: 13 }, + * { name: 'Cale', age: 10 }, + * { name: 'Nikol', age: 5 }, + * { name: 'Solomon', age: 0 } + * ] + * }; + * + * # Auto filling of arrays + * + * The **tpl** tag and the **for** operator are used to process the provided data object: + * + * - If the value specified in for is an array, it will auto-fill, repeating the template block inside the tpl + * tag for each item in the array. + * - If for="." is specified, the data object provided is examined. + * - If between="..." is specified, the provided value will be inserted between the items. + * This is also supported in the "foreach" looping template. + * - While processing an array, the special variable {#} will provide the current array index + 1 (starts at 1, not 0). + * + * Examples: + * + * ... + * ... + * ... + * ... + * + * Using the sample data above: + * + * var tpl = new Ext.XTemplate( + * '

    Kids: ', + * '', + * '

    {#}. {name}

    ', + * '

    ' + * ); + * tpl.overwrite(panel.body, data.kids); + * + * An example illustrating how the **for** property can be leveraged to access specified members of the provided data + * object to populate the template: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Title: {title}

    ', + * '

    Company: {company}

    ', + * '

    Kids: ', + * '', + * '

    {name}

    ', + * '

    ' + * ); + * tpl.overwrite(panel.body, data); + * + * Flat arrays that contain values (and not objects) can be auto-rendered using the special **`{.}`** variable inside a + * loop. This variable will represent the value of the array at the current index: + * + * var tpl = new Ext.XTemplate( + * '

    {name}\'s favorite beverages:

    ', + * '', + * '
    - {.}
    ', + * '
    ' + * ); + * tpl.overwrite(panel.body, data); + * + * When processing a sub-template, for example while looping through a child array, you can access the parent object's + * members via the **parent** object: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '', + * '

    {name}

    ', + * '

    Dad: {parent.name}

    ', + * '
    ', + * '

    ' + * ); + * tpl.overwrite(panel.body, data); + * + * The **foreach** operator is used to loop over an object's properties. The following + * example demonstrates looping over the main data object's properties: + * + * var tpl = new Ext.XTemplate( + * '
    ', + * '', + * '
    {$}
    ', // the special **`{$}`** variable contains the property name + * '
    {.}
    ', // within the loop, the **`{.}`** variable is set to the property value + * '
    ', + * '
    ' + * ); + * tpl.overwrite(panel.body, data); + * + * # Conditional processing with basic comparison operators + * + * The **tpl** tag and the **if** operator are used to provide conditional checks for deciding whether or not to render + * specific parts of the template. + * + * Using the sample data above: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '', + * '

    {name}

    ', + * '
    ', + * '

    ' + * ); + * tpl.overwrite(panel.body, data); + * + * More advanced conditionals are also supported: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '

    {name} is a ', + * '', + * '

    teenager

    ', + * '', + * '

    kid

    ', + * '', + * '

    baby

    ', + * '
    ', + * '

    ' + * ); + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '

    {name} is a ', + * '', + * '', + * '

    girl

    ', + * '', + * '

    boy

    ', + * '
    ', + * '

    ' + * ); + * + * A `break` is implied between each case and default, however, multiple cases can be listed + * in a single <tpl> tag. + * + * # Using double quotes + * + * Examples: + * + * var tpl = new Ext.XTemplate( + * "Child", + * "Teenager", + * "...", + * '...', + * "", + * "Hello" + * ); + * + * # Basic math support + * + * The following basic math operators may be applied directly on numeric data values: + * + * + - * / + * + * For example: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '', + * '

    {#}: {name}

    ', + * '

    In 5 Years: {age+5}

    ', + * '

    Dad: {parent.name}

    ', + * '
    ', + * '

    ' + * ); + * tpl.overwrite(panel.body, data); + * + * # Execute arbitrary inline code with special built-in template variables + * + * Anything between `{[ ... ]}` is considered code to be executed in the scope of the template. + * The expression is evaluated and the result is included in the generated result. There are + * some special variables available in that code: + * + * - **out**: The output array into which the template is being appended (using `push` to later + * `join`). + * - **values**: The values in the current scope. If you are using scope changing sub-templates, + * you can change what values is. + * - **parent**: The scope (values) of the ancestor template. + * - **xindex**: If you are in a "for" or "foreach" looping template, the index of the loop you are in (1-based). + * - **xcount**: If you are in a "for" looping template, the total length of the array you are looping. + * - **xkey**: If you are in a "foreach" looping template, the key of the current property + * being examined. + * + * This example demonstrates basic row striping using an inline code block and the xindex variable: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Company: {[values.company.toUpperCase() + ", " + values.title]}

    ', + * '

    Kids: ', + * '', + * '

    ', + * '{name}', + * '
    ', + * '

    ' + * ); + * + * Any code contained in "verbatim" blocks (using "{% ... %}") will be inserted directly in + * the generated code for the template. These blocks are not included in the output. This + * can be used for simple things like break/continue in a loop, or control structures or + * method calls (when they don't produce output). The `this` references the template instance. + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Company: {[values.company.toUpperCase() + ", " + values.title]}

    ', + * '

    Kids: ', + * '', + * '{% if (xindex % 2 === 0) continue; %}', + * '{name}', + * '{% if (xindex > 100) break; %}', + * '', + * '

    ' + * ); + * + * # Template member functions + * + * One or more member functions can be specified in a configuration object passed into the XTemplate constructor for + * more complex processing: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '', + * '

    Girl: {name} - {age}

    ', + * '', + * '

    Boy: {name} - {age}

    ', + * '
    ', + * '', + * '

    {name} is a baby!

    ', + * '
    ', + * '

    ', + * { + * // XTemplate configuration: + * disableFormats: true, + * // member functions: + * isGirl: function(name){ + * return name == 'Aubrey' || name == 'Nikol'; + * }, + * isBaby: function(age){ + * return age < 1; + * } + * } + * ); + * tpl.overwrite(panel.body, data); + */ +Ext.define('Ext.XTemplate', { + extend: Ext.Template , + + + + /** + * @private + */ + emptyObj: {}, + + /** + * @cfg {Boolean} compiled + * Only applies to {@link Ext.Template}, XTemplates are compiled automatically on the + * first call to {@link #apply} or {@link #applyOut}. + * @hide + */ + + /** + * @cfg {String/Array} definitions + * Optional. A statement, or array of statements which set up `var`s which may then + * be accessed within the scope of the generated function. + */ + + apply: function(values, parent) { + return this.applyOut(values, [], parent).join(''); + }, + + applyOut: function(values, out, parent) { + var me = this, + compiler; + + if (!me.fn) { + compiler = new Ext.XTemplateCompiler({ + useFormat: me.disableFormats !== true, + definitions: me.definitions + }); + + me.fn = compiler.compile(me.html); + } + + try { + me.fn(out, values, parent || me.emptyObj, 1, 1); + } catch (e) { + } + + return out; + }, + + /** + * Does nothing. XTemplates are compiled automatically, so this function simply returns this. + * @return {Ext.XTemplate} this + */ + compile: function() { + return this; + }, + + statics: { + /** + * Gets an `XTemplate` from an object (an instance of an {@link Ext#define}'d class). + * Many times, templates are configured high in the class hierarchy and are to be + * shared by all classes that derive from that base. To further complicate matters, + * these templates are seldom actual instances but are rather configurations. For + * example: + * + * Ext.define('MyApp.Class', { + * extraCls: 'extra-class', + * + * someTpl: [ + * '
    ', + * { + * + * emitClass: function(out) { + * out.push(this.owner.extraCls); + * } + * }] + * }); + * + * The goal being to share that template definition with all instances and even + * instances of derived classes, until `someTpl` is overridden. This method will + * "upgrade" these configurations to be real `XTemplate` instances *in place* (to + * avoid creating one instance per object). + * + * The resulting XTemplate will have an `owner` reference injected which refers back + * to the owning object whether that is an object which has an *own instance*, or a + * class prototype. Through this link, XTemplate member functions will be able to access + * prototype properties of its owning class. + * + * @param {Object} instance The object from which to get the `XTemplate` (must be + * an instance of an {@link Ext#define}'d class). + * @param {String} name The name of the property by which to get the `XTemplate`. + * @return {Ext.XTemplate} The `XTemplate` instance or null if not found. + * @protected + * @static + */ + getTpl: function (instance, name) { + var tpl = instance[name], // go for it! 99% of the time we will get it! + owner; + + if (tpl && !tpl.isTemplate) { // tpl is just a configuration (not an instance) + // create the template instance from the configuration: + tpl = Ext.ClassManager.dynInstantiate('Ext.XTemplate', tpl); + + // and replace the reference with the new instance: + if (instance.hasOwnProperty(name)) { // the tpl is on the instance + owner = instance; + } else { // must be somewhere in the prototype chain + for (owner = instance.self.prototype; owner && !owner.hasOwnProperty(name); owner = owner.superclass) { + } + } + owner[name] = tpl; + tpl.owner = owner; + } + // else !tpl (no such tpl) or the tpl is an instance already... either way, tpl + // is ready to return + + return tpl || null; + } + } +}); + +//@tag dom,core +//@require Helper.js +//@define Ext.dom.Query +//@define Ext.core.Query +//@define Ext.DomQuery + +/* + * This is code is also distributed under MIT license for use + * with jQuery and prototype JavaScript libraries. + */ +/** + * @class Ext.dom.Query + * @alternateClassName Ext.DomQuery + * @alternateClassName Ext.core.DomQuery + * @singleton + * + * Provides high performance selector/xpath processing by compiling queries into reusable functions. New pseudo classes + * and matchers can be plugged. It works on HTML and XML documents (if a content node is passed in). + * + * DomQuery supports most of the [CSS3 selectors spec][1], along with some custom selectors and basic XPath. + * + * All selectors, attribute filters and pseudos below can be combined infinitely in any order. For example + * `div.foo:nth-child(odd)[@foo=bar].bar:first` would be a perfectly valid selector. Node filters are processed + * in the order in which they appear, which allows you to optimize your queries for your document structure. + * + * ## Element Selectors: + * + * - **`*`** any element + * - **`E`** an element with the tag E + * - **`E F`** All descendent elements of E that have the tag F + * - **`E > F`** or **E/F** all direct children elements of E that have the tag F + * - **`E + F`** all elements with the tag F that are immediately preceded by an element with the tag E + * - **`E ~ F`** all elements with the tag F that are preceded by a sibling element with the tag E + * + * ## Attribute Selectors: + * + * The use of `@` and quotes are optional. For example, `div[@foo='bar']` is also a valid attribute selector. + * + * - **`E[foo]`** has an attribute "foo" + * - **`E[foo=bar]`** has an attribute "foo" that equals "bar" + * - **`E[foo^=bar]`** has an attribute "foo" that starts with "bar" + * - **`E[foo$=bar]`** has an attribute "foo" that ends with "bar" + * - **`E[foo*=bar]`** has an attribute "foo" that contains the substring "bar" + * - **`E[foo%=2]`** has an attribute "foo" that is evenly divisible by 2 + * - **`E[foo!=bar]`** attribute "foo" does not equal "bar" + * + * ## Pseudo Classes: + * + * - **`E:first-child`** E is the first child of its parent + * - **`E:last-child`** E is the last child of its parent + * - **`E:nth-child(_n_)`** E is the _n_th child of its parent (1 based as per the spec) + * - **`E:nth-child(odd)`** E is an odd child of its parent + * - **`E:nth-child(even)`** E is an even child of its parent + * - **`E:only-child`** E is the only child of its parent + * - **`E:checked`** E is an element that is has a checked attribute that is true (e.g. a radio or checkbox) + * - **`E:first`** the first E in the resultset + * - **`E:last`** the last E in the resultset + * - **`E:nth(_n_)`** the _n_th E in the resultset (1 based) + * - **`E:odd`** shortcut for :nth-child(odd) + * - **`E:even`** shortcut for :nth-child(even) + * - **`E:contains(foo)`** E's innerHTML contains the substring "foo" + * - **`E:nodeValue(foo)`** E contains a textNode with a nodeValue that equals "foo" + * - **`E:not(S)`** an E element that does not match simple selector S + * - **`E:has(S)`** an E element that has a descendent that matches simple selector S + * - **`E:next(S)`** an E element whose next sibling matches simple selector S + * - **`E:prev(S)`** an E element whose previous sibling matches simple selector S + * - **`E:any(S1|S2|S2)`** an E element which matches any of the simple selectors S1, S2 or S3 + * - **`E:visible(true)`** an E element which is deeply visible according to {@link Ext.dom.Element#isVisible} + * + * ## CSS Value Selectors: + * + * - **`E{display=none}`** css value "display" that equals "none" + * - **`E{display^=none}`** css value "display" that starts with "none" + * - **`E{display$=none}`** css value "display" that ends with "none" + * - **`E{display*=none}`** css value "display" that contains the substring "none" + * - **`E{display%=2}`** css value "display" that is evenly divisible by 2 + * - **`E{display!=none}`** css value "display" that does not equal "none" + * + * ## XML Namespaces: + * - **`ns|E`** an element with tag E and namespace prefix ns + * + * [1]: http: + */ +Ext.ns('Ext.core'); + +Ext.dom.Query = Ext.core.DomQuery = Ext.DomQuery = (function() { + var DQ, + doc = document, + cache = {}, + simpleCache = {}, + valueCache = {}, + useClassList = !!doc.documentElement.classList, + useElementPointer = !!doc.documentElement.firstElementChild, + useChildrenCollection = (function() { + var d = doc.createElement('div'); + d.innerHTML = 'text'; + return d.children && (d.children.length === 0); + })(), + nonSpace = /\S/, + trimRe = /^\s+|\s+$/g, + tplRe = /\{(\d+)\}/g, + modeRe = /^(\s?[\/>+~]\s?|\s|$)/, + tagTokenRe = /^(#)?([\w\-\*\|\\]+)/, + nthRe = /(\d*)n\+?(\d*)/, + nthRe2 = /\D/, + startIdRe = /^\s*#/, + + + + isIE = window.ActiveXObject ? true : false, + key = 30803, + longHex = /\\([0-9a-fA-F]{6})/g, + shortHex = /\\([0-9a-fA-F]{1,6})\s{0,1}/g, + nonHex = /\\([^0-9a-fA-F]{1})/g, + escapes = /\\/g, + num, hasEscapes, + + + supportsColonNsSeparator = (function () { + var xmlDoc, + xmlString = ''; + + if (window.DOMParser) { + xmlDoc = (new DOMParser()).parseFromString(xmlString, "application/xml"); + } else { + xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.loadXML(xmlString); + } + + return !!xmlDoc.getElementsByTagName('a:b').length; + })(), + + + + longHexToChar = function($0, $1) { + return String.fromCharCode(parseInt($1, 16)); + }, + + + shortToLongHex = function($0, $1) { + while ($1.length < 6) { + $1 = '0' + $1; + } + return '\\' + $1; + }, + + + charToLongHex = function($0, $1) { + num = $1.charCodeAt(0).toString(16); + if (num.length === 1) { + num = '0' + num; + } + return '\\0000' + num; + }, + + + + + unescapeCssSelector = function(selector) { + return (hasEscapes) + ? selector.replace(longHex, longHexToChar) + : selector; + }, + + + setupEscapes = function(path) { + hasEscapes = (path.indexOf('\\') > -1); + if (hasEscapes) { + path = path + .replace(shortHex, shortToLongHex) + .replace(nonHex, charToLongHex) + .replace(escapes, '\\\\'); + } + return path; + }; + + + + eval("var batch = 30803, child, next, prev, byClassName;"); + + + + child = useChildrenCollection ? + function child(parent, index) { + return parent.children[index] + } : + function child(parent, index) { + var i = 0, + n = parent.firstChild; + while (n) { + if (n.nodeType == 1) { + if (++i == index) { + return n; + } + } + n = n.nextSibling; + } + return null; + }; + + + next = useElementPointer ? + function(n) { + return n.nextElementSibling; + } : + function(n) { + while ((n = n.nextSibling) && n.nodeType != 1); + return n; + }; + + + prev = useElementPointer ? + function(n) { + return n.previousElementSibling; + } : + function(n) { + while ((n = n.previousSibling) && n.nodeType != 1); + return n; + }; + + + + function children(parent) { + var n = parent.firstChild, + nodeIndex = -1, + nextNode; + + while (n) { + nextNode = n.nextSibling; + + if (n.nodeType == 3 && !nonSpace.test(n.nodeValue)) { + parent.removeChild(n); + } else { + + n.nodeIndex = ++nodeIndex; + } + n = nextNode; + } + return this; + } + + + + byClassName = useClassList ? + function (nodeSet, cls) { + cls = unescapeCssSelector(cls); + if (!cls) { + return nodeSet; + } + var result = [], ri = -1, + i, ci, classList; + + for (i = 0; ci = nodeSet[i]; i++) { + classList = ci.classList; + if (classList) { + if (classList.contains(cls)) { + result[++ri] = ci; + } + } else if ((' ' + ci.className + ' ').indexOf(cls) !== -1) { + + + result[++ri] = ci; + } + } + return result; + } : + function (nodeSet, cls) { + cls = unescapeCssSelector(cls); + if (!cls) { + return nodeSet; + } + var result = [], ri = -1, + i, ci; + + for (i = 0; ci = nodeSet[i]; i++) { + if ((' ' + ci.className + ' ').indexOf(cls) !== -1) { + result[++ri] = ci; + } + } + return result; + }; + + function attrValue(n, attr) { + + if (!n.tagName && typeof n.length != "undefined") { + n = n[0]; + } + if (!n) { + return null; + } + + if (attr == "for") { + return n.htmlFor; + } + if (attr == "class" || attr == "className") { + return n.className; + } + return n.getAttribute(attr) || n[attr]; + + } + + + + + function getNodes(ns, mode, tagName) { + var result = [], ri = -1, cs, + i, ni, j, ci, cn, utag, n, cj; + if (!ns) { + return result; + } + tagName = tagName.replace('|', ':') || "*"; + + if (typeof ns.getElementsByTagName != "undefined") { + ns = [ns]; + } + + + + if (!mode) { + tagName = unescapeCssSelector(tagName); + if (!supportsColonNsSeparator && DQ.isXml(ns[0]) && + tagName.indexOf(':') !== -1) { + + + + + + + for (i = 0; ni = ns[i]; i++) { + cs = ni.getElementsByTagName(tagName.split(':').pop()); + for (j = 0; ci = cs[j]; j++) { + if (ci.tagName === tagName) { + result[++ri] = ci; + } + } + } + } else { + for (i = 0; ni = ns[i]; i++) { + cs = ni.getElementsByTagName(tagName); + for (j = 0; ci = cs[j]; j++) { + result[++ri] = ci; + } + } + } + + + } else if (mode == "/" || mode == ">") { + utag = tagName.toUpperCase(); + for (i = 0; ni = ns[i]; i++) { + cn = ni.childNodes; + for (j = 0; cj = cn[j]; j++) { + if (cj.nodeName == utag || cj.nodeName == tagName || tagName == '*') { + result[++ri] = cj; + } + } + } + + + } else if (mode == "+") { + utag = tagName.toUpperCase(); + for (i = 0; n = ns[i]; i++) { + while ((n = n.nextSibling) && n.nodeType != 1); + if (n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')) { + result[++ri] = n; + } + } + + + } else if (mode == "~") { + utag = tagName.toUpperCase(); + for (i = 0; n = ns[i]; i++) { + while ((n = n.nextSibling)) { + if (n.nodeName == utag || n.nodeName == tagName || tagName == '*') { + result[++ri] = n; + } + } + } + } + return result; + } + + function concat(a, b) { + a.push.apply(a, b); + return a; + } + + function byTag(cs, tagName) { + if (cs.tagName || cs === doc) { + cs = [cs]; + } + if (!tagName) { + return cs; + } + var result = [], ri = -1, + i, ci; + tagName = tagName.toLowerCase(); + for (i = 0; ci = cs[i]; i++) { + if (ci.nodeType == 1 && ci.tagName.toLowerCase() == tagName) { + result[++ri] = ci; + } + } + return result; + } + + function byId(cs, id) { + id = unescapeCssSelector(id); + if (cs.tagName || cs === doc) { + cs = [cs]; + } + if (!id) { + return cs; + } + var result = [], ri = -1, + i, ci; + for (i = 0; ci = cs[i]; i++) { + if (ci && ci.id == id) { + result[++ri] = ci; + return result; + } + } + return result; + } + + + + function byAttribute(cs, attr, value, op, custom) { + var result = [], + ri = -1, + useGetStyle = custom == "{", + fn = DQ.operators[op], + a, + xml, + hasXml, + i, ci; + + value = unescapeCssSelector(value); + + for (i = 0; ci = cs[i]; i++) { + + if (ci.nodeType === 1) { + + if (!hasXml) { + xml = DQ.isXml(ci); + hasXml = true; + } + + + if (!xml) { + if (useGetStyle) { + a = DQ.getStyle(ci, attr); + } else if (attr == "class" || attr == "className") { + a = ci.className; + } else if (attr == "for") { + a = ci.htmlFor; + } else if (attr == "href") { + + + a = ci.getAttribute("href", 2); + } else { + a = ci.getAttribute(attr); + } + } else { + a = ci.getAttribute(attr); + } + if ((fn && fn(a, value)) || (!fn && a)) { + result[++ri] = ci; + } + } + } + return result; + } + + function byPseudo(cs, name, value) { + value = unescapeCssSelector(value); + return DQ.pseudos[name](cs, value); + } + + function nodupIEXml(cs) { + var d = ++key, + r, + i, len, c; + cs[0].setAttribute("_nodup", d); + r = [cs[0]]; + for (i = 1, len = cs.length; i < len; i++) { + c = cs[i]; + if (!c.getAttribute("_nodup") != d) { + c.setAttribute("_nodup", d); + r[r.length] = c; + } + } + for (i = 0, len = cs.length; i < len; i++) { + cs[i].removeAttribute("_nodup"); + } + return r; + } + + function nodup(cs) { + if (!cs) { + return []; + } + var len = cs.length, c, i, r = cs, cj, ri = -1, d, j; + if (!len || typeof cs.nodeType != "undefined" || len == 1) { + return cs; + } + if (isIE && typeof cs[0].selectSingleNode != "undefined") { + return nodupIEXml(cs); + } + d = ++key; + cs[0]._nodup = d; + for (i = 1; c = cs[i]; i++) { + if (c._nodup != d) { + c._nodup = d; + } else { + r = []; + for (j = 0; j < i; j++) { + r[++ri] = cs[j]; + } + for (j = i + 1; cj = cs[j]; j++) { + if (cj._nodup != d) { + cj._nodup = d; + r[++ri] = cj; + } + } + return r; + } + } + return r; + } + + function quickDiffIEXml(c1, c2) { + var d = ++key, + r = [], + i, len; + for (i = 0, len = c1.length; i < len; i++) { + c1[i].setAttribute("_qdiff", d); + } + for (i = 0, len = c2.length; i < len; i++) { + if (c2[i].getAttribute("_qdiff") != d) { + r[r.length] = c2[i]; + } + } + for (i = 0, len = c1.length; i < len; i++) { + c1[i].removeAttribute("_qdiff"); + } + return r; + } + + function quickDiff(c1, c2) { + var len1 = c1.length, + d = ++key, + r = [], + i, len; + if (!len1) { + return c2; + } + if (isIE && typeof c1[0].selectSingleNode != "undefined") { + return quickDiffIEXml(c1, c2); + } + for (i = 0; i < len1; i++) { + c1[i]._qdiff = d; + } + for (i = 0, len = c2.length; i < len; i++) { + if (c2[i]._qdiff != d) { + r[r.length] = c2[i]; + } + } + return r; + } + + function quickId(ns, mode, root, id) { + if (ns == root) { + id = unescapeCssSelector(id); + var d = root.ownerDocument || root; + return d.getElementById(id); + } + ns = getNodes(ns, mode, "*"); + return byId(ns, id); + } + + return DQ = { + getStyle: function(el, name) { + return Ext.fly(el, '_DomQuery').getStyle(name); + }, + + compile: function(path, type) { + type = type || "select"; + + + var fn = ["var f = function(root) {\n var mode; ++batch; var n = root || document;\n"], + lastPath, + matchers = DQ.matchers, + matchersLn = matchers.length, + modeMatch, + + lmode = path.match(modeRe), + tokenMatch, matched, j, t, m; + + path = setupEscapes(path); + + if (lmode && lmode[1]) { + fn[fn.length] = 'mode="' + lmode[1].replace(trimRe, "") + '";'; + path = path.replace(lmode[1], ""); + } + + + while (path.substr(0, 1) == "/") { + path = path.substr(1); + } + + while (path && lastPath != path) { + lastPath = path; + tokenMatch = path.match(tagTokenRe); + if (type == "select") { + if (tokenMatch) { + + if (tokenMatch[1] == "#") { + fn[fn.length] = 'n = quickId(n, mode, root, "' + tokenMatch[2] + '");'; + } else { + fn[fn.length] = 'n = getNodes(n, mode, "' + tokenMatch[2] + '");'; + } + path = path.replace(tokenMatch[0], ""); + } else if (path.substr(0, 1) != '@') { + fn[fn.length] = 'n = getNodes(n, mode, "*");'; + } + + } else { + if (tokenMatch) { + if (tokenMatch[1] == "#") { + fn[fn.length] = 'n = byId(n, "' + tokenMatch[2] + '");'; + } else { + fn[fn.length] = 'n = byTag(n, "' + tokenMatch[2] + '");'; + } + path = path.replace(tokenMatch[0], ""); + } + } + while (!(modeMatch = path.match(modeRe))) { + matched = false; + for (j = 0; j < matchersLn; j++) { + t = matchers[j]; + m = path.match(t.re); + if (m) { + fn[fn.length] = t.select.replace(tplRe, function(x, i) { + return m[i]; + }); + path = path.replace(m[0], ""); + matched = true; + break; + } + } + + if (!matched) { + Ext.Error.raise({ + sourceClass:'Ext.DomQuery', + sourceMethod:'compile', + msg:'Error parsing selector. Parsing failed at "' + path + '"' + }); + } + } + if (modeMatch[1]) { + fn[fn.length] = 'mode="' + modeMatch[1].replace(trimRe, "") + '";'; + path = path.replace(modeMatch[1], ""); + } + } + + fn[fn.length] = "return nodup(n);\n}"; + + + eval(fn.join("")); + return f; + }, + + + jsSelect: function(path, root, type) { + + root = root || doc; + + if (typeof root == "string") { + root = doc.getElementById(root); + } + var paths = path.split(","), + results = [], + i, len, subPath, result; + + + for (i = 0, len = paths.length; i < len; i++) { + subPath = paths[i].replace(trimRe, ""); + + if (!cache[subPath]) { + + cache[subPath] = DQ.compile(subPath, type); + if (!cache[subPath]) { + Ext.Error.raise({ + sourceClass:'Ext.DomQuery', + sourceMethod:'jsSelect', + msg:subPath + ' is not a valid selector' + }); + } + } else { + + + setupEscapes(subPath); + } + result = cache[subPath](root); + if (result && result !== doc) { + results = results.concat(result); + } + } + + + + if (paths.length > 1) { + return nodup(results); + } + return results; + }, + + isXml: function(el) { + var docEl = (el ? el.ownerDocument || el : 0).documentElement; + return docEl ? docEl.nodeName !== "HTML" : false; + }, + + + select : doc.querySelectorAll ? function(path, root, type, single) { + root = root || doc; + if (!DQ.isXml(root)) { + try { + + if (root.parentNode && (root.nodeType !== 9) && path.indexOf(',') === -1 && !startIdRe.test(path)) { + path = '#' + Ext.escapeId(Ext.id(root)) + ' ' + path; + root = root.parentNode; + } + return single ? [ root.querySelector(path) ] + : Ext.Array.toArray(root.querySelectorAll(path)); + } + catch (e) { + } + } + return DQ.jsSelect.call(this, path, root, type); + } : function(path, root, type) { + return DQ.jsSelect.call(this, path, root, type); + }, + + + selectNode : function(path, root){ + return Ext.DomQuery.select(path, root, null, true)[0]; + }, + + + selectValue: function(path, root, defaultValue) { + path = path.replace(trimRe, ""); + if (!valueCache[path]) { + valueCache[path] = DQ.compile(path, "select"); + } else { + setupEscapes(path); + } + + var n = valueCache[path](root), + v; + + n = n[0] ? n[0] : n; + + + + + + if (typeof n.normalize == 'function') { + n.normalize(); + } + + v = (n && n.firstChild ? n.firstChild.nodeValue : null); + return ((v === null || v === undefined || v === '') ? defaultValue : v); + }, + + + selectNumber: function(path, root, defaultValue) { + var v = DQ.selectValue(path, root, defaultValue || 0); + return parseFloat(v); + }, + + + is: function(el, ss) { + if (typeof el == "string") { + el = doc.getElementById(el); + } + var isArray = Ext.isArray(el), + result = DQ.filter(isArray ? el : [el], ss); + return isArray ? (result.length == el.length) : (result.length > 0); + }, + + + filter: function(els, ss, nonMatches) { + ss = ss.replace(trimRe, ""); + if (!simpleCache[ss]) { + simpleCache[ss] = DQ.compile(ss, "simple"); + } else { + setupEscapes(ss); + } + + var result = simpleCache[ss](els); + return nonMatches ? quickDiff(result, els) : result; + }, + + + matchers: [{ + re: /^\.([\w\-\\]+)/, + select: useClassList ? 'n = byClassName(n, "{1}");' : 'n = byClassName(n, " {1} ");' + }, { + re: /^\:([\w\-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/, + select: 'n = byPseudo(n, "{1}", "{2}");' + }, { + re: /^(?:([\[\{])(?:@)?([\w\-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/, + select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");' + }, { + re: /^#([\w\-\\]+)/, + select: 'n = byId(n, "{1}");' + }, { + re: /^@([\w\-\.]+)/, + select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};' + }], + + + operators: { + "=": function(a, v) { + return a == v; + }, + "!=": function(a, v) { + return a != v; + }, + "^=": function(a, v) { + return a && a.substr(0, v.length) == v; + }, + "$=": function(a, v) { + return a && a.substr(a.length - v.length) == v; + }, + "*=": function(a, v) { + return a && a.indexOf(v) !== -1; + }, + "%=": function(a, v) { + return (a % v) == 0; + }, + "|=": function(a, v) { + return a && (a == v || a.substr(0, v.length + 1) == v + '-'); + }, + "~=": function(a, v) { + return a && (' ' + a + ' ').indexOf(' ' + v + ' ') != -1; + } + }, + + + pseudos: { + "first-child": function(c) { + var r = [], ri = -1, n, + i, ci; + for (i = 0; (ci = n = c[i]); i++) { + while ((n = n.previousSibling) && n.nodeType != 1); + if (!n) { + r[++ri] = ci; + } + } + return r; + }, + + "last-child": function(c) { + var r = [], ri = -1, n, + i, ci; + for (i = 0; (ci = n = c[i]); i++) { + while ((n = n.nextSibling) && n.nodeType != 1); + if (!n) { + r[++ri] = ci; + } + } + return r; + }, + + "nth-child": function(c, a) { + var r = [], ri = -1, + m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a), + f = (m[1] || 1) - 0, l = m[2] - 0, + i, n, j, cn, pn; + for (i = 0; n = c[i]; i++) { + pn = n.parentNode; + if (batch != pn._batch) { + j = 0; + for (cn = pn.firstChild; cn; cn = cn.nextSibling) { + if (cn.nodeType == 1) { + cn.nodeIndex = ++j; + } + } + pn._batch = batch; + } + if (f == 1) { + if (l == 0 || n.nodeIndex == l) { + r[++ri] = n; + } + } else if ((n.nodeIndex + l) % f == 0) { + r[++ri] = n; + } + } + + return r; + }, + + "only-child": function(c) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (!prev(ci) && !next(ci)) { + r[++ri] = ci; + } + } + return r; + }, + + "empty": function(c) { + var r = [], ri = -1, + i, ci, cns, j, cn, empty; + for (i = 0; ci = c[i]; i++) { + cns = ci.childNodes; + j = 0; + empty = true; + while (cn = cns[j]) { + ++j; + if (cn.nodeType == 1 || cn.nodeType == 3) { + empty = false; + break; + } + } + if (empty) { + r[++ri] = ci; + } + } + return r; + }, + + "contains": function(c, v) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if ((ci.textContent || ci.innerText || ci.text || '').indexOf(v) != -1) { + r[++ri] = ci; + } + } + return r; + }, + + "nodeValue": function(c, v) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (ci.firstChild && ci.firstChild.nodeValue == v) { + r[++ri] = ci; + } + } + return r; + }, + + "checked": function(c) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (ci.checked == true) { + r[++ri] = ci; + } + } + return r; + }, + + "not": function(c, ss) { + return DQ.filter(c, ss, true); + }, + + "any": function(c, selectors) { + var ss = selectors.split('|'), + r = [], ri = -1, s, + i, ci, j; + for (i = 0; ci = c[i]; i++) { + for (j = 0; s = ss[j]; j++) { + if (DQ.is(ci, s)) { + r[++ri] = ci; + break; + } + } + } + return r; + }, + + "odd": function(c) { + return this["nth-child"](c, "odd"); + }, + + "even": function(c) { + return this["nth-child"](c, "even"); + }, + + "nth": function(c, a) { + return c[a - 1] || []; + }, + + "first": function(c) { + return c[0] || []; + }, + + "last": function(c) { + return c[c.length - 1] || []; + }, + + "has": function(c, ss) { + var s = DQ.select, + r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (s(ss, ci).length > 0) { + r[++ri] = ci; + } + } + return r; + }, + + "next": function(c, ss) { + var is = DQ.is, + r = [], ri = -1, + i, ci, n; + for (i = 0; ci = c[i]; i++) { + n = next(ci); + if (n && is(n, ss)) { + r[++ri] = ci; + } + } + return r; + }, + + "prev": function(c, ss) { + var is = DQ.is, + r = [], ri = -1, + i, ci, n; + for (i = 0; ci = c[i]; i++) { + n = prev(ci); + if (n && is(n, ss)) { + r[++ri] = ci; + } + } + return r; + }, + + focusable: function(candidates) { + var len = candidates.length, + results = [], + i = 0, + c; + + for (; i < len; i++) { + c = candidates[i]; + if (Ext.fly(c, '_DomQuery').isFocusable()) { + results.push(c); + } + } + + return results; + }, + + visible: function(candidates, deep) { + var len = candidates.length, + results = [], + i = 0, + c; + + for (; i < len; i++) { + c = candidates[i]; + if (Ext.fly(c, '_DomQuery').isVisible(deep)) { + results.push(c); + } + } + + return results; + } + } + }; +}()); + + +Ext.query = Ext.DomQuery.select; + +//@tag dom,core + + + + +Ext.define('Ext.dom.Element_anim', { + override: 'Ext.dom.Element', + + + animate: function(config) { + var me = this, + listeners, + anim, + animId = me.dom.id || Ext.id(me.dom); + + if (!Ext.fx.Manager.hasFxBlock(animId)) { + + if (config.listeners) { + listeners = config.listeners; + delete config.listeners; + } + if (config.internalListeners) { + config.listeners = config.internalListeners; + delete config.internalListeners; + } + anim = new Ext.fx.Anim(me.anim(config)); + if (listeners) { + anim.on(listeners); + } + Ext.fx.Manager.queueFx(anim); + } + return me; + }, + + + anim: function(config) { + if (!Ext.isObject(config)) { + return (config) ? {} : false; + } + + var me = this, + duration = config.duration || Ext.fx.Anim.prototype.duration, + easing = config.easing || 'ease', + animConfig; + + if (config.stopAnimation) { + me.stopAnimation(); + } + + Ext.applyIf(config, Ext.fx.Manager.getFxDefaults(me.id)); + + + Ext.fx.Manager.setFxDefaults(me.id, { + delay: 0 + }); + + animConfig = { + + target: me.dom, + remove: config.remove, + alternate: config.alternate || false, + duration: duration, + easing: easing, + callback: config.callback, + listeners: config.listeners, + iterations: config.iterations || 1, + scope: config.scope, + block: config.block, + concurrent: config.concurrent, + delay: config.delay || 0, + paused: true, + keyframes: config.keyframes, + from: config.from || {}, + to: Ext.apply({}, config) + }; + Ext.apply(animConfig.to, config.to); + + + delete animConfig.to.to; + delete animConfig.to.from; + delete animConfig.to.remove; + delete animConfig.to.alternate; + delete animConfig.to.keyframes; + delete animConfig.to.iterations; + delete animConfig.to.listeners; + delete animConfig.to.target; + delete animConfig.to.paused; + delete animConfig.to.callback; + delete animConfig.to.scope; + delete animConfig.to.duration; + delete animConfig.to.easing; + delete animConfig.to.concurrent; + delete animConfig.to.block; + delete animConfig.to.stopAnimation; + delete animConfig.to.delay; + return animConfig; + }, + + + slideIn: function(anchor, obj, slideOut) { + var me = this, + dom = me.dom, + elStyle = dom.style, + beforeAnim, + wrapAnim, + restoreScroll, + wrapDomParentNode; + + anchor = anchor || "t"; + obj = obj || {}; + + beforeAnim = function() { + var animScope = this, + listeners = obj.listeners, + el = Ext.fly(dom, '_anim'), + box, originalStyles, anim, wrap; + + if (!slideOut) { + el.fixDisplay(); + } + + box = el.getBox(); + if ((anchor == 't' || anchor == 'b') && box.height === 0) { + box.height = dom.scrollHeight; + } + else if ((anchor == 'l' || anchor == 'r') && box.width === 0) { + box.width = dom.scrollWidth; + } + + originalStyles = el.getStyles('width', 'height', 'left', 'right', 'top', 'bottom', 'position', 'z-index', true); + el.setSize(box.width, box.height); + + + if (obj.preserveScroll) { + restoreScroll = el.cacheScrollValues(); + } + + wrap = el.wrap({ + id: Ext.id() + '-anim-wrap-for-' + el.dom.id, + style: { + visibility: slideOut ? 'visible' : 'hidden' + } + }); + wrapDomParentNode = wrap.dom.parentNode; + wrap.setPositioning(el.getPositioning(true)); + if (wrap.isStyle('position', 'static')) { + wrap.position('relative'); + } + el.clearPositioning('auto'); + wrap.clip(); + + + if (restoreScroll) { + restoreScroll(); + } + + + + + el.setStyle({ + visibility: '', + position: 'absolute' + }); + if (slideOut) { + wrap.setSize(box.width, box.height); + } + + switch (anchor) { + case 't': + anim = { + from: { + width: box.width + 'px', + height: '0px' + }, + to: { + width: box.width + 'px', + height: box.height + 'px' + } + }; + elStyle.bottom = '0px'; + break; + case 'l': + anim = { + from: { + width: '0px', + height: box.height + 'px' + }, + to: { + width: box.width + 'px', + height: box.height + 'px' + } + }; + me.anchorAnimX(anchor); + break; + case 'r': + anim = { + from: { + x: box.x + box.width, + width: '0px', + height: box.height + 'px' + }, + to: { + x: box.x, + width: box.width + 'px', + height: box.height + 'px' + } + }; + me.anchorAnimX(anchor); + break; + case 'b': + anim = { + from: { + y: box.y + box.height, + width: box.width + 'px', + height: '0px' + }, + to: { + y: box.y, + width: box.width + 'px', + height: box.height + 'px' + } + }; + break; + case 'tl': + anim = { + from: { + x: box.x, + y: box.y, + width: '0px', + height: '0px' + }, + to: { + width: box.width + 'px', + height: box.height + 'px' + } + }; + elStyle.bottom = '0px'; + me.anchorAnimX('l'); + break; + case 'bl': + anim = { + from: { + y: box.y + box.height, + width: '0px', + height: '0px' + }, + to: { + y: box.y, + width: box.width + 'px', + height: box.height + 'px' + } + }; + me.anchorAnimX('l'); + break; + case 'br': + anim = { + from: { + x: box.x + box.width, + y: box.y + box.height, + width: '0px', + height: '0px' + }, + to: { + x: box.x, + y: box.y, + width: box.width + 'px', + height: box.height + 'px' + } + }; + me.anchorAnimX('r'); + break; + case 'tr': + anim = { + from: { + x: box.x + box.width, + width: '0px', + height: '0px' + }, + to: { + x: box.x, + width: box.width + 'px', + height: box.height + 'px' + } + }; + elStyle.bottom = '0px'; + me.anchorAnimX('r'); + break; + } + + wrap.show(); + wrapAnim = Ext.apply({}, obj); + delete wrapAnim.listeners; + wrapAnim = new Ext.fx.Anim(Ext.applyIf(wrapAnim, { + target: wrap, + duration: 500, + easing: 'ease-out', + from: slideOut ? anim.to : anim.from, + to: slideOut ? anim.from : anim.to + })); + + + wrapAnim.on('afteranimate', function() { + var el = Ext.fly(dom, '_anim'); + + el.setStyle(originalStyles); + if (slideOut) { + if (obj.useDisplay) { + el.setDisplayed(false); + } else { + el.hide(); + } + } + if (wrap.dom) { + if (wrap.dom.parentNode) { + wrap.dom.parentNode.insertBefore(el.dom, wrap.dom); + } else { + wrapDomParentNode.appendChild(el.dom); + } + wrap.remove(); + } + + if (restoreScroll) { + restoreScroll(); + } + + animScope.end(); + }); + + if (listeners) { + wrapAnim.on(listeners); + } + }; + + me.animate({ + + duration: obj.duration ? Math.max(obj.duration, 500) * 2 : 1000, + listeners: { + beforeanimate: beforeAnim + } + }); + return me; + }, + + + + slideOut: function(anchor, o) { + return this.slideIn(anchor, o, true); + }, + + + puff: function(obj) { + var me = this, + dom = me.dom, + beforeAnim, + box = me.getBox(), + originalStyles = me.getStyles('width', 'height', 'left', 'right', 'top', 'bottom', 'position', 'z-index', 'font-size', 'opacity', true); + + obj = Ext.applyIf(obj || {}, { + easing: 'ease-out', + duration: 500, + useDisplay: false + }); + + beforeAnim = function() { + var el = Ext.fly(dom, '_anim'); + + el.clearOpacity(); + el.show(); + this.to = { + width: box.width * 2, + height: box.height * 2, + x: box.x - (box.width / 2), + y: box.y - (box.height /2), + opacity: 0, + fontSize: '200%' + }; + this.on('afteranimate',function() { + var el = Ext.fly(dom, '_anim'); + if (el) { + if (obj.useDisplay) { + el.setDisplayed(false); + } else { + el.hide(); + } + el.setStyle(originalStyles); + Ext.callback(obj.callback, obj.scope); + } + }); + }; + + me.animate({ + duration: obj.duration, + easing: obj.easing, + listeners: { + beforeanimate: { + fn: beforeAnim + } + } + }); + return me; + }, + + + switchOff: function(obj) { + var me = this, + dom = me.dom, + beforeAnim; + + obj = Ext.applyIf(obj || {}, { + easing: 'ease-in', + duration: 500, + remove: false, + useDisplay: false + }); + + beforeAnim = function() { + var el = Ext.fly(dom, '_anim'), + animScope = this, + size = el.getSize(), + xy = el.getXY(), + keyframe, position; + + el.clearOpacity(); + el.clip(); + position = el.getPositioning(); + + keyframe = new Ext.fx.Animator({ + target: dom, + duration: obj.duration, + easing: obj.easing, + keyframes: { + 33: { + opacity: 0.3 + }, + 66: { + height: 1, + y: xy[1] + size.height / 2 + }, + 100: { + width: 1, + x: xy[0] + size.width / 2 + } + } + }); + keyframe.on('afteranimate', function() { + var el = Ext.fly(dom, '_anim'); + if (obj.useDisplay) { + el.setDisplayed(false); + } else { + el.hide(); + } + el.clearOpacity(); + el.setPositioning(position); + el.setSize(size); + + animScope.end(); + }); + }; + + me.animate({ + + duration: (Math.max(obj.duration, 500) * 2), + listeners: { + beforeanimate: { + fn: beforeAnim + } + } + }); + return me; + }, + + + frame : function(color, count, obj){ + var me = this, + dom = me.dom, + beforeAnim; + + color = color || '#C3DAF9'; + count = count || 1; + obj = obj || {}; + + beforeAnim = function() { + var el = Ext.fly(dom, '_anim'), + animScope = this, + box, + proxy, proxyAnim; + + el.show(); + box = el.getBox(); + proxy = Ext.getBody().createChild({ + id: el.dom.id + '-anim-proxy', + style: { + position : 'absolute', + 'pointer-events': 'none', + 'z-index': 35000, + border : '0px solid ' + color + } + }); + + proxyAnim = new Ext.fx.Anim({ + target: proxy, + duration: obj.duration || 1000, + iterations: count, + from: { + top: box.y, + left: box.x, + borderWidth: 0, + opacity: 1, + height: box.height, + width: box.width + }, + to: { + top: box.y - 20, + left: box.x - 20, + borderWidth: 10, + opacity: 0, + height: box.height + 40, + width: box.width + 40 + } + }); + proxyAnim.on('afteranimate', function() { + proxy.remove(); + + animScope.end(); + }); + }; + + me.animate({ + + duration: (Math.max(obj.duration, 500) * 2) || 2000, + listeners: { + beforeanimate: { + fn: beforeAnim + } + } + }); + return me; + }, + + + ghost: function(anchor, obj) { + var me = this, + dom = me.dom, + beforeAnim; + + anchor = anchor || "b"; + beforeAnim = function() { + var el = Ext.fly(dom, '_anim'), + width = el.getWidth(), + height = el.getHeight(), + xy = el.getXY(), + position = el.getPositioning(), + to = { + opacity: 0 + }; + switch (anchor) { + case 't': + to.y = xy[1] - height; + break; + case 'l': + to.x = xy[0] - width; + break; + case 'r': + to.x = xy[0] + width; + break; + case 'b': + to.y = xy[1] + height; + break; + case 'tl': + to.x = xy[0] - width; + to.y = xy[1] - height; + break; + case 'bl': + to.x = xy[0] - width; + to.y = xy[1] + height; + break; + case 'br': + to.x = xy[0] + width; + to.y = xy[1] + height; + break; + case 'tr': + to.x = xy[0] + width; + to.y = xy[1] - height; + break; + } + this.to = to; + this.on('afteranimate', function () { + var el = Ext.fly(dom, '_anim'); + if (el) { + el.hide(); + el.clearOpacity(); + el.setPositioning(position); + } + }); + }; + + me.animate(Ext.applyIf(obj || {}, { + duration: 500, + easing: 'ease-out', + listeners: { + beforeanimate: beforeAnim + } + })); + return me; + }, + + + highlight: function(color, o) { + var me = this, + dom = me.dom, + from = {}, + restore, to, attr, lns, event, fn; + + + if (dom.tagName.match(me.tableTagRe)) { + return me.select('div').highlight(color, o); + } + + o = o || {}; + lns = o.listeners || {}; + attr = o.attr || 'backgroundColor'; + from[attr] = color || 'ffff9c'; + + if (!o.to) { + to = {}; + to[attr] = o.endColor || me.getColor(attr, 'ffffff', ''); + } + else { + to = o.to; + } + + + o.listeners = Ext.apply(Ext.apply({}, lns), { + beforeanimate: function() { + restore = dom.style[attr]; + var el = Ext.fly(dom, '_anim'); + el.clearOpacity(); + el.show(); + + event = lns.beforeanimate; + if (event) { + fn = event.fn || event; + return fn.apply(event.scope || lns.scope || window, arguments); + } + }, + afteranimate: function() { + if (dom) { + dom.style[attr] = restore; + } + + event = lns.afteranimate; + if (event) { + fn = event.fn || event; + fn.apply(event.scope || lns.scope || window, arguments); + } + } + }); + + me.animate(Ext.apply({}, o, { + duration: 1000, + easing: 'ease-in', + from: from, + to: to + })); + return me; + }, + + + pause: function(ms) { + var me = this; + Ext.fx.Manager.setFxDefaults(me.id, { + delay: ms + }); + return me; + }, + + + fadeIn: function(o) { + var me = this, + dom = me.dom; + + me.animate(Ext.apply({}, o, { + opacity: 1, + internalListeners: { + beforeanimate: function(anim){ + + + var el = Ext.fly(dom, '_anim'); + if (el.isStyle('display', 'none')) { + el.setDisplayed(''); + } else { + el.show(); + } + } + } + })); + return this; + }, + + + fadeOut: function(o) { + var me = this, + dom = me.dom; + + o = Ext.apply({ + opacity: 0, + internalListeners: { + afteranimate: function(anim){ + if (dom && anim.to.opacity === 0) { + var el = Ext.fly(dom, '_anim'); + if (o.useDisplay) { + el.setDisplayed(false); + } else { + el.hide(); + } + } + } + } + }, o); + me.animate(o); + return me; + }, + + + scale: function(w, h, o) { + this.animate(Ext.apply({}, o, { + width: w, + height: h + })); + return this; + }, + + + shift: function(config) { + this.animate(config); + return this; + }, + + + anchorAnimX: function(anchor) { + var xName = (anchor === 'l') ? 'right' : 'left'; + this.dom.style[xName] = '0px'; + } +}); + +//@tag dom,core + + +Ext.define('Ext.dom.Element_dd', { + override: 'Ext.dom.Element', + + + initDD : function(group, config, overrides){ + var dd = new Ext.dd.DD(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + + initDDProxy : function(group, config, overrides){ + var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + + initDDTarget : function(group, config, overrides){ + var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + } +}); + +//@tag dom,core + + +Ext.define('Ext.dom.Element_fx', { + override: 'Ext.dom.Element' +}, +function() { + +var Element = Ext.dom.Element, + VISIBILITY = "visibility", + DISPLAY = "display", + NONE = "none", + HIDDEN = 'hidden', + VISIBLE = 'visible', + OFFSETS = "offsets", + ASCLASS = "asclass", + NOSIZE = 'nosize', + ORIGINALDISPLAY = 'originalDisplay', + VISMODE = 'visibilityMode', + ISVISIBLE = 'isVisible', + OFFSETCLASS = Ext.baseCSSPrefix + 'hide-offsets', + getDisplay = function(el) { + var data = (el.$cache || el.getCache()).data, + display = data[ORIGINALDISPLAY]; + + if (display === undefined) { + data[ORIGINALDISPLAY] = display = ''; + } + return display; + }, + getVisMode = function(el){ + var data = (el.$cache || el.getCache()).data, + visMode = data[VISMODE]; + + if (visMode === undefined) { + data[VISMODE] = visMode = Element.VISIBILITY; + } + return visMode; + }; + +Element.override({ + + originalDisplay : "", + visibilityMode : 1, + + + setVisible : function(visible, animate) { + var me = this, + dom = me.dom, + visMode = getVisMode(me); + + + if (typeof animate == 'string') { + switch (animate) { + case DISPLAY: + visMode = Element.DISPLAY; + break; + case VISIBILITY: + visMode = Element.VISIBILITY; + break; + case OFFSETS: + visMode = Element.OFFSETS; + break; + case NOSIZE: + case ASCLASS: + visMode = Element.ASCLASS; + break; + } + me.setVisibilityMode(visMode); + animate = false; + } + + if (!animate || !me.anim) { + if (visMode == Element.DISPLAY) { + return me.setDisplayed(visible); + } else if (visMode == Element.OFFSETS) { + me[visible?'removeCls':'addCls'](OFFSETCLASS); + } else if (visMode == Element.VISIBILITY) { + me.fixDisplay(); + + dom.style.visibility = visible ? '' : HIDDEN; + } else if (visMode == Element.ASCLASS) { + me[visible?'removeCls':'addCls'](me.visibilityCls || Element.visibilityCls); + } + } else { + + if (visible) { + me.setOpacity(0.01); + me.setVisible(true); + } + if (!Ext.isObject(animate)) { + animate = { + duration: 350, + easing: 'ease-in' + }; + } + me.animate(Ext.applyIf({ + callback: function() { + if (!visible) { + + + Ext.fly(dom, '_internal').setVisible(false).setOpacity(1); + } + }, + to: { + opacity: (visible) ? 1 : 0 + } + }, animate)); + } + (me.$cache || me.getCache()).data[ISVISIBLE] = visible; + return me; + }, + + + hasMetrics : function(){ + var visMode = getVisMode(this); + return this.isVisible() || (visMode == Element.OFFSETS) || (visMode == Element.VISIBILITY); + }, + + + toggle : function(animate){ + var me = this; + me.setVisible(!me.isVisible(), me.anim(animate)); + return me; + }, + + + setDisplayed : function(value) { + if(typeof value == "boolean"){ + value = value ? getDisplay(this) : NONE; + } + this.setStyle(DISPLAY, value); + return this; + }, + + + fixDisplay : function(){ + var me = this; + if (me.isStyle(DISPLAY, NONE)) { + me.setStyle(VISIBILITY, HIDDEN); + me.setStyle(DISPLAY, getDisplay(me)); + if (me.isStyle(DISPLAY, NONE)) { + me.setStyle(DISPLAY, "block"); + } + } + }, + + + hide : function(animate){ + + if (typeof animate == 'string'){ + this.setVisible(false, animate); + return this; + } + this.setVisible(false, this.anim(animate)); + return this; + }, + + + show : function(animate){ + + if (typeof animate == 'string'){ + this.setVisible(true, animate); + return this; + } + this.setVisible(true, this.anim(animate)); + return this; + } +}); + +}); + +//@tag dom,core + + +Ext.define('Ext.dom.Element_position', { + override: 'Ext.dom.Element' +}, +function() { + +var flyInstance, + Element = this, + LEFT = "left", + RIGHT = "right", + TOP = "top", + BOTTOM = "bottom", + POSITION = "position", + STATIC = "static", + RELATIVE = "relative", + ZINDEX = "z-index", + BODY = 'BODY', + + PADDING = 'padding', + BORDER = 'border', + SLEFT = '-left', + SRIGHT = '-right', + STOP = '-top', + SBOTTOM = '-bottom', + SWIDTH = '-width', + + borders = {l: BORDER + SLEFT + SWIDTH, r: BORDER + SRIGHT + SWIDTH, t: BORDER + STOP + SWIDTH, b: BORDER + SBOTTOM + SWIDTH}, + paddings = {l: PADDING + SLEFT, r: PADDING + SRIGHT, t: PADDING + STOP, b: PADDING + SBOTTOM}, + paddingsTLRB = [paddings.l, paddings.r, paddings.t, paddings.b], + bordersTLRB = [borders.l, borders.r, borders.t, borders.b], + round = Math.round, + doc = document, + fly = function (el) { + if (!flyInstance) { + flyInstance = new Ext.Element.Fly(); + } + flyInstance.attach(el); + return flyInstance; + }; + + Element.override({ + + pxRe: /^\d+(?:\.\d*)?px$/i, + + inheritableStatics: { + getX: function(el) { + return Element.getXY(el)[0]; + }, + + getXY: function(el) { + var bd = doc.body, + docEl = doc.documentElement, + leftBorder = 0, + topBorder = 0, + ret = [0,0], + box, + scroll; + + el = Ext.getDom(el); + + if(el != doc && el != bd){ + + + if (Ext.isIE) { + try { + box = el.getBoundingClientRect(); + + + topBorder = docEl.clientTop || bd.clientTop; + leftBorder = docEl.clientLeft || bd.clientLeft; + } catch (ex) { + box = { left: 0, top: 0 }; + } + } else { + box = el.getBoundingClientRect(); + } + + scroll = fly(doc).getScroll(); + ret = [ + round(box.left + scroll.left - leftBorder), + round(box.top + scroll.top - topBorder) + ]; + } + return ret; + }, + + getY: function(el) { + return Element.getXY(el)[1]; + }, + + setX: function(el, x) { + Element.setXY(el, [x, false]); + }, + + setXY: function(el, xy) { + (el = Ext.fly(el, '_setXY')).position(); + + var pts = el.translatePoints(xy), + style = el.dom.style, + pos; + + + + style.right = 'auto'; + for (pos in pts) { + if (!isNaN(pts[pos])) { + style[pos] = pts[pos] + "px"; + } + } + }, + + setY: function(el, y) { + Element.setXY(el, [false, y]); + } + }, + + + center: function(centerIn){ + return this.alignTo(centerIn || doc, 'c-c'); + }, + + + clearPositioning: function(value) { + value = value || ''; + return this.setStyle({ + left : value, + right : value, + top : value, + bottom : value, + 'z-index' : '', + position : STATIC + }); + }, + + getAnchorToXY: function(el, anchor, local, mySize) { + return el.getAnchorXY(anchor, local, mySize); + }, + + + getBottom: function(local) { + return (local ? this.getLocalY() : this.getY()) + this.getHeight(); + }, + + getBorderPadding: function() { + var paddingWidth = this.getStyle(paddingsTLRB), + bordersWidth = this.getStyle(bordersTLRB); + + return { + beforeX: (parseFloat(bordersWidth[borders.l]) || 0) + (parseFloat(paddingWidth[paddings.l]) || 0), + afterX: (parseFloat(bordersWidth[borders.r]) || 0) + (parseFloat(paddingWidth[paddings.r]) || 0), + beforeY: (parseFloat(bordersWidth[borders.t]) || 0) + (parseFloat(paddingWidth[paddings.t]) || 0), + afterY: (parseFloat(bordersWidth[borders.b]) || 0) + (parseFloat(paddingWidth[paddings.b]) || 0) + }; + }, + + + getCenterXY: function(){ + return this.getAlignToXY(doc, 'c-c'); + }, + + + getLeft: function(local) { + return local ? this.getLocalX() : this.getX(); + }, + + + getLocalX: function() { + var me = this, + offsetParent = me.dom.offsetParent, + x = me.getStyle('left'); + + if (!x || x === 'auto') { + x = 0; + } else if (me.pxRe.test(x)) { + x = parseFloat(x); + } else { + x = me.getX(); + if (offsetParent) { + x -= Element.getX(offsetParent); + } + } + + return x; + }, + + + getLocalXY: function() { + var me = this, + offsetParent = me.dom.offsetParent, + style = me.getStyle(['left', 'top']), + x = style.left, + y = style.top; + + if (!x || x === 'auto') { + x = 0; + } else if (me.pxRe.test(x)) { + x = parseFloat(x); + } else { + x = me.getX(); + if (offsetParent) { + x -= Element.getX(offsetParent); + } + } + + if (!y || y === 'auto') { + y = 0; + } else if (me.pxRe.test(y)) { + y = parseFloat(y); + } else { + y = me.getY(); + if (offsetParent) { + y -= Element.getY(offsetParent); + } + } + + return [x, y]; + }, + + + getLocalY: function() { + var me = this, + offsetParent = me.dom.offsetParent, + y = me.getStyle('top'); + + if (!y || y === 'auto') { + y = 0; + } else if (me.pxRe.test(y)) { + y = parseFloat(y); + } else { + y = me.getY(); + if (offsetParent) { + y -= Element.getY(offsetParent); + } + } + + return y; + }, + + + getPageBox: function(getRegion) { + var me = this, + dom = me.dom, + isDoc = dom.nodeName == BODY, + w = isDoc ? Ext.Element.getViewWidth() : dom.offsetWidth, + h = isDoc ? Ext.Element.getViewHeight() : dom.offsetHeight, + xy = me.getXY(), + t = xy[1], + r = xy[0] + w, + b = xy[1] + h, + l = xy[0]; + + if (getRegion) { + return new Ext.util.Region(t, r, b, l); + } + else { + return { + left: l, + top: t, + width: w, + height: h, + right: r, + bottom: b + }; + } + }, + + + getPositioning: function(autoPx){ + var styles = this.getStyle(['left', 'top', 'position', 'z-index']), + dom = this.dom; + + if(autoPx) { + if(styles.left === 'auto') { + styles.left = dom.offsetLeft + 'px'; + } + if(styles.top === 'auto') { + styles.top = dom.offsetTop + 'px'; + } + } + + return styles; + }, + + + getRight: function(local) { + return (local ? this.getLocalX() : this.getX()) + this.getWidth(); + }, + + + getTop: function(local) { + return local ? this.getLocalY() : this.getY(); + }, + + + getX: function() { + return Element.getX(this.dom); + }, + + + getXY: function() { + return Element.getXY(this.dom); + }, + + + getY: function() { + return Element.getY(this.dom); + }, + + + moveTo: function(x, y, animate) { + return this.setXY([x, y], animate); + }, + + + position: function(pos, zIndex, x, y) { + var me = this; + + if (!pos && me.isStyle(POSITION, STATIC)) { + me.setStyle(POSITION, RELATIVE); + } else if (pos) { + me.setStyle(POSITION, pos); + } + if (zIndex) { + me.setStyle(ZINDEX, zIndex); + } + if (x || y) { + me.setXY([x || false, y || false]); + } + }, + + + setBottom: function(bottom) { + this.dom.style[BOTTOM] = this.addUnits(bottom); + return this; + }, + + + setBounds: function(x, y, width, height, animate) { + return this.setBox({ + x: x, + y: y, + width: width, + height: height + }, animate); + }, + + + setLeft: function(left) { + this.dom.style[LEFT] = this.addUnits(left); + return this; + }, + + + setLeftTop: function(left, top) { + var me = this, + style = me.dom.style; + + style.left = me.addUnits(left); + style.top = me.addUnits(top); + + return me; + }, + + setLocalX: function(x) { + var style = this.dom.style; + + + style.right = 'auto'; + style.left = (x === null) ? 'auto' : x + 'px'; + }, + + setLocalXY: function(x, y) { + var style = this.dom.style; + + + style.right = 'auto'; + + if (x && x.length) { + y = x[1]; + x = x[0]; + } + + if (x === null) { + style.left = 'auto'; + } else if (x !== undefined) { + style.left = x + 'px'; + } + + if (y === null) { + style.top = 'auto'; + } else if (y !== undefined) { + style.top = y + 'px'; + } + }, + + setLocalY: function(y) { + this.dom.style.top = (y === null) ? 'auto' : y + 'px'; + }, + + + setLocation: function(x, y, animate) { + return this.setXY([x, y], animate); + }, + + + setPositioning: function(pc) { + return this.setStyle(pc); + }, + + + setRight: function(right) { + this.dom.style[RIGHT] = this.addUnits(right); + return this; + }, + + + setTop: function(top) { + this.dom.style[TOP] = this.addUnits(top); + return this; + }, + + setX: function(x, animate) { + return this.setXY([x, this.getY()], animate); + }, + + setXY: function(xy, animate) { + var me = this; + + if (!animate || !me.anim) { + Element.setXY(me.dom, xy); + } else { + if (!Ext.isObject(animate)) { + animate = {}; + } + me.animate(Ext.applyIf({ to: { x: xy[0], y: xy[1] } }, animate)); + } + return this; + }, + + setY: function(y, animate) { + return this.setXY([this.getX(), y], animate); + } + }); + + + Element.getTrueXY = Element.getXY; + +}); + +//@tag dom,core + + +Ext.define('Ext.dom.Element_scroll', { + override: 'Ext.dom.Element', + + + isScrollable: function() { + var dom = this.dom; + return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth; + }, + + + getScroll: function() { + var me = this, + dom = me.dom, + doc = document, + body = doc.body, + docElement = doc.documentElement, + left, top; + + if (dom === doc || dom === body) { + + + + + + + + + left = docElement.scrollLeft || (body ? body.scrollLeft : 0); + top = docElement.scrollTop || (body ? body.scrollTop : 0); + } else { + left = dom.scrollLeft; + top = dom.scrollTop; + } + + return { + left: left, + top: top + }; + }, + + + getScrollLeft: function() { + var dom = this.dom, + doc = document; + + if (dom === doc || dom === doc.body) { + return this.getScroll().left; + } else { + return dom.scrollLeft; + } + }, + + + getScrollTop: function(){ + var dom = this.dom, + doc = document; + + if (dom === doc || dom === doc.body) { + return this.getScroll().top; + } else { + return dom.scrollTop; + } + }, + + + setScrollLeft: function(left){ + this.dom.scrollLeft = this.normalizeScrollLeft(left); + return this; + }, + + + normalizeScrollLeft: Ext.identityFn, + + + setScrollTop: function(top) { + this.dom.scrollTop = top; + return this; + }, + + + scrollBy: function(deltaX, deltaY, animate) { + var me = this, + dom = me.dom; + + + if (deltaX.length) { + animate = deltaY; + deltaY = deltaX[1]; + deltaX = deltaX[0]; + } else if (typeof deltaX != 'number') { + animate = deltaY; + deltaY = deltaX.y; + deltaX = deltaX.x; + } + + if (deltaX) { + me.scrollTo('left', Math.max(Math.min(me.getScrollLeft() + deltaX, dom.scrollWidth - dom.clientWidth), 0), animate); + } + if (deltaY) { + me.scrollTo('top', Math.max(Math.min(dom.scrollTop + deltaY, dom.scrollHeight - dom.clientHeight), 0), animate); + } + + return me; + }, + + + scrollTo: function(side, value, animate) { + + var top = /top/i.test(side), + prop = 'scroll' + (top ? 'Top' : 'Left'), + me = this, + dom = me.dom, + animCfg, + prop; + + if (!top) { + value = me.normalizeScrollLeft(value); + } + if (!animate || !me.anim) { + + dom[prop] = value; + + dom[prop] = value; + } + else { + animCfg = { + to: {} + }; + animCfg.to[prop] = value; + if (Ext.isObject(animate)) { + Ext.applyIf(animCfg, animate); + } + me.animate(animCfg); + } + return me; + }, + + + scrollIntoView: function(container, hscroll, animate) { + var me = this, + dom = me.dom, + offsets = me.getOffsetsTo(container = Ext.getDom(container) || Ext.getBody().dom), + + left = offsets[0] + container.scrollLeft, + top = offsets[1] + container.scrollTop, + bottom = top + dom.offsetHeight, + right = left + dom.offsetWidth, + + ctClientHeight = container.clientHeight, + ctScrollTop = parseInt(container.scrollTop, 10), + ctScrollLeft = parseInt(container.scrollLeft, 10), + ctBottom = ctScrollTop + ctClientHeight, + ctRight = ctScrollLeft + container.clientWidth, + newPos; + + + if (animate) { + animate = Ext.apply({ + listeners: { + afteranimate: function() { + me.scrollChildFly.attach(dom).highlight(); + } + } + }, animate); + } + + if (dom.offsetHeight > ctClientHeight || top < ctScrollTop) { + newPos = top; + } else if (bottom > ctBottom) { + newPos = bottom - ctClientHeight; + } + if (newPos != null) { + me.scrollChildFly.attach(container).scrollTo('top', newPos, animate); + } + + if (hscroll !== false) { + newPos = null; + if (dom.offsetWidth > container.clientWidth || left < ctScrollLeft) { + newPos = left; + } else if (right > ctRight) { + newPos = right - container.clientWidth; + } + if (newPos != null) { + me.scrollChildFly.attach(container).scrollTo('left', newPos, animate); + } + } + return me; + }, + + + scrollChildIntoView: function(child, hscroll) { + this.scrollChildFly.attach(Ext.getDom(child)).scrollIntoView(this, hscroll); + }, + + + scroll: function(direction, distance, animate) { + if (!this.isScrollable()) { + return false; + } + var el = this.dom, + l = el.scrollLeft, t = el.scrollTop, + w = el.scrollWidth, h = el.scrollHeight, + cw = el.clientWidth, ch = el.clientHeight, + scrolled = false, v, + hash = { + l: Math.min(l + distance, w - cw), + r: v = Math.max(l - distance, 0), + t: Math.max(t - distance, 0), + b: Math.min(t + distance, h - ch) + }; + + hash.d = hash.b; + hash.u = hash.t; + + direction = direction.substr(0, 1); + if ((v = hash[direction]) > -1) { + scrolled = true; + this.scrollTo(direction == 'l' || direction == 'r' ? 'left' : 'top', v, this.anim(animate)); + } + return scrolled; + } +}, function() { + this.prototype.scrollChildFly = new this.Fly(); + this.prototype.scrolltoFly = new this.Fly(); +}); + +//@tag dom,core + + +Ext.define('Ext.dom.Element_style', { + override: 'Ext.dom.Element' +}, +function() { + +var Element = this, + view = document.defaultView, + adjustDirect2DTableRe = /table-row|table-.*-group/, + INTERNAL = '_internal', + HIDDEN = 'hidden', + HEIGHT = 'height', + WIDTH = 'width', + ISCLIPPED = 'isClipped', + OVERFLOW = 'overflow', + OVERFLOWX = 'overflow-x', + OVERFLOWY = 'overflow-y', + ORIGINALCLIP = 'originalClip', + DOCORBODYRE = /#document|body/i, + + + styleHooks, verticalStyleHooks90, verticalStyleHooks270, + edges, k, edge, borderWidth; + +if (!view || !view.getComputedStyle) { + Element.prototype.getStyle = function (property, inline) { + var me = this, + dom = me.dom, + multiple = typeof property != 'string', + hooks = me.styleHooks, + prop = property, + props = prop, + len = 1, + isInline = inline, + camel, domStyle, values, hook, out, style, i; + + if (multiple) { + values = {}; + prop = props[0]; + i = 0; + if (!(len = props.length)) { + return values; + } + } + + if (!dom || dom.documentElement) { + return values || ''; + } + + domStyle = dom.style; + + if (inline) { + style = domStyle; + } else { + style = dom.currentStyle; + + + if (!style) { + isInline = true; + style = domStyle; + } + } + + do { + hook = hooks[prop]; + + if (!hook) { + hooks[prop] = hook = { name: Element.normalize(prop) }; + } + + if (hook.get) { + out = hook.get(dom, me, isInline, style); + } else { + camel = hook.name; + + + + + + if (hook.canThrow) { + try { + out = style[camel]; + } catch (e) { + out = ''; + } + } else { + + + out = style ? style[camel] : ''; + } + } + + if (!multiple) { + return out; + } + + values[prop] = out; + prop = props[++i]; + } while (i < len); + + return values; + }; +} + +Element.override({ + getHeight: function(contentHeight, preciseHeight) { + var me = this, + hidden = me.isStyle('display', 'none'), + height, + floating; + + if (hidden) { + return 0; + } + + height = me.dom.offsetHeight; + + + if (Ext.supports.Direct2DBug) { + floating = me.adjustDirect2DDimension(HEIGHT); + if (preciseHeight) { + height += floating; + } + else if (floating > 0 && floating < 0.5) { + height++; + } + } + + if (contentHeight) { + height -= me.getBorderWidth("tb") + me.getPadding("tb"); + } + + return (height < 0) ? 0 : height; + }, + + getWidth: function(contentWidth, preciseWidth) { + var me = this, + dom = me.dom, + hidden = me.isStyle('display', 'none'), + rect, width, floating; + + if (hidden) { + return 0; + } + + + + + + + + if (preciseWidth && Ext.supports.BoundingClientRect) { + rect = dom.getBoundingClientRect(); + + + + + width = (me.vertical && !Ext.isIE9 && !Ext.supports.RotatedBoundingClientRect) ? + (rect.bottom - rect.top) : (rect.right - rect.left); + } else { + width = dom.offsetWidth; + } + + + + + if (Ext.supports.Direct2DBug && !me.vertical) { + + floating = me.adjustDirect2DDimension(WIDTH); + if (preciseWidth) { + width += floating; + } + + + + else if (floating > 0 && floating < 0.5) { + width++; + } + } + + if (contentWidth) { + width -= me.getBorderWidth("lr") + me.getPadding("lr"); + } + + return (width < 0) ? 0 : width; + }, + + setWidth: function(width, animate) { + var me = this; + width = me.adjustWidth(width); + if (!animate || !me.anim) { + me.dom.style.width = me.addUnits(width); + } + else { + if (!Ext.isObject(animate)) { + animate = {}; + } + me.animate(Ext.applyIf({ + to: { + width: width + } + }, animate)); + } + return me; + }, + + setHeight : function(height, animate) { + var me = this; + + height = me.adjustHeight(height); + if (!animate || !me.anim) { + me.dom.style.height = me.addUnits(height); + } + else { + if (!Ext.isObject(animate)) { + animate = {}; + } + me.animate(Ext.applyIf({ + to: { + height: height + } + }, animate)); + } + + return me; + }, + + applyStyles: function(style) { + Ext.DomHelper.applyStyles(this.dom, style); + return this; + }, + + setSize: function(width, height, animate) { + var me = this; + + if (Ext.isObject(width)) { + animate = height; + height = width.height; + width = width.width; + } + + width = me.adjustWidth(width); + height = me.adjustHeight(height); + + if (!animate || !me.anim) { + me.dom.style.width = me.addUnits(width); + me.dom.style.height = me.addUnits(height); + } + else { + if (animate === true) { + animate = {}; + } + me.animate(Ext.applyIf({ + to: { + width: width, + height: height + } + }, animate)); + } + + return me; + }, + + getViewSize : function() { + var me = this, + dom = me.dom, + isDoc = DOCORBODYRE.test(dom.nodeName), + ret; + + + if (isDoc) { + ret = { + width : Element.getViewWidth(), + height : Element.getViewHeight() + }; + } else { + ret = { + width : dom.clientWidth, + height : dom.clientHeight + }; + } + + return ret; + }, + + getSize: function(contentSize) { + return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)}; + }, + + + + + adjustWidth : function(width) { + var me = this, + isNum = (typeof width == 'number'); + + if (isNum && me.autoBoxAdjust && !me.isBorderBox()) { + width -= (me.getBorderWidth("lr") + me.getPadding("lr")); + } + return (isNum && width < 0) ? 0 : width; + }, + + + adjustHeight : function(height) { + var me = this, + isNum = (typeof height == "number"); + + if (isNum && me.autoBoxAdjust && !me.isBorderBox()) { + height -= (me.getBorderWidth("tb") + me.getPadding("tb")); + } + return (isNum && height < 0) ? 0 : height; + }, + + + getColor : function(attr, defaultValue, prefix) { + var v = this.getStyle(attr), + color = prefix || prefix === '' ? prefix : '#', + h, len, i=0; + + if (!v || (/transparent|inherit/.test(v))) { + return defaultValue; + } + if (/^r/.test(v)) { + v = v.slice(4, v.length - 1).split(','); + len = v.length; + for (; i 5 ? color.toLowerCase() : defaultValue); + }, + + + setOpacity: function(opacity, animate) { + var me = this; + + if (!me.dom) { + return me; + } + + if (!animate || !me.anim) { + me.setStyle('opacity', opacity); + } + else { + if (typeof animate != 'object') { + animate = { + duration: 350, + easing: 'ease-in' + }; + } + + me.animate(Ext.applyIf({ + to: { + opacity: opacity + } + }, animate)); + } + return me; + }, + + + clearOpacity : function() { + return this.setOpacity(''); + }, + + + adjustDirect2DDimension: function(dimension) { + var me = this, + dom = me.dom, + display = me.getStyle('display'), + inlineDisplay = dom.style.display, + inlinePosition = dom.style.position, + originIndex = dimension === WIDTH ? 0 : 1, + currentStyle = dom.currentStyle, + floating; + + if (display === 'inline') { + dom.style.display = 'inline-block'; + } + + dom.style.position = display.match(adjustDirect2DTableRe) ? 'absolute' : 'static'; + + + + + + + floating = (parseFloat(currentStyle[dimension]) || parseFloat(currentStyle.msTransformOrigin.split(' ')[originIndex]) * 2) % 1; + + dom.style.position = inlinePosition; + + if (display === 'inline') { + dom.style.display = inlineDisplay; + } + + return floating; + }, + + + clip : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + style; + + if (!data[ISCLIPPED]) { + data[ISCLIPPED] = true; + style = me.getStyle([OVERFLOW, OVERFLOWX, OVERFLOWY]); + data[ORIGINALCLIP] = { + o: style[OVERFLOW], + x: style[OVERFLOWX], + y: style[OVERFLOWY] + }; + me.setStyle(OVERFLOW, HIDDEN); + me.setStyle(OVERFLOWX, HIDDEN); + me.setStyle(OVERFLOWY, HIDDEN); + } + return me; + }, + + + unclip : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + clip; + + if (data[ISCLIPPED]) { + data[ISCLIPPED] = false; + clip = data[ORIGINALCLIP]; + if (clip.o) { + me.setStyle(OVERFLOW, clip.o); + } + if (clip.x) { + me.setStyle(OVERFLOWX, clip.x); + } + if (clip.y) { + me.setStyle(OVERFLOWY, clip.y); + } + } + return me; + }, + + + boxWrap : function(cls) { + cls = cls || Ext.baseCSSPrefix + 'box'; + var el = Ext.get(this.insertHtml("beforeBegin", "
    " + Ext.String.format(Element.boxMarkup, cls) + "
    ")); + Ext.DomQuery.selectNode('.' + cls + '-mc', el.dom).appendChild(this.dom); + return el; + }, + + + getComputedHeight : function() { + var me = this, + h = Math.max(me.dom.offsetHeight, me.dom.clientHeight); + if (!h) { + h = parseFloat(me.getStyle(HEIGHT)) || 0; + if (!me.isBorderBox()) { + h += me.getFrameWidth('tb'); + } + } + return h; + }, + + + getComputedWidth : function() { + var me = this, + w = Math.max(me.dom.offsetWidth, me.dom.clientWidth); + + if (!w) { + w = parseFloat(me.getStyle(WIDTH)) || 0; + if (!me.isBorderBox()) { + w += me.getFrameWidth('lr'); + } + } + return w; + }, + + + getFrameWidth : function(sides, onlyContentBox) { + return (onlyContentBox && this.isBorderBox()) ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides)); + }, + + + addClsOnOver : function(className, testFn, scope) { + var me = this, + dom = me.dom, + hasTest = Ext.isFunction(testFn); + + me.hover( + function() { + if (hasTest && testFn.call(scope || me, me) === false) { + return; + } + Ext.fly(dom, INTERNAL).addCls(className); + }, + function() { + Ext.fly(dom, INTERNAL).removeCls(className); + } + ); + return me; + }, + + + addClsOnFocus : function(className, testFn, scope) { + var me = this, + dom = me.dom, + hasTest = Ext.isFunction(testFn); + + me.on("focus", function() { + if (hasTest && testFn.call(scope || me, me) === false) { + return false; + } + Ext.fly(dom, INTERNAL).addCls(className); + }); + me.on("blur", function() { + Ext.fly(dom, INTERNAL).removeCls(className); + }); + return me; + }, + + + addClsOnClick : function(className, testFn, scope) { + var me = this, + dom = me.dom, + hasTest = Ext.isFunction(testFn); + + me.on("mousedown", function() { + if (hasTest && testFn.call(scope || me, me) === false) { + return false; + } + Ext.fly(dom, INTERNAL).addCls(className); + var d = Ext.getDoc(), + fn = function() { + Ext.fly(dom, INTERNAL).removeCls(className); + d.removeListener("mouseup", fn); + }; + d.on("mouseup", fn); + }); + return me; + }, + + + getStyleSize : function() { + var me = this, + d = this.dom, + isDoc = DOCORBODYRE.test(d.nodeName), + s , + w, h; + + + if (isDoc) { + return { + width : Element.getViewWidth(), + height : Element.getViewHeight() + }; + } + + s = me.getStyle([HEIGHT, WIDTH], true); + + if (s.width && s.width != 'auto') { + w = parseFloat(s.width); + if (me.isBorderBox()) { + w -= me.getFrameWidth('lr'); + } + } + + if (s.height && s.height != 'auto') { + h = parseFloat(s.height); + if (me.isBorderBox()) { + h -= me.getFrameWidth('tb'); + } + } + + return {width: w || me.getWidth(true), height: h || me.getHeight(true)}; + }, + + statics: { + selectableCls: Ext.baseCSSPrefix + 'selectable', + unselectableCls: Ext.baseCSSPrefix + 'unselectable' + }, + + + selectable : function() { + var me = this; + + + + me.dom.unselectable = ''; + + me.removeCls(Element.unselectableCls); + me.addCls(Element.selectableCls); + + return me; + }, + + + unselectable : function() { + + + + + + + + var me = this; + + + + + + + if (Ext.isOpera) { + me.dom.unselectable = 'on'; + } + + + + + + + + + + + me.removeCls(Element.selectableCls); + me.addCls(Element.unselectableCls); + + return me; + }, + + + setVertical: function(angle, cls) { + var me = this, + proto = Element.prototype, + hooks; + + me.vertical = true; + if (cls) { + me.addCls(me.verticalCls = cls); + } + + me.setWidth = proto.setHeight; + me.setHeight = proto.setWidth; + if (!Ext.isIE9m) { + + + + + me.getWidth = proto.getHeight; + me.getHeight = proto.getWidth; + } + + + me.styleHooks = (angle === 270) ? + Element.prototype.verticalStyleHooks270 : Element.prototype.verticalStyleHooks90; + }, + + + setHorizontal: function() { + var me = this, + cls = me.verticalCls; + + delete me.vertical; + if (cls) { + delete me.verticalCls; + me.removeCls(cls); + } + + + delete me.setWidth; + delete me.setHeight; + if (!Ext.isIE9m) { + delete me.getWidth; + delete me.getHeight; + } + + + delete me.styleHooks; + } +}); + +Element.prototype.styleHooks = styleHooks = Ext.dom.AbstractElement.prototype.styleHooks; + + + +Element.prototype.verticalStyleHooks90 = verticalStyleHooks90 = Ext.Object.chain(Element.prototype.styleHooks); +Element.prototype.verticalStyleHooks270 = verticalStyleHooks270 = Ext.Object.chain(Element.prototype.styleHooks); + +verticalStyleHooks90.width = { name: 'height' }; +verticalStyleHooks90.height = { name: 'width' }; +verticalStyleHooks90['margin-top'] = { name: 'marginLeft' }; +verticalStyleHooks90['margin-right'] = { name: 'marginTop' }; +verticalStyleHooks90['margin-bottom'] = { name: 'marginRight' }; +verticalStyleHooks90['margin-left'] = { name: 'marginBottom' }; +verticalStyleHooks90['padding-top'] = { name: 'paddingLeft' }; +verticalStyleHooks90['padding-right'] = { name: 'paddingTop' }; +verticalStyleHooks90['padding-bottom'] = { name: 'paddingRight' }; +verticalStyleHooks90['padding-left'] = { name: 'paddingBottom' }; +verticalStyleHooks90['border-top'] = { name: 'borderLeft' }; +verticalStyleHooks90['border-right'] = { name: 'borderTop' }; +verticalStyleHooks90['border-bottom'] = { name: 'borderRight' }; +verticalStyleHooks90['border-left'] = { name: 'borderBottom' }; + +verticalStyleHooks270.width = { name: 'height' }; +verticalStyleHooks270.height = { name: 'width' }; +verticalStyleHooks270['margin-top'] = { name: 'marginRight' }; +verticalStyleHooks270['margin-right'] = { name: 'marginBottom' }; +verticalStyleHooks270['margin-bottom'] = { name: 'marginLeft' }; +verticalStyleHooks270['margin-left'] = { name: 'marginTop' }; +verticalStyleHooks270['padding-top'] = { name: 'paddingRight' }; +verticalStyleHooks270['padding-right'] = { name: 'paddingBottom' }; +verticalStyleHooks270['padding-bottom'] = { name: 'paddingLeft' }; +verticalStyleHooks270['padding-left'] = { name: 'paddingTop' }; +verticalStyleHooks270['border-top'] = { name: 'borderRight' }; +verticalStyleHooks270['border-right'] = { name: 'borderBottom' }; +verticalStyleHooks270['border-bottom'] = { name: 'borderLeft' }; +verticalStyleHooks270['border-left'] = { name: 'borderTop' }; + +if (Ext.isIE7m) { + styleHooks.fontSize = styleHooks['font-size'] = { + name: 'fontSize', + canThrow: true + }; + + styleHooks.fontStyle = styleHooks['font-style'] = { + name: 'fontStyle', + canThrow: true + }; + + styleHooks.fontFamily = styleHooks['font-family'] = { + name: 'fontFamily', + canThrow: true + }; +} + + +if (Ext.isIEQuirks || Ext.isIE && Ext.ieVersion <= 8) { + function getBorderWidth (dom, el, inline, style) { + if (style[this.styleName] == 'none') { + return '0px'; + } + return style[this.name]; + } + + edges = ['Top','Right','Bottom','Left']; + k = edges.length; + + while (k--) { + edge = edges[k]; + borderWidth = 'border' + edge + 'Width'; + + styleHooks['border-'+edge.toLowerCase()+'-width'] = styleHooks[borderWidth] = { + name: borderWidth, + styleName: 'border' + edge + 'Style', + get: getBorderWidth + }; + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ext.getDoc().on('selectstart', function(ev, dom) { + var doc = document.documentElement, + selectableCls = Element.selectableCls, + unselectableCls = Element.unselectableCls, + tagName = dom && dom.tagName; + + tagName = tagName && tagName.toLowerCase(); + + + + + if (tagName === 'input' || tagName === 'textarea') { + return; + } + + + while (dom && dom.nodeType === 1 && dom !== doc) { + var el = Ext.fly(dom); + + + if (el.hasCls(selectableCls)) { + return; + } + + + if (el.hasCls(unselectableCls)) { + ev.stopEvent(); + return; + } + + dom = dom.parentNode; + } +}); + +}); + +Ext.onReady(function () { + var opacityRe = /alpha\(opacity=(.*)\)/i, + trimRe = /^\s+|\s+$/g, + hooks = Ext.dom.Element.prototype.styleHooks; + + + hooks.opacity = { + name: 'opacity', + afterSet: function(dom, value, el) { + if (el.isLayer) { + el.onOpacitySet(value); + } + } + }; + if (!Ext.supports.Opacity && Ext.isIE) { + Ext.apply(hooks.opacity, { + get: function (dom) { + var filter = dom.style.filter, + match, opacity; + if (filter.match) { + match = filter.match(opacityRe); + if (match) { + opacity = parseFloat(match[1]); + if (!isNaN(opacity)) { + return opacity ? opacity / 100 : 0; + } + } + } + return 1; + }, + set: function (dom, value) { + var style = dom.style, + val = style.filter.replace(opacityRe, '').replace(trimRe, ''); + + style.zoom = 1; + + + if (typeof(value) == 'number' && value >= 0 && value < 1) { + value *= 100; + style.filter = val + (val.length ? ' ' : '') + 'alpha(opacity='+value+')'; + } else { + style.filter = val; + } + } + }); + } + + +}); + +//@tag core + + +Ext.define('Ext.util.Positionable', { + + _positionTopLeft: ['position', 'top', 'left'], + + _alignRe: /^([a-z]+)-([a-z]+)(\?)?$/, + + + + afterSetPosition: Ext.emptyFn, + + + + + adjustForConstraints: function(xy, parent) { + var vector = this.getConstrainVector(parent, xy); + if (vector) { + xy[0] += vector[0]; + xy[1] += vector[1]; + } + return xy; + }, + + + alignTo: function(element, position, offsets, animate) { + var me = this, + el = me.el; + + return me.setXY(me.getAlignToXY(element, position, offsets), + el.anim && !!animate ? el.anim(animate) : false); + }, + + + anchorTo: function(anchorToEl, alignment, offsets, animate, monitorScroll, callback) { + var me = this, + scroll = !Ext.isEmpty(monitorScroll), + action = function() { + me.alignTo(anchorToEl, alignment, offsets, animate); + Ext.callback(callback, me); + }, + anchor = me.getAnchor(); + + + me.removeAnchor(); + Ext.apply(anchor, { + fn: action, + scroll: scroll + }); + + Ext.EventManager.onWindowResize(action, null); + + if (scroll) { + Ext.EventManager.on(window, 'scroll', action, null, + {buffer: !isNaN(monitorScroll) ? monitorScroll : 50}); + } + action(); + return me; + }, + + + calculateAnchorXY: function(anchor, extraX, extraY, mySize) { + + + var me = this, + el = me.el, + doc = document, + isViewport = el.dom == doc.body || el.dom == doc, + round = Math.round, + xy, myWidth, myHeight; + + anchor = (anchor || "tl").toLowerCase(); + mySize = mySize || {}; + + myWidth = mySize.width || isViewport ? Ext.Element.getViewWidth() : me.getWidth(); + myHeight = mySize.height || isViewport ? Ext.Element.getViewHeight() : me.getHeight(); + + + + switch (anchor) { + case 'tl' : xy = [0, 0]; + break; + case 'bl' : xy = [0, myHeight]; + break; + case 'tr' : xy = [myWidth, 0]; + break; + case 'c' : xy = [round(myWidth * 0.5), round(myHeight * 0.5)]; + break; + case 't' : xy = [round(myWidth * 0.5), 0]; + break; + case 'l' : xy = [0, round(myHeight * 0.5)]; + break; + case 'r' : xy = [myWidth, round(myHeight * 0.5)]; + break; + case 'b' : xy = [round(myWidth * 0.5), myHeight]; + break; + case 'tc' : xy = [round(myWidth * 0.5), 0]; + break; + case 'bc' : xy = [round(myWidth * 0.5), myHeight]; + break; + case 'br' : xy = [myWidth, myHeight]; + } + return [xy[0] + extraX, xy[1] + extraY]; + }, + + + convertPositionSpec: function(posSpec) { + return posSpec; + }, + + + getAlignToXY: function(alignToEl, posSpec, offset) { + var me = this, + viewportWidth = Ext.Element.getViewWidth() - 10, + viewportHeight = Ext.Element.getViewHeight() - 10, + doc = document, + docElement = doc.documentElement, + docBody = doc.body, + scrollX = (docElement.scrollLeft || docBody.scrollLeft || 0), + scrollY = (docElement.scrollTop || docBody.scrollTop || 0), + alignMatch, myPosition, alignToElPosition, myWidth, myHeight, + alignToElRegion, swapY, swapX, constrain, align1, align2, + p1y, p1x, p2y, p2x, x, y; + + alignToEl = Ext.get(alignToEl.el || alignToEl); + + if (!alignToEl || !alignToEl.dom) { + } + + offset = offset || [0,0]; + posSpec = (!posSpec || posSpec == "?" ? "tl-bl?" : + (!(/-/).test(posSpec) && posSpec !== "" ? "tl-" + posSpec : posSpec || "tl-bl")).toLowerCase(); + + posSpec = me.convertPositionSpec(posSpec); + + alignMatch = posSpec.match(me._alignRe); + + + align1 = alignMatch[1]; + align2 = alignMatch[2]; + constrain = !!alignMatch[3]; + + + + myPosition = me.getAnchorXY(align1, true); + alignToElPosition = me.getAnchorToXY(alignToEl, align2, false); + + x = alignToElPosition[0] - myPosition[0] + offset[0]; + y = alignToElPosition[1] - myPosition[1] + offset[1]; + + + if (constrain) { + myWidth = me.getWidth(); + myHeight = me.getHeight(); + alignToElRegion = alignToEl.getRegion(); + + + + + p1y = align1.charAt(0); + p1x = align1.charAt(align1.length - 1); + p2y = align2.charAt(0); + p2x = align2.charAt(align2.length - 1); + swapY = ((p1y == "t" && p2y == "b") || (p1y == "b" && p2y == "t")); + swapX = ((p1x == "r" && p2x == "l") || (p1x == "l" && p2x == "r")); + + if (x + myWidth > viewportWidth + scrollX) { + x = swapX ? alignToElRegion.left - myWidth : viewportWidth + scrollX - myWidth; + } + if (x < scrollX) { + x = swapX ? alignToElRegion.right : scrollX; + } + if (y + myHeight > viewportHeight + scrollY) { + y = swapY ? alignToElRegion.top - myHeight : viewportHeight + scrollY - myHeight; + } + if (y < scrollY) { + y = swapY ? alignToElRegion.bottom : scrollY; + } + } + return [x,y]; + }, + + + getAnchor: function(){ + var el = this.el, + data = (el.$cache || el.getCache()).data, + anchor; + + if (!el.dom) { + return; + } + anchor = data._anchor; + + if(!anchor){ + anchor = data._anchor = {}; + } + return anchor; + }, + + + getAnchorXY: function(anchor, local, mySize) { + var me = this, + myPos = me.getXY(), + el = me.el, + doc = document, + isViewport = el.dom == doc.body || el.dom == doc, + scroll = el.getScroll(), + extraX = isViewport ? scroll.left : local ? 0 : myPos[0], + extraY = isViewport ? scroll.top : local ? 0 : myPos[1]; + + return me.calculateAnchorXY(anchor, extraX, extraY, mySize); + }, + + + getBox: function(contentBox, local) { + var me = this, + xy = local ? me.getLocalXY() : me.getXY(), + x = xy[0], + y = xy[1], + w = me.getWidth(), + h = me.getHeight(), + borderPadding, beforeX, beforeY; + + if (contentBox) { + borderPadding = me.getBorderPadding(); + beforeX = borderPadding.beforeX; + beforeY = borderPadding.beforeY; + + x += beforeX; + y += beforeY; + w -= (beforeX + borderPadding.afterX); + h -= (beforeY + borderPadding.afterY); + } + + return { + x: x, + left: x, + 0: x, + y: y, + top: y, + 1: y, + width: w, + height: h, + right: x + w, + bottom: y + h + }; + }, + + + calculateConstrainedPosition: function(constrainTo, proposedPosition, local, proposedSize) { + var me = this, + vector, + fp = me.floatParent, + parentNode = fp ? fp.getTargetEl() : null, + parentOffset, + borderPadding, + proposedConstrainPosition, + xy = false; + + if (local && fp) { + parentOffset = parentNode.getXY(); + borderPadding = parentNode.getBorderPadding(); + parentOffset[0] += borderPadding.beforeX; + parentOffset[1] += borderPadding.beforeY; + if (proposedPosition) { + proposedConstrainPosition = [proposedPosition[0] + parentOffset[0], proposedPosition[1] + parentOffset[1]]; + } + } else { + proposedConstrainPosition = proposedPosition; + } + + + + constrainTo = constrainTo || me.constrainTo || parentNode || me.container || me.el.parent(); + vector = (me.constrainHeader ? me.header.el : me.el).getConstrainVector(constrainTo, proposedConstrainPosition, proposedSize); + + + if (vector) { + xy = proposedPosition || me.getPosition(local); + xy[0] += vector[0]; + xy[1] += vector[1]; + } + return xy; + }, + + + getConstrainVector: function(constrainTo, proposedPosition, proposedSize) { + var thisRegion = this.getRegion(), + vector = [0, 0], + shadowSize = (this.shadow && this.constrainShadow && !this.shadowDisabled) ? this.shadow.getShadowSize() : undefined, + overflowed = false; + + if (!(constrainTo instanceof Ext.util.Region)) { + constrainTo = Ext.get(constrainTo.el || constrainTo).getViewRegion(); + } + + + if (proposedPosition) { + thisRegion.translateBy(proposedPosition[0] - thisRegion.x, proposedPosition[1] - thisRegion.y); + } + + if (proposedSize) { + thisRegion.right = thisRegion.left + proposedSize[0]; + thisRegion.bottom = thisRegion.top + proposedSize[1]; + } + + + if (shadowSize) { + constrainTo.adjust(shadowSize[0], -shadowSize[1], -shadowSize[2], shadowSize[3]); + } + + + if (thisRegion.right > constrainTo.right) { + overflowed = true; + vector[0] = (constrainTo.right - thisRegion.right); + } + if (thisRegion.left + vector[0] < constrainTo.left) { + overflowed = true; + vector[0] = (constrainTo.left - thisRegion.left); + } + + + if (thisRegion.bottom > constrainTo.bottom) { + overflowed = true; + vector[1] = (constrainTo.bottom - thisRegion.bottom); + } + if (thisRegion.top + vector[1] < constrainTo.top) { + overflowed = true; + vector[1] = (constrainTo.top - thisRegion.top); + } + return overflowed ? vector : false; + }, + + + getOffsetsTo: function(offsetsTo) { + var o = this.getXY(), + e = Ext.fly(offsetsTo.el || offsetsTo, '_internal').getXY(); + return [o[0] - e[0],o[1] - e[1]]; + }, + + + getRegion: function() { + var box = this.getBox(); + return new Ext.util.Region(box.top, box.right, box.bottom, box.left); + }, + + + getViewRegion: function() { + var me = this, + el = me.el, + isBody = el.dom.nodeName === 'BODY', + borderPadding, scroll, pos, top, left, width, height; + + + if (isBody) { + scroll = el.getScroll(); + left = scroll.left; + top = scroll.top; + width = Ext.dom.AbstractElement.getViewportWidth(); + height = Ext.dom.AbstractElement.getViewportHeight(); + } + else { + borderPadding = me.getBorderPadding(); + pos = me.getXY(); + left = pos[0] + borderPadding.beforeX; + top = pos[1] + borderPadding.beforeY; + width = me.getWidth(true); + height = me.getHeight(true); + } + + return new Ext.util.Region(top, left + width, top + height, left); + }, + + + move: function(direction, distance, animate) { + var me = this, + xy = me.getXY(), + x = xy[0], + y = xy[1], + left = [x - distance, y], + right = [x + distance, y], + top = [x, y - distance], + bottom = [x, y + distance], + hash = { + l: left, + left: left, + r: right, + right: right, + t: top, + top: top, + up: top, + b: bottom, + bottom: bottom, + down: bottom + }; + + direction = direction.toLowerCase(); + me.setXY([hash[direction][0], hash[direction][1]], animate); + }, + + + removeAnchor: function() { + var anchor = this.getAnchor(); + + if (anchor && anchor.fn) { + Ext.EventManager.removeResizeListener(anchor.fn); + if (anchor.scroll) { + Ext.EventManager.un(window, 'scroll', anchor.fn); + } + delete anchor.fn; + } + return this; + }, + + + setBox: function(box, animate) { + var me = this, + el = me.el, + x = box.x, + y = box.y, + xy = [x, y], + w = box.width, + h = box.height, + constrainedPos = me.constrain && me.calculateConstrainedPosition(null, [x, y], false, [w, h]); + + + if (constrainedPos) { + x = constrainedPos[0]; + y = constrainedPos[1]; + } + if (!animate || !el.anim) { + me.setSize(w, h); + me.setXY([x, y]); + me.afterSetPosition(x, y); + } else { + me.animate(Ext.applyIf({ + to: { + x: x, + y: y, + width: el.adjustWidth(w), + height: el.adjustHeight(h) + }, + listeners: { + afteranimate: Ext.Function.bind(me.afterSetPosition, me, [x, y]) + } + }, animate)); + } + return me; + }, + + + setRegion: function(region, animate) { + return this.setBox({ + x: region.left, + y: region.top, + width: region.right - region.left, + height: region.bottom - region.top + }, animate); + }, + + + translatePoints: function(x, y) { + var pos = this.translateXY(x, y); + + return { + left: pos.x, + top: pos.y + }; + }, + + + translateXY: function(x, y) { + var me = this, + el = me.el, + styles = el.getStyle(me._positionTopLeft), + relative = styles.position == 'relative', + left = parseFloat(styles.left), + top = parseFloat(styles.top), + xy = me.getXY(); + + if (Ext.isArray(x)) { + y = x[1]; + x = x[0]; + } + if (isNaN(left)) { + left = relative ? 0 : el.dom.offsetLeft; + } + if (isNaN(top)) { + top = relative ? 0 : el.dom.offsetTop; + } + left = (typeof x == 'number') ? x - xy[0] + left : undefined; + top = (typeof y == 'number') ? y - xy[1] + top : undefined; + return { + x: left, + y: top + }; + } +}); + +//@tag dom,core + + +Ext.define('Ext.dom.Element', function(Element) { + var HIDDEN = 'hidden', + DOC = document, + VISIBILITY = "visibility", + DISPLAY = "display", + NONE = "none", + XMASKED = Ext.baseCSSPrefix + "masked", + XMASKEDRELATIVE = Ext.baseCSSPrefix + "masked-relative", + EXTELMASKMSG = Ext.baseCSSPrefix + "mask-msg", + bodyRe = /^body/i, + visFly, + + + noBoxAdjust = Ext.isStrict ? { + select: 1 + }: { + input: 1, + select: 1, + textarea: 1 + }, + + + isScrolled = function(c) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (ci.scrollTop > 0 || ci.scrollLeft > 0) { + r[++ri] = ci; + } + } + return r; + }; + + return { + + extend: Ext.dom.AbstractElement , + + alternateClassName: ['Ext.Element', 'Ext.core.Element'], + + + + + + + + + + + + tableTagRe: /^(?:tr|td|table|tbody)$/i, + + mixins: [ + Ext.util.Positionable + ], + + addUnits: function() { + return Element.addUnits.apply(Element, arguments); + }, + + + focus: function(defer, dom) { + var me = this; + + dom = dom || me.dom; + try { + if (Number(defer)) { + Ext.defer(me.focus, defer, me, [null, dom]); + } else { + dom.focus(); + } + } catch(e) { + } + return me; + }, + + + blur: function() { + var me = this, + dom = me.dom; + + + if (dom !== document.body) { + try { + dom.blur(); + } catch(e) { + } + return me; + } else { + return me.focus(undefined, dom); + } + }, + + + isBorderBox: function() { + var box = Ext.isBorderBox; + + + if (box && Ext.isIE7m) { + box = !((this.dom.tagName || "").toLowerCase() in noBoxAdjust); + } + return box; + }, + + + hover: function(overFn, outFn, scope, options) { + var me = this; + me.on('mouseenter', overFn, scope || me.dom, options); + me.on('mouseleave', outFn, scope || me.dom, options); + return me; + }, + + + getAttributeNS: function(ns, name) { + return this.getAttribute(name, ns); + }, + + getAttribute: (Ext.isIE && !(Ext.isIE9p && DOC.documentMode >= 9)) ? + + + + + + + + + + + + function(name, ns) { + var d = this.dom, + type; + if (ns) { + type = typeof d[ns + ":" + name]; + if (type != 'undefined' && type != 'unknown') { + return d[ns + ":" + name] || null; + } + return null; + } + if (name === "for") { + name = "htmlFor"; + } + return d[name] || null; + } : function(name, ns) { + var d = this.dom; + if (ns) { + return d.getAttributeNS(ns, name) || d.getAttribute(ns + ":" + name); + } + return d.getAttribute(name) || d[name] || null; + }, + + + cacheScrollValues: function() { + var me = this, + scrolledDescendants, + el, i, + scrollValues = [], + result = function() { + for (i = 0; i < scrolledDescendants.length; i++) { + el = scrolledDescendants[i]; + el.scrollLeft = scrollValues[i][0]; + el.scrollTop = scrollValues[i][1]; + } + }; + + if (!Ext.DomQuery.pseudos.isScrolled) { + Ext.DomQuery.pseudos.isScrolled = isScrolled; + } + scrolledDescendants = me.query(':isScrolled'); + for (i = 0; i < scrolledDescendants.length; i++) { + el = scrolledDescendants[i]; + scrollValues[i] = [el.scrollLeft, el.scrollTop]; + } + return result; + }, + + + autoBoxAdjust: true, + + + isVisible : function(deep) { + var me = this, + dom = me.dom, + stopNode = dom.ownerDocument.documentElement; + + if (!visFly) { + visFly = new Element.Fly(); + } + + while (dom !== stopNode) { + + + if (!dom || dom.nodeType === 11 || (visFly.attach(dom)).isStyle(VISIBILITY, HIDDEN) || visFly.isStyle(DISPLAY, NONE)) { + return false; + } + + if (!deep) { + break; + } + dom = dom.parentNode; + } + return true; + }, + + + isDisplayed : function() { + return !this.isStyle(DISPLAY, NONE); + }, + + + enableDisplayMode : function(display) { + var me = this; + + me.setVisibilityMode(Element.DISPLAY); + + if (!Ext.isEmpty(display)) { + (me.$cache || me.getCache()).data.originalDisplay = display; + } + + return me; + }, + + + mask : function(msg, msgCls , elHeight) { + var me = this, + dom = me.dom, + + + setExpression = dom.style.setExpression, + data = (me.$cache || me.getCache()).data, + maskShimEl = data.maskShimEl, + maskEl = data.maskEl, + maskMsg = data.maskMsg, + widthExpression, heightExpression; + + if (!(bodyRe.test(dom.tagName) && me.getStyle('position') == 'static')) { + me.addCls(XMASKEDRELATIVE); + } + + + if (maskEl) { + maskEl.remove(); + } + + if (maskMsg) { + maskMsg.remove(); + } + + if (maskShimEl) { + maskShimEl.remove(); + } + + if (Ext.isIE6) { + maskShimEl = Ext.DomHelper.append(dom, { + tag: 'iframe', + cls : Ext.baseCSSPrefix + 'shim ' + Ext.baseCSSPrefix + 'mask-shim' + }, true); + data.maskShimEl = maskShimEl; + maskShimEl.setDisplayed(true); + } + + Ext.DomHelper.append(dom, [{ + cls : Ext.baseCSSPrefix + "mask", + style: 'top:0;left:0;' + }, { + cls : msgCls ? EXTELMASKMSG + " " + msgCls : EXTELMASKMSG, + cn : { + tag: 'div', + cls: Ext.baseCSSPrefix + 'mask-msg-inner', + cn: { + tag: 'div', + cls: Ext.baseCSSPrefix + 'mask-msg-text', + html: msg || '' + } + } + }]); + + maskMsg = Ext.get(dom.lastChild); + maskEl = Ext.get(maskMsg.dom.previousSibling); + data.maskMsg = maskMsg; + data.maskEl = maskEl; + + me.addCls(XMASKED); + maskEl.setDisplayed(true); + + if (typeof msg == 'string') { + maskMsg.setDisplayed(true); + maskMsg.center(me); + } else { + maskMsg.setDisplayed(false); + } + + + + + + if (!Ext.supports.IncludePaddingInWidthCalculation && setExpression) { + + try { + maskEl.dom.style.setExpression('width', 'this.parentNode.clientWidth + "px"'); + widthExpression = 'this.parentNode.clientWidth + "px"'; + if (maskShimEl) { + maskShimEl.dom.style.setExpression('width', widthExpression); + } + maskEl.dom.style.setExpression('width', widthExpression); + } catch (e) {} + } + + + + if (!Ext.supports.IncludePaddingInHeightCalculation && setExpression) { + + try { + heightExpression = 'this.parentNode.' + (dom == DOC.body ? 'scrollHeight' : 'offsetHeight') + ' + "px"'; + if (maskShimEl) { + maskShimEl.dom.style.setExpression('height', heightExpression); + } + maskEl.dom.style.setExpression('height', heightExpression); + } catch (e) {} + } + + else if (Ext.isIE9m && !(Ext.isIE7 && Ext.isStrict) && me.getStyle('height') == 'auto') { + if (maskShimEl) { + maskShimEl.setSize(undefined, elHeight || me.getHeight()); + } + maskEl.setSize(undefined, elHeight || me.getHeight()); + } + return maskEl; + }, + + + unmask : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + maskEl = data.maskEl, + maskShimEl = data.maskShimEl, + maskMsg = data.maskMsg, + style; + + if (maskEl) { + style = maskEl.dom.style; + + if (style.clearExpression) { + style.clearExpression('width'); + style.clearExpression('height'); + } + + if (maskEl) { + maskEl.remove(); + delete data.maskEl; + } + + if (maskMsg) { + maskMsg.remove(); + delete data.maskMsg; + } + + me.removeCls([XMASKED, XMASKEDRELATIVE]); + + if (maskShimEl) { + style = maskShimEl.dom.style; + + if (style.clearExpression) { + style.clearExpression('width'); + style.clearExpression('height'); + } + + maskShimEl.remove(); + delete data.maskShimEl; + } + } + }, + + + isMasked : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + maskEl = data.maskEl, + maskMsg = data.maskMsg, + hasMask = false; + + if (maskEl && maskEl.isVisible()) { + if (maskMsg) { + maskMsg.center(me); + } + hasMask = true; + } + return hasMask; + }, + + + createShim : function() { + var el = DOC.createElement('iframe'), + shim; + + el.frameBorder = '0'; + el.className = Ext.baseCSSPrefix + 'shim'; + el.src = Ext.SSL_SECURE_URL; + shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom)); + shim.autoBoxAdjust = false; + return shim; + }, + + + addKeyListener : function(key, fn, scope){ + var config; + if(typeof key != 'object' || Ext.isArray(key)){ + config = { + target: this, + key: key, + fn: fn, + scope: scope + }; + }else{ + config = { + target: this, + key : key.key, + shift : key.shift, + ctrl : key.ctrl, + alt : key.alt, + fn: fn, + scope: scope + }; + } + return new Ext.util.KeyMap(config); + }, + + + addKeyMap : function(config) { + return new Ext.util.KeyMap(Ext.apply({ + target: this + }, config)); + }, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + on: function(eventName, fn, scope, options) { + Ext.EventManager.on(this, eventName, fn, scope || this, options); + return this; + }, + + + un: function(eventName, fn, scope) { + Ext.EventManager.un(this, eventName, fn, scope || this); + return this; + }, + + + removeAllListeners: function() { + Ext.EventManager.removeAll(this); + return this; + }, + + + purgeAllListeners: function() { + Ext.EventManager.purgeElement(this); + return this; + }, + + select: function(selector) { + return Element.select(selector, false, this.dom); + } + }; +}, function() { + + var DOC = document, + EC = Ext.cache, + Element = this, + AbstractElement = Ext.dom.AbstractElement, + focusRe = /^a|button|embed|iframe|input|object|select|textarea$/i, + nonSpaceRe = /\S/, + scriptTagRe = /(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig, + replaceScriptTagRe = /(?:)((\n|\r|.)*?)(?:<\/script>)/ig, + srcRe = /\ssrc=([\'\"])(.*?)\1/i, + typeRe = /\stype=([\'\"])(.*?)\1/i, + useDocForId = !Ext.isIE8m, + internalFly; + + Element.boxMarkup = '
    '; + + + + + + function garbageCollect() { + if (!Ext.enableGarbageCollector) { + clearInterval(Element.collectorThreadId); + } else { + var eid, + d, + o, + t; + + for (eid in EC) { + if (!EC.hasOwnProperty(eid)) { + continue; + } + + o = EC[eid]; + + + if (o.skipGarbageCollection) { + continue; + } + + d = o.dom; + + + + + + + + + + + + + + + + + if (!d.parentNode || (!d.offsetParent && !Ext.getElementById(eid))) { + if (d && Ext.enableListenerCollection) { + Ext.EventManager.removeAll(d); + } + delete EC[eid]; + } + } + + if (Ext.isIE) { + t = {}; + for (eid in EC) { + if (!EC.hasOwnProperty(eid)) { + continue; + } + t[eid] = EC[eid]; + } + EC = Ext.cache = t; + } + } + } + + Element.collectorThreadId = setInterval(garbageCollect, 30000); + + + Element.addMethods({ + + + monitorMouseLeave: function(delay, handler, scope) { + var me = this, + timer, + listeners = { + mouseleave: function(e) { + timer = setTimeout(Ext.Function.bind(handler, scope||me, [e]), delay); + }, + mouseenter: function() { + clearTimeout(timer); + }, + freezeEvent: true + }; + + me.on(listeners); + return listeners; + }, + + + swallowEvent : function(eventName, preventDefault) { + var me = this, + e, eLen, + fn = function(e) { + e.stopPropagation(); + if (preventDefault) { + e.preventDefault(); + } + }; + + if (Ext.isArray(eventName)) { + eLen = eventName.length; + + for (e = 0; e < eLen; e++) { + me.on(eventName[e], fn); + } + + return me; + } + me.on(eventName, fn); + return me; + }, + + + relayEvent : function(eventName, observable) { + this.on(eventName, function(e) { + observable.fireEvent(eventName, e); + }); + }, + + + clean : function(forceReclean) { + var me = this, + dom = me.dom, + data = (me.$cache || me.getCache()).data, + n = dom.firstChild, + ni = -1, + nx; + + if (data.isCleaned && forceReclean !== true) { + return me; + } + + while (n) { + nx = n.nextSibling; + if (n.nodeType == 3) { + + if (!(nonSpaceRe.test(n.nodeValue))) { + dom.removeChild(n); + + } else if (nx && nx.nodeType == 3) { + n.appendData(Ext.String.trim(nx.data)); + dom.removeChild(nx); + nx = n.nextSibling; + n.nodeIndex = ++ni; + } + } else { + + internalFly.attach(n).clean(); + n.nodeIndex = ++ni; + } + n = nx; + } + + data.isCleaned = true; + return me; + }, + + + load : function(options) { + this.getLoader().load(options); + return this; + }, + + + getLoader : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + loader = data.loader; + + if (!loader) { + data.loader = loader = new Ext.ElementLoader({ + target: me + }); + } + return loader; + }, + + + syncContent: function(source) { + source = Ext.getDom(source); + var sourceNodes = source.childNodes, + sourceLen = sourceNodes.length, + dest = this.dom, + destNodes = dest.childNodes, + destLen = destNodes.length, + i, destNode, sourceNode, + nodeType, newAttrs, attLen, attName; + + + if (dest.mergeAttributes) { + dest.mergeAttributes(source, true); + + + + dest.src = source.src; + } else { + newAttrs = source.attributes; + attLen = newAttrs.length; + for (i = 0; i < attLen; i++) { + attName = newAttrs[i].name; + if (attName !== 'id') { + dest.setAttribute(attName, newAttrs[i].value); + } + } + } + + + if (sourceLen !== destLen) { + dest.innerHTML = source.innerHTML; + return; + } + + + + for (i = 0; i < sourceLen; i++) { + sourceNode = sourceNodes[i]; + destNode = destNodes[i]; + nodeType = sourceNode.nodeType; + + + if (nodeType !== destNode.nodeType || (nodeType === 1 && sourceNode.tagName !== destNode.tagName)) { + dest.innerHTML = source.innerHTML; + return; + } + + + if (nodeType === 3) { + destNode.data = sourceNode.data; + } + + else { + if (sourceNode.id && destNode.id !== sourceNode.id) { + destNode.id = sourceNode.id; + } + destNode.style.cssText = sourceNode.style.cssText; + destNode.className = sourceNode.className; + internalFly.attach(destNode).syncContent(sourceNode); + } + } + }, + + + update : function(html, loadScripts, callback) { + var me = this, + id, + dom, + interval; + + if (!me.dom) { + return me; + } + html = html || ''; + dom = me.dom; + + if (loadScripts !== true) { + dom.innerHTML = html; + Ext.callback(callback, me); + return me; + } + + id = Ext.id(); + html += ''; + + interval = setInterval(function() { + var hd, + match, + attrs, + srcMatch, + typeMatch, + el, + s; + if (!(el = DOC.getElementById(id))) { + return false; + } + clearInterval(interval); + Ext.removeNode(el); + hd = Ext.getHead().dom; + + while ((match = scriptTagRe.exec(html))) { + attrs = match[1]; + srcMatch = attrs ? attrs.match(srcRe) : false; + if (srcMatch && srcMatch[2]) { + s = DOC.createElement("script"); + s.src = srcMatch[2]; + typeMatch = attrs.match(typeRe); + if (typeMatch && typeMatch[2]) { + s.type = typeMatch[2]; + } + hd.appendChild(s); + } else if (match[2] && match[2].length > 0) { + if (window.execScript) { + window.execScript(match[2]); + } else { + window.eval(match[2]); + } + } + } + Ext.callback(callback, me); + }, 20); + dom.innerHTML = html.replace(replaceScriptTagRe, ''); + return me; + }, + + + removeAllListeners : function() { + this.removeAnchor(); + Ext.EventManager.removeAll(this.dom); + return this; + }, + + + createProxy : function(config, renderTo, matchBox) { + config = (typeof config == 'object') ? config : {tag : "div", cls: config}; + + var me = this, + proxy = renderTo ? Ext.DomHelper.append(renderTo, config, true) : + Ext.DomHelper.insertBefore(me.dom, config, true); + + proxy.setVisibilityMode(Element.DISPLAY); + proxy.hide(); + if (matchBox && me.setBox && me.getBox) { + proxy.setBox(me.getBox()); + } + return proxy; + }, + + + needsTabIndex: function() { + if (this.dom) { + if ((this.dom.nodeName === 'a') && (!this.dom.href)) { + return true; + } + return !focusRe.test(this.dom.nodeName); + } + }, + + + isFocusable: function ( asFocusEl) { + var dom = this.dom, + tabIndexAttr = dom.getAttributeNode('tabIndex'), + tabIndex, + nodeName = dom.nodeName, + canFocus = false; + + + + + + + + + + + + if (tabIndexAttr && tabIndexAttr.specified) { + tabIndex = tabIndexAttr.value; + } + if (dom && !dom.disabled) { + + + if (tabIndex == -1) { + canFocus = Ext.FocusManager && Ext.FocusManager.enabled && asFocusEl; + } + else { + + if (focusRe.test(nodeName)) { + if ((nodeName !== 'a') || dom.href) { + canFocus = true; + } + } + + else { + canFocus = tabIndex != null && tabIndex >= 0; + } + } + canFocus = canFocus && this.isVisible(true); + } + return canFocus; + } + }); + + if (Ext.isIE) { + Element.prototype.getById = function (id, asDom) { + var dom = this.dom, + cacheItem, el, ret; + + if (dom) { + + + el = (useDocForId && DOC.getElementById(id)) || dom.all[id]; + if (el) { + if (asDom) { + ret = el; + } else { + + + cacheItem = EC[id]; + if (cacheItem && cacheItem.el) { + ret = Ext.updateCacheEntry(cacheItem, el).el; + } else { + ret = new Element(el); + } + } + return ret; + } + } + + return asDom ? Ext.getDom(id) : Element.get(id); + }; + } + + Element.createAlias({ + + addListener: 'on', + + removeListener: 'un', + + clearListeners: 'removeAllListeners', + + focusable: 'isFocusable' + }); + + Element.Fly = AbstractElement.Fly = new Ext.Class({ + extend: Element, + + isFly: true, + + constructor: function(dom) { + this.dom = dom; + + + + this.el = this; + }, + + attach: AbstractElement.Fly.prototype.attach + }); + + internalFly = new Element.Fly(); + + if (Ext.isIE) { + Ext.getElementById = function (id) { + var el = DOC.getElementById(id), + detachedBodyEl; + + if (!el && (detachedBodyEl = AbstractElement.detachedBodyEl)) { + el = detachedBodyEl.dom.all[id]; + } + + return el; + }; + } else if (!DOC.querySelector) { + Ext.getDetachedBody = Ext.getBody; + + Ext.getElementById = function (id) { + return DOC.getElementById(id); + }; + } +}); + +//@tag dom,core + + +Ext.define('Ext.dom.CompositeElementLite', { + alternateClassName: 'Ext.CompositeElementLite', + + + + statics: { + + importElementMethods: function() { + var name, + elementPrototype = Ext.dom.Element.prototype, + prototype = this.prototype; + + for (name in elementPrototype) { + if (typeof elementPrototype[name] == 'function'){ + (function(key) { + prototype[key] = prototype[key] || function() { + return this.invoke(key, arguments); + }; + }).call(prototype, name); + + } + } + } + }, + + constructor: function(elements, root) { + + this.elements = []; + this.add(elements, root); + this.el = new Ext.dom.AbstractElement.Fly(); + }, + + + isComposite: true, + + + getElement: function(el) { + + return this.el.attach(el); + }, + + + transformElement: function(el) { + return Ext.getDom(el); + }, + + + getCount: function() { + return this.elements.length; + }, + + + add: function(els, root) { + var elements = this.elements, + i, ln; + + if (!els) { + return this; + } + + if (typeof els == "string") { + els = Ext.dom.Element.selectorFunction(els, root); + } + else if (els.isComposite) { + els = els.elements; + } + else if (!Ext.isIterable(els)) { + els = [els]; + } + + for (i = 0, ln = els.length; i < ln; ++i) { + elements.push(this.transformElement(els[i])); + } + + return this; + }, + + invoke: function(fn, args) { + var elements = this.elements, + ln = elements.length, + element, + i; + + fn = Ext.dom.Element.prototype[fn]; + for (i = 0; i < ln; i++) { + element = elements[i]; + + if (element) { + fn.apply(this.getElement(element), args); + } + } + return this; + }, + + + item: function(index) { + var el = this.elements[index], + out = null; + + if (el) { + out = this.getElement(el); + } + + return out; + }, + + + slice: function() { + return this.elements.slice.apply(this.elements, arguments); + }, + + + addListener: function(eventName, handler, scope, opt) { + var els = this.elements, + len = els.length, + i, e; + + for (i = 0; i < len; i++) { + e = els[i]; + if (e) { + Ext.EventManager.on(e, eventName, handler, scope || e, opt); + } + } + return this; + }, + + each: function(fn, scope) { + var me = this, + els = me.elements, + len = els.length, + i, e; + + for (i = 0; i < len; i++) { + e = els[i]; + if (e) { + e = this.getElement(e); + if (fn.call(scope || e, e, me, i) === false) { + break; + } + } + } + return me; + }, + + + fill: function(els) { + var me = this; + me.elements = []; + me.add(els); + return me; + }, + + insert: function(index, nodes) { + Ext.Array.insert(this.elements, index, nodes); + }, + + + filter: function(selector) { + var me = this, + els = me.elements, + len = els.length, + out = [], + i = 0, + isFunc = typeof selector == 'function', + add, + el; + + for (; i < len; i++) { + el = els[i]; + add = false; + if (el) { + el = me.getElement(el); + + if (isFunc) { + add = selector.call(el, el, me, i) !== false; + } else { + add = el.is(selector); + } + + if (add) { + out.push(me.transformElement(el)); + } + } + } + + me.elements = out; + return me; + }, + + + indexOf: function(el) { + return Ext.Array.indexOf(this.elements, this.transformElement(el)); + }, + + + replaceElement: function(el, replacement, domReplace) { + var index = !isNaN(el) ? el : this.indexOf(el), + d; + if (index > -1) { + replacement = Ext.getDom(replacement); + if (domReplace) { + d = this.elements[index]; + d.parentNode.insertBefore(replacement, d); + Ext.removeNode(d); + } + Ext.Array.splice(this.elements, index, 1, replacement); + } + return this; + }, + + + clear: function(removeDom) { + var me = this, + els = me.elements, + i = els.length - 1; + + if (removeDom) { + for (; i >= 0; i--) { + Ext.removeNode(els[i]); + } + } + this.elements = []; + }, + + addElements: function(els, root) { + if (!els) { + return this; + } + + if (typeof els == "string") { + els = Ext.dom.Element.selectorFunction(els, root); + } + + var yels = this.elements, + eLen = els.length, + e; + + for (e = 0; e < eLen; e++) { + yels.push(Ext.get(els[e])); + } + + return this; + }, + + + first: function() { + return this.item(0); + }, + + + last: function() { + return this.item(this.getCount() - 1); + }, + + + contains: function(el) { + return this.indexOf(el) != -1; + }, + + + removeElement: function(keys, removeDom) { + keys = [].concat(keys); + + var me = this, + elements = me.elements, + kLen = keys.length, + val, el, k; + + for (k = 0; k < kLen; k++) { + val = keys[k]; + + if ((el = (elements[val] || elements[val = me.indexOf(val)]))) { + if (removeDom) { + if (el.dom) { + el.remove(); + } else { + Ext.removeNode(el); + } + } + Ext.Array.erase(elements, val, 1); + } + } + + return me; + } + +}, function() { + this.importElementMethods(); + + this.prototype.on = this.prototype.addListener; + + if (Ext.DomQuery){ + Ext.dom.Element.selectorFunction = Ext.DomQuery.select; + } + + + Ext.dom.Element.select = function(selector, root) { + var elements; + + if (typeof selector == "string") { + elements = Ext.dom.Element.selectorFunction(selector, root); + } + else if (selector.length !== undefined) { + elements = selector; + } + else { + } + + return new Ext.CompositeElementLite(elements); + }; + + + Ext.select = function() { + return Ext.dom.Element.select.apply(Ext.dom.Element, arguments); + }; +}); + +//@tag dom,core + + +Ext.define('Ext.dom.CompositeElement', { + alternateClassName: 'Ext.CompositeElement', + + extend: Ext.dom.CompositeElementLite , + + + getElement: function(el) { + + return el; + }, + + + transformElement: function(el) { + return Ext.get(el); + } + +}, function() { + + + Ext.dom.Element.select = function(selector, unique, root) { + var elements; + + if (typeof selector == "string") { + elements = Ext.dom.Element.selectorFunction(selector, root); + } + else if (selector.length !== undefined) { + elements = selector; + } + else { + } + return (unique === true) ? new Ext.CompositeElement(elements) : new Ext.CompositeElementLite(elements); + }; +}); + + +Ext.select = Ext.Element.select; + + +Ext.define('Ext.util.HashMap', { + mixins: { + observable: Ext.util.Observable + }, + + + + + constructor: function(config) { + config = config || {}; + + var me = this, + keyFn = config.keyFn; + + me.initialConfig = config; + me.addEvents( + + 'add', + + 'clear', + + 'remove', + + 'replace' + ); + + me.mixins.observable.constructor.call(me, config); + me.clear(true); + + if (keyFn) { + me.getKey = keyFn; + } + }, + + + getCount: function() { + return this.length; + }, + + + getData: function(key, value) { + + if (value === undefined) { + value = key; + key = this.getKey(value); + } + + return [key, value]; + }, + + + getKey: function(o) { + return o.id; + }, + + + add: function(key, value) { + var me = this; + + + + if (arguments.length === 1) { + value = key; + key = me.getKey(value); + } + + if (me.containsKey(key)) { + return me.replace(key, value); + } + + me.map[key] = value; + ++me.length; + if (me.hasListeners.add) { + me.fireEvent('add', me, key, value); + } + return value; + }, + + + replace: function(key, value) { + var me = this, + map = me.map, + old; + + + + if (arguments.length === 1) { + value = key; + key = me.getKey(value); + } + + if (!me.containsKey(key)) { + me.add(key, value); + } + old = map[key]; + map[key] = value; + if (me.hasListeners.replace) { + me.fireEvent('replace', me, key, value, old); + } + return value; + }, + + + remove: function(o) { + var key = this.findKey(o); + if (key !== undefined) { + return this.removeAtKey(key); + } + return false; + }, + + + removeAtKey: function(key) { + var me = this, + value; + + if (me.containsKey(key)) { + value = me.map[key]; + delete me.map[key]; + --me.length; + if (me.hasListeners.remove) { + me.fireEvent('remove', me, key, value); + } + return true; + } + return false; + }, + + + get: function(key) { + return this.map[key]; + }, + + + clear: function( initial) { + var me = this; + me.map = {}; + me.length = 0; + if (initial !== true && me.hasListeners.clear) { + me.fireEvent('clear', me); + } + return me; + }, + + + containsKey: function(key) { + return this.map[key] !== undefined; + }, + + + contains: function(value) { + return this.containsKey(this.findKey(value)); + }, + + + getKeys: function() { + return this.getArray(true); + }, + + + getValues: function() { + return this.getArray(false); + }, + + + getArray: function(isKey) { + var arr = [], + key, + map = this.map; + for (key in map) { + if (map.hasOwnProperty(key)) { + arr.push(isKey ? key: map[key]); + } + } + return arr; + }, + + + each: function(fn, scope) { + + var items = Ext.apply({}, this.map), + key, + length = this.length; + + scope = scope || this; + for (key in items) { + if (items.hasOwnProperty(key)) { + if (fn.call(scope, key, items[key], length) === false) { + break; + } + } + } + return this; + }, + + + clone: function() { + var hash = new this.self(this.initialConfig), + map = this.map, + key; + + hash.suspendEvents(); + for (key in map) { + if (map.hasOwnProperty(key)) { + hash.add(key, map[key]); + } + } + hash.resumeEvents(); + return hash; + }, + + + findKey: function(value) { + var key, + map = this.map; + + for (key in map) { + if (map.hasOwnProperty(key) && map[key] === value) { + return key; + } + } + return undefined; + } +}); + + +Ext.define('Ext.AbstractManager', { + + + + + + + + typeName: 'type', + + constructor: function(config) { + Ext.apply(this, config || {}); + + + this.all = new Ext.util.HashMap(); + + this.types = {}; + }, + + + get : function(id) { + return this.all.get(id); + }, + + + register: function(item) { + this.all.add(item); + }, + + + unregister: function(item) { + this.all.remove(item); + }, + + + registerType : function(type, cls) { + this.types[type] = cls; + cls[this.typeName] = type; + }, + + + isRegistered : function(type){ + return this.types[type] !== undefined; + }, + + + create: function(config, defaultType) { + var type = config[this.typeName] || config.type || defaultType, + Constructor = this.types[type]; + + + return new Constructor(config); + }, + + + onAvailable : function(id, fn, scope){ + var all = this.all, + item, + callback; + + if (all.containsKey(id)) { + item = all.get(id); + fn.call(scope || item, item); + } else { + callback = function(map, key, item){ + if (key == id) { + fn.call(scope || item, item); + all.un('add', callback); + } + }; + all.on('add', callback); + } + }, + + + each: function(fn, scope){ + this.all.each(fn, scope || this); + }, + + + getCount: function(){ + return this.all.getCount(); + } +}); + + +Ext.define('Ext.ComponentManager', { + extend: Ext.AbstractManager , + alternateClassName: 'Ext.ComponentMgr', + + singleton: true, + + typeName: 'xtype', + + + create: function(component, defaultType){ + if (typeof component == 'string') { + return Ext.widget(component); + } + if (component.isComponent) { + return component; + } + return Ext.widget(component.xtype || defaultType, component); + }, + + registerType: function(type, cls) { + this.types[type] = cls; + cls[this.typeName] = type; + cls.prototype[this.typeName] = type; + } +}, +function () { + + Ext.getCmp = function(id) { + return Ext.ComponentManager.get(id); + }; +}); + + +Ext.define('Ext.ComponentQuery', { + singleton: true + + + + +}, function() { + + var cq = this, + domQueryOperators = Ext.dom.Query.operators, + nthRe = /(\d*)n\+?(\d*)/, + nthRe2 = /\D/, + + + + filterFnPattern = [ + 'var r = [],', + 'i = 0,', + 'it = items,', + 'l = it.length,', + 'c;', + 'for (; i < l; i++) {', + 'c = it[i];', + 'if (c.{0}) {', + 'r.push(c);', + '}', + '}', + 'return r;' + ].join(''), + + filterItems = function(items, operation) { + + + + return operation.method.apply(this, [ items ].concat(operation.args)); + }, + + getItems = function(items, mode) { + var result = [], + i = 0, + length = items.length, + candidate, + deep = mode !== '>'; + + for (; i < length; i++) { + candidate = items[i]; + if (candidate.getRefItems) { + result = result.concat(candidate.getRefItems(deep)); + } + } + return result; + }, + + getAncestors = function(items) { + var result = [], + i = 0, + length = items.length, + candidate; + for (; i < length; i++) { + candidate = items[i]; + while (!!(candidate = candidate.getRefOwner())) { + result.push(candidate); + } + } + return result; + }, + + + filterByXType = function(items, xtype, shallow) { + if (xtype === '*') { + return items.slice(); + } + else { + var result = [], + i = 0, + length = items.length, + candidate; + for (; i < length; i++) { + candidate = items[i]; + if (candidate.isXType(xtype, shallow)) { + result.push(candidate); + } + } + return result; + } + }, + + + filterByClassName = function(items, className) { + var result = [], + i = 0, + length = items.length, + candidate; + for (; i < length; i++) { + candidate = items[i]; + if (candidate.hasCls(className)) { + result.push(candidate); + } + } + return result; + }, + + + filterByAttribute = function(items, property, operator, compareTo) { + var result = [], + i = 0, + length = items.length, + mustBeOwnProperty, + presenceOnly, + candidate, propValue, + j, propLen; + + + if (property.charAt(0) === '@') { + mustBeOwnProperty = true; + property = property.substr(1); + } + if (property.charAt(0) === '?') { + mustBeOwnProperty = true; + presenceOnly = true; + property = property.substr(1); + } + + for (; i < length; i++) { + candidate = items[i]; + + + if (!mustBeOwnProperty || candidate.hasOwnProperty(property)) { + + + propValue = candidate[property]; + + if (presenceOnly) { + result.push(candidate); + } + + else if (operator === '~=') { + if (propValue) { + + if (!Ext.isArray(propValue)) { + propValue = propValue.split(' '); + } + + for (j = 0, propLen = propValue.length; j < propLen; j++) { + if (domQueryOperators[operator](Ext.coerce(propValue[j], compareTo), compareTo)) { + result.push(candidate); + break; + } + } + } + } else if (!compareTo ? !!candidate[property] : domQueryOperators[operator](Ext.coerce(propValue, compareTo), compareTo)) { + result.push(candidate); + } + } + } + return result; + }, + + + filterById = function(items, id) { + var result = [], + i = 0, + length = items.length, + candidate; + for (; i < length; i++) { + candidate = items[i]; + if (candidate.getItemId() === id) { + result.push(candidate); + } + } + return result; + }, + + + filterByPseudo = function(items, name, value) { + return cq.pseudos[name](items, value); + }, + + + + modeRe = /^(\s?([>\^])\s?|\s|$)/, + + + tokenRe = /^(#)?([\w\-]+|\*)(?:\((true|false)\))?/, + + matchers = [{ + + re: /^\.([\w\-]+)(?:\((true|false)\))?/, + method: filterByXType + }, { + + + + re: /^(?:\[((?:@|\?)?[\w\-\$]*[^\^\$\*~%!])\s?(?:(=|.=)\s?['"]?(.*?)["']?)?\])/, + method: filterByAttribute + }, { + + re: /^#([\w\-]+)/, + method: filterById + }, { + + re: /^\:([\w\-]+)(?:\(((?:\{[^\}]+\})|(?:(?!\{)[^\s>\/]*?(?!\})))\))?/, + method: filterByPseudo + }, { + + re: /^(?:\{([^\}]+)\})/, + method: filterFnPattern + }]; + + + cq.Query = Ext.extend(Object, { + constructor: function(cfg) { + cfg = cfg || {}; + Ext.apply(this, cfg); + }, + + + + + + + + + + execute : function(root) { + var operations = this.operations, + i = 0, + length = operations.length, + operation, + workingItems; + + + if (!root) { + workingItems = Ext.ComponentManager.all.getArray(); + } + + else if (Ext.isIterable(root)) { + workingItems = root; + } + + else if (root.isMixedCollection) { + workingItems = root.items; + } + + + + for (; i < length; i++) { + operation = operations[i]; + + + + + + + + if (operation.mode === '^') { + workingItems = getAncestors(workingItems || [root]); + } + else if (operation.mode) { + workingItems = getItems(workingItems || [root], operation.mode); + } + else { + workingItems = filterItems(workingItems || getItems([root]), operation); + } + + + + if (i === length -1) { + return workingItems; + } + } + return []; + }, + + is: function(component) { + var operations = this.operations, + components = Ext.isArray(component) ? component : [component], + originalLength = components.length, + lastOperation = operations[operations.length-1], + ln, i; + + components = filterItems(components, lastOperation); + if (components.length === originalLength) { + if (operations.length > 1) { + for (i = 0, ln = components.length; i < ln; i++) { + if (Ext.Array.indexOf(this.execute(), components[i]) === -1) { + return false; + } + } + } + return true; + } + return false; + } + }); + + Ext.apply(this, { + + + cache: {}, + + + pseudos: { + not: function(components, selector){ + var CQ = Ext.ComponentQuery, + i = 0, + length = components.length, + results = [], + index = -1, + component; + + for(; i < length; ++i) { + component = components[i]; + if (!CQ.is(component, selector)) { + results[++index] = component; + } + } + return results; + }, + first: function(components) { + var ret = []; + + if (components.length > 0) { + ret.push(components[0]); + } + return ret; + }, + last: function(components) { + var len = components.length, + ret = []; + + if (len > 0) { + ret.push(components[len - 1]); + } + return ret; + }, + focusable: function(cmps) { + var len = cmps.length, + results = [], + i = 0, + c; + + for (; i < len; i++) { + c = cmps[i]; + + + if (c.isFocusable()) { + results.push(c); + } + } + + return results; + }, + "nth-child" : function(c, a) { + var result = [], + m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a), + f = (m[1] || 1) - 0, l = m[2] - 0, + i, n, nodeIndex; + for (i = 0; n = c[i]; i++) { + nodeIndex = i + 1; + if (f == 1) { + if (l == 0 || nodeIndex == l) { + result.push(n); + } + } else if ((nodeIndex + l) % f == 0){ + result.push(n); + } + } + + return result; + } + }, + + + query: function(selector, root) { + var selectors = selector.split(','), + length = selectors.length, + i = 0, + results = [], + noDupResults = [], + dupMatcher = {}, + query, resultsLn, cmp; + + for (; i < length; i++) { + selector = Ext.String.trim(selectors[i]); + query = this.cache[selector] || (this.cache[selector] = this.parse(selector)); + results = results.concat(query.execute(root)); + } + + + + if (length > 1) { + resultsLn = results.length; + for (i = 0; i < resultsLn; i++) { + cmp = results[i]; + if (!dupMatcher[cmp.id]) { + noDupResults.push(cmp); + dupMatcher[cmp.id] = true; + } + } + results = noDupResults; + } + return results; + }, + + + is: function(component, selector) { + if (!selector) { + return true; + } + var selectors = selector.split(','), + length = selectors.length, + i = 0, + query; + + for (; i < length; i++) { + selector = Ext.String.trim(selectors[i]); + query = this.cache[selector] || (this.cache[selector] = this.parse(selector)); + if (query.is(component)) { + return true; + } + } + return false; + }, + + parse: function(selector) { + var operations = [], + length = matchers.length, + lastSelector, + tokenMatch, + matchedChar, + modeMatch, + selectorMatch, + i, matcher, method; + + + + + while (selector && lastSelector !== selector) { + lastSelector = selector; + + + tokenMatch = selector.match(tokenRe); + + if (tokenMatch) { + matchedChar = tokenMatch[1]; + + + if (matchedChar === '#') { + operations.push({ + method: filterById, + args: [Ext.String.trim(tokenMatch[2])] + }); + } + + + else if (matchedChar === '.') { + operations.push({ + method: filterByClassName, + args: [Ext.String.trim(tokenMatch[2])] + }); + } + + + else { + operations.push({ + method: filterByXType, + args: [Ext.String.trim(tokenMatch[2]), Boolean(tokenMatch[3])] + }); + } + + + selector = selector.replace(tokenMatch[0], ''); + } + + + + + while (!(modeMatch = selector.match(modeRe))) { + + + for (i = 0; selector && i < length; i++) { + matcher = matchers[i]; + selectorMatch = selector.match(matcher.re); + method = matcher.method; + + + + + if (selectorMatch) { + operations.push({ + method: Ext.isString(matcher.method) + + + + ? Ext.functionFactory('items', Ext.String.format.apply(Ext.String, [method].concat(selectorMatch.slice(1)))) + : matcher.method, + args: selectorMatch.slice(1) + }); + selector = selector.replace(selectorMatch[0], ''); + break; + } + + if (i === (length - 1)) { + Ext.Error.raise('Invalid ComponentQuery selector: "' + arguments[0] + '"'); + } + } + } + + + + + + if (modeMatch[1]) { + operations.push({ + mode: modeMatch[2]||modeMatch[1] + }); + selector = selector.replace(modeMatch[0], ''); + } + } + + + + return new cq.Query({ + operations: operations + }); + } + }); +}); + + + + +Ext.define('Ext.util.ProtoElement', (function () { + var splitWords = Ext.String.splitWords, + toMap = Ext.Array.toMap; + + return { + + isProtoEl: true, + + + clsProp: 'cls', + + + styleProp: 'style', + + + removedProp: 'removed', + + + styleIsText: false, + + constructor: function (config) { + var me = this; + + Ext.apply(me, config); + + me.classList = splitWords(me.cls); + me.classMap = toMap(me.classList); + delete me.cls; + + if (Ext.isFunction(me.style)) { + me.styleFn = me.style; + delete me.style; + } else if (typeof me.style == 'string') { + me.style = Ext.Element.parseStyles(me.style); + } else if (me.style) { + me.style = Ext.apply({}, me.style); + } + }, + + + flush: function(){ + this.flushClassList = []; + this.removedClasses = {}; + + delete this.style; + delete this.unselectableAttr; + }, + + + addCls: function (cls) { + var me = this, + add = (typeof cls === 'string') ? splitWords(cls) : cls, + length = add.length, + list = me.classList, + map = me.classMap, + flushList = me.flushClassList, + i = 0, + c; + + for (; i < length; ++i) { + c = add[i]; + if (!map[c]) { + map[c] = true; + list.push(c); + if (flushList) { + flushList.push(c); + delete me.removedClasses[c]; + } + } + } + + return me; + }, + + + hasCls: function (cls) { + return cls in this.classMap; + }, + + + removeCls: function (cls) { + var me = this, + list = me.classList, + newList = (me.classList = []), + remove = toMap(splitWords(cls)), + length = list.length, + map = me.classMap, + removedClasses = me.removedClasses, + i, c; + + for (i = 0; i < length; ++i) { + c = list[i]; + if (remove[c]) { + if (removedClasses) { + if (map[c]) { + removedClasses[c] = true; + Ext.Array.remove(me.flushClassList, c); + } + } + delete map[c]; + } else { + newList.push(c); + } + } + + return me; + }, + + + setStyle: function (prop, value) { + var me = this, + style = me.style || (me.style = {}); + + if (typeof prop == 'string') { + if (arguments.length === 1) { + me.setStyle(Ext.Element.parseStyles(prop)); + } else { + style[prop] = value; + } + } else { + Ext.apply(style, prop); + } + + return me; + }, + + unselectable: function() { + + this.addCls(Ext.dom.Element.unselectableCls); + + if (Ext.isOpera) { + this.unselectableAttr = true; + } + }, + + + writeTo: function (to) { + var me = this, + classList = me.flushClassList || me.classList, + removedClasses = me.removedClasses, + style; + + if (me.styleFn) { + style = Ext.apply({}, me.styleFn()); + Ext.apply(style, me.style); + } else { + style = me.style; + } + + to[me.clsProp] = classList.join(' '); + + if (style) { + to[me.styleProp] = me.styleIsText ? Ext.DomHelper.generateStyles(style) : style; + } + + if (removedClasses) { + removedClasses = Ext.Object.getKeys(removedClasses); + if (removedClasses.length) { + to[me.removedProp] = removedClasses.join(' '); + } + } + + if (me.unselectableAttr) { + to.unselectable = 'on'; + } + + return to; + } + }; +}())); + + +Ext.define('Ext.PluginManager', { + extend: Ext.AbstractManager , + alternateClassName: 'Ext.PluginMgr', + singleton: true, + typeName: 'ptype', + + + create : function(config, defaultType, host) { + var result; + + if (config.init) { + result = config; + } else { + + if (host) { + config = Ext.apply({}, config); + config.cmp = host; + } + + else { + host = config.cmp; + } + + if (config.xclass) { + result = Ext.create(config); + } else { + + result = Ext.ClassManager.getByAlias(('plugin.' + (config.ptype || defaultType))); + + if (typeof result === 'function') { + result = new result(config); + } + } + } + + + if (result && host && result.setCmp && !result.setCmpCalled) { + result.setCmp(host); + result.setCmpCalled = true; + } + return result; + }, + + + findByType: function(type, defaultsOnly) { + var matches = [], + types = this.types, + name, + item; + + for (name in types) { + if (!types.hasOwnProperty(name)) { + continue; + } + item = types[name]; + + if (item.type == type && (!defaultsOnly || (defaultsOnly === true && item.isDefault))) { + matches.push(item); + } + } + + return matches; + } +}, function() { + + Ext.preg = function() { + return Ext.PluginManager.registerType.apply(Ext.PluginManager, arguments); + }; +}); + + +Ext.define('Ext.util.Filter', { + + + + + + + + id: null, + + + anyMatch: false, + + + exactMatch: false, + + + caseSensitive: false, + + + disabled: false, + + + operator: null, + + + + statics: { + + createFilterFn: function(filters) { + return filters && filters.length ? function(candidate) { + var isMatch = true, + length = filters.length, + i, filter; + + for (i = 0; isMatch && i < length; i++) { + filter = filters[i]; + + + if (!filter.disabled) { + isMatch = isMatch && filter.filterFn.call(filter.scope || filter, candidate); + } + } + return isMatch; + } : function() { + return true; + }; + } + }, + + operatorFns: { + "<": function(candidate) { + return Ext.coerce(this.getRoot(candidate)[this.property], this.value) < this.value; + }, + "<=": function(candidate) { + return Ext.coerce(this.getRoot(candidate)[this.property], this.value) <= this.value; + }, + "=": function(candidate) { + return Ext.coerce(this.getRoot(candidate)[this.property], this.value) == this.value; + }, + ">=": function(candidate) { + return Ext.coerce(this.getRoot(candidate)[this.property], this.value) >= this.value; + }, + ">": function(candidate) { + return Ext.coerce(this.getRoot(candidate)[this.property], this.value) > this.value; + }, + "!=": function(candidate) { + return Ext.coerce(this.getRoot(candidate)[this.property], this.value) != this.value; + } + }, + + + constructor: function(config) { + var me = this; + me.initialConfig = config; + Ext.apply(me, config); + + + + me.filter = me.filter || me.filterFn; + + if (me.filter === undefined) { + me.setValue(config.value); + } + }, + + + setValue: function(value) { + var me = this; + me.value = value; + if (me.property === undefined || me.value === undefined) { + + + + + } else { + me.filter = me.createFilterFn(); + } + + me.filterFn = me.filter; + }, + + + setFilterFn: function(filterFn) { + this.filterFn = this.filter = filterFn; + }, + + + createFilterFn: function() { + var me = this, + matcher = me.createValueMatcher(), + property = me.property; + + if (me.operator) { + return me.operatorFns[me.operator]; + } else { + return function(item) { + var value = me.getRoot(item)[property]; + return matcher === null ? value === null : matcher.test(value); + }; + } + }, + + + getRoot: function(item) { + var root = this.root; + return root === undefined ? item : item[root]; + }, + + + createValueMatcher : function() { + var me = this, + value = me.value, + anyMatch = me.anyMatch, + exactMatch = me.exactMatch, + caseSensitive = me.caseSensitive, + escapeRe = Ext.String.escapeRegex; + + if (value === null) { + return value; + } + + if (!value.exec) { + value = String(value); + + if (anyMatch === true) { + value = escapeRe(value); + } else { + value = '^' + escapeRe(value); + if (exactMatch === true) { + value += '$'; + } + } + value = new RegExp(value, caseSensitive ? '' : 'i'); + } + + return value; + }, + + serialize: function() { + var me = this, + result = Ext.apply({}, me.initialConfig); + + result.value = me.value; + return result; + } +}, function() { + + this.prototype.operatorFns['=='] = this.prototype.operatorFns['=']; +}); + + +Ext.define('Ext.util.AbstractMixedCollection', { + + + mixins: { + observable: Ext.util.Observable + }, + + + isMixedCollection: true, + + + generation: 0, + + + indexGeneration: 0, + + constructor: function(allowFunctions, keyFn) { + var me = this; + + + if (arguments.length === 1 && Ext.isObject(allowFunctions)) { + me.initialConfig = allowFunctions; + Ext.apply(me, allowFunctions); + } + + else { + me.allowFunctions = allowFunctions === true; + if (keyFn) { + me.getKey = keyFn; + } + me.initialConfig = { + allowFunctions: me.allowFunctions, + getKey: me.getKey + }; + } + + me.items = []; + me.map = {}; + me.keys = []; + me.indexMap = {}; + me.length = 0; + + + + + + + + + + me.mixins.observable.constructor.call(me); + }, + + + allowFunctions : false, + + + add : function(key, obj) { + return this.insert(this.length, key, obj); + }, + + + getKey : function(o) { + return o.id; + }, + + + replace : function(key, o) { + var me = this, + old, + index; + + if (arguments.length == 1) { + o = arguments[0]; + key = me.getKey(o); + } + old = me.map[key]; + if (typeof key == 'undefined' || key === null || typeof old == 'undefined') { + return me.add(key, o); + } + me.generation++; + index = me.indexOfKey(key); + me.items[index] = o; + me.map[key] = o; + if (me.hasListeners.replace) { + me.fireEvent('replace', key, old, o); + } + return o; + }, + + + updateKey: function(oldKey, newKey) { + var me = this, + map = me.map, + indexMap = me.indexMap, + index = me.indexOfKey(oldKey), + item; + + if (index > -1) { + item = map[oldKey]; + delete map[oldKey]; + delete indexMap[oldKey]; + map[newKey] = item; + indexMap[newKey] = index; + me.keys[index] = newKey; + me.generation++; + + } + }, + + + addAll : function(objs) { + var me = this, + key; + + if (arguments.length > 1 || Ext.isArray(objs)) { + me.insert(me.length, arguments.length > 1 ? arguments : objs); + } else { + for (key in objs) { + if (objs.hasOwnProperty(key)) { + if (me.allowFunctions || typeof objs[key] != 'function') { + me.add(key, objs[key]); + } + } + } + } + }, + + + each : function(fn, scope){ + var items = Ext.Array.push([], this.items), + i = 0, + len = items.length, + item; + + for (; i < len; i++) { + item = items[i]; + if (fn.call(scope || item, item, i, len) === false) { + break; + } + } + }, + + + eachKey : function(fn, scope){ + var keys = this.keys, + items = this.items, + i = 0, + len = keys.length; + + for (; i < len; i++) { + fn.call(scope || window, keys[i], items[i], i, len); + } + }, + + + findBy : function(fn, scope) { + var keys = this.keys, + items = this.items, + i = 0, + len = items.length; + + for (; i < len; i++) { + if (fn.call(scope || window, items[i], keys[i])) { + return items[i]; + } + } + return null; + }, + + + find : function() { + if (Ext.isDefined(Ext.global.console)) { + Ext.global.console.warn('Ext.util.MixedCollection: find has been deprecated. Use findBy instead.'); + } + return this.findBy.apply(this, arguments); + }, + + + insert : function(index, key, obj) { + if (Ext.isIterable(key)) { + return this.doInsert(index, key, obj); + } + return (obj ? this.doInsert(index, [key], [obj]) : this.doInsert(index, [key]))[0]; + }, + + + doInsert : function(index, keys, objects) { + var me = this, + itemKey, + removeIndex, + i, len = keys.length, + fireAdd = me.hasListeners.add, + syncIndices; + + + + if (objects != null) { + me.useLinearSearch = true + } + + else { + objects = keys; + keys = new Array(len); + for (i = 0; i < len; i++) { + keys[i] = this.getKey(objects[i]); + } + } + + + me.suspendEvents(); + for (i = 0; i < len; i++) { + + removeIndex = me.indexOfKey(keys[i]); + if (removeIndex !== -1) { + if (removeIndex < index) { + index--; + } + me.removeAt(removeIndex); + } + } + me.resumeEvents(); + + + syncIndices = index === me.length && me.indexGeneration === me.generation; + + + Ext.Array.insert(me.items, index, objects); + Ext.Array.insert(me.keys, index, keys); + me.length += len; + me.generation++; + if (syncIndices) { + me.indexGeneration = me.generation; + } + for (i = 0; i < len; i++, index++) { + itemKey = keys[i]; + if (itemKey != null) { + me.map[itemKey] = objects[i]; + + + if (syncIndices) { + me.indexMap[itemKey] = index; + } + } + if (fireAdd) { + me.fireEvent('add', index, objects[i], itemKey); + } + } + return objects; + }, + + + remove : function(o) { + var me = this, + removeKey, + index; + + + + + + + if (!me.useLinearSearch && (removeKey = me.getKey(o))) { + index = me.indexOfKey(removeKey); + } + + + else { + index = Ext.Array.indexOf(me.items, o); + } + + return (index === -1) ? false : me.removeAt(index); + }, + + + removeAll : function(items) { + var me = this, + i; + + if (items || me.hasListeners.remove) { + + if (items) { + for (i = items.length - 1; i >= 0; --i) { + me.remove(items[i]); + } + } else { + while (me.length) { + me.removeAt(0); + } + } + } else { + me.length = me.items.length = me.keys.length = 0; + me.map = {}; + me.indexMap = {}; + me.generation++; + me.indexGeneration = me.generation; + } + }, + + + removeAt : function(index) { + var me = this, + o, + key; + + if (index < me.length && index >= 0) { + me.length--; + o = me.items[index]; + Ext.Array.erase(me.items, index, 1); + key = me.keys[index]; + if (typeof key != 'undefined') { + delete me.map[key]; + } + Ext.Array.erase(me.keys, index, 1); + if (me.hasListeners.remove) { + me.fireEvent('remove', o, key); + } + me.generation++; + return o; + } + return false; + }, + + + removeRange : function(index, removeCount) { + var me = this, + o, + key, + i, + limit, + syncIndices, + trimming; + + if (index < me.length && index >= 0) { + if (!removeCount) { + removeCount = 1; + } + limit = Math.min(index + removeCount, me.length); + removeCount = limit - index; + + + trimming = limit === me.length; + syncIndices = trimming && me.indexGeneration === me.generation; + + + for (i = index; i < limit; i++) { + key = me.keys[i]; + if (key != null) { + delete me.map[key]; + if (syncIndices) { + delete me.indexMap[key]; + } + } + } + + o = me.items[i - 1]; + + me.length -= removeCount; + me.generation++; + if (syncIndices) { + me.indexGeneration = me.generation; + } + + + + + + if (trimming) { + me.items.length = me.keys.length = me.length; + } else { + me.items.splice(index, removeCount); + me.keys.splice(index, removeCount); + } + + + return o; + } + return false; + }, + + + removeAtKey : function(key) { + var me = this, + keys = me.keys, + i; + + + if (key == null) { + for (i = keys.length - 1; i >=0; i--) { + if (keys[i] == null) { + me.removeAt(i); + } + } + } + + else { + return me.removeAt(me.indexOfKey(key)); + } + }, + + + getCount : function() { + return this.length; + }, + + + indexOf : function(o) { + var me = this, + key; + + if (o != null) { + + + + + + if (!me.useLinearSearch && (key = me.getKey(o))) { + return this.indexOfKey(key); + } + + + return Ext.Array.indexOf(me.items, o); + } + + + return -1; + }, + + + indexOfKey : function(key) { + if (this.map[key] == null) { + return -1; + } + if (this.indexGeneration !== this.generation) { + this.rebuildIndexMap(); + } + return this.indexMap[key]; + }, + + rebuildIndexMap: function() { + var me = this, + indexMap = me.indexMap = {}, + keys = this.keys, + len = keys.length, + i; + + for (i = 0; i < len; i++) { + indexMap[keys[i]] = i; + } + me.indexGeneration = me.generation; + }, + + + get : function(key) { + var me = this, + mk = me.map[key], + item = mk !== undefined ? mk : (typeof key == 'number') ? me.items[key] : undefined; + return typeof item != 'function' || me.allowFunctions ? item : null; + }, + + + getAt : function(index) { + return this.items[index]; + }, + + + getByKey : function(key) { + return this.map[key]; + }, + + + contains : function(o) { + var me = this, + key; + + if (o != null) { + + + + + + if (!me.useLinearSearch && (key = me.getKey(o))) { + return this.map[key] != null; + } + + + return Ext.Array.indexOf(this.items, o) !== -1; + } + + return false; + }, + + + containsKey : function(key) { + return this.map[key] != null; + }, + + + clear : function() { + var me = this; + + me.length = 0; + me.items = []; + me.keys = []; + me.map = {}; + me.indexMap = {}; + + me.generation++; + me.indexGeneration = me.generation; + if (me.hasListeners.clear) { + me.fireEvent('clear'); + } + }, + + + first : function() { + return this.items[0]; + }, + + + last : function() { + return this.items[this.length - 1]; + }, + + + sum: function(property, root, start, end) { + var values = this.extractValues(property, root), + length = values.length, + sum = 0, + i; + + start = start || 0; + end = (end || end === 0) ? end : length - 1; + + for (i = start; i <= end; i++) { + sum += values[i]; + } + + return sum; + }, + + + collect: function(property, root, allowNull) { + var values = this.extractValues(property, root), + length = values.length, + hits = {}, + unique = [], + value, strValue, i; + + for (i = 0; i < length; i++) { + value = values[i]; + strValue = String(value); + + if ((allowNull || !Ext.isEmpty(value)) && !hits[strValue]) { + hits[strValue] = true; + unique.push(value); + } + } + + return unique; + }, + + + extractValues: function(property, root) { + var values = this.items; + + if (root) { + values = Ext.Array.pluck(values, root); + } + + return Ext.Array.pluck(values, property); + }, + + + hasRange: function(start, end) { + return (end < this.length); + }, + + + getRange : function(start, end){ + var me = this, + items = me.items, + range = [], + i; + + if (items.length < 1) { + return range; + } + + start = start || 0; + end = Math.min(end == null ? me.length - 1 : end, me.length - 1); + if (start <= end) { + return items.slice(start, end + 1); + } else { + for (i = start; i >= end; i--) { + range[range.length] = items[i]; + } + } + return range; + }, + + + filter : function(property, value, anyMatch, caseSensitive) { + var filters = []; + + + if (Ext.isString(property)) { + filters.push(new Ext.util.Filter({ + property : property, + value : value, + anyMatch : anyMatch, + caseSensitive: caseSensitive + })); + } else if (Ext.isArray(property) || property instanceof Ext.util.Filter) { + filters = filters.concat(property); + } + + + + + return this.filterBy(Ext.util.Filter.createFilterFn(filters)); + }, + + + filterBy : function(fn, scope) { + var me = this, + newMC = new me.self(me.initialConfig), + keys = me.keys, + items = me.items, + length = items.length, + i; + + newMC.getKey = me.getKey; + + for (i = 0; i < length; i++) { + if (fn.call(scope || me, items[i], keys[i])) { + newMC.add(keys[i], items[i]); + } + } + + return newMC; + }, + + + findIndex : function(property, value, start, anyMatch, caseSensitive){ + if(Ext.isEmpty(value, false)){ + return -1; + } + value = this.createValueMatcher(value, anyMatch, caseSensitive); + return this.findIndexBy(function(o){ + return o && value.test(o[property]); + }, null, start); + }, + + + findIndexBy : function(fn, scope, start){ + var me = this, + keys = me.keys, + items = me.items, + i = start || 0, + len = items.length; + + for (; i < len; i++) { + if (fn.call(scope || me, items[i], keys[i])) { + return i; + } + } + return -1; + }, + + + createValueMatcher : function(value, anyMatch, caseSensitive, exactMatch) { + if (!value.exec) { + var er = Ext.String.escapeRegex; + value = String(value); + + if (anyMatch === true) { + value = er(value); + } else { + value = '^' + er(value); + if (exactMatch === true) { + value += '$'; + } + } + value = new RegExp(value, caseSensitive ? '' : 'i'); + } + return value; + }, + + + clone : function() { + var me = this, + copy = new this.self(me.initialConfig); + + copy.add(me.keys, me.items); + return copy; + } +}); + + +Ext.define('Ext.util.Sorter', { + + + + + + + + + + + direction: "ASC", + + constructor: function(config) { + var me = this; + + Ext.apply(me, config); + + + me.updateSortFunction(); + }, + + + createSortFunction: function(sorterFn) { + var me = this, + direction = me.direction || "ASC", + modifier = direction.toUpperCase() == "DESC" ? -1 : 1; + + + + return function(o1, o2) { + return modifier * sorterFn.call(me, o1, o2); + }; + }, + + + defaultSorterFn: function(o1, o2) { + var me = this, + transform = me.transform, + v1 = me.getRoot(o1)[me.property], + v2 = me.getRoot(o2)[me.property]; + + if (transform) { + v1 = transform(v1); + v2 = transform(v2); + } + + return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0); + }, + + + getRoot: function(item) { + return this.root === undefined ? item : item[this.root]; + }, + + + setDirection: function(direction) { + var me = this; + me.direction = direction ? direction.toUpperCase() : direction; + me.updateSortFunction(); + }, + + + toggle: function() { + var me = this; + me.direction = Ext.String.toggle(me.direction, "ASC", "DESC"); + me.updateSortFunction(); + }, + + + updateSortFunction: function(fn) { + var me = this; + fn = fn || me.sorterFn || me.defaultSorterFn; + me.sort = me.createSortFunction(fn); + }, + + serialize: function() { + return { + root: this.root, + property: this.property, + direction: this.direction + }; + } +}); + + +Ext.define("Ext.util.Sortable", { + + isSortable: true, + + + defaultSortDirection: "ASC", + + + + + + statics: { + + createComparator: function(sorters) { + return sorters && sorters.length ? function(r1, r2) { + var result = sorters[0].sort(r1, r2), + length = sorters.length, + i = 1; + + + for (; i < length; i++) { + result = result || sorters[i].sort.call(this, r1, r2); + } + return result; + }: function() { + return 0; + }; + } + }, + + + + + + + initSortable: function() { + var me = this, + sorters = me.sorters; + + + me.sorters = new Ext.util.AbstractMixedCollection(false, function(item) { + return item.id || item.property; + }); + + if (sorters) { + me.sorters.addAll(me.decodeSorters(sorters)); + } + }, + + + sort: function(sorters, direction, where, doSort) { + var me = this, + sorter, + newSorters; + + if (Ext.isArray(sorters)) { + doSort = where; + where = direction; + newSorters = sorters; + } + else if (Ext.isObject(sorters)) { + doSort = where; + where = direction; + newSorters = [sorters]; + } + else if (Ext.isString(sorters)) { + sorter = me.sorters.get(sorters); + + if (!sorter) { + sorter = { + property : sorters, + direction: direction + }; + newSorters = [sorter]; + } + else if (direction === undefined) { + sorter.toggle(); + } + else { + sorter.setDirection(direction); + } + } + + if (newSorters && newSorters.length) { + newSorters = me.decodeSorters(newSorters); + if (Ext.isString(where)) { + if (where === 'prepend') { + me.sorters.insert(0, newSorters); + } + else { + me.sorters.addAll(newSorters); + } + } + else { + me.sorters.clear(); + me.sorters.addAll(newSorters); + } + } + + if (doSort !== false) { + me.fireEvent('beforesort', me, newSorters); + me.onBeforeSort(newSorters); + + sorters = me.sorters.items; + if (sorters.length) { + + me.doSort(me.generateComparator()); + } + } + + return sorters; + }, + + + generateComparator: function() { + var sorters = this.sorters.getRange(); + return sorters.length ? this.createComparator(sorters) : this.emptyComparator; + }, + + emptyComparator: function(){ + return 0; + }, + + onBeforeSort: Ext.emptyFn, + + + decodeSorters: function(sorters) { + if (!Ext.isArray(sorters)) { + if (sorters === undefined) { + sorters = []; + } else { + sorters = [sorters]; + } + } + + var length = sorters.length, + Sorter = Ext.util.Sorter, + fields = this.model ? this.model.prototype.fields : null, + field, + config, i; + + for (i = 0; i < length; i++) { + config = sorters[i]; + + if (!(config instanceof Sorter)) { + if (Ext.isString(config)) { + config = { + property: config + }; + } + + Ext.applyIf(config, { + root : this.sortRoot, + direction: "ASC" + }); + + + if (config.fn) { + config.sorterFn = config.fn; + } + + + if (typeof config == 'function') { + config = { + sorterFn: config + }; + } + + + if (fields && !config.transform) { + field = fields.get(config.property); + config.transform = field && field.sortType !== Ext.identityFn ? field.sortType : undefined; + } + sorters[i] = new Ext.util.Sorter(config); + } + } + + return sorters; + }, + + getSorters: function() { + return this.sorters.items; + }, + + + getFirstSorter: function(){ + var sorters = this.sorters.items, + len = sorters.length, + i = 0, + sorter; + + for (; i < len; ++i) { + sorter = sorters[i]; + if (!sorter.isGrouper) { + return sorter; + } + } + return null; + } +}, function() { + + this.prototype.createComparator = this.createComparator; +}); + + +Ext.define('Ext.util.MixedCollection', { + extend: Ext.util.AbstractMixedCollection , + mixins: { + sortable: Ext.util.Sortable + }, + + + + + constructor: function() { + var me = this; + me.callParent(arguments); + me.addEvents('sort'); + me.mixins.sortable.initSortable.call(me); + }, + + doSort: function(sorterFn) { + this.sortBy(sorterFn); + }, + + + _sort : function(property, dir, fn) { + var me = this, + i, len, + dsc = String(dir).toUpperCase() == 'DESC' ? -1 : 1, + + + c = [], + keys = me.keys, + items = me.items, + o; + + + fn = fn || function(a, b) { + return a - b; + }; + + + for (i = 0, len = items.length; i < len; i++) { + c[c.length] = { + key : keys[i], + value: items[i], + index: i + }; + } + + + Ext.Array.sort(items, function(a, b) { + return fn(a[property], b[property]) * dsc || + + (a.index < b.index ? -1 : 1); + }); + + + + for (i = 0, len = c.length; i < len; i++) { + o = c[i]; + items[i] = o.value; + keys[i] = o.key; + me.indexMap[o.key] = i; + } + me.generation++; + me.indexGeneration = me.generation; + me.fireEvent('sort', me); + }, + + + sortBy: function(sorterFn) { + var me = this, + items = me.items, + item, + keys = me.keys, + key, + length = items.length, + i; + + + for (i = 0; i < length; i++) { + items[i].$extCollectionIndex = i; + } + + Ext.Array.sort(items, function(a, b) { + return sorterFn(a, b) || + + (a.$extCollectionIndex < b.$extCollectionIndex ? -1 : 1); + }); + + + for (i = 0; i < length; i++) { + item = items[i]; + key = me.getKey(item); + keys[i] = key; + me.indexMap[key] = i; + delete items.$extCollectionIndex; + } + me.generation++; + me.indexGeneration = me.generation; + me.fireEvent('sort', me, items, keys); + }, + + + findInsertionIndex: function(newItem, sorterFn) { + var me = this, + items = me.items, + start = 0, + end = items.length - 1, + middle, + comparison; + + if (!sorterFn) { + sorterFn = me.generateComparator(); + } + while (start <= end) { + middle = (start + end) >> 1; + comparison = sorterFn(newItem, items[middle]); + if (comparison >= 0) { + start = middle + 1; + } else if (comparison < 0) { + end = middle - 1; + } + } + return start; + }, + + + reorder: function(mapping) { + var me = this, + items = me.items, + index = 0, + length = items.length, + order = [], + remaining = [], + oldIndex; + + me.suspendEvents(); + + + for (oldIndex in mapping) { + order[mapping[oldIndex]] = items[oldIndex]; + } + + for (index = 0; index < length; index++) { + if (mapping[index] == undefined) { + remaining.push(items[index]); + } + } + + for (index = 0; index < length; index++) { + if (order[index] == undefined) { + order[index] = remaining.shift(); + } + } + + me.clear(); + me.addAll(order); + + me.resumeEvents(); + me.fireEvent('sort', me); + }, + + + sortByKey : function(dir, fn){ + this._sort('key', dir, fn || function(a, b){ + var v1 = String(a).toUpperCase(), v2 = String(b).toUpperCase(); + return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0); + }); + } +}); + + +Ext.define('Ext.fx.target.Target', { + + isAnimTarget: true, + + + constructor: function(target) { + this.target = target; + this.id = this.getId(); + }, + + getId: function() { + return this.target.id; + } +}); + + +Ext.define('Ext.fx.target.Element', { + + + + extend: Ext.fx.target.Target , + + + + type: 'element', + + getElVal: function(el, attr, val) { + if (val == undefined) { + if (attr === 'x') { + val = el.getX(); + } else if (attr === 'y') { + val = el.getY(); + } else if (attr === 'scrollTop') { + val = el.getScroll().top; + } else if (attr === 'scrollLeft') { + val = el.getScroll().left; + } else if (attr === 'height') { + val = el.getHeight(); + } else if (attr === 'width') { + val = el.getWidth(); + } else { + val = el.getStyle(attr); + } + } + return val; + }, + + getAttr: function(attr, val) { + var el = this.target; + return [[ el, this.getElVal(el, attr, val)]]; + }, + + setAttr: function(targetData) { + var target = this.target, + ln = targetData.length, + attrs, attr, o, i, j, ln2; + + for (i = 0; i < ln; i++) { + attrs = targetData[i].attrs; + for (attr in attrs) { + if (attrs.hasOwnProperty(attr)) { + ln2 = attrs[attr].length; + for (j = 0; j < ln2; j++) { + o = attrs[attr][j]; + this.setElVal(o[0], attr, o[1]); + } + } + } + } + }, + + setElVal: function(element, attr, value){ + if (attr === 'x') { + element.setX(value); + } else if (attr === 'y') { + element.setY(value); + } else if (attr === 'scrollTop') { + element.scrollTo('top', value); + } else if (attr === 'scrollLeft') { + element.scrollTo('left',value); + } else if (attr === 'width') { + element.setWidth(value); + } else if (attr === 'height') { + element.setHeight(value); + } else { + element.setStyle(attr, value); + } + } +}); + + +Ext.define('Ext.fx.target.ElementCSS', { + + + + extend: Ext.fx.target.Element , + + + + setAttr: function(targetData, isFirstFrame) { + var cssArr = { + attrs: [], + duration: [], + easing: [] + }, + ln = targetData.length, + attributes, + attrs, + attr, + easing, + duration, + o, + i, + j, + ln2; + for (i = 0; i < ln; i++) { + attrs = targetData[i]; + duration = attrs.duration; + easing = attrs.easing; + attrs = attrs.attrs; + for (attr in attrs) { + if (Ext.Array.indexOf(cssArr.attrs, attr) == -1) { + cssArr.attrs.push(attr.replace(/[A-Z]/g, function(v) { + return '-' + v.toLowerCase(); + })); + cssArr.duration.push(duration + 'ms'); + cssArr.easing.push(easing); + } + } + } + attributes = cssArr.attrs.join(','); + duration = cssArr.duration.join(','); + easing = cssArr.easing.join(', '); + for (i = 0; i < ln; i++) { + attrs = targetData[i].attrs; + for (attr in attrs) { + ln2 = attrs[attr].length; + for (j = 0; j < ln2; j++) { + o = attrs[attr][j]; + o[0].setStyle(Ext.supports.CSS3Prefix + 'TransitionProperty', isFirstFrame ? '' : attributes); + o[0].setStyle(Ext.supports.CSS3Prefix + 'TransitionDuration', isFirstFrame ? '' : duration); + o[0].setStyle(Ext.supports.CSS3Prefix + 'TransitionTimingFunction', isFirstFrame ? '' : easing); + o[0].setStyle(attr, o[1]); + + + if (isFirstFrame) { + o = o[0].dom.offsetWidth; + } + else { + + o[0].on(Ext.supports.CSS3TransitionEnd, function() { + this.setStyle(Ext.supports.CSS3Prefix + 'TransitionProperty', null); + this.setStyle(Ext.supports.CSS3Prefix + 'TransitionDuration', null); + this.setStyle(Ext.supports.CSS3Prefix + 'TransitionTimingFunction', null); + }, o[0], { single: true }); + } + } + } + } + } +}); + + +Ext.define('Ext.fx.target.CompositeElement', { + + + + extend: Ext.fx.target.Element , + + + + + isComposite: true, + + constructor: function(target) { + target.id = target.id || Ext.id(null, 'ext-composite-'); + this.callParent([target]); + }, + + getAttr: function(attr, val) { + var out = [], + target = this.target, + elements = target.elements, + length = elements.length, + i, + el; + + for (i = 0; i < length; i++) { + el = elements[i]; + + if (el) { + el = target.getElement(el); + out.push([el, this.getElVal(el, attr, val)]); + } + } + + return out; + }, + + setAttr: function(targetData){ + var target = this.target, + ln = targetData.length, + elements = target.elements, + ln3 = elements.length, + value, k, + attrs, attr, o, i, j, ln2; + + for (i = 0; i < ln; i++) { + attrs = targetData[i].attrs; + for (attr in attrs) { + if (attrs.hasOwnProperty(attr)) { + ln2 = attrs[attr].length; + for (j = 0; j < ln2; j++) { + value = attrs[attr][j][1]; + for (k = 0; k < ln3; ++k) { + el = elements[k]; + if (el) { + el = target.getElement(el); + this.setElVal(el, attr, value); + } + } + } + } + } + } + } +}); + + +Ext.define('Ext.fx.target.CompositeElementCSS', { + + + + extend: Ext.fx.target.CompositeElement , + + + + + setAttr: function() { + return Ext.fx.target.ElementCSS.prototype.setAttr.apply(this, arguments); + } +}); + + + +Ext.define('Ext.fx.target.Sprite', { + + + + extend: Ext.fx.target.Target , + + + + type: 'draw', + + getFromPrim: function (sprite, attr) { + var obj; + switch (attr) { + case 'rotate': + case 'rotation': + obj = sprite.attr.rotation; + return { + x: obj.x || 0, + y: obj.y || 0, + degrees: obj.degrees || 0 + }; + case 'scale': + case 'scaling': + obj = sprite.attr.scaling; + return { + x: obj.x || 1, + y: obj.y || 1, + cx: obj.cx || 0, + cy: obj.cy || 0 + }; + case 'translate': + case 'translation': + obj = sprite.attr.translation; + return { + x: obj.x || 0, + y: obj.y || 0 + }; + default: + return sprite.attr[attr]; + } + }, + + getAttr: function (attr, val) { + return [ + [this.target, val != undefined ? val : this.getFromPrim(this.target, attr)] + ]; + }, + + setAttr: function (targetData) { + var ln = targetData.length, + spriteArr = [], + attrsConf, attr, attrArr, attrs, sprite, idx, value, i, j, x, y, ln2; + for (i = 0; i < ln; i++) { + attrsConf = targetData[i].attrs; + for (attr in attrsConf) { + attrArr = attrsConf[attr]; + ln2 = attrArr.length; + for (j = 0; j < ln2; j++) { + sprite = attrArr[j][0]; + attrs = attrArr[j][1]; + if (attr === 'translate' || attr === 'translation') { + value = { + x: attrs.x, + y: attrs.y + }; + } + else if (attr === 'rotate' || attr === 'rotation') { + x = attrs.x; + if (isNaN(x)) { + x = null; + } + y = attrs.y; + if (isNaN(y)) { + y = null; + } + value = { + degrees: attrs.degrees, + x: x, + y: y + }; + } else if (attr === 'scale' || attr === 'scaling') { + x = attrs.x; + if (isNaN(x)) { + x = null; + } + y = attrs.y; + if (isNaN(y)) { + y = null; + } + value = { + x: x, + y: y, + cx: attrs.cx, + cy: attrs.cy + }; + } + else if (attr === 'width' || attr === 'height' || attr === 'x' || attr === 'y') { + value = parseFloat(attrs); + } + else { + value = attrs; + } + idx = Ext.Array.indexOf(spriteArr, sprite); + if (idx == -1) { + spriteArr.push([sprite, {}]); + idx = spriteArr.length - 1; + } + spriteArr[idx][1][attr] = value; + } + } + } + ln = spriteArr.length; + for (i = 0; i < ln; i++) { + spriteArr[i][0].setAttributes(spriteArr[i][1]); + } + this.target.redraw(); + } +}); + + + +Ext.define('Ext.fx.target.CompositeSprite', { + + + + extend: Ext.fx.target.Sprite , + + + + getAttr: function(attr, val) { + var out = [], + sprites = [].concat(this.target.items), + length = sprites.length, + i, + sprite; + + for (i = 0; i < length; i++) { + sprite = sprites[i]; + out.push([sprite, val != undefined ? val : this.getFromPrim(sprite, attr)]); + } + + return out; + } +}); + + +Ext.define('Ext.fx.target.Component', { + + + + extend: Ext.fx.target.Target , + + + + type: 'component', + + + getPropMethod: { + top: function() { + return this.getPosition(true)[1]; + }, + left: function() { + return this.getPosition(true)[0]; + }, + x: function() { + return this.getPosition()[0]; + }, + y: function() { + return this.getPosition()[1]; + }, + height: function() { + return this.getHeight(); + }, + width: function() { + return this.getWidth(); + }, + opacity: function() { + return this.el.getStyle('opacity'); + } + }, + + setMethods: { + top: 'setPosition', + left: 'setPosition', + x: 'setPagePosition', + y: 'setPagePosition', + height: 'setSize', + width: 'setSize', + opacity: 'setOpacity' + }, + + + getAttr: function(attr, val) { + return [[this.target, val !== undefined ? val : this.getPropMethod[attr].call(this.target)]]; + }, + + setAttr: function(targetData, isFirstFrame, isLastFrame) { + var me = this, + ln = targetData.length, + attrs, attr, o, i, j, targets, left, top, w, h, + methodsToCall = {}, + methodProps; + + for (i = 0; i < ln; i++) { + attrs = targetData[i].attrs; + for (attr in attrs) { + targets = attrs[attr].length; + for (j = 0; j < targets; j++) { + o = attrs[attr][j]; + methodProps = methodsToCall[me.setMethods[attr]] || (methodsToCall[me.setMethods[attr]] = {}); + methodProps.target = o[0]; + methodProps[attr] = o[1]; + + } + } + if (methodsToCall.setPosition) { + o = methodsToCall.setPosition; + left = (o.left === undefined) ? undefined : parseFloat(o.left); + top = (o.top === undefined) ? undefined : parseFloat(o.top); + o.target.setPosition(left, top); + } + if (methodsToCall.setPagePosition) { + o = methodsToCall.setPagePosition; + o.target.setPagePosition(o.x, o.y); + } + if (methodsToCall.setSize) { + o = methodsToCall.setSize; + + w = (o.width === undefined) ? o.target.getWidth() : parseFloat(o.width); + h = (o.height === undefined) ? o.target.getHeight() : parseFloat(o.height); + + + + + + + + + o.target.el.setSize(w, h); + if (isLastFrame || me.dynamic) { + + + + Ext.globalEvents.on({ + idle: Ext.Function.bind(o.target.setSize, o.target, [w, h]), + single: true + }); + } + } + if (methodsToCall.setOpacity) { + o = methodsToCall.setOpacity; + o.target.el.setStyle('opacity', o.opacity); + } + } + } +}); + + + +Ext.define('Ext.fx.Queue', { + + + + constructor: function() { + this.targets = new Ext.util.HashMap(); + this.fxQueue = {}; + }, + + + getFxDefaults: function(targetId) { + var target = this.targets.get(targetId); + if (target) { + return target.fxDefaults; + } + return {}; + }, + + + setFxDefaults: function(targetId, obj) { + var target = this.targets.get(targetId); + if (target) { + target.fxDefaults = Ext.apply(target.fxDefaults || {}, obj); + } + }, + + + stopAnimation: function(targetId) { + var me = this, + queue = me.getFxQueue(targetId), + ln = queue.length; + while (ln) { + queue[ln - 1].end(); + ln--; + } + }, + + + getActiveAnimation: function(targetId) { + var queue = this.getFxQueue(targetId); + return (queue && !!queue.length) ? queue[0] : false; + }, + + + hasFxBlock: function(targetId) { + var queue = this.getFxQueue(targetId); + return queue && queue[0] && queue[0].block; + }, + + + getFxQueue: function(targetId) { + if (!targetId) { + return false; + } + var me = this, + queue = me.fxQueue[targetId], + target = me.targets.get(targetId); + + if (!target) { + return false; + } + + if (!queue) { + me.fxQueue[targetId] = []; + + if (target.type != 'element') { + target.target.on('destroy', function() { + me.fxQueue[targetId] = []; + }); + } + } + return me.fxQueue[targetId]; + }, + + + queueFx: function(anim) { + var me = this, + target = anim.target, + queue, ln; + + if (!target) { + return; + } + + queue = me.getFxQueue(target.getId()); + ln = queue.length; + + if (ln) { + if (anim.concurrent) { + anim.paused = false; + } + else { + queue[ln - 1].on('afteranimate', function() { + anim.paused = false; + }); + } + } + else { + anim.paused = false; + } + anim.on('afteranimate', function() { + Ext.Array.remove(queue, anim); + if (anim.remove) { + if (target.type == 'element') { + var el = Ext.get(target.id); + if (el) { + el.remove(); + } + } + } + }, this); + queue.push(anim); + } +}); + + + +Ext.define('Ext.fx.Manager', { + + + + singleton: true, + + + + + + + + + + + mixins: { + queue: Ext.fx.Queue + }, + + + + constructor: function() { + var me = this; + me.items = new Ext.util.MixedCollection(); + me.mixins.queue.constructor.call(me); + + + + me.taskRunner = new Ext.util.TaskRunner(); + + + + + + + + + + + + + + + + + + + }, + + + interval: 16, + + + forceJS: true, + + + createTarget: function(target) { + var me = this, + useCSS3 = !me.forceJS && Ext.supports.Transitions, + targetObj; + + me.useCSS3 = useCSS3; + + if (target) { + + if (target.tagName || Ext.isString(target) || target.isFly) { + target = Ext.get(target); + targetObj = new Ext.fx.target['Element' + (useCSS3 ? 'CSS' : '')](target); + } + + else if (target.dom) { + targetObj = new Ext.fx.target['Element' + (useCSS3 ? 'CSS' : '')](target); + } + + else if (target.isComposite) { + targetObj = new Ext.fx.target['CompositeElement' + (useCSS3 ? 'CSS' : '')](target); + } + + else if (target.isSprite) { + targetObj = new Ext.fx.target.Sprite(target); + } + + else if (target.isCompositeSprite) { + targetObj = new Ext.fx.target.CompositeSprite(target); + } + + else if (target.isComponent) { + targetObj = new Ext.fx.target.Component(target); + } + else if (target.isAnimTarget) { + return target; + } + else { + return null; + } + me.targets.add(targetObj); + return targetObj; + } + else { + return null; + } + }, + + + addAnim: function(anim) { + var me = this, + items = me.items, + task = me.task; + + + + + items.add(anim.id, anim); + + + + if (!task && items.length) { + task = me.task = { + run: me.runner, + interval: me.interval, + scope: me + }; + + me.taskRunner.start(task); + } + }, + + + removeAnim: function(anim) { + var me = this, + items = me.items, + task = me.task; + + items.removeAtKey(anim.id); + + + + if (task && !items.length) { + + me.taskRunner.stop(task); + delete me.task; + } + }, + + + runner: function() { + var me = this, + items = me.items.getRange(), + i = 0, + len = items.length, + anim; + + + me.targetArr = {}; + + + me.timestamp = new Date(); + + + + + + + + + + + + for (; i < len; i++) { + anim = items[i]; + + if (anim.isReady()) { + + me.startAnim(anim); + } + } + + for (i = 0; i < len; i++) { + anim = items[i]; + + if (anim.isRunning()) { + + me.runAnim(anim); + } + } + + + me.applyPendingAttrs(); + }, + + + startAnim: function(anim) { + anim.start(this.timestamp); + }, + + + runAnim: function(anim) { + if (!anim) { + return; + } + var me = this, + useCSS3 = me.useCSS3 && anim.target.type == 'element', + elapsedTime = me.timestamp - anim.startTime, + lastFrame = (elapsedTime >= anim.duration), + target, o; + + target = this.collectTargetData(anim, elapsedTime, useCSS3, lastFrame); + + + + if (useCSS3) { + + + + anim.target.setAttr(target.anims[anim.id].attributes, true); + + + me.collectTargetData(anim, anim.duration, useCSS3, lastFrame); + + + anim.paused = true; + + target = anim.target.target; + + if (anim.target.isComposite) { + target = anim.target.target.last(); + } + + + o = {}; + o[Ext.supports.CSS3TransitionEnd] = anim.lastFrame; + o.scope = anim; + o.single = true; + target.on(o); + } + }, + + + collectTargetData: function(anim, elapsedTime, useCSS3, isLastFrame) { + var targetId = anim.target.getId(), + target = this.targetArr[targetId]; + + if (!target) { + + + + + target = this.targetArr[targetId] = { + id: targetId, + el: anim.target, + anims: {} + }; + } + + + + + + target.anims[anim.id] = { + id: anim.id, + anim: anim, + elapsed: elapsedTime, + isLastFrame: isLastFrame, + + attributes: [{ + duration: anim.duration, + easing: (useCSS3 && anim.reverse) ? anim.easingFn.reverse().toCSS3() : anim.easing, + + + attrs: anim.runAnim(elapsedTime) + }] + }; + + return target; + }, + + + applyPendingAttrs: function() { + var targetArr = this.targetArr, + target, targetId, animWrap, anim, animId; + + + for (targetId in targetArr) { + if (targetArr.hasOwnProperty(targetId)) { + target = targetArr[targetId]; + + + for (animId in target.anims) { + if (target.anims.hasOwnProperty(animId)) { + animWrap = target.anims[animId]; + anim = animWrap.anim; + + + if (animWrap.attributes && anim.isRunning()) { + + target.el.setAttr(animWrap.attributes, false, animWrap.isLastFrame); + + + if (animWrap.isLastFrame) { + + anim.lastFrame(); + } + } + } + } + } + } + } +}); + + +Ext.define('Ext.fx.Animator', { + + + + mixins: { + observable: Ext.util.Observable + }, + + + + + + + isAnimator: true, + + + duration: 250, + + + delay: 0, + + + delayStart: 0, + + + dynamic: false, + + + easing: 'ease', + + + running: false, + + + paused: false, + + + damper: 1, + + + iterations: 1, + + + currentIteration: 0, + + + keyframeStep: 0, + + + animKeyFramesRE: /^(from|to|\d+%?)$/, + + + + + constructor: function(config) { + var me = this; + config = Ext.apply(me, config || {}); + me.config = config; + me.id = Ext.id(null, 'ext-animator-'); + me.addEvents( + + 'beforeanimate', + + 'keyframe', + + 'afteranimate' + ); + me.mixins.observable.constructor.call(me, config); + me.timeline = []; + me.createTimeline(me.keyframes); + if (me.target) { + me.applyAnimator(me.target); + Ext.fx.Manager.addAnim(me); + } + }, + + + sorter: function (a, b) { + return a.pct - b.pct; + }, + + + createTimeline: function(keyframes) { + var me = this, + attrs = [], + to = me.to || {}, + duration = me.duration, + prevMs, ms, i, ln, pct, attr; + + for (pct in keyframes) { + if (keyframes.hasOwnProperty(pct) && me.animKeyFramesRE.test(pct)) { + attr = {attrs: Ext.apply(keyframes[pct], to)}; + + if (pct == "from") { + pct = 0; + } + else if (pct == "to") { + pct = 100; + } + + attr.pct = parseInt(pct, 10); + attrs.push(attr); + } + } + + Ext.Array.sort(attrs, me.sorter); + + + + + + ln = attrs.length; + for (i = 0; i < ln; i++) { + prevMs = (attrs[i - 1]) ? duration * (attrs[i - 1].pct / 100) : 0; + ms = duration * (attrs[i].pct / 100); + me.timeline.push({ + duration: ms - prevMs, + attrs: attrs[i].attrs + }); + } + }, + + + applyAnimator: function(target) { + var me = this, + anims = [], + timeline = me.timeline, + ln = timeline.length, + anim, easing, damper, attrs, i; + + if (me.fireEvent('beforeanimate', me) !== false) { + for (i = 0; i < ln; i++) { + anim = timeline[i]; + attrs = anim.attrs; + easing = attrs.easing || me.easing; + damper = attrs.damper || me.damper; + delete attrs.easing; + delete attrs.damper; + anim = new Ext.fx.Anim({ + target: target, + easing: easing, + damper: damper, + duration: anim.duration, + paused: true, + to: attrs + }); + anims.push(anim); + } + me.animations = anims; + me.target = anim.target; + for (i = 0; i < ln - 1; i++) { + anim = anims[i]; + anim.nextAnim = anims[i + 1]; + anim.on('afteranimate', function() { + this.nextAnim.paused = false; + }); + anim.on('afteranimate', function() { + this.fireEvent('keyframe', this, ++this.keyframeStep); + }, me); + } + anims[ln - 1].on('afteranimate', function() { + this.lastFrame(); + }, me); + } + }, + + + start: function(startTime) { + var me = this, + delay = me.delay, + delayStart = me.delayStart, + delayDelta; + if (delay) { + if (!delayStart) { + me.delayStart = startTime; + return; + } + else { + delayDelta = startTime - delayStart; + if (delayDelta < delay) { + return; + } + else { + + startTime = new Date(delayStart.getTime() + delay); + } + } + } + if (me.fireEvent('beforeanimate', me) !== false) { + me.startTime = startTime; + me.running = true; + me.animations[me.keyframeStep].paused = false; + } + }, + + + lastFrame: function() { + var me = this, + iter = me.iterations, + iterCount = me.currentIteration; + + iterCount++; + if (iterCount < iter) { + me.startTime = new Date(); + me.currentIteration = iterCount; + me.keyframeStep = 0; + me.applyAnimator(me.target); + me.animations[me.keyframeStep].paused = false; + } + else { + me.currentIteration = 0; + me.end(); + } + }, + + + end: function() { + var me = this; + me.fireEvent('afteranimate', me, me.startTime, new Date() - me.startTime); + }, + + isReady: function() { + return this.paused === false && this.running === false && this.iterations > 0; + }, + + isRunning: function() { + + return false; + } +}); + + +Ext.define('Ext.fx.CubicBezier', { + + + + singleton: true, + + + + cubicBezierAtTime: function(t, p1x, p1y, p2x, p2y, duration) { + var cx = 3 * p1x, + bx = 3 * (p2x - p1x) - cx, + ax = 1 - cx - bx, + cy = 3 * p1y, + by = 3 * (p2y - p1y) - cy, + ay = 1 - cy - by; + function sampleCurveX(t) { + return ((ax * t + bx) * t + cx) * t; + } + function solve(x, epsilon) { + var t = solveCurveX(x, epsilon); + return ((ay * t + by) * t + cy) * t; + } + function solveCurveX(x, epsilon) { + var t0, t1, t2, x2, d2, i; + for (t2 = x, i = 0; i < 8; i++) { + x2 = sampleCurveX(t2) - x; + if (Math.abs(x2) < epsilon) { + return t2; + } + d2 = (3 * ax * t2 + 2 * bx) * t2 + cx; + if (Math.abs(d2) < 1e-6) { + break; + } + t2 = t2 - x2 / d2; + } + t0 = 0; + t1 = 1; + t2 = x; + if (t2 < t0) { + return t0; + } + if (t2 > t1) { + return t1; + } + while (t0 < t1) { + x2 = sampleCurveX(t2); + if (Math.abs(x2 - x) < epsilon) { + return t2; + } + if (x > x2) { + t0 = t2; + } else { + t1 = t2; + } + t2 = (t1 - t0) / 2 + t0; + } + return t2; + } + return solve(t, 1 / (200 * duration)); + }, + + cubicBezier: function(x1, y1, x2, y2) { + var fn = function(pos) { + return Ext.fx.CubicBezier.cubicBezierAtTime(pos, x1, y1, x2, y2, 1); + }; + fn.toCSS3 = function() { + return 'cubic-bezier(' + [x1, y1, x2, y2].join(',') + ')'; + }; + fn.reverse = function() { + return Ext.fx.CubicBezier.cubicBezier(1 - x2, 1 - y2, 1 - x1, 1 - y1); + }; + return fn; + } +}); + +//@define Ext.fx.Easing + + + +Ext.require('Ext.fx.CubicBezier', function() { + var math = Math, + pi = math.PI, + pow = math.pow, + sin = math.sin, + sqrt = math.sqrt, + abs = math.abs, + backInSeed = 1.70158; + + Ext.define('Ext.fx.Easing', { + singleton: true, + + linear: Ext.identityFn, + ease: function(n) { + var q = 0.07813 - n / 2, + alpha = -0.25, + Q = sqrt(0.0066 + q * q), + x = Q - q, + X = pow(abs(x), 1/3) * (x < 0 ? -1 : 1), + y = -Q - q, + Y = pow(abs(y), 1/3) * (y < 0 ? -1 : 1), + t = X + Y + 0.25; + return pow(1 - t, 2) * 3 * t * 0.1 + (1 - t) * 3 * t * t + t * t * t; + }, + easeIn: function (n) { + return pow(n, 1.7); + }, + easeOut: function (n) { + return pow(n, 0.48); + }, + easeInOut: function(n) { + var q = 0.48 - n / 1.04, + Q = sqrt(0.1734 + q * q), + x = Q - q, + X = pow(abs(x), 1/3) * (x < 0 ? -1 : 1), + y = -Q - q, + Y = pow(abs(y), 1/3) * (y < 0 ? -1 : 1), + t = X + Y + 0.5; + return (1 - t) * 3 * t * t + t * t * t; + }, + backIn: function (n) { + return n * n * ((backInSeed + 1) * n - backInSeed); + }, + backOut: function (n) { + n = n - 1; + return n * n * ((backInSeed + 1) * n + backInSeed) + 1; + }, + elasticIn: function (n) { + if (n === 0 || n === 1) { + return n; + } + var p = 0.3, + s = p / 4; + return pow(2, -10 * n) * sin((n - s) * (2 * pi) / p) + 1; + }, + elasticOut: function (n) { + return 1 - Ext.fx.Easing.elasticIn(1 - n); + }, + bounceIn: function (n) { + return 1 - Ext.fx.Easing.bounceOut(1 - n); + }, + bounceOut: function (n) { + var s = 7.5625, + p = 2.75, + l; + if (n < (1 / p)) { + l = s * n * n; + } else { + if (n < (2 / p)) { + n -= (1.5 / p); + l = s * n * n + 0.75; + } else { + if (n < (2.5 / p)) { + n -= (2.25 / p); + l = s * n * n + 0.9375; + } else { + n -= (2.625 / p); + l = s * n * n + 0.984375; + } + } + } + return l; + } + }, function(){ + var easing = Ext.fx.Easing.self, + proto = easing.prototype; + + easing.implement({ + 'back-in': proto.backIn, + 'back-out': proto.backOut, + 'ease-in': proto.easeIn, + 'ease-out': proto.easeOut, + 'elastic-in': proto.elasticIn, + 'elastic-out': proto.elasticOut, + 'bounce-in': proto.bounceIn, + 'bounce-out': proto.bounceOut, + 'ease-in-out': proto.easeInOut + }); + }); +}); + + +Ext.define('Ext.draw.Color', { + + + + + + colorToHexRe: /(.*?)rgb\((\d+),\s*(\d+),\s*(\d+)\)/, + rgbRe: /\s*rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)\s*/, + hexRe: /\s*#([0-9a-fA-F][0-9a-fA-F]?)([0-9a-fA-F][0-9a-fA-F]?)([0-9a-fA-F][0-9a-fA-F]?)\s*/, + + + lightnessFactor: 0.2, + + + constructor : function(red, green, blue) { + var me = this, + clamp = Ext.Number.constrain; + me.r = clamp(red, 0, 255); + me.g = clamp(green, 0, 255); + me.b = clamp(blue, 0, 255); + }, + + + getRed: function() { + return this.r; + }, + + + getGreen: function() { + return this.g; + }, + + + getBlue: function() { + return this.b; + }, + + + getRGB: function() { + var me = this; + return [me.r, me.g, me.b]; + }, + + + getHSL: function() { + var me = this, + r = me.r / 255, + g = me.g / 255, + b = me.b / 255, + max = Math.max(r, g, b), + min = Math.min(r, g, b), + delta = max - min, + h, + s = 0, + l = 0.5 * (max + min); + + + if (min != max) { + s = (l < 0.5) ? delta / (max + min) : delta / (2 - max - min); + if (r == max) { + h = 60 * (g - b) / delta; + } else if (g == max) { + h = 120 + 60 * (b - r) / delta; + } else { + h = 240 + 60 * (r - g) / delta; + } + if (h < 0) { + h += 360; + } + if (h >= 360) { + h -= 360; + } + } + return [h, s, l]; + }, + + + getLighter: function(factor) { + var hsl = this.getHSL(); + factor = factor || this.lightnessFactor; + hsl[2] = Ext.Number.constrain(hsl[2] + factor, 0, 1); + return this.fromHSL(hsl[0], hsl[1], hsl[2]); + }, + + + getDarker: function(factor) { + factor = factor || this.lightnessFactor; + return this.getLighter(-factor); + }, + + + toString: function() { + var me = this, + round = Math.round, + r = round(me.r).toString(16), + g = round(me.g).toString(16), + b = round(me.b).toString(16); + r = (r.length == 1) ? '0' + r : r; + g = (g.length == 1) ? '0' + g : g; + b = (b.length == 1) ? '0' + b : b; + return ['#', r, g, b].join(''); + }, + + + toHex: function(color) { + if (Ext.isArray(color)) { + color = color[0]; + } + if (!Ext.isString(color)) { + return ''; + } + if (color.substr(0, 1) === '#') { + return color; + } + var digits = this.colorToHexRe.exec(color), + red, + green, + blue, + rgb; + + if (Ext.isArray(digits)) { + red = parseInt(digits[2], 10); + green = parseInt(digits[3], 10); + blue = parseInt(digits[4], 10); + rgb = blue | (green << 8) | (red << 16); + return digits[1] + '#' + ("000000" + rgb.toString(16)).slice(-6); + } + else { + return color; + } + }, + + + fromString: function(str) { + var values, r, g, b, + parse = parseInt; + + if ((str.length == 4 || str.length == 7) && str.substr(0, 1) === '#') { + values = str.match(this.hexRe); + if (values) { + r = parse(values[1], 16) >> 0; + g = parse(values[2], 16) >> 0; + b = parse(values[3], 16) >> 0; + if (str.length == 4) { + r += (r * 16); + g += (g * 16); + b += (b * 16); + } + } + } + else { + values = str.match(this.rgbRe); + if (values) { + r = values[1]; + g = values[2]; + b = values[3]; + } + } + + return (typeof r == 'undefined') ? undefined : new Ext.draw.Color(r, g, b); + }, + + + getGrayscale: function() { + + return this.r * 0.3 + this.g * 0.59 + this.b * 0.11; + }, + + + fromHSL: function(h, s, l) { + var C, X, m, i, rgb = [], + abs = Math.abs, + floor = Math.floor; + + if (s == 0 || h == null) { + + rgb = [l, l, l]; + } + else { + + + + + h /= 60; + C = s * (1 - abs(2 * l - 1)); + X = C * (1 - abs(h - 2 * floor(h / 2) - 1)); + m = l - C / 2; + switch (floor(h)) { + case 0: + rgb = [C, X, 0]; + break; + case 1: + rgb = [X, C, 0]; + break; + case 2: + rgb = [0, C, X]; + break; + case 3: + rgb = [0, X, C]; + break; + case 4: + rgb = [X, 0, C]; + break; + case 5: + rgb = [C, 0, X]; + break; + } + rgb = [rgb[0] + m, rgb[1] + m, rgb[2] + m]; + } + return new Ext.draw.Color(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255); + } +}, function() { + var prototype = this.prototype; + + + this.addStatics({ + fromHSL: function() { + return prototype.fromHSL.apply(prototype, arguments); + }, + fromString: function() { + return prototype.fromString.apply(prototype, arguments); + }, + toHex: function() { + return prototype.toHex.apply(prototype, arguments); + } + }); +}); + + +Ext.define('Ext.draw.Draw', { + + + singleton: true, + + + + + + pathToStringRE: /,?([achlmqrstvxz]),?/gi, + pathCommandRE: /([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig, + pathValuesRE: /(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig, + stopsRE: /^(\d+%?)$/, + radian: Math.PI / 180, + + availableAnimAttrs: { + along: "along", + blur: null, + "clip-rect": "csv", + cx: null, + cy: null, + fill: "color", + "fill-opacity": null, + "font-size": null, + height: null, + opacity: null, + path: "path", + r: null, + rotation: "csv", + rx: null, + ry: null, + scale: "csv", + stroke: "color", + "stroke-opacity": null, + "stroke-width": null, + translation: "csv", + width: null, + x: null, + y: null + }, + + is: function(o, type) { + type = String(type).toLowerCase(); + return (type == "object" && o === Object(o)) || + (type == "undefined" && typeof o == type) || + (type == "null" && o === null) || + (type == "array" && Array.isArray && Array.isArray(o)) || + (Object.prototype.toString.call(o).toLowerCase().slice(8, -1)) == type; + }, + + ellipsePath: function(sprite) { + var attr = sprite.attr; + return Ext.String.format("M{0},{1}A{2},{3},0,1,1,{0},{4}A{2},{3},0,1,1,{0},{1}z", attr.x, attr.y - attr.ry, attr.rx, attr.ry, attr.y + attr.ry); + }, + + rectPath: function(sprite) { + var attr = sprite.attr; + if (attr.radius) { + return Ext.String.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z", attr.x + attr.radius, attr.y, attr.width - attr.radius * 2, attr.radius, -attr.radius, attr.height - attr.radius * 2, attr.radius * 2 - attr.width, attr.radius * 2 - attr.height); + } + else { + return Ext.String.format("M{0},{1}L{2},{1},{2},{3},{0},{3}z", attr.x, attr.y, attr.width + attr.x, attr.height + attr.y); + } + }, + + + path2string: function () { + return this.join(",").replace(Ext.draw.Draw.pathToStringRE, "$1"); + }, + + + pathToString: function(arrayPath) { + return arrayPath.join(",").replace(Ext.draw.Draw.pathToStringRE, "$1"); + }, + + parsePathString: function (pathString) { + if (!pathString) { + return null; + } + var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0}, + data = [], + me = this; + if (me.is(pathString, "array") && me.is(pathString[0], "array")) { + data = me.pathClone(pathString); + } + if (!data.length) { + String(pathString).replace(me.pathCommandRE, function (a, b, c) { + var params = [], + name = b.toLowerCase(); + c.replace(me.pathValuesRE, function (a, b) { + b && params.push(+b); + }); + if (name == "m" && params.length > 2) { + data.push([b].concat(Ext.Array.splice(params, 0, 2))); + name = "l"; + b = (b == "m") ? "l" : "L"; + } + while (params.length >= paramCounts[name]) { + data.push([b].concat(Ext.Array.splice(params, 0, paramCounts[name]))); + if (!paramCounts[name]) { + break; + } + } + }); + } + data.toString = me.path2string; + return data; + }, + + mapPath: function (path, matrix) { + if (!matrix) { + return path; + } + var x, y, i, ii, j, jj, pathi; + path = this.path2curve(path); + for (i = 0, ii = path.length; i < ii; i++) { + pathi = path[i]; + for (j = 1, jj = pathi.length; j < jj-1; j += 2) { + x = matrix.x(pathi[j], pathi[j + 1]); + y = matrix.y(pathi[j], pathi[j + 1]); + pathi[j] = x; + pathi[j + 1] = y; + } + } + return path; + }, + + pathClone: function(pathArray) { + var res = [], + j, jj, i, ii; + if (!this.is(pathArray, "array") || !this.is(pathArray && pathArray[0], "array")) { + pathArray = this.parsePathString(pathArray); + } + for (i = 0, ii = pathArray.length; i < ii; i++) { + res[i] = []; + for (j = 0, jj = pathArray[i].length; j < jj; j++) { + res[i][j] = pathArray[i][j]; + } + } + res.toString = this.path2string; + return res; + }, + + pathToAbsolute: function (pathArray) { + if (!this.is(pathArray, "array") || !this.is(pathArray && pathArray[0], "array")) { + pathArray = this.parsePathString(pathArray); + } + var res = [], + x = 0, + y = 0, + mx = 0, + my = 0, + i = 0, + ln = pathArray.length, + r, pathSegment, j, ln2; + + if (ln && pathArray[0][0] == "M") { + x = +pathArray[0][1]; + y = +pathArray[0][2]; + mx = x; + my = y; + i++; + res[0] = ["M", x, y]; + } + for (; i < ln; i++) { + r = res[i] = []; + pathSegment = pathArray[i]; + if (pathSegment[0] != pathSegment[0].toUpperCase()) { + r[0] = pathSegment[0].toUpperCase(); + switch (r[0]) { + + case "A": + r[1] = pathSegment[1]; + r[2] = pathSegment[2]; + r[3] = pathSegment[3]; + r[4] = pathSegment[4]; + r[5] = pathSegment[5]; + r[6] = +(pathSegment[6] + x); + r[7] = +(pathSegment[7] + y); + break; + + case "V": + r[1] = +pathSegment[1] + y; + break; + + case "H": + r[1] = +pathSegment[1] + x; + break; + case "M": + + mx = +pathSegment[1] + x; + my = +pathSegment[2] + y; + default: + j = 1; + ln2 = pathSegment.length; + for (; j < ln2; j++) { + r[j] = +pathSegment[j] + ((j % 2) ? x : y); + } + } + } + else { + j = 0; + ln2 = pathSegment.length; + for (; j < ln2; j++) { + res[i][j] = pathSegment[j]; + } + } + switch (r[0]) { + + case "Z": + x = mx; + y = my; + break; + + case "H": + x = r[1]; + break; + + case "V": + y = r[1]; + break; + + case "M": + pathSegment = res[i]; + ln2 = pathSegment.length; + mx = pathSegment[ln2 - 2]; + my = pathSegment[ln2 - 1]; + default: + pathSegment = res[i]; + ln2 = pathSegment.length; + x = pathSegment[ln2 - 2]; + y = pathSegment[ln2 - 1]; + } + } + res.toString = this.path2string; + return res; + }, + + + pathToRelative: function (pathArray) { + if (!this.is(pathArray, "array") || !this.is(pathArray && pathArray[0], "array")) { + pathArray = this.parsePathString(pathArray); + } + var res = [], + x = 0, + y = 0, + mx = 0, + my = 0, + start = 0, + r, + pa, + i, + j, + k, + len, + ii, + jj, + kk; + + if (pathArray[0][0] == "M") { + x = pathArray[0][1]; + y = pathArray[0][2]; + mx = x; + my = y; + start++; + res.push(["M", x, y]); + } + for (i = start, ii = pathArray.length; i < ii; i++) { + r = res[i] = []; + pa = pathArray[i]; + if (pa[0] != pa[0].toLowerCase()) { + r[0] = pa[0].toLowerCase(); + switch (r[0]) { + case "a": + r[1] = pa[1]; + r[2] = pa[2]; + r[3] = pa[3]; + r[4] = pa[4]; + r[5] = pa[5]; + r[6] = +(pa[6] - x).toFixed(3); + r[7] = +(pa[7] - y).toFixed(3); + break; + case "v": + r[1] = +(pa[1] - y).toFixed(3); + break; + case "m": + mx = pa[1]; + my = pa[2]; + default: + for (j = 1, jj = pa.length; j < jj; j++) { + r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3); + } + } + } else { + r = res[i] = []; + if (pa[0] == "m") { + mx = pa[1] + x; + my = pa[2] + y; + } + for (k = 0, kk = pa.length; k < kk; k++) { + res[i][k] = pa[k]; + } + } + len = res[i].length; + switch (res[i][0]) { + case "z": + x = mx; + y = my; + break; + case "h": + x += +res[i][len - 1]; + break; + case "v": + y += +res[i][len - 1]; + break; + default: + x += +res[i][len - 2]; + y += +res[i][len - 1]; + } + } + res.toString = this.path2string; + return res; + }, + + + path2curve: function (path) { + var me = this, + points = me.pathToAbsolute(path), + ln = points.length, + attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null}, + i, seg, segLn, point; + + for (i = 0; i < ln; i++) { + points[i] = me.command2curve(points[i], attrs); + if (points[i].length > 7) { + points[i].shift(); + point = points[i]; + while (point.length) { + Ext.Array.splice(points, i++, 0, ["C"].concat(Ext.Array.splice(point, 0, 6))); + } + Ext.Array.erase(points, i, 1); + ln = points.length; + i--; + } + seg = points[i]; + segLn = seg.length; + attrs.x = seg[segLn - 2]; + attrs.y = seg[segLn - 1]; + attrs.bx = parseFloat(seg[segLn - 4]) || attrs.x; + attrs.by = parseFloat(seg[segLn - 3]) || attrs.y; + } + return points; + }, + + interpolatePaths: function (path, path2) { + var me = this, + p = me.pathToAbsolute(path), + p2 = me.pathToAbsolute(path2), + attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null}, + attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null}, + fixArc = function (pp, i) { + if (pp[i].length > 7) { + pp[i].shift(); + var pi = pp[i]; + while (pi.length) { + Ext.Array.splice(pp, i++, 0, ["C"].concat(Ext.Array.splice(pi, 0, 6))); + } + Ext.Array.erase(pp, i, 1); + ii = Math.max(p.length, p2.length || 0); + } + }, + fixM = function (path1, path2, a1, a2, i) { + if (path1 && path2 && path1[i][0] == "M" && path2[i][0] != "M") { + Ext.Array.splice(path2, i, 0, ["M", a2.x, a2.y]); + a1.bx = 0; + a1.by = 0; + a1.x = path1[i][1]; + a1.y = path1[i][2]; + ii = Math.max(p.length, p2.length || 0); + } + }, + i, ii, + seg, seg2, seglen, seg2len; + for (i = 0, ii = Math.max(p.length, p2.length || 0); i < ii; i++) { + p[i] = me.command2curve(p[i], attrs); + fixArc(p, i); + (p2[i] = me.command2curve(p2[i], attrs2)); + fixArc(p2, i); + fixM(p, p2, attrs, attrs2, i); + fixM(p2, p, attrs2, attrs, i); + seg = p[i]; + seg2 = p2[i]; + seglen = seg.length; + seg2len = seg2.length; + attrs.x = seg[seglen - 2]; + attrs.y = seg[seglen - 1]; + attrs.bx = parseFloat(seg[seglen - 4]) || attrs.x; + attrs.by = parseFloat(seg[seglen - 3]) || attrs.y; + attrs2.bx = (parseFloat(seg2[seg2len - 4]) || attrs2.x); + attrs2.by = (parseFloat(seg2[seg2len - 3]) || attrs2.y); + attrs2.x = seg2[seg2len - 2]; + attrs2.y = seg2[seg2len - 1]; + } + return [p, p2]; + }, + + + command2curve: function (pathCommand, d) { + var me = this; + if (!pathCommand) { + return ["C", d.x, d.y, d.x, d.y, d.x, d.y]; + } + if (pathCommand[0] != "T" && pathCommand[0] != "Q") { + d.qx = d.qy = null; + } + switch (pathCommand[0]) { + case "M": + d.X = pathCommand[1]; + d.Y = pathCommand[2]; + break; + case "A": + pathCommand = ["C"].concat(me.arc2curve.apply(me, [d.x, d.y].concat(pathCommand.slice(1)))); + break; + case "S": + pathCommand = ["C", d.x + (d.x - (d.bx || d.x)), d.y + (d.y - (d.by || d.y))].concat(pathCommand.slice(1)); + break; + case "T": + d.qx = d.x + (d.x - (d.qx || d.x)); + d.qy = d.y + (d.y - (d.qy || d.y)); + pathCommand = ["C"].concat(me.quadratic2curve(d.x, d.y, d.qx, d.qy, pathCommand[1], pathCommand[2])); + break; + case "Q": + d.qx = pathCommand[1]; + d.qy = pathCommand[2]; + pathCommand = ["C"].concat(me.quadratic2curve(d.x, d.y, pathCommand[1], pathCommand[2], pathCommand[3], pathCommand[4])); + break; + case "L": + pathCommand = ["C"].concat(d.x, d.y, pathCommand[1], pathCommand[2], pathCommand[1], pathCommand[2]); + break; + case "H": + pathCommand = ["C"].concat(d.x, d.y, pathCommand[1], d.y, pathCommand[1], d.y); + break; + case "V": + pathCommand = ["C"].concat(d.x, d.y, d.x, pathCommand[1], d.x, pathCommand[1]); + break; + case "Z": + pathCommand = ["C"].concat(d.x, d.y, d.X, d.Y, d.X, d.Y); + break; + } + return pathCommand; + }, + + quadratic2curve: function (x1, y1, ax, ay, x2, y2) { + var _13 = 1 / 3, + _23 = 2 / 3; + return [ + _13 * x1 + _23 * ax, + _13 * y1 + _23 * ay, + _13 * x2 + _23 * ax, + _13 * y2 + _23 * ay, + x2, + y2 + ]; + }, + + rotate: function (x, y, rad) { + var cos = Math.cos(rad), + sin = Math.sin(rad), + X = x * cos - y * sin, + Y = x * sin + y * cos; + return {x: X, y: Y}; + }, + + arc2curve: function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) { + + + var me = this, + PI = Math.PI, + radian = me.radian, + _120 = PI * 120 / 180, + rad = radian * (+angle || 0), + res = [], + math = Math, + mcos = math.cos, + msin = math.sin, + msqrt = math.sqrt, + mabs = math.abs, + masin = math.asin, + xy, x, y, h, rx2, ry2, k, cx, cy, f1, f2, df, c1, s1, c2, s2, + t, hx, hy, m1, m2, m3, m4, newres, i, ln, f2old, x2old, y2old; + if (!recursive) { + xy = me.rotate(x1, y1, -rad); + x1 = xy.x; + y1 = xy.y; + xy = me.rotate(x2, y2, -rad); + x2 = xy.x; + y2 = xy.y; + x = (x1 - x2) / 2; + y = (y1 - y2) / 2; + h = (x * x) / (rx * rx) + (y * y) / (ry * ry); + if (h > 1) { + h = msqrt(h); + rx = h * rx; + ry = h * ry; + } + rx2 = rx * rx; + ry2 = ry * ry; + k = (large_arc_flag == sweep_flag ? -1 : 1) * + msqrt(mabs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))); + cx = k * rx * y / ry + (x1 + x2) / 2; + cy = k * -ry * x / rx + (y1 + y2) / 2; + f1 = masin(((y1 - cy) / ry).toFixed(7)); + f2 = masin(((y2 - cy) / ry).toFixed(7)); + + f1 = x1 < cx ? PI - f1 : f1; + f2 = x2 < cx ? PI - f2 : f2; + if (f1 < 0) { + f1 = PI * 2 + f1; + } + if (f2 < 0) { + f2 = PI * 2 + f2; + } + if (sweep_flag && f1 > f2) { + f1 = f1 - PI * 2; + } + if (!sweep_flag && f2 > f1) { + f2 = f2 - PI * 2; + } + } + else { + f1 = recursive[0]; + f2 = recursive[1]; + cx = recursive[2]; + cy = recursive[3]; + } + df = f2 - f1; + if (mabs(df) > _120) { + f2old = f2; + x2old = x2; + y2old = y2; + f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1); + x2 = cx + rx * mcos(f2); + y2 = cy + ry * msin(f2); + res = me.arc2curve(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]); + } + df = f2 - f1; + c1 = mcos(f1); + s1 = msin(f1); + c2 = mcos(f2); + s2 = msin(f2); + t = math.tan(df / 4); + hx = 4 / 3 * rx * t; + hy = 4 / 3 * ry * t; + m1 = [x1, y1]; + m2 = [x1 + hx * s1, y1 - hy * c1]; + m3 = [x2 + hx * s2, y2 - hy * c2]; + m4 = [x2, y2]; + m2[0] = 2 * m1[0] - m2[0]; + m2[1] = 2 * m1[1] - m2[1]; + if (recursive) { + return [m2, m3, m4].concat(res); + } + else { + res = [m2, m3, m4].concat(res).join().split(","); + newres = []; + ln = res.length; + for (i = 0; i < ln; i++) { + newres[i] = i % 2 ? me.rotate(res[i - 1], res[i], rad).y : me.rotate(res[i], res[i + 1], rad).x; + } + return newres; + } + }, + + + rotateAndTranslatePath: function (sprite) { + var alpha = sprite.rotation.degrees, + cx = sprite.rotation.x, + cy = sprite.rotation.y, + dx = sprite.translation.x, + dy = sprite.translation.y, + path, + i, + p, + xy, + j, + res = []; + if (!alpha && !dx && !dy) { + return this.pathToAbsolute(sprite.attr.path); + } + dx = dx || 0; + dy = dy || 0; + path = this.pathToAbsolute(sprite.attr.path); + for (i = path.length; i--;) { + p = res[i] = path[i].slice(); + if (p[0] == "A") { + xy = this.rotatePoint(p[6], p[7], alpha, cx, cy); + p[6] = xy.x + dx; + p[7] = xy.y + dy; + } else { + j = 1; + while (p[j + 1] != null) { + xy = this.rotatePoint(p[j], p[j + 1], alpha, cx, cy); + p[j] = xy.x + dx; + p[j + 1] = xy.y + dy; + j += 2; + } + } + } + return res; + }, + + + rotatePoint: function (x, y, alpha, cx, cy) { + if (!alpha) { + return { + x: x, + y: y + }; + } + cx = cx || 0; + cy = cy || 0; + x = x - cx; + y = y - cy; + alpha = alpha * this.radian; + var cos = Math.cos(alpha), + sin = Math.sin(alpha); + return { + x: x * cos - y * sin + cx, + y: x * sin + y * cos + cy + }; + }, + + pathDimensions: function (path) { + if (!path || !(path + "")) { + return {x: 0, y: 0, width: 0, height: 0}; + } + path = this.path2curve(path); + var x = 0, + y = 0, + X = [], + Y = [], + i = 0, + ln = path.length, + p, xmin, ymin, xmax, ymax, dim; + for (; i < ln; i++) { + p = path[i]; + if (p[0] == "M") { + x = p[1]; + y = p[2]; + X.push(x); + Y.push(y); + } + else { + dim = this.curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]); + X = X.concat(dim.min.x, dim.max.x); + Y = Y.concat(dim.min.y, dim.max.y); + x = p[5]; + y = p[6]; + } + } + xmin = Math.min.apply(0, X); + ymin = Math.min.apply(0, Y); + xmax = Math.max.apply(0, X); + ymax = Math.max.apply(0, Y); + return { + x: Math.round(xmin), + y: Math.round(ymin), + path: path, + width: Math.round(xmax - xmin), + height: Math.round(ymax - ymin) + }; + }, + + intersectInside: function(path, cp1, cp2) { + return (cp2[0] - cp1[0]) * (path[1] - cp1[1]) > (cp2[1] - cp1[1]) * (path[0] - cp1[0]); + }, + + intersectIntersection: function(s, e, cp1, cp2) { + var p = [], + dcx = cp1[0] - cp2[0], + dcy = cp1[1] - cp2[1], + dpx = s[0] - e[0], + dpy = s[1] - e[1], + n1 = cp1[0] * cp2[1] - cp1[1] * cp2[0], + n2 = s[0] * e[1] - s[1] * e[0], + n3 = 1 / (dcx * dpy - dcy * dpx); + + p[0] = (n1 * dpx - n2 * dcx) * n3; + p[1] = (n1 * dpy - n2 * dcy) * n3; + return p; + }, + + intersect: function(subjectPolygon, clipPolygon) { + var me = this, + i = 0, + ln = clipPolygon.length, + cp1 = clipPolygon[ln - 1], + outputList = subjectPolygon, + cp2, s, e, ln2, inputList, j; + for (; i < ln; ++i) { + cp2 = clipPolygon[i]; + inputList = outputList; + outputList = []; + s = inputList[inputList.length - 1]; + j = 0; + ln2 = inputList.length; + for (; j < ln2; j++) { + e = inputList[j]; + if (me.intersectInside(e, cp1, cp2)) { + if (!me.intersectInside(s, cp1, cp2)) { + outputList.push(me.intersectIntersection(s, e, cp1, cp2)); + } + outputList.push(e); + } + else if (me.intersectInside(s, cp1, cp2)) { + outputList.push(me.intersectIntersection(s, e, cp1, cp2)); + } + s = e; + } + cp1 = cp2; + } + return outputList; + }, + + bezier : function (a, b, c, d, x) { + if (x === 0) { + return a; + } + else if (x === 1) { + return d; + } + var du = 1 - x, + d3 = du * du * du, + r = x / du; + return d3 * (a + r * (3 * b + r * (3 * c + d * r))); + }, + + bezierDim : function (a, b, c, d) { + var points = [], r, + A, top, C, delta, bottom, s, + min, max, i; + + if (a + 3 * c == d + 3 * b) { + r = a - b; + r /= 2 * (a - b - b + c); + if ( r < 1 && r > 0) { + points.push(r); + } + } else { + + + A = a - 3 * b + 3 * c - d; + top = 2 * (a - b - b + c); + C = a - b; + delta = top * top - 4 * A * C; + bottom = A + A; + if (delta === 0) { + r = top / bottom; + if (r < 1 && r > 0) { + points.push(r); + } + } else if (delta > 0) { + s = Math.sqrt(delta); + r = (s + top) / bottom; + + if (r < 1 && r > 0) { + points.push(r); + } + + r = (top - s) / bottom; + + if (r < 1 && r > 0) { + points.push(r); + } + } + } + min = Math.min(a, d); + max = Math.max(a, d); + for (i = 0; i < points.length; i++) { + min = Math.min(min, this.bezier(a, b, c, d, points[i])); + max = Math.max(max, this.bezier(a, b, c, d, points[i])); + } + return [min, max]; + }, + + curveDim: function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) { + var x = this.bezierDim(p1x, c1x, c2x, p2x), + y = this.bezierDim(p1y, c1y, c2y, p2y); + return { + min: { + x: x[0], + y: y[0] + }, + max: { + x: x[1], + y: y[1] + } + }; + }, + + + getAnchors: function (prevX, prevY, curX, curY, nextX, nextY, value) { + value = value || 4; + var M = Math, + PI = M.PI, + halfPI = PI / 2, + abs = M.abs, + sin = M.sin, + cos = M.cos, + atan = M.atan, + control1Length, control2Length, control1Angle, control2Angle, + control1X, control1Y, control2X, control2Y, alpha; + + + + control1Length = (curX - prevX) / value; + control2Length = (nextX - curX) / value; + + + + + + if ((curY >= prevY && curY >= nextY) || (curY <= prevY && curY <= nextY)) { + control1Angle = control2Angle = halfPI; + } else { + control1Angle = atan((curX - prevX) / abs(curY - prevY)); + if (prevY < curY) { + control1Angle = PI - control1Angle; + } + control2Angle = atan((nextX - curX) / abs(curY - nextY)); + if (nextY < curY) { + control2Angle = PI - control2Angle; + } + } + + + alpha = halfPI - ((control1Angle + control2Angle) % (PI * 2)) / 2; + if (alpha > halfPI) { + alpha -= PI; + } + control1Angle += alpha; + control2Angle += alpha; + + + control1X = curX - control1Length * sin(control1Angle); + control1Y = curY + control1Length * cos(control1Angle); + control2X = curX + control2Length * sin(control2Angle); + control2Y = curY + control2Length * cos(control2Angle); + + + + + + if ((curY > prevY && control1Y < prevY) || (curY < prevY && control1Y > prevY)) { + control1X += abs(prevY - control1Y) * (control1X - curX) / (control1Y - curY); + control1Y = prevY; + } + if ((curY > nextY && control2Y < nextY) || (curY < nextY && control2Y > nextY)) { + control2X -= abs(nextY - control2Y) * (control2X - curX) / (control2Y - curY); + control2Y = nextY; + } + + return { + x1: control1X, + y1: control1Y, + x2: control2X, + y2: control2Y + }; + }, + + + smooth: function (originalPath, value) { + var path = this.path2curve(originalPath), + newp = [path[0]], + x = path[0][1], + y = path[0][2], + j, + points, + i = 1, + ii = path.length, + beg = 1, + mx = x, + my = y, + pathi, + pathil, + pathim, + pathiml, + pathip, + pathipl, + begl; + + for (; i < ii; i++) { + pathi = path[i]; + pathil = pathi.length; + pathim = path[i - 1]; + pathiml = pathim.length; + pathip = path[i + 1]; + pathipl = pathip && pathip.length; + if (pathi[0] == "M") { + mx = pathi[1]; + my = pathi[2]; + j = i + 1; + while (path[j][0] != "C") { + j++; + } + newp.push(["M", mx, my]); + beg = newp.length; + x = mx; + y = my; + continue; + } + if (pathi[pathil - 2] == mx && pathi[pathil - 1] == my && (!pathip || pathip[0] == "M")) { + begl = newp[beg].length; + points = this.getAnchors(pathim[pathiml - 2], pathim[pathiml - 1], mx, my, newp[beg][begl - 2], newp[beg][begl - 1], value); + newp[beg][1] = points.x2; + newp[beg][2] = points.y2; + } + else if (!pathip || pathip[0] == "M") { + points = { + x1: pathi[pathil - 2], + y1: pathi[pathil - 1] + }; + } else { + points = this.getAnchors(pathim[pathiml - 2], pathim[pathiml - 1], pathi[pathil - 2], pathi[pathil - 1], pathip[pathipl - 2], pathip[pathipl - 1], value); + } + newp.push(["C", x, y, points.x1, points.y1, pathi[pathil - 2], pathi[pathil - 1]]); + x = points.x2; + y = points.y2; + } + return newp; + }, + + findDotAtSegment: function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) { + var t1 = 1 - t; + return { + x: Math.pow(t1, 3) * p1x + Math.pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + Math.pow(t, 3) * p2x, + y: Math.pow(t1, 3) * p1y + Math.pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + Math.pow(t, 3) * p2y + }; + }, + + + snapEnds: function (from, to, stepsMax, prettyNumbers) { + if (Ext.isDate(from)) { + return this.snapEndsByDate(from, to, stepsMax); + } + var step = (to - from) / stepsMax, + level = Math.floor(Math.log(step) / Math.LN10) + 1, + m = Math.pow(10, level), + cur, + floor, + modulo = Math.round((step % m) * Math.pow(10, 2 - level)), + interval = [[0, 15], [10, 1], [20, 4], [25, 2], [50, 9], [100, 15]], + stepCount = 0, + value, + weight, + i, + topValue, + topWeight = 1e9, + ln = interval.length; + + floor = Math.floor(from / m) * m; + if (from == floor && floor > 0) { + floor = Math.floor((from - (m/10)) / m) * m; + } + + if (prettyNumbers) { + for (i = 0; i < ln; i++) { + value = interval[i][0]; + weight = (value - modulo) < 0 ? 1e6 : (value - modulo) / interval[i][1]; + if (weight < topWeight) { + topValue = value; + topWeight = weight; + } + } + step = Math.floor(step * Math.pow(10, -level)) * Math.pow(10, level) + topValue * Math.pow(10, level - 2); + + if (from < 0 && to >= 0) { + cur = 0; + while (cur > from) { + cur -= step; + stepCount++; + } + from = +cur.toFixed(10); + + cur = 0; + while (cur < to) { + cur += step; + stepCount++; + } + to = +cur.toFixed(10); + } else { + cur = from = floor; + while (cur < to) { + cur += step; + stepCount++; + } + } + to = +cur.toFixed(10); + } else { + from = floor; + stepCount = stepsMax; + } + + return { + from: from, + to: to, + power: level, + step: step, + steps: stepCount + }; + }, + + + snapEndsByDate: function (from, to, stepsMax, lockEnds) { + var selectedStep = false, + scales = [ + [Ext.Date.MILLI, [1, 2, 5, 10, 20, 50, 100, 200, 250, 500]], + [Ext.Date.SECOND, [1, 2, 5, 10, 15, 30]], + [Ext.Date.MINUTE, [1, 2, 5, 10, 15, 30]], + [Ext.Date.HOUR, [1, 2, 3, 4, 6, 12]], + [Ext.Date.DAY, [1, 2, 7, 14]], + [Ext.Date.MONTH, [1, 2, 3, 6]] + ], + sLen = scales.length, + stop = false, + scale, j, yearDiff, s; + + + for (s = 0; s < sLen; s++) { + scale = scales[s]; + if (!stop) { + for (j = 0; j < scale[1].length; j++) { + if (to < Ext.Date.add(from, scale[0], scale[1][j] * stepsMax)) { + selectedStep = [scale[0], scale[1][j]]; + stop = true; + break; + } + } + } + } + + if (!selectedStep) { + yearDiff = this.snapEnds(from.getFullYear(), to.getFullYear() + 1, stepsMax, lockEnds); + selectedStep = [Date.YEAR, Math.round(yearDiff.step)]; + } + return this.snapEndsByDateAndStep(from, to, selectedStep, lockEnds); + }, + + + + + snapEndsByDateAndStep: function(from, to, step, lockEnds) { + var fromStat = [from.getFullYear(), from.getMonth(), from.getDate(), + from.getHours(), from.getMinutes(), from.getSeconds(), from.getMilliseconds()], + steps, testFrom, testTo, date, year, month, day, fractionalMonth, + stepUnit = step[0], stepValue = step[1]; + if (lockEnds) { + testFrom = from; + } else { + switch (stepUnit) { + case Ext.Date.MILLI: + testFrom = new Date(fromStat[0], fromStat[1], fromStat[2], fromStat[3], + fromStat[4], fromStat[5], Math.floor(fromStat[6] / stepValue) * stepValue); + break; + case Ext.Date.SECOND: + testFrom = new Date(fromStat[0], fromStat[1], fromStat[2], fromStat[3], + fromStat[4], Math.floor(fromStat[5] / stepValue) * stepValue, 0); + break; + case Ext.Date.MINUTE: + testFrom = new Date(fromStat[0], fromStat[1], fromStat[2], fromStat[3], + Math.floor(fromStat[4] / stepValue) * stepValue, 0, 0); + break; + case Ext.Date.HOUR: + testFrom = new Date(fromStat[0], fromStat[1], fromStat[2], + Math.floor(fromStat[3] / stepValue) * stepValue, 0, 0, 0); + break; + case Ext.Date.DAY: + testFrom = new Date(fromStat[0], fromStat[1], + Math.floor((fromStat[2] - 1) / stepValue) * stepValue + 1, 0, 0, 0, 0); + break; + case Ext.Date.MONTH: + testFrom = new Date(fromStat[0], Math.floor(fromStat[1] / stepValue) * stepValue, 1, 0, 0, 0, 0); + break; + default: + testFrom = new Date(Math.floor(fromStat[0] / stepValue) * stepValue, 0, 1, 0, 0, 0, 0); + break; + } + } + + fractionalMonth = ((stepUnit === Ext.Date.MONTH) && (stepValue == 1/2 || stepValue == 1/3 || stepValue == 1/4)); + steps = (fractionalMonth ? [] : 0); + + + testTo = new Date(testFrom); + while (testTo < to) { + if (fractionalMonth) { + date = new Date(testTo); + year = date.getFullYear(); + month = date.getMonth(); + day = date.getDate(); + switch(stepValue) { + case 1/2: + if (day >= 15) { + day = 1; + if (++month > 11) { + year++; + } + } + else { + day = 15; + } + break; + + case 1/3: + if (day >= 20) { + day = 1; + if (++month > 11) { + year++; + } + } + else { + if (day >= 10) { + day = 20 + } + else { + day = 10; + } + } + break; + + case 1/4: + if (day >= 22) { + day = 1; + if (++month > 11) { + year++; + } + } + else { + if (day >= 15) { + day = 22 + } + else { + if (day >= 8) { + day = 15 + } + else { + day = 8; + } + } + } + break; + } + testTo.setYear(year); + testTo.setMonth(month); + testTo.setDate(day); + steps.push(new Date(testTo)); + } + else { + testTo = Ext.Date.add(testTo, stepUnit, stepValue); + steps++; + } + } + + if (lockEnds) { + testTo = to; + } + + if (fractionalMonth) { + return { + from : +testFrom, + to : +testTo, + steps : steps + }; + } + else { + return { + from : +testFrom, + to : +testTo, + step : (testTo - testFrom) / steps, + steps : steps + }; + } + }, + + sorter: function (a, b) { + return a.offset - b.offset; + }, + + rad: function(degrees) { + return degrees % 360 * Math.PI / 180; + }, + + degrees: function(radian) { + return radian * 180 / Math.PI % 360; + }, + + withinBox: function(x, y, bbox) { + bbox = bbox || {}; + return (x >= bbox.x && x <= (bbox.x + bbox.width) && y >= bbox.y && y <= (bbox.y + bbox.height)); + }, + + parseGradient: function(gradient) { + var me = this, + type = gradient.type || 'linear', + angle = gradient.angle || 0, + radian = me.radian, + stops = gradient.stops, + stopsArr = [], + stop, + vector, + max, + stopObj; + + if (type == 'linear') { + vector = [0, 0, Math.cos(angle * radian), Math.sin(angle * radian)]; + max = 1 / (Math.max(Math.abs(vector[2]), Math.abs(vector[3])) || 1); + vector[2] *= max; + vector[3] *= max; + if (vector[2] < 0) { + vector[0] = -vector[2]; + vector[2] = 0; + } + if (vector[3] < 0) { + vector[1] = -vector[3]; + vector[3] = 0; + } + } + + for (stop in stops) { + if (stops.hasOwnProperty(stop) && me.stopsRE.test(stop)) { + stopObj = { + offset: parseInt(stop, 10), + color: Ext.draw.Color.toHex(stops[stop].color) || '#ffffff', + opacity: stops[stop].opacity || 1 + }; + stopsArr.push(stopObj); + } + } + + Ext.Array.sort(stopsArr, me.sorter); + if (type == 'linear') { + return { + id: gradient.id, + type: type, + vector: vector, + stops: stopsArr + }; + } + else { + return { + id: gradient.id, + type: type, + centerX: gradient.centerX, + centerY: gradient.centerY, + focalX: gradient.focalX, + focalY: gradient.focalY, + radius: gradient.radius, + vector: vector, + stops: stopsArr + }; + } + } +}); + + +Ext.define('Ext.fx.PropertyHandler', { + + + + + + statics: { + defaultHandler: { + pixelDefaultsRE: /width|height|top$|bottom$|left$|right$/i, + unitRE: /^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/, + scrollRE: /^scroll/i, + + computeDelta: function(from, end, damper, initial, attr) { + damper = (typeof damper == 'number') ? damper : 1; + var unitRE = this.unitRE, + match = unitRE.exec(from), + start, units; + if (match) { + from = match[1]; + units = match[2]; + if (!this.scrollRE.test(attr) && !units && this.pixelDefaultsRE.test(attr)) { + units = 'px'; + } + } + from = +from || 0; + + match = unitRE.exec(end); + if (match) { + end = match[1]; + units = match[2] || units; + } + end = +end || 0; + start = (initial != null) ? initial : from; + return { + from: from, + delta: (end - start) * damper, + units: units + }; + }, + + get: function(from, end, damper, initialFrom, attr) { + var ln = from.length, + out = [], + i, initial, res, j, len; + for (i = 0; i < ln; i++) { + if (initialFrom) { + initial = initialFrom[i][1].from; + } + if (Ext.isArray(from[i][1]) && Ext.isArray(end)) { + res = []; + j = 0; + len = from[i][1].length; + for (; j < len; j++) { + res.push(this.computeDelta(from[i][1][j], end[j], damper, initial, attr)); + } + out.push([from[i][0], res]); + } + else { + out.push([from[i][0], this.computeDelta(from[i][1], end, damper, initial, attr)]); + } + } + return out; + }, + + set: function(values, easing) { + var ln = values.length, + out = [], + i, val, res, len, j; + for (i = 0; i < ln; i++) { + val = values[i][1]; + if (Ext.isArray(val)) { + res = []; + j = 0; + len = val.length; + for (; j < len; j++) { + res.push(val[j].from + val[j].delta * easing + (val[j].units || 0)); + } + out.push([values[i][0], res]); + } else { + out.push([values[i][0], val.from + val.delta * easing + (val.units || 0)]); + } + } + return out; + } + }, + stringHandler: { + computeDelta: function(from, end, damper, initial, attr) { + return { + from: from, + delta: end + }; + }, + + get: function(from, end, damper, initialFrom, attr) { + var ln = from.length, + out = [], + i, initial, res, j, len; + for (i = 0; i < ln; i++) { + out.push([from[i][0], this.computeDelta(from[i][1], end, damper, initial, attr)]); + } + return out; + }, + + set: function(values, easing) { + var ln = values.length, + out = [], + i, val, res, len, j; + for (i = 0; i < ln; i++) { + val = values[i][1]; + out.push([values[i][0], val.delta]); + } + return out; + } + }, + color: { + rgbRE: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i, + hexRE: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i, + hex3RE: /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i, + + parseColor : function(color, damper) { + damper = (typeof damper == 'number') ? damper : 1; + var out = false, + reList = [this.hexRE, this.rgbRE, this.hex3RE], + length = reList.length, + match, base, re, i; + + for (i = 0; i < length; i++) { + re = reList[i]; + + base = (i % 2 === 0) ? 16 : 10; + match = re.exec(color); + if (match && match.length === 4) { + if (i === 2) { + match[1] += match[1]; + match[2] += match[2]; + match[3] += match[3]; + } + out = { + red: parseInt(match[1], base), + green: parseInt(match[2], base), + blue: parseInt(match[3], base) + }; + break; + } + } + + return out || color; + }, + + computeDelta: function(from, end, damper, initial) { + from = this.parseColor(from); + end = this.parseColor(end, damper); + var start = initial ? initial : from, + tfrom = typeof start, + tend = typeof end; + + if (tfrom == 'string' || tfrom == 'undefined' + || tend == 'string' || tend == 'undefined') { + return end || start; + } + return { + from: from, + delta: { + red: Math.round((end.red - start.red) * damper), + green: Math.round((end.green - start.green) * damper), + blue: Math.round((end.blue - start.blue) * damper) + } + }; + }, + + get: function(start, end, damper, initialFrom) { + var ln = start.length, + out = [], + i, initial; + for (i = 0; i < ln; i++) { + if (initialFrom) { + initial = initialFrom[i][1].from; + } + out.push([start[i][0], this.computeDelta(start[i][1], end, damper, initial)]); + } + return out; + }, + + set: function(values, easing) { + var ln = values.length, + out = [], + i, val, parsedString, from, delta; + for (i = 0; i < ln; i++) { + val = values[i][1]; + if (val) { + from = val.from; + delta = val.delta; + + val = (typeof val == 'object' && 'red' in val)? + 'rgb(' + val.red + ', ' + val.green + ', ' + val.blue + ')' : val; + val = (typeof val == 'object' && val.length)? val[0] : val; + if (typeof val == 'undefined') { + return []; + } + parsedString = typeof val == 'string'? val : + 'rgb(' + [ + (from.red + Math.round(delta.red * easing)) % 256, + (from.green + Math.round(delta.green * easing)) % 256, + (from.blue + Math.round(delta.blue * easing)) % 256 + ].join(',') + ')'; + out.push([ + values[i][0], + parsedString + ]); + } + } + return out; + } + }, + object: { + interpolate: function(prop, damper) { + damper = (typeof damper == 'number') ? damper : 1; + var out = {}, + p; + for(p in prop) { + out[p] = parseFloat(prop[p]) * damper; + } + return out; + }, + + computeDelta: function(from, end, damper, initial) { + from = this.interpolate(from); + end = this.interpolate(end, damper); + var start = initial ? initial : from, + delta = {}, + p; + + for(p in end) { + delta[p] = end[p] - start[p]; + } + return { + from: from, + delta: delta + }; + }, + + get: function(start, end, damper, initialFrom) { + var ln = start.length, + out = [], + i, initial; + for (i = 0; i < ln; i++) { + if (initialFrom) { + initial = initialFrom[i][1].from; + } + out.push([start[i][0], this.computeDelta(start[i][1], end, damper, initial)]); + } + return out; + }, + + set: function(values, easing) { + var ln = values.length, + out = [], + outObject = {}, + i, from, delta, val, p; + for (i = 0; i < ln; i++) { + val = values[i][1]; + from = val.from; + delta = val.delta; + for (p in from) { + outObject[p] = from[p] + delta[p] * easing; + } + out.push([ + values[i][0], + outObject + ]); + } + return out; + } + }, + + path: { + computeDelta: function(from, end, damper, initial) { + damper = (typeof damper == 'number') ? damper : 1; + var start; + from = +from || 0; + end = +end || 0; + start = (initial != null) ? initial : from; + return { + from: from, + delta: (end - start) * damper + }; + }, + + forcePath: function(path) { + if (!Ext.isArray(path) && !Ext.isArray(path[0])) { + path = Ext.draw.Draw.parsePathString(path); + } + return path; + }, + + get: function(start, end, damper, initialFrom) { + var endPath = this.forcePath(end), + out = [], + startLn = start.length, + startPathLn, pointsLn, i, deltaPath, initial, j, k, path, startPath; + for (i = 0; i < startLn; i++) { + startPath = this.forcePath(start[i][1]); + + deltaPath = Ext.draw.Draw.interpolatePaths(startPath, endPath); + startPath = deltaPath[0]; + endPath = deltaPath[1]; + + startPathLn = startPath.length; + path = []; + for (j = 0; j < startPathLn; j++) { + deltaPath = [startPath[j][0]]; + pointsLn = startPath[j].length; + for (k = 1; k < pointsLn; k++) { + initial = initialFrom && initialFrom[0][1][j][k].from; + deltaPath.push(this.computeDelta(startPath[j][k], endPath[j][k], damper, initial)); + } + path.push(deltaPath); + } + out.push([start[i][0], path]); + } + return out; + }, + + set: function(values, easing) { + var ln = values.length, + out = [], + i, j, k, newPath, calcPath, deltaPath, deltaPathLn, pointsLn; + for (i = 0; i < ln; i++) { + deltaPath = values[i][1]; + newPath = []; + deltaPathLn = deltaPath.length; + for (j = 0; j < deltaPathLn; j++) { + calcPath = [deltaPath[j][0]]; + pointsLn = deltaPath[j].length; + for (k = 1; k < pointsLn; k++) { + calcPath.push(deltaPath[j][k].from + deltaPath[j][k].delta * easing); + } + newPath.push(calcPath.join(',')); + } + out.push([values[i][0], newPath.join(',')]); + } + return out; + } + } + + } +}, function() { + + var props = [ + 'outlineColor', + 'backgroundColor', + 'borderColor', + 'borderTopColor', + 'borderRightColor', + 'borderBottomColor', + 'borderLeftColor', + 'fill', + 'stroke' + ], + length = props.length, + i = 0, + prop; + + for (; i= duration) { + elapsedTime = duration; + lastFrame = true; + } + if (me.reverse) { + elapsedTime = duration - elapsedTime; + } + + for (attr in attrs) { + if (attrs.hasOwnProperty(attr)) { + values = attrs[attr]; + easing = lastFrame ? 1 : easingFn(elapsedTime / duration); + ret[attr] = propHandlers[attr].set(values, easing); + } + } + me.frameCount++; + + return ret; + }, + + + lastFrame: function() { + var me = this, + iter = me.iterations, + iterCount = me.currentIteration; + + iterCount++; + if (iterCount < iter) { + if (me.alternate) { + me.reverse = !me.reverse; + } + me.startTime = new Date(); + me.currentIteration = iterCount; + + me.paused = false; + } + else { + me.currentIteration = 0; + me.end(); + me.fireEvent('lastframe', me, me.startTime); + } + }, + + endWasCalled: 0, + + + end: function() { + if (this.endWasCalled++) { + return; + } + var me = this; + me.startTime = 0; + me.paused = false; + me.running = false; + Ext.fx.Manager.removeAnim(me); + me.fireEvent('afteranimate', me, me.startTime); + Ext.callback(me.callback, me.scope, [me, me.startTime]); + }, + + isReady: function() { + return this.paused === false && this.running === false && this.iterations > 0; + }, + + isRunning: function() { + return this.paused === false && this.running === true && this.isAnimator !== true; + } +}); + +Ext.enableFx = true; + + +Ext.define('Ext.util.Animate', { + + + + + + + + isAnimate: true, + + + animate: function(animObj) { + var me = this; + if (Ext.fx.Manager.hasFxBlock(me.id)) { + return me; + } + Ext.fx.Manager.queueFx(new Ext.fx.Anim(me.anim(animObj))); + return this; + }, + + + anim: function(config) { + if (!Ext.isObject(config)) { + return (config) ? {} : false; + } + + var me = this; + + if (config.stopAnimation) { + me.stopAnimation(); + } + + Ext.applyIf(config, Ext.fx.Manager.getFxDefaults(me.id)); + + return Ext.apply({ + target: me, + paused: true + }, config); + }, + + + stopFx: Ext.Function.alias(Ext.util.Animate, 'stopAnimation'), + + + stopAnimation: function() { + Ext.fx.Manager.stopAnimation(this.id); + return this; + }, + + + syncFx: function() { + Ext.fx.Manager.setFxDefaults(this.id, { + concurrent: true + }); + return this; + }, + + + sequenceFx: function() { + Ext.fx.Manager.setFxDefaults(this.id, { + concurrent: false + }); + return this; + }, + + + hasActiveFx: Ext.Function.alias(Ext.util.Animate, 'getActiveAnimation'), + + + getActiveAnimation: function() { + return Ext.fx.Manager.getActiveAnimation(this.id); + } +}, function(){ + + Ext.applyIf(Ext.Element.prototype, this.prototype); + + Ext.CompositeElementLite.importElementMethods(); +}); + + +Ext.define('Ext.util.ElementContainer', { + + childEls: [ + + + + + ], + + constructor: function () { + var me = this, + childEls; + + + + if (me.hasOwnProperty('childEls')) { + childEls = me.childEls; + delete me.childEls; + + me.addChildEls.apply(me, childEls); + } + }, + + destroy: function () { + var me = this, + childEls = me.getChildEls(), + child, childName, i, k; + + for (i = childEls.length; i--; ) { + childName = childEls[i]; + if (typeof childName != 'string') { + childName = childName.name; + } + + child = me[childName]; + if (child) { + me[childName] = null; + child.remove(); + } + } + }, + + + addChildEls: function () { + var me = this, + args = arguments; + + if (me.hasOwnProperty('childEls')) { + me.childEls.push.apply(me.childEls, args); + } else { + me.childEls = me.getChildEls().concat(Array.prototype.slice.call(args)); + } + + me.prune(me.childEls, false); + }, + + + applyChildEls: function(el, id) { + var me = this, + childEls = me.getChildEls(), + baseId, childName, i, selector, value; + + baseId = (id || me.id) + '-'; + for (i = childEls.length; i--; ) { + childName = childEls[i]; + + if (typeof childName == 'string') { + + + value = el.getById(baseId + childName); + } else { + if ((selector = childName.select)) { + value = Ext.select(selector, true, el.dom); + } else if ((selector = childName.selectNode)) { + value = Ext.get(Ext.DomQuery.selectNode(selector, el.dom)); + } else { + + value = el.getById(childName.id || (baseId + childName.itemId)); + } + + childName = childName.name; + } + + me[childName] = value; + } + }, + + getChildEls: function () { + var me = this, + self; + + + if (me.hasOwnProperty('childEls')) { + return me.childEls; + } + + + + self = me.self; + return self.$childEls || me.getClassChildEls(self); + }, + + getClassChildEls: function (cls) { + var me = this, + result = cls.$childEls, + childEls, i, length, forked, mixin, mixins, name, parts, proto, supr, superMixins; + + if (!result) { + + + + + supr = cls.superclass; + if (supr) { + supr = supr.self; + parts = [supr.$childEls || me.getClassChildEls(supr)]; + superMixins = supr.prototype.mixins || {}; + } else { + parts = []; + superMixins = {}; + } + + proto = cls.prototype; + mixins = proto.mixins; + for (name in mixins) { + if (mixins.hasOwnProperty(name) && !superMixins.hasOwnProperty(name)) { + mixin = mixins[name].self; + parts.push(mixin.$childEls || me.getClassChildEls(mixin)); + } + } + + parts.push(proto.hasOwnProperty('childEls') && proto.childEls); + + for (i = 0, length = parts.length; i < length; ++i) { + childEls = parts[i]; + if (childEls && childEls.length) { + if (!result) { + result = childEls; + } else { + if (!forked) { + forked = true; + result = result.slice(0); + } + result.push.apply(result, childEls); + } + } + } + + cls.$childEls = result = (result ? me.prune(result, !forked) : []); + } + + return result; + }, + + prune: function (childEls, shared) { + var index = childEls.length, + map = {}, + name; + + while (index--) { + name = childEls[index]; + if (typeof name != 'string') { + name = name.name; + } + + if (!map[name]) { + map[name] = 1; + } else { + if (shared) { + shared = false; + childEls = childEls.slice(0); + } + Ext.Array.erase(childEls, index, 1); + } + } + + return childEls; + }, + + + removeChildEls: function (testFn) { + var me = this, + old = me.getChildEls(), + keepers = (me.childEls = []), + n, i, cel; + + for (i = 0, n = old.length; i < n; ++i) { + cel = old[i]; + if (!testFn(cel)) { + keepers.push(cel); + } + } + } +}); + + +Ext.define('Ext.util.Renderable', { + + + + + frameCls: Ext.baseCSSPrefix + 'frame', + + frameIdRegex: /[\-]frame\d+[TMB][LCR]$/, + + frameElNames: ['TL','TC','TR','ML','MC','MR','BL','BC','BR'], + + frameTpl: [ + '{%this.renderDockedItems(out,values,0);%}', + '', + '
    {parent.baseCls}-{parent.ui}-{.}-tl{frameElCls}" role="presentation">', + '
    {parent.baseCls}-{parent.ui}-{.}-tr{frameElCls}" role="presentation">', + '
    {parent.baseCls}-{parent.ui}-{.}-tc{frameElCls}" role="presentation">
    ', + '
    ', + '
    ', + '
    ', + '
    {parent.baseCls}-{parent.ui}-{.}-ml{frameElCls}" role="presentation">', + '
    {parent.baseCls}-{parent.ui}-{.}-mr{frameElCls}" role="presentation">', + '
    {parent.baseCls}-{parent.ui}-{.}-mc{frameElCls}" role="presentation">', + '{%this.applyRenderTpl(out, values)%}', + '
    ', + '
    ', + '
    ', + '', + '
    {parent.baseCls}-{parent.ui}-{.}-bl{frameElCls}" role="presentation">', + '
    {parent.baseCls}-{parent.ui}-{.}-br{frameElCls}" role="presentation">', + '
    {parent.baseCls}-{parent.ui}-{.}-bc{frameElCls}" role="presentation">
    ', + '
    ', + '
    ', + '
    ', + '{%this.renderDockedItems(out,values,1);%}' + ], + + frameTableTpl: [ + '{%this.renderDockedItems(out,values,0);%}', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '
    {parent.baseCls}-{parent.ui}-{.}-tl{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-tc{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-tr{frameElCls}" role="presentation">
    {parent.baseCls}-{parent.ui}-{.}-ml{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-mc{frameElCls}" role="presentation">', + '{%this.applyRenderTpl(out, values)%}', + ' {parent.baseCls}-{parent.ui}-{.}-mr{frameElCls}" role="presentation">
    {parent.baseCls}-{parent.ui}-{.}-bl{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-bc{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-br{frameElCls}" role="presentation">
    ', + '{%this.renderDockedItems(out,values,1);%}' + ], + + + afterRender : function() { + var me = this, + data = {}, + protoEl = me.protoEl, + target = me.el, + item, pre, hide, contentEl; + + me.finishRenderChildren(); + + + + if (me.contentEl) { + pre = Ext.baseCSSPrefix; + hide = pre + 'hide-'; + contentEl = Ext.get(me.contentEl); + contentEl.removeCls([pre+'hidden', hide+'display', hide+'offsets', hide+'nosize']); + me.getContentTarget().appendChild(contentEl.dom); + } + + protoEl.writeTo(data); + + + + + item = data.removed; + if (item) { + target.removeCls(item); + } + + item = data.cls; + if (item.length) { + target.addCls(item); + } + + item = data.style; + if (data.style) { + target.setStyle(item); + } + + me.protoEl = null; + + + if (!me.ownerCt) { + me.updateLayout(); + } + }, + + afterFirstLayout : function(width, height) { + var me = this, + x = me.x, + y = me.y, + hasX, + hasY, + pos, xy; + + + + if (!me.ownerLayout) { + hasX = Ext.isDefined(x); + hasY = Ext.isDefined(y); + } + + + + if (me.floating && (!hasX || !hasY)) { + if (me.floatParent) { + pos = me.floatParent.getTargetEl().getViewRegion(); + xy = me.el.getAlignToXY(me.floatParent.getTargetEl(), 'c-c'); + pos.x = xy[0] - pos.x; + pos.y = xy[1] - pos.y; + } else { + xy = me.el.getAlignToXY(me.container, 'c-c'); + pos = me.container.translateXY(xy[0], xy[1]); + } + x = hasX ? x : pos.x; + y = hasY ? y : pos.y; + hasX = hasY = true; + } + + if (hasX || hasY) { + me.setPosition(x, y); + } + me.onBoxReady(width, height); + }, + + + applyRenderSelectors: function() { + var me = this, + selectors = me.renderSelectors, + el = me.el, + dom = el.dom, + selector; + + me.applyChildEls(el); + + + + + if (selectors) { + for (selector in selectors) { + if (selectors.hasOwnProperty(selector) && selectors[selector]) { + me[selector] = Ext.get(Ext.DomQuery.selectNode(selectors[selector], dom)); + } + } + } + }, + + beforeRender: function () { + var me = this, + target = me.getTargetEl(), + overflowEl = me.getOverflowEl(), + layout = me.getComponentLayout(), + + overflowStyle = me.getOverflowStyle(); + + + me.frame = me.frame || me.alwaysFramed; + + if (!layout.initialized) { + layout.initLayout(); + } + + + + if (overflowEl) { + overflowEl.setStyle(overflowStyle); + me.overflowStyleSet = true; + } + + me.setUI(me.ui); + + if (me.disabled) { + + me.disable(true); + } + }, + + + doApplyRenderTpl: function(out, values) { + + + + var me = values.$comp, + tpl; + + + if (!me.rendered) { + tpl = me.initRenderTpl(); + tpl.applyOut(values.renderData, out); + } + }, + + + doAutoRender: function() { + var me = this; + if (!me.rendered) { + if (me.floating) { + me.render(document.body); + } else { + me.render(Ext.isBoolean(me.autoRender) ? Ext.getBody() : me.autoRender); + } + } + }, + + doRenderContent: function (out, renderData) { + + + + var me = renderData.$comp; + + if (me.html) { + Ext.DomHelper.generateMarkup(me.html, out); + delete me.html; + } + + if (me.tpl) { + + if (!me.tpl.isTemplate) { + me.tpl = new Ext.XTemplate(me.tpl); + } + + if (me.data) { + + me.tpl.applyOut(me.data, out); + delete me.data; + } + } + }, + + doRenderFramingDockedItems: function (out, renderData, after) { + + + + var me = renderData.$comp; + + + + if (!me.rendered && me.doRenderDockedItems) { + + + renderData.renderData.$skipDockedItems = true; + + + + me.doRenderDockedItems.call(this, out, renderData, after); + } + }, + + + finishRender: function(containerIdx) { + var me = this, + tpl, data, el; + + + + + + + + + + if (!me.el || me.$pid) { + if (me.container) { + el = me.container.getById(me.id, true); + } else { + el = Ext.getDom(me.id); + } + + if (!me.el) { + + me.wrapPrimaryEl(el); + } else { + + + delete me.$pid; + + if (!me.el.dom) { + + me.wrapPrimaryEl(me.el); + } + el.parentNode.insertBefore(me.el.dom, el); + Ext.removeNode(el); + + } + } else if (!me.rendering) { + + + + tpl = me.initRenderTpl(); + if (tpl) { + data = me.initRenderData(); + tpl.insertFirst(me.getTargetEl(), data); + } + } + + + if (!me.container) { + + me.container = Ext.get(me.el.dom.parentNode); + } + + if (me.ctCls) { + me.container.addCls(me.ctCls); + } + + + me.onRender(me.container, containerIdx); + + + if (!me.overflowStyleSet) { + me.getOverflowEl().setStyle(me.getOverflowStyle()); + } + + + + me.el.setVisibilityMode(Ext.Element[me.hideMode.toUpperCase()]); + + if (me.overCls) { + me.el.hover(me.addOverCls, me.removeOverCls, me); + } + + if (me.hasListeners.render) { + me.fireEvent('render', me); + } + + me.afterRender(); + if (me.hasListeners.afterrender) { + me.fireEvent('afterrender', me); + } + me.initEvents(); + + if (me.hidden) { + + + + me.el.hide(); + } + }, + + finishRenderChildren: function () { + var layout = this.getComponentLayout(); + + layout.finishRender(); + }, + + getElConfig : function() { + var me = this, + autoEl = me.autoEl, + frameInfo = me.getFrameInfo(), + config = { + tag: 'div', + tpl: frameInfo ? me.initFramingTpl(frameInfo.table) : me.initRenderTpl() + }, + protoEl = me.protoEl, + i, frameElNames, len, suffix, frameGenId, frameData; + + me.initStyles(protoEl); + if (frameInfo) { + protoEl.setStyle('background-image', 'none'); + } + protoEl.writeTo(config); + protoEl.flush(); + + if (Ext.isString(autoEl)) { + config.tag = autoEl; + } else { + Ext.apply(config, autoEl); + } + + + config.id = me.id; + + if (config.tpl) { + + if (frameInfo) { + frameElNames = me.frameElNames; + len = frameElNames.length; + + config.tplData = frameData = me.getFrameRenderData(); + frameData.renderData = me.initRenderData(); + frameGenId = frameData.fgid; + + + for (i = 0; i < len; i++) { + suffix = frameElNames[i]; + me.addChildEls({ name: 'frame' + suffix, id: frameGenId + suffix }); + } + + + me.addChildEls({ + name: 'frameBody', + id: frameGenId + 'MC' + }); + } else { + config.tplData = me.initRenderData(); + } + } + + return config; + }, + + + + initFramingTpl: function(table) { + var tpl = this.getFrameTpl(table); + + if (tpl && !tpl.applyRenderTpl) { + this.setupFramingTpl(tpl); + } + + return tpl; + }, + + + setupFramingTpl: function(frameTpl) { + frameTpl.applyRenderTpl = this.doApplyRenderTpl; + frameTpl.renderDockedItems = this.doRenderFramingDockedItems; + }, + + + getInsertPosition: function(position) { + + if (position !== undefined) { + if (Ext.isNumber(position)) { + position = this.container.dom.childNodes[position]; + } + else { + position = Ext.getDom(position); + } + } + + return position; + }, + + getRenderTree: function() { + var me = this; + + if (!me.hasListeners.beforerender || me.fireEvent('beforerender', me) !== false) { + me.beforeRender(); + + + + me.rendering = true; + + if (me.el) { + + + + return { + tag: 'div', + id: (me.$pid = Ext.id()) + }; + } + + return me.getElConfig(); + } + + return null; + }, + + initContainer: function(container) { + var me = this; + + + + + if (!container && me.el) { + container = me.el.dom.parentNode; + me.allowDomMove = false; + } + me.container = container.dom ? container : Ext.get(container); + + return me.container; + }, + + + initRenderData: function() { + var me = this; + + return Ext.apply({ + $comp: me, + id: me.id, + ui: me.ui, + uiCls: me.uiCls, + baseCls: me.baseCls, + componentCls: me.componentCls, + frame: me.frame, + childElCls: '' + }, me.renderData); + }, + + + initRenderTpl: function() { + var tpl = this.getTpl('renderTpl'); + + if (tpl && !tpl.renderContent) { + this.setupRenderTpl(tpl); + } + + return tpl; + }, + + + onRender: function(parentNode, containerIdx) { + var me = this, + x = me.x, + y = me.y, + lastBox = null, + width, height, + el = me.el, + body; + + me.applyRenderSelectors(); + + + + me.rendering = null; + + me.rendered = true; + + + if (x != null) { + lastBox = {x:x}; + } + if (y != null) { + (lastBox = lastBox || {}).y = y; + } + + + + if (!me.getFrameInfo() && Ext.isBorderBox) { + width = me.width; + height = me.height; + + if (typeof width === 'number') { + lastBox = lastBox || {}; + lastBox.width = width; + } + if (typeof height === 'number') { + lastBox = lastBox || {}; + lastBox.height = height; + } + } + + me.lastBox = el.lastBox = lastBox; + }, + + + render: function(container, position) { + var me = this, + el = me.el && (me.el = Ext.get(me.el)), + vetoed, + tree, + nextSibling; + + Ext.suspendLayouts(); + + container = me.initContainer(container); + + nextSibling = me.getInsertPosition(position); + + if (!el) { + tree = me.getRenderTree(); + if (me.ownerLayout && me.ownerLayout.transformItemRenderTree) { + tree = me.ownerLayout.transformItemRenderTree(tree); + } + + + if (tree) { + if (nextSibling) { + el = Ext.DomHelper.insertBefore(nextSibling, tree); + } else { + el = Ext.DomHelper.append(container, tree); + } + + me.wrapPrimaryEl(el); + } + } else { + if (!me.hasListeners.beforerender || me.fireEvent('beforerender', me) !== false) { + me.beforeRender(); + + me.initStyles(el); + if (me.allowDomMove !== false) { + + if (nextSibling) { + container.dom.insertBefore(el.dom, nextSibling); + } else { + container.dom.appendChild(el.dom); + } + } + } else { + vetoed = true; + } + } + + if (el && !vetoed) { + me.finishRender(position); + } + + Ext.resumeLayouts(!container.isDetachedBody); + }, + + + ensureAttachedToBody: function (runLayout) { + var comp = this, + body; + + while (comp.ownerCt) { + comp = comp.ownerCt; + } + + if (comp.container.isDetachedBody) { + comp.container = body = Ext.getBody(); + body.appendChild(comp.el.dom); + if (runLayout) { + comp.updateLayout(); + } + if (typeof comp.x == 'number' || typeof comp.y == 'number') { + comp.setPosition(comp.x, comp.y); + } + } + }, + + setupRenderTpl: function (renderTpl) { + renderTpl.renderBody = renderTpl.renderContent = this.doRenderContent; + }, + + wrapPrimaryEl: function (dom) { + this.el = Ext.get(dom, true); + }, + + + initFrame : function() { + if (Ext.supports.CSS3BorderRadius || !this.frame) { + return; + } + + var me = this, + frameInfo = me.getFrameInfo(), + frameTpl, frameGenId, + frameElNames = me.frameElNames, + len = frameElNames.length, + i, frameData, suffix; + + if (frameInfo) { + frameTpl = me.getFrameTpl(frameInfo.table); + frameData = me.getFrameRenderData(); + frameGenId = frameData.fgid; + + + + frameTpl.insertFirst(me.el, frameData); + + + + me.frameBody = me.el.down('.' + me.frameCls + '-mc'); + + + me.removeChildEls(function (c) { + return c.id && me.frameIdRegex.test(c.id); + }); + + + for (i = 0; i < len; i++) { + suffix = frameElNames[i]; + me['frame' + suffix] = me.el.getById(frameGenId + suffix); + } + } + }, + + getFrameRenderData: function () { + var me = this, + + frameInfo = me.frameSize, + frameGenId = (me.frameGenId || 0) + 1; + + + + me.frameGenId = frameGenId; + + return { + $comp: me, + fgid: me.id + '-frame' + frameGenId, + ui: me.ui, + uiCls: me.uiCls, + frameCls: me.frameCls, + baseCls: me.baseCls, + top: !!frameInfo.top, + left: !!frameInfo.left, + right: !!frameInfo.right, + bottom: !!frameInfo.bottom, + + + frameElCls: '' + }; + }, + + updateFrame: function() { + if (Ext.supports.CSS3BorderRadius || !this.frame) { + return; + } + + var me = this, + wasTable = me.frameSize && me.frameSize.table, + oldFrameTL = me.frameTL, + oldFrameBL = me.frameBL, + oldFrameML = me.frameML, + oldFrameMC = me.frameMC, + newMCClassName; + + me.initFrame(); + + if (oldFrameMC) { + if (me.frame) { + + + newMCClassName = me.frameMC.dom.className; + + + + oldFrameMC.insertAfter(me.frameMC); + me.frameMC.remove(); + + + me.frameBody = me.frameMC = oldFrameMC; + + + oldFrameMC.dom.className = newMCClassName; + + + if (wasTable) { + me.el.query('> table')[1].remove(); + } + else { + if (oldFrameTL) { + oldFrameTL.remove(); + } + if (oldFrameBL) { + oldFrameBL.remove(); + } + if (oldFrameML) { + oldFrameML.remove(); + } + } + } + } + else if (me.frame) { + me.applyRenderSelectors(); + } + }, + + + getFrameInfo: function() { + + if (Ext.supports.CSS3BorderRadius || !this.frame) { + return false; + } + + var me = this, + frameInfoCache = me.frameInfoCache, + el = me.el || me.protoEl, + cls = el.dom ? el.dom.className : el.classList.join(' '), + frameInfo = frameInfoCache[cls], + max = Math.max, + styleEl, pos, info, frameTop, frameRight, frameBottom, frameLeft, + borderWidthT, borderWidthR, borderWidthB, borderWidthL, + paddingT, paddingR, paddingB, paddingL, + borderRadiusTL, borderRadiusTR, borderRadiusBR, borderRadiusBL; + + if (frameInfo == null) { + + styleEl = Ext.fly(me.getStyleProxy(cls), 'frame-style-el'); + info = styleEl.getStyle('background-image'); + + pos = info.indexOf('about:blank#'); + if (pos < 0) { + frameInfo = false; + } else { + + + + + + + + + + + + + + + + + + info = info.substring(pos+12).split('-'); + + borderRadiusTL = parseInt(info[1], 10); + borderRadiusTR = parseInt(info[2], 10); + borderRadiusBR = parseInt(info[3], 10); + borderRadiusBL = parseInt(info[4], 10); + borderWidthT = parseInt(info[5], 10); + borderWidthR = parseInt(info[6], 10); + borderWidthB = parseInt(info[7], 10); + borderWidthL = parseInt(info[8], 10); + paddingT = parseInt(info[9], 10); + paddingR = parseInt(info[10], 10); + paddingB = parseInt(info[11], 10); + paddingL = parseInt(info[12], 10); + + + + frameTop = max(borderWidthT, max(borderRadiusTL, borderRadiusTR)); + frameRight = max(borderWidthR, max(borderRadiusTR, borderRadiusBR)); + frameBottom = max(borderWidthB, max(borderRadiusBL, borderRadiusBR)); + frameLeft = max(borderWidthL, max(borderRadiusTL, borderRadiusBL)); + + frameInfo = { + table: info[0].charAt(0) === 't', + vertical: info[0].charAt(1) === 'v', + + top: frameTop, + right: frameRight, + bottom: frameBottom, + left: frameLeft, + + width: frameLeft + frameRight, + height: frameTop + frameBottom, + + maxWidth: max(frameTop, frameRight, frameBottom, frameLeft), + + border: { + top: borderWidthT, + right: borderWidthR, + bottom: borderWidthB, + left: borderWidthL, + width: borderWidthL + borderWidthR, + height: borderWidthT + borderWidthB + }, + padding: { + top: paddingT, + right: paddingR, + bottom: paddingB, + left: paddingL, + width: paddingL + paddingR, + height: paddingT + paddingB + }, + radius: { + tl: borderRadiusTL, + tr: borderRadiusTR, + br: borderRadiusBR, + bl: borderRadiusBL + } + }; + } + + + frameInfoCache[cls] = frameInfo; + } + + me.frame = !!frameInfo; + me.frameSize = frameInfo; + + return frameInfo; + }, + + + getStyleProxy: function(cls) { + var result = this.styleProxyEl || (Ext.AbstractComponent.prototype.styleProxyEl = Ext.getBody().createChild({ + style: { + position: 'absolute', + top: '-10000px' + } + }, null, true)); + + result.className = cls; + return result; + }, + + + getFrameTpl : function(table) { + return this.getTpl(table ? 'frameTableTpl' : 'frameTpl'); + }, + + + frameInfoCache: {} +}); + + +Ext.define('Ext.state.Provider', { + mixins: { + observable: Ext.util.Observable + }, + + + prefix: 'ext-', + + constructor : function(config){ + config = config || {}; + var me = this; + Ext.apply(me, config); + + me.addEvents("statechange"); + me.state = {}; + me.mixins.observable.constructor.call(me); + }, + + + get : function(name, defaultValue){ + return typeof this.state[name] == "undefined" ? + defaultValue : this.state[name]; + }, + + + clear : function(name){ + var me = this; + delete me.state[name]; + me.fireEvent("statechange", me, name, null); + }, + + + set : function(name, value){ + var me = this; + me.state[name] = value; + me.fireEvent("statechange", me, name, value); + }, + + + decodeValue : function(value){ + + + + + + + + + + var me = this, + re = /^(a|n|d|b|s|o|e)\:(.*)$/, + matches = re.exec(unescape(value)), + all, + type, + keyValue, + values, + vLen, + v; + + if(!matches || !matches[1]){ + return; + } + + type = matches[1]; + value = matches[2]; + switch (type) { + case 'e': + return null; + case 'n': + return parseFloat(value); + case 'd': + return new Date(Date.parse(value)); + case 'b': + return (value == '1'); + case 'a': + all = []; + if(value != ''){ + values = value.split('^'); + vLen = values.length; + + for (v = 0; v < vLen; v++) { + value = values[v]; + all.push(me.decodeValue(value)); + } + } + return all; + case 'o': + all = {}; + if(value != ''){ + values = value.split('^'); + vLen = values.length; + + for (v = 0; v < vLen; v++) { + value = values[v]; + keyValue = value.split('='); + all[keyValue[0]] = me.decodeValue(keyValue[1]); + } + } + return all; + default: + return value; + } + }, + + + encodeValue : function(value){ + var flat = '', + i = 0, + enc, + len, + key; + + if (value == null) { + return 'e:1'; + } else if(typeof value == 'number') { + enc = 'n:' + value; + } else if(typeof value == 'boolean') { + enc = 'b:' + (value ? '1' : '0'); + } else if(Ext.isDate(value)) { + enc = 'd:' + value.toGMTString(); + } else if(Ext.isArray(value)) { + for (len = value.length; i < len; i++) { + flat += this.encodeValue(value[i]); + if (i != len - 1) { + flat += '^'; + } + } + enc = 'a:' + flat; + } else if (typeof value == 'object') { + for (key in value) { + if (typeof value[key] != 'function' && value[key] !== undefined) { + flat += key + '=' + this.encodeValue(value[key]) + '^'; + } + } + enc = 'o:' + flat.substring(0, flat.length-1); + } else { + enc = 's:' + value; + } + return escape(enc); + } +}); + + +Ext.define('Ext.state.Manager', { + singleton: true, + + constructor: function() { + this.provider = new Ext.state.Provider(); + }, + + + + setProvider : function(stateProvider){ + this.provider = stateProvider; + }, + + + get : function(key, defaultValue){ + return this.provider.get(key, defaultValue); + }, + + + set : function(key, value){ + this.provider.set(key, value); + }, + + + clear : function(key){ + this.provider.clear(key); + }, + + + getProvider : function(){ + return this.provider; + } +}); + + +Ext.define('Ext.state.Stateful', { + + + + mixins: { + observable: Ext.util.Observable + }, + + + + + + + stateful: false, + + + + + + + saveDelay: 100, + + constructor: function(config) { + var me = this; + + config = config || {}; + if (config.stateful !== undefined) { + me.stateful = config.stateful; + } + if (config.saveDelay !== undefined) { + me.saveDelay = config.saveDelay; + } + me.stateId = me.stateId || config.stateId; + + if (!me.stateEvents) { + me.stateEvents = []; + } + if (config.stateEvents) { + me.stateEvents.concat(config.stateEvents); + } + this.addEvents( + + 'beforestaterestore', + + + 'staterestore', + + + 'beforestatesave', + + + 'statesave' + ); + me.mixins.observable.constructor.call(me); + + if (me.stateful !== false) { + me.addStateEvents(me.stateEvents); + me.initState(); + } + }, + + + addStateEvents: function (events) { + var me = this, + i, event, stateEventsByName; + + if (me.stateful && me.getStateId()) { + if (typeof events == 'string') { + events = Array.prototype.slice.call(arguments, 0); + } + + stateEventsByName = me.stateEventsByName || (me.stateEventsByName = {}); + + for (i = events.length; i--; ) { + event = events[i]; + + if (!stateEventsByName[event]) { + stateEventsByName[event] = 1; + me.on(event, me.onStateChange, me); + } + } + } + }, + + + onStateChange: function(){ + var me = this, + delay = me.saveDelay, + statics, runner; + + if (!me.stateful) { + return; + } + + if (delay) { + if (!me.stateTask) { + statics = Ext.state.Stateful; + runner = statics.runner || (statics.runner = new Ext.util.TaskRunner()); + + me.stateTask = runner.newTask({ + run: me.saveState, + scope: me, + interval: delay, + repeat: 1 + }); + } + + me.stateTask.start(); + } else { + me.saveState(); + } + }, + + + saveState: function() { + var me = this, + id = me.stateful && me.getStateId(), + hasListeners = me.hasListeners, + state; + + if (id) { + state = me.getState() || {}; + if (!hasListeners.beforestatesave || me.fireEvent('beforestatesave', me, state) !== false) { + Ext.state.Manager.set(id, state); + if (hasListeners.statesave) { + me.fireEvent('statesave', me, state); + } + } + } + }, + + + getState: function(){ + return null; + }, + + + applyState: function(state) { + if (state) { + Ext.apply(this, state); + } + }, + + + getStateId: function() { + var me = this; + return me.stateId || (me.autoGenId ? null : me.id); + }, + + + initState: function(){ + var me = this, + id = me.stateful && me.getStateId(), + hasListeners = me.hasListeners, + state; + + if (id) { + state = Ext.state.Manager.get(id); + if (state) { + state = Ext.apply({}, state); + if (!hasListeners.beforestaterestore || me.fireEvent('beforestaterestore', me, state) !== false) { + me.applyState(state); + if (hasListeners.staterestore) { + me.fireEvent('staterestore', me, state); + } + } + } + } + }, + + + savePropToState: function (propName, state, stateName) { + var me = this, + value = me[propName], + config = me.initialConfig; + + if (me.hasOwnProperty(propName)) { + if (!config || config[propName] !== value) { + if (state) { + state[stateName || propName] = value; + } + return true; + } + } + return false; + }, + + + savePropsToState: function (propNames, state) { + var me = this, + i, n; + + if (typeof propNames == 'string') { + me.savePropToState(propNames, state); + } else { + for (i = 0, n = propNames.length; i < n; ++i) { + me.savePropToState(propNames[i], state); + } + } + + return state; + }, + + + destroy: function(){ + var me = this, + task = me.stateTask; + + if (task) { + task.destroy(); + me.stateTask = null; + } + + me.clearListeners(); + } +}); + + + +Ext.define('Ext.AbstractComponent', { + + + + + + + + + + + mixins: { + positionable: Ext.util.Positionable , + observable: Ext.util.Observable , + animate: Ext.util.Animate , + elementCt: Ext.util.ElementContainer , + renderable: Ext.util.Renderable , + state: Ext.state.Stateful + }, + + + + + + + + + + + + + + + + + + statics: { + AUTO_ID: 1000, + + pendingLayouts: null, + + layoutSuspendCount: 0, + + + cancelLayout: function(comp, isDestroying) { + var context = this.runningLayoutContext || this.pendingLayouts; + + if (context) { + context.cancelComponent(comp, false, isDestroying); + } + }, + + + flushLayouts: function () { + var me = this, + context = me.pendingLayouts; + + if (context && context.invalidQueue.length) { + me.pendingLayouts = null; + me.runningLayoutContext = context; + + Ext.override(context, { + runComplete: function () { + + + + me.runningLayoutContext = null; + + var result = this.callParent(); + if (Ext.globalEvents.hasListeners.afterlayout) { + Ext.globalEvents.fireEvent('afterlayout'); + } + return result; + } + }); + + context.run(); + } + }, + + + resumeLayouts: function (flush) { + if (this.layoutSuspendCount && ! --this.layoutSuspendCount) { + if (flush) { + this.flushLayouts(); + } + if (Ext.globalEvents.hasListeners.resumelayouts) { + Ext.globalEvents.fireEvent('resumelayouts'); + } + } + }, + + + suspendLayouts: function () { + ++this.layoutSuspendCount; + }, + + + updateLayout: function (comp, defer) { + var me = this, + running = me.runningLayoutContext, + pending; + + if (running) { + running.queueInvalidate(comp); + } else { + pending = me.pendingLayouts || (me.pendingLayouts = new Ext.layout.Context()); + pending.queueInvalidate(comp); + + if (!defer && !me.layoutSuspendCount && !comp.isLayoutSuspended()) { + me.flushLayouts(); + } + } + } + }, + + + + + isComponent: true, + + + getAutoId: function() { + this.autoGenId = true; + return ++Ext.AbstractComponent.AUTO_ID; + }, + + deferLayouts: false, + + + + + autoGenId: false, + + + + + + + + + renderTpl: '{%this.renderContent(out,values)%}', + + + + + + + + + + + + + frameSize: null, + + + + + + + + + + + tplWriteMode: 'overwrite', + + + baseCls: Ext.baseCSSPrefix + 'component', + + + + + + + + + disabledCls: Ext.baseCSSPrefix + 'item-disabled', + + + ui: 'default', + + + uiCls: [], + + + + + + + + + + + + + + + hidden: false, + + + disabled: false, + + + + + draggable: false, + + + floating: false, + + + hideMode: 'display', + + + + + + + + + + + + + + + + autoShow: false, + + + autoRender: false, + + + allowDomMove: true, + + + + + rendered: false, + + + componentLayoutCounter: 0, + + + shrinkWrap: 2, + + weight: 0, + + + maskOnDisable: true, + + + _isLayoutRoot: false, + + + contentPaddingProperty: 'padding', + + horizontalPosProp: 'left', + + + constructor : function(config) { + var me = this, + i, len, xhooks; + + if (config) { + Ext.apply(me, config); + + xhooks = me.xhooks; + if (xhooks) { + delete me.xhooks; + Ext.override(me, xhooks); + } + } else { + config = {}; + } + + me.initialConfig = config; + + me.mixins.elementCt.constructor.call(me); + + me.addEvents( + + 'beforeactivate', + + 'activate', + + 'beforedeactivate', + + 'deactivate', + + 'added', + + 'disable', + + 'enable', + + 'beforeshow', + + 'show', + + 'beforehide', + + 'hide', + + 'removed', + + 'beforerender', + + 'render', + + 'afterrender', + + 'boxready', + + 'beforedestroy', + + 'destroy', + + 'resize', + + 'move', + + 'focus', + + 'blur' + ); + + me.getId(); + + me.setupProtoEl(); + + + + if (me.cls) { + me.initialCls = me.cls; + me.protoEl.addCls(me.cls); + } + if (me.style) { + me.initialStyle = me.style; + me.protoEl.setStyle(me.style); + } + + me.renderData = me.renderData || {}; + me.renderSelectors = me.renderSelectors || {}; + + if (me.plugins) { + me.plugins = me.constructPlugins(); + } + + + if (!me.hasListeners) { + me.hasListeners = new me.HasListeners(); + } + + me.initComponent(); + + + Ext.ComponentManager.register(me); + + + me.mixins.observable.constructor.call(me); + me.mixins.state.constructor.call(me, config); + + + this.addStateEvents('resize'); + + + if (me.plugins) { + for (i = 0, len = me.plugins.length; i < len; i++) { + me.plugins[i] = me.initPlugin(me.plugins[i]); + } + } + + me.loader = me.getLoader(); + + if (me.renderTo) { + me.render(me.renderTo); + + + + } + + + + if (me.autoShow && !me.isContained) { + me.show(); + } + + }, + + initComponent: function () { + + + this.plugins = this.constructPlugins(); + + + + this.setSize(this.width, this.height); + }, + + + getState: function() { + var me = this, + state = null, + sizeModel = me.getSizeModel(); + + if (sizeModel.width.configured) { + state = me.addPropertyToState(state, 'width'); + } + if (sizeModel.height.configured) { + state = me.addPropertyToState(state, 'height'); + } + + return state; + }, + + + addPropertyToState: function (state, propName, value) { + var me = this, + len = arguments.length; + + + + if (len == 3 || me.hasOwnProperty(propName)) { + if (len < 3) { + value = me[propName]; + } + + + + if (value !== me.initialConfig[propName]) { + (state || (state = {}))[propName] = value; + } + } + + return state; + }, + + show: Ext.emptyFn, + + animate: function(animObj) { + var me = this, + hasToWidth, + hasToHeight, + toHeight, + toWidth, + to, + clearWidth, + clearHeight, + curWidth, w, curHeight, h, isExpanding, + wasConstrained, + wasConstrainedHeader, + passedCallback, + oldOverflow; + + animObj = animObj || {}; + to = animObj.to || {}; + + if (Ext.fx.Manager.hasFxBlock(me.id)) { + return me; + } + + hasToWidth = Ext.isDefined(to.width); + if (hasToWidth) { + toWidth = Ext.Number.constrain(to.width, me.minWidth, me.maxWidth); + } + + hasToHeight = Ext.isDefined(to.height); + if (hasToHeight) { + toHeight = Ext.Number.constrain(to.height, me.minHeight, me.maxHeight); + } + + + if (!animObj.dynamic && (hasToWidth || hasToHeight)) { + curWidth = (animObj.from ? animObj.from.width : undefined) || me.getWidth(); + w = curWidth; + curHeight = (animObj.from ? animObj.from.height : undefined) || me.getHeight(); + h = curHeight; + isExpanding = false; + + if (hasToHeight && toHeight > curHeight) { + h = toHeight; + isExpanding = true; + } + if (hasToWidth && toWidth > curWidth) { + w = toWidth; + isExpanding = true; + } + + + if (hasToHeight || hasToWidth) { + oldOverflow = me.el.getStyle('overtflow'); + if (oldOverflow !== 'hidden') { + me.el.setStyle('overflow', 'hidden'); + } + } + + + + + if (isExpanding) { + clearWidth = !Ext.isNumber(me.width); + clearHeight = !Ext.isNumber(me.height); + + + + + me.setSize(w, h); + me.el.setSize(curWidth, curHeight); + + if (clearWidth) { + delete me.width; + } + if (clearHeight) { + delete me.height; + } + } + if (hasToWidth) { + to.width = toWidth; + } + + if (hasToHeight) { + to.height = toHeight; + } + } + + + + wasConstrained = me.constrain; + wasConstrainedHeader = me.constrainHeader; + if (wasConstrained || wasConstrainedHeader) { + me.constrain = me.constrainHeader = false; + passedCallback = animObj.callback; + animObj.callback = function() { + me.constrain = wasConstrained; + me.constrainHeader = wasConstrainedHeader; + + if (passedCallback) { + passedCallback.call(animObj.scope||me, arguments); + } + if (oldOverflow !== 'hidden') { + me.el.setStyle('overflow', oldOverflow); + } + }; + } + return me.mixins.animate.animate.apply(me, arguments); + }, + + onHide: function() { + + if (this.ownerLayout) { + this.updateLayout({ isRoot: false }); + } + }, + + onShow : function() { + this.updateLayout({ isRoot: false }); + }, + + + constructPlugin: function(plugin) { + var me = this; + + + if (typeof plugin == 'string') { + plugin = Ext.PluginManager.create({}, plugin, me); + } + + else { + plugin = Ext.PluginManager.create(plugin, null, me); + } + return plugin; + }, + + + constructPlugins: function() { + var me = this, + plugins = me.plugins, + result, i, len; + + if (plugins) { + result = []; + if (!Ext.isArray(plugins)) { + plugins = [ plugins ]; + } + for (i = 0, len = plugins.length; i < len; i++) { + + result[i] = me.constructPlugin(plugins[i]); + } + } + + me.pluginsInitialized = true; + return result; + }, + + + initPlugin : function(plugin) { + plugin.init(this); + + return plugin; + }, + + + + addPlugin: function(plugin) { + var me = this; + + plugin = me.constructPlugin(plugin); + if (me.plugins) { + me.plugins.push(plugin); + } else { + me.plugins = [ plugin ]; + } + if (me.pluginsInitialized) { + me.initPlugin(plugin); + } + return plugin; + }, + + removePlugin: function(plugin) { + Ext.Array.remove(this.plugins, plugin); + plugin.destroy(); + }, + + + + findPlugin: function(ptype) { + if (this.plugins) { + return Ext.Array.findBy(this.plugins, function(plugin) { + if (plugin.ptype === ptype) { + return true; + } + }); + } + }, + + + beforeLayout: Ext.emptyFn, + + + updateAria: Ext.emptyFn, + + + registerFloatingItem: function(cmp) { + var me = this; + if (!me.floatingDescendants) { + me.floatingDescendants = new Ext.ZIndexManager(me); + } + me.floatingDescendants.register(cmp); + }, + + unregisterFloatingItem: function(cmp) { + var me = this; + if (me.floatingDescendants) { + me.floatingDescendants.unregister(cmp); + } + }, + + layoutSuspendCount: 0, + + suspendLayouts: function () { + var me = this; + if (!me.rendered) { + return; + } + if (++me.layoutSuspendCount == 1) { + me.suspendLayout = true; + } + }, + + resumeLayouts: function (flushOptions) { + var me = this; + if (!me.rendered) { + return; + } + if (! --me.layoutSuspendCount) { + me.suspendLayout = false; + if (flushOptions && !me.isLayoutSuspended()) { + me.updateLayout(flushOptions); + } + } + }, + + setupProtoEl: function() { + var cls = this.initCls(); + + this.protoEl = new Ext.util.ProtoElement({ + cls: cls.join(' ') + }); + }, + + initCls: function() { + var me = this, + cls = [ me.baseCls, me.getComponentLayout().targetCls ]; + + if (Ext.isDefined(me.cmpCls)) { + if (Ext.isDefined(Ext.global.console)) { + Ext.global.console.warn('Ext.Component: cmpCls has been deprecated. Please use componentCls.'); + } + me.componentCls = me.cmpCls; + delete me.cmpCls; + } + + if (me.componentCls) { + cls.push(me.componentCls); + } else { + me.componentCls = me.baseCls; + } + + return cls; + }, + + + setUI: function(ui) { + var me = this, + uiCls = me.uiCls, + activeUI = me.activeUI, + classes; + + if (ui === activeUI) { + + return; + } + + + if (activeUI) { + classes = me.removeClsWithUI(uiCls, true); + + if (classes.length) { + me.removeCls(classes); + } + + + me.removeUIFromElement(); + } + else { + + me.uiCls = []; + } + + + me.ui = ui; + + + + me.activeUI = ui; + + + me.addUIToElement(); + + classes = me.addClsWithUI(uiCls, true); + + if (classes.length) { + me.addCls(classes); + } + + + + + if (me.rendered) { + me.updateLayout(); + } + }, + + + addClsWithUI: function(classes, skip) { + var me = this, + clsArray = [], + i = 0, + uiCls = me.uiCls = Ext.Array.clone(me.uiCls), + activeUI = me.activeUI, + length, + cls; + + if (typeof classes === "string") { + classes = (classes.indexOf(' ') < 0) ? [classes] : Ext.String.splitWords(classes); + } + + length = classes.length; + + for (; i < length; i++) { + cls = classes[i]; + + if (cls && !me.hasUICls(cls)) { + uiCls.push(cls); + + + if (activeUI) { + clsArray = clsArray.concat(me.addUIClsToElement(cls)); + } + } + } + + if (skip !== true && activeUI) { + me.addCls(clsArray); + } + + return clsArray; + }, + + + removeClsWithUI: function(classes, skip) { + var me = this, + clsArray = [], + i = 0, + extArray = Ext.Array, + remove = extArray.remove, + uiCls = me.uiCls = extArray.clone(me.uiCls), + activeUI = me.activeUI, + length, cls; + + if (typeof classes === "string") { + classes = (classes.indexOf(' ') < 0) ? [classes] : Ext.String.splitWords(classes); + } + + length = classes.length; + + for (i = 0; i < length; i++) { + cls = classes[i]; + + if (cls && me.hasUICls(cls)) { + remove(uiCls, cls); + + + if (activeUI) { + clsArray = clsArray.concat(me.removeUIClsFromElement(cls)); + } + } + } + + if (skip !== true && activeUI) { + me.removeCls(clsArray); + } + + return clsArray; + }, + + + hasUICls: function(cls) { + var me = this, + uiCls = me.uiCls || []; + + return Ext.Array.contains(uiCls, cls); + }, + + frameElementsArray: ['tl', 'tc', 'tr', 'ml', 'mc', 'mr', 'bl', 'bc', 'br'], + + + addUIClsToElement: function(cls) { + var me = this, + baseClsUi = me.baseCls + '-' + me.ui + '-' + cls, + result = [Ext.baseCSSPrefix + cls, me.baseCls + '-' + cls, baseClsUi], + frameElementsArray, frameElementsLength, i, el, frameElement; + + if (me.rendered && me.frame && !Ext.supports.CSS3BorderRadius) { + + frameElementsArray = me.frameElementsArray; + frameElementsLength = frameElementsArray.length; + + + for (i = 0; i < frameElementsLength; i++) { + frameElement = frameElementsArray[i]; + el = me['frame' + frameElement.toUpperCase()]; + + if (el) { + el.addCls(baseClsUi + '-' + frameElement); + } + } + } + + return result; + }, + + + removeUIClsFromElement: function(cls) { + var me = this, + baseClsUi = me.baseCls + '-' + me.ui + '-' + cls, + result = [Ext.baseCSSPrefix + cls, me.baseCls + '-' + cls, baseClsUi], + frameElementsArray, frameElementsLength, i, el, frameElement; + + if (me.rendered && me.frame && !Ext.supports.CSS3BorderRadius) { + + frameElementsArray = me.frameElementsArray; + frameElementsLength = frameElementsArray.length; + + + for (i = 0; i < frameElementsLength; i++) { + frameElement = frameElementsArray[i]; + el = me['frame' + frameElement.toUpperCase()]; + + if (el) { + el.addCls(baseClsUi + '-' + frameElement); + } + } + } + + return result; + }, + + + addUIToElement: function() { + var me = this, + baseClsUI = me.baseCls + '-' + me.ui, + frameElementsArray, frameElementsLength, i, el, frameElement; + + me.addCls(baseClsUI); + + if (me.rendered && me.frame && !Ext.supports.CSS3BorderRadius) { + + frameElementsArray = me.frameElementsArray; + frameElementsLength = frameElementsArray.length; + + + for (i = 0; i < frameElementsLength; i++) { + frameElement = frameElementsArray[i]; + el = me['frame' + frameElement.toUpperCase()]; + + if (el) { + el.addCls(baseClsUI + '-' + frameElement); + } + } + } + }, + + + removeUIFromElement: function() { + var me = this, + baseClsUI = me.baseCls + '-' + me.ui, + frameElementsArray, frameElementsLength, i, el, frameElement; + + me.removeCls(baseClsUI); + + if (me.rendered && me.frame && !Ext.supports.CSS3BorderRadius) { + + frameElementsArray = me.frameElementsArray; + frameElementsLength = frameElementsArray.length; + + for (i = 0; i < frameElementsLength; i++) { + frameElement = frameElementsArray[i]; + el = me['frame' + frameElement.toUpperCase()]; + + if (el) { + el.removeCls(baseClsUI + '-' + frameElement); + } + } + } + }, + + + getTpl: function(name) { + return Ext.XTemplate.getTpl(this, name); + }, + + + initStyles: function(targetEl) { + var me = this, + Element = Ext.Element, + margin = me.margin, + border = me.border, + cls = me.cls, + style = me.style, + x = me.x, + y = me.y, + width, height; + + me.initPadding(targetEl); + + if (margin != null) { + targetEl.setStyle('margin', this.unitizeBox((margin === true) ? 5 : margin)); + } + + if (border != null) { + me.setBorder(border, targetEl); + } + + + + if (cls && cls != me.initialCls) { + targetEl.addCls(cls); + me.cls = me.initialCls = null; + } + if (style && style != me.initialStyle) { + targetEl.setStyle(style); + me.style = me.initialStyle = null; + } + + if (x != null) { + targetEl.setStyle(me.horizontalPosProp, (typeof x == 'number') ? (x + 'px') : x); + } + if (y != null) { + targetEl.setStyle('top', (typeof y == 'number') ? (y + 'px') : y); + } + + + + if (!me.getFrameInfo()) { + width = me.width; + height = me.height; + + + if (width != null) { + if (typeof width === 'number') { + if (Ext.isBorderBox) { + targetEl.setStyle('width', width + 'px'); + } + } else { + targetEl.setStyle('width', width); + } + } + if (height != null) { + if (typeof height === 'number') { + if (Ext.isBorderBox) { + targetEl.setStyle('height', height + 'px'); + } + } else { + targetEl.setStyle('height', height); + } + } + } + }, + + + initPadding: function(targetEl) { + var me = this, + padding = me.padding; + + if (padding != null) { + if (me.layout && me.layout.managePadding && me.contentPaddingProperty === 'padding') { + + + + + + targetEl.setStyle('padding', 0); + } else { + + + targetEl.setStyle('padding', this.unitizeBox((padding === true) ? 5 : padding)); + } + } + }, + + parseBox: function(box) { + return Ext.dom.Element.parseBox(box); + }, + + unitizeBox: function(box) { + return Ext.dom.Element.unitizeBox(box); + }, + + + setMargin: function(margin, preventLayout) { + var me = this; + + if (me.rendered) { + if (!margin && margin !== 0) { + margin = ''; + } else { + if (margin === true) { + margin = 5; + } + margin = this.unitizeBox(margin); + } + me.getTargetEl().setStyle('margin', margin); + if (!preventLayout) { + me.updateLayout(); + } + } else { + me.margin = margin; + } + }, + + + initEvents : function() { + var me = this, + afterRenderEvents = me.afterRenderEvents, + afterRenderEvent, el, property, index, len; + + if (afterRenderEvents) { + for (property in afterRenderEvents) { + el = me[property]; + + if (el && el.on) { + afterRenderEvent = afterRenderEvents[property]; + + for (index = 0, len = afterRenderEvent.length ; index < len ; ++index) { + me.mon(el, afterRenderEvent[index]); + } + } + } + } + + + + + me.addFocusListener(); + }, + + + addFocusListener: function() { + var me = this, + focusEl = me.getFocusEl(), + needsTabIndex; + + + + + + + + + + if (focusEl) { + + + if (focusEl.isComponent) { + return focusEl.addFocusListener(); + } + + + + + needsTabIndex = focusEl.needsTabIndex(); + if (!me.focusListenerAdded && (!needsTabIndex || Ext.FocusManager.enabled)) { + if (needsTabIndex) { + focusEl.dom.tabIndex = -1; + } + focusEl.on({ + focus: me.onFocus, + blur: me.onBlur, + scope: me + }); + me.focusListenerAdded = true; + } + } + }, + + + getFocusEl: Ext.emptyFn, + + isFocusable: function() { + var me = this, + focusEl; + if ((me.focusable !== false) && (focusEl = me.getFocusEl()) && me.rendered && !me.destroying && !me.isDestroyed && !me.disabled && me.isVisible(true)) { + + + + + return focusEl.isFocusable(true); + } + }, + + + beforeFocus: Ext.emptyFn, + + + onFocus: function(e) { + var me = this, + focusCls = me.focusCls, + focusEl = me.getFocusEl(); + + if (!me.disabled) { + me.beforeFocus(e); + if (focusCls && focusEl) { + focusEl.addCls(me.addClsWithUI(focusCls, true)); + } + if (!me.hasFocus) { + me.hasFocus = true; + me.fireEvent('focus', me, e); + } + } + }, + + + beforeBlur : Ext.emptyFn, + + + onBlur : function(e) { + var me = this, + focusCls = me.focusCls, + focusEl = me.getFocusEl(); + + if (me.destroying) { + return; + } + + me.beforeBlur(e); + if (focusCls && focusEl) { + focusEl.removeCls(me.removeClsWithUI(focusCls, true)); + } + if (me.validateOnBlur) { + me.validate(); + } + me.hasFocus = false; + me.fireEvent('blur', me, e); + me.postBlur(e); + }, + + + postBlur : Ext.emptyFn, + + + is: function(selector) { + return Ext.ComponentQuery.is(this, selector); + }, + + + up: function (selector) { + var result = this.getRefOwner(); + if (selector) { + for (; result; result = result.getRefOwner()) { + if (selector.isComponent) { + if (result === selector) { + return result; + } + } else { + if (Ext.ComponentQuery.is(result, selector)) { + return result; + } + } + } + } + return result; + }, + + + nextSibling: function(selector) { + var o = this.ownerCt, it, last, idx, c; + if (o) { + it = o.items; + idx = it.indexOf(this) + 1; + if (idx) { + if (selector) { + for (last = it.getCount(); idx < last; idx++) { + if ((c = it.getAt(idx)).is(selector)) { + return c; + } + } + } else { + if (idx < it.getCount()) { + return it.getAt(idx); + } + } + } + } + return null; + }, + + + previousSibling: function(selector) { + var o = this.ownerCt, it, idx, c; + if (o) { + it = o.items; + idx = it.indexOf(this); + if (idx != -1) { + if (selector) { + for (--idx; idx >= 0; idx--) { + if ((c = it.getAt(idx)).is(selector)) { + return c; + } + } + } else { + if (idx) { + return it.getAt(--idx); + } + } + } + } + return null; + }, + + + previousNode: function(selector, includeSelf) { + var node = this, + ownerCt = node.ownerCt, + result, + it, i, sib; + + + if (includeSelf && node.is(selector)) { + return node; + } + + if (ownerCt) { + for (it = ownerCt.items.items, i = Ext.Array.indexOf(it, node) - 1; i > -1; i--) { + sib = it[i]; + if (sib.query) { + result = sib.query(selector); + result = result[result.length - 1]; + if (result) { + return result; + } + } + if (sib.is(selector)) { + return sib; + } + } + return ownerCt.previousNode(selector, true); + } + return null; + }, + + + nextNode: function(selector, includeSelf) { + var node = this, + ownerCt = node.ownerCt, + result, + it, len, i, sib; + + + if (includeSelf && node.is(selector)) { + return node; + } + + if (ownerCt) { + for (it = ownerCt.items.items, i = Ext.Array.indexOf(it, node) + 1, len = it.length; i < len; i++) { + sib = it[i]; + if (sib.is(selector)) { + return sib; + } + if (sib.down) { + result = sib.down(selector); + if (result) { + return result; + } + } + } + return ownerCt.nextNode(selector); + } + return null; + }, + + + getId : function() { + return this.id || (this.id = 'ext-comp-' + (this.getAutoId())); + }, + + + getItemId : function() { + return this.itemId || this.id; + }, + + + getEl : function() { + return this.el; + }, + + + getTargetEl: function() { + return this.frameBody || this.el; + }, + + + getOverflowEl: function(){ + return this.getTargetEl(); + }, + + + getOverflowStyle: function() { + var me = this, + result = null, + ox, oy, + overflowStyle; + + + + + if (typeof me.autoScroll === 'boolean') { + result = { + overflow: overflowStyle = me.autoScroll ? 'auto' : '' + }; + me.scrollFlags = { + overflowX: overflowStyle, + overflowY: overflowStyle, + x: true, + y: true, + both: true + }; + } else { + ox = me.overflowX; + oy = me.overflowY; + if (ox !== undefined || oy !== undefined) { + result = { + 'overflowX': ox = ox || '', + 'overflowY': oy = oy || '' + }; + + + me.scrollFlags = { + overflowX: ox, + overflowY: oy, + x: ox = (ox === 'auto' || ox === 'scroll'), + y: oy = (oy === 'auto' || oy === 'scroll'), + both: ox && oy + }; + } else { + me.scrollFlags = { + overflowX: '', + overflowY: '', + x: false, + y: false, + both: false + }; + } + } + + + + if (result && Ext.isIE7m) { + result.position = 'relative'; + } + + return result; + }, + + + isXType: function(xtype, shallow) { + if (shallow) { + return this.xtype === xtype; + } + else { + return this.xtypesMap[xtype]; + } + }, + + + getXTypes: function() { + var self = this.self, + xtypes, parentPrototype, parentXtypes; + + if (!self.xtypes) { + xtypes = []; + parentPrototype = this; + + while (parentPrototype) { + parentXtypes = parentPrototype.xtypes; + + if (parentXtypes !== undefined) { + xtypes.unshift.apply(xtypes, parentXtypes); + } + + parentPrototype = parentPrototype.superclass; + } + + self.xtypeChain = xtypes; + self.xtypes = xtypes.join('/'); + } + + return self.xtypes; + }, + + + update : function(htmlOrData, loadScripts, cb) { + var me = this, + isData = (me.tpl && !Ext.isString(htmlOrData)), + el; + + if (isData) { + me.data = htmlOrData; + } else { + me.html = Ext.isObject(htmlOrData) ? Ext.DomHelper.markup(htmlOrData) : htmlOrData; + } + + if (me.rendered) { + el = me.isContainer ? me.layout.getRenderTarget() : me.getTargetEl(); + if (isData) { + me.tpl[me.tplWriteMode](el, htmlOrData || {}); + } else { + el.update(me.html, loadScripts, cb); + } + me.updateLayout(); + } + + }, + + + setVisible : function(visible) { + return this[visible ? 'show': 'hide'](); + }, + + + isVisible: function(deep) { + var me = this, + hidden; + + if (me.hidden || !me.rendered || me.isDestroyed) { + hidden = true; + } else if (deep) { + hidden = me.isHierarchicallyHidden(); + } + + return !hidden; + }, + + isHierarchicallyHidden: function() { + var child = this, + hidden = false, + parent, parentHierarchyState; + + + + + + for (; (parent = child.ownerCt || child.floatParent); child = parent) { + parentHierarchyState = parent.getHierarchyState(); + if (parentHierarchyState.hidden) { + hidden = true; + break; + } + if (child.getHierarchyState().collapseImmune) { + + if (parent.collapsed && !child.collapseImmune) { + + + + hidden = true; + break; + } + } else { + + + + hidden = !!parentHierarchyState.collapsed; + break; + } + } + + return hidden; + }, + + onBoxReady: function(width, height) { + var me = this; + + if (me.disableOnBoxReady) { + me.onDisable(); + } else if (me.enableOnBoxReady) { + me.onEnable(); + } + if (me.resizable) { + me.initResizable(me.resizable); + } + + + + if (me.draggable) { + me.initDraggable(); + } + + if (me.hasListeners.boxready) { + me.fireEvent('boxready', me, width, height); + } + }, + + + enable: function(silent) { + var me = this; + + delete me.disableOnBoxReady; + me.removeCls(me.disabledCls); + if (me.rendered) { + me.onEnable(); + } else { + me.enableOnBoxReady = true; + } + + me.disabled = false; + delete me.resetDisable; + + if (silent !== true) { + me.fireEvent('enable', me); + } + + return me; + }, + + + disable: function(silent) { + var me = this; + + delete me.enableOnBoxReady; + me.addCls(me.disabledCls); + if (me.rendered) { + me.onDisable(); + } else { + me.disableOnBoxReady = true; + } + + me.disabled = true; + + if (silent !== true) { + delete me.resetDisable; + me.fireEvent('disable', me); + } + + return me; + }, + + + onEnable: function() { + if (this.maskOnDisable) { + this.el.dom.disabled = false; + this.unmask(); + } + }, + + + onDisable : function() { + var me = this, + focusCls = me.focusCls, + focusEl = me.getFocusEl(); + + if (focusCls && focusEl) { + focusEl.removeCls(me.removeClsWithUI(focusCls, true)); + } + + if (me.maskOnDisable) { + me.el.dom.disabled = true; + me.mask(); + } + }, + + mask: function() { + var box = this.lastBox, + target = this.getMaskTarget(), + args = []; + + + if (box) { + args[2] = box.height; + } + target.mask.apply(target, args); + }, + + unmask: function() { + this.getMaskTarget().unmask(); + }, + + getMaskTarget: function(){ + return this.el; + }, + + + isDisabled : function() { + return this.disabled; + }, + + + setDisabled : function(disabled) { + return this[disabled ? 'disable': 'enable'](); + }, + + + isHidden : function() { + return this.hidden; + }, + + + addCls : function(cls) { + var me = this, + el = me.rendered ? me.el : me.protoEl; + + el.addCls.apply(el, arguments); + return me; + }, + + + addClass : function() { + return this.addCls.apply(this, arguments); + }, + + + hasCls: function (cls) { + var me = this, + el = me.rendered ? me.el : me.protoEl; + + return el.hasCls.apply(el, arguments); + }, + + + removeCls : function(cls) { + var me = this, + el = me.rendered ? me.el : me.protoEl; + + el.removeCls.apply(el, arguments); + return me; + }, + + + addOverCls: function() { + var me = this; + if (!me.disabled) { + me.el.addCls(me.overCls); + } + }, + + removeOverCls: function() { + this.el.removeCls(this.overCls); + }, + + addListener : function(element, listeners, scope, options) { + var me = this, + fn, + option; + + if (Ext.isString(element) && (Ext.isObject(listeners) || options && options.element)) { + if (options.element) { + fn = listeners; + + listeners = {}; + listeners[element] = fn; + element = options.element; + if (scope) { + listeners.scope = scope; + } + + for (option in options) { + if (options.hasOwnProperty(option)) { + if (me.eventOptionsRe.test(option)) { + listeners[option] = options[option]; + } + } + } + } + + + + if (me[element] && me[element].on) { + me.mon(me[element], listeners); + } else { + me.afterRenderEvents = me.afterRenderEvents || {}; + if (!me.afterRenderEvents[element]) { + me.afterRenderEvents[element] = []; + } + me.afterRenderEvents[element].push(listeners); + } + return; + } + + return me.mixins.observable.addListener.apply(me, arguments); + }, + + + removeManagedListenerItem: function(isClear, managedListener, item, ename, fn, scope){ + var me = this, + element = managedListener.options ? managedListener.options.element : null; + + if (element) { + element = me[element]; + if (element && element.un) { + if (isClear || (managedListener.item === item && managedListener.ename === ename && (!fn || managedListener.fn === fn) && (!scope || managedListener.scope === scope))) { + element.un(managedListener.ename, managedListener.fn, managedListener.scope); + if (!isClear) { + Ext.Array.remove(me.managedListeners, managedListener); + } + } + } + } else { + return me.mixins.observable.removeManagedListenerItem.apply(me, arguments); + } + }, + + + getBubbleTarget : function() { + return this.ownerCt; + }, + + + isFloating : function() { + return this.floating; + }, + + + isDraggable : function() { + return !!this.draggable; + }, + + + isDroppable : function() { + return !!this.droppable; + }, + + + onAdded : function(container, pos) { + var me = this; + + me.ownerCt = container; + + if (me.hierarchyState) { + + + + me.hierarchyState.invalid = true; + + + + + + delete me.hierarchyState; + } + + if (me.hasListeners.added) { + me.fireEvent('added', me, container, pos); + } + }, + + + onRemoved : function(destroying) { + var me = this; + if (me.hasListeners.removed) { + me.fireEvent('removed', me, me.ownerCt); + } + delete me.ownerCt; + delete me.ownerLayout; + }, + + + beforeDestroy : Ext.emptyFn, + + + onResize: function(width, height, oldWidth, oldHeight) { + var me = this; + + + if (me.floating && me.constrain) { + me.doConstrain(); + } + if (me.hasListeners.resize) { + me.fireEvent('resize', me, width, height, oldWidth, oldHeight); + } + }, + + + setSize : function(width, height) { + var me = this; + + + if (width && typeof width == 'object') { + height = width.height; + width = width.width; + } + + + if (typeof width == 'number') { + me.width = Ext.Number.constrain(width, me.minWidth, me.maxWidth); + } else if (width === null) { + delete me.width; + } + + if (typeof height == 'number') { + me.height = Ext.Number.constrain(height, me.minHeight, me.maxHeight); + } else if (height === null) { + delete me.height; + } + + + + if (me.rendered && me.isVisible()) { + + + me.updateLayout({ + isRoot: false + }); + } + + return me; + }, + + + isLayoutRoot: function() { + var me = this, + ownerLayout = me.ownerLayout; + + + + + + if (!ownerLayout || me._isLayoutRoot || me.floating) { + return true; + } + + return ownerLayout.isItemLayoutRoot(me); + }, + + + isLayoutSuspended: function () { + var comp = this, + ownerLayout; + + while (comp) { + if (comp.layoutSuspendCount || comp.suspendLayout) { + return true; + } + + ownerLayout = comp.ownerLayout; + if (!ownerLayout) { + break; + } + + + + + + + comp = ownerLayout.owner; + } + + return false; + }, + + + updateLayout: function (options) { + var me = this, + defer, + lastBox = me.lastBox, + isRoot = options && options.isRoot; + + if (lastBox) { + + + lastBox.invalid = true; + } + + if (!me.rendered || me.layoutSuspendCount || me.suspendLayout) { + return; + } + + if (me.hidden) { + Ext.AbstractComponent.cancelLayout(me); + } else if (typeof isRoot != 'boolean') { + isRoot = me.isLayoutRoot(); + } + + + if (isRoot || !me.ownerLayout || !me.ownerLayout.onContentChange(me)) { + + if (!me.isLayoutSuspended()) { + + defer = (options && options.hasOwnProperty('defer')) ? options.defer : me.deferLayouts; + Ext.AbstractComponent.updateLayout(me, defer); + } + } + }, + + + getSizeModel: function (ownerCtSizeModel) { + var me = this, + models = Ext.layout.SizeModel, + ownerContext = me.componentLayout.ownerContext, + width = me.width, + height = me.height, + typeofWidth, typeofHeight, + hasPixelWidth, hasPixelHeight, + heightModel, ownerLayout, policy, shrinkWrap, topLevel, widthModel; + + if (ownerContext) { + + + + + widthModel = ownerContext.widthModel; + heightModel = ownerContext.heightModel; + } + + if (!widthModel || !heightModel) { + hasPixelWidth = ((typeofWidth = typeof width) == 'number'); + hasPixelHeight = ((typeofHeight = typeof height) == 'number'); + topLevel = me.floating || !(ownerLayout = me.ownerLayout); + + + if (topLevel) { + policy = Ext.layout.Layout.prototype.autoSizePolicy; + shrinkWrap = me.floating ? 3 : me.shrinkWrap; + + if (hasPixelWidth) { + widthModel = models.configured; + } + + if (hasPixelHeight) { + heightModel = models.configured; + } + } else { + policy = ownerLayout.getItemSizePolicy(me, ownerCtSizeModel); + shrinkWrap = ownerLayout.isItemShrinkWrap(me); + } + + if (ownerContext) { + ownerContext.ownerSizePolicy = policy; + } + + shrinkWrap = (shrinkWrap === true) ? 3 : (shrinkWrap || 0); + + + + + + if (topLevel && shrinkWrap) { + if (width && typeofWidth == 'string') { + shrinkWrap &= 2; + } + if (height && typeofHeight == 'string') { + shrinkWrap &= 1; + } + } + + if (shrinkWrap !== 3) { + if (!ownerCtSizeModel) { + ownerCtSizeModel = me.ownerCt && me.ownerCt.getSizeModel(); + } + + if (ownerCtSizeModel) { + shrinkWrap |= (ownerCtSizeModel.width.shrinkWrap ? 1 : 0) | (ownerCtSizeModel.height.shrinkWrap ? 2 : 0); + } + } + + if (!widthModel) { + if (!policy.setsWidth) { + if (hasPixelWidth) { + widthModel = models.configured; + } else { + widthModel = (shrinkWrap & 1) ? models.shrinkWrap : models.natural; + } + } else if (policy.readsWidth) { + if (hasPixelWidth) { + widthModel = models.calculatedFromConfigured; + } else { + widthModel = (shrinkWrap & 1) ? models.calculatedFromShrinkWrap : + models.calculatedFromNatural; + } + } else { + widthModel = models.calculated; + } + } + + if (!heightModel) { + if (!policy.setsHeight) { + if (hasPixelHeight) { + heightModel = models.configured; + } else { + heightModel = (shrinkWrap & 2) ? models.shrinkWrap : models.natural; + } + } else if (policy.readsHeight) { + if (hasPixelHeight) { + heightModel = models.calculatedFromConfigured; + } else { + heightModel = (shrinkWrap & 2) ? models.calculatedFromShrinkWrap : + models.calculatedFromNatural; + } + } else { + heightModel = models.calculated; + } + } + } + + + + return widthModel.pairsByHeightOrdinal[heightModel.ordinal]; + }, + + isDescendant: function(ancestor) { + if (ancestor.isContainer) { + for (var c = this.ownerCt; c; c = c.ownerCt) { + if (c === ancestor) { + return true; + } + } + } + return false; + }, + + + doComponentLayout : function() { + this.updateLayout(); + return this; + }, + + + forceComponentLayout: function () { + this.updateLayout(); + }, + + + setComponentLayout : function(layout) { + var currentLayout = this.componentLayout; + if (currentLayout && currentLayout.isLayout && currentLayout != layout) { + currentLayout.setOwner(null); + } + this.componentLayout = layout; + layout.setOwner(this); + }, + + getComponentLayout : function() { + var me = this; + + if (!me.componentLayout || !me.componentLayout.isLayout) { + me.setComponentLayout(Ext.layout.Layout.create(me.componentLayout, 'autocomponent')); + } + return me.componentLayout; + }, + + + afterComponentLayout: function(width, height, oldWidth, oldHeight) { + var me = this; + + if (++me.componentLayoutCounter === 1) { + me.afterFirstLayout(width, height); + } + + if (width !== oldWidth || height !== oldHeight) { + me.onResize(width, height, oldWidth, oldHeight); + } + }, + + + beforeComponentLayout: function(width, height) { + return true; + }, + + + setPosition: function(x, y, animate) { + var me = this, + pos = me.beforeSetPosition.apply(me, arguments); + + if (pos && me.rendered) { + x = pos.x; + y = pos.y; + + if (animate) { + + + + if (x !== me.getLocalX() || y !== me.getLocalY()) { + me.stopAnimation(); + me.animate(Ext.apply({ + duration: 1000, + listeners: { + afteranimate: Ext.Function.bind(me.afterSetPosition, me, [x, y]) + }, + to: { + x: x, + y: y + } + }, animate)); + } + } else { + me.setLocalXY(x, y); + me.afterSetPosition(x, y); + } + } + return me; + }, + + + beforeSetPosition: function (x, y, animate) { + var pos, x0; + + + + if (x) { + + if (Ext.isNumber(x0 = x[0])) { + animate = y; + y = x[1]; + x = x0; + } + + else if ((x0 = x.x) !== undefined) { + animate = y; + y = x.y; + x = x0; + } + } + + if (this.constrain || this.constrainHeader) { + pos = this.calculateConstrainedPosition(null, [x, y], true); + if (pos) { + x = pos[0]; + y = pos[1]; + } + } + + + pos = { + x : this.x = x, + y : this.y = y, + anim: animate, + hasX: x !== undefined, + hasY: y !== undefined + }; + + return (pos.hasX || pos.hasY) ? pos : null; + }, + + + afterSetPosition: function(x, y) { + var me = this; + me.onPosition(x, y); + if (me.hasListeners.move) { + me.fireEvent('move', me, x, y); + } + }, + + + onPosition: Ext.emptyFn, + + + setWidth : function(width) { + return this.setSize(width); + }, + + + setHeight : function(height) { + return this.setSize(undefined, height); + }, + + + getSize : function() { + return this.el.getSize(); + }, + + + getWidth : function() { + return this.el.getWidth(); + }, + + + getHeight : function() { + return this.el.getHeight(); + }, + + + getLoader: function(){ + var me = this, + autoLoad = me.autoLoad ? (Ext.isObject(me.autoLoad) ? me.autoLoad : {url: me.autoLoad}) : null, + loader = me.loader || autoLoad; + + if (loader) { + if (!loader.isLoader) { + me.loader = new Ext.ComponentLoader(Ext.apply({ + target: me, + autoLoad: autoLoad + }, loader)); + } else { + loader.setTarget(me); + } + return me.loader; + + } + return null; + }, + + + setDocked : function(dock, layoutParent) { + var me = this; + + me.dock = dock; + if (layoutParent && me.ownerCt && me.rendered) { + me.ownerCt.updateLayout(); + } + return me; + }, + + + setBorder: function(border, targetEl) { + var me = this, + initial = !!targetEl; + + if (me.rendered || initial) { + if (!initial) { + targetEl = me.el; + } + + if (!border) { + border = 0; + } else if (border === true) { + border = '1px'; + } else { + border = this.unitizeBox(border); + } + targetEl.setStyle('border-width', border); + if (!initial) { + me.updateLayout(); + } + } + me.border = border; + }, + + onDestroy : function() { + var me = this; + + if (me.monitorResize && Ext.EventManager.resizeEvent) { + Ext.EventManager.resizeEvent.removeListener(me.setSize, me); + } + + + Ext.destroy( + me.componentLayout, + me.loadMask, + me.floatingDescendants + ); + }, + + + destroy : function() { + var me = this, + selectors = me.renderSelectors, + selector, + el; + + if (!me.isDestroyed) { + if (!me.hasListeners.beforedestroy || me.fireEvent('beforedestroy', me) !== false) { + me.destroying = true; + me.beforeDestroy(); + + if (me.floating) { + delete me.floatParent; + + + if (me.zIndexManager) { + me.zIndexManager.unregister(me); + } + } else if (me.ownerCt && me.ownerCt.remove) { + me.ownerCt.remove(me, false); + } + + me.stopAnimation(); + me.onDestroy(); + + + Ext.destroy(me.plugins); + + if (me.hasListeners.destroy) { + me.fireEvent('destroy', me); + } + Ext.ComponentManager.unregister(me); + + me.mixins.state.destroy.call(me); + + me.clearListeners(); + + if (me.rendered) { + if (!me.preserveElOnDestroy) { + me.el.remove(); + } + me.mixins.elementCt.destroy.call(me); + if (selectors) { + for (selector in selectors) { + if (selectors.hasOwnProperty(selector)) { + el = me[selector]; + if (el) { + delete me[selector]; + el.remove(); + } + } + } + } + + delete me.el; + delete me.frameBody; + delete me.rendered; + } + + me.destroying = false; + me.isDestroyed = true; + } + } + }, + + + getPlugin: function(pluginId) { + var i = 0, + plugins = this.plugins, + ln = plugins.length; + for (; i < ln; i++) { + if (plugins[i].pluginId === pluginId) { + return plugins[i]; + } + } + }, + + + isDescendantOf: function(container) { + return !!this.findParentBy(function(p){ + return p === container; + }); + }, + + + getHierarchyState: function (inner) { + var me = this, + hierarchyState = (inner && me.hierarchyStateInner) || me.hierarchyState, + ownerCt = me.ownerCt, + parent, layout, hierarchyStateInner, getInner; + + if (!hierarchyState || hierarchyState.invalid) { + + + + + parent = me.getRefOwner(); + + if (ownerCt) { + + + getInner = me.ownerLayout === ownerCt.layout; + } + + me.hierarchyState = hierarchyState = + + + + + + Ext.Object.chain(parent ? parent.getHierarchyState(getInner) + : Ext.rootHierarchyState); + + me.initHierarchyState(hierarchyState); + if ((layout = me.componentLayout).initHierarchyState) { + layout.initHierarchyState(hierarchyState); + } + + if (me.isContainer) { + me.hierarchyStateInner = hierarchyStateInner = Ext.Object.chain(hierarchyState); + + layout = me.layout; + if (layout && layout.initHierarchyState) { + layout.initHierarchyState(hierarchyStateInner, hierarchyState); + } + if (inner) { + hierarchyState = hierarchyStateInner; + } + } + } + + return hierarchyState; + }, + + + initHierarchyState: function(hierarchyState) { + var me = this; + + if (me.collapsed) { + hierarchyState.collapsed = true; + } + if (me.hidden) { + hierarchyState.hidden = true; + } + if (me.collapseImmune) { + hierarchyState.collapseImmune = true; + } + }, + + + + + + getAnchorToXY: function(el, anchor, local, mySize) { + return el.getAnchorXY(anchor, local, mySize); + }, + + getBorderPadding: function() { + return this.el.getBorderPadding(); + }, + + getLocalX: function() { + return this.el.getLocalX(); + }, + + getLocalXY: function() { + return this.el.getLocalXY(); + }, + + getLocalY: function() { + return this.el.getLocalY(); + }, + + getX: function() { + return this.el.getX(); + }, + + getXY: function() { + return this.el.getXY(); + }, + + getY: function() { + return this.el.getY(); + }, + + setLocalX: function(x) { + this.el.setLocalX(x); + }, + + setLocalXY: function(x, y) { + this.el.setLocalXY(x, y); + }, + + setLocalY: function(y) { + this.el.setLocalY(y); + }, + + setX: function(x, animate) { + this.el.setX(x, animate); + }, + + setXY: function(xy, animate) { + this.el.setXY(xy, animate); + }, + + setY: function(y, animate) { + this.el.setY(y, animate); + } + + + + +}, function() { + var AbstractComponent = this; + + AbstractComponent.createAlias({ + on: 'addListener', + prev: 'previousSibling', + next: 'nextSibling' + }); + + + Ext.resumeLayouts = function (flush) { + AbstractComponent.resumeLayouts(flush); + }; + + + Ext.suspendLayouts = function () { + AbstractComponent.suspendLayouts(); + }; + + + Ext.batchLayouts = function(fn, scope) { + AbstractComponent.suspendLayouts(); + + fn.call(scope); + AbstractComponent.resumeLayouts(true); + }; +}); + + +Ext.define('Ext.AbstractPlugin', { + disabled: false, + + + isPlugin: true, + + constructor: function(config) { + this.pluginConfig = config; + Ext.apply(this, config); + }, + + clonePlugin: function(overrideCfg) { + return new this.self(Ext.apply({}, overrideCfg, this.pluginConfig)); + }, + + setCmp: function(cmp) { + this.cmp = cmp; + }, + + getCmp: function() { + return this.cmp; + }, + + + + + init: Ext.emptyFn, + + + destroy: Ext.emptyFn, + + + enable: function() { + this.disabled = false; + }, + + + disable: function() { + this.disabled = true; + } +}); + + +Ext.define('Ext.Action', { + + + + + + + + + + + + + + + constructor : function(config){ + this.initialConfig = config; + this.itemId = config.itemId = (config.itemId || config.id || Ext.id()); + this.items = []; + }, + + + isAction : true, + + + setText : function(text){ + this.initialConfig.text = text; + this.callEach('setText', [text]); + }, + + + getText : function(){ + return this.initialConfig.text; + }, + + + setIconCls : function(cls){ + this.initialConfig.iconCls = cls; + this.callEach('setIconCls', [cls]); + }, + + + getIconCls : function(){ + return this.initialConfig.iconCls; + }, + + + setDisabled : function(v){ + this.initialConfig.disabled = v; + this.callEach('setDisabled', [v]); + }, + + + enable : function(){ + this.setDisabled(false); + }, + + + disable : function(){ + this.setDisabled(true); + }, + + + isDisabled : function(){ + return this.initialConfig.disabled; + }, + + + setHidden : function(v){ + this.initialConfig.hidden = v; + this.callEach('setVisible', [!v]); + }, + + + show : function(){ + this.setHidden(false); + }, + + + hide : function(){ + this.setHidden(true); + }, + + + isHidden : function(){ + return this.initialConfig.hidden; + }, + + + setHandler : function(fn, scope){ + this.initialConfig.handler = fn; + this.initialConfig.scope = scope; + this.callEach('setHandler', [fn, scope]); + }, + + + each : function(fn, scope){ + Ext.each(this.items, fn, scope); + }, + + + callEach : function(fnName, args){ + var items = this.items, + i = 0, + len = items.length, + item; + + Ext.suspendLayouts(); + for(; i < len; i++){ + item = items[i]; + item[fnName].apply(item, args); + } + Ext.resumeLayouts(true); + }, + + + addComponent : function(comp){ + this.items.push(comp); + comp.on('destroy', this.removeComponent, this); + }, + + + removeComponent : function(comp){ + Ext.Array.remove(this.items, comp); + }, + + + execute : function(){ + this.initialConfig.handler.apply(this.initialConfig.scope || Ext.global, arguments); + } +}); + + +Ext.define('Ext.data.flash.BinaryXhr', { + + statics: { + + flashPluginActivated: function() { + Ext.data.flash.BinaryXhr.flashPluginActive = true; + Ext.data.flash.BinaryXhr.flashPlugin = document.getElementById("ext-flash-polyfill"); + Ext.globalEvents.fireEvent("flashready"); + }, + + + flashPluginActive: false, + + + flashPluginInjected: false, + + + + connectionIndex: 1, + + + liveConnections: {}, + + + flashPlugin: null, + + + onFlashStateChange: function(javascriptId, state, data) { + var connection; + + connection = this.liveConnections[Number(javascriptId)]; + if (connection) { + connection.onFlashStateChange(state, data); + } + }, + + + registerConnection: function(conn) { + var i = this.connectionIndex; + this.conectionIndex = this.connectionIndex + 1; + this.liveConnections[i] = conn; + return i; + }, + + + injectFlashPlugin: function() { + var divTag, pTag, aTag, iTag, + me=this, + flashLoaderPath, flashObjectPath; + + + + + + + iTag=document.createElement("img"); + iTag.setAttribute("src", window.location.protocol + '//www.adobe.com/images/shared/download_buttons/get_flash_player.gif'); + iTag.setAttribute("alt", "Get Adobe Flash player"); + + aTag=document.createElement("a"); + aTag.setAttribute("href", "http://www.adobe.com/go/getflashplayer"); + aTag.appendChild(iTag); + + pTag=document.createElement("p"); + pTag.innerHTML="To view this page ensure that Adobe Flash Player version 11.1.0 or greater is installed."; + + divTag=document.createElement("div"); + divTag.setAttribute("id", "ext-flash-polyfill"); + divTag.appendChild(pTag); + divTag.appendChild(iTag); + + Ext.getBody().dom.appendChild(divTag); + + + + + + flashLoaderPath = [Ext.Loader.getPath('Ext.data.Connection'), '../../../plugins/flash/swfobject.js'].join('/'); + flashObjectPath = "/plugins/flash/FlashPlugin.swf"; + if (Ext.flashPluginPath) { + flashObjectPath = Ext.flashPluginPath; + } + + Ext.Loader.loadScript({ + url:flashLoaderPath, + onLoad: function() { + + var swfVersionStr = "11.4.0"; + + var xiSwfUrlStr = "playerProductInstall.swf"; + var flashvars = {}; + var params = {}; + params.quality = "high"; + params.bgcolor = "#ffffff"; + params.allowscriptaccess = "sameDomain"; + params.allowfullscreen = "true"; + var attributes = {}; + attributes.id = "ext-flash-polyfill"; + attributes.name = "polyfill"; + attributes.align = "middle"; + swfobject.embedSWF( + flashObjectPath, "ext-flash-polyfill", + "0", "0", + swfVersionStr, xiSwfUrlStr, + flashvars, params, attributes); + }, + onError: function() { + }, + scope: me + }); + Ext.globalEvents.addEvents("flashready"); + Ext.data.flash.BinaryXhr.flashPluginInjected = true; + } + + + }, + + + readyState: 0, + + + status: 0, + + + + statusText: "", + + + responseBytes: null, + + + javascriptId: null, + + + + constructor: function (config) { + + if (!Ext.data.flash.BinaryXhr.flashPluginInjected) { + Ext.data.flash.BinaryXhr.injectFlashPlugin(); + } + var me = this; + + Ext.apply(me, config); + me.requestHeaders = {}; + }, + + + abort: function () { + var me = this; + + if (me.readyState == 4) { + return; + } + + me.aborted = true; + + if (!Ext.data.flash.BinaryXhr.flashPluginActive) { + Ext.globalEvents.removeListener("flashready", me.onFlashReady, me); + return; + } + + Ext.data.flash.BinaryXhr.flashPlugin.abortRequest(me.javascriptId); + + delete Ext.data.flash.BinaryXhr.liveConnections[me.javascriptId]; + }, + + + getAllResponseHeaders: function () { + var headers = []; + Ext.Object.each(this.responseHeaders, function (name, value) { + headers.push(name + ': ' + value); + }); + return headers.join('\x0d\x0a'); + }, + + + getResponseHeader: function (header) { + var headers = this.responseHeaders; + return (headers && headers[header]) || null; + }, + + + open: function (method, url, async, user, password) { + var me = this; + me.method = method; + me.url = url; + me.async = async !== false; + me.user = user; + me.password = password; + + }, + + + overrideMimeType: function (mimeType) { + this.mimeType = mimeType; + }, + + + send: function (body) { + var me = this; + me.body = body; + if (!Ext.data.flash.BinaryXhr.flashPluginActive) { + Ext.globalEvents.addListener("flashready", me.onFlashReady, me); + } else { + this.onFlashReady(); + } + }, + + + onFlashReady: function() { + var me = this, req, status; + me.javascriptId = Ext.data.flash.BinaryXhr.registerConnection(me); + + + req = { + method: me.method, + url: me.url, + user: me.user, + password: me.password, + mimeType: me.mimeType, + requestHeaders: me.requestHeaders, + body: me.body, + javascriptId: me.javascriptId + }; + status = Ext.data.flash.BinaryXhr.flashPlugin.postBinary(req); + }, + + + setReadyState: function (state) { + var me = this; + if (me.readyState != state) { + me.readyState = state; + me.onreadystatechange(); + } + }, + + + setRequestHeader: function (header, value) { + this.requestHeaders[header] = value; + }, + + + onreadystatechange: Ext.emptyFn, + + + parseData: function (data) { + var me = this; + + this.status = data.status || 0; + + me.responseHeaders = {}; + if (me.mimeType) { + me.responseHeaders["content-type"] = me.mimeType; + } + if (data.reason == "complete") { + + this.responseBytes = data.data; + me.responseHeaders["content-length"] = data.data.length; + } else if (data.reason == "error" || data.reason == "securityError") { + this.statusText = data.text; + me.responseHeaders["content-length"] = 0; + } + }, + + + onFlashStateChange: function(state, data) { + var me = this; + if (state == 4) { + + me.parseData(data); + + delete Ext.data.flash.BinaryXhr.liveConnections[me.javascriptId]; + } + me.setReadyState(state); + } + +}); + + +Ext.define('Ext.data.Connection', { + mixins: { + observable: Ext.util.Observable + }, + + + + + + statics: { + requestId: 0 + }, + + url: null, + async: true, + method: null, + username: '', + password: '', + + + disableCaching: true, + + + withCredentials: false, + + + binary: false, + + + cors: false, + + isXdr: false, + + defaultXdrContentType: 'text/plain', + + + disableCachingParam: '_dc', + + + timeout : 30000, + + + + + + + + + + useDefaultHeader : true, + defaultPostHeader : 'application/x-www-form-urlencoded; charset=UTF-8', + useDefaultXhrHeader : true, + defaultXhrHeader : 'XMLHttpRequest', + + constructor : function(config) { + config = config || {}; + Ext.apply(this, config); + + + + + this.requests = {}; + this.mixins.observable.constructor.call(this); + }, + + + request : function(options) { + options = options || {}; + var me = this, + scope = options.scope || window, + username = options.username || me.username, + password = options.password || me.password || '', + async, + requestOptions, + request, + headers, + xhr; + if (me.fireEvent('beforerequest', me, options) !== false) { + + requestOptions = me.setOptions(options, scope); + + if (me.isFormUpload(options)) { + me.upload(options.form, requestOptions.url, requestOptions.data, options); + return null; + } + + + if (options.autoAbort || me.autoAbort) { + me.abort(); + } + + + async = options.async !== false ? (options.async || me.async) : false; + xhr = me.openRequest(options, requestOptions, async, username, password); + + + if (!me.isXdr) { + headers = me.setupHeaders(xhr, options, requestOptions.data, requestOptions.params); + } + + + request = { + id: ++Ext.data.Connection.requestId, + xhr: xhr, + headers: headers, + options: options, + async: async, + binary: options.binary || me.binary, + timeout: setTimeout(function() { + request.timedout = true; + me.abort(request); + }, options.timeout || me.timeout) + }; + + me.requests[request.id] = request; + me.latestId = request.id; + + if (async) { + if (!me.isXdr) { + xhr.onreadystatechange = Ext.Function.bind(me.onStateChange, me, [request]); + } + } + + if (me.isXdr) { + me.processXdrRequest(request, xhr); + } + + + xhr.send(requestOptions.data); + if (!async) { + return me.onComplete(request); + } + return request; + } else { + Ext.callback(options.callback, options.scope, [options, undefined, undefined]); + return null; + } + }, + + processXdrRequest: function(request, xhr) { + var me = this; + + + delete request.headers; + + request.contentType = request.options.contentType || me.defaultXdrContentType; + + xhr.onload = Ext.Function.bind(me.onStateChange, me, [request, true]); + xhr.onerror = xhr.ontimeout = Ext.Function.bind(me.onStateChange, me, [request, false]); + }, + + processXdrResponse: function(response, xhr) { + + response.getAllResponseHeaders = function () { + return []; + }; + response.getResponseHeader = function () { + return ''; + }; + response.contentType = xhr.contentType || this.defaultXdrContentType; + }, + + + upload: function(form, url, params, options) { + form = Ext.getDom(form); + options = options || {}; + + var id = Ext.id(), + frame = document.createElement('iframe'), + hiddens = [], + encoding = 'multipart/form-data', + buf = { + target: form.target, + method: form.method, + encoding: form.encoding, + enctype: form.enctype, + action: form.action + }, + addField = function(name, value) { + hiddenItem = document.createElement('input'); + Ext.fly(hiddenItem).set({ + type: 'hidden', + value: value, + name: name + }); + form.appendChild(hiddenItem); + hiddens.push(hiddenItem); + }, + hiddenItem, obj, value, name, vLen, v, hLen, h; + + + Ext.fly(frame).set({ + id: id, + name: id, + cls: Ext.baseCSSPrefix + 'hide-display', + src: Ext.SSL_SECURE_URL + }); + + document.body.appendChild(frame); + + + if (document.frames) { + document.frames[id].name = id; + } + + Ext.fly(form).set({ + target: id, + method: 'POST', + enctype: encoding, + encoding: encoding, + action: url || buf.action + }); + + + if (params) { + obj = Ext.Object.fromQueryString(params) || {}; + + for (name in obj) { + if (obj.hasOwnProperty(name)) { + value = obj[name]; + if (Ext.isArray(value)) { + vLen = value.length; + for (v = 0; v < vLen; v++) { + addField(name, value[v]); + } + } else { + addField(name, value); + } + } + } + } + + Ext.fly(frame).on('load', Ext.Function.bind(this.onUploadComplete, this, [frame, options]), null, {single: !Ext.isOpera}); + form.submit(); + + Ext.fly(form).set(buf); + + hLen = hiddens.length; + + for (h = 0; h < hLen; h++) { + Ext.removeNode(hiddens[h]); + } + }, + + + onUploadComplete: function(frame, options) { + var me = this, + + response = { + responseText: '', + responseXML: null + }, callback, success, doc, contentNode; + + try { + doc = frame.contentWindow.document || frame.contentDocument || window.frames[frame.id].document; + + + if (doc) { + if (Ext.isOpera && doc.location == 'about:blank') { + return; + } + if (doc.body) { + + + + if ((contentNode = doc.body.firstChild) && /pre/i.test(contentNode.tagName)) { + response.responseText = contentNode.textContent; + } + + + + else if ((contentNode = doc.getElementsByTagName('textarea')[0])) { + response.responseText = contentNode.value; + } + + else { + response.responseText = doc.body.textContent || doc.body.innerText; + } + } + + response.responseXML = doc.XMLDocument || doc; + callback = options.success; + success = true; + } + } catch (e) { + + response.responseText = '{success:false,message:"' + Ext.String.trim(e.message || e.description) + '"}'; + callback = options.failure; + success = false; + } + + me.fireEvent('requestcomplete', me, response, options); + + Ext.callback(callback, options.scope, [response, options]); + Ext.callback(options.callback, options.scope, [options, success, response]); + + setTimeout(function() { + Ext.removeNode(frame); + }, 100); + }, + + + isFormUpload: function(options) { + var form = this.getForm(options); + if (form) { + return (options.isUpload || (/multipart\/form-data/i).test(form.getAttribute('enctype'))); + } + return false; + }, + + + getForm: function(options) { + return Ext.getDom(options.form) || null; + }, + + + setOptions: function(options, scope) { + var me = this, + params = options.params || {}, + extraParams = me.extraParams, + urlParams = options.urlParams, + url = options.url || me.url, + jsonData = options.jsonData, + method, + disableCache, + data; + + + + if (Ext.isFunction(params)) { + params = params.call(scope, options); + } + + + if (Ext.isFunction(url)) { + url = url.call(scope, options); + } + + url = this.setupUrl(options, url); + + + + data = options.rawData || options.binaryData || options.xmlData || jsonData || null; + if (jsonData && !Ext.isPrimitive(jsonData)) { + data = Ext.encode(data); + } + + if (options.binaryData) { + if (me.nativeBinaryPostSupport()) { + data = (new Uint8Array(options.binaryData)); + if ((Ext.isChrome && Ext.chromeVersion < 22) || Ext.isSafari || Ext.isGecko) { + data = data.buffer; + } + } + } + + + if (Ext.isObject(params)) { + params = Ext.Object.toQueryString(params); + } + + if (Ext.isObject(extraParams)) { + extraParams = Ext.Object.toQueryString(extraParams); + } + + params = params + ((extraParams) ? ((params) ? '&' : '') + extraParams : ''); + + urlParams = Ext.isObject(urlParams) ? Ext.Object.toQueryString(urlParams) : urlParams; + + params = this.setupParams(options, params); + + + method = (options.method || me.method || ((params || data) ? 'POST' : 'GET')).toUpperCase(); + this.setupMethod(options, method); + + + disableCache = options.disableCaching !== false ? (options.disableCaching || me.disableCaching) : false; + + if (method === 'GET' && disableCache) { + url = Ext.urlAppend(url, (options.disableCachingParam || me.disableCachingParam) + '=' + (new Date().getTime())); + } + + + if ((method == 'GET' || data) && params) { + url = Ext.urlAppend(url, params); + params = null; + } + + + if (urlParams) { + url = Ext.urlAppend(url, urlParams); + } + + return { + url: url, + method: method, + data: data || params || null + }; + }, + + + setupUrl: function(options, url) { + var form = this.getForm(options); + if (form) { + url = url || form.action; + } + return url; + }, + + + + setupParams: function(options, params) { + var form = this.getForm(options), + serializedForm; + if (form && !this.isFormUpload(options)) { + serializedForm = Ext.Element.serializeForm(form); + params = params ? (params + '&' + serializedForm) : serializedForm; + } + return params; + }, + + + setupMethod: function(options, method) { + if (this.isFormUpload(options)) { + return 'POST'; + } + return method; + }, + + + setupHeaders: function(xhr, options, data, params) { + var me = this, + headers = Ext.apply({}, options.headers || {}, me.defaultHeaders || {}), + contentType = me.defaultPostHeader, + jsonData = options.jsonData, + xmlData = options.xmlData, + key, + header; + + if (!headers['Content-Type'] && (data || params)) { + if (data) { + if (options.rawData) { + contentType = 'text/plain'; + } else { + if (xmlData && Ext.isDefined(xmlData)) { + contentType = 'text/xml'; + } else if (jsonData && Ext.isDefined(jsonData)) { + contentType = 'application/json'; + } + } + } + headers['Content-Type'] = contentType; + } + + if (me.useDefaultXhrHeader && !headers['X-Requested-With']) { + headers['X-Requested-With'] = me.defaultXhrHeader; + } + + try { + for (key in headers) { + if (headers.hasOwnProperty(key)) { + header = headers[key]; + xhr.setRequestHeader(key, header); + } + } + } catch(e) { + me.fireEvent('exception', key, header); + } + return headers; + }, + + + newRequest: function (options) { + var me = this, + xhr; + + if (options.binaryData) { + + if (me.nativeBinaryPostSupport()) { + xhr = this.getXhrInstance(); + } else { + + xhr = new Ext.data.flash.BinaryXhr(); + } + } else if ((options.cors || me.cors) && Ext.isIE && Ext.ieVersion <= 9) { + xhr = me.getXdrInstance(); + me.isXdr = true; + } else { + xhr = me.getXhrInstance(); + } + + return xhr; + }, + + + openRequest: function (options, requestOptions, async, username, password) { + var me = this, + xhr = me.newRequest(options); + + if (username) { + xhr.open(requestOptions.method, requestOptions.url, async, username, password); + } else { + if (me.isXdr) { + xhr.open(requestOptions.method, requestOptions.url); + } else { + xhr.open(requestOptions.method, requestOptions.url, async); + } + } + + if (options.binary || me.binary) { + if (window.Uint8Array) { + xhr.responseType = 'arraybuffer'; + } else if (xhr.overrideMimeType) { + + + + + xhr.overrideMimeType('text\/plain; charset=x-user-defined'); + } + } + + if (options.withCredentials || me.withCredentials) { + xhr.withCredentials = true; + } + + return xhr; + }, + + + getXdrInstance: function() { + var xdr; + + if (Ext.ieVersion >= 8) { + xdr = new XDomainRequest(); + } else { + Ext.Error.raise({ + msg: 'Your browser does not support CORS' + }); + } + + return xdr; + }, + + + getXhrInstance: (function() { + var options = [function() { + return new XMLHttpRequest(); + }, function() { + return new ActiveXObject('MSXML2.XMLHTTP.3.0'); + }, function() { + return new ActiveXObject('MSXML2.XMLHTTP'); + }, function() { + return new ActiveXObject('Microsoft.XMLHTTP'); + }], i = 0, + len = options.length, + xhr; + + for (; i < len; ++i) { + try { + xhr = options[i]; + xhr(); + break; + } catch(e) { + } + } + return xhr; + }()), + + + isLoading : function(request) { + if (!request) { + request = this.getLatest(); + } + if (!(request && request.xhr)) { + return false; + } + + var state = request.xhr.readyState; + return ((request.xhr instanceof Ext.data.flash.BinaryXhr) && state != 4) || !(state === 0 || state == 4); + }, + + + abort : function(request) { + var me = this, + xhr; + + if (!request) { + request = me.getLatest(); + } + + if (request && me.isLoading(request)) { + + xhr = request.xhr; + try { + xhr.onreadystatechange = null; + } catch (e) { + + + xhr.onreadystatechange = Ext.emptyFn; + } + xhr.abort(); + me.clearTimeout(request); + if (!request.timedout) { + request.aborted = true; + } + me.onComplete(request); + me.cleanup(request); + } + }, + + + abortAll: function(){ + var requests = this.requests, + id; + + for (id in requests) { + if (requests.hasOwnProperty(id)) { + this.abort(requests[id]); + } + } + }, + + + getLatest: function(){ + var id = this.latestId, + request; + + if (id) { + request = this.requests[id]; + } + return request || null; + }, + + + onStateChange : function(request, xdrResult) { + var me = this; + + + if ((request.xhr && request.xhr.readyState == 4) || me.isXdr) { + me.clearTimeout(request); + me.onComplete(request, xdrResult); + me.cleanup(request); + Ext.EventManager.idleEvent.fire(); + } + }, + + + clearTimeout: function(request) { + clearTimeout(request.timeout); + delete request.timeout; + }, + + + cleanup: function(request) { + request.xhr = null; + delete request.xhr; + }, + + + onComplete : function(request, xdrResult) { + var me = this, + options = request.options, + result, + success, + response; + + try { + result = me.parseStatus(request.xhr.status); + } catch (e) { + + result = { + success : false, + isException : false + }; + + } + success = me.isXdr ? xdrResult : result.success; + + if (success) { + response = me.createResponse(request); + me.fireEvent('requestcomplete', me, response, options); + Ext.callback(options.success, options.scope, [response, options]); + } else { + if (result.isException || request.aborted || request.timedout) { + response = me.createException(request); + } else { + response = me.createResponse(request); + } + me.fireEvent('requestexception', me, response, options); + Ext.callback(options.failure, options.scope, [response, options]); + } + Ext.callback(options.callback, options.scope, [options, success, response]); + delete me.requests[request.id]; + return response; + }, + + + parseStatus: function(status) { + + status = status == 1223 ? 204 : status; + + var success = (status >= 200 && status < 300) || status == 304, + isException = false; + + if (!success) { + switch (status) { + case 12002: + case 12029: + case 12030: + case 12031: + case 12152: + case 13030: + isException = true; + break; + } + } + return { + success: success, + isException: isException + }; + }, + + + createResponse : function(request) { + var me = this, + xhr = request.xhr, + isXdr = me.isXdr, + headers = {}, + lines = isXdr ? [] : xhr.getAllResponseHeaders().replace(/\r\n/g, '\n').split('\n'), + count = lines.length, + line, index, key, response, byteArray; + + while (count--) { + line = lines[count]; + index = line.indexOf(':'); + if (index >= 0) { + key = line.substr(0, index).toLowerCase(); + if (line.charAt(index + 1) == ' ') { + ++index; + } + headers[key] = line.substr(index + 1); + } + } + + request.xhr = null; + delete request.xhr; + + response = { + request: request, + requestId: request.id, + status: xhr.status, + statusText: xhr.statusText, + getResponseHeader: function(header) { + return headers[header.toLowerCase()]; + }, + getAllResponseHeaders: function() { + return headers; + } + }; + + if (isXdr) { + me.processXdrResponse(response, xhr); + } + + if (request.binary) { + response.responseBytes = me.getByteArray(xhr); + } else { + + + + + response.responseText = xhr.responseText; + response.responseXML = xhr.responseXML; + } + + + + xhr = null; + return response; + }, + + + createException : function(request) { + return { + request : request, + requestId : request.id, + status : request.aborted ? -1 : 0, + statusText : request.aborted ? 'transaction aborted' : 'communication failure', + aborted: request.aborted, + timedout: request.timedout + }; + }, + + + getByteArray: function(xhr) { + var response = xhr.response, + responseBody = xhr.responseBody, + byteArray, responseText, len, i; + + if (xhr instanceof Ext.data.flash.BinaryXhr) { + + byteArray = xhr.responseBytes; + } else if (window.Uint8Array) { + + + + byteArray = response ? new Uint8Array(response) : []; + } else if (Ext.isIE9p) { + + + + + try { + byteArray = new VBArray(responseBody).toArray(); + } catch(e) { + + + + + byteArray = []; + } + } else if (Ext.isIE) { + + + + + + if (!this.self.vbScriptInjected) { + this.injectVBScript(); + } + getIEByteArray(xhr.responseBody, byteArray = []); + } else { + + + byteArray = []; + responseText = xhr.responseText; + len = responseText.length; + for (i = 0; i < len; i++) { + + + + byteArray.push(responseText.charCodeAt(i) & 0xFF); + } + } + + return byteArray; + }, + + + injectVBScript: function() { + var scriptTag = document.createElement('script'); + scriptTag.type = 'text/vbscript'; + scriptTag.text = [ + 'Function getIEByteArray(byteArray, out)', + 'Dim len, i', + 'len = LenB(byteArray)', + 'For i = 1 to len', + 'out.push(AscB(MidB(byteArray, i, 1)))', + 'Next', + 'End Function' + ].join('\n'); + Ext.getHead().dom.appendChild(scriptTag); + this.self.vbScriptInjected = true; + }, + + + nativeBinaryPostSupport: function() { + return Ext.isChrome || + (Ext.isSafari && Ext.isDefined(window.Uint8Array)) || + (Ext.isGecko && Ext.isDefined(window.Uint8Array)); + } + + +}); + + +Ext.define('Ext.Ajax', { + extend: Ext.data.Connection , + singleton: true, + + + + + + + + + + + + + + + + + autoAbort : false +}); + + +Ext.define('Ext.util.Floating', { + + + + + focusOnToFront: true, + + + shadow: 'sides', + + + constrain: false, + + + + + + constructor: function (dom) { + var me = this; + + + me.fixed = me.fixed && !(Ext.isIE6 || Ext.isIEQuirks); + + me.el = new Ext.dom.Layer(Ext.apply({ + hideMode : me.hideMode, + hidden : me.hidden, + shadow : (typeof me.shadow != 'undefined') ? me.shadow : 'sides', + shadowOffset : me.shadowOffset, + constrain : false, + fixed : me.fixed, + shim : (me.shim === false) ? false : undefined + }, me.floating), dom); + + + + if (me.modal && !(Ext.FocusManager && Ext.FocusManager.enabled)) { + me.mon(me.el, { + keydown: me.onKeyDown, + scope: me + }); + } + + + me.mon(me.el, { + mousedown: me.onMouseDown, + scope: me + }); + + + me.floating = true; + + + + + me.registerWithOwnerCt(); + + me.initHierarchyEvents(); + }, + + initHierarchyEvents: function() { + var me = this, + syncHidden = this.syncHidden; + + if (!me.hasHierarchyEventListeners) { + me.mon(me.hierarchyEventSource, { + hide: syncHidden, + collapse: syncHidden, + show: syncHidden, + expand: syncHidden, + added: syncHidden, + scope: me + }); + me.hasHierarchyEventListeners = true; + } + }, + + registerWithOwnerCt: function() { + var me = this, + ownerCt = me.ownerCt, + zip = me.zIndexParent; + + if (zip) { + zip.unregisterFloatingItem(me); + } + + + + zip = me.zIndexParent = me.up('[floating]'); + + + + + me.setFloatParent(ownerCt || zip); + delete me.ownerCt; + + if (zip) { + zip.registerFloatingItem(me); + } else { + Ext.WindowManager.register(me); + } + }, + + + onKeyDown: function(e) { + var me = this, + shift, + focusables, + first, + last; + + + + + + + + + + + + + if (e.getKey() == Ext.EventObject.TAB) { + shift = e.shiftKey; + focusables = me.el.query(':focusable'); + first = focusables[0]; + last = focusables[focusables.length - 1]; + if (first && last && e.target === (shift ? first : last)) { + e.stopEvent(); + (shift ? last : first).focus(false, true); + } + } + }, + + + + onMouseDown: function (e) { + if (this.floating) { + + this.toFront(!!e.getTarget(':focusable')); + } + }, + + setFloatParent: function(floatParent) { + var me = this; + + me.floatParent = floatParent; + + + + if ((me.constrain || me.constrainHeader) && !me.constrainTo) { + me.constrainTo = floatParent ? floatParent.getTargetEl() : me.container; + } + }, + + onAfterFloatLayout: function(){ + this.syncShadow(); + }, + + + syncHidden: function() { + var me = this, + hidden = me.hidden || !me.rendered, + hierarchicallyHidden = me.hierarchicallyHidden = me.isHierarchicallyHidden(), + pendingShow = me.pendingShow; + + if (hidden !== hierarchicallyHidden) { + if (hierarchicallyHidden) { + me.hide(); + me.pendingShow = true; + } else if (pendingShow) { + delete me.pendingShow; + if (pendingShow.length) { + me.show.apply(me, pendingShow); + } else { + me.show(); + } + } + } + }, + + + + + + + setZIndex: function(index) { + var me = this; + + me.el.setZIndex(index); + + + index += 10; + + + + if (me.floatingDescendants) { + index = Math.floor(me.floatingDescendants.setBase(index) / 100) * 100 + 10000; + } + return index; + }, + + + doConstrain: function(constrainTo) { + var me = this, + + + + xy = me.calculateConstrainedPosition(constrainTo, null, true); + + + if (xy) { + me.setPosition(xy); + } + }, + + + toFront: function(preventFocus) { + var me = this, + zip = me.zIndexParent, + preventFocusSetting = me.preventFocusOnActivate; + + + + if (zip && me.bringParentToFront !== false) { + zip.toFront(true); + } + + if (!Ext.isDefined(preventFocus)) { + preventFocus = !me.focusOnToFront; + } + + if (preventFocus) { + me.preventFocusOnActivate = true; + } + if (me.zIndexManager.bringToFront(me, preventFocus)) { + if (!preventFocus) { + + + + me.focus(false, true); + } + } + + + me.preventFocusOnActivate = preventFocusSetting; + return me; + }, + + + setActive: function(active, newActive) { + var me = this; + + if (active) { + if (me.el.shadow && !me.maximized) { + me.el.enableShadow(true); + } + if (!me.preventFocusOnActivate) { + me.focus(false, true); + } + me.fireEvent('activate', me); + } else { + + + if (me.isWindow && (newActive && newActive.isWindow) && me.hideShadowOnDeactivate) { + me.el.disableShadow(); + } + me.fireEvent('deactivate', me); + } + }, + + + toBack: function() { + this.zIndexManager.sendToBack(this); + return this; + }, + + + center: function() { + var me = this, + xy; + + if (me.isVisible()) { + xy = me.getAlignToXY(me.container, 'c-c'); + me.setPagePosition(xy); + } else { + me.needsCenter = true; + } + return me; + }, + + onFloatShow: function() { + if (this.needsCenter) { + this.center(); + } + delete this.needsCenter; + }, + + + syncShadow : function() { + if (this.floating) { + this.el.sync(true); + } + }, + + + fitContainer: function(animate) { + var me = this, + parent = me.floatParent, + container = parent ? parent.getTargetEl() : me.container, + newBox = container.getViewSize(false), + newPosition = parent || (container.dom !== document.body) ? + + [0, 0] : + + container.getXY(); + + newBox.x = newPosition[0]; + newBox.y = newPosition[1]; + me.setBox(newBox, animate); + } +}); + + +Ext.define('Ext.Component', { + + + + alias: ['widget.component', 'widget.box'], + + extend: Ext.AbstractComponent , + + + + + + + + + mixins: { + floating: Ext.util.Floating + }, + + statics: { + + DIRECTION_TOP: 'top', + DIRECTION_RIGHT: 'right', + DIRECTION_BOTTOM: 'bottom', + DIRECTION_LEFT: 'left', + + VERTICAL_DIRECTION_Re: /^(?:top|bottom)$/, + + + + INVALID_ID_CHARS_Re: /[\.,\s]/g + }, + + + + + + + resizeHandles: 'all', + + + + + + + + + floating: false, + + + defaultAlign: 'tl-bl?', + + + toFrontOnShow: true, + + + + + + + + + + + + + + + + + + hideMode: 'display', + + offsetsCls: Ext.baseCSSPrefix + 'hide-offsets', + + bubbleEvents: [], + + defaultComponentLayoutType: 'autocomponent', + + + + + + + + + + constructor: function(config) { + var me = this; + + config = config || {}; + if (config.initialConfig) { + + + if (config.isAction) { + me.baseAction = config; + } + config = config.initialConfig; + + } + else if (config.tagName || config.dom || Ext.isString(config)) { + + config = { + applyTo: config, + id: config.id || config + }; + } + + me.callParent([config]); + + + + if (me.baseAction){ + me.baseAction.addComponent(me); + } + }, + + + initComponent: function() { + var me = this; + + me.callParent(); + + if (me.listeners) { + me.on(me.listeners); + me.listeners = null; + } + me.enableBubble(me.bubbleEvents); + }, + + + + afterRender: function() { + var me = this; + + me.callParent(); + + if (!(me.x && me.y) && (me.pageX || me.pageY)) { + me.setPagePosition(me.pageX, me.pageY); + } + }, + + + setAutoScroll : function(scroll) { + var me = this; + + me.autoScroll = !!scroll; + + + + + if (me.rendered) { + me.getOverflowEl().setStyle(me.getOverflowStyle()); + } + me.updateLayout(); + return me; + }, + + + setOverflowXY: function(overflowX, overflowY) { + var me = this, + argCount = arguments.length; + + if (argCount) { + me.overflowX = overflowX || ''; + if (argCount > 1) { + me.overflowY = overflowY || ''; + } + } + + + + + if (me.rendered) { + me.getOverflowEl().setStyle(me.getOverflowStyle()); + } + me.updateLayout(); + return me; + }, + + beforeRender: function () { + var me = this, + floating = me.floating, + cls; + + if (floating) { + me.addCls(Ext.baseCSSPrefix + 'layer'); + + cls = floating.cls; + if (cls) { + me.addCls(cls); + } + } + + return me.callParent(); + }, + + afterComponentLayout: function(){ + this.callParent(arguments); + if (this.floating) { + this.onAfterFloatLayout(); + } + }, + + + makeFloating : function (dom) { + this.mixins.floating.constructor.call(this, dom); + }, + + wrapPrimaryEl: function (dom) { + if (this.floating) { + this.makeFloating(dom); + } else { + this.callParent(arguments); + } + }, + + initResizable: function(resizable) { + var me = this; + + resizable = Ext.apply({ + target: me, + dynamic: false, + constrainTo: me.constrainTo || (me.floatParent ? me.floatParent.getTargetEl() : null), + handles: me.resizeHandles + }, resizable); + resizable.target = me; + me.resizer = new Ext.resizer.Resizer(resizable); + }, + + getDragEl: function() { + return this.el; + }, + + initDraggable: function() { + var me = this, + + + + + dragTarget = (me.resizer && me.resizer.el !== me.el) ? me.resizerComponent = new Ext.Component({ + el: me.resizer.el, + rendered: true, + container: me.container + }) : me, + ddConfig = Ext.applyIf({ + el: dragTarget.getDragEl(), + constrainTo: (me.constrain||me.draggable.constrain) ? (me.constrainTo || (me.floatParent ? me.floatParent.getTargetEl() : me.container)) : undefined + }, me.draggable); + + + if (me.constrain || me.constrainDelegate) { + ddConfig.constrain = me.constrain; + ddConfig.constrainDelegate = me.constrainDelegate; + } + + me.dd = new Ext.util.ComponentDragger(dragTarget, ddConfig); + }, + + + scrollBy: function(deltaX, deltaY, animate) { + var el; + + if ((el = this.getTargetEl()) && el.dom) { + el.scrollBy.apply(el, arguments); + } + }, + + + setLoading : function(load, targetEl) { + var me = this, + config = { + target: me + }; + + if (me.rendered) { + Ext.destroy(me.loadMask); + me.loadMask = null; + + if (load !== false && !me.collapsed) { + if (Ext.isObject(load)) { + Ext.apply(config, load); + } else if (Ext.isString(load)) { + config.msg = load; + } + + if (targetEl) { + Ext.applyIf(config, { + useTargetEl: true + }); + } + me.loadMask = new Ext.LoadMask(config); + me.loadMask.show(); + } + } + return me.loadMask; + }, + + beforeSetPosition: function () { + var me = this, + pos = me.callParent(arguments), + adj; + + if (pos) { + adj = me.adjustPosition(pos.x, pos.y); + pos.x = adj.x; + pos.y = adj.y; + } + return pos || null; + }, + + afterSetPosition: function(ax, ay) { + this.onPosition(ax, ay); + this.fireEvent('move', this, ax, ay); + }, + + + showAt: function(x, y, animate) { + var me = this; + + + + if (!me.rendered && (me.autoRender || me.floating)) { + me.x = x; + me.y = y; + return me.show(); + } + if (me.floating) { + me.setPosition(x, y, animate); + } else { + me.setPagePosition(x, y, animate); + } + me.show(); + }, + + + showBy: function(cmp, pos, off) { + var me = this; + + + if (me.floating && cmp) { + me.show(); + + + if (me.rendered && !me.hidden) { + + + + me.alignTo(cmp, pos || me.defaultAlign, off); + } + } + return me; + }, + + + setPagePosition: function(x, y, animate) { + var me = this, + p, + floatParentBox; + + if (Ext.isArray(x)) { + y = x[1]; + x = x[0]; + } + me.pageX = x; + me.pageY = y; + + if (me.floating) { + + + if (me.isContainedFloater()) { + floatParentBox = me.floatParent.getTargetEl().getViewRegion(); + if (Ext.isNumber(x) && Ext.isNumber(floatParentBox.left)) { + x -= floatParentBox.left; + } + if (Ext.isNumber(y) && Ext.isNumber(floatParentBox.top)) { + y -= floatParentBox.top; + } + } else { + p = me.el.translateXY(x, y); + x = p.x; + y = p.y; + } + + me.setPosition(x, y, animate); + } else { + p = me.el.translateXY(x, y); + me.setPosition(p.x, p.y, animate); + } + + return me; + }, + + + + isContainedFloater: function() { + return (this.floating && this.floatParent); + }, + + + updateBox : function(box){ + this.setSize(box.width, box.height); + this.setPagePosition(box.x, box.y); + return this; + }, + + + getOuterSize: function() { + var el = this.el; + return { + width: el.getWidth() + el.getMargin('lr'), + height: el.getHeight() + el.getMargin('tb') + }; + }, + + + adjustPosition: function(x, y) { + var me = this, + floatParentBox; + + + if (me.isContainedFloater()) { + floatParentBox = me.floatParent.getTargetEl().getViewRegion(); + x += floatParentBox.left; + y += floatParentBox.top; + } + + return { + x: x, + y: y + }; + }, + + + getPosition: function(local) { + var me = this, + xy, + isContainedFloater = me.isContainedFloater(), + floatParentBox; + + + if ((local === true) && !isContainedFloater) { + return [me.getLocalX(), me.getLocalY()]; + } + + xy = me.getXY(); + + + if ((local === true) && isContainedFloater) { + floatParentBox = me.floatParent.getTargetEl().getViewRegion(); + xy[0] -= floatParentBox.left; + xy[1] -= floatParentBox.top; + } + return xy; + }, + + getId: function() { + var me = this, + xtype; + + if (!me.id) { + xtype = me.getXType(); + if (xtype) { + xtype = xtype.replace(Ext.Component.INVALID_ID_CHARS_Re, '-'); + } else { + xtype = Ext.name.toLowerCase() + '-comp'; + } + me.id = xtype + '-' + me.getAutoId(); + } + return me.id; + }, + + + show: function(animateTarget, cb, scope) { + var me = this, + rendered = me.rendered; + + if (me.hierarchicallyHidden || (me.floating && !rendered && me.isHierarchicallyHidden())) { + + + + if (!rendered) { + + + + + + + + + + me.initHierarchyEvents(); + } + + if (arguments.length > 1) { + arguments[0] = null; + me.pendingShow = arguments; + } else { + me.pendingShow = true; + } + } else if (rendered && me.isVisible()) { + if (me.toFrontOnShow && me.floating) { + me.toFront(); + } + } else { + if (me.fireEvent('beforeshow', me) !== false) { + me.hidden = false; + delete this.getHierarchyState().hidden; + + + if (!rendered && (me.autoRender || me.floating)) { + me.doAutoRender(); + rendered = me.rendered; + } + + if (rendered) { + me.beforeShow(); + me.onShow.apply(me, arguments); + me.afterShow.apply(me, arguments); + } + } else { + me.onShowVeto(); + } + } + return me; + }, + + onShowVeto: Ext.emptyFn, + + + beforeShow: Ext.emptyFn, + + + onShow: function() { + var me = this; + + me.el.show(); + me.callParent(arguments); + + + if (me.floating) { + if (me.maximized) { + me.fitContainer(); + } + else if (me.constrain) { + me.doConstrain(); + } + } + }, + + getAnimateTarget: function(target){ + target = target || this.animateTarget; + if (target) { + target = target.isComponent ? target.getEl() : Ext.get(target); + } + return target || null; + }, + + + afterShow: function(animateTarget, cb, scope) { + var me = this, + myEl = me.el, + fromBox, + toBox, + ghostPanel; + + + animateTarget = me.getAnimateTarget(animateTarget); + + + if (!me.ghost) { + animateTarget = null; + } + + if (animateTarget) { + toBox = { + x: myEl.getX(), + y: myEl.getY(), + width: myEl.dom.offsetWidth, + height: myEl.dom.offsetHeight + }; + fromBox = { + x: animateTarget.getX(), + y: animateTarget.getY(), + width: animateTarget.dom.offsetWidth, + height: animateTarget.dom.offsetHeight + }; + myEl.addCls(me.offsetsCls); + ghostPanel = me.ghost(); + ghostPanel.el.stopAnimation(); + + + ghostPanel.setX(-10000); + + me.ghostBox = toBox; + ghostPanel.el.animate({ + from: fromBox, + to: toBox, + listeners: { + afteranimate: function() { + delete ghostPanel.componentLayout.lastComponentSize; + me.unghost(); + delete me.ghostBox; + myEl.removeCls(me.offsetsCls); + me.onShowComplete(cb, scope); + } + } + }); + } + else { + me.onShowComplete(cb, scope); + } + me.fireHierarchyEvent('show'); + }, + + + onShowComplete: function(cb, scope) { + var me = this; + if (me.floating) { + me.toFront(); + me.onFloatShow(); + } + Ext.callback(cb, scope || me); + me.fireEvent('show', me); + delete me.hiddenByLayout; + }, + + + hide: function(animateTarget, cb, scope) { + var me = this, + continueHide; + + if (me.pendingShow) { + + + delete me.pendingShow; + } if (!(me.rendered && !me.isVisible())) { + continueHide = (me.fireEvent('beforehide', me) !== false); + if (me.hierarchicallyHidden || continueHide) { + me.hidden = true; + me.getHierarchyState().hidden = true; + if (me.rendered) { + me.onHide.apply(me, arguments); + } + } + } + return me; + }, + + + onHide: function(animateTarget, cb, scope) { + var me = this, + ghostPanel, + fromSize, + toBox, + activeEl = Ext.Element.getActiveElement(); + + + if (activeEl === me.el || me.el.contains(activeEl)) { + Ext.fly(activeEl).blur(); + } + + + animateTarget = me.getAnimateTarget(animateTarget); + + + if (!me.ghost) { + animateTarget = null; + } + + if (animateTarget) { + toBox = { + x: animateTarget.getX(), + y: animateTarget.getY(), + width: animateTarget.dom.offsetWidth, + height: animateTarget.dom.offsetHeight + }; + ghostPanel = me.ghost(); + ghostPanel.el.stopAnimation(); + fromSize = me.getSize(); + ghostPanel.el.animate({ + to: toBox, + listeners: { + afteranimate: function() { + delete ghostPanel.componentLayout.lastComponentSize; + ghostPanel.el.hide(); + ghostPanel.el.setSize(fromSize); + me.afterHide(cb, scope); + } + } + }); + } + me.el.hide(); + if (!animateTarget) { + me.afterHide(cb, scope); + } + }, + + + afterHide: function(cb, scope) { + var me = this; + delete me.hiddenByLayout; + + + + Ext.AbstractComponent.prototype.onHide.call(me); + + Ext.callback(cb, scope || me); + me.fireEvent('hide', me); + me.fireHierarchyEvent('hide'); + }, + + + onDestroy: function() { + var me = this; + + + if (me.rendered) { + Ext.destroy( + me.dd, + me.resizer, + me.proxy, + me.proxyWrap, + me.resizerComponent + ); + } + delete me.focusTask; + me.callParent(); + }, + + deleteMembers: function() { + var args = arguments, + len = args.length, + i = 0; + for (; i < len; ++i) { + delete this[args[i]]; + } + }, + + + focus: function(selectText, delay) { + var me = this, + focusEl, + focusElDom, + containerScrollTop; + + + if (delay) { + if (!me.focusTask) { + + + me.self.prototype.focusTask = new Ext.util.DelayedTask(me.focus); + } + me.focusTask.delay(Ext.isNumber(delay) ? delay : 10, null, me, [selectText, false]); + return me; + } + + + if (me.focusTask) { + me.focusTask.cancel(); + } + + if (me.rendered && !me.isDestroyed && me.isVisible(true) && (focusEl = me.getFocusEl())) { + + + + if (focusEl.isComponent) { + return focusEl.focus(selectText, delay); + } + + + if ((focusElDom = focusEl.dom)) { + + + if (focusEl.needsTabIndex()) { + focusElDom.tabIndex = -1; + } + + if (me.floating) { + containerScrollTop = me.container.dom.scrollTop; + } + + + + + focusEl.focus(); + if (selectText === true) { + focusElDom.select(); + } + } + + + + if (me.floating) { + me.toFront(true); + if (containerScrollTop !== undefined) { + me.container.dom.scrollTop = containerScrollTop; + } + } + } + return me; + }, + + + cancelFocus: function() { + var task = this.focusTask; + if (task) { + task.cancel(); + } + }, + + + blur: function() { + var focusEl; + if (this.rendered && (focusEl = this.getFocusEl())) { + focusEl.blur(); + } + return this; + }, + + getEl: function() { + return this.el; + }, + + + getResizeEl: function() { + return this.el; + }, + + + getPositionEl: function() { + return this.el; + }, + + + getActionEl: function() { + return this.el; + }, + + + getVisibilityEl: function() { + return this.el; + }, + + + getRefOwner: function() { + return this.ownerCt || this.floatParent; + }, + + + getBubbleTarget: function() { + return this.getRefOwner(); + }, + + + getContentTarget: function() { + return this.el; + }, + + + cloneConfig: function(overrides) { + overrides = overrides || {}; + var id = overrides.id || Ext.id(), + cfg = Ext.applyIf(overrides, this.initialConfig), + self; + + cfg.id = id; + + self = Ext.getClass(this); + + + return new self(cfg); + }, + + + getXType: function() { + return this.self.xtype; + }, + + + findParentBy: function(fn) { + var p; + + + for (p = this.getBubbleTarget(); p && !fn(p, this); p = p.getBubbleTarget()) { + + } + return p || null; + }, + + + findParentByType: function(xtype) { + return Ext.isFunction(xtype) ? + this.findParentBy(function(p) { + return p.constructor === xtype; + }) + : + this.up(xtype); + }, + + + bubble: function(fn, scope, args) { + var p = this; + while (p) { + if (fn.apply(scope || p, args || [p]) === false) { + break; + } + p = p.getBubbleTarget(); + } + return this; + }, + + getProxy: function() { + var me = this, + target; + + if (!me.proxy) { + target = Ext.getBody(); + me.proxy = me.el.createProxy(Ext.baseCSSPrefix + 'proxy-el', target, true); + } + return me.proxy; + }, + + + fireHierarchyEvent: function (ename) { + this.hierarchyEventSource.fireEvent(ename, this); + }, + + onAdded: function() { + this.callParent(arguments); + if (this.hierarchyEventSource.hasListeners.added) { + this.fireHierarchyEvent('added'); + } + } +}, function () { + + this.hierarchyEventSource = this.prototype.hierarchyEventSource = new Ext.util.Observable({ events: { + hide: true, + show: true, + collapse: true, + expand: true, + added: true + }}); +}); + + +Ext.define('Ext.ElementLoader', { + + + + mixins: { + observable: Ext.util.Observable + }, + + + + + + + statics: { + Renderer: { + Html: function(loader, response, active){ + loader.getTarget().update(response.responseText, active.scripts === true); + return true; + } + } + }, + + + + + url: null, + + + params: null, + + + baseParams: null, + + + autoLoad: false, + + + target: null, + + + loadMask: false, + + + ajaxOptions: null, + + + scripts: false, + + + + + + + + + + + + + isLoader: true, + + constructor: function(config) { + var me = this, + autoLoad; + + config = config || {}; + Ext.apply(me, config); + me.setTarget(me.target); + me.addEvents( + + 'beforeload', + + + 'exception', + + + 'load' + ); + + + me.mixins.observable.constructor.call(me); + + if (me.autoLoad) { + autoLoad = me.autoLoad; + if (autoLoad === true) { + autoLoad = {}; + } + me.load(autoLoad); + } + }, + + + setTarget: function(target){ + var me = this; + target = Ext.get(target); + if (me.target && me.target != target) { + me.abort(); + } + me.target = target; + }, + + + getTarget: function(){ + return this.target || null; + }, + + + abort: function(){ + var active = this.active; + if (active !== undefined) { + Ext.Ajax.abort(active.request); + if (active.mask) { + this.removeMask(); + } + delete this.active; + } + }, + + + removeMask: function(){ + this.target.unmask(); + }, + + + addMask: function(mask){ + this.target.mask(mask === true ? null : mask); + }, + + + load: function(options) { + + options = Ext.apply({}, options); + + var me = this, + mask = Ext.isDefined(options.loadMask) ? options.loadMask : me.loadMask, + params = Ext.apply({}, options.params), + ajaxOptions = Ext.apply({}, options.ajaxOptions), + callback = options.callback || me.callback, + scope = options.scope || me.scope || me; + + Ext.applyIf(ajaxOptions, me.ajaxOptions); + Ext.applyIf(options, ajaxOptions); + + Ext.applyIf(params, me.params); + Ext.apply(params, me.baseParams); + + Ext.applyIf(options, { + url: me.url + }); + + + Ext.apply(options, { + scope: me, + params: params, + callback: me.onComplete + }); + + if (me.fireEvent('beforeload', me, options) === false) { + return; + } + + if (mask) { + me.addMask(mask); + } + + me.active = { + options: options, + mask: mask, + scope: scope, + callback: callback, + success: options.success || me.success, + failure: options.failure || me.failure, + renderer: options.renderer || me.renderer, + scripts: Ext.isDefined(options.scripts) ? options.scripts : me.scripts + }; + me.active.request = Ext.Ajax.request(options); + me.setOptions(me.active, options); + }, + + + setOptions: Ext.emptyFn, + + + onComplete: function(options, success, response) { + var me = this, + active = me.active, + scope; + + if (active) { + scope = active.scope; + if (success) { + success = me.getRenderer(active.renderer).call(me, me, response, active) !== false; + } + + if (success) { + Ext.callback(active.success, scope, [me, response, options]); + me.fireEvent('load', me, response, options); + } else { + Ext.callback(active.failure, scope, [me, response, options]); + me.fireEvent('exception', me, response, options); + } + Ext.callback(active.callback, scope, [me, success, response, options]); + if (active.mask) { + me.removeMask(); + } + } + + delete me.active; + }, + + + getRenderer: function(renderer){ + if (Ext.isFunction(renderer)) { + return renderer; + } + return this.statics().Renderer.Html; + }, + + + startAutoRefresh: function(interval, options){ + var me = this; + me.stopAutoRefresh(); + me.autoRefresh = setInterval(function(){ + me.load(options); + }, interval); + }, + + + stopAutoRefresh: function(){ + clearInterval(this.autoRefresh); + delete this.autoRefresh; + }, + + + isAutoRefreshing: function(){ + return Ext.isDefined(this.autoRefresh); + }, + + + destroy: function(){ + var me = this; + me.stopAutoRefresh(); + delete me.target; + me.abort(); + me.clearListeners(); + } +}); + + +Ext.define('Ext.ComponentLoader', { + + + + extend: Ext.ElementLoader , + + statics: { + Renderer: { + Data: function(loader, response, active){ + var success = true; + try { + loader.getTarget().update(Ext.decode(response.responseText)); + } catch (e) { + success = false; + } + return success; + }, + + Component: function(loader, response, active){ + var success = true, + target = loader.getTarget(), + items = []; + + + try { + items = Ext.decode(response.responseText); + } catch (e) { + success = false; + } + + if (success) { + target.suspendLayouts(); + if (active.removeAll) { + target.removeAll(); + } + target.add(items); + target.resumeLayouts(true); + } + return success; + } + } + }, + + + + + target: null, + + + loadMask: false, + + + + + renderer: 'html', + + + setTarget: function(target){ + var me = this; + + if (Ext.isString(target)) { + target = Ext.getCmp(target); + } + + if (me.target && me.target != target) { + me.abort(); + } + me.target = target; + }, + + + removeMask: function(){ + this.target.setLoading(false); + }, + + + addMask: function(mask){ + this.target.setLoading(mask); + }, + + + setOptions: function(active, options){ + active.removeAll = Ext.isDefined(options.removeAll) ? options.removeAll : this.removeAll; + }, + + + getRenderer: function(renderer){ + if (Ext.isFunction(renderer)) { + return renderer; + } + + var renderers = this.statics().Renderer; + switch (renderer) { + case 'component': + return renderers.Component; + case 'data': + return renderers.Data; + default: + return Ext.ElementLoader.Renderer.Html; + } + } +}); + + +Ext.define('Ext.layout.SizeModel', { + constructor: function (config) { + var me = this, + SizeModel = me.self, + sizeModelsArray = SizeModel.sizeModelsArray, + name; + + Ext.apply(me, config); + + me[name = me.name] = true; + + me.fixed = !(me.auto = me.natural || me.shrinkWrap); + + + sizeModelsArray[me.ordinal = sizeModelsArray.length] = + SizeModel[name] = + SizeModel.sizeModels[name] = me; + }, + + statics: { + + sizeModelsArray: [], + + + sizeModels: {} + }, + + + + + + + calculated: false, + + + configured: false, + + + constrainedMax: false, + + + constrainedMin: false, + + + + + natural: false, + + + shrinkWrap: false, + + + calculatedFromConfigured: false, + + + calculatedFromNatural: false, + + + calculatedFromShrinkWrap: false, + + + names: null +}, +function () { + var SizeModel = this, + sizeModelsArray = SizeModel.sizeModelsArray, + i, j, n, pairs, sizeModel; + + + + + new SizeModel({ + name: 'calculated' + }); + + new SizeModel({ + name: 'configured', + names: { width: 'width', height: 'height' } + }); + + new SizeModel({ + name: 'natural' + }); + + new SizeModel({ + name: 'shrinkWrap' + }); + + + + + + new SizeModel({ + name: 'calculatedFromConfigured', + configured: true, + names: { width: 'width', height: 'height' } + }); + + new SizeModel({ + name: 'calculatedFromNatural', + natural: true + }); + + new SizeModel({ + name: 'calculatedFromShrinkWrap', + shrinkWrap: true + }); + + new SizeModel({ + name: 'constrainedMax', + configured: true, + constrained: true, + names: { width: 'maxWidth', height: 'maxHeight' } + }); + + new SizeModel({ + name: 'constrainedMin', + configured: true, + constrained: true, + names: { width: 'minWidth', height: 'minHeight' } + }); + + new SizeModel({ + name: 'constrainedDock', + configured: true, + constrained: true, + constrainedByMin: true, + names: { width: 'dockConstrainedWidth', height: 'dockConstrainedHeight' } + }); + + for (i = 0, n = sizeModelsArray.length; i < n; ++i) { + sizeModel = sizeModelsArray[i]; + + + sizeModel.pairsByHeightOrdinal = pairs = []; + + for (j = 0; j < n; ++j) { + pairs.push({ + width: sizeModel, + height: sizeModelsArray[j] + }); + } + } +}); + + +Ext.define('Ext.layout.Layout', { + + + + + + + + + isLayout: true, + initialized: false, + running: false, + + autoSizePolicy: { + readsWidth: 1, + readsHeight: 1, + setsWidth: 0, + setsHeight: 0 + }, + + statics: { + layoutsByType: {}, + + create: function(layout, defaultType) { + var ClassManager = Ext.ClassManager, + layoutsByType = this.layoutsByType, + alias, className, config, layoutClass, type, load; + + if (!layout || typeof layout === 'string') { + type = layout || defaultType; + config = {}; + } else if (layout.isLayout) { + return layout; + } else { + config = layout; + type = layout.type || defaultType; + } + + if (!(layoutClass = layoutsByType[type])) { + alias = 'layout.' + type; + className = ClassManager.getNameByAlias(alias); + + + if (!className) { + load = true; + } + + layoutClass = ClassManager.get(className); + if (load || !layoutClass) { + return ClassManager.instantiateByAlias(alias, config || {}); + } + layoutsByType[type] = layoutClass; + } + + return new layoutClass(config); + } + }, + + constructor : function(config) { + var me = this; + + me.id = Ext.id(null, me.type + '-'); + Ext.apply(me, config); + me.layoutCount = 0; + }, + + + + + beginLayout: Ext.emptyFn, + + + beginLayoutCycle: function (ownerContext) { + var me = this, + context = me.context, + changed; + + if (me.lastWidthModel != ownerContext.widthModel) { + if (me.lastWidthModel) { + changed = true; + } + me.lastWidthModel = ownerContext.widthModel; + } + + if (me.lastHeightModel != ownerContext.heightModel) { + if (me.lastWidthModel) { + changed = true; + } + me.lastHeightModel = ownerContext.heightModel; + } + + if (changed) { + (context = ownerContext.context).clearTriggers(me, false); + context.clearTriggers(me, true); + me.triggerCount = 0; + } + }, + + + + + + + + + finishedLayout: function (ownerContext) { + this.lastWidthModel = ownerContext.widthModel; + this.lastHeightModel = ownerContext.heightModel; + this.ownerContext = null; + }, + + + + redoLayout: Ext.emptyFn, + undoLayout: Ext.emptyFn, + + getAnimatePolicy: function() { + return this.animatePolicy; + }, + + + getItemSizePolicy: function (item) { + return this.autoSizePolicy; + }, + + isItemBoxParent: function (itemContext) { + return false; + }, + + isItemLayoutRoot: function (item) { + var sizeModel = item.getSizeModel(), + width = sizeModel.width, + height = sizeModel.height; + + + + if (!item.componentLayout.lastComponentSize && (width.calculated || height.calculated)) { + return false; + } + + + return !width.shrinkWrap && !height.shrinkWrap; + }, + + isItemShrinkWrap: function (item) { + return item.shrinkWrap; + }, + + isRunning: function () { + return !!this.ownerContext; + }, + + + + + + getItemsRenderTree: function (items, renderCfgs) { + var length = items.length, + i, item, itemConfig, result; + + if (length) { + result = []; + for (i = 0; i < length; ++i) { + item = items[i]; + + + + if (!item.rendered) { + + + + + + + if (renderCfgs && (renderCfgs[item.id] !== undefined)) { + itemConfig = renderCfgs[item.id]; + } else { + + this.configureItem(item); + itemConfig = item.getRenderTree(); + if (renderCfgs) { + renderCfgs[item.id] = itemConfig; + } + } + + + if (itemConfig) { + result.push(itemConfig); + } + } + } + } + + return result; + }, + + finishRender: Ext.emptyFn, + + finishRenderItems: function (target, items) { + var length = items.length, + i, item; + + for (i = 0; i < length; i++) { + item = items[i]; + + + if (item.rendering) { + + + item.finishRender(i); + + this.afterRenderItem(item); + } + } + }, + + renderChildren: function () { + var me = this, + items = me.getLayoutItems(), + target = me.getRenderTarget(); + + me.renderItems(items, target); + }, + + + renderItems : function(items, target) { + var me = this, + ln = items.length, + i = 0, + item; + + if (ln) { + Ext.suspendLayouts(); + for (; i < ln; i++) { + item = items[i]; + if (item && !item.rendered) { + me.renderItem(item, target, i); + } else if (!me.isValidParent(item, target, i)) { + me.moveItem(item, target, i); + } else { + + me.configureItem(item); + } + } + Ext.resumeLayouts(true); + } + }, + + + isValidParent : function(item, target, position) { + var itemDom = item.el ? item.el.dom : Ext.getDom(item), + targetDom = (target && target.dom) || target, + parentNode = itemDom.parentNode, + className; + + + if (parentNode) { + className = parentNode.className; + if (className && className.indexOf(Ext.baseCSSPrefix + 'resizable-wrap') !== -1) { + itemDom = itemDom.parentNode; + } + } + + + if (itemDom && targetDom) { + if (typeof position == 'number') { + position = this.getPositionOffset(position); + return itemDom === targetDom.childNodes[position]; + } + return itemDom.parentNode === targetDom; + } + + return false; + }, + + getPositionOffset: function(position){ + return position; + }, + + + configureItem: function(item) { + item.ownerLayout = this; + }, + + + renderItem : function(item, target, position) { + var me = this; + if (!item.rendered) { + me.configureItem(item); + item.render(target, position); + me.afterRenderItem(item); + } + }, + + + moveItem : function(item, target, position) { + target = target.dom || target; + if (typeof position == 'number') { + position = target.childNodes[position]; + } + target.insertBefore(item.el.dom, position || null); + item.container = Ext.get(target); + this.configureItem(item); + }, + + + onContentChange: function () { + this.owner.updateLayout(); + return true; + }, + + + initLayout : function() { + this.initialized = true; + }, + + + setOwner : function(owner) { + this.owner = owner; + }, + + + getLayoutItems : function() { + return []; + }, + + + afterRenderItem: Ext.emptyFn, + onAdd : Ext.emptyFn, + onRemove : Ext.emptyFn, + onDestroy : Ext.emptyFn, + + + afterRemove : function(item) { + var me = this, + el = item.el, + owner = me.owner, + removeClasses; + + if (item.rendered) { + removeClasses = [].concat(me.itemCls || []); + if (owner.itemCls) { + removeClasses = Ext.Array.push(removeClasses, owner.itemCls); + } + if (removeClasses.length) { + el.removeCls(removeClasses); + } + } + + delete item.ownerLayout; + }, + + + destroy : function() { + var me = this, + target; + + if (me.targetCls) { + target = me.getTarget(); + if (target) { + target.removeCls(me.targetCls); + } + } + + me.onDestroy(); + }, + + sortWeightedItems: function (items, reverseProp) { + for (var i = 0, length = items.length; i < length; ++i) { + items[i].$i = i; + } + + Ext.Array.sort(items, function (item1, item2) { + var ret = item2.weight - item1.weight; + + if (!ret) { + ret = item1.$i - item2.$i; + if (item1[reverseProp]) { + ret = -ret; + } + } + + return ret; + }); + + for (i = 0; i < length; ++i) { + delete items[i].$i; + } + } +}, function () { + var Layout = this; + + Layout.prototype.sizeModels = Layout.sizeModels = Ext.layout.SizeModel.sizeModels; +}); + + +Ext.define('Ext.layout.container.Container', { + + + + alias: ['layout.container'], + + extend: Ext.layout.Layout , + + alternateClassName: 'Ext.layout.ContainerLayout', + + mixins: { + elementCt: Ext.util.ElementContainer + }, + + + + + + type: 'container', + + + + + + + beginCollapse: Ext.emptyFn, + + + beginExpand: Ext.emptyFn, + + + animatePolicy: null, + + childEls: [ + + 'overflowPadderEl' + ], + + renderTpl: [ + '{%this.renderBody(out,values)%}' + ], + + usesContainerHeight: true, + usesContainerWidth: true, + usesHeight: true, + usesWidth: true, + + constructor: function () { + this.callParent(arguments); + this.mixins.elementCt.constructor.call(this); + }, + + destroy : function() { + this.callParent(); + this.mixins.elementCt.destroy.call(this); + }, + + + beginLayout: function (ownerContext) { + this.callParent(arguments); + + ownerContext.targetContext = ownerContext.paddingContext = ownerContext.getEl('getTarget', this); + + this.cacheChildItems(ownerContext); + }, + + beginLayoutCycle: function (ownerContext, firstCycle) { + var me = this; + + me.callParent(arguments); + + if (firstCycle) { + if (me.usesContainerHeight) { + ++ownerContext.consumersContainerHeight; + } + if (me.usesContainerWidth) { + ++ownerContext.consumersContainerWidth; + } + } + }, + + cacheChildItems: function (ownerContext) { + var context = ownerContext.context, + childItems = [], + items = this.getVisibleItems(), + length = items.length, + i; + + ownerContext.childItems = childItems; + ownerContext.visibleItems = items; + + for (i = 0; i < length; ++i) { + childItems.push(context.getCmp(items[i])); + } + }, + + cacheElements: function () { + var owner = this.owner; + + this.applyChildEls(owner.el, owner.id); + }, + + + configureItem: function(item) { + var me = this, + itemCls = me.itemCls, + ownerItemCls = me.owner.itemCls, + addClasses; + + + item.ownerLayout = me; + + if (itemCls) { + + addClasses = typeof itemCls === 'string' ? [itemCls] : itemCls; + } + if (ownerItemCls) { + addClasses = Ext.Array.push(addClasses||[], ownerItemCls); + } + if (addClasses) { + item.addCls(addClasses); + } + }, + + doRenderBody: function (out, renderData) { + + + + this.renderItems(out, renderData); + this.renderContent(out, renderData); + }, + + doRenderContainer: function (out, renderData) { + + + + var me = renderData.$comp.layout, + tpl = me.getRenderTpl(), + data = me.getRenderData(); + + tpl.applyOut(data, out); + }, + + doRenderItems: function (out, renderData) { + + + + var me = renderData.$layout, + tree = me.getRenderTree(); + + if (tree) { + Ext.DomHelper.generateMarkup(tree, out); + } + }, + + finishRender: function () { + var me = this, + target, items; + + me.callParent(); + + me.cacheElements(); + + target = me.getRenderTarget(); + items = me.getLayoutItems(); + + + me.finishRenderItems(target, items); + }, + + + notifyOwner: function() { + this.owner.afterLayout(this); + }, + + + getContainerSize : function(ownerContext, inDom) { + + + + + + + var targetContext = ownerContext.targetContext, + frameInfo = targetContext.getFrameInfo(), + padding = ownerContext.paddingContext.getPaddingInfo(), + got = 0, + needed = 0, + gotWidth, gotHeight, width, height; + + + + + + + + + + if (!ownerContext.widthModel.shrinkWrap) { + ++needed; + width = inDom ? targetContext.getDomProp('width') : targetContext.getProp('width'); + gotWidth = (typeof width == 'number'); + if (gotWidth) { + ++got; + width -= frameInfo.width + padding.width; + if (width < 0) { + width = 0; + } + } + } + + if (!ownerContext.heightModel.shrinkWrap) { + ++needed; + height = inDom ? targetContext.getDomProp('height') : targetContext.getProp('height'); + gotHeight = (typeof height == 'number'); + if (gotHeight) { + ++got; + height -= frameInfo.height + padding.height; + if (height < 0) { + height = 0; + } + } + } + + return { + width: width, + height: height, + needed: needed, + got: got, + gotAll: got == needed, + gotWidth: gotWidth, + gotHeight: gotHeight + }; + }, + + + + + + + + + + getPositionOffset: function(position) { + if (!this.createsInnerCt) { + var offset = this.owner.itemNodeOffset; + if (offset) { + position += offset; + } + } + return position; + }, + + + getLayoutItems: function() { + var owner = this.owner, + items = owner && owner.items; + + return (items && items.items) || []; + }, + + getRenderData: function () { + var comp = this.owner; + + return { + $comp: comp, + $layout: this, + ownerId: comp.id + }; + }, + + + getRenderedItems: function() { + var me = this, + target = me.getRenderTarget(), + items = me.getLayoutItems(), + ln = items.length, + renderedItems = [], + i, item; + + for (i = 0; i < ln; i++) { + item = items[i]; + if (item.rendered && me.isValidParent(item, target, i)) { + renderedItems.push(item); + } + } + + return renderedItems; + }, + + + getRenderTarget: function() { + return this.owner.getTargetEl(); + }, + + + getElementTarget: function() { + return this.getRenderTarget(); + }, + + getRenderTpl: function () { + var me = this, + renderTpl = Ext.XTemplate.getTpl(this, 'renderTpl'); + + + + if (!renderTpl.renderContent) { + me.owner.setupRenderTpl(renderTpl); + } + + return renderTpl; + }, + + getRenderTree: function () { + var result, + items = this.owner.items, + itemsGen, + renderCfgs = {}; + + do { + itemsGen = items.generation; + result = this.getItemsRenderTree(this.getLayoutItems(), renderCfgs); + } while (items.generation !== itemsGen); + return result; + }, + + getScrollbarsNeeded: function (width, height, contentWidth, contentHeight) { + var scrollbarSize = Ext.getScrollbarSize(), + hasWidth = typeof width == 'number', + hasHeight = typeof height == 'number', + needHorz = 0, + needVert = 0; + + + if (!scrollbarSize.width) { + return 0; + } + if (hasHeight && height < contentHeight) { + needVert = 2; + width -= scrollbarSize.width; + } + + if (hasWidth && width < contentWidth) { + needHorz = 1; + if (!needVert && hasHeight) { + height -= scrollbarSize.height; + if (height < contentHeight) { + needVert = 2; + } + } + } + + return needVert + needHorz; + }, + + + getTarget: function() { + return this.owner.getTargetEl(); + }, + + + getVisibleItems: function() { + var target = this.getRenderTarget(), + items = this.getLayoutItems(), + ln = items.length, + visibleItems = [], + i, item; + + for (i = 0; i < ln; i++) { + item = items[i]; + if (item.rendered && this.isValidParent(item, target, i) && item.hidden !== true) { + visibleItems.push(item); + } + } + + return visibleItems; + }, + + setupRenderTpl: function (renderTpl) { + var me = this; + + renderTpl.renderBody = me.doRenderBody; + renderTpl.renderContainer = me.doRenderContainer; + renderTpl.renderItems = me.doRenderItems; + }, + + getContentTarget: function(){ + return this.owner.getDefaultContentTarget(); + } + +}); + + +Ext.define('Ext.layout.container.Auto', { + + + + alias: ['layout.auto', 'layout.autocontainer'], + + extend: Ext.layout.container.Container , + + + + type: 'autocontainer', + + childEls: [ + 'outerCt', + 'innerCt', + 'clearEl' + ], + + + reserveScrollbar: false, + + + managePadding: true, + + + manageOverflow: false, + + + lastOverflowAdjust: { + width: 0, + height: 0 + }, + + + + + + + + + + + + + + renderTpl: [ + '{% if (!(Ext.isIEQuirks || Ext.isIE7m)) { %}', + + + + + + + + '', + + + '
    ', + '{%this.renderBody(out,values)%}', + '
    ', + '
    ', + '{% } else if (values.shrinkWrapWidth) { %}', + + + + '', + '', + '', + '', + '
    ', + '{%this.renderBody(out,values)%}', + + '
    ', + '
    ', + '{% } else { %}', + + + + + + + '
    ', + '
    ', + '{%this.renderBody(out,values)%}', + + '
    ', + '
    ', + '
    ', + + '{% values.$layout.isShrinkWrapTpl = false %}', + '{% } %}' + ], + + + + + + tableTpl: [ + '', + '', + '', + '', + '
    ', + '
    ' + ], + + isShrinkWrapTpl: true, + + + beginLayout: function(ownerContext) { + var me = this, + bottomPadding, overflowYStyle, overflowXStyle, needsTable; + + me.callParent(arguments); + + me.initContextItems(ownerContext); + + if (!me.isShrinkWrapTpl) { + + + + + if (ownerContext.widthModel.shrinkWrap) { + needsTable = true; + } + + + + if (Ext.isStrict && Ext.isIE7) { + overflowXStyle = me.getOverflowXStyle(ownerContext); + if ((overflowXStyle === 'auto' || overflowXStyle === 'scroll') && + ownerContext.paddingContext.getPaddingInfo().right) { + needsTable = true; + } + } + + if (needsTable) { + me.insertTableCt(ownerContext); + } + } + + + + + if (!me.isShrinkWrapTpl && Ext.isIE7 && Ext.isStrict && !me.clearElHasPadding) { + bottomPadding = ownerContext.paddingContext.getPaddingInfo().bottom; + overflowYStyle = me.getOverflowYStyle(ownerContext); + if (bottomPadding && (overflowYStyle === 'auto' || overflowYStyle === 'scroll')) { + me.clearEl.setStyle('height', bottomPadding); + me.clearElHasPadding = true; + } + } + }, + + beforeLayoutCycle: function(ownerContext){ + var comp = this.owner, + hierarchyState = comp.hierarchyState, + hierarchyStateInner = comp.hierarchyStateInner; + + if (!hierarchyState || hierarchyState.invalid) { + hierarchyState = comp.getHierarchyState(); + hierarchyStateInner = comp.hierarchyStateInner; + } + if (ownerContext.widthModel.shrinkWrap && this.isShrinkWrapTpl) { + hierarchyStateInner.inShrinkWrapTable = true; + } else { + delete hierarchyStateInner.inShrinkWrapTable; + } + }, + + beginLayoutCycle: function(ownerContext) { + var me = this, + outerCt = me.outerCt, + lastOuterCtWidth = me.lastOuterCtWidth || '', + lastOuterCtHeight = me.lastOuterCtHeight || '', + lastOuterCtTableLayout = me.lastOuterCtTableLayout || '', + overflowXStyle, overflowYStyle, outerCtWidth, outerCtHeight, outerCtTableLayout, + deferWidth, hierarchyStateInner; + + me.callParent(arguments); + + + outerCtWidth = outerCtHeight = outerCtTableLayout = ''; + + if (!ownerContext.widthModel.shrinkWrap && me.isShrinkWrapTpl) { + + + + if (Ext.isIE7m && Ext.isStrict) { + overflowYStyle = me.getOverflowYStyle(ownerContext); + if (overflowYStyle === 'auto' || overflowYStyle === 'scroll') { + + + + deferWidth = true; + } + } + + if (!deferWidth) { + + outerCtWidth = '100%'; + } + hierarchyStateInner = me.owner.hierarchyStateInner; + + + + overflowXStyle = me.getOverflowXStyle(ownerContext); + outerCtTableLayout = (hierarchyStateInner.inShrinkWrapTable || + overflowXStyle === 'auto' || + overflowXStyle === 'scroll') ? '' : 'fixed'; + } + + if (!ownerContext.heightModel.shrinkWrap && + !Ext.supports.PercentageHeightOverflowBug) { + + + + + + outerCtHeight = '100%'; + } + + + + + if ((outerCtWidth !== lastOuterCtWidth) || me.hasOuterCtPxWidth) { + outerCt.setStyle('width', outerCtWidth); + me.lastOuterCtWidth = outerCtWidth; + me.hasOuterCtPxWidth = false; + } + + + if (outerCtTableLayout !== lastOuterCtTableLayout) { + outerCt.setStyle('table-layout', outerCtTableLayout); + me.lastOuterCtTableLayout = outerCtTableLayout; + } + + + + + if ((outerCtHeight !== lastOuterCtHeight) || me.hasOuterCtPxHeight) { + outerCt.setStyle('height', outerCtHeight); + me.lastOuterCtHeight = outerCtHeight; + me.hasOuterCtPxHeight = false; + } + + if (me.hasInnerCtPxHeight) { + me.innerCt.setStyle('height', ''); + me.hasInnerCtPxHeight = false; + } + + + + ownerContext.state.overflowAdjust = me.lastOverflowAdjust; + }, + + calculate: function(ownerContext) { + var me = this, + state = ownerContext.state, + containerSize = me.getContainerSize(ownerContext, true), + + calculatedItems = state.calculatedItems || + (state.calculatedItems = me.calculateItems ? + me.calculateItems(ownerContext, containerSize) : true); + + me.setCtSizeIfNeeded(ownerContext, containerSize); + + if (calculatedItems && ownerContext.hasDomProp('containerChildrenSizeDone')) { + + me.calculateContentSize(ownerContext); + + if (containerSize.gotAll) { + if (me.manageOverflow && !ownerContext.state.secondPass && !me.reserveScrollbar) { + me.calculateOverflow(ownerContext, containerSize); + } + return; + } + } + + me.done = false; + }, + + calculateContentSize: function (ownerContext) { + var me = this, + containerDimensions = ((ownerContext.widthModel.shrinkWrap ? 1 : 0) | + (ownerContext.heightModel.shrinkWrap ? 2 : 0)), + calcWidth = (containerDimensions & 1) || undefined, + calcHeight = (containerDimensions & 2) || undefined, + needed = 0, + props = ownerContext.props; + + if (calcWidth) { + if (isNaN(props.contentWidth)) { + ++needed; + } else { + calcWidth = undefined; + } + } + if (calcHeight) { + if (isNaN(props.contentHeight)) { + ++needed; + } else { + calcHeight = undefined; + } + } + + if (needed) { + if (calcWidth && !ownerContext.setContentWidth(me.measureContentWidth(ownerContext))) { + me.done = false; + } + if (calcHeight && !ownerContext.setContentHeight(me.measureContentHeight(ownerContext))) { + me.done = false; + } + + + + + + + } + }, + + + calculateOverflow: function (ownerContext) { + var me = this, + width, height, scrollbarSize, scrollbars, xauto, yauto, targetEl; + + + + xauto = (me.getOverflowXStyle(ownerContext) === 'auto'); + yauto = (me.getOverflowYStyle(ownerContext) === 'auto'); + + if (xauto || yauto) { + scrollbarSize = Ext.getScrollbarSize(); + targetEl = ownerContext.overflowContext.el.dom; + scrollbars = 0; + + if (targetEl.scrollWidth > targetEl.clientWidth) { + + scrollbars |= 1; + } + + if (targetEl.scrollHeight > targetEl.clientHeight) { + + scrollbars |= 2; + } + + width = (yauto && (scrollbars & 2)) ? scrollbarSize.width : 0; + height = (xauto && (scrollbars & 1)) ? scrollbarSize.height : 0; + + if (width !== me.lastOverflowAdjust.width || height !== me.lastOverflowAdjust.height) { + me.done = false; + + + + ownerContext.invalidate({ + state: { + overflowAdjust: { + width: width, + height: height + }, + overflowState: scrollbars, + secondPass: true + } + }); + } + } + }, + + completeLayout: function(ownerContext) { + this.lastOverflowAdjust = ownerContext.state.overflowAdjust; + }, + + doRenderPadding: function(out, renderData) { + + + + var me = renderData.$layout, + owner = renderData.$layout.owner, + padding = owner[owner.contentPaddingProperty]; + + if (me.managePadding && padding) { + out.push('padding:', Ext.Element.unitizeBox(padding)); + } + }, + + finishedLayout: function (ownerContext) { + var innerCt = this.innerCt; + + this.callParent(arguments); + + if (Ext.isIEQuirks || Ext.isIE8m) { + + + + innerCt.repaint(); + } + + if (Ext.isOpera) { + + + + innerCt.setStyle('position', 'relative'); + innerCt.dom.scrollWidth; + innerCt.setStyle('position', ''); + } + }, + + + getContainerSize : function(ownerContext, inDom) { + + + + + + + var size = this.callParent(arguments), + overflowAdjust = ownerContext.state.overflowAdjust; + + if (overflowAdjust) { + size.width -= overflowAdjust.width; + size.height -= overflowAdjust.height; + } + + return size; + }, + + getRenderData: function() { + var owner = this.owner, + data = this.callParent(); + + + + + + + + + + + + + + + + + + + + if ((Ext.isIEQuirks || Ext.isIE7m) && + ((owner.shrinkWrap & 1) || + (owner.floating && !owner.width))) { + data.shrinkWrapWidth = true; + } + + return data; + }, + + + + getRenderTarget: function() { + return this.innerCt; + }, + + + + getElementTarget: function() { + return this.innerCt; + }, + + + getOverflowXStyle: function(ownerContext) { + return ownerContext.overflowXStyle || + (ownerContext.overflowXStyle = this.owner.scrollFlags.overflowX || ownerContext.overflowContext.getStyle('overflow-x')); + }, + + + getOverflowYStyle: function(ownerContext) { + return ownerContext.overflowYStyle || + (ownerContext.overflowYStyle = this.owner.scrollFlags.overflowY || ownerContext.overflowContext.getStyle('overflow-y')); + }, + + initContextItems: function(ownerContext) { + var me = this, + target = ownerContext.target, + customOverflowEl = me.owner.customOverflowEl; + + ownerContext.outerCtContext = ownerContext.getEl('outerCt', me); + ownerContext.innerCtContext = ownerContext.getEl('innerCt', me); + + if (customOverflowEl) { + ownerContext.overflowContext = ownerContext.getEl(customOverflowEl); + } else { + ownerContext.overflowContext = ownerContext.targetContext; + } + + if (target[target.contentPaddingProperty] !== undefined) { + + + + + + ownerContext.paddingContext = me.isShrinkWrapTpl ? + ownerContext.innerCtContext : ownerContext.outerCtContext; + } + }, + + initLayout: function() { + var me = this, + scrollbarWidth = Ext.getScrollbarSize().width, + owner = me.owner; + + me.callParent(); + + + + + if (scrollbarWidth && me.manageOverflow && !me.hasOwnProperty('lastOverflowAdjust')) { + if (owner.autoScroll || me.reserveScrollbar) { + me.lastOverflowAdjust = { + width: scrollbarWidth, + height: 0 + }; + } + } + }, + + + insertTableCt: function(ownerContext) { + var me = this, + owner = me.owner, + i = 0, + renderTpl, fragment, childNodes, childLength, targetEl; + + + renderTpl = Ext.XTemplate.getTpl(this, 'tableTpl'); + renderTpl.renderPadding = me.doRenderPadding + + + + me.outerCt.dom.removeChild(me.innerCt.dom); + + + fragment = document.createDocumentFragment(); + childNodes = me.innerCt.dom.childNodes; + childLength = childNodes.length; + + for (; i < childLength; i++) { + fragment.appendChild(childNodes[0]); + } + + targetEl = me.getTarget(); + targetEl.dom.innerHTML = renderTpl.apply({ + $layout: me, + ownerId: me.owner.id + }); + + + targetEl.down('td').dom.appendChild(fragment); + + + + me.applyChildEls(owner.el, owner.id) + + + + me.isShrinkWrapTpl = true; + + ownerContext.removeEl(me.outerCt); + ownerContext.removeEl(me.innerCt); + me.initContextItems(ownerContext); + }, + + measureContentHeight: function (ownerContext) { + + var contentHeight = this.outerCt.getHeight(), + target = ownerContext.target; + + if (this.managePadding && (target[target.contentPaddingProperty] === undefined)) { + + + + + contentHeight += ownerContext.targetContext.getPaddingInfo().height; + } + return contentHeight; + }, + + measureContentWidth: function (ownerContext) { + + var contentWidth = this.outerCt.getWidth(), + target = ownerContext.target; + + if (this.managePadding && (target[target.contentPaddingProperty] === undefined)) { + + + + + contentWidth += ownerContext.targetContext.getPaddingInfo().width; + } + return contentWidth; + }, + + + setCtSizeIfNeeded: function(ownerContext, containerSize) { + var me = this, + width = containerSize.width, + height = containerSize.height, + padding = ownerContext.paddingContext.getPaddingInfo(), + targetEl = me.getTarget(), + overflowXStyle = me.getOverflowXStyle(ownerContext), + overflowYStyle = me.getOverflowYStyle(ownerContext), + canOverflowX = (overflowXStyle === 'auto' || overflowXStyle === 'scroll'), + canOverflowY = (overflowYStyle === 'auto' || overflowYStyle === 'scroll'), + scrollbarSize = Ext.getScrollbarSize(), + isShrinkWrapTpl = me.isShrinkWrapTpl, + manageOverflow = me.manageOverflow, + overflowStyleName, needsOuterHeight, needsInnerHeight, needsInnerCtPaddingHeight; + + if (width && !ownerContext.widthModel.shrinkWrap && + + + ((Ext.isIE7m && Ext.isStrict && isShrinkWrapTpl && canOverflowY) || + + + + (Ext.isIEQuirks && !isShrinkWrapTpl && !canOverflowX))) { + + if (!manageOverflow) { + + + + if (canOverflowY && (targetEl.dom.scrollHeight > targetEl.dom.clientHeight)) { + + width -= scrollbarSize.width; + } + } + + ownerContext.outerCtContext.setProp('width', width + padding.width); + me.hasOuterCtPxWidth = true; + } + + if (height && !ownerContext.heightModel.shrinkWrap) { + if (Ext.supports.PercentageHeightOverflowBug) { + + + needsOuterHeight = true; + } + if (((Ext.isIE8 && Ext.isStrict) || + Ext.isIE7m && Ext.isStrict && isShrinkWrapTpl)) { + + + + needsInnerHeight = true; + + + needsInnerCtPaddingHeight = !Ext.isIE8; + } + + if ((needsOuterHeight || needsInnerHeight) && canOverflowX && + (targetEl.dom.scrollWidth > targetEl.dom.clientWidth)) { + + + height -= scrollbarSize.height; + } + + if (needsOuterHeight) { + ownerContext.outerCtContext.setProp('height', height + padding.height); + me.hasOuterCtPxHeight = true; + } + + if (needsInnerHeight) { + if (needsInnerCtPaddingHeight) { + height += padding.height; + } + ownerContext.innerCtContext.setProp('height', height); + me.hasInnerCtPxHeight = true; + } + } + + if (Ext.isIE7 && Ext.isStrict && !isShrinkWrapTpl && (overflowYStyle === 'auto')) { + + + + + + + + overflowStyleName = (overflowXStyle === 'auto') ? 'overflow-x' : 'overflow-y'; + targetEl.setStyle(overflowStyleName, 'hidden'); + targetEl.setStyle(overflowStyleName, 'auto'); + } + }, + + setupRenderTpl: function (renderTpl) { + this.callParent(arguments); + + renderTpl.renderPadding = this.doRenderPadding; + }, + + getContentTarget: function(){ + return this.innerCt; + } + +}); + + +Ext.define('Ext.ZIndexManager', { + alternateClassName: 'Ext.WindowGroup', + + statics: { + zBase : 9000 + }, + + constructor: function(container) { + var me = this; + + me.list = {}; + me.zIndexStack = []; + me.front = null; + + if (container) { + + + if (container.isContainer) { + container.on('resize', me._onContainerResize, me); + me.zseed = Ext.Number.from(me.rendered ? container.getEl().getStyle('zIndex') : undefined, me.getNextZSeed()); + + me.targetEl = container.getTargetEl(); + me.container = container; + } + + else { + Ext.EventManager.onWindowResize(me._onContainerResize, me); + me.zseed = me.getNextZSeed(); + me.targetEl = Ext.get(container); + } + } + + + else { + Ext.EventManager.onWindowResize(me._onContainerResize, me); + me.zseed = me.getNextZSeed(); + Ext.onDocumentReady(function() { + me.targetEl = Ext.getBody(); + }); + } + }, + + getNextZSeed: function() { + return (Ext.ZIndexManager.zBase += 10000); + }, + + setBase: function(baseZIndex) { + this.zseed = baseZIndex; + var result = this.assignZIndices(); + this._activateLast(); + return result; + }, + + + assignZIndices: function() { + var a = this.zIndexStack, + len = a.length, + i = 0, + zIndex = this.zseed, + comp, + topModal; + + for (; i < len; i++) { + comp = a[i]; + if (comp && !comp.hidden) { + + + + + + + + + zIndex = comp.setZIndex(zIndex); + if (comp.modal) { + topModal = comp; + } + } + } + + + if (topModal) { + this._showModalMask(topModal) + } + return zIndex; + }, + + + _setActiveChild: function(comp, oldFront) { + var front = this.front, + oldPreventFocus = comp.preventFocusOnActivate; + + if (comp !== front) { + + if (front && !front.destroying) { + front.setActive(false, comp); + } + this.front = comp; + if (comp && comp != oldFront) { + + + comp.preventFocusOnActivate = comp.preventFocusOnActivate || oldFront && (oldFront.preventFocusOnActivate || !oldFront.focusOnToFront); + + comp.setActive(true); + + + if (comp.modal) { + this._showModalMask(comp); + } + + + comp.preventFocusOnActivate = oldPreventFocus; + } + } + }, + + onComponentHide: function(comp){ + this._activateLast(); + }, + + + _activateLast: function() { + var me = this, + stack = me.zIndexStack, + i = stack.length - 1, + comp; + + + + + for (; i >= 0 && stack[i].hidden; --i); + + + if ((comp = stack[i])) { + me._setActiveChild(comp, me.front); + if (comp.modal) { + return; + } + } + + else { + if (me.front && !me.front.destroying) { + me.front.setActive(false); + } + me.front = null; + } + + + + for (; i >= 0; --i) { + comp = stack[i]; + + if (comp.isVisible() && comp.modal) { + me._showModalMask(comp); + return; + } + } + + + + me._hideModalMask(); + }, + + _showModalMask: function(comp) { + var me = this, + zIndex = comp.el.getStyle('zIndex') - 4, + maskTarget = comp.floatParent ? comp.floatParent.getTargetEl() : comp.container, + mask = me.mask, + shim = me.maskShim, + viewSize; + + if (!mask) { + if (Ext.isIE6) { + shim = me.maskShim = Ext.getBody().createChild({ + tag: 'iframe', + cls : Ext.baseCSSPrefix + 'shim ' + Ext.baseCSSPrefix + 'mask-shim' + }); + shim.setVisibilityMode(Ext.Element.DISPLAY); + } + + + mask = me.mask = Ext.getBody().createChild({ + cls: Ext.baseCSSPrefix + 'mask', + style: 'height:0;width:0' + }); + mask.setVisibilityMode(Ext.Element.DISPLAY); + mask.on('click', me._onMaskClick, me); + } + + mask.maskTarget = maskTarget; + viewSize = me.getMaskBox(); + + if (shim) { + shim.setStyle('zIndex', zIndex); + shim.show(); + shim.setBox(viewSize); + } + mask.setStyle('zIndex', zIndex); + + + + mask.show(); + mask.setBox(viewSize); + }, + + _hideModalMask: function() { + var mask = this.mask, + maskShim = this.maskShim; + + if (mask && mask.isVisible()) { + mask.maskTarget = undefined; + mask.hide(); + if (maskShim) { + maskShim.hide(); + } + } + }, + + _onMaskClick: function() { + if (this.front) { + this.front.focus(); + } + }, + + getMaskBox: function(){ + var maskTarget = this.mask.maskTarget; + if (maskTarget.dom === document.body) { + return { + height: Math.max(document.body.scrollHeight, Ext.dom.Element.getDocumentHeight()), + width: Math.max(document.body.scrollWidth, document.documentElement.clientWidth), + x: 0, + y: 0 + }; + } else { + return maskTarget.getBox(); + } + }, + + _onContainerResize: function() { + var me = this, + mask = me.mask, + maskShim = me.maskShim, + viewSize; + + if (mask && mask.isVisible()) { + + + + mask.hide(); + if (maskShim) { + maskShim.hide(); + } + + viewSize = me.getMaskBox(); + if (maskShim) { + maskShim.setSize(viewSize); + maskShim.show(); + } + mask.setSize(viewSize); + mask.show(); + } + }, + + + register : function(comp) { + var me = this, + compAfterHide = comp.afterHide; + + if (comp.zIndexManager) { + comp.zIndexManager.unregister(comp); + } + comp.zIndexManager = me; + + me.list[comp.id] = comp; + me.zIndexStack.push(comp); + + + comp.afterHide = function() { + compAfterHide.apply(comp, arguments); + me.onComponentHide(comp); + }; + }, + + + unregister : function(comp) { + var me = this, + list = me.list; + + delete comp.zIndexManager; + if (list && list[comp.id]) { + delete list[comp.id]; + + + delete comp.afterHide; + Ext.Array.remove(me.zIndexStack, comp); + + + me._activateLast(); + } + }, + + + get : function(id) { + return id.isComponent ? id : this.list[id]; + }, + + + bringToFront : function(comp, preventFocus) { + var me = this, + result = false, + zIndexStack = me.zIndexStack; + + comp = me.get(comp); + if (comp !== me.front) { + Ext.Array.remove(zIndexStack, comp); + if (comp.preventBringToFront) { + + zIndexStack.unshift(comp); + } else { + + zIndexStack.push(comp); + } + + me.assignZIndices(); + + + if (!preventFocus) { + me._activateLast(); + } + result = true; + me.front = comp; + + + if (comp.modal) { + me._showModalMask(comp); + } + } + return result; + }, + + + sendToBack : function(comp) { + var me = this; + + comp = me.get(comp); + Ext.Array.remove(me.zIndexStack, comp); + me.zIndexStack.unshift(comp); + me.assignZIndices(); + this._activateLast(); + return comp; + }, + + + hideAll : function() { + var list = this.list, + item, + id; + + for (id in list) { + if (list.hasOwnProperty(id)) { + item = list[id]; + if (item.isComponent && item.isVisible()) { + item.hide(); + } + } + } + }, + + + hide: function() { + var i = 0, + stack = this.zIndexStack, + len = stack.length, + comp; + + this.tempHidden = []; + for (; i < len; i++) { + comp = stack[i]; + if (comp.isVisible()) { + this.tempHidden.push(comp); + comp.el.hide(); + comp.hidden = true; + } + } + }, + + + show: function() { + var i = 0, + tempHidden = this.tempHidden, + len = tempHidden ? tempHidden.length : 0, + comp; + + for (; i < len; i++) { + comp = tempHidden[i]; + comp.el.show(); + comp.hidden = false; + comp.setPosition(comp.x, comp.y); + } + delete this.tempHidden; + }, + + + getActive : function() { + return this.front; + }, + + + getBy : function(fn, scope) { + var r = [], + i = 0, + stack = this.zIndexStack, + len = stack.length, + comp; + + for (; i < len; i++) { + comp = stack[i]; + if (fn.call(scope||comp, comp) !== false) { + r.push(comp); + } + } + return r; + }, + + + each : function(fn, scope) { + var list = this.list, + id, + comp; + + for (id in list) { + if (list.hasOwnProperty(id)) { + comp = list[id]; + if (comp.isComponent && fn.call(scope || comp, comp) === false) { + return; + } + } + } + }, + + + eachBottomUp: function (fn, scope) { + var stack = this.zIndexStack, + i = 0, + len = stack.length, + comp; + + for (; i < len; i++) { + comp = stack[i]; + if (comp.isComponent && fn.call(scope || comp, comp) === false) { + return; + } + } + }, + + + eachTopDown: function (fn, scope) { + var stack = this.zIndexStack, + i = stack.length, + comp; + + for (; i-- > 0; ) { + comp = stack[i]; + if (comp.isComponent && fn.call(scope || comp, comp) === false) { + return; + } + } + }, + + destroy: function() { + var me = this, + list = me.list, + comp, + id; + + for (id in list) { + if (list.hasOwnProperty(id)) { + comp = list[id]; + + if (comp.isComponent) { + comp.destroy(); + } + } + } + + delete me.zIndexStack; + delete me.list; + delete me.container; + delete me.targetEl; + } +}, function() { + + Ext.WindowManager = Ext.WindowMgr = new this(); +}); + + +Ext.define('Ext.layout.component.Component', { + + + + extend: Ext.layout.Layout , + + + + type: 'component', + + isComponentLayout: true, + + nullBox: {}, + + usesContentHeight: true, + usesContentWidth: true, + usesHeight: true, + usesWidth: true, + + beginLayoutCycle: function (ownerContext, firstCycle) { + var me = this, + owner = me.owner, + ownerCtContext = ownerContext.ownerCtContext, + heightModel = ownerContext.heightModel, + widthModel = ownerContext.widthModel, + body = owner.el.dom === document.body, + lastBox = owner.lastBox || me.nullBox, + lastSize = owner.el.lastBox || me.nullBox, + dirty = !body, + ownerLayout, v, widthName, heightName; + + me.callParent(arguments); + + if (firstCycle) { + if (me.usesContentWidth) { + ++ownerContext.consumersContentWidth; + } + if (me.usesContentHeight) { + ++ownerContext.consumersContentHeight; + } + if (me.usesWidth) { + ++ownerContext.consumersWidth; + } + if (me.usesHeight) { + ++ownerContext.consumersHeight; + } + + if (ownerCtContext && !ownerCtContext.hasRawContent) { + ownerLayout = owner.ownerLayout; + + if (ownerLayout.usesWidth) { + ++ownerContext.consumersWidth; + } + if (ownerLayout.usesHeight) { + ++ownerContext.consumersHeight; + } + } + } + + + + + if (widthModel.configured) { + + + + + widthName = widthModel.names.width; + + if (!body) { + dirty = firstCycle ? owner[widthName] !== lastSize.width + : widthModel.constrained; + } + + ownerContext.setWidth(owner[widthName], dirty); + } else if (ownerContext.isTopLevel) { + if (widthModel.calculated) { + v = lastBox.width; + ownerContext.setWidth(v, v != lastSize.width); + } + + v = lastBox.x; + ownerContext.setProp('x', v, v != lastSize.x); + } + + if (heightModel.configured) { + heightName = heightModel.names.height; + + if (!body) { + dirty = firstCycle ? owner[heightName] !== lastSize.height + : heightModel.constrained; + } + + ownerContext.setHeight(owner[heightName], dirty); + } else if (ownerContext.isTopLevel) { + if (heightModel.calculated) { + v = lastBox.height; + ownerContext.setHeight(v, v != lastSize.height); + } + + v = lastBox.y; + ownerContext.setProp('y', v, v != lastSize.y); + } + }, + + finishedLayout: function(ownerContext) { + var me = this, + elementChildren = ownerContext.children, + owner = me.owner, + len, i, elContext, lastBox, props, v; + + + + + + if (elementChildren) { + len = elementChildren.length; + for (i = 0; i < len; i++) { + elContext = elementChildren[i]; + elContext.el.lastBox = elContext.props; + } + } + + + ownerContext.previousSize = me.lastComponentSize; + + + me.lastComponentSize = owner.el.lastBox = props = ownerContext.props; + + + + lastBox = owner.lastBox || (owner.lastBox = {}); + lastBox.x = props.x; + lastBox.y = props.y; + lastBox.width = props.width; + lastBox.height = props.height; + lastBox.invalid = false; + + me.callParent(arguments); + }, + + notifyOwner: function(ownerContext) { + var me = this, + currentSize = me.lastComponentSize, + prevSize = ownerContext.previousSize, + args = [currentSize.width, currentSize.height]; + + if (prevSize) { + args.push(prevSize.width, prevSize.height); + } + + + me.owner.afterComponentLayout.apply(me.owner, args); + }, + + + getTarget : function() { + return this.owner.el; + }, + + + getRenderTarget : function() { + return this.owner.el; + }, + + cacheTargetInfo: function(ownerContext) { + var me = this, + targetInfo = me.targetInfo, + target; + + if (!targetInfo) { + target = ownerContext.getEl('getTarget', me); + + me.targetInfo = targetInfo = { + padding: target.getPaddingInfo(), + border: target.getBorderInfo() + }; + } + + return targetInfo; + }, + + measureAutoDimensions: function (ownerContext, dimensions) { + + + + + + + var me = this, + owner = me.owner, + containerLayout = owner.layout, + heightModel = ownerContext.heightModel, + widthModel = ownerContext.widthModel, + boxParent = ownerContext.boxParent, + isBoxParent = ownerContext.isBoxParent, + props = ownerContext.props, + isContainer, + ret = { + gotWidth: false, + gotHeight: false, + isContainer: (isContainer = !ownerContext.hasRawContent) + }, + hv = dimensions || 3, + zeroWidth, zeroHeight, + needed = 0, + got = 0, + ready, size, temp; + + + + + + + + if (widthModel.shrinkWrap && ownerContext.consumersContentWidth) { + ++needed; + zeroWidth = !(hv & 1); + + if (isContainer) { + + + if (zeroWidth) { + ret.contentWidth = 0; + ret.gotWidth = true; + ++got; + } else if ((ret.contentWidth = ownerContext.getProp('contentWidth')) !== undefined) { + ret.gotWidth = true; + ++got; + } + } else { + size = props.contentWidth; + + if (typeof size == 'number') { + ret.contentWidth = size; + ret.gotWidth = true; + ++got; + } else { + if (zeroWidth) { + ready = true; + } else if (!ownerContext.hasDomProp('containerChildrenSizeDone')) { + ready = false; + } else if (isBoxParent || !boxParent || boxParent.widthModel.shrinkWrap) { + + + + ready = true; + } else { + + + + ready = boxParent.hasDomProp('width'); + } + + if (ready) { + if (zeroWidth) { + temp = 0; + } else if (containerLayout && containerLayout.measureContentWidth) { + + + temp = containerLayout.measureContentWidth(ownerContext); + } else { + temp = me.measureContentWidth(ownerContext); + } + + if (!isNaN(ret.contentWidth = temp)) { + ownerContext.setContentWidth(temp, true); + ret.gotWidth = true; + ++got; + } + } + } + } + } else if (widthModel.natural && ownerContext.consumersWidth) { + ++needed; + size = props.width; + + + if (typeof size == 'number') { + ret.width = size; + ret.gotWidth = true; + ++got; + } else { + if (isBoxParent || !boxParent) { + ready = true; + } else { + + + + ready = boxParent.hasDomProp('width'); + } + + if (ready) { + if (!isNaN(ret.width = me.measureOwnerWidth(ownerContext))) { + ownerContext.setWidth(ret.width, false); + ret.gotWidth = true; + ++got; + } + } + } + } + + + + + if (heightModel.shrinkWrap && ownerContext.consumersContentHeight) { + ++needed; + zeroHeight = !(hv & 2); + + if (isContainer) { + + if (zeroHeight) { + ret.contentHeight = 0; + ret.gotHeight = true; + ++got; + } else if ((ret.contentHeight = ownerContext.getProp('contentHeight')) !== undefined) { + ret.gotHeight = true; + ++got; + } + } else { + size = props.contentHeight; + + if (typeof size == 'number') { + ret.contentHeight = size; + ret.gotHeight = true; + ++got; + } else { + if (zeroHeight) { + ready = true; + } else if (!ownerContext.hasDomProp('containerChildrenSizeDone')) { + ready = false; + } else if (owner.noWrap) { + ready = true; + } else if (!widthModel.shrinkWrap) { + + ready = (ownerContext.bodyContext || ownerContext).hasDomProp('width'); + } else if (isBoxParent || !boxParent || boxParent.widthModel.shrinkWrap) { + + + + ready = true; + } else { + + + + ready = boxParent.hasDomProp('width'); + } + + if (ready) { + if (zeroHeight) { + temp = 0; + } else if (containerLayout && containerLayout.measureContentHeight) { + + + temp = containerLayout.measureContentHeight(ownerContext); + } else { + temp = me.measureContentHeight(ownerContext); + } + + if (!isNaN(ret.contentHeight = temp)) { + ownerContext.setContentHeight(temp, true); + ret.gotHeight = true; + ++got; + } + } + } + } + } else if (heightModel.natural && ownerContext.consumersHeight) { + ++needed; + size = props.height; + + + if (typeof size == 'number') { + ret.height = size; + ret.gotHeight = true; + ++got; + } else { + if (isBoxParent || !boxParent) { + ready = true; + } else { + + + + ready = boxParent.hasDomProp('width'); + } + + if (ready) { + if (!isNaN(ret.height = me.measureOwnerHeight(ownerContext))) { + ownerContext.setHeight(ret.height, false); + ret.gotHeight = true; + ++got; + } + } + } + } + + if (boxParent) { + ownerContext.onBoxMeasured(); + } + + ret.gotAll = got == needed; + + return ret; + }, + + measureContentWidth: function (ownerContext) { + + return ownerContext.el.getWidth() - ownerContext.getFrameInfo().width; + }, + + measureContentHeight: function (ownerContext) { + + return ownerContext.el.getHeight() - ownerContext.getFrameInfo().height; + }, + + measureOwnerHeight: function (ownerContext) { + return ownerContext.el.getHeight(); + }, + + measureOwnerWidth: function (ownerContext) { + return ownerContext.el.getWidth(); + } +}); + + +Ext.define('Ext.layout.component.Auto', { + + + + alias: 'layout.autocomponent', + + extend: Ext.layout.component.Component , + + + + type: 'autocomponent', + + + setHeightInDom: false, + + + setWidthInDom: false, + + waitForOuterHeightInDom: false, + waitForOuterWidthInDom: false, + + beginLayoutCycle: function(ownerContext, firstCycle){ + var me = this, + lastWidthModel = me.lastWidthModel, + lastHeightModel = me.lastHeightModel, + el = me.owner.el; + + me.callParent(arguments); + + if (lastWidthModel && lastWidthModel.fixed && ownerContext.widthModel.shrinkWrap) { + el.setWidth(null); + } + + if (lastHeightModel && lastHeightModel.fixed && ownerContext.heightModel.shrinkWrap) { + el.setHeight(null); + } + }, + + calculate: function(ownerContext) { + var me = this, + measurement = me.measureAutoDimensions(ownerContext), + heightModel = ownerContext.heightModel, + widthModel = ownerContext.widthModel, + width, height; + + + + if (measurement.gotWidth) { + if (widthModel.shrinkWrap) { + me.publishOwnerWidth(ownerContext, measurement.contentWidth); + } else if (me.publishInnerWidth) { + me.publishInnerWidth(ownerContext, measurement.width); + } + } else if (!widthModel.auto && me.publishInnerWidth) { + width = me.waitForOuterWidthInDom ? ownerContext.getDomProp('width') + : ownerContext.getProp('width'); + if (width === undefined) { + me.done = false; + } else { + me.publishInnerWidth(ownerContext, width); + } + } + + if (measurement.gotHeight) { + if (heightModel.shrinkWrap) { + me.publishOwnerHeight(ownerContext, measurement.contentHeight); + } else if (me.publishInnerHeight) { + me.publishInnerHeight(ownerContext, measurement.height); + } + } else if (!heightModel.auto && me.publishInnerHeight) { + height = me.waitForOuterHeightInDom ? ownerContext.getDomProp('height') + : ownerContext.getProp('height'); + if (height === undefined) { + me.done = false; + } else { + me.publishInnerHeight(ownerContext, height); + } + } + + if (!measurement.gotAll) { + me.done = false; + } + }, + + calculateOwnerHeightFromContentHeight: function (ownerContext, contentHeight) { + return contentHeight + ownerContext.getFrameInfo().height; + }, + + calculateOwnerWidthFromContentWidth: function (ownerContext, contentWidth) { + return contentWidth + ownerContext.getFrameInfo().width; + }, + + publishOwnerHeight: function (ownerContext, contentHeight) { + var me = this, + owner = me.owner, + height = me.calculateOwnerHeightFromContentHeight(ownerContext, contentHeight), + constrainedHeight, dirty, heightModel; + + if (isNaN(height)) { + me.done = false; + } else { + constrainedHeight = Ext.Number.constrain(height, owner.minHeight, owner.maxHeight); + + if (constrainedHeight == height) { + dirty = me.setHeightInDom; + } else { + heightModel = me.sizeModels[ + (constrainedHeight < height) ? 'constrainedMax' : 'constrainedMin']; + height = constrainedHeight; + + if (ownerContext.heightModel.calculatedFromShrinkWrap) { + + + + ownerContext.heightModel = heightModel; + } else { + ownerContext.invalidate({ heightModel: heightModel }); + } + } + + ownerContext.setHeight(height, dirty); + } + }, + + publishOwnerWidth: function (ownerContext, contentWidth) { + var me = this, + owner = me.owner, + width = me.calculateOwnerWidthFromContentWidth(ownerContext, contentWidth), + constrainedWidth, dirty, widthModel; + + if (isNaN(width)) { + me.done = false; + } else { + constrainedWidth = Ext.Number.constrain(width, owner.minWidth, owner.maxWidth); + + if (constrainedWidth == width) { + dirty = me.setWidthInDom; + } else { + widthModel = me.sizeModels[ + (constrainedWidth < width) ? 'constrainedMax' : 'constrainedMin']; + width = constrainedWidth; + + if (ownerContext.widthModel.calculatedFromShrinkWrap) { + + + + ownerContext.widthModel = widthModel; + } else { + ownerContext.invalidate({ widthModel: widthModel }); + } + } + + ownerContext.setWidth(width, dirty); + } + } +}); + + +Ext.define('Ext.container.AbstractContainer', { + + + + extend: Ext.Component , + + + + + + + + + + renderTpl: '{%this.renderContainer(out,values)%}', + + + + + + + + + + + suspendLayout : false, + + + autoDestroy : true, + + + defaultType: 'panel', + + + detachOnRemove: true, + + + isContainer : true, + + + layoutCounter : 0, + + baseCls: Ext.baseCSSPrefix + 'container', + + + + defaultLayoutType: 'auto', + + + initComponent : function(){ + var me = this; + me.addEvents( + + 'afterlayout', + + 'beforeadd', + + 'beforeremove', + + 'add', + + 'remove' + ); + + me.callParent(); + + me.getLayout(); + me.initItems(); + }, + + + initItems : function() { + var me = this, + items = me.items; + + + me.items = new Ext.util.AbstractMixedCollection(false, me.getComponentId); + me.floatingItems = new Ext.util.MixedCollection(false, me.getComponentId); + + if (items) { + if (!Ext.isArray(items)) { + items = [items]; + } + + me.add(items); + } + }, + + + getFocusEl: function() { + return this.getTargetEl(); + }, + + finishRenderChildren: function () { + this.callParent(); + + var layout = this.getLayout(); + + if (layout) { + layout.finishRender(); + } + }, + + beforeRender: function () { + var me = this, + layout = me.getLayout(), + targetCls; + + me.callParent(); + + if (!layout.initialized) { + layout.initLayout(); + } + + targetCls = layout.targetCls; + + if (targetCls) { + me.applyTargetCls(targetCls); + } + }, + + + + + + + applyTargetCls: function(targetCls) { + this.addCls(targetCls); + }, + + afterComponentLayout: function() { + var floaters = this.floatingItems.items, + floaterCount = floaters.length, + i, floater + + this.callParent(arguments); + + + for (i = 0; i < floaterCount; i++) { + floater = floaters[i]; + if (!floater.rendered && floater.autoShow) { + floater.show(); + } + } + }, + + onPosition: function() { + this.callParent(arguments); + this.repositionFloatingItems(); + }, + + onResize: function() { + this.callParent(arguments); + this.repositionFloatingItems(); + }, + + repositionFloatingItems: function() { + var floaters = this.floatingItems.items, + floaterCount = floaters.length, + i, floater; + + + for (i = 0; i < floaterCount; i++) { + floater = floaters[i]; + if (floater.el && !floater.hidden) { + floater.setPosition(floater.x, floater.y); + } + } + }, + + setupRenderTpl: function (renderTpl) { + this.callParent(arguments); + this.getLayout().setupRenderTpl(renderTpl); + }, + + + getDefaultContentTarget: function() { + return this.el; + }, + + + getContentTarget: function(){ + return this.getLayout().getContentTarget(); + }, + + + setLayout : function(layout) { + var currentLayout = this.layout; + + if (currentLayout && currentLayout.isLayout && currentLayout != layout) { + currentLayout.setOwner(null); + } + + this.layout = layout; + layout.setOwner(this); + }, + + + getLayout : function() { + var me = this; + if (!me.layout || !me.layout.isLayout) { + + me.setLayout(Ext.layout.Layout.create(me.layout, me.self.prototype.layout || me.defaultLayoutType)); + } + + return me.layout; + }, + + + doLayout : function() { + this.updateLayout(); + return this; + }, + + + afterLayout : function(layout) { + var me = this; + ++me.layoutCounter; + if (me.hasListeners.afterlayout) { + me.fireEvent('afterlayout', me, layout); + } + }, + + + prepareItems : function(items, applyDefaults) { + + + if (Ext.isArray(items)) { + items = items.slice(); + } else { + items = [items]; + } + + + var me = this, + i = 0, + len = items.length, + item; + + for (; i < len; i++) { + item = items[i]; + if (item == null) { + Ext.Array.erase(items, i, 1); + --i; + --len; + } else { + if (applyDefaults) { + item = this.applyDefaults(item); + } + + + item.isContained = me; + items[i] = me.lookupComponent(item); + + delete item.isContained; + delete items[i].isContained; + } + } + + return items; + }, + + + applyDefaults : function(config) { + var defaults = this.defaults; + + if (defaults) { + if (Ext.isFunction(defaults)) { + defaults = defaults.call(this, config); + } + + if (Ext.isString(config)) { + config = Ext.ComponentManager.get(config); + } + Ext.applyIf(config, defaults); + } + return config; + }, + + + lookupComponent : function(comp) { + return (typeof comp == 'string') ? Ext.ComponentManager.get(comp) + : Ext.ComponentManager.create(comp, this.defaultType); + }, + + + getComponentId : function(comp) { + if (comp.getItemId) { + return comp.getItemId(); + } + }, + + + add : function() { + var me = this, + args = Ext.Array.slice(arguments), + index = (typeof args[0] == 'number') ? args.shift() : -1, + layout = me.getLayout(), + addingArray, items, i, length, item, pos, ret; + + if (args.length == 1 && Ext.isArray(args[0])) { + items = args[0]; + addingArray = true; + } else { + items = args; + } + + ret = items = me.prepareItems(items, true); + length = items.length; + + if (me.rendered) { + Ext.suspendLayouts(); + } + + if (!addingArray && length == 1) { + ret = items[0]; + } + + + for (i = 0; i < length; i++) { + item = items[i]; + + pos = (index < 0) ? me.items.length : (index + i); + + + if (item.floating) { + me.floatingItems.add(item); + item.onAdded(me, pos); + + if (me.hasListeners.add) { + me.fireEvent('add', me, item, pos); + } + } else if ((!me.hasListeners.beforeadd || me.fireEvent('beforeadd', me, item, pos) !== false) && me.onBeforeAdd(item) !== false) { + me.items.insert(pos, item); + item.onAdded(me, pos); + me.onAdd(item, pos); + layout.onAdd(item, pos); + + if (me.hasListeners.add) { + me.fireEvent('add', me, item, pos); + } + } + } + + + me.updateLayout(); + if (me.rendered) { + Ext.resumeLayouts(true); + } + + return ret; + }, + + + onAdd : Ext.emptyFn, + + + onRemove : Ext.emptyFn, + + + insert : function(index, comp) { + return this.add(index, comp); + }, + + + move : function(fromIdx, toIdx) { + var items = this.items, + item; + item = items.removeAt(fromIdx); + if (item === false) { + return false; + } + items.insert(toIdx, item); + this.onMove(item, fromIdx, toIdx); + this.updateLayout(); + return item; + }, + + onMove: Ext.emptyFn, + + + onBeforeAdd : function(item) { + + if (item.ownerCt && item.ownerCt !== this) { + item.ownerCt.remove(item, false); + } + }, + + + remove : function(comp, autoDestroy) { + var me = this, + c = me.getComponent(comp); + + if (c && (!me.hasListeners.beforeremove || me.fireEvent('beforeremove', me, c) !== false)) { + me.doRemove(c, autoDestroy); + if (me.hasListeners.remove) { + me.fireEvent('remove', me, c); + } + + if (!me.destroying && !c.floating) { + me.updateLayout(); + } + } + + return c; + }, + + + doRemove : function(component, doDestroy) { + + doDestroy = doDestroy === true || (doDestroy !== false && this.autoDestroy); + + var me = this, + layout = me.layout, + hasLayout = layout && me.rendered, + + + isDestroying = component.destroying || doDestroy, + floating = component.floating; + + if (floating) { + me.floatingItems.remove(component); + } else { + me.items.remove(component); + } + + + if (hasLayout && !floating) { + + if (layout.running) { + Ext.AbstractComponent.cancelLayout(component, isDestroying); + } + layout.onRemove(component, isDestroying); + } + + component.onRemoved(isDestroying); + + me.onRemove(component, isDestroying); + + + if (doDestroy) { + component.destroy(); + } + + else { + if (hasLayout && !floating) { + layout.afterRemove(component); + } + if (me.detachOnRemove && component.rendered) { + me.detachComponent(component); + } + } + }, + + + detachComponent: function(component){ + Ext.getDetachedBody().appendChild(component.getEl()); + }, + + + removeAll : function(autoDestroy) { + var me = this, + removeItems = me.items.items.slice().concat(me.floatingItems.items), + items = [], + i = 0, + len = removeItems.length, + item; + + + me.suspendLayouts(); + for (; i < len; i++) { + item = removeItems[i]; + me.remove(item, autoDestroy); + + if (item.ownerCt !== me) { + items.push(item); + } + } + + + me.resumeLayouts(!!len); + return items; + }, + + + getRefItems : function(deep) { + var me = this, + items = me.items.items, + len = items.length, + i = 0, + item, + result = []; + + for (; i < len; i++) { + item = items[i]; + result.push(item); + if (deep && item.getRefItems) { + result.push.apply(result, item.getRefItems(true)); + } + } + + + result.push.apply(result, me.floatingItems.items); + + return result; + }, + + + cascade : function(fn, scope, origArgs){ + var me = this, + cs = me.items ? me.items.items : [], + len = cs.length, + i = 0, + c, + args = origArgs ? origArgs.concat(me) : [me], + componentIndex = args.length - 1; + + if (fn.apply(scope || me, args) !== false) { + for (; i < len; i++){ + c = cs[i]; + if (c.cascade) { + c.cascade(fn, scope, origArgs); + } else { + args[componentIndex] = c; + fn.apply(scope || cs, args); + } + } + } + return this; + }, + + + isAncestor: function(possibleDescendant) { + while (possibleDescendant) { + if (possibleDescendant.ownerCt === this) { + return true; + } + possibleDescendant = possibleDescendant.ownerCt; + } + }, + + + getComponent : function(comp) { + if (Ext.isObject(comp)) { + comp = comp.getItemId(); + } + + var c = this.items.get(comp); + + + if (!c && typeof comp != 'number') { + c = this.floatingItems.get(comp); + } + + return c; + }, + + + query : function(selector) { + selector = selector || '*'; + return Ext.ComponentQuery.query(selector, this); + }, + + + queryBy: function(fn, scope) { + var out = [], + items = this.getRefItems(true), + i = 0, + len = items.length, + item; + + for (; i < len; ++i) { + item = items[i]; + if (fn.call(scope || item, item) !== false) { + out.push(item); + } + } + return out; + }, + + + queryById: function(id){ + return this.down('#' + id); + }, + + + child: function (selector) { + if (selector && selector.isComponent) { + selector = '#' + Ext.escapeId(selector.getItemId()); + } + + selector = selector || ''; + return this.query('> ' + selector)[0] || null; + }, + + + contains: function(comp, deep) { + var result = false; + if (deep) { + this.cascade(function(c) { + + if (c.contains && c.contains(comp)) { + result = true; + return false; + } + }); + return result; + } else { + return this.items.contains(comp) || this.floatingItems.contains(comp); + } + }, + + nextChild: function(child, selector) { + var me = this, + result, + childIndex = me.items.indexOf(child); + + if (childIndex !== -1) { + result = selector ? Ext.ComponentQuery(selector, me.items.items.slice(childIndex + 1)) : me.items.getAt(childIndex + 1); + if (!result && me.ownerCt) { + result = me.ownerCt.nextChild(me, selector); + } + } + return result; + }, + + prevChild: function(child, selector) { + var me = this, + result, + childIndex = me.items.indexOf(child); + + if (childIndex !== -1) { + result = selector ? Ext.ComponentQuery(selector, me.items.items.slice(childIndex + 1)) : me.items.getAt(childIndex + 1); + if (!result && me.ownerCt) { + result = me.ownerCt.nextChild(me, selector); + } + } + return result; + }, + + + down: function (selector) { + if (selector && selector.isComponent) { + selector = '#' + Ext.escapeId(selector.getItemId()); + } + + selector = selector || ''; + return this.query(selector)[0] || null; + }, + + + + + enable: function() { + this.callParent(arguments); + + var itemsToDisable = this.getChildItemsToDisable(), + length = itemsToDisable.length, + item, i; + + for (i = 0; i < length; i++) { + item = itemsToDisable[i]; + + if (item.resetDisable) { + item.enable(); + } + } + + return this; + }, + + + + + disable: function() { + this.callParent(arguments); + + var itemsToDisable = this.getChildItemsToDisable(), + length = itemsToDisable.length, + item, i; + + for (i = 0; i < length; i++) { + item = itemsToDisable[i]; + + if (item.resetDisable !== false && !item.disabled) { + item.disable(); + item.resetDisable = true; + } + } + + return this; + }, + + + getChildItemsToDisable: function(){ + return this.query('[isFormField],button'); + }, + + + + beforeDestroy : function() { + var me = this, + items = me.items, + floatingItems = me.floatingItems, + c; + + if (items) { + while ((c = items.first())) { + me.doRemove(c, true); + } + } + + if (floatingItems) { + while ((c = floatingItems.first())) { + me.doRemove(c, true); + } + } + + Ext.destroy( + me.layout + ); + me.callParent(); + } +}); + + +Ext.define('Ext.container.Container', { + extend: Ext.container.AbstractContainer , + alias: 'widget.container', + alternateClassName: 'Ext.Container', + + + getChildByElement: function(el, deep) { + var item, + itemEl, + i = 0, + it = this.getRefItems(), + ln = it.length; + + el = Ext.getDom(el); + for (; i < ln; i++) { + item = it[i]; + itemEl = item.getEl(); + if (itemEl && ((itemEl.dom === el) || itemEl.contains(el))) { + return (deep && item.getChildByElement) ? item.getChildByElement(el, deep) : item; + } + } + return null; + } +}); + + +Ext.define('Ext.layout.container.Editor', { + + + + alias: 'layout.editor', + + extend: Ext.layout.container.Container , + + + + autoSizeDefault: { + width: 'field', + height: 'field' + }, + + sizePolicies: { + + $: { + + $: { + readsWidth: 1, + readsHeight: 1, + setsWidth: 0, + setsHeight: 0 + }, + boundEl: { + readsWidth: 1, + readsHeight: 0, + setsWidth: 0, + setsHeight: 1 + } + }, + + boundEl: { + + $: { + readsWidth: 0, + readsHeight: 1, + setsWidth: 1, + setsHeight: 0 + }, + boundEl: { + readsWidth: 0, + readsHeight: 0, + setsWidth: 1, + setsHeight: 1 + } + } + }, + + getItemSizePolicy: function (item) { + var me = this, + autoSize = me.owner.autoSize, + key = autoSize && autoSize.width, + policy = me.sizePolicies; + + policy = policy[key] || policy.$; + + key = autoSize && autoSize.height; + policy = policy[key] || policy.$; + + return policy; + }, + + calculate: function(ownerContext) { + var me = this, + owner = me.owner, + autoSize = owner.autoSize, + fieldWidth, + fieldHeight; + + if (autoSize === true) { + autoSize = me.autoSizeDefault; + } + + + if (autoSize) { + fieldWidth = me.getDimension(owner, autoSize.width, 'getWidth', owner.width); + fieldHeight = me.getDimension(owner, autoSize.height, 'getHeight', owner.height); + } + + + ownerContext.childItems[0].setSize(fieldWidth, fieldHeight); + + + ownerContext.setWidth(fieldWidth); + ownerContext.setHeight(fieldHeight); + + + ownerContext.setContentSize(fieldWidth || owner.field.getWidth(), + fieldHeight || owner.field.getHeight()); + }, + + getDimension: function(owner, type, getMethod, ownerSize){ + switch (type) { + + case 'boundEl': + return owner.boundEl[getMethod](); + + + case 'field': + return undefined; + + + default: + return ownerSize; + } + } +}); + + +Ext.define('Ext.Editor', { + + + + extend: Ext.container.Container , + + alias: 'widget.editor', + + + + + + layout: 'editor', + + + + + allowBlur: true, + + + + + revertInvalid: true, + + + + + + + value : '', + + + alignment: 'c-c?', + + + offsets: [0, 0], + + + shadow : 'frame', + + + constrain : false, + + + swallowKeys : true, + + + completeOnEnter : true, + + + cancelOnEsc : true, + + + updateEl : false, + + + + + focusOnToFront: false, + + + + + hidden: true, + baseCls: Ext.baseCSSPrefix + 'editor', + + initComponent : function() { + var me = this, + field = me.field = Ext.ComponentManager.create(me.field, 'textfield'); + + Ext.apply(field, { + inEditor: true, + msgTarget: field.msgTarget == 'title' ? 'title' : 'qtip' + }); + me.mon(field, { + scope: me, + blur: { + fn: me.onFieldBlur, + + delay: 1 + }, + specialkey: me.onSpecialKey + }); + + if (field.grow) { + me.mon(field, 'autosize', me.onFieldAutosize, me, {delay: 1}); + } + me.floating = { + constrain: me.constrain + }; + me.items = field; + + me.callParent(arguments); + + me.addEvents( + + 'beforestartedit', + + + 'startedit', + + + 'beforecomplete', + + 'complete', + + 'canceledit', + + 'specialkey' + ); + }, + + + onFieldAutosize: function(){ + this.updateLayout(); + }, + + + afterRender : function(ct, position) { + var me = this, + field = me.field, + inputEl = field.inputEl; + + me.callParent(arguments); + + + if (inputEl) { + inputEl.dom.name = ''; + if (me.swallowKeys) { + inputEl.swallowEvent([ + 'keypress', + 'keydown' + ]); + } + } + }, + + + onSpecialKey : function(field, event) { + var me = this, + key = event.getKey(), + complete = me.completeOnEnter && key == event.ENTER, + cancel = me.cancelOnEsc && key == event.ESC; + + if (complete || cancel) { + event.stopEvent(); + + + Ext.defer(function() { + if (complete) { + me.completeEdit(); + } else { + me.cancelEdit(); + } + if (field.triggerBlur) { + field.triggerBlur(event); + } + }, 10); + } + + me.fireEvent('specialkey', me, field, event); + }, + + + startEdit : function(el, value) { + var me = this, + field = me.field; + + me.completeEdit(); + me.boundEl = Ext.get(el); + value = Ext.isDefined(value) ? value : Ext.String.trim(me.boundEl.dom.innerText || me.boundEl.dom.innerHTML); + + if (!me.rendered) { + + + + + if (me.ownerCt) { + me.parentEl = me.ownerCt.el; + me.parentEl.position(); + } + me.render(me.parentEl || document.body); + } + + if (me.fireEvent('beforestartedit', me, me.boundEl, value) !== false) { + me.startValue = value; + me.show(); + + field.suspendEvents(); + field.reset(); + field.setValue(value); + field.resumeEvents(); + me.realign(true); + field.focus(false, 10); + if (field.autoSize) { + field.autoSize(); + } + me.editing = true; + } + }, + + + realign : function(autoSize) { + var me = this; + if (autoSize === true) { + me.updateLayout(); + } + me.alignTo(me.boundEl, me.alignment, me.offsets); + }, + + + completeEdit : function(remainVisible) { + var me = this, + field = me.field, + value; + + if (!me.editing) { + return; + } + + + if (field.assertValue) { + field.assertValue(); + } + + value = me.getValue(); + if (!field.isValid()) { + if (me.revertInvalid !== false) { + me.cancelEdit(remainVisible); + } + return; + } + + if (String(value) === String(me.startValue) && me.ignoreNoChange) { + me.hideEdit(remainVisible); + return; + } + + if (me.fireEvent('beforecomplete', me, value, me.startValue) !== false) { + + value = me.getValue(); + if (me.updateEl && me.boundEl) { + me.boundEl.update(value); + } + me.hideEdit(remainVisible); + me.fireEvent('complete', me, value, me.startValue); + } + }, + + + onShow : function() { + var me = this; + + me.callParent(arguments); + if (me.hideEl !== false) { + me.boundEl.hide(); + } + me.fireEvent('startedit', me, me.boundEl, me.startValue); + }, + + + cancelEdit : function(remainVisible) { + var me = this, + startValue = me.startValue, + field = me.field, + value; + + if (me.editing) { + value = me.getValue(); + + field.suspendEvents(); + me.setValue(startValue); + field.resumeEvents(); + me.hideEdit(remainVisible); + me.fireEvent('canceledit', me, value, startValue); + } + }, + + + hideEdit: function(remainVisible) { + if (remainVisible !== true) { + this.editing = false; + this.hide(); + } + }, + + + onFieldBlur : function(field, e) { + var me = this, + target = Ext.Element.getActiveElement(); + + + if(me.allowBlur === true && me.editing && me.selectSameEditor !== true) { + me.completeEdit(); + } + + + if (Ext.fly(target).isFocusable() || target.getAttribute('tabIndex')) { + target.focus(); + } + }, + + + onHide : function() { + var me = this, + field = me.field; + + if (me.editing) { + me.completeEdit(); + return; + } + if (field.hasFocus) { + field.blur(); + } + if (field.collapse) { + field.collapse(); + } + + + if (me.hideEl !== false) { + me.boundEl.show(); + } + me.callParent(arguments); + }, + + + setValue : function(value) { + this.field.setValue(value); + }, + + + getValue : function() { + return this.field.getValue(); + }, + + beforeDestroy : function() { + var me = this; + + Ext.destroy(me.field); + delete me.field; + delete me.parentEl; + delete me.boundEl; + + me.callParent(arguments); + } +}); + + +Ext.define('Ext.util.KeyMap', { + alternateClassName: 'Ext.KeyMap', + + + + + + + + + + + eventName: 'keydown', + + constructor: function(config) { + var me = this; + + + + if ((arguments.length !== 1) || (typeof config === 'string') || config.dom || config.tagName || config === document || config.isComponent) { + me.legacyConstructor.apply(me, arguments); + return; + } + + Ext.apply(me, config); + me.bindings = []; + + if (!me.target.isComponent) { + me.target = Ext.get(me.target); + } + + if (me.binding) { + me.addBinding(me.binding); + } else if (config.key) { + me.addBinding(config); + } + me.enable(); + }, + + + legacyConstructor: function(el, binding, eventName){ + var me = this; + + Ext.apply(me, { + target: Ext.get(el), + eventName: eventName || me.eventName, + bindings: [] + }); + if (binding) { + me.addBinding(binding); + } + me.enable(); + }, + + + addBinding : function(binding){ + var me = this, + keyCode = binding.key, + i, + len; + + if (me.processing) { + me.bindings = bindings.slice(0); + } + + if (Ext.isArray(binding)) { + for (i = 0, len = binding.length; i < len; i++) { + me.addBinding(binding[i]); + } + return; + } + + me.bindings.push(Ext.apply({ + keyCode: me.processKeys(keyCode) + }, binding)); + }, + + + removeBinding: function(binding){ + var me = this, + bindings = me.bindings, + len = bindings.length, + i, item, keys; + + if (me.processing) { + me.bindings = bindings.slice(0); + } + + keys = me.processKeys(binding.key); + for (i = 0; i < len; ++i) { + item = bindings[i]; + if (item.fn === binding.fn && item.scope === binding.scope) { + if (binding.alt == item.alt && binding.crtl == item.crtl && binding.shift == item.shift) { + if (Ext.Array.equals(item.keyCode, keys)) { + Ext.Array.erase(me.bindings, i, 1); + return; + } + } + } + } + }, + + processKeys: function(keyCode){ + var processed = false, + key, keys, keyString, len, i; + + if (Ext.isString(keyCode)) { + keys = []; + keyString = keyCode.toUpperCase(); + + for (i = 0, len = keyString.length; i < len; ++i){ + keys.push(keyString.charCodeAt(i)); + } + keyCode = keys; + processed = true; + } + + if (!Ext.isArray(keyCode)) { + keyCode = [keyCode]; + } + + if (!processed) { + for (i = 0, len = keyCode.length; i < len; ++i) { + key = keyCode[i]; + if (Ext.isString(key)) { + keyCode[i] = key.toUpperCase().charCodeAt(0); + } + } + } + return keyCode; + }, + + + handleTargetEvent: (function() { + var tagRe = /input|textarea/i; + + return function(event) { + var me = this, + bindings, i, len, + target, contentEditable; + + if (me.enabled) { + bindings = me.bindings; + i = 0; + len = bindings.length; + + + event = me.processEvent.apply(me||me.processEventScope, arguments); + + + if (me.ignoreInputFields) { + target = event.target; + contentEditable = target.contentEditable; + + + + if (tagRe.test(target.tagName) || (contentEditable === '' || contentEditable === 'true')) { + return; + } + } + + + + if (!event.getKey) { + return event; + } + me.processing = true; + for(; i < len; ++i){ + me.processBinding(bindings[i], event); + } + me.processing = false; + } + } + }()), + + + processEvent: Ext.identityFn, + + + processBinding: function(binding, event){ + if (this.checkModifiers(binding, event)) { + var key = event.getKey(), + handler = binding.fn || binding.handler, + scope = binding.scope || this, + keyCode = binding.keyCode, + defaultEventAction = binding.defaultEventAction, + i, + len, + keydownEvent = new Ext.EventObjectImpl(event); + + + for (i = 0, len = keyCode.length; i < len; ++i) { + if (key === keyCode[i]) { + if (handler.call(scope, key, event) !== true && defaultEventAction) { + keydownEvent[defaultEventAction](); + } + break; + } + } + } + }, + + + checkModifiers: function(binding, e) { + var keys = ['shift', 'ctrl', 'alt'], + i = 0, + len = keys.length, + val, key; + + for (; i < len; ++i){ + key = keys[i]; + val = binding[key]; + if (!(val === undefined || (val === e[key + 'Key']))) { + return false; + } + } + return true; + }, + + + on: function(key, fn, scope) { + var keyCode, shift, ctrl, alt; + if (Ext.isObject(key) && !Ext.isArray(key)) { + keyCode = key.key; + shift = key.shift; + ctrl = key.ctrl; + alt = key.alt; + } else { + keyCode = key; + } + this.addBinding({ + key: keyCode, + shift: shift, + ctrl: ctrl, + alt: alt, + fn: fn, + scope: scope + }); + }, + + + un: function(key, fn, scope) { + var keyCode, shift, ctrl, alt; + if (Ext.isObject(key) && !Ext.isArray(key)) { + keyCode = key.key; + shift = key.shift; + ctrl = key.ctrl; + alt = key.alt; + } else { + keyCode = key; + } + this.removeBinding({ + key: keyCode, + shift: shift, + ctrl: ctrl, + alt: alt, + fn: fn, + scope: scope + }); + }, + + + isEnabled : function() { + return this.enabled; + }, + + + enable: function() { + var me = this; + + if (!me.enabled) { + me.target.on(me.eventName, me.handleTargetEvent, me); + me.enabled = true; + } + }, + + + disable: function() { + var me = this; + + if (me.enabled) { + me.target.removeListener(me.eventName, me.handleTargetEvent, me); + me.enabled = false; + } + }, + + + setDisabled : function(disabled) { + if (disabled) { + this.disable(); + } else { + this.enable(); + } + }, + + + destroy: function(removeTarget) { + var me = this, + target = me.target; + + me.bindings = []; + me.disable(); + if (removeTarget === true) { + if (target.isComponent) { + target.destroy(); + } else { + target.remove(); + } + } + delete me.target; + } +}); + + +Ext.define('Ext.util.KeyNav', { + alternateClassName: 'Ext.KeyNav', + + + + statics: { + keyOptions: { + left: 37, + right: 39, + up: 38, + down: 40, + space: 32, + pageUp: 33, + pageDown: 34, + del: 46, + backspace: 8, + home: 36, + end: 35, + enter: 13, + esc: 27, + tab: 9 + } + }, + + constructor: function(config) { + var me = this; + if (arguments.length === 2) { + me.legacyConstructor.apply(me, arguments); + return; + } + me.setConfig(config); + }, + + + legacyConstructor: function(el, config) { + this.setConfig(Ext.apply({ + target: el + }, config)); + }, + + + setConfig: function(config) { + var me = this, + keymapCfg = { + target: config.target, + ignoreInputFields: config.ignoreInputFields, + eventName: me.getKeyEvent('forceKeyDown' in config ? config.forceKeyDown : me.forceKeyDown, config.eventName) + }, + map, keyCodes, defaultScope, keyName, binding; + + if (me.map) { + me.map.destroy(); + } + + if (config.processEvent) { + keymapCfg.processEvent = config.processEvent; + keymapCfg.processEventScope = config.processEventScope||me; + } + + + if (config.keyMap) { + map = me.map = config.keyMap; + } + + else { + map = me.map = new Ext.util.KeyMap(keymapCfg); + me.destroyKeyMap = true; + } + keyCodes = Ext.util.KeyNav.keyOptions; + defaultScope = config.scope || me; + + for (keyName in keyCodes) { + if (keyCodes.hasOwnProperty(keyName)) { + + + + if (binding = config[keyName]) { + if (typeof binding === 'function') { + binding = { + handler: binding, + defaultEventAction: (config.defaultEventAction !== undefined) ? config.defaultEventAction : me.defaultEventAction + }; + } + map.addBinding({ + key: keyCodes[keyName], + handler: Ext.Function.bind(me.handleEvent, binding.scope||defaultScope, binding.handler||binding.fn, true), + defaultEventAction: (binding.defaultEventAction !== undefined) ? binding.defaultEventAction : me.defaultEventAction + }); + } + } + } + + map.disable(); + if (!config.disabled) { + map.enable(); + } + }, + + + handleEvent: function(keyCode, event, handler){ + return handler.call(this, event); + }, + + + disabled: false, + + + defaultEventAction: "stopEvent", + + + forceKeyDown: false, + + + + + eventName: 'keypress', + + + + + + + + + + + destroy: function(removeEl) { + if (this.destroyKeyMap) { + this.map.destroy(removeEl); + } + delete this.map; + }, + + + enable: function() { + this.map.enable(); + this.disabled = false; + }, + + + disable: function() { + this.map.disable(); + this.disabled = true; + }, + + + setDisabled : function(disabled) { + this.map.setDisabled(disabled); + this.disabled = disabled; + }, + + + getKeyEvent: function(forceKeyDown, configuredEventName) { + if (forceKeyDown || (Ext.EventManager.useKeyDown && !configuredEventName)) { + return 'keydown'; + } else { + return configuredEventName||this.eventName; + } + } +}); + + +Ext.define('Ext.FocusManager', { + singleton: true, + alternateClassName: ['Ext.FocusMgr' ], + + mixins: { + observable: Ext.util.Observable + }, + + + + + + + + + + + + enabled: false, + + + + focusElementCls: Ext.baseCSSPrefix + 'focus-element', + + focusFrameCls: Ext.baseCSSPrefix + 'focus-frame', + + + whitelist: [ + 'textfield' + ], + + constructor: function(config) { + var me = this, + CQ = Ext.ComponentQuery; + + me.mixins.observable.constructor.call(me, config); + + me.addEvents( + + 'beforecomponentfocus', + + + 'componentfocus', + + + 'disable', + + + 'enable' + ); + + me.focusTask = new Ext.util.DelayedTask(me.handleComponentFocus, me); + + + Ext.override(Ext.AbstractComponent, { + onFocus: function() { + this.callParent(arguments); + if (me.enabled && this.hasFocus) { + Array.prototype.unshift.call(arguments, this); + me.onComponentFocus.apply(me, arguments); + } + }, + onBlur: function() { + this.callParent(arguments); + if (me.enabled && !this.hasFocus) { + Array.prototype.unshift.call(arguments, this); + me.onComponentBlur.apply(me, arguments); + } + }, + onDestroy: function() { + this.callParent(arguments); + if (me.enabled) { + Array.prototype.unshift.call(arguments, this); + me.onComponentDestroy.apply(me, arguments); + } + } + }); + Ext.override(Ext.Component, { + afterHide: function() { + this.callParent(arguments); + if (me.enabled) { + Array.prototype.unshift.call(arguments, this); + me.onComponentHide.apply(me, arguments); + } + } + }); + + + me.keyNav = new Ext.util.KeyNav(Ext.getDoc(), { + disabled: true, + scope: me, + + backspace: me.focusLast, + enter: me.navigateIn, + esc: me.navigateOut, + tab: me.navigateSiblings, + space: me.navigateIn, + del: me.focusLast, + left: me.navigateSiblings, + right: me.navigateSiblings, + down: me.navigateSiblings, + up: me.navigateSiblings + }); + + me.focusData = {}; + me.subscribers = new Ext.util.HashMap(); + me.focusChain = {}; + + + Ext.apply(CQ.pseudos, { + + nextFocus: function(cmps, idx, step) { + step = step || 1; + idx = parseInt(idx, 10); + + var len = cmps.length, + i = idx, c; + + for (;;) { + + if ((i += step) >= len) { + i = 0; + } else if (i < 0) { + i = len - 1; + } + + + if (i === idx) { + return []; + } + + + if ((c = cmps[i]).isFocusable()) { + return [c]; + } + } + + return []; + }, + + prevFocus: function(cmps, idx) { + return this.nextFocus(cmps, idx, -1); + }, + + root: function(cmps) { + var len = cmps.length, + results = [], + i = 0, + c; + + for (; i < len; i++) { + c = cmps[i]; + if (!c.ownerCt) { + results.push(c); + } + } + + return results; + } + }); + }, + + + addXTypeToWhitelist: function(xtype) { + var me = this; + + if (Ext.isArray(xtype)) { + Ext.Array.forEach(xtype, me.addXTypeToWhitelist, me); + return; + } + + if (!Ext.Array.contains(me.whitelist, xtype)) { + me.whitelist.push(xtype); + } + }, + + clearComponent: function(cmp) { + clearTimeout(this.cmpFocusDelay); + if (!cmp.isDestroyed) { + cmp.blur(); + } + }, + + + disable: function() { + var me = this; + + if (!me.enabled) { + return; + } + + delete me.options; + me.enabled = false; + + me.removeDOM(); + + + me.keyNav.disable(); + + me.fireEvent('disable', me); + }, + + + enable: function(options) { + var me = this; + + if (options === true) { + options = { focusFrame: true }; + } + me.options = options = options || {}; + + if (me.enabled) { + return; + } + + + me.enabled = true; + me.initDOM(options); + + + me.keyNav.enable(); + + + me.focusEl.focus(); + delete me.focusedCmp; + + me.fireEvent('enable', me); + }, + + focusLast: function(e) { + var me = this; + + if (me.isWhitelisted(me.focusedCmp)) { + return true; + } + + + if (me.previousFocusedCmp) { + me.previousFocusedCmp.focus(); + } + }, + + getRootComponents: function() { + var CQ = Ext.ComponentQuery, + inline = CQ.query(':focusable:root:not([floating])'), + floating = CQ.query(':focusable:root[floating]'); + + + + floating.sort(function(a, b) { + return a.el.getZIndex() > b.el.getZIndex(); + }); + + return floating.concat(inline); + }, + + initDOM: function(options) { + var me = this, + cls = me.focusFrameCls, + needListeners = Ext.ComponentQuery.query('{getFocusEl()}:not([focusListenerAdded])'), + i = 0, len = needListeners.length; + + if (!Ext.isReady) { + return Ext.onReady(me.initDOM, me); + } + + + + + for (; i < len; i++) { + needListeners[i].addFocusListener(); + } + + + if (!me.focusEl) { + me.focusEl = Ext.getBody(); + me.focusEl.dom.tabIndex = -1; + } + + + if (!me.focusFrame && options.focusFrame) { + me.focusFrame = Ext.getBody().createChild({ + cls: cls, + children: [ + { cls: cls + '-top' }, + { cls: cls + '-bottom' }, + { cls: cls + '-left' }, + { cls: cls + '-right' } + ], + style: 'top: -100px; left: -100px;' + }); + me.focusFrame.setVisibilityMode(Ext.Element.DISPLAY); + me.focusFrame.hide().setLocalXY(0, 0); + } + }, + + isWhitelisted: function(cmp) { + return cmp && Ext.Array.some(this.whitelist, function(x) { + return cmp.isXType(x); + }); + }, + + navigateIn: function(e) { + var me = this, + focusedCmp = me.focusedCmp, + defaultRoot, + firstChild; + + if (me.isWhitelisted(focusedCmp)) { + return true; + } + + if (!focusedCmp) { + + defaultRoot = me.getRootComponents()[0]; + if (defaultRoot) { + + + if (defaultRoot.getFocusEl() === me.focusEl) { + me.focusEl.blur(); + } + defaultRoot.focus(); + } + } else { + + + firstChild = focusedCmp.hasFocus ? Ext.ComponentQuery.query('>:focusable', focusedCmp)[0] : focusedCmp; + if (firstChild) { + firstChild.focus(); + } else { + + if (Ext.isFunction(focusedCmp.onClick)) { + e.button = 0; + focusedCmp.onClick(e); + if (focusedCmp.isVisible(true)) { + focusedCmp.focus(); + } else { + me.navigateOut(); + } + } + } + } + }, + + navigateOut: function(e) { + var me = this, + parent; + + if (!me.focusedCmp || !(parent = me.focusedCmp.up(':focusable'))) { + me.focusEl.focus(); + } else { + parent.focus(); + } + + + + + return true; + }, + + navigateSiblings: function(e, source, parent) { + var me = this, + src = source || me, + key = e.getKey(), + EO = Ext.EventObject, + goBack = e.shiftKey || key == EO.LEFT || key == EO.UP, + checkWhitelist = key == EO.LEFT || key == EO.RIGHT || key == EO.UP || key == EO.DOWN, + nextSelector = goBack ? 'prev' : 'next', + idx, next, focusedCmp, siblings; + + focusedCmp = (src.focusedCmp && src.focusedCmp.comp) || src.focusedCmp; + if (!focusedCmp && !parent) { + return true; + } + + if (checkWhitelist && me.isWhitelisted(focusedCmp)) { + return true; + } + + + if (!focusedCmp || focusedCmp.is(':root')) { + siblings = me.getRootComponents(); + } else { + + parent = parent || focusedCmp.up(); + if (parent) { + siblings = parent.getRefItems(); + } + } + + + + if (siblings) { + idx = focusedCmp ? Ext.Array.indexOf(siblings, focusedCmp) : -1; + next = Ext.ComponentQuery.query(':' + nextSelector + 'Focus(' + idx + ')', siblings)[0]; + if (next && focusedCmp !== next) { + next.focus(); + return next; + } + } + }, + + onComponentBlur: function(cmp, e) { + var me = this; + + if (me.focusedCmp === cmp) { + me.previousFocusedCmp = cmp; + delete me.focusedCmp; + } + + if (me.focusFrame) { + me.focusFrame.hide(); + } + }, + + onComponentFocus: function(cmp, e) { + var me = this, + chain = me.focusChain, + parent; + + if (!cmp.isFocusable()) { + me.clearComponent(cmp); + + + + + + if (chain[cmp.id]) { + return; + } + + + parent = cmp.up(); + if (parent) { + + + + chain[cmp.id] = true; + parent.focus(); + } + + return; + } + + me.focusChain = {}; + + + + + me.focusTask.delay(10, null, null, [cmp, cmp.getFocusEl()]); + }, + + handleComponentFocus: function(cmp, focusEl) { + var me = this, + cls, + ff, + box, + bt, + bl, + bw, + bh, + ft, + fb, + fl, + fr; + + if (me.fireEvent('beforecomponentfocus', me, cmp, me.previousFocusedCmp) === false) { + me.clearComponent(cmp); + return; + } + + me.focusedCmp = cmp; + + + if (me.shouldShowFocusFrame(cmp)) { + cls = '.' + me.focusFrameCls + '-'; + ff = me.focusFrame; + + + box = (focusEl.dom ? focusEl : focusEl.el).getBox(); + + + + + bt = box.top; + bl = box.left; + bw = box.width; + bh = box.height; + ft = ff.child(cls + 'top'); + fb = ff.child(cls + 'bottom'); + fl = ff.child(cls + 'left'); + fr = ff.child(cls + 'right'); + + ft.setWidth(bw).setLocalXY(bl, bt); + fb.setWidth(bw).setLocalXY(bl, bt + bh - 2); + fl.setHeight(bh - 2).setLocalXY(bl, bt + 2); + fr.setHeight(bh - 2).setLocalXY(bl + bw - 2, bt + 2); + + ff.show(); + } + + me.fireEvent('componentfocus', me, cmp, me.previousFocusedCmp); + }, + + onComponentHide: function(cmp) { + var me = this, + cmpHadFocus = false, + focusedCmp = me.focusedCmp, + parent; + + if (focusedCmp) { + + + cmpHadFocus = cmp.hasFocus || (cmp.isContainer && cmp.isAncestor(me.focusedCmp)); + } + + me.clearComponent(cmp); + + + if (cmpHadFocus && (parent = cmp.up(':focusable'))) { + parent.focus(); + } else { + me.focusEl.focus(); + } + }, + + onComponentDestroy: function() { + + }, + + removeDOM: function() { + var me = this; + + + + if (me.enabled || me.subscribers.length) { + return; + } + + Ext.destroy( + me.focusFrame + ); + delete me.focusEl; + delete me.focusFrame; + }, + + + removeXTypeFromWhitelist: function(xtype) { + var me = this; + + if (Ext.isArray(xtype)) { + Ext.Array.forEach(xtype, me.removeXTypeFromWhitelist, me); + return; + } + + Ext.Array.remove(me.whitelist, xtype); + }, + + setupSubscriberKeys: function(container, keys) { + var me = this, + el = container.getFocusEl(), + scope = keys.scope, + handlers = { + backspace: me.focusLast, + enter: me.navigateIn, + esc: me.navigateOut, + scope: me + }, + + navSiblings = function(e) { + if (me.focusedCmp === container) { + + + + return me.navigateSiblings(e, me, container); + } else { + return me.navigateSiblings(e); + } + }; + + Ext.iterate(keys, function(key, cb) { + handlers[key] = function(e) { + var ret = navSiblings(e); + + if (Ext.isFunction(cb) && cb.call(scope || container, e, ret) === true) { + return true; + } + + return ret; + }; + }, me); + + return new Ext.util.KeyNav(el, handlers); + }, + + shouldShowFocusFrame: function(cmp) { + var me = this, + opts = me.options || {}; + + + + + if (!me.focusFrame || !cmp) { + return false; + } + + + if (opts.focusFrame) { + return true; + } + + if (me.focusData[cmp.id].focusFrame) { + return true; + } + + return false; + } +}); + + +Ext.define('Ext.Img', { + extend: Ext.Component , + alias: ['widget.image', 'widget.imagecomponent'], + + autoEl: 'img', + + baseCls: Ext.baseCSSPrefix + 'img', + + + src: '', + + + alt: '', + + + title: '', + + + imgCls: '', + + + + initComponent: function() { + if (this.glyph) { + this.autoEl = 'div'; + } + this.callParent(); + }, + + getElConfig: function() { + var me = this, + config = me.callParent(), + glyphFontFamily = Ext._glyphFontFamily, + glyph = me.glyph, + img, glyphParts; + + + + if (me.autoEl == 'img') { + img = config; + } else if (me.glyph) { + if (typeof glyph === 'string') { + glyphParts = glyph.split('@'); + glyph = glyphParts[0]; + glyphFontFamily = glyphParts[1]; + } + config.html = '&#' + glyph + ';'; + if (glyphFontFamily) { + config.style = 'font-family:' + glyphFontFamily; + } + } else { + config.cn = [img = { + tag: 'img', + id: me.id + '-img' + }]; + } + + if (img) { + if (me.imgCls) { + img.cls = (img.cls ? img.cls + ' ' : '') + me.imgCls; + } + + img.src = me.src || Ext.BLANK_IMAGE_URL; + } + + if (me.alt) { + (img || config).alt = me.alt; + } + if (me.title) { + (img || config).title = me.title; + } + + return config; + }, + + onRender: function () { + var me = this, + el; + + me.callParent(arguments); + + el = me.el; + me.imgEl = (me.autoEl == 'img') ? el : el.getById(me.id + '-img'); + }, + + onDestroy: function () { + Ext.destroy(this.imgEl); + this.imgEl = null; + this.callParent(); + }, + + + setSrc: function(src) { + var me = this, + imgEl = me.imgEl; + + me.src = src; + + if (imgEl) { + imgEl.dom.src = src || Ext.BLANK_IMAGE_URL; + } + }, + + setGlyph: function(glyph) { + var me = this, + glyphFontFamily = Ext._glyphFontFamily, + glyphParts, dom; + + if (glyph != me.glyph) { + if (typeof glyph === 'string') { + glyphParts = glyph.split('@'); + glyph = glyphParts[0]; + glyphFontFamily = glyphParts[1]; + } + + dom = me.el.dom; + + dom.innerHTML = '&#' + glyph + ';'; + if (glyphFontFamily) { + dom.style = 'font-family:' + glyphFontFamily; + } + } + } +}); + + +Ext.define('Ext.util.Bindable', { + + + bindStore: function(store, initial, propertyName) { + + + + propertyName = propertyName || 'store'; + + var me = this, + oldStore = me[propertyName]; + + if (!initial && oldStore) { + + me.onUnbindStore(oldStore, initial, propertyName); + + if (store !== oldStore && oldStore.autoDestroy) { + oldStore.destroyStore(); + } else { + me.unbindStoreListeners(oldStore); + } + } + if (store) { + store = Ext.data.StoreManager.lookup(store); + me.bindStoreListeners(store); + me.onBindStore(store, initial, propertyName); + } + me[propertyName] = store || null; + return me; + }, + + + getStore: function(){ + return this.store; + }, + + + unbindStoreListeners: function(store) { + + var listeners = this.storeListeners; + if (listeners) { + store.un(listeners); + } + }, + + + bindStoreListeners: function(store) { + + var me = this, + listeners = Ext.apply({}, me.getStoreListeners(store)); + + if (!listeners.scope) { + listeners.scope = me; + } + me.storeListeners = listeners; + store.on(listeners); + }, + + + getStoreListeners: Ext.emptyFn, + + + onUnbindStore: Ext.emptyFn, + + + onBindStore: Ext.emptyFn +}); + + +Ext.define('Ext.LoadMask', { + + extend: Ext.Component , + + alias: 'widget.loadmask', + + + + mixins: { + floating: Ext.util.Floating , + bindable: Ext.util.Bindable + }, + + + + + + + + + + + + msg : 'Loading...', + + + + msgCls : Ext.baseCSSPrefix + 'mask-loading', + + + maskCls: Ext.baseCSSPrefix + 'mask', + + + useMsg: true, + + + useTargetEl: false, + + baseCls: Ext.baseCSSPrefix + 'mask-msg', + + childEls: [ + 'msgEl', + 'msgTextEl' + ], + + renderTpl: [ + '
    ', + '
    ', + '
    ' + ], + + + floating: { + shadow: 'frame' + }, + + + focusOnToFront: false, + + + + bringParentToFront: false, + + + constructor : function(config) { + var me = this, + comp; + + if (arguments.length === 2) { + comp = config; + config = arguments[1]; + } else { + comp = config.target; + } + + + if (!comp.isComponent) { + comp = Ext.get(comp); + this.isElement = true; + } + + me.ownerCt = comp; + if (!this.isElement) { + me.bindComponent(comp); + } + me.callParent([config]); + + if (me.store) { + me.bindStore(me.store, true); + } + }, + + bindComponent: function(comp) { + var me = this, + listeners = { + scope: this, + resize: me.sizeMask, + added: me.onComponentAdded, + removed: me.onComponentRemoved + }; + + if (comp.floating) { + listeners.move = me.sizeMask; + me.activeOwner = comp; + } else if (comp.ownerCt) { + me.onComponentAdded(comp.ownerCt); + } else { + + me.preventBringToFront = true; + } + + me.mon(comp, listeners); + + + me.mon(me.hierarchyEventSource, { + show: me.onContainerShow, + hide: me.onContainerHide, + expand: me.onContainerExpand, + collapse: me.onContainerCollapse, + scope: me + }); + }, + + onComponentAdded: function(owner) { + var me = this; + delete me.activeOwner; + me.floatParent = owner; + if (!owner.floating) { + owner = owner.up('[floating]'); + } + if (owner) { + me.activeOwner = owner; + me.mon(owner, 'move', me.sizeMask, me); + } else { + me.preventBringToFront = true; + } + owner = me.floatParent.ownerCt; + if (me.rendered && me.isVisible() && owner) { + me.floatOwner = owner; + me.mon(owner, 'afterlayout', me.sizeMask, me, {single: true}); + } + }, + + onComponentRemoved: function(owner) { + var me = this, + activeOwner = me.activeOwner, + floatOwner = me.floatOwner; + + if (activeOwner) { + me.mun(activeOwner, 'move', me.sizeMask, me); + } + if (floatOwner) { + me.mun(floatOwner, 'afterlayout', me.sizeMask, me); + } + delete me.activeOwner; + delete me.floatOwner; + }, + + afterRender: function() { + this.callParent(arguments); + this.container = this.floatParent.getContentTarget(); + }, + + onContainerShow: function(container) { + if (this.isActiveContainer(container)) { + this.onComponentShow(); + } + }, + + onContainerHide: function(container) { + if (this.isActiveContainer(container)) { + this.onComponentHide(); + } + }, + + onContainerExpand: function(container) { + if (this.isActiveContainer(container)) { + this.onComponentShow(); + } + }, + + onContainerCollapse: function(container) { + if (this.isActiveContainer(container)) { + this.onComponentHide(); + } + }, + + isActiveContainer: function(container) { + return this.isDescendantOf(container); + }, + + onComponentHide: function() { + var me = this; + + if (me.rendered && me.isVisible()) { + me.hide(); + me.showNext = true; + } + }, + + onComponentShow: function() { + if (this.showNext) { + this.show(); + } + delete this.showNext; + }, + + + sizeMask: function() { + var me = this, + target; + + if (me.rendered && me.isVisible()) { + me.center(); + + target = me.getMaskTarget(); + me.getMaskEl().show().setSize(target.getSize()).alignTo(target, 'tl-tl'); + + } + }, + + + bindStore : function(store, initial) { + var me = this; + me.mixins.bindable.bindStore.apply(me, arguments); + store = me.store; + if (store && store.isLoading()) { + me.onBeforeLoad(); + } + }, + + getStoreListeners: function(store) { + var load = this.onLoad, + beforeLoad = this.onBeforeLoad, + result = { + + cachemiss: beforeLoad, + + + cachefilled: load + }; + + + if (!store.proxy.isSynchronous) { + result.beforeLoad = beforeLoad; + result.load = load; + result.prefetch = load; + } + return result; + }, + + onDisable : function() { + this.callParent(arguments); + if (this.loading) { + this.onLoad(); + } + }, + + getOwner: function() { + return this.ownerCt || this.floatParent; + }, + + getMaskTarget: function() { + var owner = this.getOwner(); + return this.useTargetEl ? owner.getTargetEl() : owner.getEl(); + }, + + + onBeforeLoad : function() { + var me = this, + owner = me.getOwner(), + origin; + + if (!me.disabled) { + me.loading = true; + + + if (owner.componentLayoutCounter) { + me.maybeShow(); + } else { + + origin = owner.afterComponentLayout; + owner.afterComponentLayout = function() { + owner.afterComponentLayout = origin; + origin.apply(owner, arguments); + me.maybeShow(); + }; + } + } + }, + + maybeShow: function() { + var me = this, + owner = me.getOwner(); + + if (!owner.isVisible(true)) { + me.showNext = true; + } + else if (me.loading && owner.rendered) { + me.show(); + } + }, + + getMaskEl: function(){ + var me = this; + return me.maskEl || (me.maskEl = me.el.insertSibling({ + cls: me.maskCls, + style: { + zIndex: me.el.getStyle('zIndex') - 2 + } + }, 'before')); + }, + + onShow: function() { + var me = this, + msgEl = me.msgEl; + + me.callParent(arguments); + me.loading = true; + + if (me.useMsg) { + msgEl.show(); + me.msgTextEl.update(me.msg); + } else { + msgEl.parent().hide(); + } + }, + + hide: function() { + + if (this.isElement) { + this.ownerCt.unmask(); + this.fireEvent('hide', this); + return; + } + delete this.showNext; + return this.callParent(arguments); + }, + + onHide: function() { + this.callParent(); + this.getMaskEl().hide(); + }, + + show: function() { + + if (this.isElement) { + this.ownerCt.mask(this.useMsg ? this.msg : '', this.msgCls); + this.fireEvent('show', this); + return; + } + return this.callParent(arguments); + }, + + afterShow: function() { + this.callParent(arguments); + this.sizeMask(); + }, + + setZIndex: function(index) { + var me = this, + owner = me.activeOwner; + + if (owner) { + + + + index = parseInt(owner.el.getStyle('zIndex'), 10) + 1; + } + + me.getMaskEl().setStyle('zIndex', index - 1); + return me.mixins.floating.setZIndex.apply(me, arguments); + }, + + + onLoad : function() { + this.loading = false; + this.hide(); + }, + + onDestroy: function() { + var me = this; + + if (me.isElement) { + me.ownerCt.unmask(); + } + + Ext.destroy(me.maskEl); + me.callParent(); + } +}); + + +Ext.define('Ext.data.association.Association', { + alternateClassName: 'Ext.data.Association', + + + + + + + + primaryKey: 'id', + + + + + + associationKeyFunction : null, + + defaultReaderType: 'json', + + isAssociation: true, + + initialConfig: null, + + statics: { + AUTO_ID: 1000, + + create: function(association){ + if (Ext.isString(association)) { + association = { + type: association + }; + } + + switch (association.type) { + case 'belongsTo': + return new Ext.data.association.BelongsTo(association); + case 'hasMany': + return new Ext.data.association.HasMany(association); + case 'hasOne': + return new Ext.data.association.HasOne(association); + + + + default: + } + return association; + } + }, + + + constructor: function(config) { + Ext.apply(this, config); + + var me = this, + types = Ext.ModelManager.types, + ownerName = config.ownerModel, + associatedName = config.associatedModel, + ownerModel = types[ownerName], + associatedModel = types[associatedName], + associationKey = config.associationKey, + keyReIdx; + + if (associationKey) { + keyReIdx = String(associationKey).search(/[\[\.]/); + + if (keyReIdx >= 0) { + me.associationKeyFunction = Ext.functionFactory('obj', 'return obj' + (keyReIdx > 0 ? '.' : '') + associationKey); + } + } + + me.initialConfig = config; + + + me.ownerModel = ownerModel; + me.associatedModel = associatedModel; + + + + + + Ext.applyIf(me, { + ownerName : ownerName, + associatedName: associatedName + }); + + me.associationId = 'association' + (++me.statics().AUTO_ID); + }, + + + getReader: function(){ + var me = this, + reader = me.reader, + model = me.associatedModel; + + if (reader) { + if (Ext.isString(reader)) { + reader = { + type: reader + }; + } + if (reader.isReader) { + reader.setModel(model); + } else { + Ext.applyIf(reader, { + model: model, + type : me.defaultReaderType + }); + } + me.reader = Ext.createByAlias('reader.' + reader.type, reader); + } + return me.reader || null; + } +}); + + +Ext.define('Ext.ModelManager', { + extend: Ext.AbstractManager , + alternateClassName: 'Ext.ModelMgr', + + + singleton: true, + + typeName: 'mtype', + + + associationStack: [], + + + registerType: function(name, config) { + var proto = config.prototype, + model; + if (proto && proto.isModel) { + + model = config; + } else { + + if (!config.extend) { + config.extend = 'Ext.data.Model'; + } + model = Ext.define(name, config); + } + this.types[name] = model; + return model; + }, + + + onModelDefined: function(model) { + var stack = this.associationStack, + length = stack.length, + create = [], + association, i, created; + + for (i = 0; i < length; i++) { + association = stack[i]; + + if (association.associatedModel == model.modelName) { + create.push(association); + } + } + + for (i = 0, length = create.length; i < length; i++) { + created = create[i]; + this.types[created.ownerModel].prototype.associations.add(Ext.data.association.Association.create(created)); + Ext.Array.remove(stack, created); + } + }, + + + registerDeferredAssociation: function(association){ + this.associationStack.push(association); + }, + + + getModel: function(id) { + var model = id; + if (typeof model == 'string') { + model = this.types[model]; + } + return model; + }, + + + create: function(config, name, id) { + var Con = typeof name == 'function' ? name : this.types[name || config.name]; + + return new Con(config, id); + } +}, function() { + + + Ext.regModel = function() { + return this.ModelManager.registerType.apply(this.ModelManager, arguments); + }; +}); + + +Ext.define('Ext.layout.component.ProgressBar', { + + + + alias: ['layout.progressbar'], + + extend: Ext.layout.component.Auto , + + + + type: 'progressbar', + + beginLayout: function (ownerContext) { + var me = this, + i, textEls; + + me.callParent(arguments); + + if (!ownerContext.textEls) { + textEls = me.owner.textEl; + + if (textEls.isComposite) { + ownerContext.textEls = []; + textEls = textEls.elements; + for (i = textEls.length; i--; ) { + ownerContext.textEls[i] = ownerContext.getEl(Ext.get(textEls[i])); + } + } else { + ownerContext.textEls = [ ownerContext.getEl('textEl') ]; + } + } + }, + + calculate: function(ownerContext) { + var me = this, + i, textEls, width; + + me.callParent(arguments); + + if (Ext.isNumber(width = ownerContext.getProp('width'))) { + width -= ownerContext.getBorderInfo().width; + textEls = ownerContext.textEls; + + for (i = textEls.length; i--; ) { + textEls[i].setWidth(width); + } + } else { + me.done = false; + } + } +}); + + +Ext.define('Ext.ProgressBar', { + extend: Ext.Component , + alias: 'widget.progressbar', + + + + + + + + + + + + + + + + + + baseCls: Ext.baseCSSPrefix + 'progress', + + + animate: false, + + + text: '', + + + waitTimer: null, + + childEls: [ + 'bar' + ], + + renderTpl: [ + '', + '
    {text}
    ', + '
    ', + '
    ', + '', + '
    ', + '
    {text}
    ', + '
    ', + '
    ', + '
    ' + ], + + componentLayout: 'progressbar', + + + initComponent: function() { + this.callParent(); + + this.addEvents( + + "update" + ); + }, + + initRenderData: function() { + var me = this; + return Ext.apply(me.callParent(), { + internalText : !me.hasOwnProperty('textEl'), + text : me.text || ' ', + percentage : me.value ? me.value * 100 : 0 + }); + }, + + onRender : function() { + var me = this; + + me.callParent(arguments); + + + if (me.textEl) { + me.textEl = Ext.get(me.textEl); + me.updateText(me.text); + } + + else { + + + me.textEl = me.el.select('.' + me.baseCls + '-text'); + } + }, + + + updateProgress: function(value, text, animate) { + var me = this, + oldValue = me.value; + + me.value = value || 0; + if (text) { + me.updateText(text); + } + if (me.rendered && !me.isDestroyed) { + if (animate === true || (animate !== false && me.animate)) { + me.bar.stopAnimation(); + me.bar.animate(Ext.apply({ + from: { + width: (oldValue * 100) + '%' + }, + to: { + width: (me.value * 100) + '%' + } + }, me.animate)); + } else { + me.bar.setStyle('width', (me.value * 100) + '%'); + } + } + me.fireEvent('update', me, me.value, text); + return me; + }, + + + updateText: function(text) { + var me = this; + + me.text = text; + if (me.rendered) { + me.textEl.update(me.text); + } + return me; + }, + + applyText : function(text) { + this.updateText(text); + }, + + getText: function(){ + return this.text; + }, + + + wait: function(o) { + var me = this, scope; + + if (!me.waitTimer) { + scope = me; + o = o || {}; + me.updateText(o.text); + me.waitTimer = Ext.TaskManager.start({ + run: function(i){ + var inc = o.increment || 10; + i -= 1; + me.updateProgress(((((i+inc)%inc)+1)*(100/inc))*0.01, null, o.animate); + }, + interval: o.interval || 1000, + duration: o.duration, + onStop: function(){ + if (o.fn) { + o.fn.apply(o.scope || me); + } + me.reset(); + }, + scope: scope + }); + } + return me; + }, + + + isWaiting: function(){ + return this.waitTimer !== null; + }, + + + reset: function(hide){ + var me = this; + + me.updateProgress(0); + me.clearTimer(); + if (hide === true) { + me.hide(); + } + return me; + }, + + + clearTimer: function(){ + var me = this; + + if (me.waitTimer) { + me.waitTimer.onStop = null; + Ext.TaskManager.stop(me.waitTimer); + me.waitTimer = null; + } + }, + + onDestroy: function(){ + var me = this, + bar = me.bar; + + me.clearTimer(); + if (me.rendered) { + if (me.textEl.isComposite) { + me.textEl.clear(); + } + Ext.destroyMembers(me, 'textEl', 'progressBar'); + if (bar && me.animate) { + bar.stopAnimation(); + } + } + me.callParent(); + } +}); + + +Ext.define('Ext.ShadowPool', { + singleton: true, + + + markup: (function() { + return Ext.String.format( + '', + Ext.baseCSSPrefix, + Ext.isIE && !Ext.supports.CSS3BoxShadow ? 'ie' : 'css' + ); + }()), + + shadows: [], + + pull: function() { + var sh = this.shadows.shift(); + if (!sh) { + sh = Ext.get(Ext.DomHelper.insertHtml("beforeBegin", document.body.firstChild, this.markup)); + sh.autoBoxAdjust = false; + } + return sh; + }, + + push: function(sh) { + this.shadows.push(sh); + }, + + reset: function() { + var shadows = [].concat(this.shadows), + s, + sLen = shadows.length; + + for (s = 0; s < sLen; s++) { + shadows[s].remove(); + } + + this.shadows = []; + } +}); + + +Ext.define('Ext.Shadow', { + + + localXYNames: { + get: 'getLocalXY', + set: 'setLocalXY' + }, + + + constructor: function(config) { + var me = this, + adjusts, + offset, + rad; + + Ext.apply(me, config); + if (!Ext.isString(me.mode)) { + me.mode = me.defaultMode; + } + offset = me.offset; + rad = Math.floor(offset / 2); + me.opacity = 50; + switch (me.mode.toLowerCase()) { + + case "drop": + if (Ext.supports.CSS3BoxShadow) { + adjusts = { + t: offset, + l: offset, + h: -offset, + w: -offset + }; + } + else { + adjusts = { + t: -rad, + l: -rad, + h: -rad, + w: -rad + }; + } + break; + case "sides": + if (Ext.supports.CSS3BoxShadow) { + adjusts = { + t: offset, + l: 0, + h: -offset, + w: 0 + }; + } + else { + adjusts = { + t: - (1 + rad), + l: 1 + rad - 2 * offset, + h: -1, + w: rad - 1 + }; + } + break; + case "frame": + if (Ext.supports.CSS3BoxShadow) { + adjusts = { + t: 0, + l: 0, + h: 0, + w: 0 + }; + } + else { + adjusts = { + t: 1 + rad - 2 * offset, + l: 1 + rad - 2 * offset, + h: offset - rad - 1, + w: offset - rad - 1 + }; + } + break; + case "bottom": + if (Ext.supports.CSS3BoxShadow) { + adjusts = { + t: offset, + l: 0, + h: -offset, + w: 0 + }; + } + else { + adjusts = { + t: offset, + l: 0, + h: 0, + w: 0 + }; + } + break; + } + me.adjusts = adjusts; + }, + + + getShadowSize: function() { + var me = this, + offset = me.el ? me.offset : 0, + result = [offset, offset, offset, offset], + mode = me.mode.toLowerCase(); + + + if (me.el && mode !== 'frame') { + result[0] = 0; + if (mode == 'drop') { + result[3] = 0; + } + } + return result; + }, + + + + + offset: 4, + + + defaultMode: "drop", + + + boxShadowProperty: (function() { + var property = 'boxShadow', + style = document.documentElement.style; + + if (!('boxShadow' in style)) { + if ('WebkitBoxShadow' in style) { + + property = 'WebkitBoxShadow'; + } + else if ('MozBoxShadow' in style) { + + property = 'MozBoxShadow'; + } + } + + return property; + }()), + + + show: function(target) { + var me = this, + index, xy; + + target = Ext.get(target); + + + index = (parseInt(target.getStyle("z-index"), 10) - 1) || 0; + xy = target[me.localXYNames.get](); + + + if (!me.el) { + me.el = Ext.ShadowPool.pull(); + + if (me.fixed) { + me.el.dom.style.position = 'fixed'; + } else { + me.el.dom.style.position = ''; + } + if (me.el.dom.nextSibling != target.dom) { + me.el.insertBefore(target); + } + } + me.el.setStyle("z-index", me.zIndex || index); + if (Ext.isIE && !Ext.supports.CSS3BoxShadow) { + me.el.dom.style.filter = "progid:DXImageTransform.Microsoft.alpha(opacity=" + me.opacity + ") progid:DXImageTransform.Microsoft.Blur(pixelradius=" + (me.offset) + ")"; + } + me.realign( + xy[0], + xy[1], + target.dom.offsetWidth, + target.dom.offsetHeight + ); + me.el.dom.style.display = "block"; + }, + + + isVisible: function() { + return this.el ? true: false; + }, + + + realign: function(l, t, targetWidth, targetHeight) { + if (!this.el) { + return; + } + var adjusts = this.adjusts, + el = this.el, + targetStyle = el.dom.style, + shadowWidth, + shadowHeight, + sws, + shs; + + el[this.localXYNames.set](l + adjusts.l, t + adjusts.t); + shadowWidth = Math.max(targetWidth + adjusts.w, 0); + shadowHeight = Math.max(targetHeight + adjusts.h, 0); + sws = shadowWidth + "px"; + shs = shadowHeight + "px"; + if (targetStyle.width != sws || targetStyle.height != shs) { + targetStyle.width = sws; + targetStyle.height = shs; + + if (Ext.supports.CSS3BoxShadow) { + targetStyle[this.boxShadowProperty] = '0 0 ' + (this.offset + 2) + 'px #888'; + } + } + }, + + + hide: function() { + var me = this; + + if (me.el) { + me.el.dom.style.display = "none"; + Ext.ShadowPool.push(me.el); + delete me.el; + } + }, + + + setZIndex: function(z) { + this.zIndex = z; + if (this.el) { + this.el.setStyle("z-index", z); + } + }, + + + setOpacity: function(opacity){ + if (this.el) { + if (Ext.isIE && !Ext.supports.CSS3BoxShadow) { + opacity = Math.floor(opacity * 100 / 2) / 100; + } + this.opacity = opacity; + this.el.setOpacity(opacity); + } + } +}); + + + +Ext.define('Ext.app.EventDomain', { + + + + + statics: { + + instances: {} + }, + + + + isEventDomain: true, + + constructor: function() { + var me = this; + + Ext.app.EventDomain.instances[me.type] = me; + + me.bus = {}; + me.monitoredClasses = []; + }, + + + dispatch: function(target, ev, args) { + var me = this, + bus = me.bus, + selectors = bus[ev], + selector, controllers, id, events, event, i, ln; + + if (!selectors) { + return true; + } + + + for (selector in selectors) { + + if (selectors.hasOwnProperty(selector) && me.match(target, selector)) { + + controllers = selectors[selector]; + + for (id in controllers) { + if (controllers.hasOwnProperty(id)) { + + events = controllers[id]; + + for (i = 0, ln = events.length; i < ln; i++) { + event = events[i]; + + + if (event.fire.apply(event, args) === false) { + return false; + } + } + } + } + } + } + + return true; + }, + + + listen: function(selectors, controller) { + var me = this, + bus = me.bus, + idProperty = me.idProperty, + monitoredClasses = me.monitoredClasses, + monitoredClassesCount = monitoredClasses.length, + i, tree, list, selector, options, listener, scope, event, listeners, ev; + + for (selector in selectors) { + if (selectors.hasOwnProperty(selector) && (listeners = selectors[selector])) { + if (idProperty) { + + selector = selector === '*' ? selector : selector.substring(1); + } + + for (ev in listeners) { + if (listeners.hasOwnProperty(ev)) { + options = null; + listener = listeners[ev]; + scope = controller; + event = new Ext.util.Event(controller, ev); + + + if (Ext.isObject(listener)) { + options = listener; + listener = options.fn; + scope = options.scope || controller; + + delete options.fn; + delete options.scope; + } + + if (typeof listener === 'string') { + listener = scope[listener]; + } + event.addListener(listener, scope, options); + + for (i = monitoredClassesCount; i-- > 0;) { + monitoredClasses[i].hasListeners._incr_(ev); + } + + + tree = bus[ev] || (bus[ev] = {}); + tree = tree[selector] || (tree[selector] = {}); + list = tree[controller.id] || (tree[controller.id] = []); + + + list.push(event); + } + } + } + } + }, + + + match: function(target, selector) { + var idProperty = this.idProperty; + + if (idProperty) { + return selector === '*' || target[idProperty] === selector; + } + + return false; + }, + + + monitor: function(observable) { + var domain = this, + prototype = observable.isInstance ? observable : observable.prototype, + fireEventArgs = prototype.fireEventArgs; + + domain.monitoredClasses.push(observable); + + prototype.fireEventArgs = function(ev, args) { + var ret = fireEventArgs.apply(this, arguments); + + if (ret !== false) { + ret = domain.dispatch(this, ev, args); + } + + return ret; + }; + }, + + + unlisten: function(controllerId) { + var bus = this.bus, + controllers, ev, selector, selectors; + + for (ev in bus) { + if (bus.hasOwnProperty(ev) && (selectors = bus[ev])) { + for (selector in selectors) { + controllers = selectors[selector]; + delete controllers[controllerId]; + } + } + } + } +}); + + +Ext.define('Ext.app.domain.Component', { + extend: Ext.app.EventDomain , + singleton: true, + + + + + + type: 'component', + + constructor: function() { + var me = this; + + me.callParent(); + me.monitor(Ext.Component); + }, + + match: function(target, selector) { + return target.is(selector); + } +}); + + +Ext.define('Ext.app.EventBus', { + singleton: true, + + + + + + constructor: function() { + var me = this, + domains = Ext.app.EventDomain.instances; + + me.callParent(); + + me.domains = domains; + me.bus = domains.component.bus; + }, + + + control: function(selectors, controller) { + return this.domains.component.listen(selectors, controller); + }, + + + listen: function(to, controller) { + var domains = this.domains, + domain; + + for (domain in to) { + if (to.hasOwnProperty(domain)) { + domains[domain].listen(to[domain], controller); + } + } + }, + + + unlisten: function(controllerId) { + var domains = Ext.app.EventDomain.instances, + domain; + + for (domain in domains) { + domains[domain].unlisten(controllerId); + } + } +}); + + +Ext.define('Ext.data.StoreManager', { + extend: Ext.util.MixedCollection , + alternateClassName: ['Ext.StoreMgr', 'Ext.data.StoreMgr', 'Ext.StoreManager'], + singleton: true, + + + + + + register : function() { + for (var i = 0, s; (s = arguments[i]); i++) { + this.add(s); + } + }, + + + unregister : function() { + for (var i = 0, s; (s = arguments[i]); i++) { + this.remove(this.lookup(s)); + } + }, + + + lookup : function(store) { + + if (Ext.isArray(store)) { + var fields = ['field1'], + expand = !Ext.isArray(store[0]), + data = store, + i, + len; + + if(expand){ + data = []; + for (i = 0, len = store.length; i < len; ++i) { + data.push([store[i]]); + } + } else { + for(i = 2, len = store[0].length; i <= len; ++i){ + fields.push('field' + i); + } + } + return new Ext.data.ArrayStore({ + data : data, + fields: fields, + autoDestroy: true, + autoCreated: true, + expanded: expand + }); + } + + if (Ext.isString(store)) { + + return this.get(store); + } else { + + return Ext.data.AbstractStore.create(store); + } + }, + + + getKey : function(o) { + return o.storeId; + } +}, function() { + + Ext.regStore = function(name, config) { + var store; + + if (Ext.isObject(name)) { + config = name; + } else { + config.storeId = name; + } + + if (config instanceof Ext.data.Store) { + store = config; + } else { + store = new Ext.data.Store(config); + } + + return Ext.data.StoreManager.register(store); + }; + + + Ext.getStore = function(name) { + return Ext.data.StoreManager.lookup(name); + }; +}); + + +Ext.define('Ext.app.domain.Global', { + extend: Ext.app.EventDomain , + singleton: true, + + type: 'global', + + constructor: function() { + var me = this; + + me.callParent(); + me.monitor(Ext.globalEvents); + }, + + + listen: function(listeners, controller) { + + + this.callParent([{ global: listeners }, controller]); + }, + + match: function() { + return true; + } +}); + + +Ext.define('Ext.data.ResultSet', { + + loaded: true, + + + count: 0, + + + total: 0, + + + success: false, + + + + + constructor: function(config) { + Ext.apply(this, config); + + + this.totalRecords = this.total; + + if (config.count === undefined) { + this.count = this.records.length; + } + } +}); + + +Ext.define('Ext.data.reader.Reader', { + + alternateClassName: ['Ext.data.Reader', 'Ext.data.DataReader'], + + mixins: { + observable: Ext.util.Observable + }, + + + + + totalProperty: 'total', + + + successProperty: 'success', + + + root: '', + + + + + implicitIncludes: true, + + + readRecordsOnFailure: true, + + + + + isReader: true, + + + + + applyDefaults: true, + + lastFieldGeneration: null, + + + constructor: function(config) { + var me = this; + + me.mixins.observable.constructor.call(me, config); + me.fieldCount = 0; + me.model = Ext.ModelManager.getModel(me.model); + me.accessExpressionFn = Ext.Function.bind(me.createFieldAccessExpression, me); + + + + + + + if (me.model && me.model.prototype.fields) { + me.buildExtractors(); + } + + this.addEvents( + + 'exception' + ); + }, + + + setModel: function(model, setOnProxy) { + var me = this; + + me.model = Ext.ModelManager.getModel(model); + if (model) { + me.buildExtractors(true); + } + + if (setOnProxy && me.proxy) { + me.proxy.setModel(me.model, true); + } + }, + + + read: function(response) { + var data; + + if (response) { + data = response.responseText ? this.getResponseData(response) : this.readRecords(response); + } + + return data || this.nullResultSet; + }, + + + readRecords: function(data) { + var me = this, + success, + recordCount, + records, + root, + total, + value, + message; + + + if (me.lastFieldGeneration !== me.model.prototype.fields.generation) { + me.buildExtractors(true); + } + + + me.rawData = data; + + data = me.getData(data); + + success = true; + recordCount = 0; + records = []; + + if (me.successProperty) { + value = me.getSuccess(data); + if (value === false || value === 'false') { + success = false; + } + } + + if (me.messageProperty) { + message = me.getMessage(data); + } + + + + if (me.readRecordsOnFailure || success) { + + + root = Ext.isArray(data) ? data : me.getRoot(data); + + if (root) { + total = root.length; + } + + if (me.totalProperty) { + value = parseInt(me.getTotal(data), 10); + if (!isNaN(value)) { + total = value; + } + } + + if (root) { + records = me.extractData(root); + recordCount = records.length; + } + } + + return new Ext.data.ResultSet({ + total : total || recordCount, + count : recordCount, + records: records, + success: success, + message: message + }); + }, + + + extractData : function(root) { + var me = this, + Model = me.model, + length = root.length, + records = new Array(length), + convertedValues, node, record, i; + + if (!root.length && Ext.isObject(root)) { + root = [root]; + length = 1; + } + + for (i = 0; i < length; i++) { + node = root[i]; + if (node.isModel) { + + + records[i] = node; + } else { + + + + records[i] = record = new Model(undefined, me.getId(node), node, convertedValues = {}); + + + + record.phantom = false; + + + me.convertRecordData(convertedValues, node, record); + + if (me.implicitIncludes && record.associations.length) { + me.readAssociated(record, node); + } + } + } + + return records; + }, + + + readAssociated: function(record, data) { + var associations = record.associations.items, + i = 0, + length = associations.length, + association, associationData, proxy, reader; + + for (; i < length; i++) { + association = associations[i]; + associationData = this.getAssociatedDataRoot(data, association.associationKeyFunction || association.associationKey || association.name); + + if (associationData) { + reader = association.getReader(); + if (!reader) { + proxy = association.associatedModel.getProxy(); + + if (proxy) { + reader = proxy.getReader(); + } else { + reader = new this.constructor({ + model: association.associatedName + }); + } + } + association.read(record, reader, associationData); + } + } + }, + + + getAssociatedDataRoot: function(data, associationName) { + if (Ext.isFunction(associationName)) { + return associationName(data); + } + + return data[associationName]; + }, + + getFields: function() { + return this.model.prototype.fields.items; + }, + + + getData: Ext.identityFn, + + + getRoot: Ext.identityFn, + + + getResponseData: function(response) { + }, + + + onMetaChange : function(meta) { + var me = this, + fields = meta.fields || me.getFields(), + newModel, + clientIdProperty; + + + me.metaData = meta; + + + me.root = meta.root || me.root; + me.idProperty = meta.idProperty || me.idProperty; + me.totalProperty = meta.totalProperty || me.totalProperty; + me.successProperty = meta.successProperty || me.successProperty; + me.messageProperty = meta.messageProperty || me.messageProperty; + clientIdProperty = meta.clientIdProperty; + + if (me.model) { + me.model.setFields(fields, me.idProperty, clientIdProperty); + me.setModel(me.model, true); + } + else { + newModel = Ext.define("Ext.data.reader.Json-Model" + Ext.id(), { + extend: 'Ext.data.Model', + fields: fields, + clientIdProperty: clientIdProperty + }); + if (me.idProperty) { + + + + + newModel.idProperty = me.idProperty; + } + me.setModel(newModel, true); + } + }, + + + getIdProperty: function() { + var idField = this.model.prototype.idField, + idProperty = this.idProperty; + + if (!idProperty && idField && (idProperty = idField.mapping) == null) { + idProperty = idField.name; + } + return idProperty; + }, + + + buildExtractors: function(force) { + var me = this, + idProp = me.getIdProperty(), + totalProp = me.totalProperty, + successProp = me.successProperty, + messageProp = me.messageProperty, + accessor; + + if (force === true) { + delete me.convertRecordData; + } + + if (me.convertRecordData) { + return; + } + + + if (totalProp) { + me.getTotal = me.createAccessor(totalProp); + } + + if (successProp) { + me.getSuccess = me.createAccessor(successProp); + } + + if (messageProp) { + me.getMessage = me.createAccessor(messageProp); + } + + + if (idProp) { + accessor = me.createAccessor(idProp); + me.getId = function(record) { + var id = accessor.call(me, record); + return (id === undefined || id === '') ? null : id; + }; + } else { + me.getId = function() { + return null; + }; + } + me.convertRecordData = me.buildRecordDataExtractor(); + me.lastFieldGeneration = me.model.prototype.fields.generation; + }, + + recordDataExtractorTemplate : [ + 'var me = this\n', + ' ,fields = me.model.prototype.fields\n', + ' ,value\n', + ' ,internalId\n', + '', + ' ,__field{#} = fields.map["{name}"]\n', + '', ';\n', + + 'return function(dest, source, record) {\n', + '', + '{% var fieldAccessExpression = this.createFieldAccessExpression(values, "__field" + xindex, "source");', + ' if (fieldAccessExpression) { %}', + + ' value = {[ this.createFieldAccessExpression(values, "__field" + xindex, "source") ]};\n', + + + '', + ' dest["{name}"] = value === undefined ? __field{#}.convert(__field{#}.defaultValue, record) : __field{#}.convert(value, record);\n', + + + '', + ' if (value === undefined) {\n', + ' if (me.applyDefaults) {\n', + '', + ' dest["{name}"] = __field{#}.convert(__field{#}.defaultValue, record);\n', + '', + ' dest["{name}"] = __field{#}.defaultValue\n', + '', + ' };\n', + ' } else {\n', + '', + ' dest["{name}"] = __field{#}.convert(value, record);\n', + '', + ' dest["{name}"] = value;\n', + '', + ' };\n', + + + '', + ' if (value !== undefined) {\n', + '', + ' dest["{name}"] = __field{#}.convert(value, record);\n', + '', + ' dest["{name}"] = value;\n', + '', + ' }\n', + '', + + + + + '{% } else { %}', + '', + '', + ' dest["{name}"] = __field{#}.convert(__field{#}.defaultValue, record);\n', + '', + ' dest["{name}"] = __field{#}.defaultValue\n', + '', + '', + '{% } %}', + '', + + + + + '', + ' if (record && (internalId = {[ this.createFieldAccessExpression(\{mapping: values.clientIdProp\}, null, "source") ]})) {\n', + ' record.{["internalId"]} = internalId;\n', + ' }\n', + '', + + '};' + ], + + + buildRecordDataExtractor: function() { + var me = this, + modelProto = me.model.prototype, + templateData = { + clientIdProp: modelProto.clientIdProperty, + fields: modelProto.fields.items + }; + + me.recordDataExtractorTemplate.createFieldAccessExpression = me.accessExpressionFn; + + + + + return Ext.functionFactory(me.recordDataExtractorTemplate.apply(templateData)).call(me); + }, + + destroyReader: function() { + var me = this; + delete me.proxy; + delete me.model; + delete me.convertRecordData; + delete me.getId; + delete me.getTotal; + delete me.getSuccess; + delete me.getMessage; + } +}, function() { + var proto = this.prototype; + Ext.apply(proto, { + + nullResultSet: new Ext.data.ResultSet({ + total : 0, + count : 0, + records: [], + success: true, + message: '' + }), + recordDataExtractorTemplate: new Ext.XTemplate(proto.recordDataExtractorTemplate) + }); +}); + + +Ext.define('Ext.data.reader.Json', { + extend: Ext.data.reader.Reader , + alternateClassName: 'Ext.data.JsonReader', + alias : 'reader.json', + + root: '', + + + + + metaProperty: 'metaData', + + + useSimpleAccessors: false, + + + readRecords: function(data) { + var me = this, + meta; + + + if (me.getMeta) { + meta = me.getMeta(data); + if (meta) { + me.onMetaChange(meta); + } + } else if (data.metaData) { + me.onMetaChange(data.metaData); + } + + + me.jsonData = data; + return me.callParent([data]); + }, + + + getResponseData: function(response) { + var data, error; + + try { + data = Ext.decode(response.responseText); + return this.readRecords(data); + } catch (ex) { + error = new Ext.data.ResultSet({ + total : 0, + count : 0, + records: [], + success: false, + message: ex.message + }); + + this.fireEvent('exception', this, response, error); + + Ext.Logger.warn('Unable to parse the JSON returned by the server'); + + return error; + } + }, + + + buildExtractors : function() { + var me = this, + metaProp = me.metaProperty; + + me.callParent(arguments); + + if (me.root) { + me.getRoot = me.createAccessor(me.root); + } else { + me.getRoot = Ext.identityFn; + } + + if (metaProp) { + me.getMeta = me.createAccessor(metaProp); + } + }, + + + extractData: function(root) { + var recordName = this.record, + data = [], + length, i; + + if (recordName) { + length = root.length; + + if (!length && Ext.isObject(root)) { + length = 1; + root = [root]; + } + + for (i = 0; i < length; i++) { + data[i] = root[i][recordName]; + } + } else { + data = root; + } + return this.callParent([data]); + }, + + + createAccessor: (function() { + var re = /[\[\.]/; + + return function(expr) { + if (Ext.isEmpty(expr)) { + return Ext.emptyFn; + } + if (Ext.isFunction(expr)) { + return expr; + } + if (this.useSimpleAccessors !== true) { + var i = String(expr).search(re); + if (i >= 0) { + return Ext.functionFactory('obj', 'return obj' + (i > 0 ? '.' : '') + expr); + } + } + return function(obj) { + return obj[expr]; + }; + }; + }()), + + + createFieldAccessExpression: (function() { + var re = /[\[\.]/; + + return function(field, fieldVarName, dataName) { + var mapping = field.mapping, + hasMap = mapping || mapping === 0, + map = hasMap ? mapping : field.name, + result, + operatorIndex; + + + if (mapping === false) { + return; + } + + if (typeof map === 'function') { + result = fieldVarName + '.mapping(' + dataName + ', this)'; + } else if (this.useSimpleAccessors === true || ((operatorIndex = String(map).search(re)) < 0)) { + if (!hasMap || isNaN(map)) { + + map = '"' + map + '"'; + } + result = dataName + "[" + map + "]"; + } else if (operatorIndex === 0) { + + + result = dataName + map; + } else { + + + + + + + var parts = map.split('.'), + len = parts.length, + i = 1, + tempResult = dataName + '.' + parts[0], + buffer = [tempResult]; + + for (; i < len; i++) { + tempResult += '.' + parts[i]; + buffer.push(tempResult); + } + result = buffer.join(' && '); + } + return result; + }; + }()) +}); + + +Ext.define('Ext.data.writer.Writer', { + alias: 'writer.base', + alternateClassName: ['Ext.data.DataWriter', 'Ext.data.Writer'], + + + writeAllFields: true, + + + + + nameProperty: 'name', + + + writeRecordId: true, + + + isWriter: true, + + + constructor: function(config) { + Ext.apply(this, config); + }, + + + write: function(request) { + var operation = request.operation, + records = operation.records || [], + len = records.length, + i = 0, + data = []; + + for (; i < len; i++) { + data.push(this.getRecordData(records[i], operation)); + } + return this.writeRecords(request, data); + }, + + + getRecordData: function(record, operation) { + var isPhantom = record.phantom === true, + writeAll = this.writeAllFields || isPhantom, + fields = record.fields, + fieldItems = fields.items, + data = {}, + clientIdProperty = record.clientIdProperty, + changes, + field, + key, + value, + mappedIdProperty, + f, fLen; + + if (writeAll) { + fLen = fieldItems.length; + + for (f = 0; f < fLen; f++) { + field = fieldItems[f]; + if (field.persist) { + this.writeValue(data, field, record); + } + } + } else { + + changes = record.getChanges(); + for (key in changes) { + if (changes.hasOwnProperty(key)) { + field = fields.get(key); + if (field.persist) { + this.writeValue(data, field, record); + } + } + } + } + if (isPhantom) { + if (clientIdProperty && operation && operation.records.length > 1) { + + + data[clientIdProperty] = record.internalId; + } + } else if (this.writeRecordId) { + + mappedIdProperty = fields.get(record.idProperty)[this.nameProperty] || record.idProperty; + data[mappedIdProperty] = record.getId(); + } + + return data; + }, + + writeValue: function(data, field, record){ + var name = field[this.nameProperty] || field.name, + dateFormat = this.dateFormat || field.dateWriteFormat || field.dateFormat, + value = record.get(field.name); + + if (field.serialize) { + data[name] = field.serialize(value, record); + } else if (field.type === Ext.data.Types.DATE && dateFormat && Ext.isDate(value)) { + data[name] = Ext.Date.format(value, dateFormat); + } else { + data[name] = value; + } + } +}); + + +Ext.define('Ext.data.writer.Json', { + extend: Ext.data.writer.Writer , + alternateClassName: 'Ext.data.JsonWriter', + alias: 'writer.json', + + + root: undefined, + + + encode: false, + + + allowSingle: true, + + + expandData: false, + + + getExpandedData: function(data) { + var dataLength = data.length, + i = 0, + item, + prop, + nameParts, + j, + tempObj, + + toObject = function(name, value) { + var o = {}; + o[name] = value; + return o; + }; + + for (; i < dataLength; i++) { + item = data[i]; + + for (prop in item) { + if (item.hasOwnProperty(prop)) { + + nameParts = prop.split('.'); + j = nameParts.length - 1; + + if (j > 0) { + + + tempObj = item[prop]; + + for (; j > 0; j--) { + + + + tempObj = toObject(nameParts[j], tempObj); + } + + + + + item[nameParts[0]] = item[nameParts[0]] || {}; + + + Ext.Object.merge(item[nameParts[0]], tempObj); + + delete item[prop]; + } + } + } + } + return data; + }, + + + writeRecords: function(request, data) { + var root = this.root; + + if (this.expandData) { + data = this.getExpandedData(data); + } + + if (this.allowSingle && data.length === 1) { + + data = data[0]; + } + + if (this.encode) { + if (root) { + + request.params[root] = Ext.encode(data); + } else { + } + } else { + + request.jsonData = request.jsonData || {}; + if (root) { + request.jsonData[root] = data; + } else { + request.jsonData = data; + } + } + return request; + } +}); + + +Ext.define('Ext.data.proxy.Proxy', { + alias: 'proxy.proxy', + alternateClassName: ['Ext.data.DataProxy', 'Ext.data.Proxy'], + + + + + + + + + + + + + mixins: { + observable: Ext.util.Observable + }, + + + batchOrder: 'create,update,destroy', + + + batchActions: true, + + + defaultReaderType: 'json', + + + defaultWriterType: 'json', + + + + + + + + + isProxy: true, + + + constructor: function(config) { + var me = this; + + config = config || {}; + me.proxyConfig = config; + + me.mixins.observable.constructor.call(me, config); + + if (me.model !== undefined && !(me.model instanceof Ext.data.Model)) { + me.setModel(me.model); + } else { + if (me.reader) { + me.setReader(me.reader); + } + + if (me.writer) { + me.setWriter(me.writer); + } + } + + + }, + + + setModel: function(model, setOnStore) { + var me = this; + + me.model = Ext.ModelManager.getModel(model); + + me.setReader(this.reader); + me.setWriter(this.writer); + + if (setOnStore && me.store) { + me.store.setModel(me.model); + } + }, + + + getModel: function() { + return this.model; + }, + + + setReader: function(reader) { + var me = this, + needsCopy = true, + current = me.reader; + + if (reader === undefined || typeof reader == 'string') { + reader = { + type: reader + }; + needsCopy = false; + } + + if (reader.isReader) { + reader.setModel(me.model); + } else { + if (needsCopy) { + reader = Ext.apply({}, reader); + } + Ext.applyIf(reader, { + proxy: me, + model: me.model, + type : me.defaultReaderType + }); + + reader = Ext.createByAlias('reader.' + reader.type, reader); + } + + if (reader !== current && reader.onMetaChange) { + reader.onMetaChange = Ext.Function.createSequence(reader.onMetaChange, this.onMetaChange, this); + } + + me.reader = reader; + return me.reader; + }, + + + getReader: function() { + return this.reader; + }, + + + onMetaChange: function(meta) { + this.fireEvent('metachange', this, meta); + }, + + + setWriter: function(writer) { + var me = this, + needsCopy = true; + + if (writer === undefined || typeof writer == 'string') { + writer = { + type: writer + }; + needsCopy = false; + } + + if (!writer.isWriter) { + if (needsCopy) { + writer = Ext.apply({}, writer); + } + Ext.applyIf(writer, { + model: me.model, + type : me.defaultWriterType + }); + + writer = Ext.createByAlias('writer.' + writer.type, writer); + } + + me.writer = writer; + + return me.writer; + }, + + + getWriter: function() { + return this.writer; + }, + + + create: Ext.emptyFn, + + + read: Ext.emptyFn, + + + update: Ext.emptyFn, + + + destroy: Ext.emptyFn, + + + batch: function(options, listeners) { + var me = this, + useBatch = me.batchActions, + batch, + records, + actions, aLen, action, a, r, rLen, record; + + if (options.operations === undefined) { + + + options = { + operations: options, + listeners: listeners + }; + } + + if (options.batch) { + if (Ext.isDefined(options.batch.runOperation)) { + batch = Ext.applyIf(options.batch, { + proxy: me, + listeners: {} + }); + } + } else { + options.batch = { + proxy: me, + listeners: options.listeners || {} + }; + } + + if (!batch) { + batch = new Ext.data.Batch(options.batch); + } + + batch.on('complete', Ext.bind(me.onBatchComplete, me, [options], 0)); + + actions = me.batchOrder.split(','); + aLen = actions.length; + + for (a = 0; a < aLen; a++) { + action = actions[a]; + records = options.operations[action]; + + if (records) { + if (useBatch) { + batch.add(new Ext.data.Operation({ + action : action, + records : records + })); + } else { + rLen = records.length; + + for (r = 0; r < rLen; r++) { + record = records[r]; + + batch.add(new Ext.data.Operation({ + action : action, + records : [record] + })); + } + } + } + } + + batch.start(); + return batch; + }, + + + onBatchComplete: function(batchOptions, batch) { + var scope = batchOptions.scope || this; + + if (batch.hasException) { + if (Ext.isFunction(batchOptions.failure)) { + Ext.callback(batchOptions.failure, scope, [batch, batchOptions]); + } + } else if (Ext.isFunction(batchOptions.success)) { + Ext.callback(batchOptions.success, scope, [batch, batchOptions]); + } + + if (Ext.isFunction(batchOptions.callback)) { + Ext.callback(batchOptions.callback, scope, [batch, batchOptions]); + } + }, + + clone: function() { + return new this.self(this.proxyConfig); + } +}); + + +Ext.define('Ext.data.Operation', { + + synchronous: true, + + + action: undefined, + + + filters: undefined, + + + sorters: undefined, + + + groupers: undefined, + + + start: undefined, + + + limit: undefined, + + + batch: undefined, + + + + + callback: undefined, + + + scope: undefined, + + + started: false, + + + running: false, + + + complete: false, + + + success: undefined, + + + exception: false, + + + error: undefined, + + + actionCommitRecordsRe: /^(?:create|update)$/i, + + + actionSkipSyncRe: /^destroy$/i, + + + constructor: function(config) { + Ext.apply(this, config || {}); + }, + + + commitRecords: function(serverRecords) { + var me = this, + commitRecords = me.actionCommitRecordsRe.test(me.action), + mc, index, clientRecords, serverRec, clientRec, i, len, + modifiedFields, recordModifiedFields; + + if (!me.actionSkipSyncRe.test(me.action)) { + clientRecords = me.records; + + if (clientRecords && clientRecords.length) { + + + + + + if (commitRecords) { + recordModifiedFields = []; + } + if (clientRecords.length > 1) { + + + + + if (me.action == 'update' || clientRecords[0].clientIdProperty) { + mc = new Ext.util.MixedCollection(); + mc.addAll(serverRecords); + + for (index = clientRecords.length; index--; ) { + clientRec = clientRecords[index]; + serverRec = mc.findBy(me.matchClientRec, clientRec); + + + modifiedFields = clientRec.copyFrom(serverRec); + + + if (commitRecords) { + recordModifiedFields.push(modifiedFields); + } + } + } else { + for (i = 0, len = clientRecords.length; i < len; ++i) { + clientRec = clientRecords[i]; + serverRec = serverRecords[i]; + if (clientRec && serverRec) { + modifiedFields = me.updateRecord(clientRec, serverRec); + + + if (commitRecords) { + recordModifiedFields.push(modifiedFields); + } + } + } + } + } else { + + modifiedFields = me.updateRecord(clientRecords[0], serverRecords[0]); + + + if (commitRecords) { + recordModifiedFields[0] = modifiedFields; + } + } + + if (commitRecords) { + for (index = clientRecords.length; index--; ) { + + + + + clientRecords[index].commit(false, recordModifiedFields[index]); + } + } + } + } + }, + + updateRecord: function(clientRec, serverRec) { + + if (serverRec && (clientRec.phantom || clientRec.getId() === serverRec.getId())) { + return clientRec.copyFrom(serverRec); + } + + + return []; + }, + + + + + matchClientRec: function(record) { + var clientRec = this, + clientRecordId = clientRec.getId(); + + if(clientRecordId && record.getId() === clientRecordId) { + return true; + } + + + + return record.internalId === clientRec.internalId; + }, + + + setStarted: function() { + this.started = true; + this.running = true; + }, + + + setCompleted: function() { + this.complete = true; + this.running = false; + }, + + + setSuccessful: function() { + this.success = true; + }, + + + setException: function(error) { + this.exception = true; + this.success = false; + this.running = false; + this.error = error; + }, + + + hasException: function() { + return this.exception === true; + }, + + + getError: function() { + return this.error; + }, + + + getRecords: function() { + var resultSet = this.getResultSet(); + return this.records || (resultSet ? resultSet.records : null); + }, + + + getResultSet: function() { + return this.resultSet; + }, + + + isStarted: function() { + return this.started === true; + }, + + + isRunning: function() { + return this.running === true; + }, + + + isComplete: function() { + return this.complete === true; + }, + + + wasSuccessful: function() { + return this.isComplete() && this.success === true; + }, + + + setBatch: function(batch) { + this.batch = batch; + }, + + + allowWrite: function() { + return this.action != 'read'; + } +}); + + +Ext.define('Ext.data.AbstractStore', { + + + + + + + + mixins: { + observable: Ext.util.Observable , + sortable: Ext.util.Sortable + }, + + statics: { + + create: function(store) { + if (!store.isStore) { + if (!store.type) { + store.type = 'store'; + } + store = Ext.createByAlias('store.' + store.type, store); + } + return store; + } + }, + + onClassExtended: function(cls, data, hooks) { + var model = data.model, + onBeforeClassCreated; + + if (typeof model == 'string') { + onBeforeClassCreated = hooks.onBeforeCreated; + + hooks.onBeforeCreated = function() { + var me = this, + args = arguments; + + Ext.require(model, function() { + onBeforeClassCreated.apply(me, args); + }); + }; + } + }, + + + remoteSort : false, + + + remoteFilter: false, + + + + + autoLoad: undefined, + + + autoSync: false, + + + batchUpdateMode: 'operation', + + + filterOnLoad: true, + + + sortOnLoad: true, + + + implicitModel: false, + + + defaultProxyType: 'memory', + + + isDestroyed: false, + + + isStore: true, + + + + + + + + + + + + sortRoot: 'data', + + + constructor: function(config) { + var me = this, + filters; + + + + + + + + + + + + + + + + + + + + + + + + Ext.apply(me, config); + + + + me.removed = []; + + me.mixins.observable.constructor.apply(me, arguments); + + + me.model = Ext.ModelManager.getModel(me.model); + + + Ext.applyIf(me, { + modelDefaults: null + }); + + + if (!me.model && me.fields) { + me.model = Ext.define('Ext.data.Store.ImplicitModel-' + (me.storeId || Ext.id()), { + extend: 'Ext.data.Model', + fields: me.fields, + proxy: me.proxy || me.defaultProxyType + }); + + delete me.fields; + + me.implicitModel = true; + } + + + + me.setProxy(me.proxy || me.model.getProxy()); + + me.proxy.on('metachange', me.onMetaChange, me); + + if (me.id && !me.storeId) { + me.storeId = me.id; + delete me.id; + } + + if (me.storeId) { + Ext.data.StoreManager.register(me); + } + + me.mixins.sortable.initSortable.call(me); + + + filters = me.decodeFilters(me.filters); + me.filters = new Ext.util.MixedCollection(); + me.filters.addAll(filters); + }, + + + setProxy: function(proxy) { + var me = this; + + if (proxy instanceof Ext.data.proxy.Proxy) { + proxy.setModel(me.model); + } else { + if (Ext.isString(proxy)) { + proxy = { + type: proxy + }; + } + Ext.applyIf(proxy, { + model: me.model + }); + + proxy = Ext.createByAlias('proxy.' + proxy.type, proxy); + } + + me.proxy = proxy; + + return me.proxy; + }, + + + getProxy: function() { + return this.proxy; + }, + + + onMetaChange: function(proxy, meta) { + this.fireEvent('metachange', this, meta); + }, + + + create: function(data, options) { + var me = this, + instance = Ext.ModelManager.create(Ext.applyIf(data, me.modelDefaults), me.model.modelName), + operation; + + options = options || {}; + + Ext.applyIf(options, { + action : 'create', + records: [instance] + }); + + operation = new Ext.data.Operation(options); + + me.proxy.create(operation, me.onProxyWrite, me); + + return instance; + }, + + read: function() { + return this.load.apply(this, arguments); + }, + + update: function(options) { + var me = this, + operation; + options = options || {}; + + Ext.applyIf(options, { + action : 'update', + records: me.getUpdatedRecords() + }); + + operation = new Ext.data.Operation(options); + + return me.proxy.update(operation, me.onProxyWrite, me); + }, + + + onProxyWrite: function(operation) { + var me = this, + success = operation.wasSuccessful(), + records = operation.getRecords(); + + switch (operation.action) { + case 'create': + me.onCreateRecords(records, operation, success); + break; + case 'update': + me.onUpdateRecords(records, operation, success); + break; + case 'destroy': + me.onDestroyRecords(records, operation, success); + break; + } + + if (success) { + me.fireEvent('write', me, operation); + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + } + + Ext.callback(operation.callback, operation.scope || me, [records, operation, success]); + }, + + + onCreateRecords: Ext.emptyFn, + + + onUpdateRecords: Ext.emptyFn, + + + onDestroyRecords: function(records, operation, success) { + if (success) { + this.removed = []; + } + }, + + + + destroy: function(options) { + var me = this, + operation; + + options = options || {}; + + Ext.applyIf(options, { + action : 'destroy', + records: me.getRemovedRecords() + }); + + operation = new Ext.data.Operation(options); + + return me.proxy.destroy(operation, me.onProxyWrite, me); + }, + + + onBatchOperationComplete: function(batch, operation) { + return this.onProxyWrite(operation); + }, + + + onBatchComplete: function(batch, operation) { + var me = this, + operations = batch.operations, + length = operations.length, + i; + + me.suspendEvents(); + + for (i = 0; i < length; i++) { + me.onProxyWrite(operations[i]); + } + + me.resumeEvents(); + + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + }, + + + onBatchException: function(batch, operation) { + + + + + + }, + + + filterNew: function(item) { + + return item.phantom === true && item.isValid(); + }, + + + getNewRecords: function() { + return []; + }, + + + getUpdatedRecords: function() { + return []; + }, + + + getModifiedRecords : function(){ + return [].concat(this.getNewRecords(), this.getUpdatedRecords()); + }, + + + filterUpdated: function(item) { + + return item.dirty === true && item.phantom !== true && item.isValid(); + }, + + + getRemovedRecords: function() { + return this.removed; + }, + + filter: function(filters, value) { + + }, + + + decodeFilters: function(filters) { + if (!Ext.isArray(filters)) { + if (filters === undefined) { + filters = []; + } else { + filters = [filters]; + } + } + + var length = filters.length, + Filter = Ext.util.Filter, + config, i; + + for (i = 0; i < length; i++) { + config = filters[i]; + + if (!(config instanceof Filter)) { + Ext.apply(config, { + root: 'data' + }); + + + if (config.fn) { + config.filterFn = config.fn; + } + + + if (typeof config == 'function') { + config = { + filterFn: config + }; + } + + filters[i] = new Filter(config); + } + } + + return filters; + }, + + clearFilter: function(supressEvent) { + + }, + + isFiltered: function() { + + }, + + filterBy: function(fn, scope) { + + }, + + + sync: function(options) { + var me = this, + operations = {}, + toCreate = me.getNewRecords(), + toUpdate = me.getUpdatedRecords(), + toDestroy = me.getRemovedRecords(), + needsSync = false; + + if (toCreate.length > 0) { + operations.create = toCreate; + needsSync = true; + } + + if (toUpdate.length > 0) { + operations.update = toUpdate; + needsSync = true; + } + + if (toDestroy.length > 0) { + operations.destroy = toDestroy; + needsSync = true; + } + + if (needsSync && me.fireEvent('beforesync', operations) !== false) { + options = options || {}; + + me.proxy.batch(Ext.apply(options, { + operations: operations, + listeners: me.getBatchListeners() + })); + } + + return me; + }, + + + getBatchListeners: function() { + var me = this, + listeners = { + scope: me, + exception: me.onBatchException + }; + + if (me.batchUpdateMode == 'operation') { + listeners.operationcomplete = me.onBatchOperationComplete; + } else { + listeners.complete = me.onBatchComplete; + } + + return listeners; + }, + + + save: function() { + return this.sync.apply(this, arguments); + }, + + + load: function(options) { + var me = this, + operation; + + options = Ext.apply({ + action: 'read', + filters: me.filters.items, + sorters: me.getSorters() + }, options); + me.lastOptions = options; + + operation = new Ext.data.Operation(options); + + if (me.fireEvent('beforeload', me, operation) !== false) { + me.loading = true; + me.proxy.read(operation, me.onProxyLoad, me); + } + + return me; + }, + + + reload: function(options) { + return this.load(Ext.apply(this.lastOptions, options)); + }, + + + afterEdit : function(record, modifiedFieldNames) { + var me = this, + i, shouldSync; + + if (me.autoSync && !me.autoSyncSuspended) { + for (i = modifiedFieldNames.length; i--;) { + + if (record.fields.get(modifiedFieldNames[i]).persist) { + shouldSync = true; + break; + } + } + if (shouldSync) { + me.sync(); + } + } + me.onUpdate(record, Ext.data.Model.EDIT, modifiedFieldNames); + me.fireEvent('update', me, record, Ext.data.Model.EDIT, modifiedFieldNames); + }, + + + afterReject : function(record) { + + + + + + this.onUpdate(record, Ext.data.Model.REJECT, null); + this.fireEvent('update', this, record, Ext.data.Model.REJECT, null); + }, + + + afterCommit : function(record, modifiedFieldNames) { + if (!modifiedFieldNames) { + modifiedFieldNames = null; + } + this.onUpdate(record, Ext.data.Model.COMMIT, modifiedFieldNames); + this.fireEvent('update', this, record, Ext.data.Model.COMMIT, modifiedFieldNames); + }, + + onUpdate: Ext.emptyFn, + + onIdChanged: function(model, oldId, newId, oldInternalId){ + this.fireEvent('idchanged', this, model, oldId, newId, oldInternalId); + }, + + + destroyStore: function() { + var me = this; + + if (!me.isDestroyed) { + me.clearListeners(); + if (me.storeId) { + Ext.data.StoreManager.unregister(me); + } + me.clearData(); + me.data = me.tree = me.sorters = me.filters = me.groupers = null; + if (me.reader) { + me.reader.destroyReader(); + } + me.proxy = me.reader = me.writer = null; + me.isDestroyed = true; + + if (me.implicitModel) { + Ext.destroy(me.model); + } else { + me.model = null; + } + } + }, + + + getState: function() { + var me = this, + hasState, + result, + hasGroupers = !!me.groupers, + groupers = [], + sorters = [], + filters = []; + + if (hasGroupers) { + me.groupers.each(function(g) { + groupers[groupers.length] = g.serialize(); + hasState = true; + }); + } + + if (me.sorters) { + + me.sorters.each(function(s) { + + if (hasGroupers && !me.groupers.contains(s)) { + sorters[sorters.length] = s.serialize(); + hasState = true; + } + }); + } + + + + if (me.filters && me.statefulFilters) { + me.filters.each(function(f) { + filters[filters.length] = f.serialize(); + hasState = true; + }); + } + + + if (hasState) { + result = {}; + if (groupers.length) { + result.groupers = groupers; + } + if (sorters.length) { + result.sorters = sorters; + } + if (filters.length) { + result.filters = filters; + } + return result; + } + }, + + + applyState: function(state) { + var me = this, + hasSorters = !!me.sorters, + hasGroupers = !!me.groupers, + hasFilters = !!me.filters, + locallySorted; + + if (hasGroupers && state.groupers) { + me.groupers.clear(); + me.groupers.addAll(me.decodeGroupers(state.groupers)); + } + + if (hasSorters && state.sorters) { + me.sorters.clear(); + me.sorters.addAll(me.decodeSorters(state.sorters)); + } + + if (hasFilters && state.filters) { + me.filters.clear(); + me.filters.addAll(me.decodeFilters(state.filters)); + } + + if (hasSorters && hasGroupers) { + + me.sorters.insert(0, me.groupers.getRange()); + } + + + if (me.remoteSort || me.remoteGroup || me.remoteFilter) { + me.reload(); + } + + + if (hasFilters && me.filters.length && !me.remoteFilter) { + me.filter(); + locallySorted = me.sortOnFilter; + } + + + if (hasSorters && me.sorters.length && !me.remoteSort && !locallySorted) { + me.sort(); + } + }, + + + doSort: function(sorterFn) { + var me = this; + if (me.remoteSort) { + + me.load(); + } else { + me.data.sortBy(sorterFn); + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + } + me.fireEvent('sort', me, me.sorters.getRange()); + }, + + + clearData: Ext.emptyFn, + + + getCount: Ext.emptyFn, + + + getById: Ext.emptyFn, + + + removeAll: Ext.emptyFn, + + + + + isLoading: function() { + return !!this.loading; + }, + + + suspendAutoSync: function() { + this.autoSyncSuspended = true; + }, + + + resumeAutoSync: function() { + this.autoSyncSuspended = false; + } + +}); + + + +Ext.define('Ext.app.domain.Store', { + extend: Ext.app.EventDomain , + singleton: true, + + + + + + type: 'store', + idProperty: 'storeId', + + constructor: function() { + var me = this; + + me.callParent(); + me.monitor(Ext.data.AbstractStore); + } +}); + + +Ext.define('Ext.app.Controller', { + + + + + + + + + + + + + + + mixins: { + observable: Ext.util.Observable + }, + + + + statics: { + strings: { + model: { + getter: 'getModel', + upper: 'Model' + }, + + view: { + getter: 'getView', + upper: 'View' + }, + + controller: { + getter: 'getController', + upper: 'Controller' + }, + + store: { + getter: 'getStore', + upper: 'Store' + } + }, + + controllerRegex: /^(.*)\.controller\./, + + createGetter: function(baseGetter, name) { + return function () { + return this[baseGetter](name); + }; + }, + + getGetterName: function(name, kindUpper) { + var fn = 'get', + parts = name.split('.'), + numParts = parts.length, + index; + + + for (index = 0; index < numParts; index++) { + fn += Ext.String.capitalize(parts[index]); + } + + fn += kindUpper; + + return fn; + }, + + + processDependencies: function(cls, requires, namespace, kind, names) { + if (!names || !names.length) { + return; + } + + var me = this, + strings = me.strings[kind], + o, absoluteName, shortName, name, j, subLn, getterName, getter; + + for (j = 0, subLn = names.length; j < subLn; j++) { + name = names[j]; + o = me.getFullName(name, kind, namespace); + absoluteName = o.absoluteName; + shortName = o.shortName; + + requires.push(absoluteName); + getterName = me.getGetterName(shortName, strings.upper); + cls[getterName] = getter = me.createGetter(strings.getter, name); + + + if (kind !== 'controller') { + + + + + getter['Ext.app.getter'] = true; + } + } + }, + + getFullName: function(name, kind, namespace) { + var shortName = name, + sep, absoluteName; + + if ((sep = name.indexOf('@')) > 0) { + + + + + shortName = name.substring(0, sep); + absoluteName = name.substring(sep + 1) + '.' + shortName; + } + + + + + + + + + + + + + + + + else if (name.indexOf('.') > 0 && (Ext.ClassManager.isCreated(name) || + Ext.Loader.isAClassNameWithAKnownPrefix(name))) { + absoluteName = name; + } + else { + + if (namespace) { + absoluteName = namespace + '.' + kind + '.' + name; + shortName = name; + } + else { + absoluteName = name; + } + } + + return { + absoluteName: absoluteName, + shortName: shortName + }; + } + }, + + + application: null, + + + + + + + + + + onClassExtended: function(cls, data, hooks) { + var onBeforeClassCreated = hooks.onBeforeCreated; + + hooks.onBeforeCreated = function(cls, data) { + var Controller = Ext.app.Controller, + ctrlRegex = Controller.controllerRegex, + requires = [], + className, namespace, requires, proto, match; + + proto = cls.prototype; + + + className = Ext.getClassName(cls); + namespace = data.$namespace || + Ext.app.getNamespace(className) || + ((match = ctrlRegex.exec(className)) && match[1]); + + if (namespace) { + proto.$namespace = namespace; + } + + Controller.processDependencies(proto, requires, namespace, 'model', data.models); + Controller.processDependencies(proto, requires, namespace, 'view', data.views); + Controller.processDependencies(proto, requires, namespace, 'store', data.stores); + Controller.processDependencies(proto, requires, namespace, 'controller', data.controllers); + + Ext.require(requires, Ext.Function.pass(onBeforeClassCreated, arguments, this)); + }; + }, + + + constructor: function (config) { + var me = this; + + me.mixins.observable.constructor.call(me, config); + + if (me.refs) { + me.ref(me.refs); + } + + me.eventbus = Ext.app.EventBus; + + me.initAutoGetters(); + }, + + initAutoGetters: function() { + var proto = this.self.prototype, + prop, fn; + + for (prop in proto) { + fn = proto[prop]; + + + + if (fn && fn['Ext.app.getter']) { + fn.call(this); + } + } + }, + + doInit: function(app) { + var me = this; + + if (!me._initialized) { + me.init(app); + me._initialized = true; + } + }, + + + init: Ext.emptyFn, + + + onLaunch: Ext.emptyFn, + + ref: function(refs) { + var me = this, + i = 0, + length = refs.length, + info, ref, fn; + + refs = Ext.Array.from(refs); + + me.references = me.references || []; + + for (; i < length; i++) { + info = refs[i]; + ref = info.ref; + fn = 'get' + Ext.String.capitalize(ref); + + if (!me[fn]) { + me[fn] = Ext.Function.pass(me.getRef, [ref, info], me); + } + me.references.push(ref.toLowerCase()); + } + }, + + + addRef: function(refs) { + this.ref(refs); + }, + + getRef: function(ref, info, config) { + var me = this, + refCache = me.refCache || (me.refCache = {}), + cached = refCache[ref]; + + info = info || {}; + config = config || {}; + + Ext.apply(info, config); + + if (info.forceCreate) { + return Ext.ComponentManager.create(info, 'component'); + } + + if (!cached) { + if (info.selector) { + refCache[ref] = cached = Ext.ComponentQuery.query(info.selector)[0]; + } + + if (!cached && info.autoCreate) { + refCache[ref] = cached = Ext.ComponentManager.create(info, 'component'); + } + + if (cached) { + cached.on('beforedestroy', function() { + refCache[ref] = null; + }); + } + } + + return cached; + }, + + + hasRef: function(ref) { + var references = this.references; + return references && Ext.Array.indexOf(references, ref.toLowerCase()) !== -1; + }, + + + control: function(selectors, listeners, controller) { + var me = this, + ctrl = controller, + obj; + + if (Ext.isString(selectors)) { + obj = {}; + obj[selectors] = listeners; + } + else { + obj = selectors; + ctrl = listeners; + } + + me.eventbus.control(obj, ctrl || me); + }, + + + listen: function (to, controller) { + this.eventbus.listen(to, controller || this); + }, + + + getController: function(id) { + var me = this, + app = me.application; + + if (id === me.id) { + return me; + } + + return app && app.getController(id); + }, + + + getStore: function(name) { + var storeId, store; + + storeId = (name.indexOf('@') == -1) ? name : name.split('@')[0]; + store = Ext.StoreManager.get(storeId); + + if (!store) { + name = Ext.app.Controller.getFullName(name, 'store', this.$namespace); + + if (name) { + store = Ext.create(name.absoluteName, { + storeId: storeId + }); + } + } + + return store; + }, + + + getModel: function(model) { + var name = Ext.app.Controller.getFullName(model, 'model', this.$namespace); + + return name && Ext.ModelManager.getModel(name.absoluteName); + }, + + + getView: function(view) { + var name = Ext.app.Controller.getFullName(view, 'view', this.$namespace); + + return name && Ext.ClassManager.get(name.absoluteName); + }, + + + getApplication: function() { + return this.application; + } +}); + + +Ext.define('Ext.container.DockingContainer', { + + + + + + + + isDockingContainer: true, + + + + + + + defaultDockWeights: { + top: { render: 1, visual: 1 }, + left: { render: 3, visual: 5 }, + right: { render: 5, visual: 7 }, + bottom: { render: 7, visual: 3 } + }, + + + + + + dockOrder: { + top: -1, + left: -1, + right: 1, + bottom: 1 + }, + + + horizontalDocks: 0, + + + addDocked : function(items, pos) { + var me = this, + i = 0, + item, length; + + items = me.prepareItems(items); + length = items.length; + + for (; i < length; i++) { + item = items[i]; + item.dock = item.dock || 'top'; + if (item.dock === 'left' || item.dock === 'right') { + me.horizontalDocks++; + } + + if (pos !== undefined) { + i += pos; + me.dockedItems.insert(i, item); + } else { + me.dockedItems.add(item); + } + + item.onAdded(me, i); + if (me.hasListeners.dockedadd) { + me.fireEvent('dockedadd', me, item, i); + } + if (me.onDockedAdd !== Ext.emptyFn) { + me.onDockedAdd(item); + } + } + + if (me.rendered && !me.suspendLayout) { + me.updateLayout(); + } + return items; + }, + + destroyDockedItems: function(){ + var dockedItems = this.dockedItems, + c; + + if (dockedItems) { + while ((c = dockedItems.first())) { + this.removeDocked(c, true); + } + } + }, + + doRenderDockedItems: function (out, renderData, after) { + + + + + + + + + var me = renderData.$comp, + layout = me.componentLayout, + items, + tree; + + if (layout.getDockedItems && !renderData.$skipDockedItems) { + items = layout.getDockedItems('render', !after); + tree = items && layout.getItemsRenderTree(items); + + if (tree) { + Ext.DomHelper.generateMarkup(tree, out); + } + } + }, + + + getDockedComponent: function(comp) { + if (Ext.isObject(comp)) { + comp = comp.getItemId(); + } + return this.dockedItems.get(comp); + }, + + + getDockedItems : function(selector, beforeBody) { + var dockedItems = this.getComponentLayout().getDockedItems('render', beforeBody); + + if (selector && dockedItems.length) { + dockedItems = Ext.ComponentQuery.query(selector, dockedItems); + } + + return dockedItems; + }, + + getDockingRefItems: function(deep, containerItems) { + + var selector = deep && '*,* *', + + dockedItems = this.getDockedItems(selector, true), + items; + + + dockedItems.push.apply(dockedItems, containerItems); + + + items = this.getDockedItems(selector, false); + dockedItems.push.apply(dockedItems, items); + + return dockedItems; + }, + + initDockingItems: function() { + var me = this, + items = me.dockedItems; + + me.dockedItems = new Ext.util.AbstractMixedCollection(false, me.getComponentId); + if (items) { + me.addDocked(items); + } + }, + + + insertDocked : function(pos, items) { + this.addDocked(items, pos); + }, + + + + onDockedAdd : Ext.emptyFn, + + onDockedRemove : Ext.emptyFn, + + + removeDocked : function(item, autoDestroy) { + var me = this, + layout, + hasLayout; + + autoDestroy = autoDestroy === true || (autoDestroy !== false && me.autoDestroy); + if (!me.dockedItems.contains(item)) { + return item; + } + if (item.dock === 'left' || item.dock === 'right') { + me.horizontalDocks--; + } + + layout = me.componentLayout; + hasLayout = layout && me.rendered; + + if (hasLayout) { + layout.onRemove(item); + } + + me.dockedItems.remove(item); + + item.onRemoved(item.destroying || autoDestroy); + me.onDockedRemove(item); + + if (autoDestroy) { + item.destroy(); + } else if (hasLayout) { + + layout.afterRemove(item); + } + + if (me.hasListeners.dockedremove) { + me.fireEvent('dockedremove', me, item); + } + + if (!me.destroying && !me.suspendLayout) { + me.updateLayout(); + } + + return item; + }, + + setupDockingRenderTpl: function (renderTpl) { + renderTpl.renderDockedItems = this.doRenderDockedItems; + } +}); + + +Ext.define('Ext.toolbar.Fill', { + extend: Ext.Component , + alias: 'widget.tbfill', + alternateClassName: 'Ext.Toolbar.Fill', + + isFill : true, + flex: 1 +}); + + +Ext.define('Ext.layout.container.boxOverflow.None', { + alternateClassName: 'Ext.layout.boxOverflow.None', + + constructor: function(layout, config) { + this.layout = layout; + Ext.apply(this, config); + }, + + handleOverflow: Ext.emptyFn, + + clearOverflow: Ext.emptyFn, + + beginLayout: Ext.emptyFn, + beginLayoutCycle: Ext.emptyFn, + + calculate: function(ownerContext) { + var me = this, + plan = ownerContext.state.boxPlan, + overflow; + + if (plan && plan.tooNarrow) { + overflow = me.handleOverflow(ownerContext); + + if (overflow) { + if (overflow.reservedSpace) { + me.layout.publishInnerCtSize(ownerContext, overflow.reservedSpace); + } + + + + + + + + + + + + } + } else { + me.clearOverflow(); + } + }, + + completeLayout: Ext.emptyFn, + + finishedLayout: function (ownerContext) { + var me = this, + owner = me.layout.owner, + hiddens, + hiddenCount; + + + if (owner.hasListeners.overflowchange) { + hiddens = owner.query('>[hidden]'); + hiddenCount = hiddens.length; + if (hiddenCount !== me.lastHiddenCount) { + owner.fireEvent('overflowchange', me.lastHiddenCount, hiddenCount, hiddens); + me.lastHiddenCount = hiddenCount; + } + } + }, + + onRemove: Ext.emptyFn, + + + getItem: function(item) { + return this.layout.owner.getComponent(item); + }, + + getOwnerType: function(owner){ + var type; + if (owner.isToolbar) { + type = 'toolbar'; + } else if (owner.isTabBar) { + type = 'tabbar'; + } else if (owner.isMenu) { + type = 'menu'; + } else { + type = owner.getXType(); + } + + return type; + }, + + getPrefixConfig: Ext.emptyFn, + getSuffixConfig: Ext.emptyFn, + getOverflowCls: function() { + return ''; + } +}); + + +Ext.define('Ext.toolbar.Item', { + extend: Ext.Component , + alias: 'widget.tbitem', + alternateClassName: 'Ext.Toolbar.Item', + enable:Ext.emptyFn, + disable:Ext.emptyFn, + focus:Ext.emptyFn + +}); + + +Ext.define('Ext.toolbar.Separator', { + extend: Ext.toolbar.Item , + alias: 'widget.tbseparator', + alternateClassName: 'Ext.Toolbar.Separator', + baseCls: Ext.baseCSSPrefix + 'toolbar-separator', + focusable: false, + + border: true +}); + + +Ext.define('Ext.button.Manager', { + singleton: true, + + alternateClassName: 'Ext.ButtonToggleManager', + + groups: {}, + + buttonSelector: '.' + Ext.baseCSSPrefix + 'btn', + + init: function(){ + var me = this; + if (me.initialized) { + return; + } + Ext.getBody().on('keydown', me.onKeyDown, me); + me.initialized = true; + }, + + + + onKeyDown: function(e) { + var k = e.getKey(), + btn; + + + if (k === e.SPACE || k === e.ENTER) { + + + btn = e.getTarget(this.buttonSelector); + + + if (btn) { + Ext.getCmp(btn.id).onClick(e); + } + } + }, + + toggleGroup: function(btn, state) { + if (state) { + var g = this.groups[btn.toggleGroup], + length = g.length, + i; + + for (i = 0; i < length; i++) { + if (g[i] !== btn) { + g[i].toggle(false); + } + } + } + }, + + register: function(btn) { + var me = this, + groups = this.groups, + group = groups[btn.toggleGroup]; + + me.init(); + if (!btn.toggleGroup) { + return; + } + + if (!group) { + group = groups[btn.toggleGroup] = []; + } + group.push(btn); + btn.on('toggle', me.toggleGroup, me); + }, + + unregister: function(btn) { + if (!btn.toggleGroup) { + return; + } + var me = this, + group = me.groups[btn.toggleGroup]; + + if (group) { + Ext.Array.remove(group, btn); + btn.un('toggle', me.toggleGroup, me); + } + }, + + + + + getPressed: function(group) { + var g = this.groups[group], + i = 0, + len; + + if (g) { + for (len = g.length; i < len; i++) { + if (g[i].pressed === true) { + return g[i]; + } + } + } + return null; + } +}); + + +Ext.define('Ext.menu.Manager', { + singleton: true, + + + + + alternateClassName: 'Ext.menu.MenuMgr', + + + + menuSelector: '.' + Ext.baseCSSPrefix + 'menu', + + menus: {}, + groups: {}, + attached: false, + lastShow: new Date(), + + init: function() { + var me = this; + + me.active = new Ext.util.MixedCollection(); + Ext.getDoc().addKeyListener(27, function() { + if (me.active.length > 0) { + me.hideAll(); + } + }, me); + }, + + + hideAll: function() { + var active = this.active, + clone, menus, m, mLen; + + if (active && active.length > 0) { + clone = active.clone(); + menus = clone.items; + mLen = menus.length; + + for (m = 0; m < mLen; m++) { + menus[m].hide(); + } + + return true; + } + return false; + }, + + onHide: function(m) { + var me = this, + active = me.active; + active.remove(m); + if (active.length < 1) { + Ext.getDoc().un('mousedown', me.onMouseDown, me); + me.attached = false; + } + }, + + onShow: function(m) { + var me = this, + active = me.active, + attached = me.attached; + + me.lastShow = new Date(); + active.add(m); + if (!attached) { + Ext.getDoc().on('mousedown', me.onMouseDown, me, { + + + buffer: Ext.isIE9m ? 10 : undefined + }); + me.attached = true; + } + m.toFront(); + }, + + onBeforeHide: function(m) { + if (m.activeChild) { + m.activeChild.hide(); + } + if (m.autoHideTimer) { + clearTimeout(m.autoHideTimer); + delete m.autoHideTimer; + } + }, + + onBeforeShow: function(m) { + var active = this.active, + parentMenu = m.parentMenu; + + active.remove(m); + if (!parentMenu && !m.allowOtherMenus) { + this.hideAll(); + } + else if (parentMenu && parentMenu.activeChild && m != parentMenu.activeChild) { + parentMenu.activeChild.hide(); + } + }, + + + onMouseDown: function(e) { + var me = this, + active = me.active, + lastShow = me.lastShow, + doHide = true; + + if (Ext.Date.getElapsed(lastShow) > 50 && active.length > 0 && !e.getTarget(me.menuSelector)) { + + + + if (Ext.isIE9m && !Ext.getBody().contains(e.target)) { + doHide = false; + } + if (doHide) { + me.hideAll(); + } + } + }, + + + register: function(menu) { + var me = this; + + if (!me.active) { + me.init(); + } + + if (menu.floating) { + me.menus[menu.id] = menu; + menu.on({ + beforehide: me.onBeforeHide, + hide: me.onHide, + beforeshow: me.onBeforeShow, + show: me.onShow, + scope: me + }); + } + }, + + + get: function(menu) { + var menus = this.menus; + + if (typeof menu == 'string') { + if (!menus) { + return null; + } + return menus[menu]; + } else if (menu.isMenu) { + return menu; + } else if (Ext.isArray(menu)) { + return new Ext.menu.Menu({items:menu}); + } else { + return Ext.ComponentManager.create(menu, 'menu'); + } + }, + + + unregister: function(menu) { + var me = this, + menus = me.menus, + active = me.active; + + delete menus[menu.id]; + active.remove(menu); + menu.un({ + beforehide: me.onBeforeHide, + hide: me.onHide, + beforeshow: me.onBeforeShow, + show: me.onShow, + scope: me + }); + }, + + + registerCheckable: function(menuItem) { + var groups = this.groups, + groupId = menuItem.group; + + if (groupId) { + if (!groups[groupId]) { + groups[groupId] = []; + } + + groups[groupId].push(menuItem); + } + }, + + + unregisterCheckable: function(menuItem) { + var groups = this.groups, + groupId = menuItem.group; + + if (groupId) { + Ext.Array.remove(groups[groupId], menuItem); + } + }, + + onCheckChange: function(menuItem, state) { + var groups = this.groups, + groupId = menuItem.group, + i = 0, + group, ln, curr; + + if (groupId && state) { + group = groups[groupId]; + ln = group.length; + for (; i < ln; i++) { + curr = group[i]; + if (curr != menuItem) { + curr.setChecked(false); + } + } + } + } +}); + + +Ext.define('Ext.util.ClickRepeater', { + extend: Ext.util.Observable , + + + constructor : function(el, config){ + var me = this; + + me.el = Ext.get(el); + me.el.unselectable(); + + Ext.apply(me, config); + + me.callParent(); + + me.addEvents( + + "mousedown", + + "click", + + "mouseup" + ); + + if(!me.disabled){ + me.disabled = true; + me.enable(); + } + + + if(me.handler){ + me.on("click", me.handler, me.scope || me); + } + }, + + + + + + + + + interval : 20, + + + delay: 250, + + + preventDefault : true, + + + stopDefault : false, + + timer : 0, + + + enable: function(){ + if(this.disabled){ + this.el.on('mousedown', this.handleMouseDown, this); + + + if (Ext.isIE && !(Ext.isIE10p || (Ext.isStrict && Ext.isIE9))){ + this.el.on('dblclick', this.handleDblClick, this); + } + if(this.preventDefault || this.stopDefault){ + this.el.on('click', this.eventOptions, this); + } + } + this.disabled = false; + }, + + + disable: function( force){ + if(force || !this.disabled){ + clearTimeout(this.timer); + if(this.pressedCls){ + this.el.removeCls(this.pressedCls); + } + Ext.getDoc().un('mouseup', this.handleMouseUp, this); + this.el.removeAllListeners(); + } + this.disabled = true; + }, + + + setDisabled: function(disabled){ + this[disabled ? 'disable' : 'enable'](); + }, + + eventOptions: function(e){ + if(this.preventDefault){ + e.preventDefault(); + } + if(this.stopDefault){ + e.stopEvent(); + } + }, + + + destroy : function() { + this.disable(true); + Ext.destroy(this.el); + this.clearListeners(); + }, + + handleDblClick : function(e){ + clearTimeout(this.timer); + this.el.blur(); + + this.fireEvent("mousedown", this, e); + this.fireEvent("click", this, e); + }, + + + handleMouseDown : function(e){ + clearTimeout(this.timer); + this.el.blur(); + if(this.pressedCls){ + this.el.addCls(this.pressedCls); + } + this.mousedownTime = new Date(); + + Ext.getDoc().on("mouseup", this.handleMouseUp, this); + this.el.on("mouseout", this.handleMouseOut, this); + + this.fireEvent("mousedown", this, e); + this.fireEvent("click", this, e); + + + if (this.accelerate) { + this.delay = 400; + } + + + + e = new Ext.EventObjectImpl(e); + + this.timer = Ext.defer(this.click, this.delay || this.interval, this, [e]); + }, + + + click : function(e){ + this.fireEvent("click", this, e); + this.timer = Ext.defer(this.click, this.accelerate ? + this.easeOutExpo(Ext.Date.getElapsed(this.mousedownTime), + 400, + -390, + 12000) : + this.interval, this, [e]); + }, + + easeOutExpo : function (t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + + + handleMouseOut : function(){ + clearTimeout(this.timer); + if(this.pressedCls){ + this.el.removeCls(this.pressedCls); + } + this.el.on("mouseover", this.handleMouseReturn, this); + }, + + + handleMouseReturn : function(){ + this.el.un("mouseover", this.handleMouseReturn, this); + if(this.pressedCls){ + this.el.addCls(this.pressedCls); + } + this.click(); + }, + + + handleMouseUp : function(e){ + clearTimeout(this.timer); + this.el.un("mouseover", this.handleMouseReturn, this); + this.el.un("mouseout", this.handleMouseOut, this); + Ext.getDoc().un("mouseup", this.handleMouseUp, this); + if(this.pressedCls){ + this.el.removeCls(this.pressedCls); + } + this.fireEvent("mouseup", this, e); + } +}); + + +Ext.define('Ext.layout.component.Button', { + + + + alias: ['layout.button'], + + extend: Ext.layout.component.Auto , + + + + type: 'button', + + htmlRE: /<.*>/, + + beginLayout: function(ownerContext) { + var me = this, + owner = me.owner, + text = owner.text; + + me.callParent(arguments); + ownerContext.btnWrapContext = ownerContext.getEl('btnWrap'); + ownerContext.btnElContext = ownerContext.getEl('btnEl'); + ownerContext.btnInnerElContext = ownerContext.getEl('btnInnerEl'); + ownerContext.btnIconElContext = ownerContext.getEl('btnIconEl'); + + if (text && me.htmlRE.test(text)) { + ownerContext.isHtmlText = true; + + + + + owner.btnInnerEl.setStyle('line-height', 'normal'); + owner.btnInnerEl.setStyle('padding-top', ''); + } + }, + + beginLayoutCycle: function(ownerContext) { + var owner = this.owner, + lastWidthModel = this.lastWidthModel; + + this.callParent(arguments); + + if (lastWidthModel && !this.lastWidthModel.shrinkWrap && + ownerContext.widthModel.shrinkWrap) { + + owner.btnWrap.setStyle('height', ''); + owner.btnEl.setStyle('height', ''); + owner.btnInnerEl.setStyle('line-height', ''); + } + }, + + calculate: function(ownerContext) { + var me = this, + owner = me.owner, + btnElContext = ownerContext.btnElContext, + btnInnerElContext = ownerContext.btnInnerElContext, + btnWrapContext = ownerContext.btnWrapContext, + ownerHeight, contentHeight, btnElHeight, innerElHeight; + + me.callParent(arguments); + + if (ownerContext.heightModel.shrinkWrap) { + + + + + + + + btnElHeight = owner.btnEl.getHeight(); + if (ownerContext.isHtmlText) { + me.centerInnerEl( + ownerContext, + btnElHeight + ); + me.ieCenterIcon(ownerContext, btnElHeight); + } + } else { + + + ownerHeight = ownerContext.getProp('height'); + + if (ownerHeight) { + + + contentHeight = ownerHeight - ownerContext.getFrameInfo().height - ownerContext.getPaddingInfo().height; + + + + + btnElHeight = contentHeight; + if ((owner.menu || owner.split) && owner.arrowAlign === 'bottom') { + + + btnElHeight -= btnWrapContext.getPaddingInfo().bottom; + } + + + + + + innerElHeight = btnElHeight; + if ((owner.icon || owner.iconCls || owner.glyph) && + (owner.iconAlign === 'top' || owner.iconAlign === 'bottom')) { + innerElHeight -= btnInnerElContext.getPaddingInfo().height; + } + + btnWrapContext.setProp('height', contentHeight); + btnElContext.setProp('height', btnElHeight); + + if (ownerContext.isHtmlText) { + + + me.centerInnerEl(ownerContext, btnElHeight); + } else { + + + + btnInnerElContext.setProp('line-height', innerElHeight + 'px'); + } + me.ieCenterIcon(ownerContext, btnElHeight); + } else { + me.done = false; + } + } + }, + + centerInnerEl: function(ownerContext, btnElHeight) { + var me = this, + btnInnerElContext = ownerContext.btnInnerElContext, + innerElHeight = me.owner.btnInnerEl.getHeight(); + + if (ownerContext.heightModel.shrinkWrap && (btnElHeight < innerElHeight)) { + + + + ownerContext.btnElContext.setHeight(innerElHeight); + } else if (btnElHeight > innerElHeight) { + + + + btnInnerElContext.setProp( + 'padding-top', + Math.round((btnElHeight - innerElHeight) / 2) + + + + + btnInnerElContext.getPaddingInfo().top + ); + } + }, + + ieCenterIcon: function(ownerContext, btnElHeight) { + var iconAlign = this.owner.iconAlign; + + if ((Ext.isIEQuirks || Ext.isIE6) && + (iconAlign === 'left' || iconAlign === 'right')) { + + + + + + + ownerContext.btnIconElContext.setHeight(btnElHeight); + } + }, + + publishInnerWidth: function(ownerContext, width) { + if (this.owner.getFrameInfo().table) { + + + + ownerContext.btnInnerElContext.setWidth( + width - + + ownerContext.getFrameInfo().width - ownerContext.getPaddingInfo().width - + + + ownerContext.btnWrapContext.getPaddingInfo().width + ); + } + } + +}); + + +Ext.define('Ext.util.TextMetrics', { + statics: { + shared: null, + + measure: function(el, text, fixedWidth){ + var me = this, + shared = me.shared; + + if(!shared){ + shared = me.shared = new me(el, fixedWidth); + } + shared.bind(el); + shared.setFixedWidth(fixedWidth || 'auto'); + return shared.getSize(text); + }, + + + destroy: function(){ + var me = this; + Ext.destroy(me.shared); + me.shared = null; + } + }, + + + constructor: function(bindTo, fixedWidth){ + var measure = this.measure = Ext.getBody().createChild({ + cls: Ext.baseCSSPrefix + 'textmetrics' + }); + this.el = Ext.get(bindTo); + + measure.position('absolute'); + measure.setLocalXY(-1000, -1000); + measure.hide(); + + if (fixedWidth) { + measure.setWidth(fixedWidth); + } + }, + + + getSize: function(text){ + var measure = this.measure, + size; + + measure.update(text); + size = measure.getSize(); + measure.update(''); + return size; + }, + + + bind: function(el){ + var me = this; + + me.el = Ext.get(el); + me.measure.setStyle( + me.el.getStyles('font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing') + ); + }, + + + setFixedWidth : function(width){ + this.measure.setWidth(width); + }, + + + getWidth : function(text){ + this.measure.dom.style.width = 'auto'; + return this.getSize(text).width; + }, + + + getHeight : function(text){ + return this.getSize(text).height; + }, + + + destroy: function(){ + var me = this; + me.measure.remove(); + delete me.el; + delete me.measure; + } +}, function(){ + Ext.Element.addMethods({ + + getTextWidth : function(text, min, max){ + return Ext.Number.constrain(Ext.util.TextMetrics.measure(this.dom, Ext.value(text, this.dom.innerHTML, true)).width, min || 0, max || 1000000); + } + }); +}); + + +Ext.define('Ext.button.Button', { + + + alias: 'widget.button', + extend: Ext.Component , + + + + + + + + + + + alternateClassName: 'Ext.Button', + + + + isButton: true, + componentLayout: 'button', + + + hidden: false, + + + disabled: false, + + + pressed: false, + + + + + + + + + + + + + + + + + + + + + + + + + + + enableToggle: false, + + + + + + + menuAlign: 'tl-bl?', + + + showEmptyMenu: false, + + + textAlign: 'center', + + + + + + + + + type: 'button', + + + clickEvent: 'click', + + + preventDefault: true, + + + handleMouseEvents: true, + + + tooltipType: 'qtip', + + + baseCls: Ext.baseCSSPrefix + 'btn', + + + pressedCls: 'pressed', + + + overCls: 'over', + + + focusCls: 'focus', + + + menuActiveCls: 'menu-active', + + + + + hrefTarget: '_blank', + + + + border: true, + + + + + + childEls: [ + 'btnEl', 'btnWrap', 'btnInnerEl', 'btnIconEl' + ], + + + + + renderTpl: [ + '', + + '', + + '', + '' + ], + + + scale: 'small', + + + allowedScales: ['small', 'medium', 'large'], + + + + + iconAlign: 'left', + + + arrowAlign: 'right', + + + arrowCls: 'arrow', + + + + + + + + maskOnDisable: false, + + shrinkWrap: 3, + + frame: true, + + + _triggerRegion: {}, + + + initComponent: function() { + var me = this; + + + me.addCls('x-unselectable'); + + me.callParent(arguments); + + me.addEvents( + + 'click', + + + 'toggle', + + + 'mouseover', + + + 'mouseout', + + + 'menushow', + + + 'menuhide', + + + 'menutriggerover', + + + 'menutriggerout', + + + 'textchange', + + + 'iconchange', + + + 'glyphchange' + ); + + if (me.menu) { + + me.split = true; + + + me.menu = Ext.menu.Manager.get(me.menu); + + + + me.menu.ownerButton = me; + } + + + if (me.url) { + me.href = me.url; + } + + + if (me.href && !me.hasOwnProperty('preventDefault')) { + me.preventDefault = false; + } + + if (Ext.isString(me.toggleGroup) && me.toggleGroup !== '') { + me.enableToggle = true; + } + + if (me.html && !me.text) { + me.text = me.html; + delete me.html; + } + + me.glyphCls = me.baseCls + '-glyph'; + }, + + + getActionEl: function() { + return this.btnEl; + }, + + + getFocusEl: function() { + return this.useElForFocus ? this.el : this.btnEl; + }, + + + onFocus: function(e) { + var me = this; + + + + me.useElForFocus = true; + me.callParent(arguments); + me.useElForFocus = false; + }, + + + onBlur : function(e) { + this.useElForFocus = true; + this.callParent(arguments); + this.useElForFocus = false; + }, + + + onDisable: function(){ + this.useElForFocus = true; + this.callParent(arguments); + this.useElForFocus = false; + }, + + + setComponentCls: function() { + var me = this, + cls = me.getComponentCls(); + + if (!Ext.isEmpty(me.oldCls)) { + me.removeClsWithUI(me.oldCls); + me.removeClsWithUI(me.pressedCls); + } + + me.oldCls = cls; + me.addClsWithUI(cls); + }, + + getComponentCls: function() { + var me = this, + cls = []; + + + if (me.iconCls || me.icon || me.glyph) { + if (me.text) { + cls.push('icon-text-' + me.iconAlign); + } else { + cls.push('icon'); + } + } else if (me.text) { + cls.push('noicon'); + } + + if (me.pressed) { + cls.push(me.pressedCls); + } + return cls; + }, + + beforeRender: function () { + var me = this; + + me.callParent(); + + + me.oldCls = me.getComponentCls(); + me.addClsWithUI(me.oldCls); + + + Ext.applyIf(me.renderData, me.getTemplateArgs()); + }, + + + onRender: function() { + var me = this, + addOnclick, + btn, + btnListeners; + + me.doc = Ext.getDoc(); + me.callParent(arguments); + + + btn = me.el; + + if (me.tooltip) { + me.setTooltip(me.tooltip, true); + } + + + if (me.handleMouseEvents) { + btnListeners = { + scope: me, + mouseover: me.onMouseOver, + mouseout: me.onMouseOut, + mousedown: me.onMouseDown + }; + if (me.split) { + btnListeners.mousemove = me.onMouseMove; + } + } else { + btnListeners = { + scope: me + }; + } + + + if (me.menu) { + me.mon(me.menu, { + scope: me, + show: me.onMenuShow, + hide: me.onMenuHide + }); + + me.keyMap = new Ext.util.KeyMap({ + target: me.el, + key: Ext.EventObject.DOWN, + handler: me.onDownKey, + scope: me + }); + } + + + if (me.repeat) { + me.mon(new Ext.util.ClickRepeater(btn, Ext.isObject(me.repeat) ? me.repeat: {}), 'click', me.onRepeatClick, me); + } else { + + + if (btnListeners[me.clickEvent]) { + addOnclick = true; + } else { + btnListeners[me.clickEvent] = me.onClick; + } + } + + + me.mon(btn, btnListeners); + + + if (addOnclick) { + me.mon(btn, me.clickEvent, me.onClick, me); + } + + Ext.button.Manager.register(me); + }, + + + getTemplateArgs: function() { + var me = this, + glyph = me.glyph, + glyphFontFamily = Ext._glyphFontFamily, + glyphParts; + + if (typeof glyph === 'string') { + glyphParts = glyph.split('@'); + glyph = glyphParts[0]; + glyphFontFamily = glyphParts[1]; + } + + return { + href : me.getHref(), + hrefTarget: me.hrefTarget, + type : me.type, + innerCls : me.getInnerCls(), + splitCls : me.getSplitCls(), + iconUrl : me.icon, + iconCls : me.iconCls, + glyph: glyph, + glyphCls: glyph ? me.glyphCls : '', + glyphFontFamily: glyphFontFamily, + text : me.text || ' ', + tabIndex : me.tabIndex == null ? 0 : me.tabIndex + }; + }, + + + setHref: function(href) { + this.href = href; + this.btnEl.dom.href = this.getHref(); + }, + + + getHref: function() { + var me = this, + href = me.href; + + return href ? Ext.urlAppend(href, Ext.Object.toQueryString(Ext.apply({}, me.params, me.baseParams))) : false; + }, + + + setParams: function(params) { + this.params = params; + this.btnEl.dom.href = this.getHref(); + }, + + getSplitCls: function() { + var me = this; + return me.split ? (me.baseCls + '-' + me.arrowCls) + ' ' + (me.baseCls + '-' + me.arrowCls + '-' + me.arrowAlign) : ''; + }, + + getInnerCls: function() { + return this.textAlign ? this.baseCls + '-inner-' + this.textAlign : ''; + }, + + + setIcon: function(icon) { + icon = icon || ''; + var me = this, + btnIconEl = me.btnIconEl, + oldIcon = me.icon || ''; + + me.icon = icon; + if (icon != oldIcon) { + if (btnIconEl) { + btnIconEl.setStyle('background-image', icon ? 'url(' + icon + ')': ''); + me.setComponentCls(); + if (me.didIconStateChange(oldIcon, icon)) { + me.updateLayout(); + } + } + me.fireEvent('iconchange', me, oldIcon, icon); + } + return me; + }, + + + setIconCls: function(cls) { + cls = cls || ''; + var me = this, + btnIconEl = me.btnIconEl, + oldCls = me.iconCls || ''; + + me.iconCls = cls; + if (oldCls != cls) { + if (btnIconEl) { + + btnIconEl.removeCls(oldCls); + btnIconEl.addCls(cls || ''); + me.setComponentCls(); + if (me.didIconStateChange(oldCls, cls)) { + me.updateLayout(); + } + } + me.fireEvent('iconchange', me, oldCls, cls); + } + return me; + }, + + + setGlyph: function(glyph) { + glyph = glyph || 0; + var me = this, + btnIconEl = me.btnIconEl, + oldGlyph = me.glyph, + fontFamily, glyphParts; + + me.glyph = glyph; + + if (btnIconEl) { + if (typeof glyph === 'string') { + glyphParts = glyph.split('@'); + glyph = glyphParts[0]; + fontFamily = glyphParts[1] || Ext._glyphFontFamily; + } + + if (!glyph) { + btnIconEl.dom.innerHTML = ''; + } else if (oldGlyph != glyph) { + btnIconEl.dom.innerHTML = '&#' + glyph + ';'; + } + + if (fontFamily) { + btnIconEl.setStyle('font-family', fontFamily); + } + } + + me.fireEvent('glyphchange', me, me.glyph, oldGlyph); + + return me; + }, + + + setTooltip: function(tooltip, initial) { + var me = this; + + if (me.rendered) { + if (!initial || !tooltip) { + me.clearTip(); + } + if (tooltip) { + if (Ext.quickTipsActive && Ext.isObject(tooltip)) { + Ext.tip.QuickTipManager.register(Ext.apply({ + target: me.btnEl.id + }, + tooltip)); + me.tooltip = tooltip; + } else { + me.btnEl.dom.setAttribute(me.getTipAttr(), tooltip); + } + } + } else { + me.tooltip = tooltip; + } + return me; + }, + + + setTextAlign: function(align) { + var me = this, + btnEl = me.btnEl; + + if (btnEl) { + btnEl.removeCls(me.baseCls + '-inner-' + me.textAlign); + btnEl.addCls(me.baseCls + '-inner-' + align); + } + me.textAlign = align; + return me; + }, + + getTipAttr: function(){ + return this.tooltipType == 'qtip' ? 'data-qtip' : 'title'; + }, + + + getRefItems: function(deep){ + var menu = this.menu, + items; + + if (menu) { + items = menu.getRefItems(deep); + items.unshift(menu); + } + return items || []; + }, + + + clearTip: function() { + var me = this, + btnEl = me.btnEl; + + if (Ext.quickTipsActive && Ext.isObject(me.tooltip)) { + Ext.tip.QuickTipManager.unregister(btnEl); + } else { + btnEl.dom.removeAttribute(me.getTipAttr()); + } + }, + + + beforeDestroy: function() { + var me = this; + if (me.rendered) { + me.clearTip(); + } + if (me.menu && me.destroyMenu !== false) { + Ext.destroy(me.menu); + } + Ext.destroy(me.btnInnerEl, me.repeater); + me.callParent(); + }, + + + onDestroy: function() { + var me = this; + if (me.rendered) { + me.doc.un('mouseover', me.monitorMouseOver, me); + me.doc.un('mouseup', me.onMouseUp, me); + delete me.doc; + + Ext.destroy(me.keyMap); + delete me.keyMap; + } + Ext.button.Manager.unregister(me); + me.callParent(); + }, + + + setHandler: function(handler, scope) { + this.handler = handler; + this.scope = scope; + return this; + }, + + + setText: function(text) { + text = text || ''; + var me = this, + oldText = me.text || ''; + + if (text != oldText) { + me.text = text; + if (me.rendered) { + me.btnInnerEl.update(text || ' '); + me.setComponentCls(); + if (Ext.isStrict && Ext.isIE8) { + + me.el.repaint(); + } + me.updateLayout(); + } + me.fireEvent('textchange', me, oldText, text); + } + return me; + }, + + + didIconStateChange: function(old, current) { + var currentEmpty = Ext.isEmpty(current); + return Ext.isEmpty(old) ? !currentEmpty : currentEmpty; + }, + + + getText: function() { + return this.text; + }, + + + toggle: function(state, suppressEvent) { + var me = this; + state = state === undefined ? !me.pressed: !!state; + if (state !== me.pressed) { + if (me.rendered) { + me[state ? 'addClsWithUI': 'removeClsWithUI'](me.pressedCls); + } + me.pressed = state; + if (!suppressEvent) { + me.fireEvent('toggle', me, state); + Ext.callback(me.toggleHandler, me.scope || me, [me, state]); + } + } + return me; + }, + + maybeShowMenu: function(){ + var me = this; + if (me.menu && !me.hasVisibleMenu() && !me.ignoreNextClick) { + me.showMenu(true); + } + }, + + + showMenu: function( fromEvent) { + var me = this, + menu = me.menu; + + if (me.rendered) { + if (me.tooltip && Ext.quickTipsActive && me.getTipAttr() != 'title') { + Ext.tip.QuickTipManager.getQuickTip().cancelShow(me.btnEl); + } + if (menu.isVisible()) { + menu.hide(); + } + + if (!fromEvent || me.showEmptyMenu || menu.items.getCount() > 0) { + menu.showBy(me.el, me.menuAlign, (Ext.isIEQuirks || Ext.isIE6) ? [-2, -2] : undefined); + } + } + return me; + }, + + + hideMenu: function() { + if (this.hasVisibleMenu()) { + this.menu.hide(); + } + return this; + }, + + + hasVisibleMenu: function() { + var menu = this.menu; + return menu && menu.rendered && menu.isVisible(); + }, + + + onRepeatClick: function(repeat, e) { + this.onClick(e); + }, + + + onClick: function(e) { + var me = this; + if (me.preventDefault || (me.disabled && me.getHref()) && e) { + e.preventDefault(); + } + + + + if (e.type !== 'keydown' && e.button !== 0) { + return; + } + if (!me.disabled) { + me.doToggle(); + me.maybeShowMenu(); + me.fireHandler(e); + } + }, + + fireHandler: function(e){ + var me = this, + handler = me.handler; + + if (me.fireEvent('click', me, e) !== false) { + if (handler) { + handler.call(me.scope || me, me, e); + } + me.blur(); + } + }, + + doToggle: function(){ + var me = this; + if (me.enableToggle && (me.allowDepress !== false || !me.pressed)) { + me.toggle(); + } + }, + + + onMouseOver: function(e) { + var me = this; + if (!me.disabled && !e.within(me.el, true, true)) { + me.onMouseEnter(e); + } + }, + + + onMouseOut: function(e) { + var me = this; + if (!e.within(me.el, true, true)) { + if (me.overMenuTrigger) { + me.onMenuTriggerOut(e); + } + me.onMouseLeave(e); + } + }, + + + onMouseMove: function(e) { + var me = this, + el = me.el, + over = me.overMenuTrigger, + overPosition, triggerRegion; + + if (me.split) { + overPosition = (me.arrowAlign === 'right') ? + e.getX() - me.getX() : e.getY() - el.getY(); + triggerRegion = me.getTriggerRegion(); + + if (overPosition > triggerRegion.begin && overPosition < triggerRegion.end) { + if (!over) { + me.onMenuTriggerOver(e); + } + } else { + if (over) { + me.onMenuTriggerOut(e); + } + } + } + }, + + + getTriggerRegion: function() { + var me = this, + region = me._triggerRegion, + triggerSize = me.getTriggerSize(), + btnSize = me.arrowAlign === 'right' ? me.getWidth() : me.getHeight(); + + region.begin = btnSize - triggerSize; + region.end = btnSize; + return region; + }, + + + getTriggerSize: function() { + var me = this, + size = me.triggerSize, + side, sideFirstLetter; + + if (size == null) { + side = me.arrowAlign; + sideFirstLetter = side.charAt(0); + size = me.triggerSize = me.el.getFrameWidth(sideFirstLetter) + me.getBtnWrapFrameWidth(sideFirstLetter) + if (me.frameSize) { + size = me.triggerSize += me.frameSize[side]; + } + } + return size; + }, + + + getBtnWrapFrameWidth: function(side) { + return this.btnWrap.getFrameWidth(side); + }, + + addOverCls: function() { + if (!this.disabled) { + this.addClsWithUI(this.overCls); + } + }, + removeOverCls: function() { + this.removeClsWithUI(this.overCls); + }, + + + onMouseEnter: function(e) { + + this.fireEvent('mouseover', this, e); + }, + + + onMouseLeave: function(e) { + + this.fireEvent('mouseout', this, e); + }, + + + onMenuTriggerOver: function(e) { + var me = this, + arrowTip = me.arrowTooltip; + + me.overMenuTrigger = true; + + + if (me.split && arrowTip) { + me.btnWrap.dom.setAttribute(me.getTipAttr(), arrowTip); + } + me.fireEvent('menutriggerover', me, me.menu, e); + }, + + + onMenuTriggerOut: function(e) { + var me = this; + delete me.overMenuTrigger; + + if (me.split && me.arrowTooltip) { + me.btnWrap.dom.setAttribute(me.getTipAttr(), ''); + } + me.fireEvent('menutriggerout', me, me.menu, e); + }, + + + enable : function(silent) { + var me = this; + + me.callParent(arguments); + + me.removeClsWithUI('disabled'); + + return me; + }, + + + disable : function(silent) { + var me = this; + + me.callParent(arguments); + + me.addClsWithUI('disabled'); + me.removeClsWithUI(me.overCls); + + + + if (me.btnInnerEl && Ext.isIE7m) { + me.btnInnerEl.repaint(); + } + + return me; + }, + + + setScale: function(scale) { + var me = this, + ui = me.ui.replace('-' + me.scale, ''); + + + if (!Ext.Array.contains(me.allowedScales, scale)) { + throw('#setScale: scale must be an allowed scale (' + me.allowedScales.join(', ') + ')'); + } + + me.scale = scale; + me.setUI(ui); + }, + + + setUI: function(ui) { + var me = this; + + + if (me.scale && !ui.match(me.scale)) { + ui = ui + '-' + me.scale; + } + + me.callParent([ui]); + + + + }, + + + onMouseDown: function(e) { + var me = this; + if (!me.disabled && e.button === 0) { + me.addClsWithUI(me.pressedCls); + me.doc.on('mouseup', me.onMouseUp, me); + } + }, + + onMouseUp: function(e) { + var me = this; + if (e.button === 0) { + if (!me.pressed) { + me.removeClsWithUI(me.pressedCls); + } + me.doc.un('mouseup', me.onMouseUp, me); + } + }, + + onMenuShow: function(e) { + var me = this; + me.ignoreNextClick = 0; + me.addClsWithUI(me.menuActiveCls); + me.fireEvent('menushow', me, me.menu); + }, + + + onMenuHide: function(e) { + var me = this; + me.removeClsWithUI(me.menuActiveCls); + me.ignoreNextClick = Ext.defer(me.restoreClick, 250, me); + me.fireEvent('menuhide', me, me.menu); + }, + + + restoreClick: function() { + this.ignoreNextClick = 0; + }, + + + onDownKey: function() { + var me = this; + + if (!me.disabled) { + if (me.menu) { + me.showMenu(); + } + } + } + +}); + + +Ext.define('Ext.layout.container.boxOverflow.Menu', { + + + + extend: Ext.layout.container.boxOverflow.None , + + alternateClassName: 'Ext.layout.boxOverflow.Menu', + + + + + + + noItemsMenuText : '
    (None)
    ', + + constructor: function(layout) { + var me = this; + + me.callParent(arguments); + + me.triggerButtonCls = me.triggerButtonCls || Ext.baseCSSPrefix + 'box-menu-after'; + + me.menuItems = []; + }, + + beginLayout: function (ownerContext) { + this.callParent(arguments); + + + + this.clearOverflow(ownerContext); + }, + + beginLayoutCycle: function (ownerContext, firstCycle) { + this.callParent(arguments); + + if (!firstCycle) { + + + this.clearOverflow(ownerContext); + + this.layout.cacheChildItems(ownerContext); + } + }, + + onRemove: function(comp){ + Ext.Array.remove(this.menuItems, comp); + }, + + + getSuffixConfig: function() { + var me = this, + layout = me.layout, + owner = layout.owner, + oid = owner.id; + + + me.menu = new Ext.menu.Menu({ + listeners: { + scope: me, + beforeshow: me.beforeMenuShow + } + }); + + + me.menuTrigger = new Ext.button.Button({ + id: oid + '-menu-trigger', + cls: Ext.layout.container.Box.prototype.innerCls + ' ' + me.triggerButtonCls + ' ' + Ext.baseCSSPrefix + 'toolbar-item', + plain: owner.usePlainButtons, + ownerCt: owner, + ownerLayout: layout, + iconCls: Ext.baseCSSPrefix + me.getOwnerType(owner) + '-more-icon', + ui: owner instanceof Ext.toolbar.Toolbar ? 'default-toolbar' : 'default', + menu: me.menu, + + showEmptyMenu: true, + getSplitCls: function() { return '';} + }); + + return me.menuTrigger.getRenderTree(); + }, + + getOverflowCls: function() { + return Ext.baseCSSPrefix + this.layout.direction + '-box-overflow-body'; + }, + + handleOverflow: function(ownerContext) { + var me = this, + layout = me.layout, + names = layout.names, + plan = ownerContext.state.boxPlan, + posArgs = [null, null]; + + me.showTrigger(ownerContext); + + + + if (me.layout.direction !== 'vertical') { + posArgs[names.heightIndex] = (plan.maxSize - me.menuTrigger[names.getHeight]()) / 2; + me.menuTrigger.setPosition.apply(me.menuTrigger, posArgs); + } + + return { + reservedSpace: me.triggerTotalWidth + }; + }, + + + captureChildElements: function() { + var me = this, + menuTrigger = me.menuTrigger, + names = me.layout.names; + + + if (menuTrigger.rendering) { + menuTrigger.finishRender(); + me.triggerTotalWidth = menuTrigger[names.getWidth]() + menuTrigger.el.getMargin(names.parallelMargins); + } + }, + + _asLayoutRoot: { isRoot: true }, + + + clearOverflow: function(ownerContext) { + var me = this, + items = me.menuItems, + item, + i = 0, + length = items.length, + owner = me.layout.owner, + asLayoutRoot = me._asLayoutRoot; + + owner.suspendLayouts(); + me.captureChildElements(); + me.hideTrigger(); + owner.resumeLayouts(); + + for (; i < length; i++) { + item = items[i]; + + + + item.suspendLayouts(); + item.show(); + item.resumeLayouts(asLayoutRoot); + } + + items.length = 0; + }, + + + showTrigger: function(ownerContext) { + var me = this, + layout = me.layout, + owner = layout.owner, + names = layout.names, + startProp = names.x, + sizeProp = names.width, + plan = ownerContext.state.boxPlan, + available = plan.targetSize[sizeProp], + childItems = ownerContext.childItems, + len = childItems.length, + menuTrigger = me.menuTrigger, + childContext, + comp, i, props; + + + + menuTrigger.suspendLayouts(); + menuTrigger.show(); + menuTrigger.resumeLayouts(me._asLayoutRoot); + + available -= me.triggerTotalWidth; + + owner.suspendLayouts(); + + + + me.menuItems.length = 0; + for (i = 0; i < len; i++) { + childContext = childItems[i]; + props = childContext.props; + if (props[startProp] + props[sizeProp] > available) { + comp = childContext.target; + me.menuItems.push(comp); + comp.hide(); + } + } + + owner.resumeLayouts(); + }, + + + hideTrigger: function() { + var menuTrigger = this.menuTrigger; + if (menuTrigger) { + menuTrigger.hide(); + } + }, + + + beforeMenuShow: function(menu) { + var me = this, + items = me.menuItems, + i = 0, + len = items.length, + item, + prev, + needsSep = function(group, prev){ + return group.isXType('buttongroup') && !(prev instanceof Ext.toolbar.Separator); + }; + + menu.suspendLayouts(); + me.clearMenu(); + menu.removeAll(); + + for (; i < len; i++) { + item = items[i]; + + + if (!i && (item instanceof Ext.toolbar.Separator)) { + continue; + } + if (prev && (needsSep(item, prev) || needsSep(prev, item))) { + menu.add('-'); + } + + me.addComponentToMenu(menu, item); + prev = item; + } + + + if (menu.items.length < 1) { + menu.add(me.noItemsMenuText); + } + menu.resumeLayouts(); + }, + + + createMenuConfig : function(component, hideOnClick) { + var me = this, + config = Ext.apply({}, component.initialConfig), + group = component.toggleGroup; + + Ext.copyTo(config, component, [ + 'iconCls', 'icon', 'itemId', 'disabled', 'handler', 'scope', 'menu', 'tabIndex' + ]); + + Ext.apply(config, { + text : component.overflowText || component.text, + hideOnClick: hideOnClick, + destroyMenu: false, + listeners : {} + }); + + + if (component.isFormField) { + config.value = component.getValue(); + + + + + + + config.listeners.change = function(c, newVal, oldVal) { + component.setValue(newVal); + } + } + + + else if (group || component.enableToggle) { + Ext.apply(config, { + hideOnClick: false, + group : group, + checked: component.pressed, + handler: function(item, e) { + component.onClick(e); + } + }); + } + + + if (component.isButton && !component.changeListenersAdded) { + component.on({ + textchange: me.onButtonAttrChange, + iconchange: me.onButtonAttrChange, + toggle: me.onButtonToggle + }); + component.changeListenersAdded = true; + } + + delete config.ownerCt; + delete config.xtype; + delete config.id; + return config; + }, + + onButtonAttrChange: function(btn) { + var clone = btn.overflowClone; + clone.suspendLayouts(); + clone.setText(btn.text); + clone.setIcon(btn.icon); + clone.setIconCls(btn.iconCls); + clone.resumeLayouts(true); + }, + + onButtonToggle: function(btn, state) { + + if (btn.overflowClone.checked !== state) { + btn.overflowClone.setChecked(state); + } + }, + + + addComponentToMenu : function(menu, component) { + var me = this, + i, items, iLen; + + if (component instanceof Ext.toolbar.Separator) { + menu.add('-'); + } else if (component.isComponent) { + if (component.isXType('splitbutton')) { + component.overflowClone = menu.add(me.createMenuConfig(component, true)); + + } else if (component.isXType('button')) { + component.overflowClone = menu.add(me.createMenuConfig(component, !component.menu)); + + } else if (component.isXType('buttongroup')) { + items = component.items.items; + iLen = items.length; + + for (i = 0; i < iLen; i++) { + me.addComponentToMenu(menu, items[i]); + } + } else { + component.overflowClone = menu.add(Ext.create(Ext.getClassName(component), me.createMenuConfig(component))); + } + } + }, + + + clearMenu : function() { + var menu = this.menu, + items, i, iLen, item; + + if (menu && menu.items) { + items = menu.items.items; + iLen = items.length; + + for (i = 0; i < iLen; i++) { + item = items[i]; + if (item.setMenu) { + item.setMenu(null); + } + } + } + }, + + + destroy: function() { + var trigger = this.menuTrigger; + + if (trigger && !this.layout.owner.items.contains(trigger)) { + + + delete trigger.ownerCt; + } + Ext.destroy(this.menu, trigger); + } +}); + + +Ext.define('Ext.layout.container.boxOverflow.Scroller', { + + + + extend: Ext.layout.container.boxOverflow.None , + + alternateClassName: 'Ext.layout.boxOverflow.Scroller', + mixins: { + observable: Ext.util.Observable + }, + + + + + animateScroll: false, + + + scrollIncrement: 20, + + + wheelIncrement: 10, + + + scrollRepeatInterval: 60, + + + scrollDuration: 400, + + + + + + + scrollerCls: Ext.baseCSSPrefix + 'box-scroller', + + + + + + constructor: function(layout, config) { + var me = this; + + me.layout = layout; + Ext.apply(me, config || {}); + + + me.mixins.observable.constructor.call(me); + + me.addEvents( + + 'scroll' + ); + me.scrollPosition = 0; + me.scrollSize = 0; + }, + + getPrefixConfig: function() { + var me = this, + owner = me.layout.owner, + cls; + + me.initCSSClasses(); + cls = Ext.layout.container.Box.prototype.innerCls + ' ' + me.beforeCtCls; + if (owner.plain) { + + cls += ' ' + me.scrollerCls + '-plain'; + } + return { + cls: cls, + cn : { + id : owner.id + '-before-scroller', + cls: me.scrollerCls + ' ' + me.beforeScrollerCls, + style: 'display:none' + } + }; + }, + + getSuffixConfig: function() { + var me = this, + owner = me.layout.owner, + cls = Ext.layout.container.Box.prototype.innerCls + ' ' + me.afterCtCls; + + if (owner.plain) { + + cls += ' ' + me.scrollerCls + '-plain'; + } + return { + cls: cls, + cn : { + id : me.layout.owner.id + '-after-scroller', + cls: me.scrollerCls + ' ' + me.afterScrollerCls, + style: 'display:none' + } + }; + }, + + getOverflowCls: function() { + return Ext.baseCSSPrefix + this.layout.direction + '-box-overflow-body'; + }, + + initCSSClasses: function() { + var me = this, + prefix = Ext.baseCSSPrefix, + layout = me.layout, + names = layout.names, + beforeXName = names.beforeX, + afterXName = names.afterX, + type = me.getOwnerType(layout.owner); + + me.beforeCtCls = me.beforeCtCls || prefix + 'box-scroller-' + beforeXName; + me.afterCtCls = me.afterCtCls || prefix + 'box-scroller-' + afterXName; + + me.beforeScrollerCls = me.beforeScrollerCls || prefix + type + '-scroll-' + beforeXName; + me.afterScrollerCls = me.afterScrollerCls || prefix + type + '-scroll-' + afterXName; + }, + + beginLayout: function (ownerContext) { + ownerContext.innerCtScrollPos = this.getElScrollPos(); + this.callParent(arguments); + }, + + completeLayout: function(ownerContext) { + var me = this, + plan = ownerContext.state.boxPlan, + names = me.layout.names, + last; + + + if (plan && plan.tooNarrow) { + last = ownerContext.childItems[ownerContext.childItems.length - 1]; + + + me.scrollSize = last.props[names.x] + last.props[names.width]; + me.updateScrollButtons(); + } + this.callParent(arguments); + }, + + finishedLayout: function(ownerContext) { + var scrollPos = Math.min(this.getMaxScrollPosition(), ownerContext.innerCtScrollPos); + + this.setElScrollPos(scrollPos); + }, + + setElScrollPos: function(scrollPos) { + var layout = this.layout; + if (layout.direction === 'vertical') { + layout.innerCt.dom.scrollTop = scrollPos; + } else { + layout.innerCt.setScrollLeft(scrollPos); + } + }, + + getElScrollPos: function(){ + var layout = this.layout; + if (layout.direction === 'vertical') { + return layout.innerCt.dom.scrollTop; + } else { + return layout.innerCt.getScrollLeft(); + } + }, + + handleOverflow: function(ownerContext) { + var me = this, + methodName = me.layout.names.getWidth; + + me.showScrollers(); + return { + reservedSpace: me.beforeCt[methodName]() + me.afterCt[methodName]() + }; + }, + + + captureChildElements: function() { + var me = this, + el = me.layout.owner.el, + before, after, hoverCls, pressedSuffix, pressedCls, hoverSuffix; + + + if (!me.beforeCt) { + hoverSuffix = '-hover'; + pressedSuffix = '-pressed'; + hoverCls = me.scrollerCls + hoverSuffix; + pressedCls = me.scrollerCls + pressedSuffix; + before = me.beforeScroller = el.getById(me.layout.owner.id + '-before-scroller'); + after = me.afterScroller = el.getById(me.layout.owner.id + '-after-scroller'); + me.beforeCt = before.up(''); + me.afterCt = after.up(''); + me.createWheelListener(); + + before.addClsOnOver(hoverCls); + before.addClsOnOver(me.beforeScrollerCls + hoverSuffix); + before.addClsOnClick(pressedCls); + before.addClsOnClick(me.beforeScrollerCls + pressedSuffix); + after.addClsOnOver(hoverCls); + after.addClsOnOver(me.afterScrollerCls + hoverSuffix); + after.addClsOnClick(pressedCls); + after.addClsOnClick(me.afterScrollerCls + pressedSuffix); + + before.setVisibilityMode(Ext.Element.DISPLAY); + after.setVisibilityMode(Ext.Element.DISPLAY); + + me.beforeRepeater = new Ext.util.ClickRepeater(before, { + interval: me.scrollRepeatInterval, + handler : me.scrollLeft, + scope : me + }); + + me.afterRepeater = new Ext.util.ClickRepeater(after, { + interval: me.scrollRepeatInterval, + handler : me.scrollRight, + scope : me + }); + } + }, + + + createWheelListener: function() { + var me = this; + me.layout.innerCt.on({ + mousewheel: function(e) { + me.scrollBy(e.getWheelDelta() * me.wheelIncrement * -1, false); + }, + stopEvent: true + }); + }, + + + clearOverflow: function () { + this.hideScrollers(); + }, + + + showScrollers: function() { + var me = this; + + me.captureChildElements(); + me.beforeScroller.show(); + me.afterScroller.show(); + me.layout.owner.addClsWithUI(me.layout.direction === 'vertical' ? 'vertical-scroller' : 'scroller'); + + }, + + + hideScrollers: function() { + var me = this; + + if (me.beforeScroller !== undefined) { + me.beforeScroller.hide(); + me.afterScroller.hide(); + me.layout.owner.removeClsWithUI(me.layout.direction === 'vertical' ? 'vertical-scroller' : 'scroller'); + + } + }, + + + destroy: function() { + var me = this; + + Ext.destroy(me.beforeRepeater, me.afterRepeater, me.beforeScroller, me.afterScroller, me.beforeCt, me.afterCt); + }, + + + scrollBy: function(delta, animate) { + this.scrollTo(this.getScrollPosition() + delta, animate); + }, + + + getScrollAnim: function() { + return { + duration: this.scrollDuration, + callback: this.updateScrollButtons, + scope : this + }; + }, + + + updateScrollButtons: function() { + var me = this, + beforeMeth, + afterMeth, + beforeCls, + afterCls, + disabledCls, + suffix = '-disabled'; + + if (me.beforeScroller == null || me.afterScroller == null) { + return; + } + + beforeMeth = me.atExtremeBefore() ? 'addCls' : 'removeCls'; + afterMeth = me.atExtremeAfter() ? 'addCls' : 'removeCls'; + disabledCls = me.scrollerCls + suffix; + beforeCls = [disabledCls, me.beforeScrollerCls + suffix]; + afterCls = [disabledCls, me.afterScrollerCls + suffix]; + + me.beforeScroller[beforeMeth](beforeCls); + me.afterScroller[afterMeth](afterCls); + me.scrolling = false; + }, + + + scrollLeft: function() { + this.scrollBy(-this.scrollIncrement, false); + }, + + + scrollRight: function() { + this.scrollBy(this.scrollIncrement, false); + }, + + + getScrollPosition: function(){ + var me = this, + layout = me.layout, + result; + + + if (isNaN(me.scrollPosition)) { + result = me.getElScrollPos(); + } else { + result = me.scrollPosition; + } + return result; + }, + + + getMaxScrollPosition: function() { + var me = this, + layout = me.layout, + maxScrollPos = me.scrollSize - layout.innerCt[layout.names.getWidth](); + + return (maxScrollPos < 0) ? 0 : maxScrollPos; + }, + + + atExtremeBefore: function() { + return !this.getScrollPosition(); + }, + + + atExtremeAfter: function() { + return this.getScrollPosition() >= this.getMaxScrollPosition(); + }, + + + scrollTo: function(position, animate) { + var me = this, + layout = me.layout, + oldPosition = me.getScrollPosition(), + newPosition = Ext.Number.constrain(position, 0, me.getMaxScrollPosition()); + + if (newPosition != oldPosition && !me.scrolling) { + me.scrollPosition = NaN; + if (animate === undefined) { + animate = me.animateScroll; + } + + layout.innerCt.scrollTo(layout.names.beforeX, newPosition, animate ? me.getScrollAnim() : false); + if (animate) { + me.scrolling = true; + } else { + me.updateScrollButtons(); + } + me.fireEvent('scroll', me, newPosition, animate ? me.getScrollAnim() : false); + } + }, + + + scrollToItem: function(item, animate) { + var me = this, + layout = me.layout, + owner = layout.owner, + names = layout.names, + visibility, + box, + newPos; + + item = me.getItem(item); + if (item !== undefined) { + if (item == owner.items.first()) { + newPos = 0 + } else if (item === owner.items.last()) { + newPos = me.getMaxScrollPosition(); + } else { + visibility = me.getItemVisibility(item); + if (!visibility.fullyVisible) { + box = item.getBox(false, true); + newPos = box[names.x]; + if (visibility.hiddenEnd) { + newPos -= (me.layout.innerCt[names.getWidth]() - box[names.width]); + } + } + } + me.scrollTo(newPos, animate); + } + }, + + + getItemVisibility: function(item) { + var me = this, + box = me.getItem(item).getBox(true, true), + layout = me.layout, + names = layout.names, + itemStart = box[names.x], + itemEnd = itemStart + box[names.width], + scrollStart = me.getScrollPosition(), + scrollEnd = scrollStart + layout.innerCt[names.getWidth](); + + return { + hiddenStart : itemStart < scrollStart, + hiddenEnd : itemEnd > scrollEnd, + fullyVisible: itemStart > scrollStart && itemEnd < scrollEnd + }; + } +}); + +//@require Ext.CompositeElement + + +Ext.define('Ext.util.Offset', { + + + + statics: { + fromObject: function(obj) { + return new this(obj.x, obj.y); + } + }, + + + + constructor: function(x, y) { + this.x = (x != null && !isNaN(x)) ? x : 0; + this.y = (y != null && !isNaN(y)) ? y : 0; + + return this; + }, + + copy: function() { + return new Ext.util.Offset(this.x, this.y); + }, + + copyFrom: function(p) { + this.x = p.x; + this.y = p.y; + }, + + toString: function() { + return "Offset[" + this.x + "," + this.y + "]"; + }, + + equals: function(offset) { + + return (this.x == offset.x && this.y == offset.y); + }, + + round: function(to) { + if (!isNaN(to)) { + var factor = Math.pow(10, to); + this.x = Math.round(this.x * factor) / factor; + this.y = Math.round(this.y * factor) / factor; + } else { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + } + }, + + isZero: function() { + return this.x == 0 && this.y == 0; + } +}); + + +Ext.define('Ext.util.Region', { + + + + + + statics: { + + getRegion: function(el) { + return Ext.fly(el).getRegion(); + }, + + + from: function(o) { + return new this(o.top, o.right, o.bottom, o.left); + } + }, + + + + + constructor : function(t, r, b, l) { + var me = this; + me.y = me.top = me[1] = t; + me.right = r; + me.bottom = b; + me.x = me.left = me[0] = l; + }, + + + contains : function(region) { + var me = this; + return (region.x >= me.x && + region.right <= me.right && + region.y >= me.y && + region.bottom <= me.bottom); + + }, + + + intersect : function(region) { + var me = this, + t = Math.max(me.y, region.y), + r = Math.min(me.right, region.right), + b = Math.min(me.bottom, region.bottom), + l = Math.max(me.x, region.x); + + if (b > t && r > l) { + return new this.self(t, r, b, l); + } + else { + return false; + } + }, + + + union : function(region) { + var me = this, + t = Math.min(me.y, region.y), + r = Math.max(me.right, region.right), + b = Math.max(me.bottom, region.bottom), + l = Math.min(me.x, region.x); + + return new this.self(t, r, b, l); + }, + + + constrainTo : function(r) { + var me = this, + constrain = Ext.Number.constrain; + me.top = me.y = constrain(me.top, r.y, r.bottom); + me.bottom = constrain(me.bottom, r.y, r.bottom); + me.left = me.x = constrain(me.left, r.x, r.right); + me.right = constrain(me.right, r.x, r.right); + return me; + }, + + + adjust : function(t, r, b, l) { + var me = this; + me.top = me.y += t; + me.left = me.x += l; + me.right += r; + me.bottom += b; + return me; + }, + + + getOutOfBoundOffset: function(axis, p) { + if (!Ext.isObject(axis)) { + if (axis == 'x') { + return this.getOutOfBoundOffsetX(p); + } else { + return this.getOutOfBoundOffsetY(p); + } + } else { + p = axis; + var d = new Ext.util.Offset(); + d.x = this.getOutOfBoundOffsetX(p.x); + d.y = this.getOutOfBoundOffsetY(p.y); + return d; + } + + }, + + + getOutOfBoundOffsetX: function(p) { + if (p <= this.x) { + return this.x - p; + } else if (p >= this.right) { + return this.right - p; + } + + return 0; + }, + + + getOutOfBoundOffsetY: function(p) { + if (p <= this.y) { + return this.y - p; + } else if (p >= this.bottom) { + return this.bottom - p; + } + + return 0; + }, + + + isOutOfBound: function(axis, p) { + if (!Ext.isObject(axis)) { + if (axis == 'x') { + return this.isOutOfBoundX(p); + } else { + return this.isOutOfBoundY(p); + } + } else { + p = axis; + return (this.isOutOfBoundX(p.x) || this.isOutOfBoundY(p.y)); + } + }, + + + isOutOfBoundX: function(p) { + return (p < this.x || p > this.right); + }, + + + isOutOfBoundY: function(p) { + return (p < this.y || p > this.bottom); + }, + + + restrict: function(axis, p, factor) { + if (Ext.isObject(axis)) { + var newP; + + factor = p; + p = axis; + + if (p.copy) { + newP = p.copy(); + } + else { + newP = { + x: p.x, + y: p.y + }; + } + + newP.x = this.restrictX(p.x, factor); + newP.y = this.restrictY(p.y, factor); + return newP; + } else { + if (axis == 'x') { + return this.restrictX(p, factor); + } else { + return this.restrictY(p, factor); + } + } + }, + + + restrictX : function(p, factor) { + if (!factor) { + factor = 1; + } + + if (p <= this.x) { + p -= (p - this.x) * factor; + } + else if (p >= this.right) { + p -= (p - this.right) * factor; + } + return p; + }, + + + restrictY : function(p, factor) { + if (!factor) { + factor = 1; + } + + if (p <= this.y) { + p -= (p - this.y) * factor; + } + else if (p >= this.bottom) { + p -= (p - this.bottom) * factor; + } + return p; + }, + + + getSize: function() { + return { + width: this.right - this.x, + height: this.bottom - this.y + }; + }, + + + copy: function() { + return new this.self(this.y, this.right, this.bottom, this.x); + }, + + + copyFrom: function(p) { + var me = this; + me.top = me.y = me[1] = p.y; + me.right = p.right; + me.bottom = p.bottom; + me.left = me.x = me[0] = p.x; + + return this; + }, + + + toString: function() { + return "Region[" + this.top + "," + this.right + "," + this.bottom + "," + this.left + "]"; + }, + + + translateBy: function(x, y) { + if (arguments.length == 1) { + y = x.y; + x = x.x; + } + var me = this; + me.top = me.y += y; + me.right += x; + me.bottom += y; + me.left = me.x += x; + + return me; + }, + + + round: function() { + var me = this; + me.top = me.y = Math.round(me.y); + me.right = Math.round(me.right); + me.bottom = Math.round(me.bottom); + me.left = me.x = Math.round(me.x); + + return me; + }, + + + equals: function(region) { + return (this.top == region.top && this.right == region.right && this.bottom == region.bottom && this.left == region.left); + } +}); + + + + + +Ext.define('Ext.dd.DragDropManager', { + singleton: true, + + + + + + + alternateClassName: ['Ext.dd.DragDropMgr', 'Ext.dd.DDM'], + + + ids: {}, + + + handleIds: {}, + + + dragCurrent: null, + + + dragOvers: {}, + + + deltaX: 0, + + + deltaY: 0, + + + preventDefault: true, + + + stopPropagation: true, + + + initialized: false, + + + locked: false, + + + init: function() { + this.initialized = true; + }, + + + POINT: 0, + + + INTERSECT: 1, + + + mode: 0, + + + notifyOccluded: false, + + + dragCls: Ext.baseCSSPrefix + 'dd-drag-current', + + + _execOnAll: function(sMethod, args) { + var i, j, oDD; + for (i in this.ids) { + for (j in this.ids[i]) { + oDD = this.ids[i][j]; + if (! this.isTypeOfDD(oDD)) { + continue; + } + oDD[sMethod].apply(oDD, args); + } + } + }, + + + _onLoad: function() { + + this.init(); + + var Event = Ext.EventManager; + Event.on(document, "mouseup", this.handleMouseUp, this, true); + Event.on(document, "mousemove", this.handleMouseMove, this, true); + Event.on(window, "unload", this._onUnload, this, true); + Event.on(window, "resize", this._onResize, this, true); + + + }, + + + _onResize: function(e) { + this._execOnAll("resetConstraints", []); + }, + + + lock: function() { this.locked = true; }, + + + unlock: function() { this.locked = false; }, + + + isLocked: function() { return this.locked; }, + + + locationCache: {}, + + + useCache: true, + + + clickPixelThresh: 3, + + + clickTimeThresh: 350, + + + dragThreshMet: false, + + + clickTimeout: null, + + + startX: 0, + + + startY: 0, + + + regDragDrop: function(oDD, sGroup) { + if (!this.initialized) { this.init(); } + + if (!this.ids[sGroup]) { + this.ids[sGroup] = {}; + } + this.ids[sGroup][oDD.id] = oDD; + }, + + + removeDDFromGroup: function(oDD, sGroup) { + if (!this.ids[sGroup]) { + this.ids[sGroup] = {}; + } + + var obj = this.ids[sGroup]; + if (obj && obj[oDD.id]) { + delete obj[oDD.id]; + } + }, + + + _remove: function(oDD) { + for (var g in oDD.groups) { + if (g && this.ids[g] && this.ids[g][oDD.id]) { + delete this.ids[g][oDD.id]; + } + } + delete this.handleIds[oDD.id]; + }, + + + regHandle: function(sDDId, sHandleId) { + if (!this.handleIds[sDDId]) { + this.handleIds[sDDId] = {}; + } + this.handleIds[sDDId][sHandleId] = sHandleId; + }, + + + isDragDrop: function(id) { + return ( this.getDDById(id) ) ? true : false; + }, + + + getRelated: function(p_oDD, bTargetsOnly) { + var oDDs = [], + i, j, dd; + for (i in p_oDD.groups) { + for (j in this.ids[i]) { + dd = this.ids[i][j]; + if (! this.isTypeOfDD(dd)) { + continue; + } + if (!bTargetsOnly || dd.isTarget) { + oDDs[oDDs.length] = dd; + } + } + } + + return oDDs; + }, + + + isLegalTarget: function (oDD, oTargetDD) { + var targets = this.getRelated(oDD, true), + i, len; + for (i=0, len=targets.length;i me.clickPixelThresh || diffY > me.clickPixelThresh) { + me.startDrag(me.startX, me.startY); + } + } + + if (me.dragThreshMet) { + current.b4Drag(e); + current.onDrag(e); + if (!current.moveOnly) { + me.fireEvents(e, false); + } + } + + me.stopEvent(e); + + return true; + }, + + + fireEvents: function(e, isDrop) { + var me = this, + dragCurrent = me.dragCurrent, + dragEl, + oldDragElTop, + mousePoint = e.getPoint(), + overTarget, + overTargetEl, + allTargets = [], + oldOvers = [], + outEvts = [], + overEvts = [], + dropEvts = [], + enterEvts = [], + xy, + needsSort, + i, + len, + sGroup; + + + + if (!dragCurrent || dragCurrent.isLocked()) { + return; + } + + + + + + + + if (!me.notifyOccluded && (!Ext.supports.PointerEvents || Ext.isIE10m || Ext.isOpera) && !(dragCurrent.deltaX < 0 || dragCurrent.deltaY < 0)) { + dragEl = dragCurrent.getDragEl(); + oldDragElTop = dragEl.style.top; + dragEl.style.top = '-10000px'; + xy = e.getXY(); + e.target = document.elementFromPoint(xy[0], xy[1]); + dragEl.style.top = oldDragElTop; + } + + + + for (i in me.dragOvers) { + + overTarget = me.dragOvers[i]; + + if (!me.isTypeOfDD(overTarget)) { + continue; + } + + + if (me.notifyOccluded) { + if (!this.isOverTarget(mousePoint, overTarget, me.mode)) { + outEvts.push(overTarget); + } + } + + else { + if (!e.within(overTarget.getEl())) { + outEvts.push(overTarget); + } + } + + oldOvers[i] = true; + delete me.dragOvers[i]; + } + + + + + for (sGroup in dragCurrent.groups) { + + if ("string" != typeof sGroup) { + continue; + } + + + for (i in me.ids[sGroup]) { + overTarget = me.ids[sGroup][i]; + + + + + + + + if (me.isTypeOfDD(overTarget) && + (overTargetEl = overTarget.getEl()) && + (overTarget.isTarget) && + (!overTarget.isLocked()) && + (Ext.fly(overTargetEl).isVisible(true)) && + ((overTarget != dragCurrent) || (dragCurrent.ignoreSelf === false))) { + + + if (me.notifyOccluded) { + + + if ((overTarget.zIndex = me.getZIndex(overTargetEl)) !== -1) { + needsSort = true; + } + allTargets.push(overTarget); + } + + else { + if (e.within(overTarget.getEl())) { + allTargets.push(overTarget); + break; + } + } + } + } + } + + + if (needsSort) { + Ext.Array.sort(allTargets, me.byZIndex); + } + + + + for (i = 0, len = allTargets.length; i < len; i++) { + overTarget = allTargets[i]; + + + if (me.isOverTarget(mousePoint, overTarget, me.mode)) { + + if (isDrop) { + dropEvts.push( overTarget ); + + } else { + + + if (!oldOvers[overTarget.id]) { + enterEvts.push( overTarget ); + + } else { + overEvts.push( overTarget ); + } + me.dragOvers[overTarget.id] = overTarget; + } + + + if (!me.notifyOccluded) { + break; + } + } + } + + if (me.mode) { + if (outEvts.length) { + dragCurrent.b4DragOut(e, outEvts); + dragCurrent.onDragOut(e, outEvts); + } + + if (enterEvts.length) { + dragCurrent.onDragEnter(e, enterEvts); + } + + if (overEvts.length) { + dragCurrent.b4DragOver(e, overEvts); + dragCurrent.onDragOver(e, overEvts); + } + + if (dropEvts.length) { + dragCurrent.b4DragDrop(e, dropEvts); + dragCurrent.onDragDrop(e, dropEvts); + } + + } else { + + for (i=0, len=outEvts.length; i', + '
    ', + '{%this.renderBody(out, values)%}', + '
    ', + '', + '{%if (oh.getSuffixConfig!==Ext.emptyFn) {', + 'if(oc=oh.getSuffixConfig())dh.generateMarkup(oc, out)', + '}%}', + { + disableFormats: true, + definitions: 'var dh=Ext.DomHelper;' + } + ], + + constructor: function(config) { + var me = this, + type; + + me.callParent(arguments); + + + me.flexSortFn = Ext.Function.bind(me.flexSort, me); + + me.initOverflowHandler(); + + type = typeof me.padding; + if (type == 'string' || type == 'number') { + me.padding = Ext.util.Format.parseBox(me.padding); + me.padding.height = me.padding.top + me.padding.bottom; + me.padding.width = me.padding.left + me.padding.right; + } + }, + + + + _percentageRe: /^\s*(\d+(?:\.\d*)?)\s*[%]\s*$/, + + getItemSizePolicy: function (item, ownerSizeModel) { + var me = this, + policy = me.sizePolicy, + align = me.align, + flex = item.flex, + key = align, + names = me.names, + width = item[names.width], + height = item[names.height], + percentageRe = me._percentageRe, + percentageWidth = percentageRe.test(width), + isStretch = (align == 'stretch'), + isStretchMax = (align == 'stretchmax'), + constrain = me.constrainAlign; + + + if (!ownerSizeModel && (isStretch || flex || percentageWidth || (constrain && !isStretchMax))) { + ownerSizeModel = me.owner.getSizeModel(); + } + + if (isStretch) { + + + if (!percentageRe.test(height) && ownerSizeModel[names.height].shrinkWrap) { + key = 'stretchmax'; + + + + } + } else if (!isStretchMax) { + if (percentageRe.test(height)) { + + + key = 'stretch'; + } else if (constrain && !ownerSizeModel[names.height].shrinkWrap) { + + + key = 'stretchmax'; + } else { + key = ''; + } + } + + if (flex || percentageWidth) { + + + if (!ownerSizeModel[names.width].shrinkWrap) { + policy = policy.flex; + } + } + + return policy[key]; + }, + + flexSort: function (a, b) { + + + + + + var maxWidthName = this.names.maxWidth, + minWidthName = this.names.minWidth, + infiniteValue = Infinity, + aTarget = a.target, + bTarget = b.target, + result = 0, + aMin, bMin, aMax, bMax, + hasMin, hasMax; + + aMax = aTarget[maxWidthName] || infiniteValue; + bMax = bTarget[maxWidthName] || infiniteValue; + aMin = aTarget[minWidthName] || 0; + bMin = bTarget[minWidthName] || 0; + + hasMin = isFinite(aMin) || isFinite(bMin); + hasMax = isFinite(aMax) || isFinite(bMax); + + if (hasMin || hasMax) { + if (hasMax) { + result = aMax - bMax; + } + + + + + if (result === 0 && hasMin) { + result = bMin - aMin; + } + } + return result; + }, + + isItemBoxParent: function (itemContext) { + return true; + }, + + isItemShrinkWrap: function (item) { + return true; + }, + + roundFlex: function(width) { + return Math.ceil(width); + }, + + + beginCollapse: function(child) { + var me = this; + + if (me.direction === 'vertical' && child.collapsedVertical()) { + child.collapseMemento.capture(['flex']); + delete child.flex; + } else if (me.direction === 'horizontal' && child.collapsedHorizontal()) { + child.collapseMemento.capture(['flex']); + delete child.flex; + } + }, + + + beginExpand: function(child) { + + + child.collapseMemento.restore(['flex']); + }, + + beginLayout: function (ownerContext) { + var me = this, + owner = me.owner, + smp = owner.stretchMaxPartner, + style = me.innerCt.dom.style, + names = me.names; + + ownerContext.boxNames = names; + + + + me.overflowHandler.beginLayout(ownerContext); + + + if (typeof smp === 'string') { + smp = Ext.getCmp(smp) || owner.query(smp)[0]; + } + + ownerContext.stretchMaxPartner = smp && ownerContext.context.getCmp(smp); + + me.callParent(arguments); + + ownerContext.innerCtContext = ownerContext.getEl('innerCt', me); + + + me.scrollParallel = owner.scrollFlags[names.x]; + + + me.scrollPerpendicular = owner.scrollFlags[names.y]; + + + if (me.scrollParallel) { + me.scrollPos = owner.getTargetEl().dom[names.scrollLeft]; + } + + + style.width = ''; + style.height = ''; + }, + + beginLayoutCycle: function (ownerContext, firstCycle) { + var me = this, + align = me.align, + names = ownerContext.boxNames, + pack = me.pack, + heightModelName = names.heightModel; + + + + me.overflowHandler.beginLayoutCycle(ownerContext, firstCycle); + + me.callParent(arguments); + + + + + ownerContext.parallelSizeModel = ownerContext[names.widthModel]; + ownerContext.perpendicularSizeModel = ownerContext[heightModelName]; + + ownerContext.boxOptions = { + align: align = { + stretch: align == 'stretch', + stretchmax: align == 'stretchmax', + center: align == names.center, + bottom: align == names.afterY + }, + pack: pack = { + center: pack == 'center', + end: pack == 'end' + } + }; + + + + + + + + if (align.stretch && ownerContext.perpendicularSizeModel.shrinkWrap) { + align.stretchmax = true; + align.stretch = false; + } + + + align.nostretch = !(align.stretch || align.stretchmax); + + + + + + if (ownerContext.parallelSizeModel.shrinkWrap) { + pack.center = pack.end = false; + } + + me.cacheFlexes(ownerContext); + + + + + + + + me.targetEl.setWidth(20000); + }, + + + cacheFlexes: function (ownerContext) { + var me = this, + names = ownerContext.boxNames, + widthModelName = names.widthModel, + heightModelName = names.heightModel, + nostretch = ownerContext.boxOptions.align.nostretch, + totalFlex = 0, + childItems = ownerContext.childItems, + i = childItems.length, + flexedItems = [], + minWidth = 0, + minWidthName = names.minWidth, + percentageRe = me._percentageRe, + percentageWidths = 0, + percentageHeights = 0, + child, childContext, flex, match; + + while (i--) { + childContext = childItems[i]; + child = childContext.target; + + + + + if (childContext[widthModelName].calculated) { + childContext.flex = flex = child.flex; + if (flex) { + totalFlex += flex; + flexedItems.push(childContext); + minWidth += child[minWidthName] || 0; + } else { + match = percentageRe.exec(child[names.width]); + childContext.percentageParallel = parseFloat(match[1]) / 100; + ++percentageWidths; + } + } + + + + if (nostretch && childContext[heightModelName].calculated) { + + + match = percentageRe.exec(child[names.height]); + childContext.percentagePerpendicular = parseFloat(match[1]) / 100; + ++percentageHeights; + } + } + + ownerContext.flexedItems = flexedItems; + ownerContext.flexedMinSize = minWidth; + ownerContext.totalFlex = totalFlex; + ownerContext.percentageWidths = percentageWidths; + ownerContext.percentageHeights = percentageHeights; + + + + + Ext.Array.sort(flexedItems, me.flexSortFn); + }, + + calculate: function(ownerContext) { + var me = this, + targetSize = me.getContainerSize(ownerContext), + names = ownerContext.boxNames, + state = ownerContext.state, + plan = state.boxPlan || (state.boxPlan = {}), + targetContext = ownerContext.targetContext; + + plan.targetSize = targetSize; + + + if (!ownerContext.parallelSizeModel.shrinkWrap && !targetSize[names.gotWidth]) { + me.done = false; + return; + } + + if (!state.parallelDone) { + state.parallelDone = me.calculateParallel(ownerContext, names, plan); + } + + if (!state.perpendicularDone) { + state.perpendicularDone = me.calculatePerpendicular(ownerContext, names, plan); + } + + if (state.parallelDone && state.perpendicularDone) { + + + + + if (me.owner.dock && (Ext.isIE7m || Ext.isIEQuirks) && !me.owner.width && !me.horizontal) { + plan.isIEVerticalDock = true; + plan.calculatedWidth = plan.maxSize + ownerContext.getPaddingInfo().width + ownerContext.getFrameInfo().width; + if (targetContext !== ownerContext) { + + + + plan.calculatedWidth += targetContext.getPaddingInfo().width; + } + } + + me.publishInnerCtSize(ownerContext, me.reserveOffset ? me.availableSpaceOffset : 0); + + + if (me.done && (ownerContext.childItems.length > 1 || ownerContext.stretchMaxPartner) && ownerContext.boxOptions.align.stretchmax && !state.stretchMaxDone) { + me.calculateStretchMax(ownerContext, names, plan); + state.stretchMaxDone = true; + } + me.overflowHandler.calculate(ownerContext); + } else { + me.done = false; + } + }, + + calculateParallel: function(ownerContext, names, plan) { + var me = this, + widthName = names.width, + childItems = ownerContext.childItems, + beforeXName = names.beforeX, + afterXName = names.afterX, + setWidthName = names.setWidth, + childItemsLength = childItems.length, + flexedItems = ownerContext.flexedItems, + flexedItemsLength = flexedItems.length, + pack = ownerContext.boxOptions.pack, + padding = me.padding, + containerWidth = plan.targetSize[widthName], + totalMargin = 0, + left = padding[beforeXName], + nonFlexWidth = left + padding[afterXName] + me.scrollOffset + + (me.reserveOffset ? me.availableSpaceOffset : 0), + scrollbarWidth = Ext.getScrollbarSize()[names.width], + i, childMargins, remainingWidth, remainingFlex, childContext, flex, flexedWidth, + contentWidth, mayNeedScrollbarAdjust, childWidth, percentageSpace; + + + + + + + + if (scrollbarWidth && + me.scrollPerpendicular && + ownerContext.parallelSizeModel.shrinkWrap && + !ownerContext.boxOptions.align.stretch && + !ownerContext.perpendicularSizeModel.shrinkWrap) { + + + + + if (!ownerContext.state.perpendicularDone) { + return false; + } + mayNeedScrollbarAdjust = true; + } + + + for (i = 0; i < childItemsLength; ++i) { + childContext = childItems[i]; + childMargins = childContext.marginInfo || childContext.getMarginInfo(); + + totalMargin += childMargins[widthName]; + + if (!childContext[names.widthModel].calculated) { + childWidth = childContext.getProp(widthName); + nonFlexWidth += childWidth; + if (isNaN(nonFlexWidth)) { + return false; + } + } + } + + nonFlexWidth += totalMargin; + if (ownerContext.percentageWidths) { + percentageSpace = containerWidth - totalMargin; + if (isNaN(percentageSpace)) { + return false; + } + + for (i = 0; i < childItemsLength; ++i) { + childContext = childItems[i]; + if (childContext.percentageParallel) { + childWidth = Math.ceil(percentageSpace * childContext.percentageParallel); + childWidth = childContext.setWidth(childWidth); + nonFlexWidth += childWidth; + } + } + } + + + + if (ownerContext.parallelSizeModel.shrinkWrap) { + plan.availableSpace = 0; + plan.tooNarrow = false; + } else { + plan.availableSpace = containerWidth - nonFlexWidth; + + + plan.tooNarrow = plan.availableSpace < ownerContext.flexedMinSize; + if (plan.tooNarrow && Ext.getScrollbarSize()[names.height] && me.scrollParallel && ownerContext.state.perpendicularDone) { + ownerContext.state.perpendicularDone = false; + for (i = 0; i < childItemsLength; ++i) { + childItems[i].invalidate(); + } + } + } + + contentWidth = nonFlexWidth; + remainingWidth = plan.availableSpace; + remainingFlex = ownerContext.totalFlex; + + + for (i = 0; i < flexedItemsLength; i++) { + childContext = flexedItems[i]; + flex = childContext.flex; + flexedWidth = me.roundFlex((flex / remainingFlex) * remainingWidth); + flexedWidth = childContext[setWidthName](flexedWidth); + + + + contentWidth += flexedWidth; + + remainingWidth = Math.max(0, remainingWidth - flexedWidth); + remainingFlex -= flex; + } + + if (pack.center) { + left += remainingWidth / 2; + + + if (left < 0) { + left = 0; + } + } else if (pack.end) { + left += remainingWidth; + } + + + for (i = 0; i < childItemsLength; ++i) { + childContext = childItems[i]; + childMargins = childContext.marginInfo; + + left += childMargins[beforeXName]; + + childContext.setProp(names.x, left); + + + + + + left += childMargins[afterXName] + childContext.props[widthName]; + } + + contentWidth += ownerContext.targetContext.getPaddingInfo()[widthName]; + + + ownerContext.state.contentWidth = contentWidth; + + + + if (mayNeedScrollbarAdjust && + (ownerContext.peek(names.contentHeight) > plan.targetSize[names.height])) { + contentWidth += scrollbarWidth; + ownerContext[names.hasOverflowY] = true; + + + ownerContext.target.componentLayout[names.setWidthInDom] = true; + + + + + + ownerContext[names.invalidateScrollY] = Ext.isStrict && Ext.isIE8; + } + ownerContext[names.setContentWidth](contentWidth); + + return true; + }, + + calculatePerpendicular: function(ownerContext, names, plan) { + var me = this, + heightShrinkWrap = ownerContext.perpendicularSizeModel.shrinkWrap, + targetSize = plan.targetSize, + childItems = ownerContext.childItems, + childItemsLength = childItems.length, + mmax = Math.max, + heightName = names.height, + setHeightName = names.setHeight, + beforeYName = names.beforeY, + topPositionName = names.y, + padding = me.padding, + top = padding[beforeYName], + availHeight = targetSize[heightName] - top - padding[names.afterY], + align = ownerContext.boxOptions.align, + isStretch = align.stretch, + isStretchMax = align.stretchmax, + isCenter = align.center, + isBottom = align.bottom, + constrain = me.constrainAlign, + maxHeight = 0, + hasPercentageSizes = 0, + onBeforeInvalidateChild = me.onBeforeConstrainInvalidateChild, + onAfterInvalidateChild = me.onAfterConstrainInvalidateChild, + scrollbarHeight = Ext.getScrollbarSize().height, + childTop, i, childHeight, childMargins, diff, height, childContext, + stretchMaxPartner, stretchMaxChildren, shrinkWrapParallelOverflow, + percentagePerpendicular; + + if (isStretch || ((isCenter || isBottom) && !heightShrinkWrap)) { + if (isNaN(availHeight)) { + return false; + } + } + + + + + + + + if (me.scrollParallel && plan.tooNarrow) { + if (heightShrinkWrap) { + shrinkWrapParallelOverflow = true; + } else { + availHeight -= scrollbarHeight; + plan.targetSize[heightName] -= scrollbarHeight; + } + } + + if (isStretch) { + height = availHeight; + } else { + for (i = 0; i < childItemsLength; i++) { + childContext = childItems[i]; + childMargins = (childContext.marginInfo || childContext.getMarginInfo())[heightName]; + + if (!(percentagePerpendicular = childContext.percentagePerpendicular)) { + childHeight = childContext.getProp(heightName); + } else { + ++hasPercentageSizes; + if (heightShrinkWrap) { + + + continue; + } else { + childHeight = percentagePerpendicular * availHeight - childMargins; + childHeight = childContext[names.setHeight](childHeight); + } + } + + + + + + + if (!heightShrinkWrap && constrain && childContext[names.heightModel].shrinkWrap && childHeight > availHeight) { + childContext.invalidate({ + before: onBeforeInvalidateChild, + after: onAfterInvalidateChild, + layout: me, + childHeight: availHeight, + names: names + }); + + + + ownerContext.state.parallelDone = false; + } + + + if (isNaN(maxHeight = mmax(maxHeight, childHeight + childMargins, + childContext.target[names.minHeight] || 0))) { + return false; + } + } + + + + if (shrinkWrapParallelOverflow) { + maxHeight += scrollbarHeight; + ownerContext[names.hasOverflowX] = true; + + + ownerContext.target.componentLayout[names.setHeightInDom] = true; + + + + + + ownerContext[names.invalidateScrollX] = Ext.isStrict && Ext.isIE8; + } + + + + stretchMaxPartner = ownerContext.stretchMaxPartner; + if (stretchMaxPartner) { + + ownerContext.setProp('maxChildHeight', maxHeight); + stretchMaxChildren = stretchMaxPartner.childItems; + + if (stretchMaxChildren && stretchMaxChildren.length) { + maxHeight = mmax(maxHeight, stretchMaxPartner.getProp('maxChildHeight')); + if (isNaN(maxHeight)) { + return false; + } + } + } + + ownerContext[names.setContentHeight](maxHeight + me.padding[heightName] + + ownerContext.targetContext.getPaddingInfo()[heightName]); + + + + + if (shrinkWrapParallelOverflow) { + maxHeight -= scrollbarHeight; + } + plan.maxSize = maxHeight; + + if (isStretchMax) { + height = maxHeight; + } else if (isCenter || isBottom || hasPercentageSizes) { + if (constrain) { + height = heightShrinkWrap ? maxHeight : availHeight; + } else { + height = heightShrinkWrap ? maxHeight : mmax(availHeight, maxHeight); + } + + + + + + height -= ownerContext.innerCtContext.getBorderInfo()[heightName]; + } + } + + for (i = 0; i < childItemsLength; i++) { + childContext = childItems[i]; + childMargins = childContext.marginInfo || childContext.getMarginInfo(); + + childTop = top + childMargins[beforeYName]; + + if (isStretch) { + childContext[setHeightName](height - childMargins[heightName]); + } else { + percentagePerpendicular = childContext.percentagePerpendicular; + if (heightShrinkWrap && percentagePerpendicular) { + childMargins = childContext.marginInfo || childContext.getMarginInfo(); + childHeight = percentagePerpendicular * height - childMargins[heightName]; + childHeight = childContext.setHeight(childHeight); + } + + if (isCenter) { + diff = height - childContext.props[heightName]; + if (diff > 0) { + childTop = top + Math[me.alignRoundingMethod](diff / 2); + } + } else if (isBottom) { + childTop = mmax(0, height - childTop - childContext.props[heightName]); + } + } + + childContext.setProp(topPositionName, childTop); + } + + return true; + }, + + onBeforeConstrainInvalidateChild: function(childContext, options){ + + var heightModelName = options.names.heightModel; + if (!childContext[heightModelName].constrainedMin) { + + + childContext[heightModelName] = Ext.layout.SizeModel.calculated; + } + }, + + onAfterConstrainInvalidateChild: function(childContext, options){ + + var names = options.names; + + + + + + + childContext.setProp(names.beforeY, 0); + if (childContext[names.heightModel].calculated) { + childContext[names.setHeight](options.childHeight); + } + }, + + calculateStretchMax: function (ownerContext, names, plan) { + var me = this, + heightName = names.height, + widthName = names.width, + childItems = ownerContext.childItems, + length = childItems.length, + height = plan.maxSize, + onBeforeStretchMaxInvalidateChild = me.onBeforeStretchMaxInvalidateChild, + onAfterStretchMaxInvalidateChild = me.onAfterStretchMaxInvalidateChild, + childContext, props, i, childHeight; + + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + + props = childContext.props; + childHeight = height - childContext.getMarginInfo()[heightName]; + + if (childHeight != props[heightName] || + childContext[names.heightModel].constrained) { + + + + + + + + childContext.invalidate({ + before: onBeforeStretchMaxInvalidateChild, + after: onAfterStretchMaxInvalidateChild, + layout: me, + + childWidth: props[widthName], + + childHeight: childHeight, + childX: props.x, + childY: props.y, + names: names + }); + } + } + }, + + onBeforeStretchMaxInvalidateChild: function (childContext, options) { + + var heightModelName = options.names.heightModel; + + + + + + if (!childContext[heightModelName].constrainedMax) { + + + childContext[heightModelName] = Ext.layout.SizeModel.calculated; + } + }, + + onAfterStretchMaxInvalidateChild: function (childContext, options) { + + var names = options.names, + childHeight = options.childHeight, + childWidth = options.childWidth; + + childContext.setProp('x', options.childX); + childContext.setProp('y', options.childY); + + if (childContext[names.heightModel].calculated) { + + + childContext[names.setHeight](childHeight); + } + + if (childContext[names.widthModel].calculated) { + childContext[names.setWidth](childWidth); + } + }, + + completeLayout: function(ownerContext) { + var me = this, + names = ownerContext.boxNames, + invalidateScrollX = ownerContext.invalidateScrollX, + invalidateScrollY = ownerContext.invalidateScrollY, + dom, el, overflowX, overflowY, styles; + + me.overflowHandler.completeLayout(ownerContext); + + if (invalidateScrollX || invalidateScrollY) { + el = me.getTarget(); + dom = el.dom; + styles = dom.style; + + if (invalidateScrollX) { + + overflowX = el.getStyle('overflowX'); + if (overflowX == 'auto') { + + overflowX = styles.overflowX; + styles.overflowX = 'scroll'; + } else { + invalidateScrollX = false; + } + } + + if (invalidateScrollY) { + + overflowY = el.getStyle('overflowY'); + if (overflowY == 'auto') { + + overflowY = styles.overflowY; + styles.overflowY = 'scroll'; + } else { + invalidateScrollY = false; + } + } + + if (invalidateScrollX || invalidateScrollY) { + + dom.scrollWidth; + + if (invalidateScrollX) { + styles.overflowX = overflowX; + } + if (invalidateScrollY) { + styles.overflowY = overflowY; + } + } + } + + + if (me.scrollParallel) { + me.owner.getTargetEl().dom[names.scrollLeft] = me.scrollPos; + } + }, + + finishedLayout: function(ownerContext) { + this.overflowHandler.finishedLayout(ownerContext); + this.callParent(arguments); + + + + + + + + + + + this.targetEl.setWidth(ownerContext.innerCtContext.props.width); + }, + + publishInnerCtSize: function(ownerContext, reservedSpace) { + var me = this, + names = ownerContext.boxNames, + heightName = names.height, + widthName = names.width, + align = ownerContext.boxOptions.align, + dock = me.owner.dock, + padding = me.padding, + plan = ownerContext.state.boxPlan, + targetSize = plan.targetSize, + height = targetSize[heightName], + innerCtContext = ownerContext.innerCtContext, + innerCtWidth = (ownerContext.parallelSizeModel.shrinkWrap || (plan.tooNarrow && me.scrollParallel) + ? ownerContext.state.contentWidth - ownerContext.targetContext.getPaddingInfo()[widthName] + : targetSize[widthName]) - (reservedSpace || 0), + innerCtHeight; + + if (align.stretch) { + innerCtHeight = height; + } else { + innerCtHeight = plan.maxSize + padding[names.beforeY] + padding[names.afterY] + innerCtContext.getBorderInfo()[heightName]; + + if (!ownerContext.perpendicularSizeModel.shrinkWrap && (align.center || align.bottom)) { + innerCtHeight = Math.max(height, innerCtHeight); + } + } + + innerCtContext[names.setWidth](innerCtWidth); + innerCtContext[names.setHeight](innerCtHeight); + + + if (isNaN(innerCtWidth + innerCtHeight)) { + me.done = false; + } + + + + + + + + if (plan.calculatedWidth && (dock == 'left' || dock == 'right')) { + + ownerContext.setWidth(plan.calculatedWidth, true, true); + } + }, + + onRemove: function(comp){ + var me = this; + me.callParent(arguments); + if (me.overflowHandler) { + me.overflowHandler.onRemove(comp); + } + if (comp.layoutMarginCap == me.id) { + delete comp.layoutMarginCap; + } + }, + + + initOverflowHandler: function() { + var me = this, + handler = me.overflowHandler, + handlerType, + constructor; + + if (typeof handler == 'string') { + handler = { + type: handler + }; + } + + handlerType = 'None'; + if (handler && handler.type !== undefined) { + handlerType = handler.type; + } + + constructor = Ext.layout.container.boxOverflow[handlerType]; + if (constructor[me.type]) { + constructor = constructor[me.type]; + } + + me.overflowHandler = Ext.create('Ext.layout.container.boxOverflow.' + handlerType, me, handler); + }, + + + + getRenderTarget: function() { + return this.targetEl; + }, + + + + getElementTarget: function() { + return this.innerCt; + }, + + + + destroy: function() { + Ext.destroy(this.innerCt, this.overflowHandler); + this.callParent(arguments); + }, + + getRenderData: function() { + var data = this.callParent(); + + data.targetElCls = this.targetElCls; + + return data; + } +}); + + +Ext.define('Ext.layout.container.HBox', { + + + + alias: ['layout.hbox'], + extend: Ext.layout.container.Box , + alternateClassName: 'Ext.layout.HBoxLayout', + + + + + align: 'top', + + + + + constrainAlign: false, + + type : 'hbox', + + direction: 'horizontal', + + horizontal: true, + + names: { + + beforeX: 'left', + leftCap: 'Left', + afterX: 'right', + width: 'width', + contentWidth: 'contentWidth', + minWidth: 'minWidth', + maxWidth: 'maxWidth', + widthCap: 'Width', + widthModel: 'widthModel', + widthIndex: 0, + x: 'x', + scrollLeft: 'scrollLeft', + overflowX: 'overflowX', + hasOverflowX: 'hasOverflowX', + invalidateScrollX: 'invalidateScrollX', + parallelMargins: 'lr', + + + center: 'middle', + beforeY: 'top', + afterY: 'bottom', + height: 'height', + contentHeight: 'contentHeight', + minHeight: 'minHeight', + maxHeight: 'maxHeight', + heightCap: 'Height', + heightModel: 'heightModel', + heightIndex: 1, + y: 'y', + scrollTop: 'scrollTop', + overflowY: 'overflowY', + hasOverflowY: 'hasOverflowY', + invalidateScrollY: 'invalidateScrollY', + perpendicularMargins: 'tb', + + + getWidth: 'getWidth', + getHeight: 'getHeight', + setWidth: 'setWidth', + setHeight: 'setHeight', + gotWidth: 'gotWidth', + gotHeight: 'gotHeight', + setContentWidth: 'setContentWidth', + setContentHeight: 'setContentHeight', + setWidthInDom: 'setWidthInDom', + setHeightInDom: 'setHeightInDom' + }, + + sizePolicy: { + flex: { + '': { + readsWidth : 0, + readsHeight: 1, + setsWidth : 1, + setsHeight : 0 + }, + stretch: { + readsWidth : 0, + readsHeight: 0, + setsWidth : 1, + setsHeight : 1 + }, + stretchmax: { + readsWidth : 0, + readsHeight: 1, + setsWidth : 1, + setsHeight : 1 + } + }, + '': { + readsWidth : 1, + readsHeight: 1, + setsWidth : 0, + setsHeight : 0 + }, + stretch: { + readsWidth : 1, + readsHeight: 0, + setsWidth : 0, + setsHeight : 1 + }, + stretchmax: { + readsWidth : 1, + readsHeight: 1, + setsWidth : 0, + setsHeight : 1 + } + } +}); + + +Ext.define('Ext.layout.container.VBox', { + + + + alias: ['layout.vbox'], + extend: Ext.layout.container.Box , + alternateClassName: 'Ext.layout.VBoxLayout', + + + + + align : 'left', + + + + + constrainAlign: false, + + type: 'vbox', + + direction: 'vertical', + + horizontal: false, + + names: { + + beforeX: 'top', + leftCap: 'Top', + afterX: 'bottom', + width: 'height', + contentWidth: 'contentHeight', + minWidth: 'minHeight', + maxWidth: 'maxHeight', + widthCap: 'Height', + widthModel: 'heightModel', + widthIndex: 1, + x: 'y', + scrollLeft: 'scrollTop', + overflowX: 'overflowY', + hasOverflowX: 'hasOverflowY', + invalidateScrollX: 'invalidateScrollY', + parallelMargins: 'tb', + + + center: 'center', + beforeY: 'left', + afterY: 'right', + height: 'width', + contentHeight: 'contentWidth', + minHeight: 'minWidth', + maxHeight: 'maxWidth', + heightCap: 'Width', + heightModel: 'widthModel', + heightIndex: 0, + y: 'x', + scrollTop: 'scrollLeft', + overflowY: 'overflowX', + hasOverflowY: 'hasOverflowX', + invalidateScrollY: 'invalidateScrollX', + perpendicularMargins: 'lr', + + + getWidth: 'getHeight', + getHeight: 'getWidth', + setWidth: 'setHeight', + setHeight: 'setWidth', + gotWidth: 'gotHeight', + gotHeight: 'gotWidth', + setContentWidth: 'setContentHeight', + setContentHeight: 'setContentWidth', + setWidthInDom: 'setHeightInDom', + setHeightInDom: 'setWidthInDom' + }, + + sizePolicy: { + flex: { + '': { + readsWidth : 1, + readsHeight: 0, + setsWidth : 0, + setsHeight : 1 + }, + stretch: { + readsWidth : 0, + readsHeight: 0, + setsWidth : 1, + setsHeight : 1 + }, + stretchmax: { + readsWidth : 1, + readsHeight: 0, + setsWidth : 1, + setsHeight : 1 + } + }, + '': { + readsWidth : 1, + readsHeight: 1, + setsWidth : 0, + setsHeight : 0 + }, + stretch: { + readsWidth : 0, + readsHeight: 1, + setsWidth : 1, + setsHeight : 0 + }, + stretchmax: { + readsWidth : 1, + readsHeight: 1, + setsWidth : 1, + setsHeight : 0 + } + } +}); + + +Ext.define('Ext.toolbar.Toolbar', { + extend: Ext.container.Container , + + + + + + + + + alias: 'widget.toolbar', + alternateClassName: 'Ext.Toolbar', + + + isToolbar: true, + baseCls : Ext.baseCSSPrefix + 'toolbar', + ariaRole : 'toolbar', + + defaultType: 'button', + + + vertical: false, + + + + + enableOverflow: false, + + + menuTriggerCls: Ext.baseCSSPrefix + 'toolbar-more-icon', + + + + + trackMenus: true, + + itemCls: Ext.baseCSSPrefix + 'toolbar-item', + + statics: { + shortcuts: { + '-' : 'tbseparator', + ' ' : 'tbspacer' + }, + + shortcutsHV: { + + 0: { + '->': { xtype: 'tbfill', height: 0 } + }, + + 1: { + '->': { xtype: 'tbfill', width: 0 } + } + } + }, + + initComponent: function() { + var me = this; + + + if (!me.layout && me.enableOverflow) { + me.layout = { overflowHandler: 'Menu' }; + } + + if (me.dock === 'right' || me.dock === 'left') { + me.vertical = true; + } + + me.layout = Ext.applyIf(Ext.isString(me.layout) ? { + type: me.layout + } : me.layout || {}, { + type: me.vertical ? 'vbox' : 'hbox', + align: me.vertical ? 'stretchmax' : 'middle' + }); + + if (me.vertical) { + me.addClsWithUI('vertical'); + } + + + if (me.ui === 'footer') { + me.ignoreBorderManagement = true; + } + + me.callParent(); + + + me.addEvents('overflowchange'); + }, + + getRefItems: function(deep) { + var me = this, + items = me.callParent(arguments), + layout = me.layout, + handler; + + if (deep && me.enableOverflow) { + handler = layout.overflowHandler; + if (handler && handler.menu) { + items = items.concat(handler.menu.getRefItems(deep)); + } + } + return items; + }, + + + + + + + lookupComponent: function(c) { + var args = arguments; + if (typeof c == 'string') { + var T = Ext.toolbar.Toolbar, + shortcut = T.shortcutsHV[this.vertical ? 1 : 0][c] || T.shortcuts[c]; + + if (typeof shortcut == 'string') { + c = { + xtype: shortcut + }; + } else if (shortcut) { + c = Ext.apply({}, shortcut); + } else { + c = { + xtype: 'tbtext', + text: c + }; + } + + this.applyDefaults(c); + + + args = [c]; + } + + return this.callParent(args); + }, + + + applyDefaults: function(c) { + if (!Ext.isString(c)) { + c = this.callParent(arguments); + } + return c; + }, + + + trackMenu: function(item, remove) { + if (this.trackMenus && item.menu) { + var method = remove ? 'mun' : 'mon', + me = this; + + me[method](item, 'mouseover', me.onButtonOver, me); + me[method](item, 'menushow', me.onButtonMenuShow, me); + me[method](item, 'menuhide', me.onButtonMenuHide, me); + } + }, + + + onBeforeAdd: function(component) { + var me = this, + isButton = component.isButton; + + if (isButton && me.defaultButtonUI && component.ui === 'default' && + !component.hasOwnProperty('ui')) { + component.ui = me.defaultButtonUI; + } else if ((isButton || component.isFormField) && me.ui !== 'footer') { + component.ui = component.ui + '-toolbar'; + } + + + if (component instanceof Ext.toolbar.Separator) { + component.setUI((me.vertical) ? 'vertical' : 'horizontal'); + } + + me.callParent(arguments); + }, + + + onAdd: function(component) { + this.callParent(arguments); + this.trackMenu(component); + }, + + + onRemove: function(c) { + this.callParent(arguments); + this.trackMenu(c, true); + }, + + getChildItemsToDisable: function() { + return this.items.getRange(); + }, + + + onButtonOver: function(btn){ + if (this.activeMenuBtn && this.activeMenuBtn != btn) { + this.activeMenuBtn.hideMenu(); + btn.showMenu(); + this.activeMenuBtn = btn; + } + }, + + + onButtonMenuShow: function(btn) { + this.activeMenuBtn = btn; + }, + + + onButtonMenuHide: function(btn) { + delete this.activeMenuBtn; + } +}); + + +Ext.define('Ext.layout.component.Dock', { + + + + extend: Ext.layout.component.Component , + + alias: 'layout.dock', + + alternateClassName: 'Ext.layout.component.AbstractDock', + + + + type: 'dock', + + horzAxisProps: { + name: 'horz', + oppositeName: 'vert', + dockBegin: 'left', + dockEnd: 'right', + horizontal: true, + marginBegin: 'margin-left', + maxSize: 'maxWidth', + minSize: 'minWidth', + pos: 'x', + setSize: 'setWidth', + shrinkWrapDock: 'shrinkWrapDockWidth', + size: 'width', + sizeModel: 'widthModel' + }, + + vertAxisProps: { + name: 'vert', + oppositeName: 'horz', + dockBegin: 'top', + dockEnd: 'bottom', + horizontal: false, + marginBegin: 'margin-top', + maxSize: 'maxHeight', + minSize: 'minHeight', + pos: 'y', + setSize: 'setHeight', + shrinkWrapDock: 'shrinkWrapDockHeight', + size: 'height', + sizeModel: 'heightModel' + }, + + initializedBorders: -1, + + horizontalCollapsePolicy: { width: true, x: true }, + + verticalCollapsePolicy: { height: true, y: true }, + + finishRender: function () { + var me = this, + target, items; + + me.callParent(); + + target = me.getRenderTarget(); + items = me.getDockedItems(); + + me.finishRenderItems(target, items); + }, + + isItemBoxParent: function (itemContext) { + return true; + }, + + isItemShrinkWrap: function (item) { + return true; + }, + + noBorderClasses: [ + Ext.baseCSSPrefix + 'docked-noborder-top', + Ext.baseCSSPrefix + 'docked-noborder-right', + Ext.baseCSSPrefix + 'docked-noborder-bottom', + Ext.baseCSSPrefix + 'docked-noborder-left' + ], + + noBorderClassesSides: { + top: Ext.baseCSSPrefix + 'docked-noborder-top', + right: Ext.baseCSSPrefix + 'docked-noborder-right', + bottom: Ext.baseCSSPrefix + 'docked-noborder-bottom', + left: Ext.baseCSSPrefix + 'docked-noborder-left' + }, + + borderWidthProps: { + top: 'border-top-width', + right: 'border-right-width', + bottom: 'border-bottom-width', + left: 'border-left-width' + }, + + handleItemBorders: function() { + var me = this, + owner = me.owner, + borders, docked, + lastItems = me.lastDockedItems, + oldBorders = me.borders, + currentGeneration = owner.dockedItems.generation, + noBorderClassesSides = me.noBorderClassesSides, + borderWidthProps = me.borderWidthProps, + i, ln, item, dock, side, borderItem, + collapsed = me.collapsed; + + if (me.initializedBorders == currentGeneration || (owner.border && !owner.manageBodyBorders)) { + return; + } + + me.initializedBorders = currentGeneration; + + + me.collapsed = false; + me.lastDockedItems = docked = me.getLayoutItems(); + me.collapsed = collapsed; + + borders = { top: [], right: [], bottom: [], left: [] }; + + for (i = 0, ln = docked.length; i < ln; i++) { + item = docked[i]; + dock = item.dock; + + if (item.ignoreBorderManagement) { + continue; + } + + if (!borders[dock].satisfied) { + borders[dock].push(item); + borders[dock].satisfied = true; + } + + if (!borders.top.satisfied && dock !== 'bottom') { + borders.top.push(item); + } + if (!borders.right.satisfied && dock !== 'left') { + borders.right.push(item); + } + if (!borders.bottom.satisfied && dock !== 'top') { + borders.bottom.push(item); + } + if (!borders.left.satisfied && dock !== 'right') { + borders.left.push(item); + } + } + + if (lastItems) { + for (i = 0, ln = lastItems.length; i < ln; i++) { + item = lastItems[i]; + if (!item.isDestroyed && !item.ignoreBorderManagement && !owner.manageBodyBorders) { + item.removeCls(me.noBorderClasses); + } + } + } + + if (oldBorders) { + for (side in oldBorders) { + if (owner.manageBodyBorders && oldBorders[side].satisfied) { + owner.setBodyStyle(borderWidthProps[side], ''); + } + } + } + + for (side in borders) { + ln = borders[side].length; + if (!owner.manageBodyBorders) { + for (i = 0; i < ln; i++) { + borders[side][i].addCls(noBorderClassesSides[side]); + } + if ((!borders[side].satisfied && !owner.bodyBorder) || owner.bodyBorder === false) { + owner.addBodyCls(noBorderClassesSides[side]); + } + } + else if (borders[side].satisfied) { + owner.setBodyStyle(borderWidthProps[side], '1px'); + } + } + + me.borders = borders; + }, + + beforeLayoutCycle: function (ownerContext) { + var me = this, + owner = me.owner, + shrinkWrap = me.sizeModels.shrinkWrap, + shrinkWrapDock = owner.shrinkWrapDock, + collapsedHorz, collapsedVert; + + if (owner.collapsed) { + if (owner.collapsedVertical()) { + collapsedVert = true; + ownerContext.measureDimensions = 1; + } else { + collapsedHorz = true; + ownerContext.measureDimensions = 2; + } + } + + ownerContext.collapsedVert = collapsedVert; + ownerContext.collapsedHorz = collapsedHorz; + + + + + + if (collapsedVert) { + ownerContext.heightModel = shrinkWrap; + } else if (collapsedHorz) { + ownerContext.widthModel = shrinkWrap; + } + + shrinkWrapDock = shrinkWrapDock === true ? 3 : (shrinkWrapDock || 0); + ownerContext.shrinkWrapDockHeight = (shrinkWrapDock & 1) && ownerContext.heightModel.shrinkWrap; + ownerContext.shrinkWrapDockWidth = (shrinkWrapDock & 2) && ownerContext.widthModel.shrinkWrap; + }, + + beginLayout: function(ownerContext) { + var me = this, + owner = me.owner, + docked = me.getLayoutItems(), + layoutContext = ownerContext.context, + dockedItemCount = docked.length, + dockedItems, i, item, itemContext, offsets, + collapsed, dock; + + me.callParent(arguments); + + + + collapsed = owner.getCollapsed(); + if (collapsed !== me.lastCollapsedState && Ext.isDefined(me.lastCollapsedState)) { + + if (me.owner.collapsed) { + ownerContext.isCollapsingOrExpanding = 1; + + owner.addClsWithUI(owner.collapsedCls); + } else { + ownerContext.isCollapsingOrExpanding = 2; + + owner.removeClsWithUI(owner.collapsedCls); + ownerContext.lastCollapsedState = me.lastCollapsedState; + } + } + me.lastCollapsedState = collapsed; + + ownerContext.dockedItems = dockedItems = []; + + for (i = 0; i < dockedItemCount; i++) { + item = docked[i]; + if (item.rendered) { + dock = item.dock; + itemContext = layoutContext.getCmp(item); + itemContext.dockedAt = { x: 0, y: 0 }; + itemContext.offsets = offsets = Ext.Element.parseBox(item.offsets || 0); + itemContext.horizontal = dock == 'top' || dock == 'bottom'; + offsets.width = offsets.left + offsets.right; + offsets.height = offsets.top + offsets.bottom; + dockedItems.push(itemContext); + } + } + + ownerContext.bodyContext = ownerContext.getEl('body'); + }, + + beginLayoutCycle: function(ownerContext) { + var me = this, + docked = ownerContext.dockedItems, + len = docked.length, + owner = me.owner, + frameBody = owner.frameBody, + lastHeightModel = me.lastHeightModel, + i, item, dock; + + me.callParent(arguments); + + if (me.owner.manageHeight) { + + + if (me.lastBodyDisplay) { + owner.body.dom.style.display = me.lastBodyDisplay = ''; + } + } else { + + + + if (me.lastBodyDisplay !== 'inline-block') { + owner.body.dom.style.display = me.lastBodyDisplay = 'inline-block'; + } + + if (lastHeightModel && lastHeightModel.shrinkWrap && + !ownerContext.heightModel.shrinkWrap) { + owner.body.dom.style.marginBottom = ''; + } + } + + if (ownerContext.widthModel.auto) { + if (ownerContext.widthModel.shrinkWrap) { + owner.el.setWidth(null); + } + owner.body.setWidth(null); + if (frameBody) { + frameBody.setWidth(null); + } + } + if (ownerContext.heightModel.auto) { + owner.body.setHeight(null); + + if (frameBody) { + frameBody.setHeight(null); + } + } + + + + if (ownerContext.collapsedVert) { + ownerContext.setContentHeight(0); + } else if (ownerContext.collapsedHorz) { + ownerContext.setContentWidth(0); + } + + + + for (i = 0; i < len; i++) { + item = docked[i].target; + dock = item.dock; + + if (dock == 'right') { + item.setLocalX(0); + } else if (dock != 'left') { + continue; + } + + + } + }, + + calculate: function (ownerContext) { + var me = this, + measure = me.measureAutoDimensions(ownerContext, ownerContext.measureDimensions), + state = ownerContext.state, + horzDone = state.horzDone, + vertDone = state.vertDone, + bodyContext = ownerContext.bodyContext, + framing, horz, vert, forward, backward; + + + ownerContext.borderInfo || ownerContext.getBorderInfo(); + ownerContext.paddingInfo || ownerContext.getPaddingInfo(); + ownerContext.frameInfo || ownerContext.getFrameInfo(); + bodyContext.borderInfo || bodyContext.getBorderInfo(); + bodyContext.paddingInfo || bodyContext.getPaddingInfo(); + + + + + + + + + + + + + + + + + + + + + if (!ownerContext.frameBorder) { + if (!(framing = ownerContext.framing)) { + ownerContext.frameBorder = ownerContext.borderInfo; + ownerContext.framePadding = ownerContext.paddingInfo; + } else { + + ownerContext.frameBorder = framing.border; + ownerContext.framePadding = framing.padding; + } + } + + + + horz = !horzDone && + me.createAxis(ownerContext, measure.contentWidth, ownerContext.widthModel, + me.horzAxisProps, ownerContext.collapsedHorz); + vert = !vertDone && + me.createAxis(ownerContext, measure.contentHeight, ownerContext.heightModel, + me.vertAxisProps, ownerContext.collapsedVert); + + + + + + + + + + for (forward = 0, backward = ownerContext.dockedItems.length; backward--; ++forward) { + if (horz) { + me.dockChild(ownerContext, horz, backward, forward); + } + if (vert) { + me.dockChild(ownerContext, vert, backward, forward); + } + } + + if (horz && me.finishAxis(ownerContext, horz)) { + state.horzDone = horzDone = horz; + } + + if (vert && me.finishAxis(ownerContext, vert)) { + state.vertDone = vertDone = vert; + } + + + + if (horzDone && vertDone && me.finishConstraints(ownerContext, horzDone, vertDone)) { + + + + me.finishPositions(ownerContext, horzDone, vertDone); + } else { + me.done = false; + } + }, + + + createAxis: function (ownerContext, contentSize, sizeModel, axisProps, collapsedAxis) { + var me = this, + begin = 0, + owner = me.owner, + maxSize = owner[axisProps.maxSize], + minSize = owner[axisProps.minSize] || 0, + dockBegin = axisProps.dockBegin, + dockEnd = axisProps.dockEnd, + posProp = axisProps.pos, + sizeProp = axisProps.size, + hasMaxSize = maxSize != null, + shrinkWrap = sizeModel.shrinkWrap, + bodyContext, framing, padding, end; + + if (shrinkWrap) { + + + if (collapsedAxis) { + end = 0; + } else { + bodyContext = ownerContext.bodyContext; + end = contentSize + bodyContext.borderInfo[sizeProp]; + } + } else { + framing = ownerContext.frameBorder; + padding = ownerContext.framePadding; + + begin = framing[dockBegin] + padding[dockBegin]; + end = ownerContext.getProp(sizeProp) - (framing[dockEnd] + padding[dockEnd]); + } + + return { + shrinkWrap: sizeModel.shrinkWrap, + sizeModel: sizeModel, + + initialBegin: begin, + begin: begin, + end: end, + collapsed: collapsedAxis, + horizontal: axisProps.horizontal, + ignoreFrameBegin: null, + ignoreFrameEnd: null, + initialSize: end - begin, + maxChildSize: 0, + hasMinMaxConstraints: (minSize || hasMaxSize) && sizeModel.shrinkWrap, + minSize: minSize, + maxSize: hasMaxSize ? maxSize : 1e9, + bodyPosProp: me.owner.manageHeight ? posProp : axisProps.marginBegin, + dockBegin: dockBegin, + dockEnd: dockEnd, + posProp: posProp, + sizeProp: sizeProp, + setSize: axisProps.setSize, + shrinkWrapDock: ownerContext[axisProps.shrinkWrapDock], + sizeModelName: axisProps.sizeModel, + dockedPixelsEnd: 0 + }; + }, + + + dockChild: function (ownerContext, axis, backward, forward) { + var me = this, + itemContext = ownerContext.dockedItems[axis.shrinkWrap ? backward : forward], + item = itemContext.target, + dock = item.dock, + sizeProp = axis.sizeProp, + pos, size; + + if (item.ignoreParentFrame && ownerContext.isCollapsingOrExpanding) { + + + itemContext.clearMarginCache(); + } + + itemContext.marginInfo || itemContext.getMarginInfo(); + + if (dock == axis.dockBegin) { + if (axis.shrinkWrap) { + pos = me.dockOutwardBegin(ownerContext, itemContext, item, axis); + } else { + pos = me.dockInwardBegin(ownerContext, itemContext, item, axis); + } + } else if (dock == axis.dockEnd) { + if (axis.shrinkWrap) { + pos = me.dockOutwardEnd(ownerContext, itemContext, item, axis); + } else { + pos = me.dockInwardEnd(ownerContext, itemContext, item, axis); + } + } else { + if (axis.shrinkWrapDock) { + + + size = itemContext.getProp(sizeProp) + itemContext.marginInfo[sizeProp]; + axis.maxChildSize = Math.max(axis.maxChildSize, size); + pos = 0; + } else { + pos = me.dockStretch(ownerContext, itemContext, item, axis); + } + } + + itemContext.dockedAt[axis.posProp] = pos; + }, + + + dockInwardBegin: function (ownerContext, itemContext, item, axis) { + var pos = axis.begin, + sizeProp = axis.sizeProp, + ignoreParentFrame = item.ignoreParentFrame, + delta, + size, + dock; + + if (ignoreParentFrame) { + axis.ignoreFrameBegin = itemContext; + dock = item.dock; + + + delta = ownerContext.frameBorder[dock]; + + + pos -= delta + ownerContext.framePadding[dock]; + } + + if (!item.overlay) { + size = itemContext.getProp(sizeProp) + itemContext.marginInfo[sizeProp]; + axis.begin += size; + if (ignoreParentFrame) { + axis.begin -= delta; + } + } + + return pos; + }, + + + dockInwardEnd: function (ownerContext, itemContext, item, axis) { + var sizeProp = axis.sizeProp, + size = itemContext.getProp(sizeProp) + itemContext.marginInfo[sizeProp], + pos = axis.end - size, + frameEnd; + + if (!item.overlay) { + axis.end = pos; + } + + if (item.ignoreParentFrame) { + axis.ignoreFrameEnd = itemContext; + frameEnd = ownerContext.frameBorder[item.dock]; + pos += frameEnd + ownerContext.framePadding[item.dock]; + axis.end += frameEnd; + } + + return pos; + }, + + + dockOutwardBegin: function (ownerContext, itemContext, item, axis) { + var pos = axis.begin, + sizeProp = axis.sizeProp, + size; + + if (axis.collapsed) { + axis.ignoreFrameBegin = axis.ignoreFrameEnd = itemContext; + } else if (item.ignoreParentFrame) { + axis.ignoreFrameBegin = itemContext; + } + + + + if (!item.overlay) { + size = itemContext.getProp(sizeProp) + itemContext.marginInfo[sizeProp]; + pos -= size; + axis.begin = pos; + } + + return pos; + }, + + + dockOutwardEnd: function (ownerContext, itemContext, item, axis) { + var pos = axis.end, + sizeProp = axis.sizeProp, + size; + + size = itemContext.getProp(sizeProp) + itemContext.marginInfo[sizeProp]; + + if (axis.collapsed) { + axis.ignoreFrameBegin = axis.ignoreFrameEnd = itemContext; + } else if (item.ignoreParentFrame) { + axis.ignoreFrameEnd = itemContext; + } + + + + if (!item.overlay) { + axis.end = pos + size; + axis.dockedPixelsEnd += size; + } + + return pos; + }, + + + dockStretch: function (ownerContext, itemContext, item, axis) { + var dock = item.dock, + sizeProp = axis.sizeProp, + horizontal = dock == 'top' || dock == 'bottom', + border = ownerContext.frameBorder, + offsets = itemContext.offsets, + padding = ownerContext.framePadding, + endProp = horizontal ? 'right' : 'bottom', + startProp = horizontal ? 'left' : 'top', + pos = axis.begin + offsets[startProp], + margin, size; + + if (item.stretch !== false) { + size = axis.end - pos - offsets[endProp]; + + if (item.ignoreParentFrame) { + + + + + pos -= padding[startProp] + border[startProp]; + size += padding[sizeProp] + border[sizeProp]; + } + + margin = itemContext.marginInfo; + size -= margin[sizeProp]; + + itemContext[axis.setSize](size); + } + + return pos; + }, + + + finishAxis: function (ownerContext, axis) { + + + + if (isNaN(axis.maxChildSize)) { + return false; + } + + var axisBegin = axis.begin, + size = axis.end - axisBegin, + collapsed = axis.collapsed, + setSizeMethod = axis.setSize, + beginName = axis.dockBegin, + endName = axis.dockEnd, + padding = ownerContext.framePadding, + border = ownerContext.frameBorder, + borderBegin = border[beginName], + framing = ownerContext.framing, + framingBegin = framing && framing[beginName], + + paddingBegin = collapsed ? 0 : padding[beginName], + sizeProp = axis.sizeProp, + ignoreFrameBegin = axis.ignoreFrameBegin, + ignoreFrameEnd = axis.ignoreFrameEnd, + bodyContext = ownerContext.bodyContext, + extraPaddingBegin = Math.max(borderBegin + paddingBegin - framingBegin, 0), + bodyPos, bodySize, delta, dirty; + + if (axis.shrinkWrap) { + + + + + bodySize = axis.initialSize; + + if (framing) { + + + + + + + + + delta = -axisBegin + borderBegin + paddingBegin; + bodyPos = delta - framingBegin - extraPaddingBegin; + } else { + bodyPos = -axisBegin; + delta = bodyPos + paddingBegin; + } + + if (!collapsed) { + size += padding[sizeProp]; + } + + if (ignoreFrameBegin) { + + + + delta -= borderBegin; + bodyPos -= borderBegin; + + + + + + + + ignoreFrameBegin.dockedAt[axis.posProp] -= paddingBegin; + } else { + size += borderBegin; + } + + if (collapsed) { + + + } else if (ignoreFrameEnd) { + + + + ignoreFrameEnd.dockedAt[axis.posProp] += padding[endName]; + } else { + size += border[endName]; + } + + axis.size = size; + + if (!axis.horizontal && !this.owner.manageHeight) { + + + dirty = false; + } + } else { + + + if (framing) { + + + delta = 0; + bodyPos = axisBegin - framingBegin - extraPaddingBegin; + } else { + delta = -borderBegin; + bodyPos = axisBegin - paddingBegin - borderBegin; + } + + + bodySize = size; + } + + axis.delta = delta; + bodyContext[setSizeMethod](bodySize, dirty); + bodyContext.setProp(axis.bodyPosProp, bodyPos); + + return !isNaN(size); + }, + + beforeInvalidateShrinkWrapDock: function(itemContext, options){ + var sizeModelName = options.axis.sizeModelName; + if (!itemContext[sizeModelName].constrainedMin) { + + + itemContext[sizeModelName] = Ext.layout.SizeModel.calculated; + } + }, + + afterInvalidateShrinkWrapDock: function(itemContext, options){ + var axis = options.axis, + me = options.layout, + pos; + + if (itemContext[axis.sizeModelName].calculated) { + pos = me.dockStretch(options.ownerContext, itemContext, itemContext.target, axis); + itemContext.setProp(axis.posProp, axis.delta + pos); + } + }, + + + finishConstraints: function (ownerContext, horz, vert) { + var me = this, + sizeModels = me.sizeModels, + publishWidth = horz.shrinkWrap, + publishHeight = vert.shrinkWrap, + owner = me.owner, + dirty, height, width, heightModel, widthModel, size, + minSize, maxSize, maxChildSize, desiredSize; + + + + + + + if (publishWidth) { + size = horz.size; + minSize = horz.collapsed ? 0 : horz.minSize; + maxSize = horz.maxSize; + maxChildSize = horz.maxChildSize; + desiredSize = Math.max(size, maxChildSize); + + if (desiredSize > maxSize) { + widthModel = sizeModels.constrainedMax; + width = maxSize; + } else if (desiredSize < minSize) { + widthModel = sizeModels.constrainedMin; + width = minSize; + } else if (size < maxChildSize) { + widthModel = sizeModels.constrainedDock; + owner.dockConstrainedWidth = width = maxChildSize; + } else { + width = size; + } + } + + if (publishHeight) { + size = vert.size; + minSize = vert.collapsed ? 0 : vert.minSize; + maxSize = vert.maxSize; + maxChildSize = vert.maxChildSize; + + + desiredSize = Math.max(size, maxChildSize + size - vert.initialSize); + + if (desiredSize > maxSize) { + heightModel = sizeModels.constrainedMax; + height = maxSize; + } else if (desiredSize < minSize) { + heightModel = sizeModels.constrainedMin; + height = minSize; + } else if (size < maxChildSize) { + heightModel = sizeModels.constrainedDock; + owner.dockConstrainedHeight = height = maxChildSize; + } else { + if (!ownerContext.collapsedVert && !owner.manageHeight) { + + + dirty = false; + + + ownerContext.bodyContext.setProp('margin-bottom', vert.dockedPixelsEnd); + } + + height = size; + } + } + + + + if (widthModel || heightModel) { + + + if (widthModel && heightModel && + widthModel.constrainedMax && heightModel.constrainedByMin) { + ownerContext.invalidate({ widthModel: widthModel }); + return false; + } + + + + + if (!ownerContext.widthModel.calculatedFromShrinkWrap && + !ownerContext.heightModel.calculatedFromShrinkWrap) { + + ownerContext.invalidate({ widthModel: widthModel, heightModel: heightModel }); + return false; + } + + + + + } else { + + + me.invalidateAxes(ownerContext, horz, vert); + + } + + + + if (publishWidth) { + ownerContext.setWidth(width); + if (widthModel) { + ownerContext.widthModel = widthModel; + } + } + if (publishHeight) { + ownerContext.setHeight(height, dirty); + if (heightModel) { + ownerContext.heightModel = heightModel; + } + } + + return true; + }, + + + invalidateAxes: function(ownerContext, horz, vert){ + var before = this.beforeInvalidateShrinkWrapDock, + after = this.afterInvalidateShrinkWrapDock, + horzSize = horz.end - horz.begin, + vertSize = vert.initialSize, + invalidateHorz = horz.shrinkWrapDock && horz.maxChildSize < horzSize, + invalidateVert = vert.shrinkWrapDock && vert.maxChildSize < vertSize, + dockedItems, len, i, itemContext, itemSize, isHorz, axis, sizeProp; + + if (invalidateHorz || invalidateVert) { + if (invalidateVert) { + + + vert.begin = vert.initialBegin; + vert.end = vert.begin + vert.initialSize; + } + dockedItems = ownerContext.dockedItems; + for (i = 0, len = dockedItems.length; i < len; ++i) { + itemContext = dockedItems[i]; + isHorz = itemContext.horizontal; + axis = null; + if (invalidateHorz && isHorz) { + sizeProp = horz.sizeProp; + itemSize = horzSize; + axis = horz; + } else if (invalidateVert && !isHorz) { + sizeProp = vert.sizeProp; + itemSize = vertSize; + axis = vert; + } + + if (axis) { + + itemSize -= itemContext.getMarginInfo()[sizeProp]; + if (itemSize !== itemContext.props[sizeProp]) { + itemContext.invalidate({ + before: before, + after: after, + axis: axis, + ownerContext: ownerContext, + layout: this + }); + } + } + } + } + }, + + + finishPositions: function (ownerContext, horz, vert) { + var dockedItems = ownerContext.dockedItems, + length = dockedItems.length, + deltaX = horz.delta, + deltaY = vert.delta, + index, itemContext; + + for (index = 0; index < length; ++index) { + itemContext = dockedItems[index]; + + itemContext.setProp('x', deltaX + itemContext.dockedAt.x); + itemContext.setProp('y', deltaY + itemContext.dockedAt.y); + } + }, + + finishedLayout: function(ownerContext) { + var me = this, + target = ownerContext.target; + + me.callParent(arguments); + + if (!ownerContext.animatePolicy) { + if (ownerContext.isCollapsingOrExpanding === 1) { + target.afterCollapse(false); + } else if (ownerContext.isCollapsingOrExpanding === 2) { + target.afterExpand(false); + } + } + }, + + getAnimatePolicy: function(ownerContext) { + var me = this, + lastCollapsedState, policy; + + if (ownerContext.isCollapsingOrExpanding == 1) { + lastCollapsedState = me.lastCollapsedState; + } else if (ownerContext.isCollapsingOrExpanding == 2) { + lastCollapsedState = ownerContext.lastCollapsedState; + } + + if (lastCollapsedState == 'left' || lastCollapsedState == 'right') { + policy = me.horizontalCollapsePolicy; + } else if (lastCollapsedState == 'top' || lastCollapsedState == 'bottom') { + policy = me.verticalCollapsePolicy; + } + + return policy; + }, + + + getDockedItems: function(order, beforeBody) { + var me = this, + renderedOnly = (order === 'visual'), + all = renderedOnly ? Ext.ComponentQuery.query('[rendered]', me.owner.dockedItems.items) : me.owner.dockedItems.items, + sort = all && all.length && order !== false, + renderOrder, + dock, dockedItems, i, isBefore, length; + + if (beforeBody == null) { + dockedItems = sort && !renderedOnly ? all.slice() : all; + } else { + dockedItems = []; + + for (i = 0, length = all.length; i < length; ++i) { + dock = all[i].dock; + isBefore = (dock == 'top' || dock == 'left'); + if (beforeBody ? isBefore : !isBefore) { + dockedItems.push(all[i]); + } + } + + sort = sort && dockedItems.length; + } + + if (sort) { + renderOrder = (order = order || 'render') == 'render'; + Ext.Array.sort(dockedItems, function(a, b) { + var aw, + bw; + + + + if (renderOrder && ((aw = me.owner.dockOrder[a.dock]) !== (bw = me.owner.dockOrder[b.dock]))) { + + + if (!(aw + bw)) { + return aw - bw; + } + } + + aw = me.getItemWeight(a, order); + bw = me.getItemWeight(b, order); + if ((aw !== undefined) && (bw !== undefined)) { + return aw - bw; + } + return 0; + }); + } + + return dockedItems || []; + }, + + getItemWeight: function (item, order) { + var weight = item.weight || this.owner.defaultDockWeights[item.dock]; + return weight[order] || weight; + }, + + + getLayoutItems : function() { + var me = this, + items, + itemCount, + item, + i, + result; + + if (me.owner.collapsed) { + result = me.owner.getCollapsedDockedItems(); + } else { + items = me.getDockedItems('visual'); + itemCount = items.length; + result = []; + for (i = 0; i < itemCount; i++) { + item = items[i]; + if (!item.hidden) { + result.push(item); + } + } + } + return result; + }, + + + measureContentWidth: function (ownerContext) { + var bodyContext = ownerContext.bodyContext; + return bodyContext.el.getWidth() - bodyContext.getBorderInfo().width; + }, + + measureContentHeight: function (ownerContext) { + var bodyContext = ownerContext.bodyContext; + return bodyContext.el.getHeight() - bodyContext.getBorderInfo().height; + }, + + redoLayout: function(ownerContext) { + var me = this, + owner = me.owner; + + + if (ownerContext.isCollapsingOrExpanding == 1) { + if (owner.reExpander) { + owner.reExpander.el.show(); + } + + owner.addClsWithUI(owner.collapsedCls); + ownerContext.redo(true); + } else if (ownerContext.isCollapsingOrExpanding == 2) { + + owner.removeClsWithUI(owner.collapsedCls); + ownerContext.bodyContext.redo(); + } + }, + + + + renderChildren: function() { + var me = this, + items = me.getDockedItems(), + target = me.getRenderTarget(); + + me.handleItemBorders(); + + me.renderItems(items, target); + }, + + + renderItems: function(items, target) { + var me = this, + dockedItemCount = items.length, + itemIndex = 0, + correctPosition = 0, + staticNodeCount = 0, + targetNodes = me.getRenderTarget().dom.childNodes, + targetChildCount = targetNodes.length, + i, j, targetChildNode, item; + + + for (i = 0, j = 0; i < targetChildCount; i++) { + targetChildNode = targetNodes[i]; + if (Ext.fly(targetChildNode).hasCls(Ext.baseCSSPrefix + 'resizable-handle')) { + break; + } + for (j = 0; j < dockedItemCount; j++) { + item = items[j]; + if (item.rendered && item.el.dom === targetChildNode) { + break; + } + } + + + if (j === dockedItemCount) { + staticNodeCount++; + } + } + + + for (; itemIndex < dockedItemCount; itemIndex++, correctPosition++) { + item = items[itemIndex]; + + + + + + + + + if (itemIndex === correctPosition && (item.dock === 'right' || item.dock === 'bottom')) { + correctPosition += staticNodeCount; + } + + + if (item && !item.rendered) { + me.renderItem(item, target, correctPosition); + } + else if (!me.isValidParent(item, target, correctPosition)) { + me.moveItem(item, target, correctPosition); + } + } + }, + + undoLayout: function(ownerContext) { + var me = this, + owner = me.owner; + + + if (ownerContext.isCollapsingOrExpanding == 1) { + + + if (owner.reExpander) { + owner.reExpander.el.hide(); + } + + owner.removeClsWithUI(owner.collapsedCls); + ownerContext.undo(true); + } else if (ownerContext.isCollapsingOrExpanding == 2) { + + owner.addClsWithUI(owner.collapsedCls); + ownerContext.bodyContext.undo(); + } + }, + + sizePolicy: { + nostretch: { + setsWidth: 0, + setsHeight: 0 + }, + + horz: { + shrinkWrap: { + + + setsWidth: 1, + setsHeight: 0, + readsWidth: 1 + }, + stretch: { + setsWidth: 1, + setsHeight: 0 + } + }, + + vert: { + shrinkWrap: { + setsWidth: 0, + setsHeight: 1, + readsHeight: 1 + }, + stretch: { + setsWidth: 0, + setsHeight: 1 + } + }, + + stretchV: { + setsWidth: 0, + setsHeight: 1 + }, + + + + + + + + + + + + + + + + + + + + + + + autoStretchH: { + readsWidth: 1, + setsWidth: 1, + setsHeight: 0 + }, + autoStretchV: { + readsHeight: 1, + setsWidth: 0, + setsHeight: 1 + } + }, + + getItemSizePolicy: function (item, ownerSizeModel) { + var me = this, + policy = me.sizePolicy, + shrinkWrapDock = me.owner.shrinkWrapDock, + dock, vertical; + + if (item.stretch === false) { + return policy.nostretch; + } + + dock = item.dock; + vertical = (dock == 'left' || dock == 'right'); + + shrinkWrapDock = shrinkWrapDock === true ? 3 : (shrinkWrapDock || 0); + if (vertical) { + policy = policy.vert; + shrinkWrapDock = shrinkWrapDock & 1; + } else { + policy = policy.horz; + shrinkWrapDock = shrinkWrapDock & 2; + } + + if (shrinkWrapDock) { + + if (!ownerSizeModel) { + ownerSizeModel = me.owner.getSizeModel(); + } + if (ownerSizeModel[vertical ? 'height' : 'width'].shrinkWrap) { + return policy.shrinkWrap; + } + } + + return policy.stretch; + }, + + + configureItem : function(item, pos) { + this.callParent(arguments); + + item.addCls(Ext.baseCSSPrefix + 'docked'); + item.addClsWithUI(this.getDockCls(item.dock)); + }, + + + getDockCls: function(dock) { + return 'docked-' + dock; + }, + + afterRemove : function(item) { + this.callParent(arguments); + if (this.itemCls) { + item.el.removeCls(this.itemCls + '-' + item.dock); + } + var dom = item.el.dom; + + if (!item.destroying && dom) { + dom.parentNode.removeChild(dom); + } + this.childrenChanged = true; + }, + + + borderCollapseMap: { + + }, + + + getBorderCollapseTable: function () { + var me = this, + map = me.borderCollapseMap, + owner = me.owner, + baseCls = owner.baseCls, + ui = owner.ui, + table; + + map = map[baseCls] || (map[baseCls] = {}); + table = map[ui]; + + if (!table) { + baseCls += '-' + ui + '-outer-border-'; + map[ui] = table = [ + 0, + baseCls + 'l', + baseCls + 'b', + baseCls + 'bl', + baseCls + 'r', + baseCls + 'rl', + baseCls + 'rb', + baseCls + 'rbl', + baseCls + 't', + baseCls + 'tl', + baseCls + 'tb', + baseCls + 'tbl', + baseCls + 'tr', + baseCls + 'trl', + baseCls + 'trb', + baseCls + 'trbl' + ]; + } + + return table; + } +}); + + +Ext.define('Ext.panel.AbstractPanel', { + + + + extend: Ext.container.Container , + + mixins: { + docking: Ext.container.DockingContainer + }, + + + + + + + baseCls : Ext.baseCSSPrefix + 'panel', + + + + + + + + + + + isPanel: true, + + + + + contentPaddingProperty: 'bodyPadding', + + + shrinkWrapDock: false, + + componentLayout: 'dock', + + childEls: [ + 'body' + ], + + renderTpl: [ + + '{% this.renderDockedItems(out,values,0); %}', + + + + + + + + + + (Ext.isIE7m || Ext.isIEQuirks) ? '
    ' : '', + '
    {bodyCls}', + ' {baseCls}-body-{ui}', + ' {parent.baseCls}-body-{parent.ui}-{.}', + '{childElCls}"', + ' style="{bodyStyle}">', + '{%this.renderContainer(out,values);%}', + '
    ', + '{% this.renderDockedItems(out,values,1); %}' + ], + + bodyPosProps: { + x: 'x', + y: 'y' + }, + + + + + + border: true, + + + emptyArray: [], + + initComponent : function() { + this.initBorderProps(); + this.callParent(); + }, + + initBorderProps: function() { + var me = this; + + if (me.frame && me.border && me.bodyBorder === undefined) { + me.bodyBorder = false; + } + if (me.frame && me.border && (me.bodyBorder === false || me.bodyBorder === 0)) { + me.manageBodyBorders = true; + } + }, + + beforeDestroy: function(){ + this.destroyDockedItems(); + this.callParent(); + }, + + + initItems : function() { + this.callParent(); + this.initDockingItems(); + }, + + + initRenderData: function() { + var me = this, + data = me.callParent(); + + me.initBodyStyles(); + me.protoBody.writeTo(data); + delete me.protoBody; + + return data; + }, + + + getComponent: function(comp) { + var component = this.callParent(arguments); + if (component === undefined && !Ext.isNumber(comp)) { + + component = this.getDockedComponent(comp); + } + return component; + }, + + getProtoBody: function () { + var me = this, + body = me.protoBody; + + if (!body) { + me.protoBody = body = new Ext.util.ProtoElement({ + cls: me.bodyCls, + style: me.bodyStyle, + clsProp: 'bodyCls', + styleProp: 'bodyStyle', + styleIsText: true + }); + } + + return body; + }, + + + initBodyStyles: function() { + var me = this, + body = me.getProtoBody(); + + if (me.bodyPadding !== undefined) { + if (me.layout.managePadding) { + + + + + + body.setStyle('padding', 0); + } else { + body.setStyle('padding', this.unitizeBox((me.bodyPadding === true) ? 5 : me.bodyPadding)); + } + } + me.initBodyBorder(); + }, + + initBodyBorder: function() { + var me = this; + + if (me.frame && me.bodyBorder) { + if (!Ext.isNumber(me.bodyBorder)) { + me.bodyBorder = 1; + } + me.getProtoBody().setStyle('border-width', this.unitizeBox(me.bodyBorder)); + } + }, + + getCollapsedDockedItems: function () { + var me = this; + return me.header === false || me.collapseMode == 'placeholder' ? me.emptyArray : [ me.getReExpander() ]; + }, + + + setBodyStyle: function(style, value) { + var me = this, + body = me.rendered ? me.body : me.getProtoBody(); + + if (Ext.isFunction(style)) { + style = style(); + } + if (arguments.length == 1) { + if (Ext.isString(style)) { + style = Ext.Element.parseStyles(style); + } + body.setStyle(style); + } else { + body.setStyle(style, value); + } + return me; + }, + + + addBodyCls: function(cls) { + var me = this, + body = me.rendered ? me.body : me.getProtoBody(); + + body.addCls(cls); + return me; + }, + + + removeBodyCls: function(cls) { + var me = this, + body = me.rendered ? me.body : me.getProtoBody(); + + body.removeCls(cls); + return me; + }, + + + addUIClsToElement: function(cls) { + var me = this, + result = me.callParent(arguments); + + me.addBodyCls([Ext.baseCSSPrefix + cls, me.baseCls + '-body-' + cls, me.baseCls + '-body-' + me.ui + '-' + cls]); + return result; + }, + + + removeUIClsFromElement: function(cls) { + var me = this, + result = me.callParent(arguments); + + me.removeBodyCls([Ext.baseCSSPrefix + cls, me.baseCls + '-body-' + cls, me.baseCls + '-body-' + me.ui + '-' + cls]); + return result; + }, + + + addUIToElement: function() { + var me = this; + + me.callParent(arguments); + me.addBodyCls(me.baseCls + '-body-' + me.ui); + }, + + + removeUIFromElement: function() { + var me = this; + + me.callParent(arguments); + me.removeBodyCls(me.baseCls + '-body-' + me.ui); + }, + + + getTargetEl : function() { + return this.body; + }, + + applyTargetCls: function(targetCls) { + this.getProtoBody().addCls(targetCls); + }, + + getRefItems: function(deep) { + var items = this.callParent(arguments); + + return this.getDockingRefItems(deep, items); + }, + + setupRenderTpl: function (renderTpl) { + this.callParent(arguments); + this.setupDockingRenderTpl(renderTpl); + } +}); + + +Ext.define('Ext.panel.Header', { + extend: Ext.container.Container , + + alias: 'widget.header', + + + isHeader : true, + defaultType : 'tool', + indicateDrag : false, + weight : -1, + componentLayout: 'body', + + + + childEls: [ + 'body' + ], + + renderTpl: [ + '
    {parent.baseCls}-body-{parent.ui}-{.}"', + ' style="{bodyStyle}">', + '{%this.renderContainer(out,values)%}', + '
    ' + ], + + headingTpl: [ + + '{title}' + ], + + shrinkWrap: 3, + + + + + titlePosition: 0, + + + + + + + + + headerCls: Ext.baseCSSPrefix + 'header', + + initComponent: function() { + var me = this, + hasPosition = me.hasOwnProperty('titlePosition'), + items = me.items, + titlePosition = hasPosition ? me.titlePosition : (items ? items.length : 0), + uiClasses = [me.orientation, me.getDockName()], + ownerCt = me.ownerCt; + + me.addEvents( + + 'click', + + + 'dblclick' + ); + + me.indicateDragCls = me.headerCls + '-draggable'; + me.title = me.title || ' '; + me.tools = me.tools || []; + items = me.items = (items ? Ext.Array.slice(items) : []); + me.orientation = me.orientation || 'horizontal'; + me.dock = (me.dock) ? me.dock : (me.orientation == 'horizontal') ? 'top' : 'left'; + + if (ownerCt ? (!ownerCt.border && !ownerCt.frame) : !me.border) { + uiClasses.push(me.orientation + '-noborder'); + } + me.addClsWithUI(uiClasses); + me.addCls([me.headerCls, me.headerCls + '-' + me.orientation]); + + if (me.indicateDrag) { + me.addCls(me.indicateDragCls); + } + + + if (me.iconCls || me.icon || me.glyph) { + me.initIconCmp(); + + + if (!hasPosition && !items.length) { + ++titlePosition; + } + items.push(me.iconCmp); + } + + + me.titleCmp = new Ext.Component({ + ariaRole : 'heading', + focusable : false, + noWrap : true, + flex : 1, + rtl : me.rtl, + id : me.id + '_hd', + style : me.titleAlign ? ('text-align:' + me.titleAlign) : '', + cls : me.headerCls + '-text-container ' + + me.baseCls + '-text-container ' + + me.baseCls + '-text-container-' + me.ui, + renderTpl : me.getTpl('headingTpl'), + renderData: { + title: me.title, + cls : me.baseCls, + headerCls: me.headerCls, + ui : me.ui + }, + childEls : ['textEl'], + autoEl: { + + unselectable: 'on' + }, + listeners: { + render: me.onTitleRender, + scope: me + } + }); + me.layout = (me.orientation == 'vertical') ? { + type : 'vbox', + align: 'center', + alignRoundingMethod: 'ceil' + } : { + type : 'hbox', + align: 'middle', + alignRoundingMethod: 'floor' + }; + + + Ext.Array.push(items, me.tools); + + + me.tools.length = 0; + me.callParent(); + + if (items.length < titlePosition) { + titlePosition = items.length; + } + me.titlePosition = titlePosition; + + + me.insert(titlePosition, me.titleCmp); + + me.on({ + dblclick: me.onDblClick, + click: me.onClick, + element: 'el', + scope: me + }); + }, + + initIconCmp: function() { + var me = this, + cls = [me.headerCls + '-icon', me.baseCls + '-icon', me.iconCls], + cfg; + + if (me.glyph) { + cls.push(me.baseCls + '-glyph'); + } + + cfg = { + focusable: false, + src: Ext.BLANK_IMAGE_URL, + cls: cls, + baseCls: me.baseCls + '-icon', + id: me.id + '-iconEl', + iconCls: me.iconCls, + glyph: me.glyph + }; + + if (!Ext.isEmpty(me.icon)) { + delete cfg.iconCls; + cfg.src = me.icon; + } + + me.iconCmp = new Ext.Img(cfg); + }, + + beforeRender: function() { + this.protoEl.unselectable(); + this.callParent(); + }, + + afterLayout: function() { + var me = this, + frameBR, frameTR, frameTL, xPos; + + if (me.orientation === 'vertical') { + me.adjustTitlePosition(); + frameTR = me.frameTR; + if (frameTR) { + + + + frameBR = me.frameBR; + frameTL = me.frameTL; + xPos = (me.getWidth() - frameTR.getPadding('r') - + ((frameTL) ? frameTL.getPadding('l') : me.el.getBorderWidth('l'))) + 'px'; + frameBR.setStyle('background-position-x', xPos); + frameTR.setStyle('background-position-x', xPos); + } + if (Ext.isIE7 && Ext.isStrict && me.frame) { + + + me.el.repaint(); + } + } + }, + + beforeLayout: function () { + this.callParent(); + this.syncBeforeAfterTitleClasses(); + }, + + adjustTitlePosition: function() { + var titleCmp = this.titleCmp, + titleEl; + + if (!Ext.isIE9m && titleCmp) { + + + + + + + + + + + + + + + + titleEl = titleCmp.el; + titleEl.setStyle('left', titleEl.getWidth() + 'px'); + } + }, + + onTitleRender: function() { + if (this.orientation === 'vertical') { + this.titleCmp.el.setVertical(90); + } + }, + + + addUIClsToElement: function(cls) { + var me = this, + result = me.callParent(arguments), + classes = [me.baseCls + '-body-' + cls, me.baseCls + '-body-' + me.ui + '-' + cls], + array, i; + + if (me.bodyCls) { + array = me.bodyCls.split(' '); + + for (i = 0; i < classes.length; i++) { + if (!Ext.Array.contains(array, classes[i])) { + array.push(classes[i]); + } + } + + me.bodyCls = array.join(' '); + } else { + me.bodyCls = classes.join(' '); + } + + return result; + }, + + + removeUIClsFromElement: function(cls) { + var me = this, + result = me.callParent(arguments), + classes = [me.baseCls + '-body-' + cls, me.baseCls + '-body-' + me.ui + '-' + cls], + array, i; + + if (me.bodyCls) { + array = me.bodyCls.split(' '); + + for (i = 0; i < classes.length; i++) { + Ext.Array.remove(array, classes[i]); + } + + me.bodyCls = array.join(' '); + } + + return result; + }, + + + addUIToElement: function() { + var me = this, + array, cls; + + me.callParent(arguments); + + cls = me.baseCls + '-body-' + me.ui; + if (me.rendered) { + if (me.bodyCls) { + me.body.addCls(me.bodyCls); + } else { + me.body.addCls(cls); + } + } else { + if (me.bodyCls) { + array = me.bodyCls.split(' '); + + if (!Ext.Array.contains(array, cls)) { + array.push(cls); + } + + me.bodyCls = array.join(' '); + } else { + me.bodyCls = cls; + } + } + + if (me.titleCmp && me.titleCmp.rendered) { + me.titleCmp.addCls(me.baseCls + '-text-container-' + me.ui); + } + }, + + + removeUIFromElement: function() { + var me = this, + array, cls; + + me.callParent(arguments); + + cls = me.baseCls + '-body-' + me.ui; + if (me.rendered) { + if (me.bodyCls) { + me.body.removeCls(me.bodyCls); + } else { + me.body.removeCls(cls); + } + } else { + if (me.bodyCls) { + array = me.bodyCls.split(' '); + Ext.Array.remove(array, cls); + me.bodyCls = array.join(' '); + } else { + me.bodyCls = cls; + } + } + + if (me.titleCmp && me.titleCmp.rendered) { + me.titleCmp.removeCls(me.baseCls + '-text-container-' + me.ui); + } + }, + + onClick: function(e) { + this.fireClickEvent('click', e); + }, + + onDblClick: function(e){ + this.fireClickEvent('dblclick', e); + }, + + fireClickEvent: function(type, e){ + var toolCls = '.' + Ext.panel.Tool.prototype.baseCls; + if (!e.getTarget(toolCls)) { + this.fireEvent(type, this, e); + } + }, + + getFocusEl: function() { + return this.el; + }, + + getTargetEl: function() { + return this.body || this.frameBody || this.el; + }, + + applyTargetCls: function(targetCls) { + this.bodyTargetCls = targetCls; + }, + + + setTitle: function(title) { + var me = this, + titleCmp = me.titleCmp; + + me.title = title; + if (titleCmp.rendered) { + titleCmp.textEl.update(me.title || ' '); + titleCmp.updateLayout(); + } else { + me.titleCmp.on({ + render: function() { + me.setTitle(title); + }, + single: true + }); + } + }, + + + getMinWidth: function() { + var me = this, + textEl = me.titleCmp.textEl.dom, + result, + tools = me.tools, + l, i; + + + textEl.style.display = 'inline'; + result = textEl.offsetWidth; + textEl.style.display = ''; + + + if (tools && (l = tools.length)) { + for (i = 0; i < l; i++) { + if (tools[i].el) { + result += tools[i].el.dom.offsetWidth; + } + } + } + + + if (me.iconCmp) { + result += me.iconCmp.el.dom.offsetWidth; + } + + + return result + 10; + }, + + + setIconCls: function(cls) { + var me = this, + isEmpty = !cls || !cls.length, + iconCmp = me.iconCmp; + + me.iconCls = cls; + if (!me.iconCmp && !isEmpty) { + me.initIconCmp(); + me.insert(0, me.iconCmp); + } else if (iconCmp) { + if (isEmpty) { + me.iconCmp.destroy(); + delete me.iconCmp; + } else { + iconCmp.removeCls(iconCmp.iconCls); + iconCmp.addCls(cls); + iconCmp.iconCls = cls; + } + } + }, + + + setIcon: function(icon) { + var me = this, + isEmpty = !icon || !icon.length, + iconCmp = me.iconCmp; + + me.icon = icon; + if (!me.iconCmp && !isEmpty) { + me.initIconCmp(); + me.insert(0, me.iconCmp); + } else if (iconCmp) { + if (isEmpty) { + me.iconCmp.destroy(); + delete me.iconCmp; + } else { + iconCmp.setSrc(me.icon); + } + } + }, + + + setGlyph: function(glyph) { + var me = this, + iconCmp = me.iconCmp; + + if (!me.iconCmp) { + me.initIconCmp(); + me.insert(0, me.iconCmp); + } else if (iconCmp) { + if (glyph) { + me.iconCmp.setGlyph(glyph); + } else { + me.iconCmp.destroy(); + delete me.iconCmp; + } + } + }, + + + getTools: function(){ + return this.tools.slice(); + }, + + + addTool: function(tool) { + + + this.add(Ext.ComponentManager.create(tool, 'tool')); + }, + + syncBeforeAfterTitleClasses: function() { + var me = this, + items = me.items, + childItems = items.items, + titlePosition = me.titlePosition, + itemCount = childItems.length, + itemGeneration = items.generation, + syncGen = me.syncBeforeAfterGen, + afterCls, beforeCls, i, item; + + if (syncGen === itemGeneration) { + return; + } + me.syncBeforeAfterGen = itemGeneration; + + for (i = 0; i < itemCount; ++i) { + item = childItems[i]; + + afterCls = item.afterTitleCls || (item.afterTitleCls = item.baseCls + '-after-title') + beforeCls = item.beforeTitleCls || (item.beforeTitleCls = item.baseCls + '-before-title') + + if (!me.title || i < titlePosition) { + if (syncGen) { + item.removeCls(afterCls); + } + item.addCls(beforeCls); + } else if (i > titlePosition) { + if (syncGen) { + item.removeCls(beforeCls); + } + item.addCls(afterCls); + } + } + }, + + + onAdd: function(component, index) { + var tools = this.tools; + this.callParent(arguments); + if (component.isTool) { + tools.push(component); + tools[component.type] = component; + } + }, + + + initRenderData: function() { + return Ext.applyIf(this.callParent(), { + bodyCls: this.bodyCls, + bodyTargetCls: this.bodyTargetCls, + headerCls: this.headerCls + }); + }, + + getDockName: function() { + return this.dock; + } +}); + + + + + +Ext.define('Ext.dd.DragDrop', { + + + + constructor: function(id, sGroup, config) { + if(id) { + this.init(id, sGroup, config); + } + }, + + + + + id: null, + + + config: null, + + + dragElId: null, + + + handleElId: null, + + + invalidHandleTypes: null, + + + invalidHandleIds: null, + + + invalidHandleClasses: null, + + + startPageX: 0, + + + startPageY: 0, + + + groups: null, + + + locked: false, + + + lock: function() { + this.locked = true; + }, + + + moveOnly: false, + + + unlock: function() { + this.locked = false; + }, + + + isTarget: true, + + + padding: null, + + + _domRef: null, + + + __ygDragDrop: true, + + + constrainX: false, + + + constrainY: false, + + + minX: 0, + + + maxX: 0, + + + minY: 0, + + + maxY: 0, + + + maintainOffset: false, + + + xTicks: null, + + + yTicks: null, + + + primaryButtonOnly: true, + + + available: false, + + + hasOuterHandles: false, + + + b4StartDrag: function(x, y) { }, + + + startDrag: function(x, y) { }, + + + b4Drag: function(e) { }, + + + onDrag: function(e) { }, + + + onDragEnter: function(e, id) { }, + + + b4DragOver: function(e) { }, + + + onDragOver: function(e, id) { }, + + + b4DragOut: function(e) { }, + + + onDragOut: function(e, id) { }, + + + b4DragDrop: function(e) { }, + + + onDragDrop: function(e, id) { }, + + + onInvalidDrop: function(e) { }, + + + b4EndDrag: function(e) { }, + + + endDrag: function(e) { }, + + + b4MouseDown: function(e) { }, + + + onMouseDown: function(e) { }, + + + onMouseUp: function(e) { }, + + + onAvailable: function () { + }, + + + defaultPadding: { + left: 0, + right: 0, + top: 0, + bottom: 0 + }, + + + constrainTo : function(constrainTo, pad, inContent){ + if(Ext.isNumber(pad)){ + pad = {left: pad, right:pad, top:pad, bottom:pad}; + } + pad = pad || this.defaultPadding; + var b = Ext.get(this.getEl()).getBox(), + ce = Ext.get(constrainTo), + s = ce.getScroll(), + c, + cd = ce.dom, + xy, + topSpace, + leftSpace; + if(cd == document.body){ + c = { x: s.left, y: s.top, width: Ext.Element.getViewWidth(), height: Ext.Element.getViewHeight()}; + }else{ + xy = ce.getXY(); + c = {x : xy[0], y: xy[1], width: cd.clientWidth, height: cd.clientHeight}; + } + + topSpace = b.y - c.y; + leftSpace = b.x - c.x; + + this.resetConstraints(); + this.setXConstraint(leftSpace - (pad.left||0), + c.width - leftSpace - b.width - (pad.right||0), + this.xTickSize + ); + this.setYConstraint(topSpace - (pad.top||0), + c.height - topSpace - b.height - (pad.bottom||0), + this.yTickSize + ); + }, + + + getEl: function() { + if (!this._domRef) { + this._domRef = Ext.getDom(this.id); + } + + return this._domRef; + }, + + + getDragEl: function() { + return Ext.getDom(this.dragElId); + }, + + + init: function(id, sGroup, config) { + this.initTarget(id, sGroup, config); + Ext.EventManager.on(this.id, "mousedown", this.handleMouseDown, this); + + }, + + + initTarget: function(id, sGroup, config) { + + this.config = config || {}; + + + this.DDMInstance = Ext.dd.DragDropManager; + + this.groups = {}; + + + + if (typeof id !== "string") { + id = Ext.id(id); + } + + + this.id = id; + + + this.addToGroup((sGroup) ? sGroup : "default"); + + + + this.handleElId = id; + + + this.setDragElId(id); + + + this.invalidHandleTypes = { A: "A" }; + this.invalidHandleIds = {}; + this.invalidHandleClasses = []; + + this.applyConfig(); + + this.handleOnAvailable(); + }, + + + applyConfig: function() { + + + + this.padding = this.config.padding || [0, 0, 0, 0]; + this.isTarget = (this.config.isTarget !== false); + this.maintainOffset = (this.config.maintainOffset); + this.primaryButtonOnly = (this.config.primaryButtonOnly !== false); + + }, + + + handleOnAvailable: function() { + this.available = true; + this.resetConstraints(); + this.onAvailable(); + }, + + + setPadding: function(iTop, iRight, iBot, iLeft) { + + if (!iRight && 0 !== iRight) { + this.padding = [iTop, iTop, iTop, iTop]; + } else if (!iBot && 0 !== iBot) { + this.padding = [iTop, iRight, iTop, iRight]; + } else { + this.padding = [iTop, iRight, iBot, iLeft]; + } + }, + + + setInitPosition: function(diffX, diffY) { + var el = this.getEl(), + dx, dy, p; + + if (!this.DDMInstance.verifyEl(el)) { + return; + } + + dx = diffX || 0; + dy = diffY || 0; + + p = Ext.Element.getXY( el ); + + this.initPageX = p[0] - dx; + this.initPageY = p[1] - dy; + + this.lastPageX = p[0]; + this.lastPageY = p[1]; + + this.setStartPosition(p); + }, + + + setStartPosition: function(pos) { + var p = pos || Ext.Element.getXY( this.getEl() ); + this.deltaSetXY = null; + + this.startPageX = p[0]; + this.startPageY = p[1]; + }, + + + addToGroup: function(sGroup) { + this.groups[sGroup] = true; + this.DDMInstance.regDragDrop(this, sGroup); + }, + + + removeFromGroup: function(sGroup) { + if (this.groups[sGroup]) { + delete this.groups[sGroup]; + } + + this.DDMInstance.removeDDFromGroup(this, sGroup); + }, + + + setDragElId: function(id) { + this.dragElId = id; + }, + + + setHandleElId: function(id) { + if (typeof id !== "string") { + id = Ext.id(id); + } + this.handleElId = id; + this.DDMInstance.regHandle(this.id, id); + }, + + + setOuterHandleElId: function(id) { + if (typeof id !== "string") { + id = Ext.id(id); + } + Ext.EventManager.on(id, "mousedown", this.handleMouseDown, this); + this.setHandleElId(id); + + this.hasOuterHandles = true; + }, + + + unreg: function() { + Ext.EventManager.un(this.id, "mousedown", this.handleMouseDown, this); + this._domRef = null; + this.DDMInstance._remove(this); + }, + + destroy : function(){ + this.unreg(); + }, + + + isLocked: function() { + return (this.DDMInstance.isLocked() || this.locked); + }, + + + handleMouseDown: function(e, oDD){ + var me = this, + activeEl; + + if ((me.primaryButtonOnly && e.button != 0) || me.isLocked()) { + return; + } + + me.DDMInstance.refreshCache(me.groups); + + if (me.hasOuterHandles || me.DDMInstance.isOverTarget(e.getPoint(), me)) { + if (me.clickValidator(e)) { + activeEl = Ext.Element.getActiveElement(); + + + me.setStartPosition(); + me.b4MouseDown(e); + me.onMouseDown(e); + + me.DDMInstance.handleMouseDown(e, me); + + + + + if (activeEl) { + Ext.fly(activeEl).blur(); + } + + me.DDMInstance.stopEvent(e); + } + } + }, + + clickValidator: function(e) { + var target = e.getTarget(); + return ( this.isValidHandleChild(target) && + (this.id == this.handleElId || + this.DDMInstance.handleWasClicked(target, this.id)) ); + }, + + + addInvalidHandleType: function(tagName) { + var type = tagName.toUpperCase(); + this.invalidHandleTypes[type] = type; + }, + + + addInvalidHandleId: function(id) { + if (typeof id !== "string") { + id = Ext.id(id); + } + this.invalidHandleIds[id] = id; + }, + + + addInvalidHandleClass: function(cssClass) { + this.invalidHandleClasses.push(cssClass); + }, + + + removeInvalidHandleType: function(tagName) { + var type = tagName.toUpperCase(); + + delete this.invalidHandleTypes[type]; + }, + + + removeInvalidHandleId: function(id) { + if (typeof id !== "string") { + id = Ext.id(id); + } + delete this.invalidHandleIds[id]; + }, + + + removeInvalidHandleClass: function(cssClass) { + for (var i=0, len=this.invalidHandleClasses.length; i= this.minX; i = i - iTickSize) { + if (!tickMap[i]) { + this.xTicks[this.xTicks.length] = i; + tickMap[i] = true; + } + } + + for (i = this.initPageX; i <= this.maxX; i = i + iTickSize) { + if (!tickMap[i]) { + this.xTicks[this.xTicks.length] = i; + tickMap[i] = true; + } + } + + Ext.Array.sort(this.xTicks, this.DDMInstance.numericSort); + }, + + + setYTicks: function(iStartY, iTickSize) { + this.yTicks = []; + this.yTickSize = iTickSize; + + var tickMap = {}, + i; + + for (i = this.initPageY; i >= this.minY; i = i - iTickSize) { + if (!tickMap[i]) { + this.yTicks[this.yTicks.length] = i; + tickMap[i] = true; + } + } + + for (i = this.initPageY; i <= this.maxY; i = i + iTickSize) { + if (!tickMap[i]) { + this.yTicks[this.yTicks.length] = i; + tickMap[i] = true; + } + } + + Ext.Array.sort(this.yTicks, this.DDMInstance.numericSort); + }, + + + setXConstraint: function(iLeft, iRight, iTickSize) { + this.leftConstraint = iLeft; + this.rightConstraint = iRight; + + this.minX = this.initPageX - iLeft; + this.maxX = this.initPageX + iRight; + if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); } + + this.constrainX = true; + }, + + + clearConstraints: function() { + this.constrainX = false; + this.constrainY = false; + this.clearTicks(); + }, + + + clearTicks: function() { + this.xTicks = null; + this.yTicks = null; + this.xTickSize = 0; + this.yTickSize = 0; + }, + + + setYConstraint: function(iUp, iDown, iTickSize) { + this.topConstraint = iUp; + this.bottomConstraint = iDown; + + this.minY = this.initPageY - iUp; + this.maxY = this.initPageY + iDown; + if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); } + + this.constrainY = true; + + }, + + + resetConstraints: function() { + + if (this.initPageX || this.initPageX === 0) { + + var dx = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0, + dy = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0; + + this.setInitPosition(dx, dy); + + + } else { + this.setInitPosition(); + } + + if (this.constrainX) { + this.setXConstraint( this.leftConstraint, + this.rightConstraint, + this.xTickSize ); + } + + if (this.constrainY) { + this.setYConstraint( this.topConstraint, + this.bottomConstraint, + this.yTickSize ); + } + }, + + + getTick: function(val, tickArray) { + if (!tickArray) { + + + return val; + } else if (tickArray[0] >= val) { + + + return tickArray[0]; + } else { + var i, len, next, diff1, diff2; + for (i=0, len=tickArray.length; i= val) { + diff1 = val - tickArray[i]; + diff2 = tickArray[next] - val; + return (diff2 > diff1) ? tickArray[i] : tickArray[next]; + } + } + + + + return tickArray[tickArray.length - 1]; + } + }, + + + toString: function() { + return ("DragDrop " + this.id); + } + +}); + + + + + +Ext.define('Ext.dd.DD', { + extend: Ext.dd.DragDrop , + + + + constructor: function(id, sGroup, config) { + if (id) { + this.init(id, sGroup, config); + } + }, + + + scroll: true, + + + autoOffset: function(iPageX, iPageY) { + var x = iPageX - this.startPageX, + y = iPageY - this.startPageY; + this.setDelta(x, y); + }, + + + setDelta: function(iDeltaX, iDeltaY) { + this.deltaX = iDeltaX; + this.deltaY = iDeltaY; + }, + + + setDragElPos: function(iPageX, iPageY) { + + + + var el = this.getDragEl(); + this.alignElWithMouse(el, iPageX, iPageY); + }, + + + alignElWithMouse: function(el, iPageX, iPageY) { + var oCoord = this.getTargetCoord(iPageX, iPageY), + fly = el.dom ? el : Ext.fly(el, '_dd'), + elSize = fly.getSize(), + EL = Ext.Element, + vpSize, + aCoord, + newLeft, + newTop; + + if (!this.deltaSetXY) { + vpSize = this.cachedViewportSize = { width: EL.getDocumentWidth(), height: EL.getDocumentHeight() }; + aCoord = [ + Math.max(0, Math.min(oCoord.x, vpSize.width - elSize.width)), + Math.max(0, Math.min(oCoord.y, vpSize.height - elSize.height)) + ]; + fly.setXY(aCoord); + newLeft = this.getLocalX(fly); + newTop = fly.getLocalY(); + this.deltaSetXY = [newLeft - oCoord.x, newTop - oCoord.y]; + } else { + vpSize = this.cachedViewportSize; + this.setLocalXY( + fly, + Math.max(0, Math.min(oCoord.x + this.deltaSetXY[0], vpSize.width - elSize.width)), + Math.max(0, Math.min(oCoord.y + this.deltaSetXY[1], vpSize.height - elSize.height)) + ); + } + + this.cachePosition(oCoord.x, oCoord.y); + this.autoScroll(oCoord.x, oCoord.y, el.offsetHeight, el.offsetWidth); + return oCoord; + }, + + + cachePosition: function(iPageX, iPageY) { + if (iPageX) { + this.lastPageX = iPageX; + this.lastPageY = iPageY; + } else { + var aCoord = Ext.Element.getXY(this.getEl()); + this.lastPageX = aCoord[0]; + this.lastPageY = aCoord[1]; + } + }, + + + autoScroll: function(x, y, h, w) { + + if (this.scroll) { + + var clientH = Ext.Element.getViewHeight(), + + clientW = Ext.Element.getViewWidth(), + + st = this.DDMInstance.getScrollTop(), + + sl = this.DDMInstance.getScrollLeft(), + + bot = h + y, + + right = w + x, + + + + toBot = (clientH + st - y - this.deltaY), + + toRight = (clientW + sl - x - this.deltaX), + + + thresh = 40, + + + + scrAmt = (document.all) ? 80 : 30; + + + + if ( bot > clientH && toBot < thresh ) { + window.scrollTo(sl, st + scrAmt); + } + + + + if ( y < st && st > 0 && y - st < thresh ) { + window.scrollTo(sl, st - scrAmt); + } + + + + if ( right > clientW && toRight < thresh ) { + window.scrollTo(sl + scrAmt, st); + } + + + + if ( x < sl && sl > 0 && x - sl < thresh ) { + window.scrollTo(sl - scrAmt, st); + } + } + }, + + + getTargetCoord: function(iPageX, iPageY) { + var x = iPageX - this.deltaX, + y = iPageY - this.deltaY; + + if (this.constrainX) { + if (x < this.minX) { + x = this.minX; + } + if (x > this.maxX) { + x = this.maxX; + } + } + + if (this.constrainY) { + if (y < this.minY) { + y = this.minY; + } + if (y > this.maxY) { + y = this.maxY; + } + } + + x = this.getTick(x, this.xTicks); + y = this.getTick(y, this.yTicks); + + + return {x: x, y: y}; + }, + + + applyConfig: function() { + this.callParent(); + this.scroll = (this.config.scroll !== false); + }, + + + b4MouseDown: function(e) { + + this.autoOffset(e.getPageX(), e.getPageY()); + }, + + + b4Drag: function(e) { + this.setDragElPos(e.getPageX(), e.getPageY()); + }, + + toString: function() { + return ("DD " + this.id); + }, + + getLocalX: function(el) { + return el.getLocalX(); + }, + + setLocalXY: function(el, x, y) { + el.setLocalXY(x, y); + } + + + + + + +}); + + + + +Ext.define('Ext.dd.DDProxy', { + extend: Ext.dd.DD , + + statics: { + + dragElId: "ygddfdiv" + }, + + + constructor: function(id, sGroup, config) { + if (id) { + this.init(id, sGroup, config); + this.initFrame(); + } + }, + + + resizeFrame: true, + + + centerFrame: false, + + + createFrame: function() { + var self = this, + body = document.body, + div, + s; + + if (!body || !body.firstChild) { + setTimeout( function() { self.createFrame(); }, 50 ); + return; + } + + div = this.getDragEl(); + + if (!div) { + div = document.createElement("div"); + div.id = this.dragElId; + s = div.style; + + s.position = "absolute"; + s.visibility = "hidden"; + s.cursor = "move"; + s.border = "2px solid #aaa"; + s.zIndex = 999; + + + + + body.insertBefore(div, body.firstChild); + } + }, + + + initFrame: function() { + this.createFrame(); + }, + + applyConfig: function() { + this.callParent(); + + this.resizeFrame = (this.config.resizeFrame !== false); + this.centerFrame = (this.config.centerFrame); + this.setDragElId(this.config.dragElId || Ext.dd.DDProxy.dragElId); + }, + + + showFrame: function(iPageX, iPageY) { + var el = this.getEl(), + dragEl = this.getDragEl(), + s = dragEl.style; + + this._resizeProxy(); + + if (this.centerFrame) { + this.setDelta( Math.round(parseInt(s.width, 10)/2), + Math.round(parseInt(s.height, 10)/2) ); + } + + this.setDragElPos(iPageX, iPageY); + + Ext.fly(dragEl).show(); + }, + + + _resizeProxy: function() { + if (this.resizeFrame) { + var el = this.getEl(); + Ext.fly(this.getDragEl()).setSize(el.offsetWidth, el.offsetHeight); + } + }, + + + b4MouseDown: function(e) { + var x = e.getPageX(), + y = e.getPageY(); + this.autoOffset(x, y); + this.setDragElPos(x, y); + }, + + + b4StartDrag: function(x, y) { + + this.showFrame(x, y); + }, + + + b4EndDrag: function(e) { + Ext.fly(this.getDragEl()).hide(); + }, + + + + + endDrag: function(e) { + + var lel = this.getEl(), + del = this.getDragEl(); + + + del.style.visibility = ""; + + this.beforeMove(); + + + lel.style.visibility = "hidden"; + Ext.dd.DDM.moveToEl(lel, del); + del.style.visibility = "hidden"; + lel.style.visibility = ""; + + this.afterDrag(); + }, + + beforeMove : function(){ + + }, + + afterDrag : function(){ + + }, + + toString: function() { + return ("DDProxy " + this.id); + } + +}); + + +Ext.define('Ext.dd.StatusProxy', { + extend: Ext.Component , + animRepair: false, + + childEls: [ + 'ghost' + ], + + renderTpl: [ + '
    ' + + '
    ' + ], + + repairCls: Ext.baseCSSPrefix + 'dd-drag-repair', + + + constructor: function(config) { + var me = this; + + config = config || {}; + + Ext.apply(me, { + hideMode: 'visibility', + hidden: true, + floating: true, + id: me.id || Ext.id(), + cls: Ext.baseCSSPrefix + 'dd-drag-proxy ' + this.dropNotAllowed, + shadow: config.shadow || false, + renderTo: Ext.getDetachedBody() + }); + me.callParent(arguments); + this.dropStatus = this.dropNotAllowed; + }, + + + dropAllowed : Ext.baseCSSPrefix + 'dd-drop-ok', + + + dropNotAllowed : Ext.baseCSSPrefix + 'dd-drop-nodrop', + + + setStatus : function(cssClass){ + cssClass = cssClass || this.dropNotAllowed; + if (this.dropStatus != cssClass) { + this.el.replaceCls(this.dropStatus, cssClass); + this.dropStatus = cssClass; + } + }, + + + reset : function(clearGhost){ + var me = this, + clsPrefix = Ext.baseCSSPrefix + 'dd-drag-proxy '; + + me.el.replaceCls(clsPrefix + me.dropAllowed, clsPrefix + me.dropNotAllowed); + me.dropStatus = me.dropNotAllowed; + if (clearGhost) { + me.ghost.update(''); + } + }, + + + update : function(html){ + if (typeof html == "string") { + this.ghost.update(html); + } else { + this.ghost.update(""); + html.style.margin = "0"; + this.ghost.dom.appendChild(html); + } + var el = this.ghost.dom.firstChild; + if (el) { + Ext.fly(el).setStyle('float', 'none'); + } + }, + + + getGhost : function(){ + return this.ghost; + }, + + + hide : function(clear) { + this.callParent(); + if (clear) { + this.reset(true); + } + }, + + + stop : function(){ + if (this.anim && this.anim.isAnimated && this.anim.isAnimated()) { + this.anim.stop(); + } + }, + + + sync : function(){ + this.el.sync(); + }, + + + repair : function(xy, callback, scope) { + var me = this; + + me.callback = callback; + me.scope = scope; + if (xy && me.animRepair !== false) { + me.el.addCls(me.repairCls); + me.el.hideUnders(true); + me.anim = me.el.animate({ + duration: me.repairDuration || 500, + easing: 'ease-out', + to: { + x: xy[0], + y: xy[1] + }, + stopAnimation: true, + callback: me.afterRepair, + scope: me + }); + } else { + me.afterRepair(); + } + }, + + + afterRepair : function() { + var me = this; + + me.hide(true); + me.el.removeCls(me.repairCls); + if (typeof me.callback == "function") { + me.callback.call(me.scope || me); + } + delete me.callback; + delete me.scope; + } +}); + + +Ext.define('Ext.dd.DragSource', { + extend: Ext.dd.DDProxy , + + + + + + + + + dropAllowed : Ext.baseCSSPrefix + 'dd-drop-ok', + + dropNotAllowed : Ext.baseCSSPrefix + 'dd-drop-nodrop', + + + animRepair: true, + + + repairHighlightColor: 'c3daf9', + + + constructor: function(el, config) { + this.el = Ext.get(el); + if(!this.dragData){ + this.dragData = {}; + } + + Ext.apply(this, config); + + if(!this.proxy){ + this.proxy = new Ext.dd.StatusProxy({ + id: this.el.id + '-drag-status-proxy', + animRepair: this.animRepair + }); + } + this.callParent([this.el.dom, this.ddGroup || this.group, + {dragElId : this.proxy.id, resizeFrame: false, isTarget: false, scroll: this.scroll === true}]); + + this.dragging = false; + }, + + + getDragData : function(e){ + return this.dragData; + }, + + + onDragEnter : function(e, id){ + var target = Ext.dd.DragDropManager.getDDById(id), + status; + this.cachedTarget = target; + if (this.beforeDragEnter(target, e, id) !== false) { + if (target.isNotifyTarget) { + status = target.notifyEnter(this, e, this.dragData); + this.proxy.setStatus(status); + } else { + this.proxy.setStatus(this.dropAllowed); + } + + if (this.afterDragEnter) { + + this.afterDragEnter(target, e, id); + } + } + }, + + + beforeDragEnter: function(target, e, id) { + return true; + }, + + + onDragOver: function(e, id) { + var target = this.cachedTarget || Ext.dd.DragDropManager.getDDById(id), + status; + if (this.beforeDragOver(target, e, id) !== false) { + if(target.isNotifyTarget){ + status = target.notifyOver(this, e, this.dragData); + this.proxy.setStatus(status); + } + + if (this.afterDragOver) { + + this.afterDragOver(target, e, id); + } + } + }, + + + beforeDragOver: function(target, e, id) { + return true; + }, + + + onDragOut: function(e, id) { + var target = this.cachedTarget || Ext.dd.DragDropManager.getDDById(id); + if (this.beforeDragOut(target, e, id) !== false) { + if (target.isNotifyTarget) { + target.notifyOut(this, e, this.dragData); + } + this.proxy.reset(); + if (this.afterDragOut) { + + this.afterDragOut(target, e, id); + } + } + this.cachedTarget = null; + }, + + + beforeDragOut: function(target, e, id){ + return true; + }, + + + onDragDrop: function(e, id){ + var target = this.cachedTarget || Ext.dd.DragDropManager.getDDById(id); + if (this.beforeDragDrop(target, e, id) !== false) { + if (target.isNotifyTarget) { + if (target.notifyDrop(this, e, this.dragData) !== false) { + this.onValidDrop(target, e, id); + } else { + this.onInvalidDrop(target, e, id); + } + } else { + this.onValidDrop(target, e, id); + } + + if (this.afterDragDrop) { + + this.afterDragDrop(target, e, id); + } + } + delete this.cachedTarget; + }, + + + beforeDragDrop: function(target, e, id){ + return true; + }, + + + onValidDrop: function(target, e, id){ + this.hideProxy(); + if(this.afterValidDrop){ + + this.afterValidDrop(target, e, id); + } + }, + + + getRepairXY: function(e, data){ + return this.el.getXY(); + }, + + + onInvalidDrop: function(target, e, id) { + + + + if (!e) { + e = target; + target = null; + id = e.getTarget().id; + } + this.beforeInvalidDrop(target, e, id); + if (this.cachedTarget) { + if(this.cachedTarget.isNotifyTarget){ + this.cachedTarget.notifyOut(this, e, this.dragData); + } + this.cacheTarget = null; + } + this.proxy.repair(this.getRepairXY(e, this.dragData), this.afterRepair, this); + + if (this.afterInvalidDrop) { + + this.afterInvalidDrop(e, id); + } + }, + + + afterRepair: function() { + var me = this; + if (Ext.enableFx) { + me.el.highlight(me.repairHighlightColor); + } + me.dragging = false; + }, + + + beforeInvalidDrop: function(target, e, id) { + return true; + }, + + + handleMouseDown: function(e) { + if (this.dragging) { + return; + } + var data = this.getDragData(e); + if (data && this.onBeforeDrag(data, e) !== false) { + this.dragData = data; + this.proxy.stop(); + this.callParent(arguments); + } + }, + + + onBeforeDrag: function(data, e){ + return true; + }, + + + onStartDrag: Ext.emptyFn, + + alignElWithMouse: function() { + this.proxy.ensureAttachedToBody(true); + return this.callParent(arguments); + }, + + + startDrag: function(x, y) { + this.proxy.reset(); + this.proxy.hidden = false; + this.dragging = true; + this.proxy.update(""); + this.onInitDrag(x, y); + this.proxy.show(); + }, + + + onInitDrag: function(x, y) { + var clone = this.el.dom.cloneNode(true); + clone.id = Ext.id(); + this.proxy.update(clone); + this.onStartDrag(x, y); + return true; + }, + + + getProxy: function() { + return this.proxy; + }, + + + hideProxy: function() { + this.proxy.hide(); + this.proxy.reset(true); + this.dragging = false; + }, + + + triggerCacheRefresh: function() { + Ext.dd.DDM.refreshCache(this.groups); + }, + + + b4EndDrag: function(e) { + }, + + + endDrag : function(e){ + this.onEndDrag(this.dragData, e); + }, + + + onEndDrag : function(data, e){ + }, + + + autoOffset : function(x, y) { + this.setDelta(-12, -20); + }, + + destroy: function(){ + this.callParent(); + Ext.destroy(this.proxy); + } +}); + + +Ext.define('Ext.panel.Proxy', { + + alternateClassName: 'Ext.dd.PanelProxy', + + + moveOnDrag: true, + + + constructor: function(panel, config){ + var me = this; + + + me.panel = panel; + me.id = me.panel.id +'-ddproxy'; + Ext.apply(me, config); + }, + + + insertProxy: true, + + + setStatus: Ext.emptyFn, + reset: Ext.emptyFn, + update: Ext.emptyFn, + stop: Ext.emptyFn, + sync: Ext.emptyFn, + + + getEl: function(){ + return this.ghost.el; + }, + + + getGhost: function(){ + return this.ghost; + }, + + + getProxy: function(){ + return this.proxy; + }, + + + hide : function(){ + var me = this; + + if (me.ghost) { + if (me.proxy) { + me.proxy.remove(); + delete me.proxy; + } + + + me.panel.unghost(null, me.moveOnDrag); + delete me.ghost; + } + }, + + + show: function(){ + var me = this, + panelSize; + + if (!me.ghost) { + panelSize = me.panel.getSize(); + me.panel.el.setVisibilityMode(Ext.Element.DISPLAY); + me.ghost = me.panel.ghost(); + if (me.insertProxy) { + + + me.proxy = me.panel.el.insertSibling({cls: Ext.baseCSSPrefix + 'panel-dd-spacer'}); + me.proxy.setSize(panelSize); + } + } + }, + + + repair: function(xy, callback, scope) { + this.hide(); + Ext.callback(callback, scope || this); + }, + + + moveProxy : function(parentNode, before){ + if (this.proxy) { + parentNode.insertBefore(this.proxy.dom, before); + } + } +}); + + +Ext.define('Ext.panel.DD', { + extend: Ext.dd.DragSource , + + + constructor : function(panel, cfg){ + var me = this; + + me.panel = panel; + me.dragData = {panel: panel}; + me.panelProxy = new Ext.panel.Proxy(panel, cfg); + me.proxy = me.panelProxy.proxy; + + me.callParent([panel.el, cfg]); + me.setupEl(panel); + }, + + setupEl: function(panel){ + var me = this, + header = panel.header, + el = panel.body; + + if (header) { + me.setHandleElId(header.id); + el = header.el; + } + if (el) { + el.setStyle('cursor', 'move'); + me.scroll = false; + } else { + + panel.on('boxready', me.setupEl, me, {single: true}); + } + }, + + showFrame: Ext.emptyFn, + startDrag: Ext.emptyFn, + + b4StartDrag: function(x, y) { + this.panelProxy.show(); + }, + + b4MouseDown: function(e) { + var x = e.getPageX(), + y = e.getPageY(); + + this.autoOffset(x, y); + }, + + onInitDrag : function(x, y){ + this.onStartDrag(x, y); + return true; + }, + + createFrame : Ext.emptyFn, + + getDragEl : function(e){ + var ghost = this.panelProxy.ghost; + if (ghost) { + return ghost.el.dom; + } + }, + + endDrag : function(e){ + this.panelProxy.hide(); + this.panel.saveState(); + }, + + autoOffset : function(x, y) { + x -= this.startPageX; + y -= this.startPageY; + this.setDelta(x, y); + }, + + + + onInvalidDrop: function(target, e, id) { + var me = this; + + me.beforeInvalidDrop(target, e, id); + if (me.cachedTarget) { + if(me.cachedTarget.isNotifyTarget){ + me.cachedTarget.notifyOut(me, e, me.dragData); + } + me.cacheTarget = null; + } + + if (me.afterInvalidDrop) { + + me.afterInvalidDrop(e, id); + } + } +}); + + +Ext.define('Ext.util.Memento', (function () { + + function captureOne (src, target, prop, prefix) { + src[prefix ? prefix + prop : prop] = target[prop]; + } + + function removeOne (src, target, prop) { + delete src[prop]; + } + + function restoreOne (src, target, prop, prefix) { + var name = prefix ? prefix + prop : prop, + value = src[name]; + + if (value || src.hasOwnProperty(name)) { + restoreValue(target, prop, value); + } + } + + function restoreValue (target, prop, value) { + if (Ext.isDefined(value)) { + target[prop] = value; + } else { + delete target[prop]; + } + } + + function doMany (doOne, src, target, props, prefix) { + if (src) { + if (Ext.isArray(props)) { + var p, pLen = props.length; + for (p = 0; p < pLen; p++) { + doOne(src, target, props[p], prefix); + } + } else { + doOne(src, target, props, prefix); + } + } + } + + return { + + data: null, + + + target: null, + + + constructor: function (target, props) { + if (target) { + this.target = target; + if (props) { + this.capture(props); + } + } + }, + + + capture: function (props, target, prefix) { + var me = this; + doMany(captureOne, me.data || (me.data = {}), target || me.target, props, prefix); + }, + + + remove: function (props) { + doMany(removeOne, this.data, null, props); + }, + + + restore: function (props, clear, target, prefix) { + doMany(restoreOne, this.data, target || this.target, props, prefix); + if (clear !== false) { + this.remove(props); + } + }, + + + restoreAll: function (clear, target) { + var me = this, + t = target || this.target, + data = me.data, + prop; + + for (prop in data) { + if (data.hasOwnProperty(prop)) { + restoreValue(t, prop, data[prop]); + } + } + + if (clear !== false) { + delete me.data; + } + } + }; +}())); + + +Ext.define('Ext.panel.Panel', { + extend: Ext.panel.AbstractPanel , + + + + + + + + + + alias: 'widget.panel', + alternateClassName: 'Ext.Panel', + + + collapsedCls: 'collapsed', + + + animCollapse: Ext.enableFx, + + + minButtonWidth: 75, + + + collapsed: false, + + + collapseFirst: true, + + + hideCollapseTool: false, + + + titleCollapse: undefined, + + + + + + + floatable: true, + + + + + collapsible: undefined, + + + + + closable: false, + + + closeAction: 'destroy', + + + + + placeholderCollapseHideMode: Ext.Element.VISIBILITY, + + + preventHeader: false, + + + header: undefined, + + + headerPosition: 'top', + + + frame: false, + + + frameHeader: true, + + + + + + + + + manageHeight: true, + + + + + + + + + + + constrain: false, + + + constrainHeader: false, + + + + initComponent: function() { + var me = this; + + me.addEvents( + + + 'beforeclose', + + + 'close', + + + "beforeexpand", + + + "beforecollapse", + + + "expand", + + + "collapse", + + + 'titlechange', + + + 'iconchange', + + + 'iconclschange', + + + 'glyphchange', + + + 'float', + + + 'unfloat' + ); + + if (me.collapsible) { + + this.addStateEvents(['expand', 'collapse']); + } + if (me.unstyled) { + me.setUI('plain'); + } + + if (me.frame) { + me.setUI(me.ui + '-framed'); + } + + + me.bridgeToolbars(); + + me.callParent(); + me.collapseDirection = me.collapseDirection || me.headerPosition || Ext.Component.DIRECTION_TOP; + + + me.hiddenOnCollapse = new Ext.dom.CompositeElement(); + + }, + + beforeDestroy: function() { + var me = this; + Ext.destroy( + me.placeholder, + me.ghostPanel, + me.dd + ); + me.callParent(); + }, + + initAria: function() { + this.callParent(); + this.initHeaderAria(); + }, + + getFocusEl: function() { + return this.el; + }, + + initHeaderAria: function() { + var me = this, + el = me.el, + header = me.header; + if (el && header) { + el.dom.setAttribute('aria-labelledby', header.titleCmp.id); + } + }, + + + getHeader: function() { + return this.header; + }, + + + setTitle: function(newTitle) { + var me = this, + oldTitle = me.title, + header = me.header, + reExpander = me.reExpander, + placeholder = me.placeholder; + + me.title = newTitle; + + if (header) { + if (header.isHeader) { + header.setTitle(newTitle); + } else { + header.title = newTitle; + } + } else { + me.updateHeader(); + } + + if (reExpander) { + reExpander.setTitle(newTitle); + } + + if (placeholder && placeholder.setTitle) { + placeholder.setTitle(newTitle); + } + + me.fireEvent('titlechange', me, newTitle, oldTitle); + }, + + + setIconCls: function(newIconCls) { + var me = this, + oldIconCls = me.iconCls, + header = me.header, + placeholder = me.placeholder; + + me.iconCls = newIconCls; + + if (header) { + if (header.isHeader) { + header.setIconCls(newIconCls); + } else { + header.iconCls = newIconCls; + } + } else { + me.updateHeader(); + } + + if (placeholder && placeholder.setIconCls) { + placeholder.setIconCls(newIconCls); + } + + me.fireEvent('iconclschange', me, newIconCls, oldIconCls); + }, + + + setIcon: function(newIcon) { + var me = this, + oldIcon = me.icon, + header = me.header, + placeholder = me.placeholder; + + me.icon = newIcon; + + if (header) { + if (header.isHeader) { + header.setIcon(newIcon); + } else { + header.icon = newIcon; + } + } else { + me.updateHeader(); + } + + if (placeholder && placeholder.setIcon) { + placeholder.setIcon(newIcon); + } + + me.fireEvent('iconchange', me, newIcon, oldIcon); + }, + + + setGlyph: function(newGlyph) { + var me = this, + oldGlyph = me.glyph, + header = me.header, + placeholder = me.placeholder; + + me.glyph = newGlyph; + + if (header) { + if (header.isHeader) { + header.setGlyph(newGlyph); + } else { + header.glyph = newGlyph; + } + } else { + me.updateHeader(); + } + + if (placeholder && placeholder.setGlyph) { + placeholder.setIcon(newGlyph); + } + + me.fireEvent('glyphchange', me, newGlyph, oldGlyph); + }, + + bridgeToolbars: function() { + var me = this, + docked = [], + fbar, + fbarDefaults, + minButtonWidth = me.minButtonWidth; + + function initToolbar (toolbar, pos, useButtonAlign) { + if (Ext.isArray(toolbar)) { + toolbar = { + xtype: 'toolbar', + items: toolbar + }; + } + else if (!toolbar.xtype) { + toolbar.xtype = 'toolbar'; + } + toolbar.dock = pos; + if (pos == 'left' || pos == 'right') { + toolbar.vertical = true; + } + + + if (useButtonAlign) { + toolbar.layout = Ext.applyIf(toolbar.layout || {}, { + + pack: { left:'start', center:'center' }[me.buttonAlign] || 'end' + }); + } + return toolbar; + } + + + + + + + if (me.tbar) { + docked.push(initToolbar(me.tbar, 'top')); + me.tbar = null; + } + + + if (me.bbar) { + docked.push(initToolbar(me.bbar, 'bottom')); + me.bbar = null; + } + + + if (me.buttons) { + me.fbar = me.buttons; + me.buttons = null; + } + + + if (me.fbar) { + fbar = initToolbar(me.fbar, 'bottom', true); + fbar.ui = 'footer'; + + + if (minButtonWidth) { + fbarDefaults = fbar.defaults; + fbar.defaults = function(config) { + var defaults = fbarDefaults || {}; + if ((!config.xtype || config.xtype === 'button' || (config.isComponent && config.isXType('button'))) && + !('minWidth' in defaults)) { + defaults = Ext.apply({minWidth: minButtonWidth}, defaults); + } + return defaults; + }; + } + + docked.push(fbar); + me.fbar = null; + } + + + if (me.lbar) { + docked.push(initToolbar(me.lbar, 'left')); + me.lbar = null; + } + + + if (me.rbar) { + docked.push(initToolbar(me.rbar, 'right')); + me.rbar = null; + } + + if (me.dockedItems) { + if (!Ext.isArray(me.dockedItems)) { + me.dockedItems = [me.dockedItems]; + } + me.dockedItems = me.dockedItems.concat(docked); + } else { + me.dockedItems = docked; + } + }, + + isPlaceHolderCollapse: function(){ + return this.collapseMode == 'placeholder'; + }, + + onBoxReady: function(){ + this.callParent(); + if (this.collapsed) { + this.setHiddenDocked(); + } + }, + + beforeRender: function() { + var me = this, + wasCollapsed; + + me.callParent(); + + + + me.initTools(); + + + if (!(me.preventHeader || (me.header === false))) { + me.updateHeader(); + } + + + if (me.collapsed) { + if (me.isPlaceHolderCollapse()) { + if (!me.hidden) { + me.hidden = true; + + + + + + me.preventCollapseFire = true; + me.placeholderCollapse(); + delete me.preventCollapseFire; + wasCollapsed = me.collapsed; + + + + + me.collapsed = false; + } + } else { + me.beginCollapse(); + me.addClsWithUI(me.collapsedCls); + } + } + + + if (wasCollapsed) { + me.collapsed = wasCollapsed; + } + }, + + + initTools: function() { + var me = this; + + me.tools = me.tools ? Ext.Array.clone(me.tools) : []; + + + + if (me.collapsible && !(me.hideCollapseTool || me.header === false || me.preventHeader)) { + me.collapseDirection = me.collapseDirection || me.headerPosition || 'top'; + me.collapseTool = me.expandTool = Ext.widget({ + xtype: 'tool', + type: (me.collapsed && !me.isPlaceHolderCollapse()) ? ('expand-' + me.getOppositeDirection(me.collapseDirection)) : ('collapse-' + me.collapseDirection), + handler: me.toggleCollapse, + scope: me + }); + + + if (me.collapseFirst) { + me.tools.unshift(me.collapseTool); + } + } + + + me.addTools(); + + + if (me.closable) { + me.addClsWithUI('closable'); + me.addTool(Ext.widget({ + xtype : 'tool', + type: 'close', + handler: Ext.Function.bind(me.close, me, []) + })); + } + + + if (me.collapseTool && !me.collapseFirst) { + me.addTool(me.collapseTool); + } + }, + + + addTools: Ext.emptyFn, + + + close: function() { + if (this.fireEvent('beforeclose', this) !== false) { + this.doClose(); + } + }, + + + doClose: function() { + this.fireEvent('close', this); + this[this.closeAction](); + }, + + + updateHeader: function(force) { + var me = this, + header = me.header, + title = me.title, + tools = me.tools, + icon = me.icon || me.iconCls, + vertical = me.headerPosition == 'left' || me.headerPosition == 'right'; + + if (Ext.isObject(header) || (header !== false && (force || (title || icon) || (tools && tools.length) || (me.collapsible && !me.titleCollapse)))) { + if (header && header.isHeader) { + header.show(); + } else { + + header = me.header = Ext.widget(Ext.apply({ + xtype : 'header', + title : title, + titleAlign : me.titleAlign, + orientation : vertical ? 'vertical' : 'horizontal', + dock : me.headerPosition || 'top', + textCls : me.headerTextCls, + iconCls : me.iconCls, + icon : me.icon, + glyph : me.glyph, + baseCls : me.baseCls + '-header', + tools : tools, + ui : me.ui, + id : me.id + '_header', + overCls: me.headerOverCls, + indicateDrag: me.draggable, + frame : (me.frame || me.alwaysFramed) && me.frameHeader, + ignoreParentFrame : me.frame || me.overlapHeader, + ignoreBorderManagement: me.frame || me.ignoreHeaderBorderManagement, + ownerCt : me, + listeners : me.collapsible && me.titleCollapse ? { + click: me.toggleCollapse, + scope: me + } : null + }, me.header)); + + + + me.addDocked(header, 0); + } + me.initHeaderAria(); + } else if (header) { + header.hide(); + } + }, + + + setUI: function(ui) { + var me = this; + + me.callParent(arguments); + + if (me.header && me.header.rendered) { + me.header.setUI(ui); + } + }, + + + getDefaultContentTarget: function() { + return this.body; + }, + + getTargetEl: function() { + var me = this; + return me.body || me.protoBody || me.frameBody || me.el; + }, + + + + + isVisible: function(deep){ + var me = this; + if (me.collapsed && me.placeholder) { + return me.placeholder.isVisible(deep); + } + return me.callParent(arguments); + }, + + + onHide: function() { + var me = this; + if (me.collapsed && me.placeholder) { + me.placeholder.hide(); + } else { + me.callParent(arguments); + } + }, + + + onShow: function() { + var me = this; + if (me.collapsed && me.isPlaceHolderCollapse()) { + + me.hidden = true; + me.placeholderCollapse(); + } else { + me.callParent(arguments); + } + }, + + onRemoved: function(destroying) { + var me = this; + + + + + if (me.placeholder && !destroying) { + me.ownerCt.remove(me.placeholder, false); + } + + me.callParent(arguments); + }, + + + addTool: function(tools) { + if (!Ext.isArray(tools)) { + tools = [tools]; + } + + var me = this, + header = me.header, + t, + tLen = tools.length, + tool; + + for (t = 0; t < tLen; t++) { + tool = tools[t]; + + if (header && header.isHeader) { + header.addTool(tool); + } else { + + + me.tools.push(tool); + } + } + + me.updateHeader(); + }, + + getOppositeDirection: function(d) { + var c = Ext.Component; + switch (d) { + case c.DIRECTION_TOP: + return c.DIRECTION_BOTTOM; + case c.DIRECTION_RIGHT: + return c.DIRECTION_LEFT; + case c.DIRECTION_BOTTOM: + return c.DIRECTION_TOP; + case c.DIRECTION_LEFT: + return c.DIRECTION_RIGHT; + } + }, + + getWidthAuthority: function() { + if (this.collapsed && this.collapsedHorizontal()) { + return 1; + } + + return this.callParent(); + }, + + getHeightAuthority: function() { + if (this.collapsed && this.collapsedVertical()) { + return 1; + } + + return this.callParent(); + }, + + collapsedHorizontal: function () { + var dir = this.getCollapsed(); + return dir == 'left' || dir == 'right'; + }, + + collapsedVertical: function () { + var dir = this.getCollapsed(); + return dir == 'top' || dir == 'bottom'; + }, + + restoreDimension: function(){ + var dir = this.collapseDirection; + + + return (dir === 'top' || dir === 'bottom') ? 'height' : 'width'; + }, + + + getCollapsed: function() { + var me = this; + + + if (me.collapsed === true) { + return me.collapseDirection; + } + return me.collapsed; + }, + + getState: function() { + var me = this, + state = me.callParent(), + memento; + + state = me.addPropertyToState(state, 'collapsed'); + + + if (me.collapsed) { + memento = me.collapseMemento; + memento = memento && memento.data; + + if (me.collapsedVertical()) { + if (state) { + delete state.height; + } + if (memento) { + state = me.addPropertyToState(state, 'height', memento.height); + } + } else { + if (state) { + delete state.width; + } + if (memento) { + state = me.addPropertyToState(state, 'width', memento.width); + } + } + } + + return state; + }, + + findReExpander: function (direction) { + var me = this, + c = Ext.Component, + dockedItems = me.dockedItems.items, + dockedItemCount = dockedItems.length, + comp, i; + + + if (me.collapseMode == 'mini') { + return; + } + + switch (direction) { + case c.DIRECTION_TOP: + case c.DIRECTION_BOTTOM: + + + + for (i = 0; i < dockedItemCount; i++) { + comp = dockedItems[i]; + if (!comp.hidden) { + if (comp.isHeader && (!comp.dock || comp.dock == 'top' || comp.dock == 'bottom')) { + return comp; + } + } + } + break; + + case c.DIRECTION_LEFT: + case c.DIRECTION_RIGHT: + + + + for (i = 0; i < dockedItemCount; i++) { + comp = dockedItems[i]; + if (!comp.hidden) { + if (comp.isHeader && (comp.dock == 'left' || comp.dock == 'right')) { + return comp; + } + } + } + break; + + default: + throw('Panel#findReExpander must be passed a valid collapseDirection'); + } + }, + + getReExpander: function (direction) { + var me = this, + collapseDir = direction || me.collapseDirection, + reExpander = me.reExpander || me.findReExpander(collapseDir); + + me.expandDirection = me.getOppositeDirection(collapseDir); + + if (!reExpander) { + + me.reExpander = reExpander = me.createReExpander(collapseDir, { + dock: collapseDir, + cls: Ext.baseCSSPrefix + 'docked ' + me.baseCls + '-' + me.ui + '-collapsed' + }); + + me.dockedItems.insert(0, reExpander); + } + return reExpander; + }, + + createReExpander: function(direction, defaults) { + var me = this, + isLeft = direction == 'left', + isRight = direction == 'right', + isVertical = isLeft || isRight, + result = Ext.apply({ + hideMode: 'offsets', + title: me.title || ' ', + titleAlign: me.titleAlign, + orientation: isVertical ? 'vertical' : 'horizontal', + textCls: me.headerTextCls, + icon: me.icon, + iconCls: me.iconCls, + glyph: me.glyph, + baseCls: me.self.prototype.baseCls + '-header', + ui: me.ui, + frame: me.frame && me.frameHeader, + ignoreParentFrame: me.frame || me.overlapHeader, + indicateDrag: me.draggable, + collapseImmune: true, + ownerCt: me.ownerCt, + ownerLayout: me.componentLayout + }, defaults); + + + + if (me.collapseMode == 'mini') { + if (isVertical) { + result.width = 1; + } else { + result.height = 1; + } + } + + + + + if (!me.hideCollapseTool) { + if (isLeft || (isRight && me.isPlaceHolderCollapse())) { + + + result.titlePosition = 1; + } + result['tools'] = [{ + xtype: 'tool', + type: 'expand-' + me.getOppositeDirection(direction), + uiCls: ['top'], + handler: me.toggleCollapse, + scope: me + }]; + } + result = new Ext.panel.Header(result); + result.addClsWithUI(me.getHeaderCollapsedClasses(result)); + return result; + }, + + + + getHeaderCollapsedClasses: function(header) { + var me = this, + collapsedCls = me.collapsedCls, + collapsedClasses; + + collapsedClasses = [ collapsedCls, collapsedCls + '-' + header.getDockName()]; + if (me.border && (!me.frame || (me.frame && Ext.supports.CSS3BorderRadius))) { + collapsedClasses.push(collapsedCls + '-border-' + header.getDockName()); + } + return collapsedClasses; + }, + + + beginCollapse: function() { + var me = this, + lastBox = me.lastBox, + rendered = me.rendered, + collapseMemento = me.collapseMemento || (me.collapseMemento = new Ext.util.Memento(me)), + sizeModel = me.getSizeModel(), + header = me.header, + reExpander; + + + + + + + + + + + + + collapseMemento.capture(['height', 'minHeight', 'width', 'minWidth']); + if (lastBox) { + collapseMemento.capture(me.restoreDimension(), lastBox, 'last.'); + } + + + + + + if (me.collapsedVertical()) { + if (sizeModel.width.shrinkWrap) { + me.width = rendered ? me.getWidth() : me.width || me.minWidth || 100; + } + delete me.height; + me.minHeight = 0; + } else if (me.collapsedHorizontal()) { + if (sizeModel.height.shrinkWrap) { + me.height = rendered ? me.getHeight() : me.height || me.minHeight || 100; + } + delete me.width; + me.minWidth = 0; + } + + if (me.ownerCt) { + me.ownerCt.getLayout().beginCollapse(me); + } + + + + if (!me.isPlaceHolderCollapse() && header !== false) { + if (header === (reExpander = me.getReExpander())) { + header.collapseImmune = true; + header.getHierarchyState().collapseImmune = true; + header.addClsWithUI(me.getHeaderCollapsedClasses(header)); + + + if (header.rendered) { + header.updateFrame(); + } + } else if (reExpander.el) { + + reExpander.el.show(); + reExpander.hidden = false; + } + } + if (me.resizer) { + me.resizer.disable(); + } + }, + + beginExpand: function() { + var me = this, + lastBox = me.lastBox, + collapseMemento = me.collapseMemento, + restoreDimension = this.restoreDimension(), + header = me.header, + reExpander; + + if (collapseMemento) { + collapseMemento.restore(['minHeight', 'minWidth', restoreDimension]); + if (lastBox) { + collapseMemento.restore(restoreDimension, true, lastBox, 'last.'); + } + } + + if (me.ownerCt) { + me.ownerCt.getLayout().beginExpand(me); + } + + if (!me.isPlaceHolderCollapse() && header !== false) { + + if (header === (reExpander = me.getReExpander())) { + delete header.collapseImmune; + delete header.getHierarchyState().collapseImmune; + header.removeClsWithUI(me.getHeaderCollapsedClasses(header)); + + + if (header.rendered) { + header.updateFrame(); + } + } else { + + reExpander.hidden = true; + reExpander.el.hide(); + } + } + if (me.resizer) { + me.resizer.enable(); + } + }, + + + collapse: function(direction, animate) { + var me = this, + collapseDir = direction || me.collapseDirection, + ownerCt = me.ownerCt; + + if (me.isCollapsingOrExpanding) { + return me; + } + + if (arguments.length < 2) { + animate = me.animCollapse; + } + + if (me.collapsed || me.fireEvent('beforecollapse', me, direction, animate) === false) { + return me; + } + + if (ownerCt && me.isPlaceHolderCollapse()) { + return me.placeholderCollapse(direction, animate); + } + + me.collapsed = collapseDir; + me.beginCollapse(); + + me.getHierarchyState().collapsed = true; + me.fireHierarchyEvent('collapse'); + + return me.doCollapseExpand(1, animate); + }, + + doCollapseExpand: function (flags, animate) { + var me = this, + originalAnimCollapse = me.animCollapse, + ownerLayout = me.ownerLayout; + + + + me.animCollapse = animate; + + + + me.isCollapsingOrExpanding = flags; + + + + if (animate) { + me.addCls(Ext.baseCSSPrefix + 'animating-size'); + } + + if (ownerLayout && !animate) { + ownerLayout.onContentChange(me); + } else { + me.updateLayout({ isRoot: true }); + } + + + me.animCollapse = originalAnimCollapse; + + return me; + }, + + + afterCollapse: function(animated) { + var me = this, + ownerLayout = me.ownerLayout; + + me.isCollapsingOrExpanding = 0; + if (me.collapseTool) { + me.collapseTool.setType('expand-' + me.getOppositeDirection(me.collapseDirection)); + } + + + + if (animated) { + me.removeCls(Ext.baseCSSPrefix + 'animating-size'); + } + + if (ownerLayout && animated) { + ownerLayout.onContentChange(me); + } + + me.setHiddenDocked(); + me.fireEvent('collapse', me); + }, + + setHiddenDocked: function(){ + + + var me = this, + toHide = me.hiddenOnCollapse, + items = me.getDockedItems(), + len = items.length, + i = 0, + item, reExpander; + + if (me.header !== false) { + reExpander = me.getReExpander(); + } + + toHide.add(me.body); + for (; i < len; i++) { + item = items[i]; + if (item && item !== reExpander && item.el) { + toHide.add(item.el); + } + } + toHide.setStyle('visibility', 'hidden'); + }, + + restoreHiddenDocked: function(){ + var toShow = this.hiddenOnCollapse; + + toShow.setStyle('visibility', ''); + toShow.clear(); + }, + + getPlaceholder: function(direction) { + var me = this, + collapseDir = direction || me.collapseDirection, + listeners = null, + placeholder = me.placeholder, + floatable = me.floatable, + titleCollapse = me.titleCollapse; + + if (!placeholder) { + if (floatable || (me.collapsible && titleCollapse)) { + listeners = { + click: { + + fn: (!titleCollapse && floatable) ? me.floatCollapsedPanel : me.toggleCollapse, + element: 'el', + scope: me + } + }; + } + + me.placeholder = placeholder = Ext.widget(me.createReExpander(collapseDir, { + id: me.id + '-placeholder', + listeners: listeners + })); + } + + + if (!placeholder.placeholderFor) { + + if (!placeholder.isComponent) { + me.placeholder = placeholder = me.lookupComponent(placeholder); + } + Ext.applyIf(placeholder, { + margins: me.margins, + placeholderFor: me + }); + + placeholder.addCls([Ext.baseCSSPrefix + 'region-collapsed-placeholder', Ext.baseCSSPrefix + 'region-collapsed-' + collapseDir + '-placeholder', me.collapsedCls]); + } + + return placeholder; + }, + + placeholderCollapse: function(direction, animate) { + var me = this, + ownerCt = me.ownerCt, + collapseDir = direction || me.collapseDirection, + floatCls = Ext.baseCSSPrefix + 'border-region-slide-in', + placeholder = me.getPlaceholder(direction), + slideInDirection; + + me.isCollapsingOrExpanding = 1; + + + me.hidden = true; + me.collapsed = collapseDir; + + if (placeholder.rendered) { + + if (placeholder.el.dom.parentNode !== me.el.dom.parentNode) { + me.el.dom.parentNode.insertBefore(placeholder.el.dom, me.el.dom); + } + + placeholder.hidden = false; + placeholder.el.show(); + ownerCt.updateLayout(); + } else { + ownerCt.insert(ownerCt.items.indexOf(me), placeholder); + } + + if (me.rendered) { + + me.el.setVisibilityMode(me.placeholderCollapseHideMode); + if (animate) { + me.el.addCls(floatCls); + placeholder.el.hide(); + slideInDirection = me.convertCollapseDir(collapseDir); + + me.el.slideOut(slideInDirection, { + preserveScroll: true, + duration: Ext.Number.from(animate, Ext.fx.Anim.prototype.duration), + listeners: { + afteranimate: function() { + me.el.removeCls(floatCls); + + placeholder.el.show().setStyle('display', 'none').slideIn(slideInDirection, { + easing: 'linear', + duration: 100, + listeners: { + afteranimate: function() { + placeholder.focus(); + me.isCollapsingOrExpanding = 0; + me.fireEvent('collapse', me); + } + } + }); + } + } + }); + } else { + me.el.hide(); + me.isCollapsingOrExpanding = 0; + me.fireEvent('collapse', me); + } + } else { + me.isCollapsingOrExpanding = 0; + if (!me.preventCollapseFire) { + me.fireEvent('collapse', me); + } + } + + return me; + }, + + floatCollapsedPanel: function() { + var me = this, + placeholder = me.placeholder, + ps = placeholder.getSize(), + myBox, + floatCls = Ext.baseCSSPrefix + 'border-region-slide-in', + collapsed = me.collapsed, + layoutOwner = me.ownerCt || me, + slideDirection; + + if (me.isSliding) { + return; + } + + + if (me.el.hasCls(floatCls)) { + me.slideOutFloatedPanel(); + return; + } + me.isSliding = true; + + + placeholder.el.hide(); + placeholder.hidden = true; + me.el.show(); + me.hidden = false; + me.collapsed = false; + layoutOwner.updateLayout(); + myBox = me.getBox(false, true); + + + placeholder.el.show(); + placeholder.hidden = false; + me.el.hide(); + me.hidden = true; + me.collapsed = collapsed; + layoutOwner.updateLayout(); + + me.slideOutTask = me.slideOutTask || new Ext.util.DelayedTask(me.slideOutFloatedPanel, me); + placeholder.el.on('mouseleave', me.onMouseLeaveFloated, me); + me.el.on('mouseleave', me.onMouseLeaveFloated, me); + placeholder.el.on('mouseenter', me.onMouseEnterFloated, me); + me.el.on('mouseenter', me.onMouseEnterFloated, me); + + me.el.addCls(floatCls); + me.floated = true; + + + if (me.collapseTool) { + me.collapseTool.el.hide(); + } + + switch (me.collapsed) { + case 'top': + me.setLocalXY(myBox.x, myBox.y + ps.height - 1); + break; + case 'right': + me.setLocalXY(myBox.x - ps.width + 1, myBox.y); + break; + case 'bottom': + me.setLocalXY(myBox.x, myBox.y - ps.height + 1); + break; + case 'left': + me.setLocalXY(myBox.x + ps.width - 1, myBox.y); + break; + } + slideDirection = me.convertCollapseDir(me.collapsed); + + + + me.floatedFromCollapse = me.collapsed; + me.collapsed = me.hidden = false; + + me.el.slideIn(slideDirection, { + preserveScroll: true, + duration: Ext.Number.from(me.animCollapse, Ext.fx.Anim.prototype.duration), + listeners: { + afteranimate: function() { + me.isSliding = false; + me.fireEvent('float', me); + } + } + }); + }, + + onMouseLeaveFloated: function(e) { + this.slideOutTask.delay(500); + }, + + onMouseEnterFloated: function(e) { + this.slideOutTask.cancel(); + }, + + isLayoutRoot: function() { + if (this.floatedFromCollapse) { + return true; + } + return this.callParent(); + }, + + slideOutFloatedPanel: function() { + var me = this, + compEl = this.el, + collapseDirection; + + if (me.isSliding || me.isDestroyed) { + return; + } + + me.isSliding = true; + me.floated = false; + + me.slideOutFloatedPanelBegin(); + + if (typeof me.collapsed == 'string') { + collapseDirection = me.convertCollapseDir(me.collapsed); + } + + compEl.slideOut(collapseDirection, { + preserveScroll: true, + duration: Ext.Number.from(me.animCollapse, Ext.fx.Anim.prototype.duration), + listeners: { + afteranimate: function() { + me.slideOutFloatedPanelEnd(); + + + me.el.removeCls(Ext.baseCSSPrefix + 'border-region-slide-in'); + } + } + }); + }, + + + slideOutFloatedPanelBegin: function() { + var me = this, + placeholderEl = me.placeholder.el, + el = me.el; + + me.collapsed = me.floatedFromCollapse; + me.hidden = true; + me.floatedFromCollapse = null; + + + placeholderEl.un('mouseleave', me.onMouseLeaveFloated, me); + el.un('mouseleave', me.onMouseLeaveFloated, me); + placeholderEl.un('mouseenter', me.onMouseEnterFloated, me); + el.un('mouseenter', me.onMouseEnterFloated, me); + }, + + + slideOutFloatedPanelEnd: function() { + var me = this; + + if (me.collapseTool) { + me.collapseTool.el.show(); + } + me.isSliding = false; + me.fireEvent('unfloat', me); + }, + + + expand: function(animate) { + var me = this; + + if (me.isCollapsingOrExpanding) { + return me; + } + + if (!arguments.length) { + animate = me.animCollapse; + } + + if (!me.collapsed && !me.floatedFromCollapse) { + return me; + } + + if (me.fireEvent('beforeexpand', me, animate) === false) { + return me; + } + + delete this.getHierarchyState().collapsed; + + if (me.isPlaceHolderCollapse()) { + return me.placeholderExpand(animate); + } + + me.restoreHiddenDocked(); + me.beginExpand(); + me.collapsed = false; + + return me.doCollapseExpand(2, animate); + }, + + placeholderExpand: function(animate) { + var me = this, + collapseDir = me.collapsed, + floatCls = Ext.baseCSSPrefix + 'border-region-slide-in', + finalPos, + floatedPos, + center = me.ownerLayout ? me.ownerLayout.centerRegion: null; + + + if (Ext.AbstractComponent.layoutSuspendCount) { + animate = false; + } + + if (me.floatedFromCollapse) { + floatedPos = me.getPosition(true); + + me.slideOutFloatedPanelBegin(); + me.slideOutFloatedPanelEnd(); + me.floated = false; + } + + if (animate) { + + + Ext.suspendLayouts(); + me.placeholder.hide(); + me.el.show(); + me.hidden = me.collapsed = false; + + + + if (center && !floatedPos) { + center.hidden = true; + } + + Ext.resumeLayouts(true); + center.hidden = false; + me.el.addCls(floatCls); + + + + + + + + + + + + + me.isCollapsingOrExpanding = 2; + + + if (floatedPos) { + finalPos = me.getXY(); + me.setLocalXY(floatedPos[0], floatedPos[1]); + me.setXY([finalPos[0], finalPos[1]], { + duration: Ext.Number.from(animate, Ext.fx.Anim.prototype.duration), + listeners: { + afteranimate: function() { + me.el.removeCls(floatCls); + me.isCollapsingOrExpanding = 0; + me.fireEvent('expand', me); + } + } + }); + } + + else { + me.el.hide(); + me.placeholder.el.show(); + me.placeholder.hidden = false; + + + me.hidden = false; + me.el.slideIn(me.convertCollapseDir(collapseDir), { + preserveScroll: true, + duration: Ext.Number.from(animate, Ext.fx.Anim.prototype.duration), + listeners: { + afteranimate: function() { + + + + + + me.el.removeCls(floatCls); + me.placeholder.hide(); + + + me.updateLayout(); + + me.isCollapsingOrExpanding = 0; + me.fireEvent('expand', me); + } + } + }); + } + + } else { + me.floated = me.collapsed = false; + Ext.suspendLayouts(); + me.placeholder.hide(); + me.show(); + Ext.resumeLayouts(true); + me.fireEvent('expand', me); + } + + return me; + }, + + + afterExpand: function(animated) { + var me = this, + ownerLayout = me.ownerLayout; + + me.isCollapsingOrExpanding = 0; + if (me.collapseTool) { + me.collapseTool.setType('collapse-' + me.collapseDirection); + } + + + + if (animated) { + me.removeCls(Ext.baseCSSPrefix + 'animating-size'); + } + + if (ownerLayout && animated) { + ownerLayout.onContentChange(me); + } + + me.fireEvent('expand', me); + me.fireHierarchyEvent('expand'); + }, + + + setBorder: function(border, targetEl) { + if (targetEl) { + + return; + } + + var me = this, + header = me.header; + + if (!border) { + border = 0; + } else if (border === true) { + border = '1px'; + } else { + border = Ext.Element.unitizeBox(border); + } + + if (header) { + if (header.isHeader) { + header.setBorder(border); + } else { + header.border = border; + } + } + + if (me.rendered && me.bodyBorder !== false) { + me.body.setStyle('border-width', border); + } + me.updateLayout(); + + me.border = border; + }, + + + toggleCollapse: function() { + return (this.collapsed || this.floatedFromCollapse) ? this.expand() : this.collapse(); + }, + + + getKeyMap : function() { + return this.keyMap || (this.keyMap = new Ext.util.KeyMap(Ext.apply({ + target: this.el + }, this.keys))); + }, + + + initDraggable : function() { + + + if (this.simpleDrag) { + this.initSimpleDraggable(); + } + + else { + + this.dd = new Ext.panel.DD(this, Ext.isBoolean(this.draggable) ? null : this.draggable); + } + }, + + + initSimpleDraggable: function() { + var me = this, + ddConfig, dd; + + if (!me.header) { + me.updateHeader(true); + } + + + if (me.header) { + ddConfig = Ext.applyIf({ + el: me.el, + delegate: '#' + Ext.escapeId(me.header.id) + }, me.draggable); + + + if (me.constrain || me.constrainHeader) { + ddConfig.constrain = me.constrain; + ddConfig.constrainDelegate = me.constrainHeader; + ddConfig.constrainTo = me.constrainTo || me.container; + } + + dd = me.dd = new Ext.util.ComponentDragger(this, ddConfig); + me.relayEvents(dd, ['dragstart', 'drag', 'dragend']); + if (me.maximized) { + dd.disable(); + } + } + }, + + + + ghostTools : function() { + var tools = [], + header = this.header, + headerTools = header ? header.query('tool[hidden=false]') : [], + t, tLen, tool; + + if (headerTools.length) { + t = 0; + tLen = headerTools.length; + + for (; t < tLen; t++) { + tool = headerTools[t]; + + + + + + tools.push({ + type: tool.type + }); + } + } else { + tools = [{ + type: 'placeholder' + }]; + } + return tools; + }, + + + + ghost: function(cls) { + var me = this, + ghostPanel = me.ghostPanel, + box = me.getBox(), + header; + + if (!ghostPanel) { + ghostPanel = new Ext.panel.Panel({ + renderTo: Ext.getBody(), + floating: { + shadow: false + }, + frame: me.frame && !me.alwaysFramed, + alwaysFramed: me.alwaysFramed, + overlapHeader: me.overlapHeader, + headerPosition: me.headerPosition, + baseCls: me.baseCls, + cls: me.baseCls + '-ghost ' + (cls ||'') + }); + me.ghostPanel = ghostPanel; + } else { + ghostPanel.el.show(); + } + me.ghostPanel.hidden = false; + ghostPanel.floatParent = me.floatParent; + if (me.floating) { + ghostPanel.setZIndex(Ext.Number.from(me.el.getStyle('zIndex'), 0)); + } else { + ghostPanel.toFront(); + } + if (!(me.preventHeader || (me.header === false))) { + header = ghostPanel.header; + + if (header) { + header.suspendLayouts(); + Ext.Array.forEach(header.query('tool'), header.remove, header); + header.resumeLayouts(); + } + ghostPanel.addTool(me.ghostTools()); + ghostPanel.setTitle(me.title); + + if (me.iconCls) { + ghostPanel.setIconCls(me.iconCls); + } else if (me.icon) { + ghostPanel.setIcon(me.icon); + } else if (me.glyph) { + ghostPanel.setGlyph(me.glyph); + } + + ghostPanel.header.addCls(Ext.baseCSSPrefix + 'header-ghost'); + } + + ghostPanel.setPagePosition(box.x, box.y); + ghostPanel.setSize(box.width, box.height); + me.el.hide(); + return ghostPanel; + }, + + + unghost: function(show, matchPosition) { + var me = this; + if (!me.ghostPanel) { + return; + } + if (show !== false) { + + + me.el.show(); + if (matchPosition !== false) { + me.setPagePosition(me.ghostPanel.getXY()); + if (me.hideMode == 'offsets') { + + delete me.el.hideModeStyles; + } + } + Ext.defer(me.focus, 10, me); + } + me.ghostPanel.el.hide(); + me.ghostPanel.hidden = true; + }, + + beginDrag: function() { + if (this.floatingDescendants) { + this.floatingDescendants.hide(); + } + }, + + endDrag: function() { + if (this.floatingDescendants) { + this.floatingDescendants.show(); + } + }, + + initResizable: function() { + this.callParent(arguments); + if (this.collapsed) { + this.resizer.disable(); + } + }, + + + convertCollapseDir: function(collapseDir) { + return collapseDir.substr(0, 1); + } +}, function() { + this.prototype.animCollapse = Ext.enableFx; +}); + + +Ext.define('Ext.tip.Tip', { + extend: Ext.panel.Panel , + + alternateClassName: 'Ext.Tip', + + + + + + + minWidth : 40, + + maxWidth : 300, + + shadow : "sides", + + + defaultAlign : "tl-bl?", + + constrainPosition : true, + + + autoRender: true, + hidden: true, + baseCls: Ext.baseCSSPrefix + 'tip', + floating: { + shadow: true, + shim: true + }, + focusOnToFront: false, + + + closeAction: 'hide', + + ariaRole: 'tooltip', + + + alwaysFramed: true, + + frameHeader: false, + + initComponent: function() { + var me = this; + + me.floating = Ext.apply( {}, { + shadow: me.shadow, + constrain: me.constrainPosition + }, me.self.prototype.floating); + me.callParent(arguments); + + + me.constrain = me.constrain || me.constrainPosition; + }, + + + showAt : function(xy){ + var me = this; + this.callParent(arguments); + + if (me.isVisible()) { + me.setPagePosition(xy[0], xy[1]); + if (me.constrainPosition || me.constrain) { + me.doConstrain(); + } + me.toFront(true); + } + }, + + + showBy : function(el, pos) { + this.showAt(this.getAlignToXY(el, pos || this.defaultAlign)); + }, + + + initDraggable : function(){ + var me = this; + me.draggable = { + el: me.getDragEl(), + delegate: me.header.el, + constrain: me, + constrainTo: me.el.dom.parentNode + }; + + Ext.Component.prototype.initDraggable.call(me); + }, + + + ghost: undefined, + unghost: undefined +}); + + +Ext.define('Ext.tip.ToolTip', { + extend: Ext.tip.Tip , + alias: 'widget.tooltip', + alternateClassName: 'Ext.ToolTip', + + + + autoHide: true, + + + showDelay: 500, + + hideDelay: 200, + + dismissDelay: 5000, + + + trackMouse: false, + + + anchorToTarget: true, + + anchorOffset: 0, + + + + targetCounter: 0, + quickShowInterval: 250, + + + initComponent: function() { + var me = this; + me.callParent(arguments); + me.lastActive = new Date(); + me.setTarget(me.target); + me.origAnchor = me.anchor; + }, + + + onRender: function(ct, position) { + var me = this; + me.callParent(arguments); + me.anchorCls = Ext.baseCSSPrefix + 'tip-anchor-' + me.getAnchorPosition(); + me.anchorEl = me.el.createChild({ + cls: Ext.baseCSSPrefix + 'tip-anchor ' + me.anchorCls + }); + }, + + + setTarget: function(target) { + var me = this, + t = Ext.get(target), + tg; + + if (me.target) { + tg = Ext.get(me.target); + me.mun(tg, 'mouseover', me.onTargetOver, me); + me.mun(tg, 'mouseout', me.onTargetOut, me); + me.mun(tg, 'mousemove', me.onMouseMove, me); + } + + me.target = t; + if (t) { + + me.mon(t, { + + + freezeEvent: true, + + mouseover: me.onTargetOver, + mouseout: me.onTargetOut, + mousemove: me.onMouseMove, + scope: me + }); + } + if (me.anchor) { + me.anchorTarget = me.target; + } + }, + + + onMouseMove: function(e) { + var me = this, + t = me.delegate ? e.getTarget(me.delegate) : me.triggerElement = true, + xy; + if (t) { + me.targetXY = e.getXY(); + if (t === me.triggerElement) { + if (!me.hidden && me.trackMouse) { + xy = me.getTargetXY(); + if (me.constrainPosition) { + xy = me.el.adjustForConstraints(xy, me.el.parent()); + } + me.setPagePosition(xy); + } + } else { + me.hide(); + me.lastActive = new Date(0); + me.onTargetOver(e); + } + } else if ((!me.closable && me.isVisible()) && me.autoHide !== false) { + me.hide(); + } + }, + + + getTargetXY: function() { + var me = this, + mouseOffset, + offsets, xy, dw, dh, de, bd, scrollX, scrollY, axy, sz, constrainPosition; + if (me.delegate) { + me.anchorTarget = me.triggerElement; + } + if (me.anchor) { + me.targetCounter++; + offsets = me.getOffsets(); + xy = (me.anchorToTarget && !me.trackMouse) ? me.getAlignToXY(me.anchorTarget, me.getAnchorAlign()) : me.targetXY; + dw = Ext.Element.getViewWidth() - 5; + dh = Ext.Element.getViewHeight() - 5; + de = document.documentElement; + bd = document.body; + scrollX = (de.scrollLeft || bd.scrollLeft || 0) + 5; + scrollY = (de.scrollTop || bd.scrollTop || 0) + 5; + axy = [xy[0] + offsets[0], xy[1] + offsets[1]]; + sz = me.getSize(); + constrainPosition = me.constrainPosition; + + me.anchorEl.removeCls(me.anchorCls); + + if (me.targetCounter < 2 && constrainPosition) { + if (axy[0] < scrollX) { + if (me.anchorToTarget) { + me.defaultAlign = 'l-r'; + if (me.mouseOffset) { + me.mouseOffset[0] *= -1; + } + } + me.anchor = 'left'; + return me.getTargetXY(); + } + if (axy[0] + sz.width > dw) { + if (me.anchorToTarget) { + me.defaultAlign = 'r-l'; + if (me.mouseOffset) { + me.mouseOffset[0] *= -1; + } + } + me.anchor = 'right'; + return me.getTargetXY(); + } + if (axy[1] < scrollY) { + if (me.anchorToTarget) { + me.defaultAlign = 't-b'; + if (me.mouseOffset) { + me.mouseOffset[1] *= -1; + } + } + me.anchor = 'top'; + return me.getTargetXY(); + } + if (axy[1] + sz.height > dh) { + if (me.anchorToTarget) { + me.defaultAlign = 'b-t'; + if (me.mouseOffset) { + me.mouseOffset[1] *= -1; + } + } + me.anchor = 'bottom'; + return me.getTargetXY(); + } + } + + me.anchorCls = Ext.baseCSSPrefix + 'tip-anchor-' + me.getAnchorPosition(); + me.anchorEl.addCls(me.anchorCls); + me.targetCounter = 0; + return axy; + } else { + mouseOffset = me.getMouseOffset(); + return (me.targetXY) ? [me.targetXY[0] + mouseOffset[0], me.targetXY[1] + mouseOffset[1]] : mouseOffset; + } + }, + + getMouseOffset: function() { + var me = this, + offset = me.anchor ? [0, 0] : [15, 18]; + if (me.mouseOffset) { + offset[0] += me.mouseOffset[0]; + offset[1] += me.mouseOffset[1]; + } + return offset; + }, + + + getAnchorPosition: function() { + var me = this, + m; + if (me.anchor) { + me.tipAnchor = me.anchor.charAt(0); + } else { + m = me.defaultAlign.match(/^([a-z]+)-([a-z]+)(\?)?$/); + me.tipAnchor = m[1].charAt(0); + } + + switch (me.tipAnchor) { + case 't': + return 'top'; + case 'b': + return 'bottom'; + case 'r': + return 'right'; + } + return 'left'; + }, + + + getAnchorAlign: function() { + switch (this.anchor) { + case 'top': + return 'tl-bl'; + case 'left': + return 'tl-tr'; + case 'right': + return 'tr-tl'; + default: + return 'bl-tl'; + } + }, + + + getOffsets: function() { + var me = this, + mouseOffset, + offsets, + ap = me.getAnchorPosition().charAt(0); + if (me.anchorToTarget && !me.trackMouse) { + switch (ap) { + case 't': + offsets = [0, 9]; + break; + case 'b': + offsets = [0, -13]; + break; + case 'r': + offsets = [ - 13, 0]; + break; + default: + offsets = [9, 0]; + break; + } + } else { + switch (ap) { + case 't': + offsets = [ - 15 - me.anchorOffset, 30]; + break; + case 'b': + offsets = [ - 19 - me.anchorOffset, -13 - me.el.dom.offsetHeight]; + break; + case 'r': + offsets = [ - 15 - me.el.dom.offsetWidth, -13 - me.anchorOffset]; + break; + default: + offsets = [25, -13 - me.anchorOffset]; + break; + } + } + mouseOffset = me.getMouseOffset(); + offsets[0] += mouseOffset[0]; + offsets[1] += mouseOffset[1]; + + return offsets; + }, + + + onTargetOver: function(e) { + var me = this, + t; + + if (me.disabled || e.within(me.target.dom, true)) { + return; + } + t = e.getTarget(me.delegate); + if (t) { + me.triggerElement = t; + me.triggerEvent = e; + me.clearTimer('hide'); + me.targetXY = e.getXY(); + me.delayShow(); + } + }, + + + delayShow: function() { + var me = this; + if (me.hidden && !me.showTimer) { + if (Ext.Date.getElapsed(me.lastActive) < me.quickShowInterval) { + me.show(); + } else { + me.showTimer = Ext.defer(me.showFromDelay, me.showDelay, me); + } + } + else if (!me.hidden && me.autoHide !== false) { + me.show(); + } + }, + + showFromDelay: function(){ + this.fromDelayShow = true; + this.show(); + delete this.fromDelayShow; + }, + + onShowVeto: function(){ + this.callParent(); + delete this.triggerElement; + this.clearTimer('show'); + }, + + + onTargetOut: function(e) { + var me = this; + + + + if (me.disabled || e.within(me.target.dom, true)) { + return; + } + me.clearTimer('show'); + if (me.autoHide !== false) { + me.delayHide(); + } + }, + + + delayHide: function() { + var me = this; + if (!me.hidden && !me.hideTimer) { + me.hideTimer = Ext.defer(me.hide, me.hideDelay, me); + } + }, + + + hide: function() { + var me = this; + me.clearTimer('dismiss'); + me.lastActive = new Date(); + if (me.anchorEl) { + me.anchorEl.hide(); + } + me.callParent(arguments); + delete me.triggerElement; + }, + + + show: function() { + var me = this; + + + + this.callParent(); + if (this.hidden === false) { + me.setPagePosition(-10000, -10000); + + if (me.anchor) { + me.anchor = me.origAnchor; + } + + if (!me.calledFromShowAt) { + me.showAt(me.getTargetXY()); + } + + if (me.anchor) { + me.syncAnchor(); + me.anchorEl.show(); + } else { + me.anchorEl.hide(); + } + } + }, + + + showAt: function(xy) { + var me = this; + me.lastActive = new Date(); + me.clearTimers(); + me.calledFromShowAt = true; + + + if (!me.isVisible()) { + this.callParent(arguments); + } + + + if (me.isVisible()) { + me.setPagePosition(xy[0], xy[1]); + if (me.constrainPosition || me.constrain) { + me.doConstrain(); + } + me.toFront(true); + me.el.sync(true); + if (me.dismissDelay && me.autoHide !== false) { + me.dismissTimer = Ext.defer(me.hide, me.dismissDelay, me); + } + if (me.anchor) { + me.syncAnchor(); + if (!me.anchorEl.isVisible()) { + me.anchorEl.show(); + } + } else { + me.anchorEl.hide(); + } + } + delete me.calledFromShowAt; + }, + + + syncAnchor: function() { + var me = this, + anchorPos, + targetPos, + offset; + switch (me.tipAnchor.charAt(0)) { + case 't': + anchorPos = 'b'; + targetPos = 'tl'; + offset = [20 + me.anchorOffset, 1]; + break; + case 'r': + anchorPos = 'l'; + targetPos = 'tr'; + offset = [ - 1, 12 + me.anchorOffset]; + break; + case 'b': + anchorPos = 't'; + targetPos = 'bl'; + offset = [20 + me.anchorOffset, -1]; + break; + default: + anchorPos = 'r'; + targetPos = 'tl'; + offset = [1, 12 + me.anchorOffset]; + break; + } + me.anchorEl.alignTo(me.el, anchorPos + '-' + targetPos, offset); + me.anchorEl.setStyle('z-index', parseInt(me.el.getZIndex(), 10) || 0 + 1).setVisibilityMode(Ext.Element.DISPLAY); + }, + + + setPagePosition: function(x, y) { + var me = this; + me.callParent(arguments); + if (me.anchor) { + me.syncAnchor(); + } + }, + + + clearTimer: function(name) { + name = name + 'Timer'; + clearTimeout(this[name]); + delete this[name]; + }, + + + clearTimers: function() { + var me = this; + me.clearTimer('show'); + me.clearTimer('dismiss'); + me.clearTimer('hide'); + }, + + + onShow: function() { + var me = this; + me.callParent(); + me.mon(Ext.getDoc(), 'mousedown', me.onDocMouseDown, me); + }, + + + onHide: function() { + var me = this; + me.callParent(); + me.mun(Ext.getDoc(), 'mousedown', me.onDocMouseDown, me); + }, + + + onDocMouseDown: function(e) { + var me = this; + if (!me.closable && !e.within(me.el.dom)) { + me.disable(); + Ext.defer(me.doEnable, 100, me); + } + }, + + + doEnable: function() { + if (!this.isDestroyed) { + this.enable(); + } + }, + + + onDisable: function() { + this.callParent(); + this.clearTimers(); + this.hide(); + }, + + beforeDestroy: function() { + var me = this; + me.clearTimers(); + Ext.destroy(me.anchorEl); + delete me.anchorEl; + delete me.target; + delete me.anchorTarget; + delete me.triggerElement; + me.callParent(); + }, + + + onDestroy: function() { + Ext.getDoc().un('mousedown', this.onDocMouseDown, this); + this.callParent(); + } +}); + + +Ext.define('Ext.tip.QuickTip', { + extend: Ext.tip.ToolTip , + alias: 'widget.quicktip', + alternateClassName: 'Ext.QuickTip', + + + + + interceptTitles : false, + + + title: ' ', + + + tagConfig : { + namespace : 'data-', + attribute : 'qtip', + width : 'qwidth', + target : 'target', + title : 'qtitle', + hide : 'hide', + cls : 'qclass', + align : 'qalign', + anchor : 'anchor', + showDelay: 'qshowDelay' + }, + + + initComponent : function(){ + var me = this; + + me.target = me.target || Ext.getDoc(); + me.targets = me.targets || {}; + me.callParent(); + }, + + + register : function(config){ + var configs = Ext.isArray(config) ? config : arguments, + i = 0, + len = configs.length, + target, j, targetLen; + + for (; i < len; i++) { + config = configs[i]; + target = config.target; + if (target) { + if (Ext.isArray(target)) { + for (j = 0, targetLen = target.length; j < targetLen; j++) { + this.targets[Ext.id(target[j])] = config; + } + } else{ + this.targets[Ext.id(target)] = config; + } + } + } + }, + + + unregister : function(el){ + delete this.targets[Ext.id(el)]; + }, + + + cancelShow: function(el){ + var me = this, + activeTarget = me.activeTarget; + + el = Ext.get(el).dom; + if (me.isVisible()) { + if (activeTarget && activeTarget.el == el) { + me.hide(); + } + } else if (activeTarget && activeTarget.el == el) { + me.clearTimer('show'); + } + }, + + + getTipCfg: function(e) { + var t = e.getTarget(), + titleText = t.title, + cfg; + + if (this.interceptTitles && titleText && Ext.isString(titleText)) { + t.qtip = titleText; + t.removeAttribute("title"); + e.preventDefault(); + return { + text: titleText + }; + } + else { + cfg = this.tagConfig; + t = e.getTarget('[' + cfg.namespace + cfg.attribute + ']'); + if (t) { + return { + target: t, + text: t.getAttribute(cfg.namespace + cfg.attribute) + }; + } + } + }, + + + onTargetOver : function(e){ + var me = this, + target = e.getTarget(me.delegate), + hasShowDelay, + delay, + elTarget, + cfg, + ns, + tipConfig, + autoHide, + targets, targetEl, value, key; + + if (me.disabled) { + return; + } + + + + + me.targetXY = e.getXY(); + + + if(!target || target.nodeType !== 1 || target == document.documentElement || target == document.body){ + return; + } + + if (me.activeTarget && ((target == me.activeTarget.el) || Ext.fly(me.activeTarget.el).contains(target))) { + + + + + if (me.targetTextEmpty()) { + me.onShowVeto(); + delete me.activeTarget; + } else { + me.clearTimer('hide'); + me.show(); + } + return; + } + + if (target) { + targets = me.targets; + + for (key in targets) { + if (targets.hasOwnProperty(key)) { + value = targets[key]; + + targetEl = Ext.fly(value.target); + if (targetEl && (targetEl.dom === target || targetEl.contains(target))) { + elTarget = targetEl.dom; + break; + } + } + } + + if (elTarget) { + me.activeTarget = me.targets[elTarget.id]; + me.activeTarget.el = target; + me.anchor = me.activeTarget.anchor; + if (me.anchor) { + me.anchorTarget = target; + } + hasShowDelay = parseInt(me.activeTarget.showDelay, 10); + if (hasShowDelay) { + delay = me.showDelay; + me.showDelay = hasShowDelay; + } + me.delayShow(); + if (hasShowDelay) { + me.showDelay = delay; + } + return; + } + } + + + elTarget = Ext.fly(target, '_quicktip-target'); + cfg = me.tagConfig; + ns = cfg.namespace; + tipConfig = me.getTipCfg(e); + + if (tipConfig) { + + + + if (tipConfig.target) { + target = tipConfig.target; + elTarget = Ext.fly(target, '_quicktip-target'); + } + autoHide = elTarget.getAttribute(ns + cfg.hide); + + me.activeTarget = { + el: target, + text: tipConfig.text, + width: +elTarget.getAttribute(ns + cfg.width) || null, + autoHide: autoHide != "user" && autoHide !== 'false', + title: elTarget.getAttribute(ns + cfg.title), + cls: elTarget.getAttribute(ns + cfg.cls), + align: elTarget.getAttribute(ns + cfg.align), + showDelay: parseInt(elTarget.getAttribute(ns + cfg.showDelay), 10) + }; + me.anchor = elTarget.getAttribute(ns + cfg.anchor); + if (me.anchor) { + me.anchorTarget = target; + } + hasShowDelay = parseInt(me.activeTarget.showDelay, 10); + if (hasShowDelay) { + delay = me.showDelay; + me.showDelay = hasShowDelay; + } + me.delayShow(); + if (hasShowDelay) { + me.showDelay = delay; + } + } + }, + + + onTargetOut : function(e){ + var me = this, + active = me.activeTarget, + hasHideDelay, + delay; + + + + if (active && e.within(me.activeTarget.el) && !me.getTipCfg(e)) { + return; + } + + me.clearTimer('show'); + delete me.activeTarget; + if (me.autoHide !== false) { + hasHideDelay = active && parseInt(active.hideDelay, 10); + if (hasHideDelay) { + delay = me.hideDelay; + me.hideDelay = hasHideDelay; + } + me.delayHide(); + if (hasHideDelay) { + me.hideDelay = delay; + } + } + }, + + targetTextEmpty: function(){ + var me = this, + target = me.activeTarget, + cfg = me.tagConfig, + el, text; + + if (target) { + el = target.el; + if (el) { + text = el.getAttribute(cfg.namespace + cfg.attribute); + + + + if (!text && !me.targets[target.target]) { + return true; + } + } + } + return false; + }, + + show: function(){ + var me = this, + fromDelay = me.fromDelayShow; + + + + if (fromDelay && me.targetTextEmpty()) { + me.onShowVeto(); + delete me.activeTarget; + return; + } + me.callParent(arguments); + }, + + + showAt : function(xy){ + var me = this, + target = me.activeTarget, + header = me.header, + cls; + + if (target) { + if (!me.rendered) { + me.render(Ext.getBody()); + me.activeTarget = target; + } + me.suspendLayouts(); + if (target.title) { + me.setTitle(target.title); + header.show(); + } else if (header) { + header.hide(); + } + me.update(target.text); + me.autoHide = target.autoHide; + me.dismissDelay = target.dismissDelay || me.dismissDelay; + if (target.mouseOffset) { + xy[0] += target.mouseOffset[0]; + xy[1] += target.mouseOffset[1]; + } + + cls = me.lastCls; + if (cls) { + me.removeCls(cls); + delete me.lastCls; + } + + cls = target.cls; + if (cls) { + me.addCls(cls); + me.lastCls = cls; + } + + me.setWidth(target.width); + + if (me.anchor) { + me.constrainPosition = false; + } else if (target.align) { + xy = me.getAlignToXY(target.el, target.align); + me.constrainPosition = false; + }else{ + me.constrainPosition = true; + } + me.resumeLayouts(true); + } + me.callParent([xy]); + }, + + + hide: function(){ + delete this.activeTarget; + this.callParent(); + } +}); + + +Ext.define('Ext.tip.QuickTipManager', (function() { + var tip, + disabled = false; + + return { + + singleton: true, + alternateClassName: 'Ext.QuickTips', + + + init : function (autoRender, config) { + if (!tip) { + if (!Ext.isReady) { + Ext.onReady(function(){ + Ext.tip.QuickTipManager.init(autoRender, config); + }); + return; + } + + var tipConfig = Ext.apply({ disabled: disabled, id: 'ext-quicktips-tip' }, config), + className = tipConfig.className, + xtype = tipConfig.xtype; + + if (className) { + delete tipConfig.className; + } else if (xtype) { + className = 'widget.' + xtype; + delete tipConfig.xtype; + } + + if (autoRender !== false) { + tipConfig.renderTo = document.body; + + } + + tip = Ext.create(className || 'Ext.tip.QuickTip', tipConfig); + + + + Ext.quickTipsActive = true; + } + }, + + + destroy: function() { + if (tip) { + var undef; + tip.destroy(); + tip = undef; + } + }, + + + ddDisable : function() { + + if(tip && !disabled){ + tip.disable(); + } + }, + + + ddEnable : function() { + + if(tip && !disabled){ + tip.enable(); + } + }, + + + enable : function(){ + if(tip){ + tip.enable(); + } + disabled = false; + }, + + + disable : function(){ + if(tip){ + tip.disable(); + } + disabled = true; + }, + + + isEnabled : function(){ + return tip !== undefined && !tip.disabled; + }, + + + getQuickTip : function(){ + return tip; + }, + + + register : function(){ + tip.register.apply(tip, arguments); + }, + + + unregister : function(){ + tip.unregister.apply(tip, arguments); + }, + + + tips : function(){ + tip.register.apply(tip, arguments); + } + }; +}())); + + +Ext.define('Ext.app.Application', { + extend: Ext.app.Controller , + + + + + + + + + + + scope: undefined, + + + enableQuickTips: true, + + + appFolder: 'app', + + + + appProperty: 'app', + + + namespaces: [], + + + autoCreateViewport: false, + + + paths: null, + + onClassExtended: function(cls, data, hooks) { + var Controller = Ext.app.Controller, + proto = cls.prototype, + namespace = data.name, + requires = [], + onBeforeClassCreated, paths, ns; + + data.$namespace = data.name; + Ext.app.addNamespaces(data.name); + + if (data.namespaces) { + Ext.app.addNamespaces(data.namespaces); + } + + if (!data['paths processed']) { + Ext.Loader.setPath(data.name, data.appFolder || 'app'); + paths = data.paths; + + if (paths) { + for (ns in paths) { + if (paths.hasOwnProperty(ns)) { + Ext.Loader.setPath(ns, paths[ns]); + } + } + } + } + else { + delete data['paths processed']; + } + + if (data.autoCreateViewport) { + Controller.processDependencies(proto, requires, namespace, 'view', ['Viewport']); + } + + + if (requires.length) { + onBeforeClassCreated = hooks.onBeforeCreated; + + hooks.onBeforeCreated = function(cls, data) { + var args = Ext.Array.clone(arguments); + + Ext.require(requires, function () { + return onBeforeClassCreated.apply(this, args); + }); + }; + } + }, + + + constructor: function(config) { + var me = this; + + + me.callParent(arguments); + + me.doInit(me); + + me.initNamespace(); + me.initControllers(); + me.onBeforeLaunch(); + }, + + initNamespace: function() { + var me = this, + appProperty = me.appProperty, + ns; + + ns = Ext.namespace(me.name); + + if (ns) { + ns.getApplication = function() { + return me; + }; + + if (appProperty) { + if (!ns[appProperty]) { + ns[appProperty] = me; + } + } + } + }, + + initControllers: function() { + var me = this, + controllers = Ext.Array.from(me.controllers); + + me.controllers = new Ext.util.MixedCollection(); + + for (var i = 0, ln = controllers.length; i < ln; i++) { + me.getController(controllers[i]); + } + }, + + + launch: Ext.emptyFn, + + + onBeforeLaunch: function() { + var me = this, + controllers, c, cLen, controller; + + if (me.enableQuickTips) { + me.initQuickTips(); + } + + if (me.autoCreateViewport) { + me.initViewport(); + } + + me.launch.call(me.scope || me); + me.launched = true; + me.fireEvent('launch', me); + + controllers = me.controllers.items; + cLen = controllers.length; + + for (c = 0; c < cLen; c++) { + controller = controllers[c]; + controller.onLaunch(me); + } + }, + + getModuleClassName: function(name, kind) { + return Ext.app.Controller.getFullName(name, kind, this.name).absoluteName; + }, + + initQuickTips: function() { + Ext.tip.QuickTipManager.init(); + }, + + initViewport: function() { + var viewport = this.getView('Viewport'); + + if (viewport) { + viewport.create(); + } + }, + + getController: function(name) { + var me = this, + controllers = me.controllers, + className, controller; + + controller = controllers.get(name); + + if (!controller) { + className = me.getModuleClassName(name, 'controller'); + + controller = Ext.create(className, { + application: me, + id: name + }); + + controllers.add(controller); + + if (me._initialized) { + controller.doInit(me); + } + } + + return controller; + }, + + getApplication: function() { + return this; + } +}); + + +Ext.define('Ext.app.domain.Controller', { + extend: Ext.app.EventDomain , + singleton: true, + + + + + + type: 'controller', + idProperty: 'id', + + constructor: function() { + var me = this; + + me.callParent(); + me.monitor(Ext.app.Controller); + } +}); + + +Ext.define('Ext.direct.Provider', { + alias: 'direct.provider', + + mixins: { + observable: Ext.util.Observable + }, + + isProvider: true, + + + + + + constructor: function(config) { + var me = this; + + Ext.apply(me, config); + + Ext.applyIf(me, { + id: Ext.id(null, 'provider-') + }); + + me.addEvents( + + 'connect', + + + 'disconnect', + + + 'data', + + + 'exception' + ); + + me.mixins.observable.constructor.call(me, config); + }, + + + isConnected: function() { + return false; + }, + + + connect: Ext.emptyFn, + + + disconnect: Ext.emptyFn +}); + + + +Ext.define('Ext.app.domain.Direct', { + extend: Ext.app.EventDomain , + singleton: true, + + + + + + type: 'direct', + idProperty: 'id', + + constructor: function() { + var me = this; + + me.callParent(); + me.monitor(Ext.direct.Provider); + } +}); + + +Ext.define('Ext.button.Split', { + + + alias: 'widget.splitbutton', + + extend: Ext.button.Button , + alternateClassName: 'Ext.SplitButton', + + + + + + + arrowCls : 'split', + split : true, + + + initComponent : function(){ + this.callParent(); + + this.addEvents("arrowclick"); + }, + + + setArrowHandler : function(handler, scope){ + this.arrowHandler = handler; + this.scope = scope; + }, + + + onClick : function(e, t) { + var me = this; + + e.preventDefault(); + if (!me.disabled) { + if (me.overMenuTrigger) { + me.maybeShowMenu(); + me.fireEvent("arrowclick", me, e); + if (me.arrowHandler) { + me.arrowHandler.call(me.scope || me, me, e); + } + } else { + me.doToggle(); + me.fireHandler(e); + } + } + } +}); + + +Ext.define('Ext.button.Cycle', { + + + + alias: 'widget.cycle', + + extend: Ext.button.Split , + alternateClassName: 'Ext.CycleButton', + + + + + + + + + + + + + + getButtonText: function(item) { + var me = this, + text = ''; + + if (item && me.showText === true) { + if (me.prependText) { + text += me.prependText; + } + text += item.text; + return text; + } + return me.text; + }, + + + setActiveItem: function(item, suppressEvent) { + var me = this; + + if (!Ext.isObject(item)) { + item = me.menu.getComponent(item); + } + if (item) { + if (!me.rendered) { + me.text = me.getButtonText(item); + me.iconCls = item.iconCls; + me.glyph = item.glyph; + } else { + me.setText(me.getButtonText(item)); + me.setIconCls(item.iconCls); + me.setGlyph(item.glyph); + } + me.activeItem = item; + if (!item.checked) { + item.setChecked(true, false); + } + if (me.forceIcon) { + me.setIconCls(me.forceIcon); + } + if (me.forceGlyph) { + me.setGlyph(me.forceGlyph); + } + if (!suppressEvent) { + me.fireEvent('change', me, item); + } + } + }, + + + getActiveItem: function() { + return this.activeItem; + }, + + + initComponent: function() { + var me = this, + checked = 0, + items, + i, iLen, item; + + me.addEvents( + + "change" + ); + + if (me.changeHandler) { + me.on('change', me.changeHandler, me.scope || me); + delete me.changeHandler; + } + + + + items = (me.menu.items || []).concat(me.items || []); + me.menu = Ext.applyIf({ + cls: Ext.baseCSSPrefix + 'cycle-menu', + items: [] + }, me.menu); + + iLen = items.length; + + + for (i = 0; i < iLen; i++) { + item = items[i]; + + item = Ext.applyIf({ + group : me.id, + itemIndex : i, + checkHandler : me.checkHandler, + scope : me, + checked : item.checked || false + }, item); + + me.menu.items.push(item); + + if (item.checked) { + checked = i; + } + } + + me.itemCount = me.menu.items.length; + me.callParent(arguments); + me.on('click', me.toggleSelected, me); + me.setActiveItem(checked, me); + + + if (me.width && me.showText) { + me.addCls(Ext.baseCSSPrefix + 'cycle-fixed-width'); + } + }, + + + checkHandler: function(item, pressed) { + if (pressed) { + this.setActiveItem(item); + } + }, + + + toggleSelected: function() { + var me = this, + m = me.menu, + checkItem; + + checkItem = me.activeItem.next(':not([disabled])') || m.items.getAt(0); + checkItem.setChecked(true); + } +}); + + +Ext.define('Ext.chart.Callout', { + + + + + + constructor: function(config) { + if (config.callouts) { + config.callouts.styles = Ext.applyIf(config.callouts.styles || {}, { + color: "#000", + font: "11px Helvetica, sans-serif" + }); + this.callouts = Ext.apply(this.callouts || {}, config.callouts); + this.calloutsArray = []; + } + }, + + renderCallouts: function() { + if (!this.callouts) { + return; + } + + var me = this, + items = me.items, + animate = me.chart.animate, + config = me.callouts, + styles = config.styles, + group = me.calloutsArray, + store = me.chart.getChartStore(), + len = store.getCount(), + ratio = items.length / len, + previouslyPlacedCallouts = [], + i, + count, + j, + p, + item, + label, + storeItem, + display; + + for (i = 0, count = 0; i < len; i++) { + for (j = 0; j < ratio; j++) { + item = items[count]; + label = group[count]; + storeItem = store.getAt(i); + + display = (!config.filter || config.filter(storeItem)); + + if (!display && !label) { + count++; + continue; + } + + if (!label) { + group[count] = label = me.onCreateCallout(storeItem, item, i, display, j, count); + } + for (p in label) { + if (label[p] && label[p].setAttributes) { + label[p].setAttributes(styles, true); + } + } + if (!display) { + for (p in label) { + if (label[p]) { + if (label[p].setAttributes) { + label[p].setAttributes({ + hidden: true + }, true); + } else if(label[p].setVisible) { + label[p].setVisible(false); + } + } + } + } + if (config && config.renderer) { + config.renderer(label, storeItem); + } + me.onPlaceCallout(label, storeItem, item, i, display, animate, + j, count, previouslyPlacedCallouts); + previouslyPlacedCallouts.push(label); + count++; + } + } + this.hideCallouts(count); + }, + + onCreateCallout: function(storeItem, item, i, display) { + var me = this, + group = me.calloutsGroup, + config = me.callouts, + styles = (config ? config.styles : undefined), + width = (styles ? styles.width : 0), + height = (styles ? styles.height : 0), + chart = me.chart, + surface = chart.surface, + calloutObj = { + + + lines: false + }; + + calloutObj.lines = surface.add(Ext.apply({}, + { + type: 'path', + path: 'M0,0', + stroke: me.getLegendColor() || '#555' + }, + styles)); + + if (config.items) { + calloutObj.panel = new Ext.Panel({ + style: "position: absolute;", + width: width, + height: height, + items: config.items, + renderTo: chart.el + }); + } + + return calloutObj; + }, + + hideCallouts: function(index) { + var calloutsArray = this.calloutsArray, + len = calloutsArray.length, + co, + p; + while (len-->index) { + co = calloutsArray[len]; + for (p in co) { + if (co[p]) { + co[p].hide(true); + } + } + } + } +}); + + +Ext.define('Ext.draw.CompositeSprite', { + + + + extend: Ext.util.MixedCollection , + mixins: { + animate: Ext.util.Animate + }, + autoDestroy: false, + + + isCompositeSprite: true, + constructor: function(config) { + var me = this; + + config = config || {}; + Ext.apply(me, config); + + me.addEvents( + + 'mousedown', + + 'mouseup', + + 'mouseover', + + 'mouseout', + + 'click' + ); + me.id = Ext.id(null, 'ext-sprite-group-'); + me.callParent(); + }, + + + onClick: function(e) { + this.fireEvent('click', e); + }, + + + onMouseUp: function(e) { + this.fireEvent('mouseup', e); + }, + + + onMouseDown: function(e) { + this.fireEvent('mousedown', e); + }, + + + onMouseOver: function(e) { + this.fireEvent('mouseover', e); + }, + + + onMouseOut: function(e) { + this.fireEvent('mouseout', e); + }, + + attachEvents: function(o) { + var me = this; + + o.on({ + scope: me, + mousedown: me.onMouseDown, + mouseup: me.onMouseUp, + mouseover: me.onMouseOver, + mouseout: me.onMouseOut, + click: me.onClick + }); + }, + + + add: function(key, o) { + var result = this.callParent(arguments); + this.attachEvents(result); + return result; + }, + + insert: function(index, key, o) { + return this.callParent(arguments); + }, + + + remove: function(o) { + var me = this; + + o.un({ + scope: me, + mousedown: me.onMouseDown, + mouseup: me.onMouseUp, + mouseover: me.onMouseOver, + mouseout: me.onMouseOut, + click: me.onClick + }); + return me.callParent(arguments); + }, + + + getBBox: function() { + var i = 0, + sprite, + bb, + items = this.items, + len = this.length, + infinity = Infinity, + minX = infinity, + maxHeight = -infinity, + minY = infinity, + maxWidth = -infinity, + maxWidthBBox, maxHeightBBox; + + for (; i < len; i++) { + sprite = items[i]; + if (sprite.el && ! sprite.bboxExcluded) { + bb = sprite.getBBox(); + minX = Math.min(minX, bb.x); + minY = Math.min(minY, bb.y); + maxHeight = Math.max(maxHeight, bb.height + bb.y); + maxWidth = Math.max(maxWidth, bb.width + bb.x); + } + } + + return { + x: minX, + y: minY, + height: maxHeight - minY, + width: maxWidth - minX + }; + }, + + + setAttributes: function(attrs, redraw) { + var i = 0, + items = this.items, + len = this.length; + + for (; i < len; i++) { + items[i].setAttributes(attrs, redraw); + } + return this; + }, + + + hide: function(redraw) { + var i = 0, + items = this.items, + len = this.length; + + for (; i < len; i++) { + items[i].hide(redraw); + } + return this; + }, + + + show: function(redraw) { + var i = 0, + items = this.items, + len = this.length; + + for (; i < len; i++) { + items[i].show(redraw); + } + return this; + }, + + + redraw: function() { + var me = this, + i = 0, + items = me.items, + surface = me.getSurface(), + len = me.length; + + if (surface) { + for (; i < len; i++) { + surface.renderItem(items[i]); + } + } + return me; + }, + + + setStyle: function(obj) { + var i = 0, + items = this.items, + len = this.length, + item, el; + + for (; i < len; i++) { + item = items[i]; + el = item.el; + if (el) { + el.setStyle(obj); + } + } + }, + + + addCls: function(obj) { + var i = 0, + items = this.items, + surface = this.getSurface(), + len = this.length; + + if (surface) { + for (; i < len; i++) { + surface.addCls(items[i], obj); + } + } + }, + + + removeCls: function(obj) { + var i = 0, + items = this.items, + surface = this.getSurface(), + len = this.length; + + if (surface) { + for (; i < len; i++) { + surface.removeCls(items[i], obj); + } + } + }, + + + getSurface: function(){ + var first = this.first(); + if (first) { + return first.surface; + } + return null; + }, + + + destroy: function(){ + var me = this, + surface = me.getSurface(), + destroySprites = me.autoDestroy, + item; + + if (surface) { + while (me.getCount() > 0) { + item = me.first(); + me.remove(item); + surface.remove(item, destroySprites); + } + } + me.clearListeners(); + } +}); + + +Ext.define('Ext.draw.Surface', { + + + + mixins: { + observable: Ext.util.Observable + }, + + + + + separatorRe: /[, ]+/, + + enginePriority: ['Svg', 'Vml'], + + statics: { + + create: function(config, enginePriority) { + enginePriority = enginePriority || this.prototype.enginePriority; + + var i = 0, + len = enginePriority.length; + + for (; i < len; i++) { + if (Ext.supports[enginePriority[i]]) { + return Ext.create('Ext.draw.engine.' + enginePriority[i], config); + } + } + return false; + }, + + + save: function(surface, config) { + config = config || {}; + var exportTypes = { + 'image/png': 'Image', + 'image/jpeg': 'Image', + 'image/svg+xml': 'Svg' + }, + prefix = exportTypes[config.type] || 'Svg', + exporter = Ext.draw.engine[prefix + 'Exporter']; + + return exporter.generate(surface, config); + + } + }, + + + + + availableAttrs: { + blur: 0, + "clip-rect": "0 0 1e9 1e9", + cursor: "default", + cx: 0, + cy: 0, + 'dominant-baseline': 'auto', + fill: "none", + "fill-opacity": 1, + font: '10px "Arial"', + "font-family": '"Arial"', + "font-size": "10", + "font-style": "normal", + "font-weight": 400, + gradient: "", + height: 0, + hidden: false, + href: "http://sencha.com/", + opacity: 1, + path: "M0,0", + radius: 0, + rx: 0, + ry: 0, + scale: "1 1", + src: "", + stroke: "none", + "stroke-dasharray": "", + "stroke-linecap": "butt", + "stroke-linejoin": "butt", + "stroke-miterlimit": 0, + "stroke-opacity": 1, + "stroke-width": 1, + target: "_blank", + text: "", + "text-anchor": "middle", + title: "Ext Draw", + width: 0, + x: 0, + y: 0, + zIndex: 0 + }, + + + + + container: undefined, + height: 352, + width: 512, + x: 0, + y: 0, + + + + + orderSpritesByZIndex: true, + + + + constructor: function(config) { + var me = this; + config = config || {}; + Ext.apply(me, config); + + me.domRef = Ext.getDoc().dom; + + me.customAttributes = {}; + + me.addEvents( + + 'mousedown', + + 'mouseup', + + 'mouseover', + + 'mouseout', + + 'mousemove', + + 'mouseenter', + + 'mouseleave', + + 'click', + + 'dblclick' + ); + + me.mixins.observable.constructor.call(me); + + me.getId(); + me.initGradients(); + me.initItems(); + if (me.renderTo) { + me.render(me.renderTo); + delete me.renderTo; + } + me.initBackground(config.background); + }, + + + + initSurface: Ext.emptyFn, + + + + renderItem: Ext.emptyFn, + + + renderItems: Ext.emptyFn, + + + setViewBox: function (x, y, width, height) { + if (isFinite(x) && isFinite(y) && isFinite(width) && isFinite(height)) { + this.viewBox = {x: x, y: y, width: width, height: height}; + this.applyViewBox(); + } + }, + + + addCls: Ext.emptyFn, + + + removeCls: Ext.emptyFn, + + + setStyle: Ext.emptyFn, + + + initGradients: function() { + if (this.hasOwnProperty('gradients')) { + var gradients = this.gradients, + fn = this.addGradient, + g, gLen; + + if (gradients) { + for (g = 0, gLen = gradients.length; g < gLen; g++) { + if (fn.call(this, gradients[g], g, gLen) === false) { + break; + } + } + } + } + }, + + + initItems: function() { + var items = this.items; + this.items = new Ext.draw.CompositeSprite(); + this.items.autoDestroy = true; + this.groups = new Ext.draw.CompositeSprite(); + if (items) { + this.add(items); + } + }, + + + initBackground: function(config) { + var me = this, + width = me.width, + height = me.height, + gradientId, gradient; + if (Ext.isString(config)) { + config = { + fill : config + }; + } + if (config) { + if (config.gradient) { + gradient = config.gradient; + gradientId = gradient.id; + me.addGradient(gradient); + me.background = me.add({ + type: 'rect', + x: 0, + y: 0, + width: width, + height: height, + fill: 'url(#' + gradientId + ')', + zIndex: -1 + }); + } else if (config.fill) { + me.background = me.add({ + type: 'rect', + x: 0, + y: 0, + width: width, + height: height, + fill: config.fill, + zIndex: -1 + }); + } else if (config.image) { + me.background = me.add({ + type: 'image', + x: 0, + y: 0, + width: width, + height: height, + src: config.image, + zIndex: -1 + }); + } + + me.background.bboxExcluded = true; + } + }, + + + setSize: function(w, h) { + this.applyViewBox(); + }, + + + scrubAttrs: function(sprite) { + var i, + attrs = {}, + exclude = {}, + sattr = sprite.attr; + for (i in sattr) { + + if (this.translateAttrs.hasOwnProperty(i)) { + + attrs[this.translateAttrs[i]] = sattr[i]; + exclude[this.translateAttrs[i]] = true; + } + else if (this.availableAttrs.hasOwnProperty(i) && !exclude[i]) { + + attrs[i] = sattr[i]; + } + } + return attrs; + }, + + + onClick: function(e) { + this.processEvent('click', e); + }, + + + onDblClick: function(e) { + this.processEvent('dblclick', e); + }, + + + onMouseUp: function(e) { + this.processEvent('mouseup', e); + }, + + + onMouseDown: function(e) { + this.processEvent('mousedown', e); + }, + + + onMouseOver: function(e) { + this.processEvent('mouseover', e); + }, + + + onMouseOut: function(e) { + this.processEvent('mouseout', e); + }, + + + onMouseMove: function(e) { + this.fireEvent('mousemove', e); + }, + + + onMouseEnter: Ext.emptyFn, + + + onMouseLeave: Ext.emptyFn, + + + addGradient: Ext.emptyFn, + + + add: function() { + var args = Array.prototype.slice.call(arguments), + sprite, + hasMultipleArgs = args.length > 1, + items, + results, + i, + ln, + item; + + if (hasMultipleArgs || Ext.isArray(args[0])) { + items = hasMultipleArgs ? args : args[0]; + results = []; + + for (i = 0, ln = items.length; i < ln; i++) { + item = items[i]; + item = this.add(item); + results.push(item); + } + + return results; + } + sprite = this.prepareItems(args[0], true)[0]; + this.insertByZIndex(sprite); + this.onAdd(sprite); + return sprite; + }, + + + insertByZIndex: function(sprite) { + var me = this, + sprites = me.items.items, + len = sprites.length, + ceil = Math.ceil, + zIndex = sprite.attr.zIndex, + idx = len, + high = idx - 1, + low = 0, + otherZIndex; + + if (me.orderSpritesByZIndex && len && zIndex < sprites[high].attr.zIndex) { + + while (low <= high) { + idx = ceil((low + high) / 2); + otherZIndex = sprites[idx].attr.zIndex; + if (otherZIndex > zIndex) { + high = idx - 1; + } + else if (otherZIndex < zIndex) { + low = idx + 1; + } + else { + break; + } + } + + while (idx < len && sprites[idx].attr.zIndex <= zIndex) { + idx++; + } + } + + me.items.insert(idx, sprite); + return idx; + }, + + onAdd: function(sprite) { + var group = sprite.group, + draggable = sprite.draggable, + groups, ln, i; + if (group) { + groups = [].concat(group); + ln = groups.length; + for (i = 0; i < ln; i++) { + group = groups[i]; + this.getGroup(group).add(sprite); + } + delete sprite.group; + } + if (draggable) { + sprite.initDraggable(); + } + }, + + + remove: function(sprite, destroySprite) { + if (sprite) { + this.items.remove(sprite); + + var groups = [].concat(this.groups.items), + gLen = groups.length, + g; + + for (g = 0; g < gLen; g++) { + groups[g].remove(sprite); + } + + sprite.onRemove(); + if (destroySprite === true) { + sprite.destroy(); + } + } + }, + + + removeAll: function(destroySprites) { + var items = this.items.items, + ln = items.length, + i; + for (i = ln - 1; i > -1; i--) { + this.remove(items[i], destroySprites); + } + }, + + onRemove: Ext.emptyFn, + + onDestroy: Ext.emptyFn, + + + applyViewBox: function() { + var me = this, + viewBox = me.viewBox, + width = me.width || 1, + height = me.height || 1, + viewBoxX, viewBoxY, viewBoxWidth, viewBoxHeight, + relativeHeight, relativeWidth, size; + + if (viewBox && (width || height)) { + viewBoxX = viewBox.x; + viewBoxY = viewBox.y; + viewBoxWidth = viewBox.width; + viewBoxHeight = viewBox.height; + relativeHeight = height / viewBoxHeight; + relativeWidth = width / viewBoxWidth; + size = Math.min(relativeWidth, relativeHeight); + + if (viewBoxWidth * size < width) { + viewBoxX -= (width - viewBoxWidth * size) / 2 / size; + } + if (viewBoxHeight * size < height) { + viewBoxY -= (height - viewBoxHeight * size) / 2 / size; + } + + me.viewBoxShift = { + dx: -viewBoxX, + dy: -viewBoxY, + scale: size + }; + + if (me.background) { + me.background.setAttributes(Ext.apply({}, { + x: viewBoxX, + y: viewBoxY, + width: width / size, + height: height / size + }, { hidden: false }), true); + } + } else { + if (me.background && width && height) { + me.background.setAttributes(Ext.apply({x: 0, y: 0, width: width, height: height}, { hidden: false }), true); + } + } + }, + + + getBBox: function (sprite, isWithoutTransform) { + var realPath = this["getPath" + sprite.type](sprite); + if (isWithoutTransform) { + sprite.bbox.plain = sprite.bbox.plain || Ext.draw.Draw.pathDimensions(realPath); + return sprite.bbox.plain; + } + if (sprite.dirtyTransform) { + this.applyTransformations(sprite, true); + } + sprite.bbox.transform = sprite.bbox.transform || Ext.draw.Draw.pathDimensions(Ext.draw.Draw.mapPath(realPath, sprite.matrix)); + return sprite.bbox.transform; + }, + + transformToViewBox: function (x, y) { + if (this.viewBoxShift) { + var me = this, shift = me.viewBoxShift; + return [x / shift.scale - shift.dx, y / shift.scale - shift.dy]; + } else { + return [x, y]; + } + }, + + + applyTransformations: function(sprite, onlyMatrix) { + if (sprite.type == 'text') { + + sprite.bbox.transform = 0; + this.transform(sprite, false); + } + + + sprite.dirtyTransform = false; + + var me = this, + attr = sprite.attr; + + if (attr.translation.x != null || attr.translation.y != null) { + me.translate(sprite); + } + if (attr.scaling.x != null || attr.scaling.y != null) { + me.scale(sprite); + } + if (attr.rotation.degrees != null) { + me.rotate(sprite); + } + + sprite.bbox.transform = 0; + this.transform(sprite, onlyMatrix); + sprite.transformations = []; + }, + + + rotate: function (sprite) { + var bbox, + deg = sprite.attr.rotation.degrees, + centerX = sprite.attr.rotation.x, + centerY = sprite.attr.rotation.y; + if (!Ext.isNumber(centerX) || !Ext.isNumber(centerY)) { + bbox = this.getBBox(sprite, true); + centerX = !Ext.isNumber(centerX) ? bbox.x + bbox.width / 2 : centerX; + centerY = !Ext.isNumber(centerY) ? bbox.y + bbox.height / 2 : centerY; + } + sprite.transformations.push({ + type: "rotate", + degrees: deg, + x: centerX, + y: centerY + }); + }, + + + translate: function(sprite) { + var x = sprite.attr.translation.x || 0, + y = sprite.attr.translation.y || 0; + sprite.transformations.push({ + type: "translate", + x: x, + y: y + }); + }, + + + scale: function(sprite) { + var bbox, + x = sprite.attr.scaling.x || 1, + y = sprite.attr.scaling.y || 1, + centerX = sprite.attr.scaling.centerX, + centerY = sprite.attr.scaling.centerY; + + if (!Ext.isNumber(centerX) || !Ext.isNumber(centerY)) { + bbox = this.getBBox(sprite, true); + centerX = !Ext.isNumber(centerX) ? bbox.x + bbox.width / 2 : centerX; + centerY = !Ext.isNumber(centerY) ? bbox.y + bbox.height / 2 : centerY; + } + sprite.transformations.push({ + type: "scale", + x: x, + y: y, + centerX: centerX, + centerY: centerY + }); + }, + + + rectPath: function (x, y, w, h, r) { + if (r) { + return [["M", x + r, y], ["l", w - r * 2, 0], ["a", r, r, 0, 0, 1, r, r], ["l", 0, h - r * 2], ["a", r, r, 0, 0, 1, -r, r], ["l", r * 2 - w, 0], ["a", r, r, 0, 0, 1, -r, -r], ["l", 0, r * 2 - h], ["a", r, r, 0, 0, 1, r, -r], ["z"]]; + } + return [["M", x, y], ["l", w, 0], ["l", 0, h], ["l", -w, 0], ["z"]]; + }, + + + ellipsePath: function (x, y, rx, ry) { + if (ry == null) { + ry = rx; + } + return [["M", x, y], ["m", 0, -ry], ["a", rx, ry, 0, 1, 1, 0, 2 * ry], ["a", rx, ry, 0, 1, 1, 0, -2 * ry], ["z"]]; + }, + + + getPathpath: function (el) { + return el.attr.path; + }, + + + getPathcircle: function (el) { + var a = el.attr; + return this.ellipsePath(a.x, a.y, a.radius, a.radius); + }, + + + getPathellipse: function (el) { + var a = el.attr; + return this.ellipsePath(a.x, a.y, + a.radiusX || (a.width / 2) || 0, + a.radiusY || (a.height / 2) || 0); + }, + + + getPathrect: function (el) { + var a = el.attr; + return this.rectPath(a.x || 0, a.y || 0, a.width || 0, a.height || 0, a.r || 0); + }, + + + getPathimage: function (el) { + var a = el.attr; + return this.rectPath(a.x || 0, a.y || 0, a.width, a.height); + }, + + + getPathtext: function (el) { + var bbox = this.getBBoxText(el); + return this.rectPath(bbox.x, bbox.y, bbox.width, bbox.height); + }, + + createGroup: function(id) { + var group = this.groups.get(id); + if (!group) { + group = new Ext.draw.CompositeSprite({ + surface: this + }); + group.id = id || Ext.id(null, 'ext-surface-group-'); + this.groups.add(group); + } + return group; + }, + + + getGroup: function(id) { + var group; + if (typeof id == "string") { + group = this.groups.get(id); + if (!group) { + group = this.createGroup(id); + } + } else { + group = id; + } + return group; + }, + + + prepareItems: function(items, applyDefaults) { + items = [].concat(items); + + var item, i, ln; + for (i = 0, ln = items.length; i < ln; i++) { + item = items[i]; + if (!(item instanceof Ext.draw.Sprite)) { + + item.surface = this; + items[i] = this.createItem(item); + } else { + item.surface = this; + } + } + return items; + }, + + + setText: Ext.emptyFn, + + + + createItem: Ext.emptyFn, + + + getId: function() { + return this.id || (this.id = Ext.id(null, 'ext-surface-')); + }, + + + destroy: function() { + var me = this; + delete me.domRef; + if (me.background) { + me.background.destroy(); + } + me.removeAll(true); + Ext.destroy(me.groups.items); + } +}); + + + +Ext.define('Ext.layout.component.Draw', { + + + + alias: 'layout.draw', + + extend: Ext.layout.component.Auto , + + setHeightInDom: true, + + setWidthInDom: true, + + + + type: 'draw', + + measureContentWidth : function (ownerContext) { + var target = ownerContext.target, + paddingInfo = ownerContext.getPaddingInfo(), + bbox = this.getBBox(ownerContext); + + if (!target.viewBox) { + if (target.autoSize) { + return bbox.width + paddingInfo.width; + } else { + return bbox.x + bbox.width + paddingInfo.width; + } + } else { + if (ownerContext.heightModel.shrinkWrap) { + return paddingInfo.width; + } else { + return bbox.width / bbox.height * (ownerContext.getProp('contentHeight') - paddingInfo.height) + paddingInfo.width; + } + } + }, + + measureContentHeight : function (ownerContext) { + var target = ownerContext.target, + paddingInfo = ownerContext.getPaddingInfo(), + bbox = this.getBBox(ownerContext); + + if (!ownerContext.target.viewBox) { + if (target.autoSize) { + return bbox.height + paddingInfo.height; + } else { + return bbox.y + bbox.height + paddingInfo.height; + } + } else { + if (ownerContext.widthModel.shrinkWrap) { + return paddingInfo.height; + } else { + return bbox.height / bbox.width * (ownerContext.getProp('contentWidth') - paddingInfo.width) + paddingInfo.height; + } + } + }, + + getBBox: function(ownerContext) { + var bbox = ownerContext.surfaceBBox; + if (!bbox) { + bbox = ownerContext.target.surface.items.getBBox(); + + if (bbox.width === -Infinity && bbox.height === -Infinity) { + bbox.width = bbox.height = bbox.x = bbox.y = 0; + } + ownerContext.surfaceBBox = bbox; + } + return bbox; + }, + + publishInnerWidth: function (ownerContext, width) { + ownerContext.setContentWidth(width - ownerContext.getFrameInfo().width, true); + }, + + publishInnerHeight: function (ownerContext, height) { + ownerContext.setContentHeight(height - ownerContext.getFrameInfo().height, true); + }, + + finishedLayout: function (ownerContext) { + + var props = ownerContext.props, + paddingInfo = ownerContext.getPaddingInfo(); + + + + this.owner.setSurfaceSize(props.contentWidth - paddingInfo.width, props.contentHeight - paddingInfo.height); + + + this.callParent(arguments); + } +}); + + +Ext.define('Ext.draw.Component', { + + + + alias: 'widget.draw', + + extend: Ext.Component , + + + + + + + + + + enginePriority: ['Svg', 'Vml'], + + baseCls: Ext.baseCSSPrefix + 'surface', + + componentLayout: 'draw', + + + viewBox: true, + + shrinkWrap: 3, + + + autoSize: false, + + + + + + + + initComponent: function() { + this.callParent(arguments); + + this.addEvents( + + 'mousedown', + + 'mouseup', + + 'mousemove', + + 'mouseenter', + + 'mouseleave', + + 'click', + + 'dblclick' + ); + }, + + + onRender: function() { + var me = this, + viewBox = me.viewBox, + autoSize = me.autoSize, + bbox, items, width, height, x, y; + me.callParent(arguments); + + if (me.createSurface() !== false) { + items = me.surface.items; + + if (viewBox || autoSize) { + bbox = items.getBBox(); + width = bbox.width; + height = bbox.height; + x = bbox.x; + y = bbox.y; + if (me.viewBox) { + me.surface.setViewBox(x, y, width, height); + } else { + me.autoSizeSurface(); + } + } + } + }, + + + autoSizeSurface: function() { + var bbox = this.surface.items.getBBox(); + this.setSurfaceSize(bbox.width, bbox.height); + }, + + setSurfaceSize: function (width, height) { + this.surface.setSize(width, height); + if (this.autoSize) { + var bbox = this.surface.items.getBBox(); + this.surface.setViewBox(bbox.x, bbox.y - (+Ext.isOpera), width, height); + } + }, + + + createSurface: function() { + var me = this, + cfg = Ext.applyIf({ + renderTo: me.el, + height: me.height, + width: me.width, + items: me.items + }, me.initialConfig), surface; + + + delete cfg.listeners; + if (!cfg.gradients) { + cfg.gradients = me.gradients; + } + surface = Ext.draw.Surface.create(cfg, me.enginePriority); + if (!surface) { + + return false; + } + me.surface = surface; + + + function refire(eventName) { + return function(e) { + me.fireEvent(eventName, e); + }; + } + + surface.on({ + scope: me, + mouseup: refire('mouseup'), + mousedown: refire('mousedown'), + mousemove: refire('mousemove'), + mouseenter: refire('mouseenter'), + mouseleave: refire('mouseleave'), + click: refire('click'), + dblclick: refire('dblclick') + }); + }, + + + + onDestroy: function() { + Ext.destroy(this.surface); + this.callParent(arguments); + } + +}); + + +Ext.chart = Ext.chart || {}; + +Ext.define('Ext.chart.theme.Theme', ( + + +function() { + + +(function() { + Ext.chart.theme = function(config, base) { + config = config || {}; + var i = 0, d = +new Date(), l, colors, color, + seriesThemes, markerThemes, + seriesTheme, markerTheme, + key, gradients = [], + midColor, midL; + + if (config.baseColor) { + midColor = Ext.draw.Color.fromString(config.baseColor); + midL = midColor.getHSL()[2]; + if (midL < 0.15) { + midColor = midColor.getLighter(0.3); + } else if (midL < 0.3) { + midColor = midColor.getLighter(0.15); + } else if (midL > 0.85) { + midColor = midColor.getDarker(0.3); + } else if (midL > 0.7) { + midColor = midColor.getDarker(0.15); + } + config.colors = [ midColor.getDarker(0.3).toString(), + midColor.getDarker(0.15).toString(), + midColor.toString(), + midColor.getLighter(0.15).toString(), + midColor.getLighter(0.3).toString()]; + + delete config.baseColor; + } + if (config.colors) { + colors = config.colors.slice(); + markerThemes = base.markerThemes; + seriesThemes = base.seriesThemes; + l = colors.length; + base.colors = colors; + for (; i < l; i++) { + color = colors[i]; + markerTheme = markerThemes[i] || {}; + seriesTheme = seriesThemes[i] || {}; + markerTheme.fill = seriesTheme.fill = markerTheme.stroke = seriesTheme.stroke = color; + markerThemes[i] = markerTheme; + seriesThemes[i] = seriesTheme; + } + base.markerThemes = markerThemes.slice(0, l); + base.seriesThemes = seriesThemes.slice(0, l); + + } + for (key in base) { + if (key in config) { + if (Ext.isObject(config[key]) && Ext.isObject(base[key])) { + Ext.apply(base[key], config[key]); + } else { + base[key] = config[key]; + } + } + } + if (config.useGradients) { + colors = base.colors || (function () { + var ans = []; + for (i = 0, seriesThemes = base.seriesThemes, l = seriesThemes.length; i < l; i++) { + ans.push(seriesThemes[i].fill || seriesThemes[i].stroke); + } + return ans; + }()); + for (i = 0, l = colors.length; i < l; i++) { + midColor = Ext.draw.Color.fromString(colors[i]); + if (midColor) { + color = midColor.getDarker(0.1).toString(); + midColor = midColor.toString(); + key = 'theme-' + midColor.substr(1) + '-' + color.substr(1) + '-' + d; + gradients.push({ + id: key, + angle: 45, + stops: { + 0: { + color: midColor.toString() + }, + 100: { + color: color.toString() + } + } + }); + colors[i] = 'url(#' + key + ')'; + } + } + base.gradients = gradients; + base.colors = colors; + } + + Ext.apply(this, base); + }; +}()); + +return { + + + + + + + + theme: 'Base', + themeAttrs: false, + + initTheme: function(theme) { + var me = this, + themes = Ext.chart.theme, + key, gradients; + if (theme) { + theme = theme.split(':'); + for (key in themes) { + if (key == theme[0]) { + gradients = theme[1] == 'gradients'; + me.themeAttrs = new themes[key]({ + useGradients: gradients + }); + if (gradients) { + me.gradients = me.themeAttrs.gradients; + } + if (me.themeAttrs.background) { + me.background = me.themeAttrs.background; + } + return; + } + } + } + } +}; + +})()); + + +Ext.define('Ext.chart.MaskLayer', { + extend: Ext.Component , + + constructor: function(config) { + config = Ext.apply(config || {}, { + style: 'position:absolute;background-color:#ff9;cursor:crosshair;opacity:0.5;border:1px solid #00f;' + }); + this.callParent([config]); + }, + + initComponent: function() { + var me = this; + me.callParent(arguments); + me.addEvents( + 'mousedown', + 'mouseup', + 'mousemove', + 'mouseenter', + 'mouseleave' + ); + }, + + initDraggable: function() { + this.callParent(arguments); + this.dd.onStart = function (e) { + var me = this, + comp = me.comp; + + + this.startPosition = comp.getPosition(true); + + + + if (comp.ghost && !comp.liveDrag) { + me.proxy = comp.ghost(); + me.dragTarget = me.proxy.header.el; + } + + + if (me.constrain || me.constrainDelegate) { + me.constrainTo = me.calculateConstrainRegion(); + } + }; + } +}); + + +Ext.define('Ext.chart.Mask', { + + + + + + + + constructor: function(config) { + var me = this; + + me.addEvents('select'); + + if (config) { + Ext.apply(me, config); + } + if (me.enableMask) { + me.on('afterrender', function() { + + var comp = new Ext.chart.MaskLayer({ + renderTo: me.el, + hidden: true + }); + comp.el.on({ + 'mousemove': function(e) { + me.onMouseMove(e); + }, + 'mouseup': function(e) { + me.onMouseUp(e); + } + }); + comp.initDraggable(); + me.maskType = me.mask; + me.mask = comp; + me.maskSprite = me.surface.add({ + type: 'path', + path: ['M', 0, 0], + zIndex: 1001, + opacity: 0.6, + hidden: true, + stroke: '#00f', + cursor: 'crosshair' + }); + }, me, { single: true }); + } + }, + + onMouseUp: function(e) { + var me = this, + bbox = me.bbox || me.chartBBox, + sel; + me.maskMouseDown = false; + me.mouseDown = false; + if (me.mouseMoved) { + me.handleMouseEvent(e); + me.mouseMoved = false; + sel = me.maskSelection; + me.fireEvent('select', me, { + x: sel.x - bbox.x, + y: sel.y - bbox.y, + width: sel.width, + height: sel.height + }); + } + }, + + onMouseDown: function(e) { + this.handleMouseEvent(e); + }, + + onMouseMove: function(e) { + this.handleMouseEvent(e); + }, + + handleMouseEvent: function(e) { + var me = this, + mask = me.maskType, + bbox = me.bbox || me.chartBBox, + x = bbox.x, + y = bbox.y, + math = Math, + floor = math.floor, + abs = math.abs, + min = math.min, + max = math.max, + height = floor(y + bbox.height), + width = floor(x + bbox.width), + staticX = e.getPageX() - me.el.getX(), + staticY = e.getPageY() - me.el.getY(), + maskMouseDown = me.maskMouseDown, + path; + + staticX = max(staticX, x); + staticY = max(staticY, y); + staticX = min(staticX, width); + staticY = min(staticY, height); + + if (e.type === 'mousedown') { + + me.mouseDown = true; + me.mouseMoved = false; + me.maskMouseDown = { + x: staticX, + y: staticY + }; + } + else { + + + me.mouseMoved = me.mouseDown; + if (maskMouseDown && me.mouseDown) { + if (mask == 'horizontal') { + staticY = y; + maskMouseDown.y = height; + } + else if (mask == 'vertical') { + staticX = x; + maskMouseDown.x = width; + } + width = maskMouseDown.x - staticX; + height = maskMouseDown.y - staticY; + path = ['M', staticX, staticY, 'l', width, 0, 0, height, -width, 0, 'z']; + me.maskSelection = { + x: (width > 0 ? staticX : staticX + width) + me.el.getX(), + y: (height > 0 ? staticY : staticY + height) + me.el.getY(), + width: abs(width), + height: abs(height) + }; + me.mask.updateBox(me.maskSelection); + me.mask.show(); + me.maskSprite.setAttributes({ + hidden: true + }, true); + } + else { + if (mask == 'horizontal') { + path = ['M', staticX, y, 'L', staticX, height]; + } + else if (mask == 'vertical') { + path = ['M', x, staticY, 'L', width, staticY]; + } + else { + path = ['M', staticX, y, 'L', staticX, height, 'M', x, staticY, 'L', width, staticY]; + } + me.maskSprite.setAttributes({ + path: path, + 'stroke-width': mask === true ? 1 : 1, + hidden: false + }, true); + } + } + + }, + + onMouseLeave: function(e) { + var me = this; + me.mouseMoved = false; + me.mouseDown = false; + me.maskMouseDown = false; + me.mask.hide(); + me.maskSprite.hide(true); + } +}); + + + +Ext.define('Ext.chart.Navigation', { + + + setZoom: function(zoomConfig) { + var me = this, + axesItems = me.axes.items, + i, ln, axis, + bbox = me.chartBBox, + xScale = bbox.width, + yScale = bbox.height, + zoomArea = { + x : zoomConfig.x - me.el.getX(), + y : zoomConfig.y - me.el.getY(), + width : zoomConfig.width, + height : zoomConfig.height + }, + zoomer, ends, from, to, store, count, step, length, horizontal; + + for (i = 0, ln = axesItems.length; i < ln; i++) { + axis = axesItems[i]; + horizontal = (axis.position == 'bottom' || axis.position == 'top'); + if (axis.type == 'Category') { + if (!store) { + store = me.getChartStore(); + count = store.data.items.length; + } + zoomer = zoomArea; + length = axis.length; + step = Math.round(length / count); + if (horizontal) { + from = (zoomer.x ? Math.floor(zoomer.x / step) + 1 : 0); + to = (zoomer.x + zoomer.width) / step; + } else { + from = (zoomer.y ? Math.floor(zoomer.y / step) + 1 : 0); + to = (zoomer.y + zoomer.height) / step; + } + } + else { + zoomer = { + x : zoomArea.x / xScale, + y : zoomArea.y / yScale, + width : zoomArea.width / xScale, + height : zoomArea.height / yScale + } + ends = axis.calcEnds(); + if (horizontal) { + from = (ends.to - ends.from) * zoomer.x + ends.from; + to = (ends.to - ends.from) * zoomer.width + from; + } else { + to = (ends.to - ends.from) * (1 - zoomer.y) + ends.from; + from = to - (ends.to - ends.from) * zoomer.height; + } + } + axis.minimum = from; + axis.maximum = to; + if (horizontal) { + if (axis.doConstrain && me.maskType != 'vertical') { + axis.doConstrain(); + } + } + else { + if (axis.doConstrain && me.maskType != 'horizontal') { + axis.doConstrain(); + } + } + } + me.redraw(false); + }, + + + restoreZoom: function() { + var me = this, + axesItems = me.axes.items, + i, ln, axis; + + me.setSubStore(null); + for (i = 0, ln = axesItems.length; i < ln; i++) { + axis = axesItems[i]; + delete axis.minimum; + delete axis.maximum; + } + me.redraw(false); + } + +}); + + +Ext.define('Ext.chart.Shape', { + + + + singleton: true, + + + + circle: function (surface, opts) { + return surface.add(Ext.apply({ + type: 'circle', + x: opts.x, + y: opts.y, + stroke: null, + radius: opts.radius + }, opts)); + }, + line: function (surface, opts) { + return surface.add(Ext.apply({ + type: 'rect', + x: opts.x - opts.radius, + y: opts.y - opts.radius, + height: 2 * opts.radius, + width: 2 * opts.radius / 5 + }, opts)); + }, + square: function (surface, opts) { + return surface.add(Ext.applyIf({ + type: 'rect', + x: opts.x - opts.radius, + y: opts.y - opts.radius, + height: 2 * opts.radius, + width: 2 * opts.radius, + radius: null + }, opts)); + }, + triangle: function (surface, opts) { + opts.radius *= 1.75; + return surface.add(Ext.apply({ + type: 'path', + stroke: null, + path: "M".concat(opts.x, ",", opts.y, "m0-", opts.radius * 0.58, "l", opts.radius * 0.5, ",", opts.radius * 0.87, "-", opts.radius, ",0z") + }, opts)); + }, + diamond: function (surface, opts) { + var r = opts.radius; + r *= 1.5; + return surface.add(Ext.apply({ + type: 'path', + stroke: null, + path: ["M", opts.x, opts.y - r, "l", r, r, -r, r, -r, -r, r, -r, "z"] + }, opts)); + }, + cross: function (surface, opts) { + var r = opts.radius; + r = r / 1.7; + return surface.add(Ext.apply({ + type: 'path', + stroke: null, + path: "M".concat(opts.x - r, ",", opts.y, "l", [-r, -r, r, -r, r, r, r, -r, r, r, -r, r, r, r, -r, r, -r, -r, -r, r, -r, -r, "z"]) + }, opts)); + }, + plus: function (surface, opts) { + var r = opts.radius / 1.3; + return surface.add(Ext.apply({ + type: 'path', + stroke: null, + path: "M".concat(opts.x - r / 2, ",", opts.y - r / 2, "l", [0, -r, r, 0, 0, r, r, 0, 0, r, -r, 0, 0, r, -r, 0, 0, -r, -r, 0, 0, -r, "z"]) + }, opts)); + }, + arrow: function (surface, opts) { + var r = opts.radius; + return surface.add(Ext.apply({ + type: 'path', + path: "M".concat(opts.x - r * 0.7, ",", opts.y - r * 0.4, "l", [r * 0.6, 0, 0, -r * 0.4, r, r * 0.8, -r, r * 0.8, 0, -r * 0.4, -r * 0.6, 0], "z") + }, opts)); + }, + drop: function (surface, x, y, text, size, angle) { + size = size || 30; + angle = angle || 0; + surface.add({ + type: 'path', + path: ['M', x, y, 'l', size, 0, 'A', size * 0.4, size * 0.4, 0, 1, 0, x + size * 0.7, y - size * 0.7, 'z'], + fill: '#000', + stroke: 'none', + rotate: { + degrees: 22.5 - angle, + x: x, + y: y + } + }); + angle = (angle + 90) * Math.PI / 180; + surface.add({ + type: 'text', + x: x + size * Math.sin(angle) - 10, + y: y + size * Math.cos(angle) + 5, + text: text, + 'font-size': size * 12 / 40, + stroke: 'none', + fill: '#fff' + }); + } +}); + + +Ext.define('Ext.chart.LegendItem', { + + + + extend: Ext.draw.CompositeSprite , + + + + + + + hiddenSeries: false, + + + label: undefined, + mask: undefined, + + + x: 0, + y: 0, + zIndex: 500, + + + boldRe: /bold\s\d{1,}.*/i, + + constructor: function(config) { + this.callParent(arguments); + this.createLegend(config); + }, + + + createLegend: function(config) { + var me = this, + series = me.series, + index = config.yFieldIndex; + + me.label = me.createLabel(config); + me.createSeriesMarkers(config); + + me.setAttributes({ + hidden: false + }, true); + + me.mask = me.createMask(config); + + me.yFieldIndex = index; + + + me.on('mouseover', me.onMouseOver, me); + me.on('mouseout', me.onMouseOut, me); + me.on('mousedown', me.onMouseDown, me); + + if (!series.visibleInLegend(index)) { + me.hiddenSeries = true; + me.label.setAttributes({ + opacity: 0.5 + }, true); + }; + + + me.updatePosition({ x: 0, y: 0 }); + }, + + + getLabelText: function() { + var me = this, + series = me.series, + idx = me.yFieldIndex; + + function getSeriesProp(name) { + var val = series[name]; + return (Ext.isArray(val) ? val[idx] : val); + } + + return getSeriesProp('title') || getSeriesProp('yField'); + }, + + + createLabel: function(config) { + var me = this, + legend = me.legend; + + return me.add('label', me.surface.add({ + type: 'text', + x: 20, + y: 0, + zIndex: (me.zIndex || 0) + 2, + fill: legend.labelColor, + font: legend.labelFont, + text: me.getLabelText(), + style: { + cursor: 'pointer' + } + })); + }, + + + createMask: function(config) { + var me = this, + surface = me.surface, + legend = me.legend, + bbox; + + bbox = me.getBBox(); + + return me.add('mask', surface.add({ + type: 'rect', + x: bbox.x, + y: bbox.y, + width: bbox.width || 20, + height: bbox.height || 20, + zIndex: (me.zIndex || 0) + 1, + fill: legend.boxFill, + style: { + 'cursor': 'pointer' + } + })); + }, + + + createSeriesMarkers: function(config) { + var me = this, + index = config.yFieldIndex, + series = me.series, + seriesType = series.type, + surface = me.surface, + z = me.zIndex; + + + if (seriesType === 'line' || seriesType === 'scatter') { + if(seriesType === 'line') { + var seriesStyle = Ext.apply(series.seriesStyle, series.style); + me.drawLine(0.5, 0.5, 16.5, 0.5, z, seriesStyle, index); + }; + + if (series.showMarkers || seriesType === 'scatter') { + var markerConfig = Ext.apply(series.markerStyle, series.markerConfig || {}, { + fill: series.getLegendColor(index) + }); + me.drawMarker(8.5, 0.5, z, markerConfig); + } + } + + else { + me.drawFilledBox(12, 12, z, index); + } + }, + + + drawLine: function(fromX, fromY, toX, toY, z, seriesStyle, index) { + var me = this, + surface = me.surface, + series = me.series; + + return me.add('line', surface.add({ + type: 'path', + path: 'M' + fromX + ',' + fromY + 'L' + toX + ',' + toY, + zIndex: (z || 0) + 2, + "stroke-width": series.lineWidth, + "stroke-linejoin": "round", + "stroke-dasharray": series.dash, + stroke: seriesStyle.stroke || series.getLegendColor(index) || '#000', + style: { + cursor: 'pointer' + } + })); + }, + + + drawMarker: function(x, y, z, markerConfig) { + var me = this, + surface = me.surface, + series = me.series; + + return me.add('marker', Ext.chart.Shape[markerConfig.type](surface, { + fill: markerConfig.fill, + x: x, + y: y, + zIndex: (z || 0) + 2, + radius: markerConfig.radius || markerConfig.size, + style: { + cursor: 'pointer' + } + })); + }, + + + drawFilledBox: function(width, height, z, index) { + var me = this, + surface = me.surface, + series = me.series; + + return me.add('box', surface.add({ + type: 'rect', + zIndex: (z || 0) + 2, + x: 0, + y: 0, + width: width, + height: height, + fill: series.getLegendColor(index), + style: { + cursor: 'pointer' + } + })); + }, + + + onMouseOver: function() { + var me = this; + + me.label.setStyle({ + 'font-weight': 'bold' + }); + me.mask.setStyle({ + 'cursor': 'pointer' + }); + me.series._index = me.yFieldIndex; + me.series.highlightItem(); + }, + + + onMouseOut: function() { + var me = this, + legend = me.legend, + boldRe = me.boldRe; + + me.label.setStyle({ + 'font-weight': legend.labelFont && boldRe.test(legend.labelFont) ? 'bold' : 'normal' + }); + me.series._index = me.yFieldIndex; + me.series.unHighlightItem(); + }, + + + onMouseDown: function() { + var me = this, + index = me.yFieldIndex; + + if (!me.hiddenSeries) { + me.series.hideAll(index); + me.label.setAttributes({ + opacity: 0.5 + }, true); + } else { + me.series.showAll(index); + me.label.setAttributes({ + opacity: 1 + }, true); + } + me.hiddenSeries = !me.hiddenSeries; + me.legend.chart.redraw(); + }, + + + updatePosition: function(relativeTo) { + var me = this, + items = me.items, + ln = items.length, + i = 0, + item; + if (!relativeTo) { + relativeTo = me.legend; + } + for (; i < ln; i++) { + item = items[i]; + switch (item.type) { + case 'text': + item.setAttributes({ + x: 20 + relativeTo.x + me.x, + y: relativeTo.y + me.y + }, true); + break; + case 'rect': + item.setAttributes({ + translate: { + x: relativeTo.x + me.x, + y: relativeTo.y + me.y - 6 + } + }, true); + break; + default: + item.setAttributes({ + translate: { + x: relativeTo.x + me.x, + y: relativeTo.y + me.y + } + }, true); + } + } + } +}); + + +Ext.define('Ext.chart.Legend', { + + + + + + + + + visible: true, + + + update: true, + + + position: 'bottom', + + + x: 0, + + + y: 0, + + + labelColor: '#000', + + + labelFont: '12px Helvetica, sans-serif', + + + boxStroke: '#000', + + + boxStrokeWidth: 1, + + + boxFill: '#FFF', + + + itemSpacing: 10, + + + padding: 5, + + + width: 0, + + height: 0, + + + boxZIndex: 100, + + + constructor: function(config) { + var me = this; + if (config) { + Ext.apply(me, config); + } + me.items = []; + + me.isVertical = ("left|right|float".indexOf(me.position) !== -1); + + + me.origX = me.x; + me.origY = me.y; + }, + + + create: function() { + var me = this, + seriesItems = me.chart.series.items, + i, ln, series; + + me.createBox(); + + if (me.rebuild !== false) { + me.createItems(); + } + + if (!me.created && me.isDisplayed()) { + me.created = true; + + + for (i = 0, ln = seriesItems.length; i < ln; i++) { + series = seriesItems[i]; + series.on('titlechange', me.redraw, me); + } + } + }, + + + redraw: function() { + var me = this; + + me.create(); + me.updatePosition(); + }, + + + isDisplayed: function() { + return this.visible && this.chart.series.findIndex('showInLegend', true) !== -1; + }, + + + createItems: function() { + var me = this, + seriesItems = me.chart.series.items, + items = me.items, + fields, i, li, j, lj, series, item; + + + me.removeItems(); + + + for (i = 0, li = seriesItems.length; i < li; i++) { + series = seriesItems[i]; + + if (series.showInLegend) { + fields = [].concat(series.yField); + + for (j = 0, lj = fields.length; j < lj; j++) { + item = me.createLegendItem(series, j); + items.push(item); + }; + } + }; + + me.alignItems(); + }, + + + removeItems: function() { + var me = this, + items = me.items, + len = items ? items.length : 0, + i; + + if (len) { + for (i = 0; i < len; i++) { + items[i].destroy(); + } + }; + + + items.length = []; + }, + + + alignItems: function() { + var me = this, + items = me.items, + padding = me.padding, + spacingOffset = 2, + vertical = me.isVertical, + mfloor = Math.floor, + mmax = Math.max, + dim, maxWidth, maxHeight, totalWidth, totalHeight, spacing; + + dim = me.updateItemDimensions(); + + maxWidth = dim.maxWidth, + maxHeight = dim.maxHeight, + totalWidth = dim.totalWidth, + totalHeight = dim.totalHeight, + spacing = dim.spacing; + + + me.width = mfloor((vertical ? maxWidth : totalWidth) + padding * 2); + + if (vertical && items.length === 1) { + spacingOffset = 1; + } + + me.height = mfloor((vertical ? totalHeight - spacingOffset * spacing : maxHeight) + (padding * 2)); + me.itemHeight = maxHeight; + }, + + updateItemDimensions: function() { + var me = this, + items = me.items, + padding = me.padding, + itemSpacing = me.itemSpacing, + maxWidth = 0, + maxHeight = 0, + totalWidth = 0, + totalHeight = 0, + vertical = me.isVertical, + mfloor = Math.floor, + mmax = Math.max, + spacing = 0, + i, l, item, bbox, width, height; + + + + for (i = 0, l = items.length; i < l; i++) { + item = items[i]; + + bbox = item.getBBox(); + + + width = bbox.width; + height = bbox.height; + + if (i === 0) { + spacing = vertical ? padding + height / 2 : padding; + } + else { + spacing = itemSpacing / (vertical ? 2 : 1); + } + + + item.x = mfloor(vertical ? padding : totalWidth + spacing); + item.y = mfloor(vertical ? totalHeight + spacing : padding + height / 2); + + + totalWidth += width + spacing; + totalHeight += height + spacing; + maxWidth = mmax(maxWidth, width); + maxHeight = mmax(maxHeight, height); + }; + + return { + totalWidth: totalWidth, + totalHeight: totalHeight, + maxWidth: maxWidth, + maxHeight: maxHeight, + spacing: spacing + }; + }, + + + createLegendItem: function(series, yFieldIndex) { + var me = this; + + return new Ext.chart.LegendItem({ + legend: me, + series: series, + surface: me.chart.surface, + yFieldIndex: yFieldIndex + }); + }, + + + getBBox: function() { + var me = this; + return { + x: Math.round(me.x) - me.boxStrokeWidth / 2, + y: Math.round(me.y) - me.boxStrokeWidth / 2, + width: me.width, + height: me.height + }; + }, + + + createBox: function() { + var me = this, + box, bbox; + + if (me.boxSprite) { + me.boxSprite.destroy(); + } + + bbox = me.getBBox(); + + + + + + if (isNaN(bbox.width) || isNaN(bbox.height)) { + me.boxSprite = false; + return; + } + + box = me.boxSprite = me.chart.surface.add(Ext.apply({ + type: 'rect', + stroke: me.boxStroke, + "stroke-width": me.boxStrokeWidth, + fill: me.boxFill, + zIndex: me.boxZIndex + }, bbox)); + + box.redraw(); + }, + + + calcPosition: function() { + var me = this, + x, y, + legendWidth = me.width, + legendHeight = me.height, + padding = me.padding, + chart = me.chart, + chartBBox = chart.chartBBox, + insets = chart.insetPadding, + chartWidth = chartBBox.width - (insets * 2), + chartHeight = chartBBox.height - (insets * 2), + chartX = chartBBox.x + insets, + chartY = chartBBox.y + insets, + surface = chart.surface, + mfloor = Math.floor; + + + switch(me.position) { + case "left": + x = insets; + y = mfloor(chartY + chartHeight / 2 - legendHeight / 2); + break; + case "right": + x = mfloor(surface.width - legendWidth) - insets; + y = mfloor(chartY + chartHeight / 2 - legendHeight / 2); + break; + case "top": + x = mfloor(chartX + chartWidth / 2 - legendWidth / 2); + y = insets; + break; + case "bottom": + x = mfloor(chartX + chartWidth / 2 - legendWidth / 2); + y = mfloor(surface.height - legendHeight) - insets; + break; + default: + x = mfloor(me.origX) + insets; + y = mfloor(me.origY) + insets; + } + + return { x: x, y: y }; + }, + + + updatePosition: function() { + var me = this, + items = me.items, + pos, i, l, bbox; + + if (me.isDisplayed()) { + + pos = me.calcPosition(); + + me.x = pos.x; + me.y = pos.y; + + + for (i = 0, l = items.length; i < l; i++) { + items[i].updatePosition(); + }; + + bbox = me.getBBox(); + + + + + + + if (isNaN(bbox.width) || isNaN(bbox.height)) { + if (me.boxSprite) { + me.boxSprite.hide(true); + } + } + else { + if (!me.boxSprite) { + me.createBox(); + } + + + me.boxSprite.setAttributes(bbox, true); + me.boxSprite.show(true); + } + } + }, + + + toggle: function(show) { + var me = this, + i = 0, + items = me.items, + len = items.length; + + if (me.boxSprite) { + if (show) { + me.boxSprite.show(true); + } else { + me.boxSprite.hide(true); + } + } + + for (; i < len; ++i) { + if (show) { + items[i].show(true); + } else { + items[i].hide(true); + } + } + + me.visible = show; + } +}); + + +Ext.define('Ext.chart.theme.Base', { + + + + + + + + constructor: function(config) { + var ident = Ext.identityFn; + Ext.chart.theme.call(this, config, { + background: false, + axis: { + stroke: '#444', + 'stroke-width': 1 + }, + axisLabelTop: { + fill: '#444', + font: '12px Arial, Helvetica, sans-serif', + spacing: 2, + padding: 5, + renderer: ident + }, + axisLabelRight: { + fill: '#444', + font: '12px Arial, Helvetica, sans-serif', + spacing: 2, + padding: 5, + renderer: ident + }, + axisLabelBottom: { + fill: '#444', + font: '12px Arial, Helvetica, sans-serif', + spacing: 2, + padding: 5, + renderer: ident + }, + axisLabelLeft: { + fill: '#444', + font: '12px Arial, Helvetica, sans-serif', + spacing: 2, + padding: 5, + renderer: ident + }, + axisTitleTop: { + font: 'bold 18px Arial', + fill: '#444' + }, + axisTitleRight: { + font: 'bold 18px Arial', + fill: '#444', + rotate: { + x:0, y:0, + degrees: 270 + } + }, + axisTitleBottom: { + font: 'bold 18px Arial', + fill: '#444' + }, + axisTitleLeft: { + font: 'bold 18px Arial', + fill: '#444', + rotate: { + x:0, y:0, + degrees: 270 + } + }, + series: { + 'stroke-width': 0 + }, + seriesLabel: { + font: '12px Arial', + fill: '#333' + }, + marker: { + stroke: '#555', + radius: 3, + size: 3 + }, + colors: [ "#94ae0a", "#115fa6","#a61120", "#ff8809", "#ffd13e", "#a61187", "#24ad9a", "#7c7474", "#a66111"], + seriesThemes: [{ + fill: "#115fa6" + }, { + fill: "#94ae0a" + }, { + fill: "#a61120" + }, { + fill: "#ff8809" + }, { + fill: "#ffd13e" + }, { + fill: "#a61187" + }, { + fill: "#24ad9a" + }, { + fill: "#7c7474" + }, { + fill: "#115fa6" + }, { + fill: "#94ae0a" + }, { + fill: "#a61120" + }, { + fill: "#ff8809" + }, { + fill: "#ffd13e" + }, { + fill: "#a61187" + }, { + fill: "#24ad9a" + }, { + fill: "#7c7474" + }, { + fill: "#a66111" + }], + markerThemes: [{ + fill: "#115fa6", + type: 'circle' + }, { + fill: "#94ae0a", + type: 'cross' + }, { + fill: "#115fa6", + type: 'plus' + }, { + fill: "#94ae0a", + type: 'circle' + }, { + fill: "#a61120", + type: 'cross' + }] + }); + } +}, function() { + var palette = ['#b1da5a', '#4ce0e7', '#e84b67', '#da5abd', '#4d7fe6', '#fec935'], + names = ['Green', 'Sky', 'Red', 'Purple', 'Blue', 'Yellow'], + i = 0, j = 0, l = palette.length, themes = Ext.chart.theme, + categories = [['#f0a50a', '#c20024', '#2044ba', '#810065', '#7eae29'], + ['#6d9824', '#87146e', '#2a9196', '#d39006', '#1e40ac'], + ['#fbbc29', '#ce2e4e', '#7e0062', '#158b90', '#57880e'], + ['#ef5773', '#fcbd2a', '#4f770d', '#1d3eaa', '#9b001f'], + ['#7eae29', '#fdbe2a', '#910019', '#27b4bc', '#d74dbc'], + ['#44dce1', '#0b2592', '#996e05', '#7fb325', '#b821a1']], + cats = categories.length; + + + for (; i < l; i++) { + themes[names[i]] = (function(color) { + return Ext.extend(themes.Base, { + constructor: function(config) { + themes.Base.prototype.constructor.call(this, Ext.apply({ + baseColor: color + }, config)); + } + }); + }(palette[i])); + } + + + for (i = 0; i < cats; i++) { + themes['Category' + (i + 1)] = (function(category) { + return Ext.extend(themes.Base, { + constructor: function(config) { + themes.Base.prototype.constructor.call(this, Ext.apply({ + colors: category + }, config)); + } + }); + }(categories[i])); + } +}); + + +Ext.define('Ext.chart.Chart', { + + + + alias: 'widget.chart', + + extend: Ext.draw.Component , + + mixins: { + themeManager: Ext.chart.theme.Theme , + mask: Ext.chart.Mask , + navigation: Ext.chart.Navigation , + bindable: Ext.util.Bindable , + observable: Ext.util.Observable + }, + + + + + + + + + + + + + + + + + + viewBox: false, + + + + + animate: false, + + + legend: false, + + + insetPadding: 10, + + + background: false, + + + + + + + + + + constructor: function(config) { + var me = this, + defaultAnim; + + config = Ext.apply({}, config); + me.initTheme(config.theme || me.theme); + if (me.gradients) { + Ext.apply(config, { gradients: me.gradients }); + } + if (me.background) { + Ext.apply(config, { background: me.background }); + } + if (config.animate) { + defaultAnim = { + easing: 'ease', + duration: 500 + }; + if (Ext.isObject(config.animate)) { + config.animate = Ext.applyIf(config.animate, defaultAnim); + } + else { + config.animate = defaultAnim; + } + } + + me.mixins.observable.constructor.call(me, config); + if (config.enableMask) { + me.mixins.mask.constructor.call(me); + } + me.mixins.navigation.constructor.call(me); + me.callParent([config]); + }, + + getChartStore: function(){ + return this.substore || this.store; + }, + + initComponent: function() { + var me = this, + axes, + series; + me.callParent(); + me.addEvents( + 'itemmousedown', + 'itemmouseup', + 'itemmouseover', + 'itemmouseout', + 'itemclick', + 'itemdblclick', + 'itemdragstart', + 'itemdrag', + 'itemdragend', + + 'beforerefresh', + + 'refresh' + ); + Ext.applyIf(me, { + zoom: { + width: 1, + height: 1, + x: 0, + y: 0 + } + }); + me.maxGutters = { left: 0, right: 0, bottom: 0, top: 0 }; + me.store = Ext.data.StoreManager.lookup(me.store); + axes = me.axes; + me.axes = new Ext.util.MixedCollection(false, function(a) { return a.position; }); + if (axes) { + me.axes.addAll(axes); + } + series = me.series; + me.series = new Ext.util.MixedCollection(false, function(a) { return a.seriesId || (a.seriesId = Ext.id(null, 'ext-chart-series-')); }); + if (series) { + me.series.addAll(series); + } + if (me.legend !== false) { + me.legend = new Ext.chart.Legend(Ext.applyIf({chart:me}, me.legend)); + } + + me.on({ + mousemove: me.onMouseMove, + mouseleave: me.onMouseLeave, + mousedown: me.onMouseDown, + mouseup: me.onMouseUp, + click: me.onClick, + dblclick: me.onDblClick, + scope: me + }); + }, + + + afterComponentLayout: function(width, height, oldWidth, oldHeight) { + var me = this; + if (Ext.isNumber(width) && Ext.isNumber(height)) { + if (width !== oldWidth || height !== oldHeight) { + me.curWidth = width; + me.curHeight = height; + me.redraw(true); + me.needsRedraw = false; + } else if (me.needsRedraw) { + me.redraw(); + me.needsRedraw = false; + } + } + this.callParent(arguments); + }, + + + redraw: function(resize) { + var me = this, + seriesItems = me.series.items, + seriesLen = seriesItems.length, + axesItems = me.axes.items, + axesLen = axesItems.length, + themeIndex = 0, + i, item, + chartBBox = me.chartBBox = { + x: 0, + y: 0, + height: me.curHeight, + width: me.curWidth + }, + legend = me.legend, + series; + + me.surface.setSize(chartBBox.width, chartBBox.height); + + for (i = 0; i < seriesLen; i++) { + item = seriesItems[i]; + if (!item.initialized) { + series = me.initializeSeries(item, i, themeIndex); + } else { + series = item; + } + + + series.onRedraw(); + + + if (Ext.isArray(item.yField)) { + themeIndex += item.yField.length; + } else { + ++themeIndex; + } + } + for (i = 0; i < axesLen; i++) { + item = axesItems[i]; + if (!item.initialized) { + me.initializeAxis(item); + } + } + + + for (i = 0; i < axesLen; i++) { + axesItems[i].processView(); + } + for (i = 0; i < axesLen; i++) { + axesItems[i].drawAxis(true); + } + + + if (legend !== false && legend.visible) { + if (legend.update || !legend.created) { + legend.create(); + } + } + + + me.alignAxes(); + + + if (legend !== false && legend.visible) { + legend.updatePosition(); + } + + + me.getMaxGutters(); + + + me.resizing = !!resize; + + for (i = 0; i < axesLen; i++) { + axesItems[i].drawAxis(); + } + for (i = 0; i < seriesLen; i++) { + me.drawCharts(seriesItems[i]); + } + me.resizing = false; + }, + + + afterRender: function() { + var me = this; + + me.callParent(arguments); + + if (me.categoryNames) { + me.setCategoryNames(me.categoryNames); + } + + me.bindStore(me.store, true); + me.refresh(); + + if (me.surface.engine === 'Vml') { + me.on('added', me.onAddedVml, me); + me.mon(me.hierarchyEventSource, 'added', me.onContainerAddedVml, me); + } + }, + + + + + + + onAddedVml: function() { + this.needsRedraw = true; + }, + + onContainerAddedVml: function(container) { + if (this.isDescendantOf(container)) { + this.needsRedraw = true; + } + }, + + + getEventXY: function(e) { + var me = this, + box = this.surface.getRegion(), + pageXY = e.getXY(), + x = pageXY[0] - box.left, + y = pageXY[1] - box.top; + return [x, y]; + }, + + onClick: function(e) { + this.handleClick('itemclick', e); + }, + + onDblClick: function(e) { + this.handleClick('itemdblclick', e); + }, + + + handleClick: function(name, e) { + var me = this, + position = me.getEventXY(e), + seriesItems = me.series.items, + i, ln, series, + item; + + + + for (i = 0, ln = seriesItems.length; i < ln; i++) { + series = seriesItems[i]; + if (Ext.draw.Draw.withinBox(position[0], position[1], series.bbox)) { + if (series.getItemForPoint) { + item = series.getItemForPoint(position[0], position[1]); + if (item) { + series.fireEvent(name, item); + } + } + } + } + }, + + + onMouseDown: function(e) { + var me = this, + position = me.getEventXY(e), + seriesItems = me.series.items, + i, ln, series, + item; + + if (me.enableMask) { + me.mixins.mask.onMouseDown.call(me, e); + } + + + for (i = 0, ln = seriesItems.length; i < ln; i++) { + series = seriesItems[i]; + if (Ext.draw.Draw.withinBox(position[0], position[1], series.bbox)) { + if (series.getItemForPoint) { + item = series.getItemForPoint(position[0], position[1]); + if (item) { + series.fireEvent('itemmousedown', item); + } + } + } + } + }, + + + onMouseUp: function(e) { + var me = this, + position = me.getEventXY(e), + seriesItems = me.series.items, + i, ln, series, + item; + + if (me.enableMask) { + me.mixins.mask.onMouseUp.call(me, e); + } + + + for (i = 0, ln = seriesItems.length; i < ln; i++) { + series = seriesItems[i]; + if (Ext.draw.Draw.withinBox(position[0], position[1], series.bbox)) { + if (series.getItemForPoint) { + item = series.getItemForPoint(position[0], position[1]); + if (item) { + series.fireEvent('itemmouseup', item); + } + } + } + } + }, + + + onMouseMove: function(e) { + var me = this, + position = me.getEventXY(e), + seriesItems = me.series.items, + i, ln, series, + item, last, storeItem, storeField; + + + if (me.enableMask) { + me.mixins.mask.onMouseMove.call(me, e); + } + + + for (i = 0, ln = seriesItems.length; i < ln; i++) { + series = seriesItems[i]; + if (Ext.draw.Draw.withinBox(position[0], position[1], series.bbox)) { + if (series.getItemForPoint) { + item = series.getItemForPoint(position[0], position[1]); + last = series._lastItemForPoint; + storeItem = series._lastStoreItem; + storeField = series._lastStoreField; + + + if (item !== last || item && (item.storeItem != storeItem || item.storeField != storeField)) { + if (last) { + series.fireEvent('itemmouseout', last); + delete series._lastItemForPoint; + delete series._lastStoreField; + delete series._lastStoreItem; + } + if (item) { + series.fireEvent('itemmouseover', item); + series._lastItemForPoint = item; + series._lastStoreItem = item.storeItem; + series._lastStoreField = item.storeField; + } + } + } + } else { + last = series._lastItemForPoint; + if (last) { + series.fireEvent('itemmouseout', last); + delete series._lastItemForPoint; + delete series._lastStoreField; + delete series._lastStoreItem; + } + } + } + }, + + + onMouseLeave: function(e) { + var me = this, + seriesItems = me.series.items, + i, ln, series; + + if (me.enableMask) { + me.mixins.mask.onMouseLeave.call(me, e); + } + for (i = 0, ln = seriesItems.length; i < ln; i++) { + series = seriesItems[i]; + delete series._lastItemForPoint; + } + }, + + + delayRefresh: function() { + var me = this; + if (!me.refreshTask) { + me.refreshTask = new Ext.util.DelayedTask(me.refresh, me); + } + me.refreshTask.delay(me.refreshBuffer); + }, + + + refresh: function() { + var me = this; + + if (me.rendered && me.curWidth !== undefined && me.curHeight !== undefined) { + if (!me.isVisible(true)) { + if (!me.refreshPending) { + me.setShowListeners('mon'); + me.refreshPending = true; + } + return; + } + if (me.fireEvent('beforerefresh', me) !== false) { + me.redraw(); + me.fireEvent('refresh', me); + } + } + }, + + onShow: function(){ + var me = this; + me.callParent(arguments); + if (me.refreshPending) { + me.delayRefresh(); + me.setShowListeners('mun'); + } + delete me.refreshPending; + }, + + setShowListeners: function(method){ + var me = this; + me[method](me.hierarchyEventSource, { + scope: me, + single: true, + show: me.forceRefresh, + expand: me.forceRefresh + }); + }, + + doRefresh: function(){ + + this.setSubStore(null); + this.refresh(); + }, + + forceRefresh: function(container) { + var me = this; + if (me.isDescendantOf(container) && me.refreshPending) { + + + me.setShowListeners('mun'); + me.delayRefresh(); + } + delete me.refreshPending; + }, + + bindStore: function(store, initial) { + var me = this; + me.mixins.bindable.bindStore.apply(me, arguments); + if (me.store && !initial) { + me.refresh(); + } + }, + + getStoreListeners: function() { + var refresh = this.doRefresh, + delayRefresh = this.delayRefresh; + + return { + refresh: refresh, + add: delayRefresh, + bulkremove: delayRefresh, + update: delayRefresh, + clear: refresh + }; + }, + + setSubStore: function(subStore){ + this.substore = subStore; + }, + + + initializeAxis: function(axis) { + var me = this, + chartBBox = me.chartBBox, + w = chartBBox.width, + h = chartBBox.height, + x = chartBBox.x, + y = chartBBox.y, + themeAttrs = me.themeAttrs, + config = { + chart: me + }; + if (themeAttrs) { + config.axisStyle = Ext.apply({}, themeAttrs.axis); + config.axisLabelLeftStyle = Ext.apply({}, themeAttrs.axisLabelLeft); + config.axisLabelRightStyle = Ext.apply({}, themeAttrs.axisLabelRight); + config.axisLabelTopStyle = Ext.apply({}, themeAttrs.axisLabelTop); + config.axisLabelBottomStyle = Ext.apply({}, themeAttrs.axisLabelBottom); + config.axisTitleLeftStyle = Ext.apply({}, themeAttrs.axisTitleLeft); + config.axisTitleRightStyle = Ext.apply({}, themeAttrs.axisTitleRight); + config.axisTitleTopStyle = Ext.apply({}, themeAttrs.axisTitleTop); + config.axisTitleBottomStyle = Ext.apply({}, themeAttrs.axisTitleBottom); + } + switch (axis.position) { + case 'top': + Ext.apply(config, { + length: w, + width: h, + x: x, + y: y + }); + break; + case 'bottom': + Ext.apply(config, { + length: w, + width: h, + x: x, + y: h + }); + break; + case 'left': + Ext.apply(config, { + length: h, + width: w, + x: x, + y: h + }); + break; + case 'right': + Ext.apply(config, { + length: h, + width: w, + x: w, + y: h + }); + break; + } + if (!axis.chart) { + Ext.apply(config, axis); + axis = me.axes.replace(Ext.createByAlias('axis.' + axis.type.toLowerCase(), config)); + } else { + Ext.apply(axis, config); + } + axis.initialized = true; + }, + + + + getInsets: function() { + var me = this, + insetPadding = me.insetPadding; + + return { + top: insetPadding, + right: insetPadding, + bottom: insetPadding, + left: insetPadding + }; + }, + + + calculateInsets: function() { + var me = this, + legend = me.legend, + axes = me.axes, + edges = ['top', 'right', 'bottom', 'left'], + insets, i, l, edge, isVertical, axis, bbox; + + function getAxis(edge) { + var i = axes.findIndex('position', edge); + return (i < 0) ? null : axes.getAt(i); + } + + insets = me.getInsets(); + + + for (i = 0, l = edges.length; i < l; i++) { + edge = edges[i]; + + isVertical = (edge === 'left' || edge === 'right'); + axis = getAxis(edge); + + + if (legend !== false) { + if (legend.position === edge) { + bbox = legend.getBBox(); + insets[edge] += (isVertical ? bbox.width : bbox.height) + me.insetPadding; + } + } + + + + if (axis && axis.bbox) { + bbox = axis.bbox; + insets[edge] += (isVertical ? bbox.width : bbox.height); + } + }; + + return insets; + }, + + + alignAxes: function() { + var me = this, + axesItems = me.axes.items, + insets, chartBBox, i, l, axis, pos, isVertical; + + insets = me.calculateInsets(); + + + chartBBox = { + x: insets.left, + y: insets.top, + width: me.curWidth - insets.left - insets.right, + height: me.curHeight - insets.top - insets.bottom + }; + me.chartBBox = chartBBox; + + + + for (i = 0, l = axesItems.length; i < l; i++) { + axis = axesItems[i]; + pos = axis.position; + isVertical = pos === 'left' || pos === 'right'; + + axis.x = (pos === 'right' ? chartBBox.x + chartBBox.width : chartBBox.x); + axis.y = (pos === 'top' ? chartBBox.y : chartBBox.y + chartBBox.height); + axis.width = (isVertical ? chartBBox.width : chartBBox.height); + axis.length = (isVertical ? chartBBox.height : chartBBox.width); + }; + }, + + + initializeSeries: function(series, idx, themeIndex) { + var me = this, + themeAttrs = me.themeAttrs, + seriesObj, markerObj, seriesThemes, st, + markerThemes, colorArrayStyle = [], + initialized = (series instanceof Ext.chart.series.Series), + i = 0, l, config; + + if (!initialized) { + config = { + chart: me, + seriesId: series.seriesId + }; + if (themeAttrs) { + seriesThemes = themeAttrs.seriesThemes; + markerThemes = themeAttrs.markerThemes; + seriesObj = Ext.apply({}, themeAttrs.series); + markerObj = Ext.apply({}, themeAttrs.marker); + config.seriesStyle = Ext.apply(seriesObj, seriesThemes[themeIndex % seriesThemes.length]); + config.seriesLabelStyle = Ext.apply({}, themeAttrs.seriesLabel); + config.markerStyle = Ext.apply(markerObj, markerThemes[themeIndex % markerThemes.length]); + if (themeAttrs.colors) { + config.colorArrayStyle = themeAttrs.colors; + } else { + colorArrayStyle = []; + for (l = seriesThemes.length; i < l; i++) { + st = seriesThemes[i]; + if (st.fill || st.stroke) { + colorArrayStyle.push(st.fill || st.stroke); + } + } + if (colorArrayStyle.length) { + config.colorArrayStyle = colorArrayStyle; + } + } + config.seriesIdx = idx; + config.themeIdx = themeIndex; + } + Ext.applyIf(config, series); + series = me.series.replace(Ext.createByAlias('series.' + series.type.toLowerCase(), config)); + } + + if (series.initialize) { + series.initialize(); + } + series.initialized = true; + return series; + }, + + + getMaxGutters: function() { + var me = this, + seriesItems = me.series.items, + i, ln, series, gutters, + lowerH = 0, upperH = 0, lowerV = 0, upperV = 0; + + for (i = 0, ln = seriesItems.length; i < ln; i++) { + gutters = seriesItems[i].getGutters(); + if (gutters) { + if (gutters.verticalAxis) { + lowerV = Math.max(lowerV, gutters.lower); + upperV = Math.max(upperV, gutters.upper); + } + else { + lowerH = Math.max(lowerH, gutters.lower); + upperH = Math.max(upperH, gutters.upper); + } + } + } + me.maxGutters = { + left: lowerH, + right: upperH, + bottom: lowerV, + top: upperV + }; + }, + + + drawAxis: function(axis) { + axis.drawAxis(); + }, + + + drawCharts: function(series) { + series.triggerafterrender = false; + series.drawSeries(); + if (!this.animate) { + series.fireEvent('afterrender'); + } + }, + + save: function(config){ + return Ext.draw.Surface.save(this.surface, config); + }, + + destroy: function() { + Ext.destroy(this.surface); + this.bindStore(null); + this.callParent(arguments); + } +}); + + +Ext.define('Ext.chart.Highlight', { + + + + + + + + + highlight: false, + + + highlightCfg : { + fill: '#fdd', + "stroke-width": 5, + stroke: '#f55' + }, + + constructor: function(config) { + + if (config.highlight && (typeof config.highlight !== 'boolean')) { + this.highlightCfg = Ext.merge({}, this.highlightCfg, config.highlight); + } + }, + + + highlightItem: function(item) { + if (!item) { + return; + } + + var me = this, + sprite = item.sprite, + opts = Ext.merge({}, me.highlightCfg, me.highlight), + surface = me.chart.surface, + animate = me.chart.animate, + p, from, to, pi; + + if (!me.highlight || !sprite || sprite._highlighted) { + return; + } + if (sprite._anim) { + sprite._anim.paused = true; + } + sprite._highlighted = true; + if (!sprite._defaults) { + sprite._defaults = Ext.apply({}, sprite.attr); + from = {}; + to = {}; + + for (p in opts) { + if (! (p in sprite._defaults)) { + sprite._defaults[p] = surface.availableAttrs[p]; + } + from[p] = sprite._defaults[p]; + to[p] = opts[p]; + if (Ext.isObject(opts[p])) { + from[p] = {}; + to[p] = {}; + Ext.apply(sprite._defaults[p], sprite.attr[p]); + Ext.apply(from[p], sprite._defaults[p]); + for (pi in sprite._defaults[p]) { + if (! (pi in opts[p])) { + to[p][pi] = from[p][pi]; + } else { + to[p][pi] = opts[p][pi]; + } + } + for (pi in opts[p]) { + if (! (pi in to[p])) { + to[p][pi] = opts[p][pi]; + } + } + } + } + sprite._from = from; + sprite._to = to; + sprite._endStyle = to; + } + if (animate) { + sprite._anim = new Ext.fx.Anim({ + target: sprite, + from: sprite._from, + to: sprite._to, + duration: 150 + }); + } else { + sprite.setAttributes(sprite._to, true); + } + }, + + + unHighlightItem: function() { + if (!this.highlight || !this.items) { + return; + } + + var me = this, + items = me.items, + len = items.length, + opts = Ext.merge({}, me.highlightCfg, me.highlight), + animate = me.chart.animate, + i = 0, + obj, p, sprite; + for (; i < len; i++) { + if (!items[i]) { + continue; + } + sprite = items[i].sprite; + if (sprite && sprite._highlighted) { + if (sprite._anim) { + sprite._anim.paused = true; + } + obj = {}; + for (p in opts) { + if (Ext.isObject(sprite._defaults[p])) { + obj[p] = Ext.apply({}, sprite._defaults[p]); + } + else { + obj[p] = sprite._defaults[p]; + } + } + if (animate) { + + sprite._endStyle = obj; + sprite._anim = new Ext.fx.Anim({ + target: sprite, + to: obj, + duration: 150 + }); + } + else { + sprite.setAttributes(obj, true); + } + delete sprite._highlighted; + + } + } + }, + + cleanHighlights: function() { + if (!this.highlight) { + return; + } + + var group = this.group, + markerGroup = this.markerGroup, + i = 0, + l; + for (l = group.getCount(); i < l; i++) { + delete group.getAt(i)._defaults; + } + if (markerGroup) { + for (l = markerGroup.getCount(); i < l; i++) { + delete markerGroup.getAt(i)._defaults; + } + } + } +}); + + +Ext.define('Ext.chart.Label', { + + + + + + + + + + + + + + + colorStringRe: /url\s*\(\s*#([^\/)]+)\s*\)/, + + + constructor: function(config) { + var me = this; + me.label = Ext.applyIf(me.label || {}, + { + display: "none", + stackedDisplay: "none", + color: "#000", + field: "name", + minMargin: 50, + font: "11px Helvetica, sans-serif", + orientation: "horizontal", + renderer: Ext.identityFn + }); + + if (me.label.display !== 'none') { + me.labelsGroup = me.chart.surface.getGroup(me.seriesId + '-labels'); + } + }, + + + renderLabels: function() { + var me = this, + chart = me.chart, + gradients = chart.gradients, + items = me.items, + animate = chart.animate, + config = me.label, + display = config.display, + stackedDisplay = config.stackedDisplay, + format = config.renderer, + color = config.color, + field = [].concat(config.field), + group = me.labelsGroup, + groupLength = (group || 0) && group.length, + store = me.chart.getChartStore(), + len = store.getCount(), + itemLength = (items || 0) && items.length, + ratio = itemLength / len, + gradientsCount = (gradients || 0) && gradients.length, + Color = Ext.draw.Color, + hides = [], + gradient, i, count, groupIndex, index, j, k, colorStopTotal, colorStopIndex, colorStop, item, label, + storeItem, sprite, spriteColor, spriteBrightness, labelColor, colorString, + total, totalPositive, totalNegative, topText, bottomText; + + if (display == 'none') { + return; + } + + if(itemLength == 0){ + while(groupLength--) { + hides.push(groupLength); + } + } else { + for (i = 0, count = 0, groupIndex = 0; i < len; i++) { + index = 0; + for (j = 0; j < ratio; j++) { + item = items[count]; + label = group.getAt(groupIndex); + storeItem = store.getAt(i); + + while(this.__excludes && this.__excludes[index]) { + index++; + } + + if (!item && label) { + label.hide(true); + groupIndex++; + } + + if (item && field[j]) { + if (!label) { + label = me.onCreateLabel(storeItem, item, i, display); + } + me.onPlaceLabel(label, storeItem, item, i, display, animate, index); + groupIndex++; + + + if (config.contrast && item.sprite) { + sprite = item.sprite; + + + if (animate && sprite._endStyle) { + colorString = sprite._endStyle.fill; + } else if (animate && sprite._to) { + colorString = sprite._to.fill; + } else { + colorString = sprite.attr.fill; + } + colorString = colorString || sprite.attr.fill; + + spriteColor = Color.fromString(colorString); + + if (colorString && !spriteColor) { + colorString = colorString.match(me.colorStringRe)[1]; + for (k = 0; k < gradientsCount; k++) { + gradient = gradients[k]; + if (gradient.id == colorString) { + + colorStop = 0; colorStopTotal = 0; + for (colorStopIndex in gradient.stops) { + colorStop++; + colorStopTotal += Color.fromString(gradient.stops[colorStopIndex].color).getGrayscale(); + } + spriteBrightness = (colorStopTotal / colorStop) / 255; + break; + } + } + } + else { + spriteBrightness = spriteColor.getGrayscale() / 255; + } + if (label.isOutside) { + spriteBrightness = 1; + } + labelColor = Color.fromString(label.attr.color || label.attr.fill).getHSL(); + labelColor[2] = spriteBrightness > 0.5 ? 0.2 : 0.8; + label.setAttributes({ + fill: String(Color.fromHSL.apply({}, labelColor)) + }, true); + } + + + if (me.stacked && stackedDisplay && (item.totalPositiveValues || item.totalNegativeValues)) { + totalPositive = (item.totalPositiveValues || 0); + totalNegative = (item.totalNegativeValues || 0); + total = totalPositive + totalNegative; + + if (stackedDisplay == 'total') { + topText = format(total); + } else if (stackedDisplay == 'balances') { + if (totalPositive == 0 && totalNegative == 0) { + topText = format(0); + } else { + topText = format(totalPositive); + bottomText = format(totalNegative); + } + } + + if (topText) { + label = group.getAt(groupIndex); + if (!label) { + label = me.onCreateLabel(storeItem, item, i, 'over'); + } + label.setAttributes({text: topText}); + me.onPlaceLabel(label, storeItem, item, i, 'over', animate, index); + groupIndex ++; + + labelColor = Color.fromString(label.attr.color || label.attr.fill).getHSL(); + label.setAttributes({ + fill: String(Color.fromHSL.apply({}, labelColor)) + }, true); + } + + if (bottomText) { + label = group.getAt(groupIndex); + if (!label) { + label = me.onCreateLabel(storeItem, item, i, 'under'); + } + label.setAttributes({text: bottomText}); + me.onPlaceLabel(label, storeItem, item, i, 'under', animate, index); + groupIndex ++; + + labelColor = Color.fromString(label.attr.color || label.attr.fill).getHSL(); + label.setAttributes({ + fill: String(Color.fromHSL.apply({}, labelColor)) + }, true); + } + } + } + count++; + index++; + } + } + groupLength = group.length; + + while(groupLength > groupIndex){ + hides.push(groupIndex); + groupIndex++; + } + } + me.hideLabels(hides); + }, + + hideLabels: function(hides){ + var labelsGroup = this.labelsGroup, + hlen = !!hides && hides.length; + + if (!labelsGroup) { + return; + } + + if (hlen === false) { + hlen = labelsGroup.getCount(); + while (hlen--) { + labelsGroup.getAt(hlen).hide(true); + } + } else { + while(hlen--) { + labelsGroup.getAt(hides[hlen]).hide(true); + } + } + } +}); + + +Ext.define('Ext.chart.TipSurface', { + + + + extend: Ext.draw.Component , + + + + spriteArray: false, + renderFirst: true, + + constructor: function(config) { + this.callParent([config]); + if (config.sprites) { + this.spriteArray = [].concat(config.sprites); + delete config.sprites; + } + }, + + onRender: function() { + var me = this, + i = 0, + l = 0, + sp, + sprites; + this.callParent(arguments); + sprites = me.spriteArray; + if (me.renderFirst && sprites) { + me.renderFirst = false; + for (l = sprites.length; i < l; i++) { + sp = me.surface.add(sprites[i]); + sp.setAttributes({ + hidden: false + }, + true); + } + } + } +}); + + +Ext.define('Ext.chart.Tip', { + + + + + + + + constructor: function(config) { + var me = this, + surface, + sprites, + tipSurface; + if (config.tips) { + me.tipTimeout = null; + me.tipConfig = Ext.apply({}, config.tips, { + renderer: Ext.emptyFn, + constrainPosition: true, + autoHide: true + }); + me.tooltip = new Ext.tip.ToolTip(me.tipConfig); + me.chart.surface.on('mousemove', me.tooltip.onMouseMove, me.tooltip); + me.chart.surface.on('mouseleave', function() { + me.hideTip(); + }); + if (me.tipConfig.surface) { + + surface = me.tipConfig.surface; + sprites = surface.sprites; + tipSurface = new Ext.chart.TipSurface({ + id: 'tipSurfaceComponent', + sprites: sprites + }); + if (surface.width && surface.height) { + tipSurface.setSize(surface.width, surface.height); + } + me.tooltip.add(tipSurface); + me.spriteTip = tipSurface; + } + } + }, + + showTip: function(item) { + var me = this, + tooltip, + spriteTip, + tipConfig, + trackMouse, + sprite, + surface, + surfaceExt, + pos, + x, + y; + if (!me.tooltip) { + return; + } + clearTimeout(me.tipTimeout); + tooltip = me.tooltip; + spriteTip = me.spriteTip; + tipConfig = me.tipConfig; + trackMouse = tooltip.trackMouse; + if (!trackMouse) { + tooltip.trackMouse = true; + sprite = item.sprite; + surface = sprite.surface; + surfaceExt = Ext.get(surface.getId()); + if (surfaceExt) { + pos = surfaceExt.getXY(); + x = pos[0] + (sprite.attr.x || 0) + (sprite.attr.translation && sprite.attr.translation.x || 0); + y = pos[1] + (sprite.attr.y || 0) + (sprite.attr.translation && sprite.attr.translation.y || 0); + tooltip.targetXY = [x, y]; + } + } + if (spriteTip) { + tipConfig.renderer.call(tooltip, item.storeItem, item, spriteTip.surface); + } else { + tipConfig.renderer.call(tooltip, item.storeItem, item); + } + tooltip.show(); + tooltip.trackMouse = trackMouse; + }, + + hideTip: function(item) { + var tooltip = this.tooltip; + if (!tooltip) { + return; + } + clearTimeout(this.tipTimeout); + this.tipTimeout = setTimeout(function() { + tooltip.hide(); + }, 0); + } +}); + + +Ext.define('Ext.chart.axis.Abstract', { + + + + + + + + + + + + + constructor: function(config) { + config = config || {}; + + var me = this, + pos = config.position || 'left'; + + pos = pos.charAt(0).toUpperCase() + pos.substring(1); + + config.label = Ext.apply(config['axisLabel' + pos + 'Style'] || {}, config.label || {}); + config.axisTitleStyle = Ext.apply(config['axisTitle' + pos + 'Style'] || {}, config.labelTitle || {}); + Ext.apply(me, config); + me.fields = Ext.Array.from(me.fields); + this.callParent(); + me.labels = []; + me.getId(); + me.labelGroup = me.chart.surface.getGroup(me.axisId + "-labels"); + }, + + alignment: null, + grid: false, + steps: 10, + x: 0, + y: 0, + minValue: 0, + maxValue: 0, + + getId: function() { + return this.axisId || (this.axisId = Ext.id(null, 'ext-axis-')); + }, + + + processView: Ext.emptyFn, + + drawAxis: Ext.emptyFn, + addDisplayAndLabels: Ext.emptyFn +}); + + +Ext.define('Ext.chart.axis.Axis', { + + + + extend: Ext.chart.axis.Abstract , + + alternateClassName: 'Ext.chart.Axis', + + + + + + + + + + + + + + + forceMinMax: false, + + + dashSize: 3, + + + position: 'bottom', + + + skipFirst: false, + + + length: 0, + + + width: 0, + + + adjustEnd: true, + + majorTickSteps: false, + + nullGutters: { lower: 0, upper: 0, verticalAxis: undefined }, + + + applyData: Ext.emptyFn, + + getRange: function () { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + data = store.data.items, + series = chart.series.items, + position = me.position, + axes, + seriesClasses = Ext.chart.series, + aggregations = [], + min = Infinity, max = -Infinity, + vertical = me.position === 'left' || me.position === 'right' || me.position === 'radial', + i, ln, ln2, j, k, dataLength = data.length, aggregates, + countedFields = {}, + allFields = {}, + excludable = true, + fields, fieldMap, record, field, value; + + fields = me.fields; + for (j = 0, ln = fields.length; j < ln; j++) { + allFields[fields[j]] = true; + } + + for (i = 0, ln = series.length; i < ln; i++) { + if (series[i].seriesIsHidden) { + continue; + } + if (!series[i].getAxesForXAndYFields) { + continue; + } + axes = series[i].getAxesForXAndYFields(); + if (axes.xAxis && axes.xAxis !== position && axes.yAxis && axes.yAxis !== position) { + + continue; + } + + if (seriesClasses.Bar && series[i] instanceof seriesClasses.Bar && !series[i].column) { + + fields = vertical ? Ext.Array.from(series[i].xField) : Ext.Array.from(series[i].yField); + } else { + fields = vertical ? Ext.Array.from(series[i].yField) : Ext.Array.from(series[i].xField); + } + + if (me.fields.length) { + for (j = 0, ln2 = fields.length; j < ln2; j++) { + if (allFields[fields[j]]) { + break; + } + } + if (j == ln2) { + + continue; + } + } + + if (aggregates = series[i].stacked) { + + if (seriesClasses.Bar && series[i] instanceof seriesClasses.Bar) { + if (series[i].column != vertical) { + aggregates = false; + excludable = false; + } + } + + else if (!vertical) { + aggregates = false; + excludable = false; + } + } + + + if (aggregates) { + fieldMap = {}; + for (j = 0; j < fields.length; j++) { + if (excludable && series[i].__excludes && series[i].__excludes[j]) { + continue; + } + if (!allFields[fields[j]]) { + Ext.Logger.warn('Field `' + fields[j] + '` is not included in the ' + position + ' axis config.'); + } + allFields[fields[j]] = fieldMap[fields[j]] = true; + } + aggregations.push({ + fields: fieldMap, + positiveValue: 0, + negativeValue: 0 + }); + } else { + + if (!fields || fields.length == 0) { + fields = me.fields; + } + for (j = 0; j < fields.length; j++) { + if (excludable && series[i].__excludes && series[i].__excludes[j]) { + continue; + } + allFields[fields[j]] = countedFields[fields[j]] = true; + } + } + } + + for (i = 0; i < dataLength; i++) { + record = data[i]; + for (k = 0; k < aggregations.length; k++) { + aggregations[k].positiveValue = 0; + aggregations[k].negativeValue = 0; + } + for (field in allFields) { + value = record.get(field); + if (me.type == 'Time' && typeof value == "string") { + value = Date.parse(value); + } + if (isNaN(value)) { + continue; + } + if (value === undefined) { + value = 0; + } + if (countedFields[field]) { + if (min > value) { + min = value; + } + if (max < value) { + max = value; + } + } + for (k = 0; k < aggregations.length; k++) { + if (aggregations[k].fields[field]) { + + if (value >= 0) { + aggregations[k].positiveValue += value; + if (max < aggregations[k].positiveValue) { + max = aggregations[k].positiveValue; + } + + if (min > 0) { + min = 0; + } + } else { + aggregations[k].negativeValue += value; + if (min > aggregations[k].negativeValue) { + min = aggregations[k].negativeValue; + } + + if (max < 0) { + max = 0; + } + } + } + } + } + } + + if (!isFinite(max)) { + max = me.prevMax || 0; + } + if (!isFinite(min)) { + min = me.prevMin || 0; + } + + if (typeof min === 'number') { + min = Ext.Number.correctFloat(min); + } + + if (typeof max === 'number') { + max = Ext.Number.correctFloat(max); + } + + + if (min != max && (max != Math.floor(max) || min != Math.floor(min))) { + min = Math.floor(min); + max = Math.floor(max) + 1; + } + + if (!isNaN(me.minimum)) { + min = me.minimum; + } + + if (!isNaN(me.maximum)) { + max = me.maximum; + } + + if (min >= max) { + + min = Math.floor(min); + max = min + 1; + } + + return {min: min, max: max}; + }, + + + calcEnds: function () { + var me = this, + range = me.getRange(), + min = range.min, + max = range.max, + steps, prettyNumbers, out, changedRange; + + steps = (Ext.isNumber(me.majorTickSteps) ? me.majorTickSteps + 1 : me.steps); + prettyNumbers = !(Ext.isNumber(me.maximum) && Ext.isNumber(me.minimum) && Ext.isNumber(me.majorTickSteps) && me.majorTickSteps > 0); + + out = Ext.draw.Draw.snapEnds(min, max, steps, prettyNumbers); + + if (Ext.isNumber(me.maximum)) { + out.to = me.maximum; + changedRange = true; + } + if (Ext.isNumber(me.minimum)) { + out.from = me.minimum; + changedRange = true; + } + if (me.adjustMaximumByMajorUnit) { + out.to = Math.ceil(out.to / out.step) * out.step; + changedRange = true; + } + if (me.adjustMinimumByMajorUnit) { + out.from = Math.floor(out.from / out.step) * out.step; + changedRange = true; + } + + if (changedRange) { + out.steps = Math.ceil((out.to - out.from) / out.step); + } + + me.prevMin = (min == max ? 0 : min); + me.prevMax = max; + return out; + }, + + + + drawAxis: function (init) { + var me = this, + i, + x = me.x, + y = me.y, + dashSize = me.dashSize, + length = me.length, + position = me.position, + verticalAxis = (position == 'left' || position == 'right'), + inflections = [], + calcLabels = (me.isNumericAxis), + stepCalcs = me.applyData(), + step = stepCalcs.step, + steps = stepCalcs.steps, + stepsArray = Ext.isArray(steps), + from = stepCalcs.from, + to = stepCalcs.to, + + axisRange = (to - from) || 1, + trueLength, + currentX, + currentY, + path, + subDashesX = me.minorTickSteps || 0, + subDashesY = me.minorTickSteps || 0, + dashesX = Math.max(subDashesX + 1, 0), + dashesY = Math.max(subDashesY + 1, 0), + dashDirection = (position == 'left' || position == 'top' ? -1 : 1), + dashLength = dashSize * dashDirection, + series = me.chart.series.items, + firstSeries = series[0], + gutters = firstSeries ? firstSeries.nullGutters : me.nullGutters, + padding, + subDashes, + subDashValue, + delta = 0, + stepCount = 0, + tick, axes, ln, val, begin, end; + + me.from = from; + me.to = to; + + + if (me.hidden || (from > to)) { + return; + } + + + if ((stepsArray && (steps.length == 0)) || (!stepsArray && isNaN(step))) { + return; + } + + if (stepsArray) { + + + steps = Ext.Array.filter(steps, function(elem, index, array) { + return (+elem > +me.from && +elem < +me.to); + }, this); + + + steps = Ext.Array.union([me.from], steps, [me.to]); + } + else { + + steps = new Array; + for (val = +me.from; val < +me.to; val += step) { + steps.push(val); + } + steps.push(+me.to); + } + stepCount = steps.length; + + + + for (i = 0, ln = series.length; i < ln; i++) { + if (series[i].seriesIsHidden) { + continue; + } + if (!series[i].getAxesForXAndYFields) { + continue; + } + axes = series[i].getAxesForXAndYFields(); + if (!axes.xAxis || !axes.yAxis || (axes.xAxis === position) || (axes.yAxis === position)) { + gutters = series[i].getGutters(); + if ((gutters.verticalAxis !== undefined) && (gutters.verticalAxis != verticalAxis)) { + + + + + padding = series[i].getPadding(); + if (verticalAxis) { + gutters = { lower: padding.bottom, upper: padding.top, verticalAxis: true }; + } else { + gutters = { lower: padding.left, upper: padding.right, verticalAxis: false }; + } + } + break; + } + } + + + + if (calcLabels) { + me.labels = []; + } + + if (gutters) { + if (verticalAxis) { + currentX = Math.floor(x); + path = ["M", currentX + 0.5, y, "l", 0, -length]; + trueLength = length - (gutters.lower + gutters.upper); + + for (tick = 0; tick < stepCount; tick++) { + currentY = y - gutters.lower - (steps[tick] - steps[0]) * trueLength / axisRange; + path.push("M", currentX, Math.floor(currentY) + 0.5, "l", dashLength * 2, 0); + + inflections.push([ currentX, Math.floor(currentY) ]); + + if (calcLabels) { + me.labels.push(steps[tick]); + } + } + } else { + currentY = Math.floor(y); + path = ["M", x, currentY + 0.5, "l", length, 0]; + trueLength = length - (gutters.lower + gutters.upper); + + for (tick = 0; tick < stepCount; tick++) { + currentX = x + gutters.lower + (steps[tick] - steps[0]) * trueLength / axisRange; + path.push("M", Math.floor(currentX) + 0.5, currentY, "l", 0, dashLength * 2 + 1); + + inflections.push([ Math.floor(currentX), currentY ]); + + if (calcLabels) { + me.labels.push(steps[tick]); + } + } + } + } + + + + + + + + + subDashes = (verticalAxis ? subDashesY : subDashesX); + if (Ext.isArray(subDashes)) { + if (subDashes.length == 2) { + subDashValue = +Ext.Date.add(new Date(), subDashes[0], subDashes[1]) - Date.now(); + } else { + subDashValue = subDashes[0]; + } + } + else { + if (Ext.isNumber(subDashes) && subDashes > 0) { + subDashValue = step / (subDashes + 1); + } + } + + if (gutters && subDashValue) { + for (tick = 0; tick < stepCount - 1; tick++) { + begin = +steps[tick]; + end = +steps[tick+1]; + if (verticalAxis) { + for (value = begin + subDashValue; value < end; value += subDashValue) { + currentY = y - gutters.lower - (value - steps[0]) * trueLength / axisRange; + path.push("M", currentX, Math.floor(currentY) + 0.5, "l", dashLength, 0); + } + } + else { + for (value = begin + subDashValue; value < end; value += subDashValue) { + currentX = x + gutters.upper + (value - steps[0]) * trueLength / axisRange; + path.push("M", Math.floor(currentX) + 0.5, currentY, "l", 0, dashLength + 1); + } + } + } + } + + + + + if (!me.axis) { + me.axis = me.chart.surface.add(Ext.apply({ + type: 'path', + path: path + }, me.axisStyle)); + } + me.axis.setAttributes({ + path: path + }, true); + me.inflections = inflections; + if (!init && me.grid) { + me.drawGrid(); + } + me.axisBBox = me.axis.getBBox(); + me.drawLabel(); + }, + + + drawGrid: function () { + var me = this, + surface = me.chart.surface, + grid = me.grid, + odd = grid.odd, + even = grid.even, + inflections = me.inflections, + ln = inflections.length - ((odd || even) ? 0 : 1), + position = me.position, + maxGutters = me.chart.maxGutters, + width = me.width - 2, + point, prevPoint, + i = 1, + path = [], styles, lineWidth, dlineWidth, + oddPath = [], evenPath = []; + + if (((maxGutters.bottom !== 0 || maxGutters.top !== 0) && (position == 'left' || position == 'right')) || + ((maxGutters.left !== 0 || maxGutters.right !== 0) && (position == 'top' || position == 'bottom'))) { + i = 0; + ln++; + } + for (; i < ln; i++) { + point = inflections[i]; + prevPoint = inflections[i - 1]; + if (odd || even) { + path = (i % 2) ? oddPath : evenPath; + styles = ((i % 2) ? odd : even) || {}; + lineWidth = (styles.lineWidth || styles['stroke-width'] || 0) / 2; + dlineWidth = 2 * lineWidth; + if (position == 'left') { + path.push("M", prevPoint[0] + 1 + lineWidth, prevPoint[1] + 0.5 - lineWidth, + "L", prevPoint[0] + 1 + width - lineWidth, prevPoint[1] + 0.5 - lineWidth, + "L", point[0] + 1 + width - lineWidth, point[1] + 0.5 + lineWidth, + "L", point[0] + 1 + lineWidth, point[1] + 0.5 + lineWidth, "Z"); + } + else if (position == 'right') { + path.push("M", prevPoint[0] - lineWidth, prevPoint[1] + 0.5 - lineWidth, + "L", prevPoint[0] - width + lineWidth, prevPoint[1] + 0.5 - lineWidth, + "L", point[0] - width + lineWidth, point[1] + 0.5 + lineWidth, + "L", point[0] - lineWidth, point[1] + 0.5 + lineWidth, "Z"); + } + else if (position == 'top') { + path.push("M", prevPoint[0] + 0.5 + lineWidth, prevPoint[1] + 1 + lineWidth, + "L", prevPoint[0] + 0.5 + lineWidth, prevPoint[1] + 1 + width - lineWidth, + "L", point[0] + 0.5 - lineWidth, point[1] + 1 + width - lineWidth, + "L", point[0] + 0.5 - lineWidth, point[1] + 1 + lineWidth, "Z"); + } + else { + path.push("M", prevPoint[0] + 0.5 + lineWidth, prevPoint[1] - lineWidth, + "L", prevPoint[0] + 0.5 + lineWidth, prevPoint[1] - width + lineWidth, + "L", point[0] + 0.5 - lineWidth, point[1] - width + lineWidth, + "L", point[0] + 0.5 - lineWidth, point[1] - lineWidth, "Z"); + } + } else { + if (position == 'left') { + path = path.concat(["M", point[0] + 0.5, point[1] + 0.5, "l", width, 0]); + } + else if (position == 'right') { + path = path.concat(["M", point[0] - 0.5, point[1] + 0.5, "l", -width, 0]); + } + else if (position == 'top') { + path = path.concat(["M", point[0] + 0.5, point[1] + 0.5, "l", 0, width]); + } + else { + path = path.concat(["M", point[0] + 0.5, point[1] - 0.5, "l", 0, -width]); + } + } + } + if (odd || even) { + if (oddPath.length) { + if (!me.gridOdd && oddPath.length) { + me.gridOdd = surface.add({ + type: 'path', + path: oddPath + }); + } + me.gridOdd.setAttributes(Ext.apply({ + path: oddPath, + hidden: false + }, odd || {}), true); + } + if (evenPath.length) { + if (!me.gridEven) { + me.gridEven = surface.add({ + type: 'path', + path: evenPath + }); + } + me.gridEven.setAttributes(Ext.apply({ + path: evenPath, + hidden: false + }, even || {}), true); + } + } + else { + if (path.length) { + if (!me.gridLines) { + me.gridLines = me.chart.surface.add({ + type: 'path', + path: path, + "stroke-width": me.lineWidth || 1, + stroke: me.gridColor || '#ccc' + }); + } + me.gridLines.setAttributes({ + hidden: false, + path: path + }, true); + } + else if (me.gridLines) { + me.gridLines.hide(true); + } + } + }, + + + getOrCreateLabel: function (i, text) { + var me = this, + labelGroup = me.labelGroup, + textLabel = labelGroup.getAt(i), + surface = me.chart.surface; + if (textLabel) { + if (text != textLabel.attr.text) { + textLabel.setAttributes(Ext.apply({ + text: text + }, me.label), true); + textLabel._bbox = textLabel.getBBox(); + } + } + else { + textLabel = surface.add(Ext.apply({ + group: labelGroup, + type: 'text', + x: 0, + y: 0, + text: text + }, me.label)); + surface.renderItem(textLabel); + textLabel._bbox = textLabel.getBBox(); + } + + if (me.label.rotation) { + textLabel.setAttributes({ + rotation: { + degrees: 0 + } + }, true); + textLabel._ubbox = textLabel.getBBox(); + textLabel.setAttributes(me.label, true); + } else { + textLabel._ubbox = textLabel._bbox; + } + return textLabel; + }, + + rect2pointArray: function (sprite) { + var surface = this.chart.surface, + rect = surface.getBBox(sprite, true), + p1 = [rect.x, rect.y], + p1p = p1.slice(), + p2 = [rect.x + rect.width, rect.y], + p2p = p2.slice(), + p3 = [rect.x + rect.width, rect.y + rect.height], + p3p = p3.slice(), + p4 = [rect.x, rect.y + rect.height], + p4p = p4.slice(), + matrix = sprite.matrix; + + p1[0] = matrix.x.apply(matrix, p1p); + p1[1] = matrix.y.apply(matrix, p1p); + + p2[0] = matrix.x.apply(matrix, p2p); + p2[1] = matrix.y.apply(matrix, p2p); + + p3[0] = matrix.x.apply(matrix, p3p); + p3[1] = matrix.y.apply(matrix, p3p); + + p4[0] = matrix.x.apply(matrix, p4p); + p4[1] = matrix.y.apply(matrix, p4p); + return [p1, p2, p3, p4]; + }, + + intersect: function (l1, l2) { + var r1 = this.rect2pointArray(l1), + r2 = this.rect2pointArray(l2); + return !!Ext.draw.Draw.intersect(r1, r2).length; + }, + + drawHorizontalLabels: function () { + var me = this, + labelConf = me.label, + floor = Math.floor, + max = Math.max, + axes = me.chart.axes, + insetPadding = me.chart.insetPadding, + gutters = me.chart.maxGutters, + position = me.position, + inflections = me.inflections, + ln = inflections.length, + labels = me.labels, + maxHeight = 0, + ratio, + bbox, point, prevLabel, prevLabelId, + adjustEnd = me.adjustEnd, + hasLeft = axes.findIndex('position', 'left') != -1, + hasRight = axes.findIndex('position', 'right') != -1, + textLabel, text, + last, x, y, i, firstLabel; + + last = ln - 1; + + point = inflections[0]; + firstLabel = me.getOrCreateLabel(0, me.label.renderer(labels[0])); + ratio = Math.floor(Math.abs(Math.sin(labelConf.rotate && (labelConf.rotate.degrees * Math.PI / 180) || 0))); + + for (i = 0; i < ln; i++) { + point = inflections[i]; + text = me.label.renderer(labels[i]); + textLabel = me.getOrCreateLabel(i, text); + bbox = textLabel._bbox; + maxHeight = max(maxHeight, bbox.height + me.dashSize + me.label.padding); + x = floor(point[0] - (ratio ? bbox.height : bbox.width) / 2); + if (adjustEnd && gutters.left == 0 && gutters.right == 0) { + if (i == 0 && !hasLeft) { + x = point[0]; + } + else if (i == last && !hasRight) { + x = Math.min(x, point[0] - bbox.width + insetPadding); + } + } + if (position == 'top') { + y = point[1] - (me.dashSize * 2) - me.label.padding - (bbox.height / 2); + } + else { + y = point[1] + (me.dashSize * 2) + me.label.padding + (bbox.height / 2); + } + + textLabel.setAttributes({ + hidden: false, + x: x, + y: y + }, true); + + + if (i != 0 && (me.intersect(textLabel, prevLabel) + || me.intersect(textLabel, firstLabel))) { + if (i === last && prevLabelId !== 0) { + prevLabel.hide(true); + } else { + textLabel.hide(true); + continue; + } + } + + prevLabel = textLabel; + prevLabelId = i; + } + + return maxHeight; + }, + + drawVerticalLabels: function () { + var me = this, + inflections = me.inflections, + position = me.position, + ln = inflections.length, + chart = me.chart, + insetPadding = chart.insetPadding, + labels = me.labels, + maxWidth = 0, + max = Math.max, + floor = Math.floor, + ceil = Math.ceil, + axes = me.chart.axes, + gutters = me.chart.maxGutters, + bbox, point, prevLabel, prevLabelId, + hasTop = axes.findIndex('position', 'top') != -1, + hasBottom = axes.findIndex('position', 'bottom') != -1, + adjustEnd = me.adjustEnd, + textLabel, text, + last = ln - 1, x, y, i; + + for (i = 0; i < ln; i++) { + point = inflections[i]; + text = me.label.renderer(labels[i]); + textLabel = me.getOrCreateLabel(i, text); + bbox = textLabel._bbox; + + maxWidth = max(maxWidth, bbox.width + me.dashSize + me.label.padding); + y = point[1]; + if (adjustEnd && (gutters.bottom + gutters.top) < bbox.height / 2) { + if (i == last && !hasTop) { + y = Math.max(y, me.y - me.length + ceil(bbox.height / 2) - insetPadding); + } + else if (i == 0 && !hasBottom) { + y = me.y + gutters.bottom - floor(bbox.height / 2); + } + } + if (position == 'left') { + x = point[0] - bbox.width - me.dashSize - me.label.padding - 2; + } + else { + x = point[0] + me.dashSize + me.label.padding + 2; + } + textLabel.setAttributes(Ext.apply({ + hidden: false, + x: x, + y: y + }, me.label), true); + + if (i != 0 && me.intersect(textLabel, prevLabel)) { + if (i === last && prevLabelId !== 0) { + prevLabel.hide(true); + } else { + textLabel.hide(true); + continue; + } + } + prevLabel = textLabel; + prevLabelId = i; + } + + return maxWidth; + }, + + + drawLabel: function () { + var me = this, + position = me.position, + labelGroup = me.labelGroup, + inflections = me.inflections, + maxWidth = 0, + maxHeight = 0, + ln, i; + + if (position == 'left' || position == 'right') { + maxWidth = me.drawVerticalLabels(); + } else { + maxHeight = me.drawHorizontalLabels(); + } + + + ln = labelGroup.getCount(); + i = inflections.length; + for (; i < ln; i++) { + labelGroup.getAt(i).hide(true); + } + + me.bbox = {}; + Ext.apply(me.bbox, me.axisBBox); + me.bbox.height = maxHeight; + me.bbox.width = maxWidth; + if (Ext.isString(me.title)) { + me.drawTitle(maxWidth, maxHeight); + } + }, + + + setTitle: function (title) { + this.title = title; + this.drawLabel(); + }, + + + drawTitle: function (maxWidth, maxHeight) { + var me = this, + position = me.position, + surface = me.chart.surface, + displaySprite = me.displaySprite, + title = me.title, + rotate = (position == 'left' || position == 'right'), + x = me.x, + y = me.y, + base, bbox, pad; + + if (displaySprite) { + displaySprite.setAttributes({text: title}, true); + } else { + base = { + type: 'text', + x: 0, + y: 0, + text: title + }; + displaySprite = me.displaySprite = surface.add(Ext.apply(base, me.axisTitleStyle, me.labelTitle)); + surface.renderItem(displaySprite); + } + bbox = displaySprite.getBBox(); + pad = me.dashSize + me.label.padding; + + if (rotate) { + y -= ((me.length / 2) - (bbox.height / 2)); + if (position == 'left') { + x -= (maxWidth + pad + (bbox.width / 2)); + } + else { + x += (maxWidth + pad + bbox.width - (bbox.width / 2)); + } + me.bbox.width += bbox.width + 10; + } + else { + x += (me.length / 2) - (bbox.width * 0.5); + if (position == 'top') { + y -= (maxHeight + pad + (bbox.height * 0.3)); + } + else { + y += (maxHeight + pad + (bbox.height * 0.8)); + } + me.bbox.height += bbox.height + 10; + } + displaySprite.setAttributes({ + translate: { + x: x, + y: y + } + }, true); + } +}); + + +Ext.define('Ext.chart.axis.Category', { + + + + extend: Ext.chart.axis.Axis , + + alternateClassName: 'Ext.chart.CategoryAxis', + + alias: 'axis.category', + + + + + categoryNames: null, + + + calculateCategoryCount: false, + + + doConstrain: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + items = store.data.items, + series = chart.series.items, + seriesLength = series.length, + data = [], i + + for (i = 0; i < seriesLength; i++) { + if (series[i].type === 'bar' && series[i].stacked) { + + return; + } + } + + for (i = me.minimum; i < me.maximum; i++) { + data.push(items[i]); + } + + chart.setSubStore(new Ext.data.Store({ + model: store.model, + data: data + })); + }, + + + setLabels: function() { + var store = this.chart.getChartStore(), + data = store.data.items, + d, dLen, record, + fields = this.fields, + ln = fields.length, + labels, + name, + i; + + labels = this.labels = []; + for (d = 0, dLen = data.length; d < dLen; d++) { + record = data[d]; + for (i = 0; i < ln; i++) { + name = record.get(fields[i]); + labels.push(name); + } + } + }, + + + applyData: function() { + this.callParent(); + this.setLabels(); + var count = this.chart.getChartStore().getCount(); + return { + from: 0, + to: count - 1, + power: 1, + step: 1, + steps: count - 1 + }; + } +}); + + +Ext.define('Ext.chart.axis.Gauge', { + + + + extend: Ext.chart.axis.Abstract , + + + + + + + + + + + + + + position: 'gauge', + + alias: 'axis.gauge', + + drawAxis: function(init) { + var chart = this.chart, + surface = chart.surface, + bbox = chart.chartBBox, + centerX = bbox.x + (bbox.width / 2), + centerY = bbox.y + bbox.height, + margin = this.margin || 10, + rho = Math.min(bbox.width, 2 * bbox.height) /2 + margin, + sprites = [], sprite, + steps = this.steps, + i, pi = Math.PI, + cos = Math.cos, + sin = Math.sin; + + if (this.sprites && !chart.resizing) { + this.drawLabel(); + return; + } + + if (this.margin >= 0) { + if (!this.sprites) { + + for (i = 0; i <= steps; i++) { + sprite = surface.add({ + type: 'path', + path: ['M', centerX + (rho - margin) * cos(i / steps * pi - pi), + centerY + (rho - margin) * sin(i / steps * pi - pi), + 'L', centerX + rho * cos(i / steps * pi - pi), + centerY + rho * sin(i / steps * pi - pi), 'Z'], + stroke: '#ccc' + }); + sprite.setAttributes({ + hidden: false + }, true); + sprites.push(sprite); + } + } else { + sprites = this.sprites; + + for (i = 0; i <= steps; i++) { + sprites[i].setAttributes({ + path: ['M', centerX + (rho - margin) * cos(i / steps * pi - pi), + centerY + (rho - margin) * sin(i / steps * pi - pi), + 'L', centerX + rho * cos(i / steps * pi - pi), + centerY + rho * sin(i / steps * pi - pi), 'Z'], + stroke: '#ccc' + }, true); + } + } + } + this.sprites = sprites; + this.drawLabel(); + if (this.title) { + this.drawTitle(); + } + }, + + drawTitle: function() { + var me = this, + chart = me.chart, + surface = chart.surface, + bbox = chart.chartBBox, + labelSprite = me.titleSprite, + labelBBox; + + if (!labelSprite) { + me.titleSprite = labelSprite = surface.add(Ext.apply({ + type: 'text', + zIndex: 2 + }, me.axisTitleStyle, me.labelTitle)); + } + labelSprite.setAttributes(Ext.apply({ + text: me.title + }, me.label || {}), true); + labelBBox = labelSprite.getBBox(); + labelSprite.setAttributes({ + x: bbox.x + (bbox.width / 2) - (labelBBox.width / 2), + y: bbox.y + bbox.height - (labelBBox.height / 2) - 4 + }, true); + }, + + + setTitle: function(title) { + this.title = title; + this.drawTitle(); + }, + + drawLabel: function() { + var chart = this.chart, + surface = chart.surface, + bbox = chart.chartBBox, + centerX = bbox.x + (bbox.width / 2), + centerY = bbox.y + bbox.height, + margin = this.margin || 10, + rho = Math.min(bbox.width, 2 * bbox.height) /2 + 2 * margin, + round = Math.round, + labelArray = [], label, + maxValue = this.maximum || 0, + minValue = this.minimum || 0, + steps = this.steps, i = 0, + adjY, + pi = Math.PI, + cos = Math.cos, + sin = Math.sin, + labelConf = this.label, + renderer = labelConf.renderer || Ext.identityFn; + + if (!this.labelArray) { + + for (i = 0; i <= steps; i++) { + + adjY = (i === 0 || i === steps) ? 7 : 0; + label = surface.add({ + type: 'text', + text: renderer(round(minValue + i / steps * (maxValue - minValue))), + x: centerX + rho * cos(i / steps * pi - pi), + y: centerY + rho * sin(i / steps * pi - pi) - adjY, + 'text-anchor': 'middle', + 'stroke-width': 0.2, + zIndex: 10, + stroke: '#333' + }); + label.setAttributes({ + hidden: false + }, true); + labelArray.push(label); + } + } + else { + labelArray = this.labelArray; + + for (i = 0; i <= steps; i++) { + + adjY = (i === 0 || i === steps) ? 7 : 0; + labelArray[i].setAttributes({ + text: renderer(round(minValue + i / steps * (maxValue - minValue))), + x: centerX + rho * cos(i / steps * pi - pi), + y: centerY + rho * sin(i / steps * pi - pi) - adjY + }, true); + } + } + this.labelArray = labelArray; + } +}); + + +Ext.define('Ext.chart.axis.Numeric', { + + + + extend: Ext.chart.axis.Axis , + + alternateClassName: 'Ext.chart.NumericAxis', + + + + type: 'Numeric', + + + isNumericAxis: true, + + alias: 'axis.numeric', + + + + constructor: function(config) { + var me = this, + hasLabel = !!(config.label && config.label.renderer), + label; + + me.callParent([config]); + label = me.label; + + if (config.constrain == null) { + me.constrain = (config.minimum != null && config.maximum != null); + } + + if (!hasLabel) { + label.renderer = function(v) { + return me.roundToDecimal(v, me.decimals); + }; + } + }, + + roundToDecimal: function(v, dec) { + var val = Math.pow(10, dec || 0); + return Math.round(v * val) / val; + }, + + + minimum: NaN, + + + maximum: NaN, + + + constrain: true, + + + decimals: 2, + + + scale: "linear", + + + doConstrain: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + items = store.data.items, + d, dLen, record, + series = chart.series.items, + fields = me.fields, + ln = fields.length, + range = me.calcEnds(), + min = range.from, max = range.to, i, l, + useAcum = false, + value, data = [], + addRecord; + + for (d = 0, dLen = items.length; d < dLen; d++) { + addRecord = true; + record = items[d]; + for (i = 0; i < ln; i++) { + value = record.get(fields[i]); + if (me.type == 'Time' && typeof value == "string") { + value = Date.parse(value); + } + if (+value < +min) { + addRecord = false; + break; + } + if (+value > +max) { + addRecord = false; + break; + } + } + if (addRecord) { + data.push(record); + } + } + + chart.setSubStore(new Ext.data.Store({ + model: store.model, + data: data + })); + }, + + position: 'left', + + + adjustMaximumByMajorUnit: false, + + + adjustMinimumByMajorUnit: false, + + + processView: function() { + var me = this, + chart = me.chart, + series = chart.series.items, + i, l; + + for (i = 0, l = series.length; i < l; i++) { + if (series[i].stacked) { + + delete me.minimum; + delete me.maximum; + me.constrain = false; + break; + } + } + + if (me.constrain) { + me.doConstrain(); + } + }, + + + applyData: function() { + this.callParent(); + return this.calcEnds(); + } +}); + + +Ext.define('Ext.chart.axis.Radial', { + + + + extend: Ext.chart.axis.Numeric , + + + + position: 'radial', + + alias: 'axis.radial', + + + + + + drawAxis: function(init) { + var chart = this.chart, + surface = chart.surface, + bbox = chart.chartBBox, + store = chart.getChartStore(), + l = store.getCount(), + centerX = bbox.x + (bbox.width / 2), + centerY = bbox.y + (bbox.height / 2), + rho = Math.min(bbox.width, bbox.height) /2, + sprites = [], sprite, + steps = this.steps, + i, j, pi2 = Math.PI * 2, + cos = Math.cos, sin = Math.sin; + + if (this.sprites && !chart.resizing) { + this.drawLabel(); + return; + } + + if (!this.sprites) { + + for (i = 1; i <= steps; i++) { + sprite = surface.add({ + type: 'circle', + x: centerX, + y: centerY, + radius: Math.max(rho * i / steps, 0), + stroke: '#ccc' + }); + sprite.setAttributes({ + hidden: false + }, true); + sprites.push(sprite); + } + + for (i = 0; i < l; i++) { + sprite = surface.add({ + type: 'path', + path: ['M', centerX, centerY, 'L', centerX + rho * cos(i / l * pi2), centerY + rho * sin(i / l * pi2), 'Z'], + stroke: '#ccc' + }); + sprite.setAttributes({ + hidden: false + }, true); + sprites.push(sprite); + } + } else { + sprites = this.sprites; + + for (i = 0; i < steps; i++) { + sprites[i].setAttributes({ + x: centerX, + y: centerY, + radius: Math.max(rho * (i + 1) / steps, 0), + stroke: '#ccc' + }, true); + } + + for (j = 0; j < l; j++) { + sprites[i + j].setAttributes({ + path: ['M', centerX, centerY, 'L', centerX + rho * cos(j / l * pi2), centerY + rho * sin(j / l * pi2), 'Z'], + stroke: '#ccc' + }, true); + } + } + this.sprites = sprites; + + this.drawLabel(); + }, + + drawLabel: function() { + var chart = this.chart, + seriesItems = chart.series.items, + series, + surface = chart.surface, + bbox = chart.chartBBox, + store = chart.getChartStore(), + data = store.data.items, + ln, record, + centerX = bbox.x + (bbox.width / 2), + centerY = bbox.y + (bbox.height / 2), + rho = Math.min(bbox.width, bbox.height) /2, + max = Math.max, round = Math.round, + labelArray = [], label, + fields = [], nfields, + categories = [], xField, + aggregate = !this.maximum, + maxValue = this.maximum || 0, + steps = this.steps, i = 0, j, dx, dy, + pi2 = Math.PI * 2, + cos = Math.cos, sin = Math.sin, + display = this.label.display, + draw = display !== 'none', + margin = 10; + + if (!draw) { + return; + } + + + for (i = 0, ln = seriesItems.length; i < ln; i++) { + series = seriesItems[i]; + fields.push(series.yField); + xField = series.xField; + } + + + for (j = 0, ln = data.length; j < ln; j++) { + record = data[j]; + categories.push(record.get(xField)); + + if (aggregate) { + for (i = 0, nfields = fields.length; i < nfields; i++) { + maxValue = max(+record.get(fields[i]), maxValue); + } + } + } + if (!this.labelArray) { + if (display != 'categories') { + + for (i = 1; i <= steps; i++) { + label = surface.add({ + type: 'text', + text: round(i / steps * maxValue), + x: centerX, + y: centerY - rho * i / steps, + 'text-anchor': 'middle', + 'stroke-width': 0.1, + stroke: '#333' + }); + label.setAttributes({ + hidden: false + }, true); + labelArray.push(label); + } + } + if (display != 'scale') { + + for (j = 0, steps = categories.length; j < steps; j++) { + dx = cos(j / steps * pi2) * (rho + margin); + dy = sin(j / steps * pi2) * (rho + margin); + label = surface.add({ + type: 'text', + text: categories[j], + x: centerX + dx, + y: centerY + dy, + 'text-anchor': dx * dx <= 0.001? 'middle' : (dx < 0? 'end' : 'start') + }); + label.setAttributes({ + hidden: false + }, true); + labelArray.push(label); + } + } + } + else { + labelArray = this.labelArray; + if (display != 'categories') { + + for (i = 0; i < steps; i++) { + labelArray[i].setAttributes({ + text: round((i + 1) / steps * maxValue), + x: centerX, + y: centerY - rho * (i + 1) / steps, + 'text-anchor': 'middle', + 'stroke-width': 0.1, + stroke: '#333' + }, true); + } + } + if (display != 'scale') { + + for (j = 0, steps = categories.length; j < steps; j++) { + dx = cos(j / steps * pi2) * (rho + margin); + dy = sin(j / steps * pi2) * (rho + margin); + if (labelArray[i + j]) { + labelArray[i + j].setAttributes({ + type: 'text', + text: categories[j], + x: centerX + dx, + y: centerY + dy, + 'text-anchor': dx * dx <= 0.001? 'middle' : (dx < 0? 'end' : 'start') + }, true); + } + } + } + } + this.labelArray = labelArray; + }, + + getRange: function () { + var range = this.callParent(); + range.min = 0; + return range; + }, + + processView: function() { + var me = this, + seriesItems = me.chart.series.items, + i, ln, series, ends, fields = []; + + for (i = 0, ln = seriesItems.length; i < ln; i++) { + series = seriesItems[i]; + fields.push(series.yField); + } + me.fields = fields; + + ends = me.calcEnds(); + me.maximum = ends.to; + me.steps = ends.steps; + } +}); + + +Ext.define('Ext.chart.axis.Time', { + + + + extend: Ext.chart.axis.Numeric , + + alternateClassName: 'Ext.chart.TimeAxis', + + type: 'Time', + + alias: 'axis.time', + + + + + + + dateFormat: false, + + + fromDate: false, + + + toDate: false, + + + step: [Ext.Date.DAY, 1], + + + constrain: false, + + constructor: function (config) { + var me = this, label, f, df; + me.callParent([config]); + label = me.label || {}; + df = this.dateFormat; + if (df) { + if (label.renderer) { + f = label.renderer; + label.renderer = function(v) { + v = f(v); + return Ext.Date.format(new Date(f(v)), df); + }; + } else { + label.renderer = function(v) { + return Ext.Date.format(new Date(v >> 0), df); + }; + } + } + }, + + + processView: function () { + var me = this; + if (me.fromDate) { + me.minimum = +me.fromDate; + } + if (me.toDate) { + me.maximum = +me.toDate; + } + if(me.constrain){ + me.doConstrain(); + } + }, + + + calcEnds: function() { + var me = this, range, step = me.step; + if (step) { + range = me.getRange(); + range = Ext.draw.Draw.snapEndsByDateAndStep(new Date(range.min), new Date(range.max), Ext.isNumber(step) ? [Date.MILLI, step]: step); + if (me.minimum) { + range.from = me.minimum; + } + if (me.maximum) { + range.to = me.maximum; + } + return range; + } else { + return me.callParent(arguments); + } + } + }); + + + +Ext.define('Ext.chart.series.Series', { + + + + mixins: { + observable: Ext.util.Observable , + labels: Ext.chart.Label , + highlights: Ext.chart.Highlight , + tips: Ext.chart.Tip , + callouts: Ext.chart.Callout + }, + + + + + + + + + type: null, + + + title: null, + + + showInLegend: true, + + + renderer: function(sprite, record, attributes, index, store) { + return attributes; + }, + + + shadowAttributes: null, + + + animating: false, + + + nullGutters: { lower: 0, upper: 0, verticalAxis: undefined }, + + + nullPadding: { left:0, right:0, width:0, bottom:0, top:0, height:0 }, + + + + constructor: function(config) { + var me = this; + if (config) { + Ext.apply(me, config); + } + + me.shadowGroups = []; + + me.mixins.labels.constructor.call(me, config); + me.mixins.highlights.constructor.call(me, config); + me.mixins.tips.constructor.call(me, config); + me.mixins.callouts.constructor.call(me, config); + + me.addEvents({ + scope: me, + itemclick: true, + itemmouseover: true, + itemmouseout: true, + itemmousedown: true, + itemmouseup: true, + mouseleave: true, + afterdraw: true, + + + titlechange: true + }); + + me.mixins.observable.constructor.call(me, config); + + me.on({ + scope: me, + itemmouseover: me.onItemMouseOver, + itemmouseout: me.onItemMouseOut, + mouseleave: me.onMouseLeave + }); + + if (me.style) { + Ext.apply(me.seriesStyle, me.style); + } + }, + + onRedraw: Ext.emptyFn, + + + eachRecord: function(fn, scope) { + var chart = this.chart; + chart.getChartStore().each(fn, scope); + }, + + + getRecordCount: function() { + var chart = this.chart, + store = chart.getChartStore(); + return store ? store.getCount() : 0; + }, + + + isExcluded: function(index) { + var excludes = this.__excludes; + return !!(excludes && excludes[index]); + }, + + + setBBox: function(noGutter) { + var me = this, + chart = me.chart, + chartBBox = chart.chartBBox, + maxGutters = noGutter ? { left: 0, right: 0, bottom: 0, top: 0 } : chart.maxGutters, + clipBox, bbox; + + clipBox = { + x: chartBBox.x, + y: chartBBox.y, + width: chartBBox.width, + height: chartBBox.height + }; + me.clipBox = clipBox; + + bbox = { + x: (clipBox.x + maxGutters.left) - (chart.zoom.x * chart.zoom.width), + y: (clipBox.y + maxGutters.bottom) - (chart.zoom.y * chart.zoom.height), + width: (clipBox.width - (maxGutters.left + maxGutters.right)) * chart.zoom.width, + height: (clipBox.height - (maxGutters.bottom + maxGutters.top)) * chart.zoom.height + }; + me.bbox = bbox; + }, + + + onAnimate: function(sprite, attr) { + var me = this; + sprite.stopAnimation(); + if (me.animating) { + return sprite.animate(Ext.applyIf(attr, me.chart.animate)); + } else { + me.animating = true; + return sprite.animate(Ext.apply(Ext.applyIf(attr, me.chart.animate), { + + callback: function() { + me.animating = false; + me.fireEvent('afterrender'); + } + })); + } + }, + + + getGutters: function() { + return this.nullGutters; + }, + + + getPadding: function() { + return this.nullPadding; + }, + + + onItemMouseOver: function(item) { + var me = this; + if (item.series === me) { + if (me.highlight) { + me.highlightItem(item); + } + if (me.tooltip) { + me.showTip(item); + } + } + }, + + + onItemMouseOut: function(item) { + var me = this; + if (item.series === me) { + me.unHighlightItem(); + if (me.tooltip) { + me.hideTip(item); + } + } + }, + + + onMouseLeave: function() { + var me = this; + me.unHighlightItem(); + if (me.tooltip) { + me.hideTip(); + } + }, + + + getItemForPoint: function(x, y) { + + if (!this.items || !this.items.length || this.seriesIsHidden) { + return null; + } + var me = this, + items = me.items, + bbox = me.bbox, + item, i, ln; + + if (!Ext.draw.Draw.withinBox(x, y, bbox)) { + return null; + } + for (i = 0, ln = items.length; i < ln; i++) { + if (items[i] && this.isItemInPoint(x, y, items[i], i)) { + return items[i]; + } + } + + return null; + }, + + isItemInPoint: function(x, y, item, i) { + return false; + }, + + + hideAll: function() { + var me = this, + items = me.items, + item, len, i, j, l, sprite, shadows; + + me.seriesIsHidden = true; + me._prevShowMarkers = me.showMarkers; + + me.showMarkers = false; + + me.hideLabels(0); + + for (i = 0, len = items.length; i < len; i++) { + item = items[i]; + sprite = item.sprite; + if (sprite) { + sprite.setAttributes({ + hidden: true + }, true); + } + + if (sprite && sprite.shadows) { + shadows = sprite.shadows; + for (j = 0, l = shadows.length; j < l; ++j) { + shadows[j].setAttributes({ + hidden: true + }, true); + } + } + } + }, + + + showAll: function() { + var me = this, + prevAnimate = me.chart.animate; + me.chart.animate = false; + me.seriesIsHidden = false; + me.showMarkers = me._prevShowMarkers; + me.drawSeries(); + me.chart.animate = prevAnimate; + }, + + hide: function() { + if (this.items) { + var me = this, + items = me.items, + i, j, lsh, ln, shadows; + + if (items && items.length) { + for (i = 0, ln = items.length; i < ln; ++i) { + if (items[i].sprite) { + items[i].sprite.hide(true); + + shadows = items[i].shadows || items[i].sprite.shadows; + if (shadows) { + for (j = 0, lsh = shadows.length; j < lsh; ++j) { + shadows[j].hide(true); + } + } + } + } + me.hideLabels(); + } + } + }, + + + getLegendColor: function(index) { + var me = this, fill, stroke; + if (me.seriesStyle) { + fill = me.seriesStyle.fill; + stroke = me.seriesStyle.stroke; + if (fill && fill != 'none') { + return fill; + } + if(stroke){ + return stroke; + } + } + return (me.colorArrayStyle)?me.colorArrayStyle[me.themeIdx % me.colorArrayStyle.length]:'#000'; + }, + + + visibleInLegend: function(index){ + var excludes = this.__excludes; + if (excludes) { + return !excludes[index]; + } + return !this.seriesIsHidden; + }, + + + setTitle: function(index, title) { + var me = this, + oldTitle = me.title; + + if (Ext.isString(index)) { + title = index; + index = 0; + } + + if (Ext.isArray(oldTitle)) { + oldTitle[index] = title; + } else { + me.title = title; + } + + me.fireEvent('titlechange', title, index); + } +}); + + +Ext.define('Ext.chart.series.Cartesian', { + + + + extend: Ext.chart.series.Series , + + alternateClassName: ['Ext.chart.CartesianSeries', 'Ext.chart.CartesianChart'], + + + + + xField: null, + + + yField: null, + + + axis: 'left', + + getLegendLabels: function() { + var me = this, + labels = [], + fields, i, ln, + combinations = me.combinations, + title, + combo, label0, label1; + + fields = [].concat(me.yField); + for (i = 0, ln = fields.length; i < ln; i++) { + title = me.title; + + labels.push((Ext.isArray(title) ? title[i] : title) || fields[i]); + } + + + + if (combinations) { + combinations = Ext.Array.from(combinations); + for (i = 0, ln = combinations.length; i < ln; i++) { + combo = combinations[i]; + label0 = labels[combo[0]]; + label1 = labels[combo[1]]; + labels[combo[1]] = label0 + ' & ' + label1; + labels.splice(combo[0], 1); + } + } + + return labels; + }, + + + eachYValue: function(record, fn, scope) { + var me = this, + yValueAccessors = me.getYValueAccessors(), + i, ln, accessor; + + for (i = 0, ln = yValueAccessors.length; i < ln; i++) { + accessor = yValueAccessors[i]; + fn.call(scope, accessor(record), i); + } + }, + + + getYValueCount: function() { + return this.getYValueAccessors().length; + }, + + combine: function(index1, index2) { + var me = this, + accessors = me.getYValueAccessors(), + accessor1 = accessors[index1], + accessor2 = accessors[index2]; + + + accessors[index2] = function(record) { + return accessor1(record) + accessor2(record); + }; + accessors.splice(index1, 1); + + me.callParent([index1, index2]); + }, + + clearCombinations: function() { + + delete this.yValueAccessors; + this.callParent(); + }, + + + getYValueAccessors: function() { + var me = this, + accessors = me.yValueAccessors, + yFields, yField, i, ln; + if (!accessors) { + accessors = me.yValueAccessors = []; + yFields = [].concat(me.yField); + + for (i = 0, ln = yFields.length; i < ln; i++) { + yField = yFields[i]; + accessors.push(function(record) { + return record.get(yField); + }); + } + } + return accessors; + }, + + + getMinMaxXValues: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + data = store.data.items, + count = me.getRecordCount(), + i, ln, record, + min, max, + xField = me.xField, + xValue; + + if (count > 0) { + min = Infinity; + max = -min; + + for (i = 0, ln = data.length; i < ln; i++) { + record = data[i]; + xValue = record.get(xField); + if (xValue > max) { + max = xValue; + } + if (xValue < min) { + min = xValue; + } + } + + + if (min == Infinity) { + min = 0; + } + + if (max == -Infinity) { + max = count - 1; + } + } else { + min = max = 0; + } + return [min, max]; + }, + + + getMinMaxYValues: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + data = store.data.items, + count = me.getRecordCount(), + i, ln, record, + stacked = me.stacked, + min, max, + positiveTotal, negativeTotal; + + function eachYValueStacked(yValue, i) { + if (!me.isExcluded(i)) { + if (yValue < 0) { + negativeTotal += yValue; + } else { + positiveTotal += yValue; + } + } + } + + function eachYValue(yValue, i) { + if (!me.isExcluded(i)) { + if (yValue > max) { + max = yValue; + } + if (yValue < min) { + min = yValue; + } + } + } + + if (count > 0) { + min = Infinity; + max = -min; + + for (i = 0, ln = data.length; i < ln; i++) { + record = data[i]; + if (stacked) { + positiveTotal = 0; + negativeTotal = 0; + me.eachYValue(record, eachYValueStacked); + if (positiveTotal > max) { + max = positiveTotal; + } + if (negativeTotal < min) { + min = negativeTotal; + } + } else { + me.eachYValue(record, eachYValue); + } + } + + + if (min == Infinity) { + min = 0; + } + + if (max == -Infinity) { + max = count - 1; + } + } else { + min = max = 0; + } + return [min, max]; + }, + + getAxesForXAndYFields: function() { + var me = this, + axes = me.chart.axes, + axis = [].concat(me.axis), + yFields = {}, yFieldList = [].concat(me.yField), + xFields = {}, xFieldList = [].concat(me.xField), + fields, xAxis, yAxis, i, ln, flipXY; + + + flipXY = me.type === 'bar' && me.column === false; + if(flipXY) { + fields = yFieldList; + yFieldList = xFieldList; + xFieldList = fields; + } + if (Ext.Array.indexOf(axis, 'top') > -1) { + xAxis = 'top'; + } else if (Ext.Array.indexOf(axis, 'bottom') > -1) { + xAxis = 'bottom'; + } else { + if (axes.get('top') && axes.get('bottom')) { + for (i = 0, ln = xFieldList.length; i < ln; i++) { + xFields[xFieldList[i]] = true; + } + fields = [].concat(axes.get('bottom').fields); + for (i = 0, ln = fields.length; i < ln; i++) { + if (xFields[fields[i]]) { + xAxis = 'bottom'; + break + } + } + fields = [].concat(axes.get('top').fields); + for (i = 0, ln = fields.length; i < ln; i++) { + if (xFields[fields[i]]) { + xAxis = 'top'; + break + } + } + } else if (axes.get('top')) { + xAxis = 'top'; + } else if (axes.get('bottom')) { + xAxis = 'bottom'; + } + } + if (Ext.Array.indexOf(axis, 'left') > -1) { + yAxis = 'left'; + } else if (Ext.Array.indexOf(axis, 'right') > -1) { + yAxis = 'right'; + } else { + if (axes.get('left') && axes.get('right')) { + for (i = 0, ln = yFieldList.length; i < ln; i++) { + yFields[yFieldList[i]] = true; + } + fields = [].concat(axes.get('right').fields); + for (i = 0, ln = fields.length; i < ln; i++) { + if (yFields[fields[i]]) { + + break + } + } + fields = [].concat(axes.get('left').fields); + for (i = 0, ln = fields.length; i < ln; i++) { + if (yFields[fields[i]]) { + yAxis = 'left'; + break + } + } + } else if (axes.get('left')) { + yAxis = 'left'; + } else if (axes.get('right')) { + yAxis = 'right'; + } + } + + return flipXY ? { + xAxis: yAxis, + yAxis: xAxis + }: { + xAxis: xAxis, + yAxis: yAxis + }; + } + + +}); + + +Ext.define('Ext.chart.series.Area', { + + + + extend: Ext.chart.series.Cartesian , + + alias: 'series.area', + + + + + + type: 'area', + + + stacked: true, + + + style: {}, + + constructor: function(config) { + this.callParent(arguments); + var me = this, + surface = me.chart.surface, + i, l; + config.highlightCfg = Ext.Object.merge({}, { + lineWidth: 3, + stroke: '#55c', + opacity: 0.8, + color: '#f00' + }, config.highlightCfg); + + Ext.apply(me, config, { + __excludes: [] + }); + if (me.highlight) { + me.highlightSprite = surface.add({ + type: 'path', + path: ['M', 0, 0], + zIndex: 1000, + opacity: 0.3, + lineWidth: 5, + hidden: true, + stroke: '#444' + }); + } + me.group = surface.getGroup(me.seriesId); + }, + + + shrink: function(xValues, yValues, size) { + var len = xValues.length, + ratio = Math.floor(len / size), + i, j, + xSum = 0, + yCompLen = this.areas.length, + ySum = [], + xRes = [], + yRes = []; + + for (j = 0; j < yCompLen; ++j) { + ySum[j] = 0; + } + for (i = 0; i < len; ++i) { + xSum += +xValues[i]; + for (j = 0; j < yCompLen; ++j) { + ySum[j] += +yValues[i][j]; + } + if (i % ratio == 0) { + + xRes.push(xSum/ratio); + for (j = 0; j < yCompLen; ++j) { + ySum[j] /= ratio; + } + yRes.push(ySum); + + xSum = 0; + for (j = 0, ySum = []; j < yCompLen; ++j) { + ySum[j] = 0; + } + } + } + return { + x: xRes, + y: yRes + }; + }, + + + getBounds: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + data = store.data.items, + i, l, record, + areas = [].concat(me.yField), + areasLen = areas.length, + xValues = [], + yValues = [], + infinity = Infinity, + minX = infinity, + minY = infinity, + maxX = -infinity, + maxY = -infinity, + math = Math, + mmin = math.min, + mmax = math.max, + boundAxis = me.getAxesForXAndYFields(), + boundXAxis = boundAxis.xAxis, + boundYAxis = boundAxis.yAxis, + ends, allowDate, tmp, + bbox, xScale, yScale, xValue, yValue, areaIndex, acumY, ln, sumValues, clipBox, areaElem, axis, out; + + me.setBBox(); + bbox = me.bbox; + + if (axis = chart.axes.get(boundXAxis)) { + if (axis.type === 'Time') { + allowDate = true; + } + ends = axis.applyData(); + minX = ends.from; + maxX = ends.to; + } + + if (axis = chart.axes.get(boundYAxis)) { + ends = axis.applyData(); + minY = ends.from; + maxY = ends.to; + } + + + if (me.xField && !Ext.isNumber(minX)) { + axis = me.getMinMaxXValues(); + allowDate = true; + minX = axis[0]; + maxX = axis[1]; + } + + if (me.yField && !Ext.isNumber(minY)) { + axis = me.getMinMaxYValues(); + minY = axis[0]; + maxY = axis[1]; + } + + if (!Ext.isNumber(minY)) { + minY = 0; + } + if (!Ext.isNumber(maxY)) { + maxY = 0; + } + + l = data.length; + if (l > 0 && allowDate) { + tmp = data[0].get(me.xField); + if (typeof tmp != 'number') { + tmp = +tmp; + if (isNaN(tmp)) { + allowDate = false; + } + } + } + for (i = 0; i < l; i++) { + record = data[i]; + xValue = record.get(me.xField); + yValue = []; + if (typeof xValue != 'number') { + if (allowDate) { + xValue = +xValue; + } else { + xValue = i; + } + } + xValues.push(xValue); + acumY = 0; + for (areaIndex = 0; areaIndex < areasLen; areaIndex++) { + + if (me.__excludes[areaIndex]) { + continue; + } + areaElem = record.get(areas[areaIndex]); + if (typeof areaElem == 'number') { + yValue.push(areaElem); + } + } + yValues.push(yValue); + } + + xScale = bbox.width / ((maxX - minX) || 1); + yScale = bbox.height / ((maxY - minY) || 1); + + ln = xValues.length; + if ((ln > bbox.width) && me.areas) { + sumValues = me.shrink(xValues, yValues, bbox.width); + xValues = sumValues.x; + yValues = sumValues.y; + } + + return { + bbox: bbox, + minX: minX, + minY: minY, + xValues: xValues, + yValues: yValues, + xScale: xScale, + yScale: yScale, + areasLen: areasLen + }; + }, + + + getPaths: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + first = true, + bounds = me.getBounds(), + bbox = bounds.bbox, + items = me.items = [], + componentPaths = [], + componentPath, + count = 0, + paths = [], + i, ln, x, y, xValue, yValue, acumY, areaIndex, prevAreaIndex, areaElem, path, startX; + + ln = bounds.xValues.length; + + for (i = 0; i < ln; i++) { + xValue = bounds.xValues[i]; + yValue = bounds.yValues[i]; + x = bbox.x + (xValue - bounds.minX) * bounds.xScale; + if (startX === undefined) { + startX = x; + } + acumY = 0; + count = 0; + for (areaIndex = 0; areaIndex < bounds.areasLen; areaIndex++) { + + if (me.__excludes[areaIndex]) { + continue; + } + if (!componentPaths[areaIndex]) { + componentPaths[areaIndex] = []; + } + areaElem = yValue[count]; + acumY += areaElem; + y = bbox.y + bbox.height - (acumY - bounds.minY) * bounds.yScale; + if (!paths[areaIndex]) { + paths[areaIndex] = ['M', x, y]; + componentPaths[areaIndex].push(['L', x, y]); + } else { + paths[areaIndex].push('L', x, y); + componentPaths[areaIndex].push(['L', x, y]); + } + if (!items[areaIndex]) { + items[areaIndex] = { + pointsUp: [], + pointsDown: [], + series: me + }; + } + items[areaIndex].pointsUp.push([x, y]); + count++; + } + } + + + for (areaIndex = 0; areaIndex < bounds.areasLen; areaIndex++) { + + if (me.__excludes[areaIndex]) { + continue; + } + path = paths[areaIndex]; + + + if (areaIndex == 0 || first) { + first = false; + + path.push('L', x, bbox.y + bbox.height, + 'L', startX, bbox.y + bbox.height, + 'Z'); + } + + else { + componentPath = componentPaths[prevAreaIndex]; + componentPath.reverse(); + path.push('L', x, componentPath[0][2]); + for (i = 0; i < ln; i++) { + path.push(componentPath[i][0], + componentPath[i][1], + componentPath[i][2]); + items[areaIndex].pointsDown[ln -i -1] = [componentPath[i][1], componentPath[i][2]]; + } + path.push('L', startX, path[2], 'Z'); + } + prevAreaIndex = areaIndex; + } + return { + paths: paths, + areasLen: bounds.areasLen + }; + }, + + + drawSeries: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + surface = chart.surface, + animate = chart.animate, + group = me.group, + endLineStyle = Ext.apply(me.seriesStyle, me.style), + colorArrayStyle = me.colorArrayStyle, + colorArrayLength = colorArrayStyle && colorArrayStyle.length || 0, + themeIndex = me.themeIdx, + areaIndex, areaElem, paths, path, rendererAttributes, idx; + + me.unHighlightItem(); + me.cleanHighlights(); + + if (!store || !store.getCount() || me.seriesIsHidden) { + me.hide(); + me.items = []; + return; + } + + paths = me.getPaths(); + + if (!me.areas) { + me.areas = []; + } + + for (areaIndex = 0; areaIndex < paths.areasLen; areaIndex++) { + + if (me.__excludes[areaIndex]) { + continue; + } + idx = themeIndex + areaIndex; + if (!me.areas[areaIndex]) { + me.items[areaIndex].sprite = me.areas[areaIndex] = surface.add(Ext.apply({}, { + type: 'path', + group: group, + + path: paths.paths[areaIndex], + stroke: endLineStyle.stroke || colorArrayStyle[idx % colorArrayLength], + fill: colorArrayStyle[idx % colorArrayLength] + }, endLineStyle || {})); + } + areaElem = me.areas[areaIndex]; + path = paths.paths[areaIndex]; + if (animate) { + + rendererAttributes = me.renderer(areaElem, false, { + path: path, + + fill: colorArrayStyle[areaIndex % colorArrayLength], + stroke: endLineStyle.stroke || colorArrayStyle[areaIndex % colorArrayLength] + }, areaIndex, store); + + me.animation = me.onAnimate(areaElem, { + to: rendererAttributes + }); + } else { + rendererAttributes = me.renderer(areaElem, false, { + path: path, + + hidden: false, + fill: colorArrayStyle[idx % colorArrayLength], + stroke: endLineStyle.stroke || colorArrayStyle[idx % colorArrayLength] + }, areaIndex, store); + me.areas[areaIndex].setAttributes(rendererAttributes, true); + } + } + me.renderLabels(); + me.renderCallouts(); + }, + + + onAnimate: function(sprite, attr) { + sprite.show(); + return this.callParent(arguments); + }, + + + onCreateLabel: function(storeItem, item, i, display) { + var me = this, + group = me.labelsGroup, + config = me.label, + bbox = me.bbox, + endLabelStyle = Ext.apply(config, me.seriesLabelStyle); + + return me.chart.surface.add(Ext.apply({ + 'type': 'text', + 'text-anchor': 'middle', + 'group': group, + 'x': item.point[0], + 'y': bbox.y + bbox.height / 2 + }, endLabelStyle || {})); + }, + + + onPlaceLabel: function(label, storeItem, item, i, display, animate, index) { + var me = this, + chart = me.chart, + resizing = chart.resizing, + config = me.label, + format = config.renderer, + field = config.field, + bbox = me.bbox, + x = item.point[0], + y = item.point[1], + bb, width, height; + + label.setAttributes({ + text: format(storeItem.get(field[index]), label, storeItem, item, i, display, animate, index), + hidden: true + }, true); + + bb = label.getBBox(); + width = bb.width / 2; + height = bb.height / 2; + + x = x - width < bbox.x? bbox.x + width : x; + x = (x + width > bbox.x + bbox.width) ? (x - (x + width - bbox.x - bbox.width)) : x; + y = y - height < bbox.y? bbox.y + height : y; + y = (y + height > bbox.y + bbox.height) ? (y - (y + height - bbox.y - bbox.height)) : y; + + if (me.chart.animate && !me.chart.resizing) { + label.show(true); + me.onAnimate(label, { + to: { + x: x, + y: y + } + }); + } else { + label.setAttributes({ + x: x, + y: y + }, true); + if (resizing) { + me.animation.on('afteranimate', function() { + label.show(true); + }); + } else { + label.show(true); + } + } + }, + + + onPlaceCallout : function(callout, storeItem, item, i, display, animate, index) { + var me = this, + chart = me.chart, + surface = chart.surface, + resizing = chart.resizing, + config = me.callouts, + items = me.items, + prev = (i == 0) ? false : items[i -1].point, + next = (i == items.length -1) ? false : items[i +1].point, + cur = item.point, + dir, norm, normal, a, aprev, anext, + bbox = (callout && callout.label ? callout.label.getBBox() : {width:0,height:0}), + offsetFromViz = 30, + offsetToSide = 10, + offsetBox = 3, + boxx, boxy, boxw, boxh, + p, clipRect = me.clipRect, + x, y; + + if (!bbox.width || !bbox.height) { + return; + } + + + if (!prev) { + prev = cur; + } + if (!next) { + next = cur; + } + a = (next[1] - prev[1]) / (next[0] - prev[0]); + aprev = (cur[1] - prev[1]) / (cur[0] - prev[0]); + anext = (next[1] - cur[1]) / (next[0] - cur[0]); + + norm = Math.sqrt(1 + a * a); + dir = [1 / norm, a / norm]; + normal = [-dir[1], dir[0]]; + + + if (aprev > 0 && anext < 0 && normal[1] < 0 || aprev < 0 && anext > 0 && normal[1] > 0) { + normal[0] *= -1; + normal[1] *= -1; + } else if (Math.abs(aprev) < Math.abs(anext) && normal[0] < 0 || Math.abs(aprev) > Math.abs(anext) && normal[0] > 0) { + normal[0] *= -1; + normal[1] *= -1; + } + + + x = cur[0] + normal[0] * offsetFromViz; + y = cur[1] + normal[1] * offsetFromViz; + + + boxx = x + (normal[0] > 0? 0 : -(bbox.width + 2 * offsetBox)); + boxy = y - bbox.height /2 - offsetBox; + boxw = bbox.width + 2 * offsetBox; + boxh = bbox.height + 2 * offsetBox; + + + + if (boxx < clipRect[0] || (boxx + boxw) > (clipRect[0] + clipRect[2])) { + normal[0] *= -1; + } + if (boxy < clipRect[1] || (boxy + boxh) > (clipRect[1] + clipRect[3])) { + normal[1] *= -1; + } + + + x = cur[0] + normal[0] * offsetFromViz; + y = cur[1] + normal[1] * offsetFromViz; + + + boxx = x + (normal[0] > 0? 0 : -(bbox.width + 2 * offsetBox)); + boxy = y - bbox.height /2 - offsetBox; + boxw = bbox.width + 2 * offsetBox; + boxh = bbox.height + 2 * offsetBox; + + + callout.lines.setAttributes({ + path: ["M", cur[0], cur[1], "L", x, y, "Z"] + }, true); + + callout.box.setAttributes({ + x: boxx, + y: boxy, + width: boxw, + height: boxh + }, true); + + callout.label.setAttributes({ + x: x + (normal[0] > 0? offsetBox : -(bbox.width + offsetBox)), + y: y + }, true); + for (p in callout) { + callout[p].show(true); + } + }, + + isItemInPoint: function(x, y, item, i) { + var me = this, + pointsUp = item.pointsUp, + pointsDown = item.pointsDown, + abs = Math.abs, + distChanged = false, + last = false, + dist = Infinity, p, pln, point; + + for (p = 0, pln = pointsUp.length; p < pln; p++) { + point = [pointsUp[p][0], pointsUp[p][1]]; + + distChanged = false; + last = p == pln -1; + + if (dist > abs(x - point[0])) { + dist = abs(x - point[0]); + distChanged = true; + if (last) { + ++p; + } + } + + if (!distChanged || (distChanged && last)) { + point = pointsUp[p -1]; + if (y >= point[1] && (!pointsDown.length || y <= (pointsDown[p -1][1]))) { + item.storeIndex = p -1; + item.storeField = me.yField[i]; + item.storeItem = me.chart.getChartStore().getAt(p -1); + item._points = pointsDown.length? [point, pointsDown[p -1]] : [point]; + return true; + } else { + break; + } + } + } + return false; + }, + + + highlightSeries: function() { + var area, to, fillColor; + if (this._index !== undefined) { + area = this.areas[this._index]; + if (area.__highlightAnim) { + area.__highlightAnim.paused = true; + } + area.__highlighted = true; + area.__prevOpacity = area.__prevOpacity || area.attr.opacity || 1; + area.__prevFill = area.__prevFill || area.attr.fill; + area.__prevLineWidth = area.__prevLineWidth || area.attr.lineWidth; + fillColor = Ext.draw.Color.fromString(area.__prevFill); + to = { + lineWidth: (area.__prevLineWidth || 0) + 2 + }; + if (fillColor) { + to.fill = fillColor.getLighter(0.2).toString(); + } + else { + to.opacity = Math.max(area.__prevOpacity - 0.3, 0); + } + if (this.chart.animate) { + area.__highlightAnim = new Ext.fx.Anim(Ext.apply({ + target: area, + to: to + }, this.chart.animate)); + } + else { + area.setAttributes(to, true); + } + } + }, + + + unHighlightSeries: function() { + var area; + if (this._index !== undefined) { + area = this.areas[this._index]; + if (area.__highlightAnim) { + area.__highlightAnim.paused = true; + } + if (area.__highlighted) { + area.__highlighted = false; + area.__highlightAnim = new Ext.fx.Anim({ + target: area, + to: { + fill: area.__prevFill, + opacity: area.__prevOpacity, + lineWidth: area.__prevLineWidth + } + }); + } + } + }, + + + highlightItem: function(item) { + var me = this, + points, path; + if (!item) { + this.highlightSeries(); + return; + } + points = item._points; + path = points.length == 2? ['M', points[0][0], points[0][1], 'L', points[1][0], points[1][1]] + : ['M', points[0][0], points[0][1], 'L', points[0][0], me.bbox.y + me.bbox.height]; + me.highlightSprite.setAttributes({ + path: path, + hidden: false + }, true); + }, + + + unHighlightItem: function(item) { + if (!item) { + this.unHighlightSeries(); + } + + if (this.highlightSprite) { + this.highlightSprite.hide(true); + } + }, + + + hideAll: function(index) { + var me = this; + index = (isNaN(me._index) ? index : me._index) || 0; + me.__excludes[index] = true; + me.areas[index].hide(true); + me.redraw(); + }, + + + showAll: function(index) { + var me = this; + index = (isNaN(me._index) ? index : me._index) || 0; + me.__excludes[index] = false; + me.areas[index].show(true); + me.redraw(); + }, + + redraw: function() { + + + + var me = this, + prevLegendConfig; + prevLegendConfig = me.chart.legend.rebuild; + me.chart.legend.rebuild = false; + me.chart.redraw(); + me.chart.legend.rebuild = prevLegendConfig; + }, + + hide: function() { + if (this.areas) { + var me = this, + areas = me.areas, + i, j, l, ln, shadows; + + if (areas && areas.length) { + for (i = 0, ln = areas.length; i < ln; ++i) { + if (areas[i]) { + areas[i].hide(true); + } + } + me.hideLabels(); + } + } + }, + + + getLegendColor: function(index) { + var me = this; + index += me.themeIdx; + return me.colorArrayStyle[index % me.colorArrayStyle.length]; + } +}); + + +Ext.define('Ext.chart.series.Bar', { + + + + extend: Ext.chart.series.Cartesian , + + alternateClassName: ['Ext.chart.BarSeries', 'Ext.chart.BarChart', 'Ext.chart.StackedBarChart'], + + + + + + type: 'bar', + + alias: 'series.bar', + + column: false, + + + style: {}, + + + gutter: 38.2, + + + groupGutter: 38.2, + + + xPadding: 0, + + + yPadding: 10, + + + + constructor: function(config) { + this.callParent(arguments); + var me = this, + surface = me.chart.surface, + shadow = me.chart.shadow, + i, l; + config.highlightCfg = Ext.Object.merge({ + lineWidth: 3, + stroke: '#55c', + opacity: 0.8, + color: '#f00' + }, config.highlightCfg); + Ext.apply(me, config, { + shadowAttributes: [{ + "stroke-width": 6, + "stroke-opacity": 0.05, + stroke: 'rgb(200, 200, 200)', + translate: { + x: 1.2, + y: 1.2 + } + }, { + "stroke-width": 4, + "stroke-opacity": 0.1, + stroke: 'rgb(150, 150, 150)', + translate: { + x: 0.9, + y: 0.9 + } + }, { + "stroke-width": 2, + "stroke-opacity": 0.15, + stroke: 'rgb(100, 100, 100)', + translate: { + x: 0.6, + y: 0.6 + } + }] + }); + + me.group = surface.getGroup(me.seriesId + '-bars'); + if (shadow) { + for (i = 0, l = me.shadowAttributes.length; i < l; i++) { + me.shadowGroups.push(surface.getGroup(me.seriesId + '-shadows' + i)); + } + } + }, + + + getPadding: function() { + var me = this, + xPadding = me.xPadding, + yPadding = me.yPadding, + padding = { }; + + if (Ext.isNumber(xPadding)) { + padding.left = xPadding; + padding.right = xPadding; + } else if (Ext.isObject(xPadding)) { + padding.left = xPadding.left; + padding.right = xPadding.right; + } else { + padding.left = 0; + padding.right = 0; + } + padding.width = padding.left + padding.right; + + if (Ext.isNumber(yPadding)) { + padding.bottom = yPadding; + padding.top = yPadding; + } else if (Ext.isObject(yPadding)) { + padding.bottom = yPadding.bottom; + padding.top = yPadding.top; + } else { + padding.bottom = 0; + padding.top = 0; + } + padding.height = padding.bottom + padding.top; + + return padding; + }, + + + getBarGirth: function() { + var me = this, + store = me.chart.getChartStore(), + column = me.column, + ln = store.getCount(), + gutter = me.gutter / 100, + padding, + property; + + if (me.style && me.style.width) { + return me.style.width; + } + padding = me.getPadding(); + property = (column ? 'width' : 'height'); + return (me.chart.chartBBox[property] - padding[property]) / (ln * (gutter + 1) - gutter); + }, + + + getGutters: function() { + var me = this, + column = me.column, + padding = me.getPadding(), + halfBarGirth = me.getBarGirth() / 2, + lowerGutter = Math.ceil((column ? padding.left : padding.bottom) + halfBarGirth), + upperGutter = Math.ceil((column ? padding.right : padding.top) + halfBarGirth); + + return { + lower: lowerGutter, + upper: upperGutter, + verticalAxis: !column + }; + }, + + + getBounds: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + data = store.data.items, + i, ln, record, + bars = [].concat(me.yField), + barsLoc, + barsLen = bars.length, + groupBarsLen = barsLen, + groupGutter = me.groupGutter / 100, + column = me.column, + padding = me.getPadding(), + stacked = me.stacked, + barWidth = me.getBarGirth(), + barWidthProperty = column ? 'width' : 'height', + math = Math, + mmin = math.min, + mmax = math.max, + mabs = math.abs, + boundAxes = me.getAxesForXAndYFields(), + boundYAxis = boundAxes.yAxis, + minX, maxX, colsScale, colsZero, gutters, + ends, shrunkBarWidth, groupBarWidth, bbox, minY, maxY, axis, out, + scale, zero, total, rec, j, plus, minus; + + me.setBBox(true); + bbox = me.bbox; + + + if (me.__excludes) { + for (j = 0, total = me.__excludes.length; j < total; j++) { + if (me.__excludes[j]) { + groupBarsLen--; + } + } + } + axis = chart.axes.get(boundYAxis); + if (axis) { + ends = axis.applyData(); + minY = ends.from; + maxY = ends.to; + } + + if (me.yField && !Ext.isNumber(minY)) { + out = me.getMinMaxYValues(); + minY = out[0]; + maxY = out[1]; + } + + if (!Ext.isNumber(minY)) { + minY = 0; + } + if (!Ext.isNumber(maxY)) { + maxY = 0; + } + scale = (column ? bbox.height - padding.height : bbox.width - padding.width) / (maxY - minY); + shrunkBarWidth = barWidth; + groupBarWidth = (barWidth / ((stacked ? 1 : groupBarsLen) * (groupGutter + 1) - groupGutter)); + + if (barWidthProperty in me.style) { + groupBarWidth = mmin(groupBarWidth, me.style[barWidthProperty]); + shrunkBarWidth = groupBarWidth * ((stacked ? 1 : groupBarsLen) * (groupGutter + 1) - groupGutter); + } + zero = (column) ? bbox.y + bbox.height - padding.bottom : bbox.x + padding.left; + + if (stacked) { + total = [[], []]; + for (i = 0, ln = data.length; i < ln; i++) { + record = data[i]; + total[0][i] = total[0][i] || 0; + total[1][i] = total[1][i] || 0; + for (j = 0; j < barsLen; j++) { + if (me.__excludes && me.__excludes[j]) { + continue; + } + rec = record.get(bars[j]); + total[+(rec > 0)][i] += mabs(rec); + } + } + total[+(maxY > 0)].push(mabs(maxY)); + total[+(minY > 0)].push(mabs(minY)); + minus = mmax.apply(math, total[0]); + plus = mmax.apply(math, total[1]); + scale = (column ? bbox.height - padding.height : bbox.width - padding.width) / (plus + minus); + zero = zero + minus * scale * (column ? -1 : 1); + } + else if (minY / maxY < 0) { + zero = zero - minY * scale * (column ? -1 : 1); + } + + + if (me.boundColumn) { + axis = chart.axes.get(boundAxes.xAxis); + if (axis) { + ends = axis.applyData(); + minX = ends.from; + maxX = ends.to; + } + if (me.xField && !Ext.isNumber(minX)) { + out = me.getMinMaxYValues(); + minX = out[0]; + maxX = out[1]; + } + if (!Ext.isNumber(minX)) { + minX = 0; + } + if (!Ext.isNumber(maxX)) { + maxX = 0; + } + gutters = me.getGutters(); + colsScale = (bbox.width - (gutters.lower + gutters.upper)) / ((maxX - minX) || 1); + + colsZero = bbox.x + gutters.lower; + + barsLoc = []; + for (i = 0, ln = data.length; i < ln; i++) { + record = data[i]; + rec = record.get(me.xField); + barsLoc[i] = colsZero + (rec - minX) * colsScale - (groupBarWidth / 2); + } + } + + return { + bars: bars, + barsLoc: barsLoc, + bbox: bbox, + shrunkBarWidth: shrunkBarWidth, + barsLen: barsLen, + groupBarsLen: groupBarsLen, + barWidth: barWidth, + groupBarWidth: groupBarWidth, + scale: scale, + zero: zero, + padding: padding, + signed: minY / maxY < 0, + minY: minY, + maxY: maxY + }; + }, + + + getPaths: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + data = store.data.items, + i, total, record, + bounds = me.bounds = me.getBounds(), + items = me.items = [], + yFields = Ext.isArray(me.yField) ? me.yField : [me.yField], + gutter = me.gutter / 100, + groupGutter = me.groupGutter / 100, + animate = chart.animate, + column = me.column, + group = me.group, + enableShadows = chart.shadow, + shadowGroups = me.shadowGroups, + shadowAttributes = me.shadowAttributes, + shadowGroupsLn = shadowGroups.length, + bbox = bounds.bbox, + barWidth = bounds.barWidth, + shrunkBarWidth = bounds.shrunkBarWidth, + padding = me.getPadding(), + stacked = me.stacked, + barsLen = bounds.barsLen, + colors = me.colorArrayStyle, + colorLength = colors && colors.length || 0, + themeIndex = me.themeIdx, + math = Math, + mmax = math.max, + mmin = math.min, + mabs = math.abs, + j, yValue, height, totalDim, totalNegDim, bottom, top, hasShadow, barAttr, attrs, counter, + totalPositiveValues, totalNegativeValues, + shadowIndex, shadow, sprite, offset, floorY, idx; + + for (i = 0, total = data.length; i < total; i++) { + record = data[i]; + bottom = bounds.zero; + top = bounds.zero; + totalDim = 0; + totalNegDim = 0; + totalPositiveValues = totalNegativeValues = 0; + hasShadow = false; + for (j = 0, counter = 0; j < barsLen; j++) { + + if (me.__excludes && me.__excludes[j]) { + continue; + } + yValue = record.get(bounds.bars[j]); + if (yValue >= 0) { + totalPositiveValues += yValue; + } + else { + totalNegativeValues += yValue; + } + height = Math.round((yValue - mmax(bounds.minY, 0)) * bounds.scale); + idx = themeIndex + (barsLen > 1 ? j : 0); + barAttr = { + fill: colors[idx % colorLength] + }; + if (column) { + Ext.apply(barAttr, { + height: height, + width: mmax(bounds.groupBarWidth, 0), + x: (me.boundColumn ? bounds.barsLoc[i] + : (bbox.x + padding.left + + (barWidth - shrunkBarWidth) * 0.5 + + i * barWidth * (1 + gutter) + + counter * bounds.groupBarWidth * (1 + groupGutter) * !stacked)), + y: bottom - height + }); + } + else { + + offset = (total - 1) - i; + Ext.apply(barAttr, { + height: mmax(bounds.groupBarWidth, 0), + width: height + (bottom == bounds.zero), + x: bottom + (bottom != bounds.zero), + y: (bbox.y + padding.top + + (barWidth - shrunkBarWidth) * 0.5 + + offset * barWidth * (1 + gutter) + + counter * bounds.groupBarWidth * (1 + groupGutter) * !stacked + 1) + }); + } + if (height < 0) { + if (column) { + barAttr.y = top; + barAttr.height = mabs(height); + } else { + barAttr.x = top + height; + barAttr.width = mabs(height); + } + } + if (stacked) { + if (height < 0) { + top += height * (column ? -1 : 1); + } else { + bottom += height * (column ? -1 : 1); + } + totalDim += mabs(height); + if (height < 0) { + totalNegDim += mabs(height); + } + } + barAttr.x = Math.floor(barAttr.x) + 1; + floorY = Math.floor(barAttr.y); + if (Ext.isIE8m && barAttr.y > floorY) { + floorY--; + } + barAttr.y = floorY; + barAttr.width = Math.floor(barAttr.width); + barAttr.height = Math.floor(barAttr.height); + items.push({ + series: me, + yField: yFields[j], + storeItem: record, + value: [record.get(me.xField), yValue], + attr: barAttr, + point: column ? [barAttr.x + barAttr.width / 2, yValue >= 0 ? barAttr.y : barAttr.y + barAttr.height] : + [yValue >= 0 ? barAttr.x + barAttr.width : barAttr.x, barAttr.y + barAttr.height / 2] + }); + + if (animate && chart.resizing) { + attrs = column ? { + x: barAttr.x, + y: bounds.zero, + width: barAttr.width, + height: 0 + } : { + x: bounds.zero, + y: barAttr.y, + width: 0, + height: barAttr.height + }; + if (enableShadows && (stacked && !hasShadow || !stacked)) { + hasShadow = true; + + for (shadowIndex = 0; shadowIndex < shadowGroupsLn; shadowIndex++) { + shadow = shadowGroups[shadowIndex].getAt(stacked ? i : (i * barsLen + j)); + if (shadow) { + shadow.setAttributes(attrs, true); + } + } + } + + sprite = group.getAt(i * barsLen + j); + if (sprite) { + sprite.setAttributes(attrs, true); + } + } + counter++; + } + if (stacked && items.length) { + items[i * counter].totalDim = totalDim; + items[i * counter].totalNegDim = totalNegDim; + items[i * counter].totalPositiveValues = totalPositiveValues; + items[i * counter].totalNegativeValues = totalNegativeValues; + } + } + if (stacked && counter == 0) { + + for (i = 0, total = data.length; i < total; i++) { + for (shadowIndex = 0; shadowIndex < shadowGroupsLn; shadowIndex++) { + shadow = shadowGroups[shadowIndex].getAt(i); + if (shadow) { + shadow.hide(true); + } + } + } + } + }, + + + renderShadows: function(i, barAttr, baseAttrs, bounds) { + var me = this, + chart = me.chart, + surface = chart.surface, + animate = chart.animate, + stacked = me.stacked, + shadowGroups = me.shadowGroups, + shadowAttributes = me.shadowAttributes, + shadowGroupsLn = shadowGroups.length, + store = chart.getChartStore(), + column = me.column, + items = me.items, + shadows = [], + zero = bounds.zero, + shadowIndex, shadowBarAttr, shadow, totalDim, totalNegDim, j, rendererAttributes; + + if ((stacked && (i % bounds.groupBarsLen === 0)) || !stacked) { + j = i / bounds.groupBarsLen; + + for (shadowIndex = 0; shadowIndex < shadowGroupsLn; shadowIndex++) { + shadowBarAttr = Ext.apply({}, shadowAttributes[shadowIndex]); + shadow = shadowGroups[shadowIndex].getAt(stacked ? j : i); + Ext.copyTo(shadowBarAttr, barAttr, 'x,y,width,height'); + if (!shadow) { + shadow = surface.add(Ext.apply({ + type: 'rect', + group: shadowGroups[shadowIndex] + }, Ext.apply({}, baseAttrs, shadowBarAttr))); + } + if (stacked) { + totalDim = items[i].totalDim; + totalNegDim = items[i].totalNegDim; + if (column) { + shadowBarAttr.y = zero + totalNegDim - totalDim - 1; + shadowBarAttr.height = totalDim; + } + else { + shadowBarAttr.x = zero - totalNegDim; + shadowBarAttr.width = totalDim; + } + } + + rendererAttributes = me.renderer(shadow, store.getAt(j), shadowBarAttr, i, store); + rendererAttributes.hidden = !!barAttr.hidden; + if (animate) { + me.onAnimate(shadow, { to: rendererAttributes }); + } + else { + shadow.setAttributes(rendererAttributes, true); + } + shadows.push(shadow); + } + } + return shadows; + }, + + + drawSeries: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + surface = chart.surface, + animate = chart.animate, + stacked = me.stacked, + column = me.column, + chartAxes = chart.axes, + boundAxes = me.getAxesForXAndYFields(), + boundXAxis = boundAxes.xAxis, + boundYAxis = boundAxes.yAxis, + enableShadows = chart.shadow, + shadowGroups = me.shadowGroups, + shadowGroupsLn = shadowGroups.length, + group = me.group, + seriesStyle = me.seriesStyle, + items, ln, i, j, baseAttrs, sprite, rendererAttributes, shadowIndex, shadowGroup, + bounds, endSeriesStyle, barAttr, attrs, anim; + + if (!store || !store.getCount() || me.seriesIsHidden) { + me.hide(); + me.items = []; + return; + } + + + endSeriesStyle = Ext.apply({}, this.style, seriesStyle); + delete endSeriesStyle.fill; + delete endSeriesStyle.x; + delete endSeriesStyle.y; + delete endSeriesStyle.width; + delete endSeriesStyle.height; + + me.unHighlightItem(); + me.cleanHighlights(); + + me.boundColumn = (boundXAxis && Ext.Array.contains(me.axis,boundXAxis) + && chartAxes.get(boundXAxis) + && chartAxes.get(boundXAxis).isNumericAxis); + + me.getPaths(); + bounds = me.bounds; + items = me.items; + + baseAttrs = column ? { + y: bounds.zero, + height: 0 + } : { + x: bounds.zero, + width: 0 + }; + ln = items.length; + + + for (i = 0; i < ln; i++) { + sprite = group.getAt(i); + barAttr = items[i].attr; + + if (enableShadows) { + items[i].shadows = me.renderShadows(i, barAttr, baseAttrs, bounds); + } + + + if (!sprite) { + attrs = Ext.apply({}, baseAttrs, barAttr); + attrs = Ext.apply(attrs, endSeriesStyle || {}); + sprite = surface.add(Ext.apply({}, { + type: 'rect', + group: group + }, attrs)); + } + if (animate) { + rendererAttributes = me.renderer(sprite, store.getAt(i), barAttr, i, store); + sprite._to = rendererAttributes; + anim = me.onAnimate(sprite, { to: Ext.apply(rendererAttributes, endSeriesStyle) }); + if (enableShadows && stacked && (i % bounds.barsLen === 0)) { + j = i / bounds.barsLen; + for (shadowIndex = 0; shadowIndex < shadowGroupsLn; shadowIndex++) { + anim.on('afteranimate', function() { + this.show(true); + }, shadowGroups[shadowIndex].getAt(j)); + } + } + } + else { + rendererAttributes = me.renderer(sprite, store.getAt(i), Ext.apply(barAttr, { hidden: false }), i, store); + sprite.setAttributes(Ext.apply(rendererAttributes, endSeriesStyle), true); + } + items[i].sprite = sprite; + } + + + ln = group.getCount(); + for (j = i; j < ln; j++) { + group.getAt(j).hide(true); + } + + if (me.stacked) { + + i = store.getCount(); + } + + + if (enableShadows) { + for (shadowIndex = 0; shadowIndex < shadowGroupsLn; shadowIndex++) { + shadowGroup = shadowGroups[shadowIndex]; + ln = shadowGroup.getCount(); + for (j = i; j < ln; j++) { + shadowGroup.getAt(j).hide(true); + } + } + } + me.renderLabels(); + }, + + + onCreateLabel: function(storeItem, item, i, display) { + var me = this, + surface = me.chart.surface, + group = me.labelsGroup, + config = me.label, + endLabelStyle = Ext.apply({}, config, me.seriesLabelStyle || {}), + sprite; + + return surface.add(Ext.apply({ + type: 'text', + group: group + }, endLabelStyle || {})); + }, + + + onPlaceLabel: function(label, storeItem, item, i, display, animate, index) { + + + var me = this, + opt = me.bounds, + groupBarWidth = opt.groupBarWidth, + column = me.column, + chart = me.chart, + chartBBox = chart.chartBBox, + resizing = chart.resizing, + xValue = item.value[0], + yValue = item.value[1], + attr = item.attr, + config = me.label, + stacked = me.stacked, + stackedDisplay = config.stackedDisplay, + rotate = (config.orientation == 'vertical'), + field = [].concat(config.field), + format = config.renderer, + text, size, width, height, + zero = opt.zero, + insideStart = 'insideStart', + insideEnd = 'insideEnd', + outside = 'outside', + over = 'over', + under = 'under', + labelMarginX = 4, + labelMarginY = 2, + signed = opt.signed, + x, y, finalAttr; + + if (display == insideStart || display == insideEnd || display == outside) { + if (stacked && (display == outside)) { + + + label.hide(true); + return; + } + label.setAttributes({ + + + style: undefined + }); + text = (Ext.isNumber(index) ? format(storeItem.get(field[index]), label, storeItem, item, i, display, animate, index) : ''); + label.setAttributes({ + + text: text + }); + size = me.getLabelSize(text, label.attr.style); + width = size.width; + height = size.height; + if (column) { + + + + + + if (!width || !height || (stacked && (attr.height < height))) { + label.hide(true); + return; + } + + + x = attr.x + (rotate ? groupBarWidth/2 : (groupBarWidth - width)/2); + + + if (display == outside) { + var free = (yValue >= 0 ? (attr.y - chartBBox.y) : (chartBBox.y + chartBBox.height - attr.y - attr.height)); + if (free < height + labelMarginY) { + display = insideEnd; + } + } + + + + if (!stacked && (display != outside)) { + if (height + labelMarginY > attr.height) { + display = outside; + } + } + + + + if (!y) { + y = attr.y; + if (yValue >= 0) { + switch (display) { + case insideStart: y += attr.height + (rotate ? -labelMarginY : -height/2); break; + case insideEnd: y += (rotate ? height + labelMarginX : height/2); break; + case outside: y += (rotate ? -labelMarginY : -height/2); break; + } + } else { + switch (display) { + case insideStart: y += (rotate ? height + labelMarginY : height/2); break; + case insideEnd: y += (rotate ? attr.height - labelMarginY : attr.height - height/2); break; + case outside: y += (rotate ? attr.height + height + labelMarginY : attr.height + height/2); break; + } + } + } + } + else { + + + + + if (!width || !height || (stacked && !attr.width)) { + label.hide(true); + return; + } + + + y = attr.y + (rotate ? (groupBarWidth + height)/2 : groupBarWidth/2); + + + if (display == outside) { + var free = (yValue >= 0 ? (chartBBox.x + chartBBox.width - attr.x - attr.width) : (attr.x - chartBBox.x)); + if (free < width + labelMarginX) { + display = insideEnd; + } + } + + + + + if ((display != outside) && !rotate) { + if (width + labelMarginX > attr.width) { + if (stacked) { + if (height > attr.width) { + label.hide(true); + return; + } + x = attr.x + attr.width/2; + y = attr.y + attr.height - (attr.height - width)/2; + rotate = true; + } else { + display = outside; + } + } + } + + + + if (!x) { + x = attr.x; + if (yValue >= 0) { + switch (display) { + case insideStart: x += (rotate ? width/2 : labelMarginX); break; + case insideEnd: x += attr.width + (rotate ? -width/2 : -width - labelMarginX); break; + case outside: x += attr.width + (rotate ? width/2 : labelMarginX); break; + } + } else { + switch (display) { + case insideStart: x += attr.width + (rotate ? -width/2 : -width - labelMarginX); break; + case insideEnd: x += (rotate ? width/2 : labelMarginX); break; + case outside: x += (rotate ? -width/2 : -width - labelMarginX); break; + } + } + } + } + } else if (display == over || display == under) { + if (stacked && stackedDisplay) { + + + + text = label.attr.text; + label.setAttributes({ + + + style: Ext.applyIf((label.attr && label.attr.style) || {}, + { + 'font-weight':'bold', + 'font-size':'14px' + } + ) + }); + + size = me.getLabelSize(text, label.attr.style); + width = size.width; + height = size.height; + + switch (display) { + case over: + if (column) { + x = attr.x + (rotate ? groupBarWidth/2 : (groupBarWidth - width)/2); + y = zero - (item.totalDim - item.totalNegDim) - height/2 - labelMarginY; + } else { + x = zero + (item.totalDim - item.totalNegDim) + labelMarginX; + y = attr.y + (rotate ? (groupBarWidth + height)/2 : groupBarWidth/2); + } + break; + case under: + if (column) { + x = attr.x + (rotate ? groupBarWidth/2 : (groupBarWidth - width)/2); + y = zero + item.totalNegDim + height/2; + } else { + x = zero - item.totalNegDim - width - labelMarginX; + y = attr.y + (rotate ? (groupBarWidth + height)/2 : groupBarWidth/2); + } + break; + } + } + } + + if (x == undefined || y == undefined) { + + label.hide(true); + return; + } + + label.isOutside = (display == outside); + label.setAttributes({ + text: text + }); + + + finalAttr = { + x: x, + y: y + }; + + if (rotate) { + finalAttr.rotate = { + x: x, + y: y, + degrees: 270 + }; + } + + if (animate && resizing) { + if (column) { + x = attr.x + attr.width / 2; + y = zero; + } else { + x = zero; + y = attr.y + attr.height / 2; + } + label.setAttributes({ + x: x, + y: y + }, true); + if (rotate) { + label.setAttributes({ + rotate: { + x: x, + y: y, + degrees: 270 + } + }, true); + } + } + + if (animate) { + me.onAnimate(label, { to: finalAttr }); + } + else { + label.setAttributes(Ext.apply(finalAttr, { + hidden: false + }), true); + } + }, + + + getLabelSize: function(value, labelStyle) { + var tester = this.testerLabel, + config = this.label, + endLabelStyle = Ext.apply({}, config, labelStyle, this.seriesLabelStyle || {}), + rotated = config.orientation === 'vertical', + bbox, w, h, + undef; + if (!tester) { + tester = this.testerLabel = this.chart.surface.add(Ext.apply({ + type: 'text', + opacity: 0 + }, endLabelStyle)); + } + tester.setAttributes({ + style: labelStyle, + text: value + }, true); + + + bbox = tester.getBBox(); + w = bbox.width; + h = bbox.height; + return { + width: rotated ? h : w, + height: rotated ? w : h + }; + }, + + + onAnimate: function(sprite, attr) { + sprite.show(); + return this.callParent(arguments); + }, + + isItemInPoint: function(x, y, item) { + var bbox = item.sprite.getBBox(); + return bbox.x <= x && bbox.y <= y + && (bbox.x + bbox.width) >= x + && (bbox.y + bbox.height) >= y; + }, + + + hideAll: function(index) { + var axes = this.chart.axes, + axesItems = axes.items, + ln = axesItems.length, + i = 0; + + index = (isNaN(this._index) ? index : this._index) || 0; + + if (!this.__excludes) { + this.__excludes = []; + } + + this.__excludes[index] = true; + this.drawSeries(); + + for (i; i < ln; i++) { + axesItems[i].drawAxis(); + } + }, + + + showAll: function(index) { + var axes = this.chart.axes, + axesItems = axes.items, + ln = axesItems.length, + i = 0; + + index = (isNaN(this._index) ? index : this._index) || 0; + + if (!this.__excludes) { + this.__excludes = []; + } + + this.__excludes[index] = false; + this.drawSeries(); + + for (i; i < ln; i++) { + axesItems[i].drawAxis(); + } + }, + + + getLegendColor: function(index) { + var me = this, + colorLength = me.colorArrayStyle.length; + + if (me.style && me.style.fill) { + return me.style.fill; + } else { + return me.colorArrayStyle[index % colorLength]; + } + }, + + highlightItem: function(item) { + this.callParent(arguments); + this.renderLabels(); + }, + + unHighlightItem: function() { + this.callParent(arguments); + this.renderLabels(); + }, + + cleanHighlights: function() { + this.callParent(arguments); + this.renderLabels(); + } +}); + + +Ext.define('Ext.chart.series.Column', { + + + + alternateClassName: ['Ext.chart.ColumnSeries', 'Ext.chart.ColumnChart', 'Ext.chart.StackedColumnChart'], + + extend: Ext.chart.series.Bar , + + + + type: 'column', + alias: 'series.column', + + column: true, + + + boundColumn: false, + + + + + xPadding: 10, + + + yPadding: 0 +}); + + +Ext.define('Ext.chart.series.Gauge', { + + + + extend: Ext.chart.series.Series , + + + + type: "gauge", + alias: 'series.gauge', + + rad: Math.PI / 180, + + + highlightDuration: 150, + + + angleField: false, + + + needle: false, + + + donut: false, + + + showInLegend: false, + + + style: {}, + + constructor: function(config) { + this.callParent(arguments); + var me = this, + chart = me.chart, + surface = chart.surface, + store = chart.store, + shadow = chart.shadow, i, l, cfg; + Ext.apply(me, config, { + shadowAttributes: [{ + "stroke-width": 6, + "stroke-opacity": 1, + stroke: 'rgb(200, 200, 200)', + translate: { + x: 1.2, + y: 2 + } + }, + { + "stroke-width": 4, + "stroke-opacity": 1, + stroke: 'rgb(150, 150, 150)', + translate: { + x: 0.9, + y: 1.5 + } + }, + { + "stroke-width": 2, + "stroke-opacity": 1, + stroke: 'rgb(100, 100, 100)', + translate: { + x: 0.6, + y: 1 + } + }] + }); + me.group = surface.getGroup(me.seriesId); + if (shadow) { + for (i = 0, l = me.shadowAttributes.length; i < l; i++) { + me.shadowGroups.push(surface.getGroup(me.seriesId + '-shadows' + i)); + } + } + surface.customAttributes.segment = function(opt) { + return me.getSegment(opt); + }; + }, + + + initialize: function() { + var me = this, + store = me.chart.getChartStore(), + data = store.data.items, + label = me.label, + ln = data.length; + + me.yField = []; + if (label && label.field && ln > 0) { + me.yField.push(data[0].get(label.field)); + } + }, + + + getSegment: function(opt) { + var me = this, + rad = me.rad, + cos = Math.cos, + sin = Math.sin, + abs = Math.abs, + x = me.centerX, + y = me.centerY, + x1 = 0, x2 = 0, x3 = 0, x4 = 0, + y1 = 0, y2 = 0, y3 = 0, y4 = 0, + delta = 1e-2, + r = opt.endRho - opt.startRho, + startAngle = opt.startAngle, + endAngle = opt.endAngle, + midAngle = (startAngle + endAngle) / 2 * rad, + margin = opt.margin || 0, + flag = abs(endAngle - startAngle) > 180, + a1 = Math.min(startAngle, endAngle) * rad, + a2 = Math.max(startAngle, endAngle) * rad, + singleSlice = false; + + x += margin * cos(midAngle); + y += margin * sin(midAngle); + + x1 = x + opt.startRho * cos(a1); + y1 = y + opt.startRho * sin(a1); + + x2 = x + opt.endRho * cos(a1); + y2 = y + opt.endRho * sin(a1); + + x3 = x + opt.startRho * cos(a2); + y3 = y + opt.startRho * sin(a2); + + x4 = x + opt.endRho * cos(a2); + y4 = y + opt.endRho * sin(a2); + + if (abs(x1 - x3) <= delta && abs(y1 - y3) <= delta) { + singleSlice = true; + } + + if (singleSlice) { + return { + path: [ + ["M", x1, y1], + ["L", x2, y2], + ["A", opt.endRho, opt.endRho, 0, +flag, 1, x4, y4], + ["Z"]] + }; + } else { + return { + path: [ + ["M", x1, y1], + ["L", x2, y2], + ["A", opt.endRho, opt.endRho, 0, +flag, 1, x4, y4], + ["L", x3, y3], + ["A", opt.startRho, opt.startRho, 0, +flag, 0, x1, y1], + ["Z"]] + }; + } + }, + + + calcMiddle: function(item) { + var me = this, + rad = me.rad, + slice = item.slice, + x = me.centerX, + y = me.centerY, + startAngle = slice.startAngle, + endAngle = slice.endAngle, + radius = Math.max(('rho' in slice) ? slice.rho: me.radius, me.label.minMargin), + donut = +me.donut, + a1 = Math.min(startAngle, endAngle) * rad, + a2 = Math.max(startAngle, endAngle) * rad, + midAngle = -(a1 + (a2 - a1) / 2), + xm = x + (item.endRho + item.startRho) / 2 * Math.cos(midAngle), + ym = y - (item.endRho + item.startRho) / 2 * Math.sin(midAngle); + + item.middle = { + x: xm, + y: ym + }; + }, + + + drawSeries: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + group = me.group, + animate = me.chart.animate, + axis = me.chart.axes.get(0), + minimum = axis && axis.minimum || me.minimum || 0, + maximum = axis && axis.maximum || me.maximum || 0, + field = me.angleField || me.field || me.xField, + surface = chart.surface, + chartBBox = chart.chartBBox, + rad = me.rad, + donut = +me.donut, + values = {}, + items = [], + seriesStyle = me.seriesStyle, + seriesLabelStyle = me.seriesLabelStyle, + colorArrayStyle = me.colorArrayStyle, + colorArrayLength = colorArrayStyle && colorArrayStyle.length || 0, + cos = Math.cos, + sin = Math.sin, + rendererAttributes, centerX, centerY, slice, slices, sprite, value, + item, ln, record, i, j, startAngle, endAngle, middleAngle, sliceLength, path, + p, spriteOptions, bbox, splitAngle, sliceA, sliceB; + + Ext.apply(seriesStyle, me.style || {}); + + me.setBBox(); + bbox = me.bbox; + + + if (me.colorSet) { + colorArrayStyle = me.colorSet; + colorArrayLength = colorArrayStyle.length; + } + + + if (!store || !store.getCount() || me.seriesIsHidden) { + me.hide(); + me.items = []; + return; + } + + centerX = me.centerX = chartBBox.x + (chartBBox.width / 2); + centerY = me.centerY = chartBBox.y + chartBBox.height; + me.radius = Math.min(centerX - chartBBox.x, centerY - chartBBox.y); + me.slices = slices = []; + me.items = items = []; + + if (!me.value) { + record = store.getAt(0); + me.value = record.get(field); + } + + value = me.value; + if (me.needle) { + sliceA = { + series: me, + value: value, + startAngle: -180, + endAngle: 0, + rho: me.radius + }; + splitAngle = -180 * (1 - (value - minimum) / (maximum - minimum)); + slices.push(sliceA); + } else { + splitAngle = -180 * (1 - (value - minimum) / (maximum - minimum)); + sliceA = { + series: me, + value: value, + startAngle: -180, + endAngle: splitAngle, + rho: me.radius + }; + sliceB = { + series: me, + value: me.maximum - value, + startAngle: splitAngle, + endAngle: 0, + rho: me.radius + }; + slices.push(sliceA, sliceB); + } + + + for (i = 0, ln = slices.length; i < ln; i++) { + slice = slices[i]; + sprite = group.getAt(i); + + rendererAttributes = Ext.apply({ + segment: { + startAngle: slice.startAngle, + endAngle: slice.endAngle, + margin: 0, + rho: slice.rho, + startRho: slice.rho * +donut / 100, + endRho: slice.rho + } + }, Ext.apply(seriesStyle, colorArrayStyle && { fill: colorArrayStyle[i % colorArrayLength] } || {})); + + item = Ext.apply({}, + rendererAttributes.segment, { + slice: slice, + series: me, + storeItem: record, + index: i + }); + items[i] = item; + + if (!sprite) { + spriteOptions = Ext.apply({ + type: "path", + group: group + }, Ext.apply(seriesStyle, colorArrayStyle && { fill: colorArrayStyle[i % colorArrayLength] } || {})); + sprite = surface.add(Ext.apply(spriteOptions, rendererAttributes)); + } + slice.sprite = slice.sprite || []; + item.sprite = sprite; + slice.sprite.push(sprite); + if (animate) { + rendererAttributes = me.renderer(sprite, record, rendererAttributes, i, store); + sprite._to = rendererAttributes; + me.onAnimate(sprite, { + to: rendererAttributes + }); + } else { + rendererAttributes = me.renderer(sprite, record, Ext.apply(rendererAttributes, { + hidden: false + }), i, store); + sprite.setAttributes(rendererAttributes, true); + } + } + + if (me.needle) { + splitAngle = splitAngle * Math.PI / 180; + + if (!me.needleSprite) { + me.needleSprite = me.chart.surface.add({ + type: 'path', + path: ['M', centerX + (me.radius * +donut / 100) * cos(splitAngle), + centerY + -Math.abs((me.radius * +donut / 100) * sin(splitAngle)), + 'L', centerX + me.radius * cos(splitAngle), + centerY + -Math.abs(me.radius * sin(splitAngle))], + 'stroke-width': 4, + 'stroke': '#222' + }); + } else { + if (animate) { + me.onAnimate(me.needleSprite, { + to: { + path: ['M', centerX + (me.radius * +donut / 100) * cos(splitAngle), + centerY + -Math.abs((me.radius * +donut / 100) * sin(splitAngle)), + 'L', centerX + me.radius * cos(splitAngle), + centerY + -Math.abs(me.radius * sin(splitAngle))] + } + }); + } else { + me.needleSprite.setAttributes({ + type: 'path', + path: ['M', centerX + (me.radius * +donut / 100) * cos(splitAngle), + centerY + -Math.abs((me.radius * +donut / 100) * sin(splitAngle)), + 'L', centerX + me.radius * cos(splitAngle), + centerY + -Math.abs(me.radius * sin(splitAngle))] + }); + } + } + me.needleSprite.setAttributes({ + hidden: false + }, true); + } + + delete me.value; + }, + + + setValue: function (value) { + this.value = value; + this.drawSeries(); + }, + + + onCreateLabel: function(storeItem, item, i, display) {}, + + + onPlaceLabel: function(label, storeItem, item, i, display, animate, index) {}, + + + onPlaceCallout: function() {}, + + + onAnimate: function(sprite, attr) { + sprite.show(); + return this.callParent(arguments); + }, + + isItemInPoint: function(x, y, item, i) { + var me = this, + cx = me.centerX, + cy = me.centerY, + abs = Math.abs, + dx = abs(x - cx), + dy = abs(y - cy), + startAngle = item.startAngle, + endAngle = item.endAngle, + rho = Math.sqrt(dx * dx + dy * dy), + angle = Math.atan2(y - cy, x - cx) / me.rad; + + + return (i === 0) && (angle >= startAngle && angle < endAngle && + rho >= item.startRho && rho <= item.endRho); + }, + + + getLegendColor: function(index) { + var colors = this.colorSet || this.colorArrayStyle; + return colors[index % colors.length]; + } +}); + + + +Ext.define('Ext.chart.series.Line', { + + + + extend: Ext.chart.series.Cartesian , + + alternateClassName: ['Ext.chart.LineSeries', 'Ext.chart.LineChart'], + + + + + + type: 'line', + + alias: 'series.line', + + + selectionTolerance: 20, + + + showMarkers: true, + + + markerConfig: {}, + + + style: {}, + + + smooth: false, + + + defaultSmoothness: 3, + + + fill: false, + + constructor: function(config) { + this.callParent(arguments); + var me = this, + surface = me.chart.surface, + shadow = me.chart.shadow, + i, l; + config.highlightCfg = Ext.Object.merge({ 'stroke-width': 3 }, config.highlightCfg); + Ext.apply(me, config, { + shadowAttributes: [{ + "stroke-width": 6, + "stroke-opacity": 0.05, + stroke: 'rgb(0, 0, 0)', + translate: { + x: 1, + y: 1 + } + }, { + "stroke-width": 4, + "stroke-opacity": 0.1, + stroke: 'rgb(0, 0, 0)', + translate: { + x: 1, + y: 1 + } + }, { + "stroke-width": 2, + "stroke-opacity": 0.15, + stroke: 'rgb(0, 0, 0)', + translate: { + x: 1, + y: 1 + } + }] + }); + me.group = surface.getGroup(me.seriesId); + if (me.showMarkers) { + me.markerGroup = surface.getGroup(me.seriesId + '-markers'); + } + if (shadow) { + for (i = 0, l = me.shadowAttributes.length; i < l; i++) { + me.shadowGroups.push(surface.getGroup(me.seriesId + '-shadows' + i)); + } + } + }, + + + shrink: function(xValues, yValues, size) { + + var len = xValues.length, + ratio = Math.floor(len / size), + i = 1, + xSum = 0, + ySum = 0, + xRes = [+xValues[0]], + yRes = [+yValues[0]]; + + for (; i < len; ++i) { + xSum += +xValues[i] || 0; + ySum += +yValues[i] || 0; + if (i % ratio == 0) { + xRes.push(xSum/ratio); + yRes.push(ySum/ratio); + xSum = 0; + ySum = 0; + } + } + return { + x: xRes, + y: yRes + }; + }, + + + drawSeries: function() { + var me = this, + chart = me.chart, + chartAxes = chart.axes, + store = chart.getChartStore(), + data = store.data.items, + record, + storeCount = store.getCount(), + surface = me.chart.surface, + bbox = {}, + group = me.group, + showMarkers = me.showMarkers, + markerGroup = me.markerGroup, + enableShadows = chart.shadow, + shadowGroups = me.shadowGroups, + shadowAttributes = me.shadowAttributes, + smooth = me.smooth, + lnsh = shadowGroups.length, + dummyPath = ["M"], + path = ["M"], + renderPath = ["M"], + smoothPath = ["M"], + markerIndex = chart.markerIndex, + axes = [].concat(me.axis), + shadowBarAttr, + xValues = [], + xValueMap = {}, + yValues = [], + yValueMap = {}, + onbreak = false, + storeIndices = [], + markerStyle = Ext.apply({}, me.markerStyle), + seriesStyle = me.seriesStyle, + colorArrayStyle = me.colorArrayStyle, + colorArrayLength = colorArrayStyle && colorArrayStyle.length || 0, + isNumber = Ext.isNumber, + seriesIdx = me.seriesIdx, + boundAxes = me.getAxesForXAndYFields(), + boundXAxis = boundAxes.xAxis, + boundYAxis = boundAxes.yAxis, + xAxisType = boundXAxis ? chartAxes.get(boundXAxis).type : '', + yAxisType = boundYAxis ? chartAxes.get(boundYAxis).type : '', + shadows, shadow, shindex, fromPath, fill, fillPath, rendererAttributes, + x, y, prevX, prevY, firstX, firstY, markerCount, i, j, ln, axis, ends, marker, markerAux, item, xValue, + yValue, coords, xScale, yScale, minX, maxX, minY, maxY, line, animation, endMarkerStyle, + endLineStyle, type, count, opacity, lineOpacity, fillOpacity, fillDefaultValue; + + if (me.fireEvent('beforedraw', me) === false) { + return; + } + + + if (!storeCount || me.seriesIsHidden) { + me.hide(); + me.items = []; + if (me.line) { + me.line.hide(true); + if (me.line.shadows) { + shadows = me.line.shadows; + for (j = 0, lnsh = shadows.length; j < lnsh; j++) { + shadow = shadows[j]; + shadow.hide(true); + } + } + if (me.fillPath) { + me.fillPath.hide(true); + } + } + me.line = null; + me.fillPath = null; + return; + } + + + endMarkerStyle = Ext.apply(markerStyle || {}, me.markerConfig, { + fill: me.seriesStyle.fill || colorArrayStyle[me.themeIdx % colorArrayStyle.length] + }); + type = endMarkerStyle.type; + delete endMarkerStyle.type; + endLineStyle = seriesStyle; + + + if (!endLineStyle['stroke-width']) { + endLineStyle['stroke-width'] = 0.5; + } + + + opacity = 'opacity' in endLineStyle ? endLineStyle.opacity : 1; + fillDefaultValue = 'opacity' in endLineStyle ? endLineStyle.opacity : 0.3; + lineOpacity = 'lineOpacity' in endLineStyle ? endLineStyle.lineOpacity : opacity; + fillOpacity = 'fillOpacity' in endLineStyle ? endLineStyle.fillOpacity : fillDefaultValue; + + + + if (markerIndex && markerGroup && markerGroup.getCount()) { + for (i = 0; i < markerIndex; i++) { + marker = markerGroup.getAt(i); + markerGroup.remove(marker); + markerGroup.add(marker); + markerAux = markerGroup.getAt(markerGroup.getCount() - 2); + marker.setAttributes({ + x: 0, + y: 0, + translate: { + x: markerAux.attr.translation.x, + y: markerAux.attr.translation.y + } + }, true); + } + } + + me.unHighlightItem(); + me.cleanHighlights(); + + me.setBBox(); + bbox = me.bbox; + me.clipRect = [bbox.x, bbox.y, bbox.width, bbox.height]; + + if (axis = chartAxes.get(boundXAxis)) { + ends = axis.applyData(); + minX = ends.from; + maxX = ends.to; + } + + if (axis = chartAxes.get(boundYAxis)) { + ends = axis.applyData(); + minY = ends.from; + maxY = ends.to; + } + + + if (me.xField && !Ext.isNumber(minX)) { + axis = me.getMinMaxXValues(); + minX = axis[0]; + maxX = axis[1]; + } + + if (me.yField && !Ext.isNumber(minY)) { + axis = me.getMinMaxYValues(); + minY = axis[0]; + maxY = axis[1]; + } + + if (isNaN(minX)) { + minX = 0; + xScale = bbox.width / ((storeCount - 1) || 1); + } + else { + xScale = bbox.width / ((maxX - minX) || (storeCount -1) || 1); + } + + if (isNaN(minY)) { + minY = 0; + yScale = bbox.height / ((storeCount - 1) || 1); + } + else { + yScale = bbox.height / ((maxY - minY) || (storeCount - 1) || 1); + } + + for (i = 0, ln = data.length; i < ln; i++) { + record = data[i]; + xValue = record.get(me.xField); + if (xAxisType == 'Time' && typeof xValue == "string") { + xValue = Date.parse(xValue); + } + + if (typeof xValue == 'string' || typeof xValue == 'object' && !Ext.isDate(xValue) + + || boundXAxis && chartAxes.get(boundXAxis) && chartAxes.get(boundXAxis).type == 'Category') { + if (xValue in xValueMap) { + xValue = xValueMap[xValue]; + } else { + xValue = xValueMap[xValue] = i; + } + } + + + yValue = record.get(me.yField); + if (yAxisType == 'Time' && typeof yValue == "string") { + yValue = Date.parse(yValue); + } + + if (typeof yValue == 'undefined' || (typeof yValue == 'string' && !yValue)) { + continue; + } + + if (typeof yValue == 'string' || typeof yValue == 'object' && !Ext.isDate(yValue) + + || boundYAxis && chartAxes.get(boundYAxis) && chartAxes.get(boundYAxis).type == 'Category') { + yValue = i; + } + storeIndices.push(i); + xValues.push(xValue); + yValues.push(yValue); + } + + ln = xValues.length; + if (ln > bbox.width) { + coords = me.shrink(xValues, yValues, bbox.width); + xValues = coords.x; + yValues = coords.y; + } + + me.items = []; + + count = 0; + ln = xValues.length; + for (i = 0; i < ln; i++) { + xValue = xValues[i]; + yValue = yValues[i]; + if (yValue === false) { + if (path.length == 1) { + path = []; + } + onbreak = true; + me.items.push(false); + continue; + } else { + x = (bbox.x + (xValue - minX) * xScale).toFixed(2); + y = ((bbox.y + bbox.height) - (yValue - minY) * yScale).toFixed(2); + if (onbreak) { + onbreak = false; + path.push('M'); + } + path = path.concat([x, y]); + } + if ((typeof firstY == 'undefined') && (typeof y != 'undefined')) { + firstY = y; + firstX = x; + } + + if (!me.line || chart.resizing) { + dummyPath = dummyPath.concat([x, bbox.y + bbox.height / 2]); + } + + + if (chart.animate && chart.resizing && me.line) { + me.line.setAttributes({ + path: dummyPath, + opacity: lineOpacity + }, true); + if (me.fillPath) { + me.fillPath.setAttributes({ + path: dummyPath, + opacity: fillOpacity + }, true); + } + if (me.line.shadows) { + shadows = me.line.shadows; + for (j = 0, lnsh = shadows.length; j < lnsh; j++) { + shadow = shadows[j]; + shadow.setAttributes({ + path: dummyPath + }, true); + } + } + } + if (showMarkers) { + marker = markerGroup.getAt(count++); + if (!marker) { + marker = Ext.chart.Shape[type](surface, Ext.apply({ + group: [group, markerGroup], + x: 0, y: 0, + translate: { + x: +(prevX || x), + y: prevY || (bbox.y + bbox.height / 2) + }, + value: '"' + xValue + ', ' + yValue + '"', + zIndex: 4000 + }, endMarkerStyle)); + marker._to = { + translate: { + x: +x, + y: +y + } + }; + } else { + marker.setAttributes({ + value: '"' + xValue + ', ' + yValue + '"', + x: 0, y: 0, + hidden: false + }, true); + marker._to = { + translate: { + x: +x, + y: +y + } + }; + } + } + me.items.push({ + series: me, + value: [xValue, yValue], + point: [x, y], + sprite: marker, + storeItem: store.getAt(storeIndices[i]) + }); + prevX = x; + prevY = y; + } + + if (path.length <= 1) { + + return; + } + + if (me.smooth) { + smoothPath = Ext.draw.Draw.smooth(path, isNumber(smooth) ? smooth : me.defaultSmoothness); + } + + renderPath = smooth ? smoothPath : path; + + + if (chart.markerIndex && me.previousPath) { + fromPath = me.previousPath; + if (!smooth) { + Ext.Array.erase(fromPath, 1, 2); + } + } else { + fromPath = path; + } + + + if (!me.line) { + me.line = surface.add(Ext.apply({ + type: 'path', + group: group, + path: dummyPath, + stroke: endLineStyle.stroke || endLineStyle.fill + }, endLineStyle || {})); + me + + + me.line.setAttributes({ + opacity: lineOpacity + }, true); + + if (enableShadows) { + me.line.setAttributes(Ext.apply({}, me.shadowOptions), true); + } + + + me.line.setAttributes({ + fill: 'none', + zIndex: 3000 + }); + if (!endLineStyle.stroke && colorArrayLength) { + me.line.setAttributes({ + stroke: colorArrayStyle[me.themeIdx % colorArrayLength] + }, true); + } + if (enableShadows) { + + shadows = me.line.shadows = []; + for (shindex = 0; shindex < lnsh; shindex++) { + shadowBarAttr = shadowAttributes[shindex]; + shadowBarAttr = Ext.apply({}, shadowBarAttr, { path: dummyPath }); + shadow = surface.add(Ext.apply({}, { + type: 'path', + group: shadowGroups[shindex] + }, shadowBarAttr)); + shadows.push(shadow); + } + } + } + if (me.fill) { + fillPath = renderPath.concat([ + ["L", x, bbox.y + bbox.height], + ["L", firstX, bbox.y + bbox.height], + ["L", firstX, firstY] + ]); + if (!me.fillPath) { + me.fillPath = surface.add({ + group: group, + type: 'path', + fill: endLineStyle.fill || colorArrayStyle[me.themeIdx % colorArrayLength], + path: dummyPath + }); + } + } + markerCount = showMarkers && markerGroup.getCount(); + if (chart.animate) { + fill = me.fill; + line = me.line; + + rendererAttributes = me.renderer(line, false, { path: renderPath }, i, store); + Ext.apply(rendererAttributes, endLineStyle || {}, { + stroke: endLineStyle.stroke || endLineStyle.fill + }); + + delete rendererAttributes.fill; + line.show(true); + if (chart.markerIndex && me.previousPath) { + me.animation = animation = me.onAnimate(line, { + to: rendererAttributes, + from: { + path: fromPath + } + }); + } else { + me.animation = animation = me.onAnimate(line, { + to: rendererAttributes + }); + } + + if (enableShadows) { + shadows = line.shadows; + for(j = 0; j < lnsh; j++) { + shadows[j].show(true); + if (chart.markerIndex && me.previousPath) { + me.onAnimate(shadows[j], { + to: { path: renderPath }, + from: { path: fromPath } + }); + } else { + me.onAnimate(shadows[j], { + to: { path: renderPath } + }); + } + } + } + + if (fill) { + me.fillPath.show(true); + me.onAnimate(me.fillPath, { + to: Ext.apply({}, { + path: fillPath, + fill: endLineStyle.fill || colorArrayStyle[me.themeIdx % colorArrayLength], + 'stroke-width': 0, + opacity: fillOpacity + }, endLineStyle || {}) + }); + } + + if (showMarkers) { + count = 0; + for(i = 0; i < ln; i++) { + if (me.items[i]) { + item = markerGroup.getAt(count++); + if (item) { + rendererAttributes = me.renderer(item, store.getAt(i), item._to, i, store); + me.onAnimate(item, { + to: Ext.applyIf(rendererAttributes, endMarkerStyle || {}) + }); + item.show(true); + } + } + } + for(; count < markerCount; count++) { + item = markerGroup.getAt(count); + item.hide(true); + } + + + + + } + } else { + rendererAttributes = me.renderer(me.line, false, { path: renderPath, hidden: false }, i, store); + Ext.apply(rendererAttributes, endLineStyle || {}, { + stroke: endLineStyle.stroke || endLineStyle.fill + }); + + delete rendererAttributes.fill; + me.line.setAttributes(rendererAttributes, true); + me.line.setAttributes({ + opacity: lineOpacity + }, true); + + if (enableShadows) { + shadows = me.line.shadows; + for(j = 0; j < lnsh; j++) { + shadows[j].setAttributes({ + path: renderPath, + hidden: false + }, true); + } + } + if (me.fill) { + me.fillPath.setAttributes({ + path: fillPath, + hidden: false, + opacity: fillOpacity + }, true); + } + if (showMarkers) { + count = 0; + for(i = 0; i < ln; i++) { + if (me.items[i]) { + item = markerGroup.getAt(count++); + if (item) { + rendererAttributes = me.renderer(item, store.getAt(i), item._to, i, store); + item.setAttributes(Ext.apply(endMarkerStyle || {}, rendererAttributes || {}), true); + if (!item.attr.hidden) { + item.show(true); + } + } + } + } + for(; count < markerCount; count++) { + item = markerGroup.getAt(count); + item.hide(true); + } + } + } + + if (chart.markerIndex) { + if (me.smooth) { + Ext.Array.erase(path, 1, 2); + } else { + Ext.Array.splice(path, 1, 0, path[1], path[2]); + } + me.previousPath = path; + } + me.renderLabels(); + me.renderCallouts(); + + me.fireEvent('draw', me); + }, + + + onCreateLabel: function(storeItem, item, i, display) { + var me = this, + group = me.labelsGroup, + config = me.label, + bbox = me.bbox, + endLabelStyle = Ext.apply(config, me.seriesLabelStyle); + + return me.chart.surface.add(Ext.apply({ + 'type': 'text', + 'text-anchor': 'middle', + 'group': group, + 'x': item.point[0], + 'y': bbox.y + bbox.height / 2 + }, endLabelStyle || {})); + }, + + + onPlaceLabel: function(label, storeItem, item, i, display, animate, index) { + var me = this, + chart = me.chart, + resizing = chart.resizing, + config = me.label, + format = config.renderer, + field = config.field, + bbox = me.bbox, + x = item.point[0], + y = item.point[1], + radius = item.sprite.attr.radius, + bb, width, height; + + label.setAttributes({ + text: format(storeItem.get(field), label, storeItem, item, i, display, animate, index), + hidden: true + }, true); + + if (display == 'rotate') { + label.setAttributes({ + 'text-anchor': 'start', + 'rotation': { + x: x, + y: y, + degrees: -45 + } + }, true); + + bb = label.getBBox(); + width = bb.width; + height = bb.height; + x = x < bbox.x? bbox.x : x; + x = (x + width > bbox.x + bbox.width)? (x - (x + width - bbox.x - bbox.width)) : x; + y = (y - height < bbox.y)? bbox.y + height : y; + + } else if (display == 'under' || display == 'over') { + + bb = item.sprite.getBBox(); + bb.width = bb.width || (radius * 2); + bb.height = bb.height || (radius * 2); + y = y + (display == 'over'? -bb.height : bb.height); + + bb = label.getBBox(); + width = bb.width/2; + height = bb.height/2; + x = x - width < bbox.x? bbox.x + width : x; + x = (x + width > bbox.x + bbox.width) ? (x - (x + width - bbox.x - bbox.width)) : x; + y = y - height < bbox.y? bbox.y + height : y; + y = (y + height > bbox.y + bbox.height) ? (y - (y + height - bbox.y - bbox.height)) : y; + } + + if (me.chart.animate && !me.chart.resizing) { + label.show(true); + me.onAnimate(label, { + to: { + x: x, + y: y + } + }); + } else { + label.setAttributes({ + x: x, + y: y + }, true); + if (resizing && me.animation) { + me.animation.on('afteranimate', function() { + label.show(true); + }); + } else { + label.show(true); + } + } + }, + + + highlightItem: function() { + var me = this, + line = me.line; + + me.callParent(arguments); + if (line && !me.highlighted) { + if (!('__strokeWidth' in line)) { + line.__strokeWidth = parseFloat(line.attr['stroke-width']) || 0; + } + if (line.__anim) { + line.__anim.paused = true; + } + + line.__anim = new Ext.fx.Anim({ + target: line, + to: { + 'stroke-width': line.__strokeWidth + 3 + } + }); + me.highlighted = true; + } + }, + + + unHighlightItem: function() { + var me = this, + line = me.line, + width; + + me.callParent(arguments); + if (line && me.highlighted) { + width = line.__strokeWidth || parseFloat(line.attr['stroke-width']) || 0; + line.__anim = new Ext.fx.Anim({ + target: line, + to: { + 'stroke-width': width + } + }); + me.highlighted = false; + } + }, + + + onPlaceCallout : function(callout, storeItem, item, i, display, animate, index) { + if (!display) { + return; + } + + var me = this, + chart = me.chart, + surface = chart.surface, + resizing = chart.resizing, + config = me.callouts, + items = me.items, + prev = i == 0? false : items[i -1].point, + next = (i == items.length -1)? false : items[i +1].point, + cur = [+item.point[0], +item.point[1]], + dir, norm, normal, a, aprev, anext, + offsetFromViz = config.offsetFromViz || 30, + offsetToSide = config.offsetToSide || 10, + offsetBox = config.offsetBox || 3, + boxx, boxy, boxw, boxh, + p, clipRect = me.clipRect, + bbox = { + width: config.styles.width || 10, + height: config.styles.height || 10 + }, + x, y; + + + if (!prev) { + prev = cur; + } + if (!next) { + next = cur; + } + a = (next[1] - prev[1]) / (next[0] - prev[0]); + aprev = (cur[1] - prev[1]) / (cur[0] - prev[0]); + anext = (next[1] - cur[1]) / (next[0] - cur[0]); + + norm = Math.sqrt(1 + a * a); + dir = [1 / norm, a / norm]; + normal = [-dir[1], dir[0]]; + + + if (aprev > 0 && anext < 0 && normal[1] < 0 + || aprev < 0 && anext > 0 && normal[1] > 0) { + normal[0] *= -1; + normal[1] *= -1; + } else if (Math.abs(aprev) < Math.abs(anext) && normal[0] < 0 + || Math.abs(aprev) > Math.abs(anext) && normal[0] > 0) { + normal[0] *= -1; + normal[1] *= -1; + } + + x = cur[0] + normal[0] * offsetFromViz; + y = cur[1] + normal[1] * offsetFromViz; + + + boxx = x + (normal[0] > 0? 0 : -(bbox.width + 2 * offsetBox)); + boxy = y - bbox.height /2 - offsetBox; + boxw = bbox.width + 2 * offsetBox; + boxh = bbox.height + 2 * offsetBox; + + + + if (boxx < clipRect[0] || (boxx + boxw) > (clipRect[0] + clipRect[2])) { + normal[0] *= -1; + } + if (boxy < clipRect[1] || (boxy + boxh) > (clipRect[1] + clipRect[3])) { + normal[1] *= -1; + } + + + x = cur[0] + normal[0] * offsetFromViz; + y = cur[1] + normal[1] * offsetFromViz; + + + boxx = x + (normal[0] > 0? 0 : -(bbox.width + 2 * offsetBox)); + boxy = y - bbox.height /2 - offsetBox; + boxw = bbox.width + 2 * offsetBox; + boxh = bbox.height + 2 * offsetBox; + + if (chart.animate) { + + me.onAnimate(callout.lines, { + to: { + path: ["M", cur[0], cur[1], "L", x, y, "Z"] + } + }); + + if (callout.panel) { + callout.panel.setPosition(boxx, boxy, true); + } + } + else { + + callout.lines.setAttributes({ + path: ["M", cur[0], cur[1], "L", x, y, "Z"] + }, true); + + if (callout.panel) { + callout.panel.setPosition(boxx, boxy); + } + } + for (p in callout) { + callout[p].show(true); + } + }, + + isItemInPoint: function(x, y, item, i) { + var me = this, + items = me.items, + tolerance = me.selectionTolerance, + result = null, + prevItem, + nextItem, + prevPoint, + nextPoint, + ln, + x1, + y1, + x2, + y2, + xIntersect, + yIntersect, + dist1, dist2, dist, midx, midy, + sqrt = Math.sqrt, abs = Math.abs; + + nextItem = items[i]; + prevItem = i && items[i - 1]; + + if (i >= ln) { + prevItem = items[ln - 1]; + } + prevPoint = prevItem && prevItem.point; + nextPoint = nextItem && nextItem.point; + x1 = prevItem ? prevPoint[0] : nextPoint[0] - tolerance; + y1 = prevItem ? prevPoint[1] : nextPoint[1]; + x2 = nextItem ? nextPoint[0] : prevPoint[0] + tolerance; + y2 = nextItem ? nextPoint[1] : prevPoint[1]; + dist1 = sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1)); + dist2 = sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2)); + dist = Math.min(dist1, dist2); + + if (dist <= tolerance) { + return dist == dist1? prevItem : nextItem; + } + return false; + }, + + + toggleAll: function(show) { + var me = this, + i, ln, shadow, shadows; + if (!show) { + Ext.chart.series.Cartesian.prototype.hideAll.call(me); + } + else { + Ext.chart.series.Cartesian.prototype.showAll.call(me); + } + if (me.line) { + me.line.setAttributes({ + hidden: !show + }, true); + + if (me.line.shadows) { + for (i = 0, shadows = me.line.shadows, ln = shadows.length; i < ln; i++) { + shadow = shadows[i]; + shadow.setAttributes({ + hidden: !show + }, true); + } + } + } + if (me.fillPath) { + me.fillPath.setAttributes({ + hidden: !show + }, true); + } + }, + + + hideAll: function() { + this.toggleAll(false); + }, + + + showAll: function() { + this.toggleAll(true); + } +}); + + +Ext.define('Ext.chart.series.Pie', { + + + + alternateClassName: ['Ext.chart.PieSeries', 'Ext.chart.PieChart'], + + extend: Ext.chart.series.Series , + + + + type: "pie", + + alias: 'series.pie', + + accuracy: 100000, + + rad: Math.PI * 2 / 100000, + + + highlightDuration: 150, + + + angleField: false, + + + + + + + lengthField: false, + + + donut: false, + + + showInLegend: false, + + + + + style: {}, + + constructor: function(config) { + this.callParent(arguments); + var me = this, + chart = me.chart, + surface = chart.surface, + store = chart.store, + shadow = chart.shadow, i, l, cfg; + config.highlightCfg = Ext.merge({ + segment: { + margin: 20 + } + }, config.highlightCfg); + Ext.apply(me, config, { + shadowAttributes: [{ + "stroke-width": 6, + "stroke-opacity": 1, + stroke: 'rgb(200, 200, 200)', + translate: { + x: 1.2, + y: 2 + } + }, + { + "stroke-width": 4, + "stroke-opacity": 1, + stroke: 'rgb(150, 150, 150)', + translate: { + x: 0.9, + y: 1.5 + } + }, + { + "stroke-width": 2, + "stroke-opacity": 1, + stroke: 'rgb(100, 100, 100)', + translate: { + x: 0.6, + y: 1 + } + }] + }); + me.group = surface.getGroup(me.seriesId); + if (shadow) { + for (i = 0, l = me.shadowAttributes.length; i < l; i++) { + me.shadowGroups.push(surface.getGroup(me.seriesId + '-shadows' + i)); + } + } + surface.customAttributes.segment = function(opt) { + + + + var ans = me.getSegment(opt); + if (!ans.path || ans.path.length === 0) { + ans.path = ['M', 0, 0]; + } + return ans; + }; + me.__excludes = me.__excludes || []; + }, + + onRedraw: function(){ + this.initialize(); + }, + + + initialize: function() { + var me = this, + store = me.chart.getChartStore(), + data = store.data.items, + i, ln, rec; + + me.yField = []; + if (me.label.field) { + for (i = 0, ln = data.length; i < ln; i++) { + rec = data[i]; + me.yField.push(rec.get(me.label.field)); + } + } + }, + + + getSegment: function(opt) { + var me = this, + rad = me.rad, + cos = Math.cos, + sin = Math.sin, + x = me.centerX, + y = me.centerY, + x1 = 0, x2 = 0, x3 = 0, x4 = 0, + y1 = 0, y2 = 0, y3 = 0, y4 = 0, + x5 = 0, y5 = 0, x6 = 0, y6 = 0, + delta = 1e-2, + startAngle = opt.startAngle, + endAngle = opt.endAngle, + midAngle = (startAngle + endAngle) / 2 * rad, + margin = opt.margin || 0, + a1 = Math.min(startAngle, endAngle) * rad, + a2 = Math.max(startAngle, endAngle) * rad, + c1 = cos(a1), s1 = sin(a1), + c2 = cos(a2), s2 = sin(a2), + cm = cos(midAngle), sm = sin(midAngle), + flag = 0, hsqr2 = 0.7071067811865476; + + if (a2 - a1 < delta) { + return {path: ""}; + } + + if (margin !== 0) { + x += margin * cm; + y += margin * sm; + } + + x2 = x + opt.endRho * c1; + y2 = y + opt.endRho * s1; + + x4 = x + opt.endRho * c2; + y4 = y + opt.endRho * s2; + + x6 = x + opt.endRho * cm; + y6 = y + opt.endRho * sm; + + if (opt.startRho !== 0) { + x1 = x + opt.startRho * c1; + y1 = y + opt.startRho * s1; + + x3 = x + opt.startRho * c2; + y3 = y + opt.startRho * s2; + + x5 = x + opt.startRho * cm; + y5 = y + opt.startRho * sm; + + return { + path: [ + ["M", x2, y2], + ["A", opt.endRho, opt.endRho, 0, 0, 1, x6, y6], ["L", x6, y6], + ["A", opt.endRho, opt.endRho, 0, flag, 1, x4, y4], ["L", x4, y4], + ["L", x3, y3], + ["A", opt.startRho, opt.startRho, 0, flag, 0, x5, y5], ["L", x5, y5], + ["A", opt.startRho, opt.startRho, 0, 0, 0, x1, y1], ["L", x1, y1], + ["Z"] + ] + }; + } else { + return { + path: [ + ["M", x, y], + ["L", x2, y2], + ["A", opt.endRho, opt.endRho, 0, 0, 1, x6, y6], ["L", x6, y6], + ["A", opt.endRho, opt.endRho, 0, flag, 1, x4, y4], ["L", x4, y4], + ["L", x, y], + ["Z"] + ] + }; + } + }, + + + calcMiddle: function(item) { + var me = this, + rad = me.rad, + slice = item.slice, + x = me.centerX, + y = me.centerY, + startAngle = slice.startAngle, + endAngle = slice.endAngle, + donut = +me.donut, + midAngle = -(startAngle + endAngle) * rad / 2, + r = (item.endRho + item.startRho) / 2, + xm = x + r * Math.cos(midAngle), + ym = y - r * Math.sin(midAngle); + + item.middle = { + x: xm, + y: ym + }; + }, + + + drawSeries: function() { + var me = this, + store = me.chart.getChartStore(), + data = store.data.items, + record, + group = me.group, + animate = me.chart.animate, + field = me.angleField || me.field || me.xField, + lenField = [].concat(me.lengthField), + totalLenField = 0, + chart = me.chart, + surface = chart.surface, + chartBBox = chart.chartBBox, + enableShadows = chart.shadow, + shadowGroups = me.shadowGroups, + shadowAttributes = me.shadowAttributes, + lnsh = shadowGroups.length, + layers = lenField.length, + rhoAcum = 0, + donut = +me.donut, + layerTotals = [], + items = [], + totalField = 0, + maxLenField = 0, + angle = 0, + seriesStyle = me.seriesStyle, + colorArrayStyle = me.colorArrayStyle, + colorArrayLength = colorArrayStyle && colorArrayStyle.length || 0, + rendererAttributes, + shadowAttr, + shadows, + shadow, + shindex, + centerX, + centerY, + deltaRho, + first = 0, + slice, + slices, + sprite, + value, + item, + lenValue, + ln, + i, + j, + endAngle, + path, + p, + spriteOptions, bbox; + + Ext.apply(seriesStyle, me.style || {}); + + me.setBBox(); + bbox = me.bbox; + + + if (me.colorSet) { + colorArrayStyle = me.colorSet; + colorArrayLength = colorArrayStyle.length; + } + + + if (!store || !store.getCount() || me.seriesIsHidden) { + me.hide(); + me.items = []; + return; + } + + me.unHighlightItem(); + me.cleanHighlights(); + + centerX = me.centerX = chartBBox.x + (chartBBox.width / 2); + centerY = me.centerY = chartBBox.y + (chartBBox.height / 2); + me.radius = Math.min(centerX - chartBBox.x, centerY - chartBBox.y); + me.slices = slices = []; + me.items = items = []; + + for (i = 0, ln = data.length; i < ln; i++) { + record = data[i]; + if (this.__excludes && this.__excludes[i]) { + + continue; + } + totalField += +record.get(field); + if (lenField[0]) { + for (j = 0, totalLenField = 0; j < layers; j++) { + totalLenField += +record.get(lenField[j]); + } + layerTotals[i] = totalLenField; + maxLenField = Math.max(maxLenField, totalLenField); + } + } + + totalField = totalField || 1; + for (i = 0, ln = data.length; i < ln; i++) { + record = data[i]; + if (this.__excludes && this.__excludes[i]) { + value = 0; + } else { + value = record.get(field); + if (first == 0) { + first = 1; + } + } + + + if (first == 1) { + first = 2; + me.firstAngle = angle = me.accuracy * value / totalField / 2; + for (j = 0; j < i; j++) { + slices[j].startAngle = slices[j].endAngle = me.firstAngle; + } + } + + endAngle = angle - me.accuracy * value / totalField; + slice = { + series: me, + value: value, + startAngle: angle, + endAngle: endAngle, + storeItem: record + }; + if (lenField[0]) { + lenValue = +layerTotals[i]; + + slice.rho = Math.floor(me.radius / maxLenField * lenValue); + } else { + slice.rho = me.radius; + } + slices[i] = slice; + + (function () { + angle = endAngle; + })(); + } + + + if (enableShadows) { + for (i = 0, ln = slices.length; i < ln; i++) { + slice = slices[i]; + slice.shadowAttrs = []; + for (j = 0, rhoAcum = 0, shadows = []; j < layers; j++) { + sprite = group.getAt(i * layers + j); + deltaRho = lenField[j] ? store.getAt(i).get(lenField[j]) / layerTotals[i] * slice.rho: slice.rho; + + rendererAttributes = { + segment: { + startAngle: slice.startAngle, + endAngle: slice.endAngle, + margin: 0, + rho: slice.rho, + startRho: rhoAcum + (deltaRho * donut / 100), + endRho: rhoAcum + deltaRho + }, + hidden: !slice.value && (slice.startAngle % me.accuracy) == (slice.endAngle % me.accuracy) + }; + + for (shindex = 0, shadows = []; shindex < lnsh; shindex++) { + shadowAttr = shadowAttributes[shindex]; + shadow = shadowGroups[shindex].getAt(i); + if (!shadow) { + shadow = chart.surface.add(Ext.apply({}, { + type: 'path', + group: shadowGroups[shindex], + strokeLinejoin: "round" + }, rendererAttributes, shadowAttr)); + } + shadowAttr = me.renderer(shadow, store.getAt(i), Ext.apply({}, rendererAttributes, shadowAttr), i, store); + if (animate) { + me.onAnimate(shadow, { + to: shadowAttr + }); + } else { + shadow.setAttributes(shadowAttr, true); + } + shadows.push(shadow); + } + slice.shadowAttrs[j] = shadows; + } + } + } + + for (i = 0, ln = slices.length; i < ln; i++) { + slice = slices[i]; + for (j = 0, rhoAcum = 0; j < layers; j++) { + sprite = group.getAt(i * layers + j); + deltaRho = lenField[j] ? store.getAt(i).get(lenField[j]) / layerTotals[i] * slice.rho: slice.rho; + + rendererAttributes = Ext.apply({ + segment: { + startAngle: slice.startAngle, + endAngle: slice.endAngle, + margin: 0, + rho: slice.rho, + startRho: rhoAcum + (deltaRho * donut / 100), + endRho: rhoAcum + deltaRho + }, + hidden: (!slice.value && (slice.startAngle % me.accuracy) == (slice.endAngle % me.accuracy)) + }, Ext.apply(seriesStyle, colorArrayStyle && { fill: colorArrayStyle[(layers > 1? j : i) % colorArrayLength] } || {})); + item = Ext.apply({}, + rendererAttributes.segment, { + slice: slice, + series: me, + storeItem: slice.storeItem, + index: i + }); + me.calcMiddle(item); + if (enableShadows) { + item.shadows = slice.shadowAttrs[j]; + } + items[i] = item; + + if (!sprite) { + spriteOptions = Ext.apply({ + type: "path", + group: group, + middle: item.middle + }, Ext.apply(seriesStyle, colorArrayStyle && { fill: colorArrayStyle[(layers > 1? j : i) % colorArrayLength] } || {})); + sprite = surface.add(Ext.apply(spriteOptions, rendererAttributes)); + } + slice.sprite = slice.sprite || []; + item.sprite = sprite; + slice.sprite.push(sprite); + slice.point = [item.middle.x, item.middle.y]; + if (animate) { + rendererAttributes = me.renderer(sprite, store.getAt(i), rendererAttributes, i, store); + sprite._to = rendererAttributes; + sprite._animating = true; + me.onAnimate(sprite, { + to: rendererAttributes, + listeners: { + afteranimate: { + fn: function() { + this._animating = false; + }, + scope: sprite + } + } + }); + } else { + rendererAttributes = me.renderer(sprite, store.getAt(i), Ext.apply(rendererAttributes, { + hidden: false + }), i, store); + sprite.setAttributes(rendererAttributes, true); + } + rhoAcum += deltaRho; + } + } + + + ln = group.getCount(); + for (i = 0; i < ln; i++) { + if (!slices[(i / layers) >> 0] && group.getAt(i)) { + group.getAt(i).hide(true); + } + } + if (enableShadows) { + lnsh = shadowGroups.length; + for (shindex = 0; shindex < ln; shindex++) { + if (!slices[(shindex / layers) >> 0]) { + for (j = 0; j < lnsh; j++) { + if (shadowGroups[j].getAt(shindex)) { + shadowGroups[j].getAt(shindex).hide(true); + } + } + } + } + } + me.renderLabels(); + me.renderCallouts(); + }, + + + onCreateLabel: function(storeItem, item, i, display) { + var me = this, + group = me.labelsGroup, + config = me.label, + centerX = me.centerX, + centerY = me.centerY, + middle = item.middle, + endLabelStyle = Ext.apply(me.seriesLabelStyle || {}, config || {}); + + return me.chart.surface.add(Ext.apply({ + 'type': 'text', + 'text-anchor': 'middle', + 'group': group, + 'x': middle.x, + 'y': middle.y + }, endLabelStyle)); + }, + + + onPlaceLabel: function(label, storeItem, item, i, display, animate, index) { + var me = this, + chart = me.chart, + resizing = chart.resizing, + config = me.label, + format = config.renderer, + field = config.field, + centerX = me.centerX, + centerY = me.centerY, + middle = item.middle, + opt = { + x: middle.x, + y: middle.y + }, + x = middle.x - centerX, + y = middle.y - centerY, + from = {}, + rho = 1, + theta = Math.atan2(y, x || 1), + dg = theta * 180 / Math.PI, + prevDg; + + opt.hidden = false; + + if (this.__excludes && this.__excludes[i]) { + opt.hidden = true; + } + + function fixAngle(a) { + if (a < 0) { + a += 360; + } + return a % 360; + } + + label.setAttributes({ + text: format(storeItem.get(field), label, storeItem, item, i, display, animate, index) + }, true); + + switch (display) { + case 'outside': + rho = Math.sqrt(x * x + y * y) * 2; + + opt.x = rho * Math.cos(theta) + centerX; + opt.y = rho * Math.sin(theta) + centerY; + break; + + case 'rotate': + dg = fixAngle(dg); + dg = (dg > 90 && dg < 270) ? dg + 180: dg; + + prevDg = label.attr.rotation.degrees; + if (prevDg != null && Math.abs(prevDg - dg) > 180 * 0.5) { + if (dg > prevDg) { + dg -= 360; + } else { + dg += 360; + } + dg = dg % 360; + } else { + dg = fixAngle(dg); + } + + opt.rotate = { + degrees: dg, + x: opt.x, + y: opt.y + }; + break; + + default: + break; + } + + opt.translate = { + x: 0, y: 0 + }; + if (animate && !resizing && (display != 'rotate' || prevDg != null)) { + me.onAnimate(label, { + to: opt + }); + } else { + label.setAttributes(opt, true); + } + label._from = from; + }, + + + onPlaceCallout: function(callout, storeItem, item, i, display, animate, index) { + var me = this, + chart = me.chart, + centerX = me.centerX, + centerY = me.centerY, + middle = item.middle, + opt = { + x: middle.x, + y: middle.y + }, + x = middle.x - centerX, + y = middle.y - centerY, + rho = 1, + rhoCenter, + theta = Math.atan2(y, x || 1), + bbox = (callout && callout.label ? callout.label.getBBox() : {width:0,height:0}), + offsetFromViz = 20, + offsetToSide = 10, + offsetBox = 10, + p; + + if (!bbox.width || !bbox.height) { + return; + } + + + rho = item.endRho + offsetFromViz; + rhoCenter = (item.endRho + item.startRho) / 2 + (item.endRho - item.startRho) / 3; + + opt.x = rho * Math.cos(theta) + centerX; + opt.y = rho * Math.sin(theta) + centerY; + + x = rhoCenter * Math.cos(theta); + y = rhoCenter * Math.sin(theta); + + if (chart.animate) { + + me.onAnimate(callout.lines, { + to: { + path: ["M", x + centerX, y + centerY, "L", opt.x, opt.y, "Z", "M", opt.x, opt.y, "l", x > 0 ? offsetToSide: -offsetToSide, 0, "z"] + } + }); + + me.onAnimate(callout.box, { + to: { + x: opt.x + (x > 0 ? offsetToSide: -(offsetToSide + bbox.width + 2 * offsetBox)), + y: opt.y + (y > 0 ? ( - bbox.height - offsetBox / 2) : ( - bbox.height - offsetBox / 2)), + width: bbox.width + 2 * offsetBox, + height: bbox.height + 2 * offsetBox + } + }); + + me.onAnimate(callout.label, { + to: { + x: opt.x + (x > 0 ? (offsetToSide + offsetBox) : -(offsetToSide + bbox.width + offsetBox)), + y: opt.y + (y > 0 ? -bbox.height / 4: -bbox.height / 4) + } + }); + } else { + + callout.lines.setAttributes({ + path: ["M", x + centerX, y + centerY, "L", opt.x, opt.y, "Z", "M", opt.x, opt.y, "l", x > 0 ? offsetToSide: -offsetToSide, 0, "z"] + }, + true); + + callout.box.setAttributes({ + x: opt.x + (x > 0 ? offsetToSide: -(offsetToSide + bbox.width + 2 * offsetBox)), + y: opt.y + (y > 0 ? ( - bbox.height - offsetBox / 2) : ( - bbox.height - offsetBox / 2)), + width: bbox.width + 2 * offsetBox, + height: bbox.height + 2 * offsetBox + }, + true); + + callout.label.setAttributes({ + x: opt.x + (x > 0 ? (offsetToSide + offsetBox) : -(offsetToSide + bbox.width + offsetBox)), + y: opt.y + (y > 0 ? -bbox.height / 4: -bbox.height / 4) + }, + true); + } + for (p in callout) { + callout[p].show(true); + } + }, + + + onAnimate: function(sprite, attr) { + sprite.show(); + return this.callParent(arguments); + }, + + isItemInPoint: function(x, y, item, i) { + var me = this, + cx = me.centerX, + cy = me.centerY, + abs = Math.abs, + dx = abs(x - cx), + dy = abs(y - cy), + startAngle = item.startAngle, + endAngle = item.endAngle, + rho = Math.sqrt(dx * dx + dy * dy), + angle = Math.atan2(y - cy, x - cx) / me.rad; + + + if (angle > me.firstAngle) { + angle -= me.accuracy; + } + return (angle <= startAngle && angle > endAngle + && rho >= item.startRho && rho <= item.endRho); + }, + + + hideAll: function(index) { + var i, l, shadow, shadows, sh, lsh, sprite; + index = (isNaN(this._index) ? index : this._index) || 0; + this.__excludes = this.__excludes || []; + this.__excludes[index] = true; + sprite = this.slices[index].sprite; + for (sh = 0, lsh = sprite.length; sh < lsh; sh++) { + sprite[sh].setAttributes({ + hidden: true + }, true); + } + if (this.slices[index].shadowAttrs) { + for (i = 0, shadows = this.slices[index].shadowAttrs, l = shadows.length; i < l; i++) { + shadow = shadows[i]; + for (sh = 0, lsh = shadow.length; sh < lsh; sh++) { + shadow[sh].setAttributes({ + hidden: true + }, true); + } + } + } + this.drawSeries(); + }, + + + showAll: function(index) { + index = (isNaN(this._index) ? index : this._index) || 0; + this.__excludes[index] = false; + this.drawSeries(); + }, + + + highlightItem: function(item) { + var me = this, + rad = me.rad, + highlightSegment, + animate, + attrs, + i, + shadows, + shadow, + ln, + to, + itemHighlightSegment, + prop, + group, + display, + label, + middle, + r, + x, + y; + item = item || this.items[this._index]; + + + + + + this.unHighlightItem(); + + if (!item || me.animating || (item.sprite && item.sprite._animating)) { + return; + } + me.callParent([item]); + if (!me.highlight) { + return; + } + if ('segment' in me.highlightCfg) { + highlightSegment = me.highlightCfg.segment; + animate = me.chart.animate; + + if (me.labelsGroup) { + group = me.labelsGroup; + display = me.label.display; + label = group.getAt(item.index); + middle = (item.startAngle + item.endAngle) / 2 * rad; + r = highlightSegment.margin || 0; + x = r * Math.cos(middle); + y = r * Math.sin(middle); + + + + + + + if (Math.abs(x) < 1e-10) { + x = 0; + } + if (Math.abs(y) < 1e-10) { + y = 0; + } + + if (animate) { + label.stopAnimation(); + label.animate({ + to: { + translate: { + x: x, + y: y + } + }, + duration: me.highlightDuration + }); + } + else { + label.setAttributes({ + translate: { + x: x, + y: y + } + }, true); + } + } + + if (me.chart.shadow && item.shadows) { + i = 0; + shadows = item.shadows; + ln = shadows.length; + for (; i < ln; i++) { + shadow = shadows[i]; + to = {}; + itemHighlightSegment = item.sprite._from.segment; + for (prop in itemHighlightSegment) { + if (! (prop in highlightSegment)) { + to[prop] = itemHighlightSegment[prop]; + } + } + attrs = { + segment: Ext.applyIf(to, me.highlightCfg.segment) + }; + if (animate) { + shadow.stopAnimation(); + shadow.animate({ + to: attrs, + duration: me.highlightDuration + }); + } + else { + shadow.setAttributes(attrs, true); + } + } + } + } + }, + + + unHighlightItem: function() { + var me = this, + items, + animate, + shadowsEnabled, + group, + len, + i, + j, + display, + shadowLen, + p, + to, + ihs, + hs, + sprite, + shadows, + shadow, + item, + label, + attrs; + if (!me.highlight) { + return; + } + + if (('segment' in me.highlightCfg) && me.items) { + items = me.items; + animate = me.chart.animate; + shadowsEnabled = !!me.chart.shadow; + group = me.labelsGroup; + len = items.length; + i = 0; + j = 0; + display = me.label.display; + + for (; i < len; i++) { + item = items[i]; + if (!item) { + continue; + } + sprite = item.sprite; + if (sprite && sprite._highlighted) { + + if (group) { + label = group.getAt(item.index); + attrs = Ext.apply({ + translate: { + x: 0, + y: 0 + } + }, + display == 'rotate' ? { + rotate: { + x: label.attr.x, + y: label.attr.y, + degrees: label.attr.rotation.degrees + } + }: {}); + if (animate) { + label.stopAnimation(); + label.animate({ + to: attrs, + duration: me.highlightDuration + }); + } + else { + label.setAttributes(attrs, true); + } + } + if (shadowsEnabled) { + shadows = item.shadows; + shadowLen = shadows.length; + for (; j < shadowLen; j++) { + to = {}; + ihs = item.sprite._to.segment; + hs = item.sprite._from.segment; + Ext.apply(to, hs); + for (p in ihs) { + if (! (p in hs)) { + to[p] = ihs[p]; + } + } + shadow = shadows[j]; + if (animate) { + shadow.stopAnimation(); + shadow.animate({ + to: { + segment: to + }, + duration: me.highlightDuration + }); + } + else { + shadow.setAttributes({ segment: to }, true); + } + } + } + } + } + } + me.callParent(arguments); + }, + + + getLegendColor: function(index) { + var me = this; + return (me.colorSet && me.colorSet[index % me.colorSet.length]) || me.colorArrayStyle[index % me.colorArrayStyle.length]; + } +}); + + + +Ext.define('Ext.chart.series.Radar', { + + + + extend: Ext.chart.series.Series , + + + + + + type: "radar", + alias: 'series.radar', + + + rad: Math.PI / 180, + + showInLegend: false, + + + style: {}, + + + + + + + + + + constructor: function(config) { + this.callParent(arguments); + var me = this, + surface = me.chart.surface, i, l; + me.group = surface.getGroup(me.seriesId); + if (me.showMarkers) { + me.markerGroup = surface.getGroup(me.seriesId + '-markers'); + } + }, + + + drawSeries: function() { + var me = this, + store = me.chart.getChartStore(), + data = store.data.items, + d, record, + group = me.group, + sprite, + chart = me.chart, + seriesItems = chart.series.items, + s, sLen, series, + animate = chart.animate, + field = me.field || me.yField, + surface = chart.surface, + chartBBox = chart.chartBBox, + seriesIdx = me.seriesIdx, + colorArrayStyle = me.colorArrayStyle, + centerX, centerY, + items, + radius, + maxValue = 0, + fields = [], + max = Math.max, + cos = Math.cos, + sin = Math.sin, + pi2 = Math.PI * 2, + l = store.getCount(), + startPath, path, x, y, rho, + i, nfields, + seriesStyle = me.seriesStyle, + seriesLabelStyle = me.seriesLabelStyle, + first = chart.resizing || !me.radar, + axis = chart.axes && chart.axes.get(0), + aggregate = !(axis && axis.maximum); + + me.setBBox(); + + maxValue = aggregate? 0 : (axis.maximum || 0); + + Ext.apply(seriesStyle, me.style || {}); + + + if (!store || !store.getCount() || me.seriesIsHidden) { + me.hide(); + me.items = []; + if (me.radar) { + me.radar.hide(true); + } + me.radar = null; + return; + } + + if(!seriesStyle['stroke']){ + seriesStyle['stroke'] = colorArrayStyle[me.themeIdx % colorArrayStyle.length]; + } + + me.unHighlightItem(); + me.cleanHighlights(); + + centerX = me.centerX = chartBBox.x + (chartBBox.width / 2); + centerY = me.centerY = chartBBox.y + (chartBBox.height / 2); + me.radius = radius = Math.min(chartBBox.width, chartBBox.height) /2; + me.items = items = []; + + if (aggregate) { + + for (s = 0, sLen = seriesItems.length; s < sLen; s++) { + series = seriesItems[s]; + fields.push(series.yField); + } + + for (d = 0; d < l; d++) { + record = data[d]; + for (i = 0, nfields = fields.length; i < nfields; i++) { + maxValue = max(+record.get(fields[i]), maxValue); + } + } + } + + maxValue = maxValue || 1; + + startPath = []; path = []; + for (i = 0; i < l; i++) { + record = data[i]; + rho = radius * record.get(field) / maxValue; + x = rho * cos(i / l * pi2); + y = rho * sin(i / l * pi2); + if (i == 0) { + path.push('M', x + centerX, y + centerY); + startPath.push('M', 0.01 * x + centerX, 0.01 * y + centerY); + } else { + path.push('L', x + centerX, y + centerY); + startPath.push('L', 0.01 * x + centerX, 0.01 * y + centerY); + } + items.push({ + sprite: false, + point: [centerX + x, centerY + y], + storeItem: record, + series: me + }); + } + path.push('Z'); + + if (!me.radar) { + me.radar = surface.add(Ext.apply({ + type: 'path', + group: group, + path: startPath + }, seriesStyle || {})); + } + + if (chart.resizing) { + me.radar.setAttributes({ + path: startPath + }, true); + } + + if (chart.animate) { + me.onAnimate(me.radar, { + to: Ext.apply({ + path: path + }, seriesStyle || {}) + }); + } else { + me.radar.setAttributes(Ext.apply({ + path: path + }, seriesStyle || {}), true); + } + + if (me.showMarkers) { + me.drawMarkers(); + } + me.renderLabels(); + me.renderCallouts(); + }, + + + drawMarkers: function() { + var me = this, + chart = me.chart, + surface = chart.surface, + store = chart.getChartStore(), + markerStyle = Ext.apply({}, me.markerStyle || {}), + endMarkerStyle = Ext.apply(markerStyle, me.markerConfig, { + fill: me.colorArrayStyle[me.themeIdx % me.colorArrayStyle.length] + }), + items = me.items, + type = endMarkerStyle.type, + markerGroup = me.markerGroup, + centerX = me.centerX, + centerY = me.centerY, + item, i, l, marker, rendererAttributes; + + delete endMarkerStyle.type; + + for (i = 0, l = items.length; i < l; i++) { + item = items[i]; + marker = markerGroup.getAt(i); + if (!marker) { + marker = Ext.chart.Shape[type](surface, Ext.apply({ + group: markerGroup, + x: 0, + y: 0, + translate: { + x: centerX, + y: centerY + } + }, endMarkerStyle)); + } + else { + marker.show(); + } + + item.sprite = marker; + + if (chart.resizing) { + marker.setAttributes({ + x: 0, + y: 0, + translate: { + x: centerX, + y: centerY + } + }, true); + } + marker._to = { + translate: { + x: item.point[0], + y: item.point[1] + } + }; + + rendererAttributes = me.renderer(marker, store.getAt(i), marker._to, i, store); + rendererAttributes = Ext.applyIf(rendererAttributes || {}, endMarkerStyle || {}); + if (chart.animate) { + me.onAnimate(marker, { + to: rendererAttributes + }); + } + else { + marker.setAttributes(rendererAttributes, true); + } + } + }, + + isItemInPoint: function(x, y, item) { + var point, + tolerance = 10, + abs = Math.abs; + point = item.point; + return (abs(point[0] - x) <= tolerance && + abs(point[1] - y) <= tolerance); + }, + + + onCreateLabel: function(storeItem, item, i, display) { + var me = this, + group = me.labelsGroup, + config = me.label, + centerX = me.centerX, + centerY = me.centerY, + point = item.point, + endLabelStyle = Ext.apply(me.seriesLabelStyle || {}, config); + + return me.chart.surface.add(Ext.apply({ + 'type': 'text', + 'text-anchor': 'middle', + 'group': group, + 'x': centerX, + 'y': centerY + }, config || {})); + }, + + + onPlaceLabel: function(label, storeItem, item, i, display, animate, index) { + var me = this, + chart = me.chart, + resizing = chart.resizing, + config = me.label, + format = config.renderer, + field = config.field, + centerX = me.centerX, + centerY = me.centerY, + opt = { + x: item.point[0], + y: item.point[1] + }, + x = opt.x - centerX, + y = opt.y - centerY; + + label.setAttributes({ + text: format(storeItem.get(field), label, storeItem, item, i, display, animate, index), + hidden: true + }, + true); + + if (resizing) { + label.setAttributes({ + x: centerX, + y: centerY + }, true); + } + + if (animate) { + label.show(true); + me.onAnimate(label, { + to: opt + }); + } else { + label.setAttributes(opt, true); + label.show(true); + } + }, + + + toggleAll: function(show) { + var me = this, + i, ln, shadow, shadows; + if (!show) { + Ext.chart.series.Radar.superclass.hideAll.call(me); + } + else { + Ext.chart.series.Radar.superclass.showAll.call(me); + } + if (me.radar) { + me.radar.setAttributes({ + hidden: !show + }, true); + + if (me.radar.shadows) { + for (i = 0, shadows = me.radar.shadows, ln = shadows.length; i < ln; i++) { + shadow = shadows[i]; + shadow.setAttributes({ + hidden: !show + }, true); + } + } + } + }, + + + hideAll: function() { + this.toggleAll(false); + this.hideMarkers(0); + }, + + + showAll: function() { + this.toggleAll(true); + }, + + + hideMarkers: function(index) { + var me = this, + count = me.markerGroup && me.markerGroup.getCount() || 0, + i = index || 0; + for (; i < count; i++) { + me.markerGroup.getAt(i).hide(true); + } + }, + + + + getAxesForXAndYFields: function() { + var me = this, + chart = me.chart, + axes = chart.axes, + axis = [].concat(axes && axes.get(0)); + + return { + yAxis: axis + }; + } +}); + + + +Ext.define('Ext.chart.series.Scatter', { + + + + extend: Ext.chart.series.Cartesian , + + + + + + type: 'scatter', + alias: 'series.scatter', + + + + + + constructor: function(config) { + this.callParent(arguments); + var me = this, + shadow = me.chart.shadow, + surface = me.chart.surface, i, l; + Ext.apply(me, config, { + style: {}, + markerConfig: {}, + shadowAttributes: [{ + "stroke-width": 6, + "stroke-opacity": 0.05, + stroke: 'rgb(0, 0, 0)' + }, { + "stroke-width": 4, + "stroke-opacity": 0.1, + stroke: 'rgb(0, 0, 0)' + }, { + "stroke-width": 2, + "stroke-opacity": 0.15, + stroke: 'rgb(0, 0, 0)' + }] + }); + me.group = surface.getGroup(me.seriesId); + if (shadow) { + for (i = 0, l = me.shadowAttributes.length; i < l; i++) { + me.shadowGroups.push(surface.getGroup(me.seriesId + '-shadows' + i)); + } + } + }, + + + getBounds: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + chartAxes = chart.axes, + boundAxes = me.getAxesForXAndYFields(), + boundXAxis = boundAxes.xAxis, + boundYAxis = boundAxes.yAxis, + bbox, xScale, yScale, ln, minX, minY, maxX, maxY, i, axis, ends; + + me.setBBox(); + bbox = me.bbox; + + if (axis = chartAxes.get(boundXAxis)) { + ends = axis.applyData(); + minX = ends.from; + maxX = ends.to; + } + + if (axis = chartAxes.get(boundYAxis)) { + ends = axis.applyData(); + minY = ends.from; + maxY = ends.to; + } + + + if (me.xField && !Ext.isNumber(minX)) { + axis = me.getMinMaxXValues(); + minX = axis[0]; + maxX = axis[1]; + } + + if (me.yField && !Ext.isNumber(minY)) { + axis = me.getMinMaxYValues(); + minY = axis[0]; + maxY = axis[1]; + } + + if (isNaN(minX)) { + minX = 0; + maxX = store.getCount() - 1; + xScale = bbox.width / (store.getCount() - 1); + } + else { + xScale = bbox.width / (maxX - minX); + } + + if (isNaN(minY)) { + minY = 0; + maxY = store.getCount() - 1; + yScale = bbox.height / (store.getCount() - 1); + } + else { + yScale = bbox.height / (maxY - minY); + } + + return { + bbox: bbox, + minX: minX, + minY: minY, + xScale: xScale, + yScale: yScale + }; + }, + + + getPaths: function() { + var me = this, + chart = me.chart, + enableShadows = chart.shadow, + store = chart.getChartStore(), + data = store.data.items, + i, ln, record, + group = me.group, + bounds = me.bounds = me.getBounds(), + bbox = me.bbox, + xScale = bounds.xScale, + yScale = bounds.yScale, + minX = bounds.minX, + minY = bounds.minY, + boxX = bbox.x, + boxY = bbox.y, + boxHeight = bbox.height, + items = me.items = [], + attrs = [], + x, y, xValue, yValue, sprite; + + for (i = 0, ln = data.length; i < ln; i++) { + record = data[i]; + xValue = record.get(me.xField); + yValue = record.get(me.yField); + + if (typeof yValue == 'undefined' || (typeof yValue == 'string' && !yValue) + || xValue == null || yValue == null) { + continue; + } + + if (typeof xValue == 'string' || typeof xValue == 'object' && !Ext.isDate(xValue)) { + xValue = i; + } + if (typeof yValue == 'string' || typeof yValue == 'object' && !Ext.isDate(yValue)) { + yValue = i; + } + x = boxX + (xValue - minX) * xScale; + y = boxY + boxHeight - (yValue - minY) * yScale; + attrs.push({ + x: x, + y: y + }); + + me.items.push({ + series: me, + value: [xValue, yValue], + point: [x, y], + storeItem: record + }); + + + if (chart.animate && chart.resizing) { + sprite = group.getAt(i); + if (sprite) { + me.resetPoint(sprite); + if (enableShadows) { + me.resetShadow(sprite); + } + } + } + } + return attrs; + }, + + + resetPoint: function(sprite) { + var bbox = this.bbox; + sprite.setAttributes({ + translate: { + x: (bbox.x + bbox.width) / 2, + y: (bbox.y + bbox.height) / 2 + } + }, true); + }, + + + resetShadow: function(sprite) { + var me = this, + shadows = sprite.shadows, + shadowAttributes = me.shadowAttributes, + ln = me.shadowGroups.length, + bbox = me.bbox, + i, attr; + for (i = 0; i < ln; i++) { + attr = Ext.apply({}, shadowAttributes[i]); + + if (attr.translate) { + attr.translate.x += (bbox.x + bbox.width) / 2; + attr.translate.y += (bbox.y + bbox.height) / 2; + } + else { + attr.translate = { + x: (bbox.x + bbox.width) / 2, + y: (bbox.y + bbox.height) / 2 + }; + } + shadows[i].setAttributes(attr, true); + } + }, + + + createPoint: function(attr, type) { + var me = this, + chart = me.chart, + group = me.group, + bbox = me.bbox; + + return Ext.chart.Shape[type](chart.surface, Ext.apply({}, { + x: 0, + y: 0, + group: group, + translate: { + x: (bbox.x + bbox.width) / 2, + y: (bbox.y + bbox.height) / 2 + } + }, attr)); + }, + + + createShadow: function(sprite, endMarkerStyle, type) { + var me = this, + chart = me.chart, + shadowGroups = me.shadowGroups, + shadowAttributes = me.shadowAttributes, + lnsh = shadowGroups.length, + bbox = me.bbox, + i, shadow, shadows, attr; + + sprite.shadows = shadows = []; + + for (i = 0; i < lnsh; i++) { + attr = Ext.apply({}, shadowAttributes[i]); + if (attr.translate) { + attr.translate.x += (bbox.x + bbox.width) / 2; + attr.translate.y += (bbox.y + bbox.height) / 2; + } + else { + Ext.apply(attr, { + translate: { + x: (bbox.x + bbox.width) / 2, + y: (bbox.y + bbox.height) / 2 + } + }); + } + Ext.apply(attr, endMarkerStyle); + shadow = Ext.chart.Shape[type](chart.surface, Ext.apply({}, { + x: 0, + y: 0, + group: shadowGroups[i] + }, attr)); + shadows.push(shadow); + } + }, + + + drawSeries: function() { + var me = this, + chart = me.chart, + store = chart.getChartStore(), + group = me.group, + enableShadows = chart.shadow, + shadowGroups = me.shadowGroups, + shadowAttributes = me.shadowAttributes, + lnsh = shadowGroups.length, + sprite, attrs, attr, ln, i, endMarkerStyle, shindex, type, shadows, + rendererAttributes, shadowAttribute; + + endMarkerStyle = Ext.apply(me.markerStyle, me.markerConfig); + type = endMarkerStyle.type; + delete endMarkerStyle.type; + + + if (!store || !store.getCount()) { + me.hide(); + me.items = []; + return; + } + + + me.unHighlightItem(); + me.cleanHighlights(); + + attrs = me.getPaths(); + ln = attrs.length; + for (i = 0; i < ln; i++) { + attr = attrs[i]; + sprite = group.getAt(i); + Ext.apply(attr, endMarkerStyle); + + + if (!sprite) { + sprite = me.createPoint(attr, type); + if (enableShadows) { + me.createShadow(sprite, endMarkerStyle, type); + } + } + + shadows = sprite.shadows; + if (chart.animate) { + rendererAttributes = me.renderer(sprite, store.getAt(i), { translate: attr }, i, store); + sprite._to = rendererAttributes; + me.onAnimate(sprite, { + to: rendererAttributes + }); + + for (shindex = 0; shindex < lnsh; shindex++) { + shadowAttribute = Ext.apply({}, shadowAttributes[shindex]); + rendererAttributes = me.renderer(shadows[shindex], store.getAt(i), Ext.apply({}, { + hidden: false, + translate: { + x: attr.x + (shadowAttribute.translate? shadowAttribute.translate.x : 0), + y: attr.y + (shadowAttribute.translate? shadowAttribute.translate.y : 0) + } + }, shadowAttribute), i, store); + me.onAnimate(shadows[shindex], { to: rendererAttributes }); + } + } + else { + rendererAttributes = me.renderer(sprite, store.getAt(i), { translate: attr }, i, store); + sprite._to = rendererAttributes; + sprite.setAttributes(rendererAttributes, true); + + for (shindex = 0; shindex < lnsh; shindex++) { + shadowAttribute = Ext.apply({}, shadowAttributes[shindex]); + rendererAttributes = me.renderer(shadows[shindex], store.getAt(i), Ext.apply({}, { + hidden: false, + translate: { + x: attr.x + (shadowAttribute.translate? shadowAttribute.translate.x : 0), + y: attr.y + (shadowAttribute.translate? shadowAttribute.translate.y : 0) + } + }, shadowAttribute), i, store); + shadows[shindex].setAttributes(rendererAttributes, true); + } + } + me.items[i].sprite = sprite; + } + + + ln = group.getCount(); + for (i = attrs.length; i < ln; i++) { + group.getAt(i).hide(true); + } + me.renderLabels(); + me.renderCallouts(); + }, + + + onCreateLabel: function(storeItem, item, i, display) { + var me = this, + group = me.labelsGroup, + config = me.label, + endLabelStyle = Ext.apply({}, config, me.seriesLabelStyle), + bbox = me.bbox; + + return me.chart.surface.add(Ext.apply({ + type: 'text', + group: group, + x: item.point[0], + y: bbox.y + bbox.height / 2 + }, endLabelStyle)); + }, + + + onPlaceLabel: function(label, storeItem, item, i, display, animate, index) { + var me = this, + chart = me.chart, + resizing = chart.resizing, + config = me.label, + format = config.renderer, + field = config.field, + bbox = me.bbox, + x = item.point[0], + y = item.point[1], + radius = item.sprite.attr.radius, + bb, width, height, anim; + + label.setAttributes({ + text: format(storeItem.get(field), label, storeItem, item, i, display, animate, index), + hidden: true + }, true); + + if (display == 'rotate') { + label.setAttributes({ + 'text-anchor': 'start', + 'rotation': { + x: x, + y: y, + degrees: -45 + } + }, true); + + bb = label.getBBox(); + width = bb.width; + height = bb.height; + x = x < bbox.x? bbox.x : x; + x = (x + width > bbox.x + bbox.width)? (x - (x + width - bbox.x - bbox.width)) : x; + y = (y - height < bbox.y)? bbox.y + height : y; + + } else if (display == 'under' || display == 'over') { + + bb = item.sprite.getBBox(); + bb.width = bb.width || (radius * 2); + bb.height = bb.height || (radius * 2); + y = y + (display == 'over'? -bb.height : bb.height); + + bb = label.getBBox(); + width = bb.width/2; + height = bb.height/2; + x = x - width < bbox.x ? bbox.x + width : x; + x = (x + width > bbox.x + bbox.width) ? (x - (x + width - bbox.x - bbox.width)) : x; + y = y - height < bbox.y? bbox.y + height : y; + y = (y + height > bbox.y + bbox.height) ? (y - (y + height - bbox.y - bbox.height)) : y; + } + + if (!chart.animate) { + label.setAttributes({ + x: x, + y: y + }, true); + label.show(true); + } + else { + if (resizing) { + anim = item.sprite.getActiveAnimation(); + if (anim) { + anim.on('afteranimate', function() { + label.setAttributes({ + x: x, + y: y + }, true); + label.show(true); + }); + } + else { + label.show(true); + } + } + else { + me.onAnimate(label, { + to: { + x: x, + y: y + } + }); + } + } + }, + + + onPlaceCallout: function(callout, storeItem, item, i, display, animate, index) { + var me = this, + chart = me.chart, + surface = chart.surface, + resizing = chart.resizing, + config = me.callouts, + items = me.items, + cur = item.point, + normal, + bbox = callout.label.getBBox(), + offsetFromViz = 30, + offsetToSide = 10, + offsetBox = 3, + boxx, boxy, boxw, boxh, + p, clipRect = me.bbox, + x, y; + + + normal = [Math.cos(Math.PI /4), -Math.sin(Math.PI /4)]; + x = cur[0] + normal[0] * offsetFromViz; + y = cur[1] + normal[1] * offsetFromViz; + + + boxx = x + (normal[0] > 0? 0 : -(bbox.width + 2 * offsetBox)); + boxy = y - bbox.height /2 - offsetBox; + boxw = bbox.width + 2 * offsetBox; + boxh = bbox.height + 2 * offsetBox; + + + + if (boxx < clipRect[0] || (boxx + boxw) > (clipRect[0] + clipRect[2])) { + normal[0] *= -1; + } + if (boxy < clipRect[1] || (boxy + boxh) > (clipRect[1] + clipRect[3])) { + normal[1] *= -1; + } + + + x = cur[0] + normal[0] * offsetFromViz; + y = cur[1] + normal[1] * offsetFromViz; + + + boxx = x + (normal[0] > 0? 0 : -(bbox.width + 2 * offsetBox)); + boxy = y - bbox.height /2 - offsetBox; + boxw = bbox.width + 2 * offsetBox; + boxh = bbox.height + 2 * offsetBox; + + if (chart.animate) { + + me.onAnimate(callout.lines, { + to: { + path: ["M", cur[0], cur[1], "L", x, y, "Z"] + } + }, true); + + me.onAnimate(callout.box, { + to: { + x: boxx, + y: boxy, + width: boxw, + height: boxh + } + }, true); + + me.onAnimate(callout.label, { + to: { + x: x + (normal[0] > 0? offsetBox : -(bbox.width + offsetBox)), + y: y + } + }, true); + } else { + + callout.lines.setAttributes({ + path: ["M", cur[0], cur[1], "L", x, y, "Z"] + }, true); + + callout.box.setAttributes({ + x: boxx, + y: boxy, + width: boxw, + height: boxh + }, true); + + callout.label.setAttributes({ + x: x + (normal[0] > 0? offsetBox : -(bbox.width + offsetBox)), + y: y + }, true); + } + for (p in callout) { + callout[p].show(true); + } + }, + + + onAnimate: function(sprite, attr) { + sprite.show(); + return this.callParent(arguments); + }, + + isItemInPoint: function(x, y, item) { + var point, + tolerance = 10, + abs = Math.abs; + + function dist(point) { + var dx = abs(point[0] - x), + dy = abs(point[1] - y); + return Math.sqrt(dx * dx + dy * dy); + } + point = item.point; + return (point[0] - tolerance <= x && point[0] + tolerance >= x && + point[1] - tolerance <= y && point[1] + tolerance >= y); + } +}); + + + +Ext.define('Ext.layout.container.Table', { + + + + alias: ['layout.table'], + extend: Ext.layout.container.Container , + alternateClassName: 'Ext.layout.TableLayout', + + + + + + + monitorResize:false, + + type: 'table', + + createsInnerCt: true, + + targetCls: Ext.baseCSSPrefix + 'table-layout-ct', + tableCls: Ext.baseCSSPrefix + 'table-layout', + cellCls: Ext.baseCSSPrefix + 'table-layout-cell', + + + tableAttrs: null, + + + + + + getItemSizePolicy: function (item) { + return this.autoSizePolicy; + }, + + initHierarchyState: function (hierarchyStateInner) { + hierarchyStateInner.inShrinkWrapTable = true; + }, + + getLayoutItems: function() { + var me = this, + result = [], + items = me.callParent(), + item, + len = items.length, i; + + for (i = 0; i < len; i++) { + item = items[i]; + if (!item.hidden) { + result.push(item); + } + } + return result; + }, + + getHiddenItems: function(){ + var result = [], + items = this.owner.items.items, + len = items.length, + i = 0, item; + + for (; i < len; ++i) { + item = items[i]; + if (item.rendered && item.hidden) { + result.push(item); + } + } + return result; + }, + + + renderChildren: function() { + var me = this, + items = me.getLayoutItems(), + tbody = me.owner.getTargetEl().child('table', true).tBodies[0], + rows = tbody.rows, + i = 0, + len = items.length, + hiddenItems = me.getHiddenItems(), + cells, curCell, rowIdx, cellIdx, item, trEl, tdEl, itemCt, el; + + + cells = me.calculateCells(items); + + + + + for (; i < len; i++) { + curCell = cells[i]; + rowIdx = curCell.rowIdx; + cellIdx = curCell.cellIdx; + item = items[i]; + + + trEl = rows[rowIdx]; + if (!trEl) { + trEl = tbody.insertRow(rowIdx); + if (me.trAttrs) { + trEl.set(me.trAttrs); + } + } + + + itemCt = tdEl = Ext.get(trEl.cells[cellIdx] || trEl.insertCell(cellIdx)); + if (me.needsDivWrap()) { + itemCt = tdEl.first() || tdEl.createChild({tag: 'div'}); + itemCt.setWidth(null); + } + + + if (!item.rendered) { + me.renderItem(item, itemCt, 0); + } else if (!me.isValidParent(item, itemCt, rowIdx, cellIdx, tbody)) { + me.moveItem(item, itemCt, 0); + } + + + if (me.tdAttrs) { + tdEl.set(me.tdAttrs); + } + if (item.tdAttrs) { + tdEl.set(item.tdAttrs); + } + tdEl.set({ + colSpan: item.colspan || 1, + rowSpan: item.rowspan || 1, + id: item.cellId || '', + cls: me.cellCls + ' ' + (item.cellCls || '') + }); + + + if (!cells[i + 1] || cells[i + 1].rowIdx !== rowIdx) { + cellIdx++; + while (trEl.cells[cellIdx]) { + trEl.deleteCell(cellIdx); + } + } + } + + + rowIdx++; + while (tbody.rows[rowIdx]) { + tbody.deleteRow(rowIdx); + } + + + + for (i = 0, len = hiddenItems.length; i < len; ++i) { + me.ensureInDocument(hiddenItems[i].getEl()); + } + }, + + ensureInDocument: function(el){ + var dom = el.dom.parentNode; + while (dom) { + if (dom.tagName.toUpperCase() == 'BODY') { + return; + } + dom = dom.parentNode; + } + + Ext.getDetachedBody().appendChild(el); + }, + + calculate: function (ownerContext) { + if (!ownerContext.hasDomProp('containerChildrenSizeDone')) { + this.done = false; + } else { + var targetContext = ownerContext.targetContext, + widthShrinkWrap = ownerContext.widthModel.shrinkWrap, + heightShrinkWrap = ownerContext.heightModel.shrinkWrap, + shrinkWrap = heightShrinkWrap || widthShrinkWrap, + table = shrinkWrap && targetContext.el.child('table', true), + targetPadding = shrinkWrap && targetContext.getPaddingInfo(); + + if (widthShrinkWrap) { + ownerContext.setContentWidth(table.offsetWidth + targetPadding.width, true); + } + + if (heightShrinkWrap) { + ownerContext.setContentHeight(table.offsetHeight + targetPadding.height, true); + } + } + }, + + finalizeLayout: function() { + if (this.needsDivWrap()) { + + var items = this.getLayoutItems(), + i, + iLen = items.length, + item; + + for (i = 0; i < iLen; i++) { + item = items[i]; + + Ext.fly(item.el.dom.parentNode).setWidth(item.getWidth()); + } + } + if (Ext.isIE6 || Ext.isIEQuirks) { + + this.owner.getTargetEl().child('table').repaint(); + } + }, + + + calculateCells: function(items) { + var cells = [], + rowIdx = 0, + colIdx = 0, + cellIdx = 0, + totalCols = this.columns || Infinity, + rowspans = [], + i = 0, j, + len = items.length, + item; + + for (; i < len; i++) { + item = items[i]; + + + while (colIdx >= totalCols || rowspans[colIdx] > 0) { + if (colIdx >= totalCols) { + + colIdx = 0; + cellIdx = 0; + rowIdx++; + + + for (j = 0; j < totalCols; j++) { + if (rowspans[j] > 0) { + rowspans[j]--; + } + } + } else { + colIdx++; + } + } + + + cells.push({ + rowIdx: rowIdx, + cellIdx: cellIdx + }); + + + for (j = item.colspan || 1; j; --j) { + rowspans[colIdx] = item.rowspan || 1; + ++colIdx; + } + ++cellIdx; + } + + return cells; + }, + + getRenderTree: function() { + var me = this, + items = me.getLayoutItems(), + cells, + rows = [], + result = Ext.apply({ + tag: 'table', + role: 'presentation', + cls: me.tableCls, + cellspacing: 0, + cellpadding: 0, + cn: { + tag: 'tbody', + cn: rows + } + }, me.tableAttrs), + tdAttrs = me.tdAttrs, + needsDivWrap = me.needsDivWrap(), + i, len = items.length, item, curCell, tr, rowIdx, cellIdx, cell; + + + cells = me.calculateCells(items); + + for (i = 0; i < len; i++) { + item = items[i]; + + curCell = cells[i]; + rowIdx = curCell.rowIdx; + cellIdx = curCell.cellIdx; + + + tr = rows[rowIdx]; + if (!tr) { + tr = rows[rowIdx] = { + tag: 'tr', + cn: [] + }; + if (me.trAttrs) { + Ext.apply(tr, me.trAttrs); + } + } + + + cell = tr.cn[cellIdx] = { + tag: 'td' + }; + if (tdAttrs) { + Ext.apply(cell, tdAttrs); + } + Ext.apply(cell, { + colSpan: item.colspan || 1, + rowSpan: item.rowspan || 1, + id: item.cellId || '', + cls: me.cellCls + ' ' + (item.cellCls || '') + }); + + if (needsDivWrap) { + cell = cell.cn = { + tag: 'div' + }; + } + + me.configureItem(item); + + cell.cn = item.getRenderTree(); + } + return result; + }, + + isValidParent: function(item, target, rowIdx, cellIdx) { + var tbody, + correctCell, + table; + + + if (arguments.length === 3) { + table = item.el.up('table'); + return table && table.dom.parentNode === target.dom; + } + tbody = this.owner.getTargetEl().child('table', true).tBodies[0]; + correctCell = tbody.rows[rowIdx].cells[cellIdx]; + return item.el.dom.parentNode === correctCell; + }, + + + needsDivWrap: function() { + return Ext.isOpera10_5; + } +}); + + +Ext.define('Ext.container.ButtonGroup', { + extend: Ext.panel.Panel , + alias: 'widget.buttongroup', + alternateClassName: 'Ext.ButtonGroup', + + + + + + + baseCls: Ext.baseCSSPrefix + 'btn-group', + + + layout: { + type: 'table' + }, + + defaultType: 'button', + + + frame: true, + + + + frameHeader: false, + + titleAlign: 'center', + + noTitleCls: 'notitle', + + initComponent : function() { + + var me = this, + cols = me.columns; + + if (cols) { + me.layout = Ext.apply({}, {columns: cols}, me.layout); + } + + if (!me.title) { + me.addClsWithUI(me.noTitleCls); + } + me.callParent(arguments); + }, + + + onBeforeAdd: function(component) { + if (component.isButton) { + if (this.defaultButtonUI && component.ui === 'default' && + !component.hasOwnProperty('ui')) { + component.ui = this.defaultButtonUI; + } else { + component.ui = component.ui + '-toolbar'; + } + } + this.callParent(arguments); + }, + + + applyDefaults: function(c) { + if (!Ext.isString(c)) { + c = this.callParent(arguments); + } + return c; + } + + + + + + +}); + + +Ext.define('Ext.container.Monitor', { + target: null, + selector: '', + + scope: null, + addHandler: null, + removeHandler: null, + + disabled: 0, + + constructor: function(config){ + Ext.apply(this, config); + }, + + bind: function(target){ + var me = this; + + me.target = target; + target.on('beforedestroy', me.disable, me); + me.onContainerAdd(target); + }, + + unbind: function() { + var me = this, + target = me.target; + + if (target) { + target.un('beforedestroy', me.disable, me); + } + me.items = null; + }, + + disable: function(){ + ++this.disabled; + }, + + enable: function(){ + if (this.disabled > 0) { + --this.disabled; + } + }, + + handleAdd: function(ct, comp) { + if (!this.disabled) { + if (comp.is(this.selector)) { + this.onItemAdd(comp.ownerCt, comp); + } + + if (comp.isContainer) { + this.onContainerAdd(comp); + } + } + }, + + onItemAdd: function(ct, comp){ + var me = this, + items = me.items, + handler = me.addHandler; + + if (!me.disabled) { + if (handler) { + handler.call(me.scope || comp, comp); + } + if (items) { + items.add(comp); + } + } + }, + + onItemRemove: function(ct, comp){ + var me = this, + items = me.items, + handler = me.removeHandler; + + if (!me.disabled) { + if (handler) { + handler.call(me.scope || comp, comp); + } + if (items) { + items.remove(comp); + } + } + }, + + onContainerAdd: function(ct, preventChildren) { + var me = this, + items, len, + handleAdd = me.handleAdd, + handleRemove = me.handleRemove, + i, comp; + + ct.on('add', handleAdd, me); + ct.on('dockedadd', handleAdd, me); + ct.on('remove', handleRemove, me); + ct.on('dockedremove', handleRemove, me); + + + + if (preventChildren !== true) { + items = ct.query(me.selector); + for (i = 0, len = items.length; i < len; ++i) { + comp = items[i]; + me.onItemAdd(comp.ownerCt, comp); + } + } + + items = ct.query('container'); + for (i = 0, len = items.length; i < len; ++i) { + me.onContainerAdd(items[i], true); + } + + }, + + handleRemove: function(ct, comp) { + var me = this; + + + + if (!me.disabled) { + if (comp.is(me.selector)) { + me.onItemRemove(ct, comp); + } + + if (comp.isContainer) { + me.onContainerRemove(ct, comp); + } + } + }, + + onContainerRemove: function(ct, comp){ + var me = this, + destroying = ct.destroying, + items, i, len, item; + + + if (!destroying) { + me.removeCtListeners(comp); + } + + items = comp.query(me.selector); + for (i = 0, len = items.length; i < len; ++i) { + item = items[i]; + me.onItemRemove(item.ownerCt, item); + } + + if (!destroying) { + items = comp.query('container'); + for (i = 0, len = items.length; i < len; ++i) { + me.removeCtListeners(items[i]); + } + } + }, + + removeCtListeners: function(comp){ + var me = this; + comp.un('add', me.handleAdd, me); + comp.un('dockedadd', me.handleAdd, me); + comp.un('remove', me.handleRemove, me); + comp.un('dockedremove', me.handleRemove, me); + }, + + getItems: function(){ + var me = this, + items = me.items; + + if (!items) { + items = me.items = new Ext.util.MixedCollection(); + items.addAll(me.target.query(me.selector)); + } + return items; + }, + + invalidateItems: function(){ + this.items = null; + } +}); + + +Ext.define('Ext.container.Viewport', { + extend: Ext.container.Container , + alias: 'widget.viewport', + + alternateClassName: 'Ext.Viewport', + + + + + + + + + + + + + + + + + isViewport: true, + + ariaRole: 'application', + + preserveElOnDestroy: true, + + initComponent : function() { + var me = this, + html = document.body.parentNode, + el = me.el = Ext.getBody(); + + + Ext.getScrollbarSize(); + + + me.width = me.height = undefined; + + me.callParent(arguments); + Ext.fly(html).addCls(Ext.baseCSSPrefix + 'viewport'); + if (me.autoScroll) { + Ext.fly(html).setStyle(me.getOverflowStyle()); + delete me.autoScroll; + } + el.setHeight = el.setWidth = Ext.emptyFn; + el.dom.scroll = 'no'; + me.allowDomMove = false; + me.renderTo = me.el; + }, + + + applyTargetCls: function(targetCls) { + this.el.addCls(targetCls); + }, + + onRender: function() { + var me = this; + + me.callParent(arguments); + + + + me.width = Ext.Element.getViewportWidth(); + me.height = Ext.Element.getViewportHeight(); + }, + + afterFirstLayout: function() { + var me = this; + + me.callParent(arguments); + setTimeout(function() { + Ext.EventManager.onWindowResize(me.fireResize, me); + }, 1); + }, + + fireResize : function(width, height){ + + + if (width != this.width || height != this.height) { + this.setSize(width, height); + } + }, + + initHierarchyState: function(hierarchyState) { + this.callParent([this.hierarchyState = Ext.rootHierarchyState]); + } +}); + + +Ext.define('Ext.data.IdGenerator', { + + + isGenerator: true, + + + constructor: function(config) { + var me = this; + + Ext.apply(me, config); + + if (me.id) { + Ext.data.IdGenerator.all[me.id] = me; + } + }, + + + + getRecId: function (rec) { + return rec.modelName + '-' + rec.internalId; + }, + + + + statics: { + + all: {}, + + + get: function (config) { + var generator, + id, + type; + + if (typeof config == 'string') { + id = type = config; + config = null; + } else if (config.isGenerator) { + return config; + } else { + id = config.id || config.type; + type = config.type; + } + + generator = this.all[id]; + if (!generator) { + generator = Ext.create('idgen.' + type, config); + } + + return generator; + } + } +}); + + +Ext.define('Ext.data.SortTypes', { + + singleton: true, + + + none : Ext.identityFn, + + + stripTagsRE : /<\/?[^>]+>/gi, + + + asText : function(s) { + return String(s).replace(this.stripTagsRE, ""); + }, + + + asUCText : function(s) { + return String(s).toUpperCase().replace(this.stripTagsRE, ""); + }, + + + asUCString : function(s) { + return String(s).toUpperCase(); + }, + + + asDate : function(s) { + if(!s){ + return 0; + } + if(Ext.isDate(s)){ + return s.getTime(); + } + return Date.parse(String(s)); + }, + + + asFloat : function(s) { + var val = parseFloat(String(s).replace(/,/g, "")); + return isNaN(val) ? 0 : val; + }, + + + asInt : function(s) { + var val = parseInt(String(s).replace(/,/g, ""), 10); + return isNaN(val) ? 0 : val; + } +}); + + +Ext.define('Ext.data.Types', { + singleton: true + +}, function() { + var st = Ext.data.SortTypes; + + Ext.apply(Ext.data.Types, { + + stripRe: /[\$,%]/g, + + + AUTO: { + sortType: st.none, + type: 'auto' + }, + + + STRING: { + convert: function(v) { + var defaultValue = this.useNull ? null : ''; + return (v === undefined || v === null) ? defaultValue : String(v); + }, + sortType: st.asUCString, + type: 'string' + }, + + + INT: { + convert: function(v) { + + + + if (typeof v == 'number') { + return parseInt(v); + } + return v !== undefined && v !== null && v !== '' ? + parseInt(String(v).replace(Ext.data.Types.stripRe, ''), 10) : (this.useNull ? null : 0); + }, + sortType: st.none, + type: 'int' + }, + + + FLOAT: { + convert: function(v) { + if (typeof v === 'number') { + return v; + } + return v !== undefined && v !== null && v !== '' ? + parseFloat(String(v).replace(Ext.data.Types.stripRe, ''), 10) : (this.useNull ? null : 0); + }, + sortType: st.none, + type: 'float' + }, + + + BOOL: { + convert: function(v) { + if (typeof v === 'boolean') { + return v; + } + if (this.useNull && (v === undefined || v === null || v === '')) { + return null; + } + return v === true || v === 'true' || v == 1; + }, + sortType: st.none, + type: 'bool' + }, + + + DATE: { + convert: function(v) { + var df = this.dateReadFormat || this.dateFormat, + parsed; + + if (!v) { + return null; + } + + if (v instanceof Date) { + return v; + } + if (df) { + return Ext.Date.parse(v, df); + } + + parsed = Date.parse(v); + return parsed ? new Date(parsed) : null; + }, + sortType: st.asDate, + type: 'date' + } + }); + + Ext.apply(Ext.data.Types, { + + BOOLEAN: this.BOOL, + + + INTEGER: this.INT, + + + NUMBER: this.FLOAT + }); +}); + + +Ext.define('Ext.data.Field', { + + alias: 'data.field', + + isField: true, + + constructor : function(config) { + var me = this, + types = Ext.data.Types, + st; + + if (Ext.isString(config)) { + config = {name: config}; + } + Ext.apply(me, config); + + st = me.sortType; + + if (me.type) { + if (Ext.isString(me.type)) { + me.type = types[me.type.toUpperCase()] || types.AUTO; + } + } else { + me.type = types.AUTO; + } + + + if (Ext.isString(st)) { + me.sortType = Ext.data.SortTypes[st]; + } else if(Ext.isEmpty(st)) { + me.sortType = me.type.sortType; + } + + + if (!config.hasOwnProperty('convert')) { + me.convert = me.type.convert; + } else if (!me.convert && me.type.convert && !config.hasOwnProperty('defaultValue')) { + + + me.defaultValue = me.type.convert(me.defaultValue); + } + + if (config.convert) { + me.hasCustomConvert = true; + } + }, + + + + + + + + + + + dateFormat: null, + + + dateReadFormat: null, + + + dateWriteFormat: null, + + + useNull: false, + + + defaultValue: "", + + + mapping: null, + + + sortType : null, + + + sortDir : "ASC", + + + allowBlank : true, + + + persist: true +}); + + +Ext.define('Ext.data.Errors', { + extend: Ext.util.MixedCollection , + + + isValid: function() { + return this.length === 0; + }, + + + getByField: function(fieldName) { + var errors = [], + error, i; + + for (i = 0; i < this.length; i++) { + error = this.items[i]; + + if (error.field == fieldName) { + errors.push(error); + } + } + + return errors; + } +}); + + +Ext.define('Ext.data.validations', { + singleton: true, + + + presenceMessage: 'must be present', + + + lengthMessage: 'is the wrong length', + + + formatMessage: 'is the wrong format', + + + inclusionMessage: 'is not included in the list of acceptable values', + + + exclusionMessage: 'is not an acceptable value', + + + emailMessage: 'is not a valid email address', + + + emailRe: /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/, + + + presence: function(config, value) { + + if (arguments.length === 1) { + value = config; + } + + + return !!value || value === 0 || value === false; + }, + + + length: function(config, value) { + if (value === undefined || value === null) { + return false; + } + + var length = value.length, + min = config.min, + max = config.max; + + if ((min && length < min) || (max && length > max)) { + return false; + } else { + return true; + } + }, + + + email: function(config, email) { + return Ext.data.validations.emailRe.test(email); + }, + + + format: function(config, value) { + return !!(config.matcher && config.matcher.test(value)); + }, + + + inclusion: function(config, value) { + return config.list && Ext.Array.indexOf(config.list,value) != -1; + }, + + + exclusion: function(config, value) { + return config.list && Ext.Array.indexOf(config.list,value) == -1; + } +}); + + +Ext.define('Ext.data.Model', { + alternateClassName: 'Ext.data.Record', + + mixins: { + observable: Ext.util.Observable + }, + + + + + + + + + + + + compareConvertFields: function(f1, f2) { + var f1SpecialConvert = f1.convert && f1.type && f1.convert !== f1.type.convert, + f2SpecialConvert = f2.convert && f2.type && f2.convert !== f2.type.convert; + + if (f1SpecialConvert && !f2SpecialConvert) { + return 1; + } + + if (!f1SpecialConvert && f2SpecialConvert) { + return -1; + } + return 0; + }, + + itemNameFn: function(item) { + return item.name; + }, + + onClassExtended: function(cls, data, hooks) { + var onBeforeClassCreated = hooks.onBeforeCreated; + + hooks.onBeforeCreated = function(cls, data) { + var me = this, + name = Ext.getClassName(cls), + prototype = cls.prototype, + superCls = cls.prototype.superclass, + + validations = data.validations || [], + fields = data.fields || [], + field, + associationsConfigs = data.associations || [], + addAssociations = function(items, type) { + var i = 0, + len, + item; + + if (items) { + items = Ext.Array.from(items); + + for (len = items.length; i < len; ++i) { + item = items[i]; + + if (!Ext.isObject(item)) { + item = {model: item}; + } + + item.type = type; + associationsConfigs.push(item); + } + } + }, + idgen = data.idgen, + + fieldsMixedCollection = new Ext.util.MixedCollection(false, prototype.itemNameFn), + + associationsMixedCollection = new Ext.util.MixedCollection(false, prototype.itemNameFn), + + superValidations = superCls.validations, + superFields = superCls.fields, + superAssociations = superCls.associations, + + associationConfig, i, ln, + dependencies = [], + + + idProperty = 'idProperty' in data ? data.idProperty : prototype.idProperty, + + + idField = idProperty ? (idProperty.isField ? idProperty : new Ext.data.Field(idProperty)) : null, + + + idFieldDefined = false, + + + onFieldAddReplace = function(arg0, arg1, arg2) { + var newField, + pos; + + if (fieldsMixedCollection.events.add.firing) { + + pos = arg0; + newField = arg1; + } else { + + newField = arg2; + pos = arg1.originalIndex; + } + + + + newField.originalIndex = pos; + + + + + if (idField && ((newField.mapping && (newField.mapping === idField.mapping)) || (newField.name === idField.name))) { + prototype.idField = newField; + idFieldDefined = true; + newField.defaultValue = undefined; + } + }, + + + clsProxy = data.proxy, + + + fieldConvertSortFn = function() { + fieldsMixedCollection.sortBy(prototype.compareConvertFields); + }; + + + cls.modelName = name; + prototype.modelName = name; + + + if (superValidations) { + validations = superValidations.concat(validations); + } + + data.validations = validations; + + + if (superFields) { + fields = superFields.items.concat(fields); + } + + fieldsMixedCollection.on({ + add: onFieldAddReplace, + replace: onFieldAddReplace + }); + + for (i = 0, ln = fields.length; i < ln; ++i) { + field = fields[i]; + fieldsMixedCollection.add(field.isField ? field : new Ext.data.Field(field)); + } + + + + + if (idField && !idFieldDefined) { + prototype.idField = idField; + idField.defaultValue = undefined; + fieldsMixedCollection.add(idField); + } + + + fieldConvertSortFn(); + fieldsMixedCollection.on({ + add: fieldConvertSortFn, + replace: fieldConvertSortFn + }); + + data.fields = fieldsMixedCollection; + + if (idgen) { + data.idgen = Ext.data.IdGenerator.get(idgen); + } + + + + addAssociations(data.belongsTo, 'belongsTo'); + delete data.belongsTo; + addAssociations(data.hasMany, 'hasMany'); + delete data.hasMany; + addAssociations(data.hasOne, 'hasOne'); + delete data.hasOne; + + if (superAssociations) { + associationsConfigs = superAssociations.items.concat(associationsConfigs); + } + + for (i = 0, ln = associationsConfigs.length; i < ln; ++i) { + dependencies.push('association.' + associationsConfigs[i].type.toLowerCase()); + } + + + if (clsProxy) { + if (!clsProxy.isProxy) { + dependencies.push('proxy.' + (clsProxy.type || clsProxy)); + } + } + + + else if (!cls.prototype.proxy) { + cls.prototype.proxy = cls.prototype.defaultProxyType; + dependencies.push('proxy.' + cls.prototype.defaultProxyType); + } + + Ext.require(dependencies, function() { + Ext.ModelManager.registerType(name, cls); + + for (i = 0, ln = associationsConfigs.length; i < ln; ++i) { + associationConfig = associationsConfigs[i]; + if (associationConfig.isAssociation) { + associationConfig = Ext.applyIf({ + ownerModel: name, + associatedModel: associationConfig.model + }, associationConfig.initialConfig); + } else { + Ext.apply(associationConfig, { + ownerModel: name, + associatedModel: associationConfig.model + }); + } + + if (Ext.ModelManager.getModel(associationConfig.model) === undefined) { + Ext.ModelManager.registerDeferredAssociation(associationConfig); + } else { + associationsMixedCollection.add(Ext.data.association.Association.create(associationConfig)); + } + } + + data.associations = associationsMixedCollection; + + + + + + + onBeforeClassCreated.call(me, cls, data, hooks); + + + if (clsProxy && clsProxy.isProxy) { + cls.setProxy(clsProxy); + } + + + Ext.ModelManager.onModelDefined(cls); + }); + }; + }, + + inheritableStatics: { + + setProxy: function(proxy) { + + if (!proxy.isProxy) { + if (typeof proxy == "string") { + proxy = { + type: proxy + }; + } + proxy = Ext.createByAlias("proxy." + proxy.type, proxy); + } + proxy.setModel(this); + this.proxy = this.prototype.proxy = proxy; + + return proxy; + }, + + + getProxy: function() { + + var proxy = this.proxy; + + + if (!proxy) { + proxy = this.prototype.proxy; + + + if (proxy.isProxy) { + proxy = proxy.clone() + } + + return this.setProxy(proxy); + } + + return proxy; + }, + + + setFields: function(fields, idProperty, clientIdProperty) { + var me = this, + newField, + idField, + idFieldDefined = false, + proto = me.prototype, + prototypeFields = proto.fields, + superFields = proto.superclass.fields, + len, + i; + + if (idProperty) { + proto.idProperty = idProperty; + idField = idProperty.isField ? idProperty : new Ext.data.Field(idProperty); + + } + if (clientIdProperty) { + proto.clientIdProperty = clientIdProperty; + } + + if (prototypeFields) { + prototypeFields.clear(); + } + else { + prototypeFields = me.prototype.fields = new Ext.util.MixedCollection(false, function(field) { + return field.name; + }); + } + + + if (superFields) { + fields = superFields.items.concat(fields); + } + + for (i = 0, len = fields.length; i < len; i++) { + newField = new Ext.data.Field(fields[i]); + + + + + if (idField && ((newField.mapping && (newField.mapping === idField.mapping)) || (newField.name === idField.name))) { + idFieldDefined = true; + newField.defaultValue = undefined; + } + prototypeFields.add(newField); + } + + + + + if (idField && !idFieldDefined) { + idField.defaultValue = undefined; + prototypeFields.add(idField); + } + + me.fields = prototypeFields; + + return prototypeFields; + }, + + + getFields: function() { + return this.prototype.fields.items; + }, + + + load: function(id, config) { + config = Ext.apply({}, config); + config = Ext.applyIf(config, { + action: 'read', + id : id + }); + + var operation = new Ext.data.Operation(config), + scope = config.scope || this, + record = null, + callback; + + callback = function(operation) { + if (operation.wasSuccessful()) { + record = operation.getRecords()[0]; + + if (!record.hasId()) { + record.setId(id); + } + Ext.callback(config.success, scope, [record, operation]); + } else { + Ext.callback(config.failure, scope, [record, operation]); + } + Ext.callback(config.callback, scope, [record, operation]); + }; + + this.getProxy().read(operation, callback, this); + } + }, + + statics: { + + PREFIX : 'ext-record', + + AUTO_ID: 1, + + EDIT : 'edit', + + REJECT : 'reject', + + COMMIT : 'commit', + + + id: function(rec) { + var id = [this.PREFIX, '-', this.AUTO_ID++].join(''); + rec.phantom = true; + rec.internalId = id; + return id; + } + }, + + + idgen: { + isGenerator: true, + type: 'default', + + generate: function () { + return null; + }, + getRecId: function (rec) { + return rec.modelName + '-' + rec.internalId; + } + }, + + + editing : false, + + + dirty : false, + + + persistenceProperty: 'data', + + evented: false, + + + isModel: true, + + + phantom : false, + + + idProperty: 'id', + + + clientIdProperty: null, + + + defaultProxyType: 'ajax', + + + emptyData: [], + + + + + + + + + + + + + + + + + constructor: function(data, id, raw, convertedData) { + + + + + + + + + var me = this, + passedId = (id || id === 0), + hasId, + fields, + length, + field, + name, + value, + newId, + persistenceProperty, + idProperty = me.idProperty, + idField = me.idField, + i; + + + me.raw = raw || data; + + + me.modified = {}; + + persistenceProperty = me[me.persistenceProperty] = convertedData || {}; + + + me.data = me[me.persistenceProperty]; + + me.mixins.observable.constructor.call(me); + + if (!convertedData) { + + if (data) { + + if (!passedId && idProperty) { + id = data[idProperty]; + hasId = (id || id === 0); + } + } + + else { + data = me.emptyData; + } + + + fields = me.fields.items; + length = fields.length; + i = 0; + + if (Ext.isArray(data)) { + for (; i < length; i++) { + field = fields[i]; + name = field.name; + + + + value = data[field.originalIndex]; + + if (value === undefined) { + value = field.defaultValue; + } + + + if (field.convert) { + value = field.convert(value, me); + } + + if (value !== undefined) { + persistenceProperty[name] = value; + } + } + + } else { + for (; i < length; i++) { + field = fields[i]; + name = field.name; + value = data[name]; + if (value === undefined) { + value = field.defaultValue; + } + if (field.convert) { + value = field.convert(value, me); + } + + if (value !== undefined) { + persistenceProperty[name] = value; + } + } + } + } + + + me.stores = []; + + + + if (passedId) { + hasId = true; + persistenceProperty[idProperty] = idField && idField.convert ? idField.convert(id) : id; + } + + + else if (!hasId) { + + newId = me.idgen.generate(); + if (newId != null) { + me.preventInternalUpdate = true; + me.setId(newId); + delete me.preventInternalUpdate; + } + } + + + me.internalId = hasId ? id : Ext.data.Model.id(me); + + + if (typeof me.init == 'function') { + me.init(); + } + + + me.id = me.idgen.getRecId(me); + }, + + + get: function(field) { + return this[this.persistenceProperty][field]; + }, + + + + + _singleProp: {}, + + + set: function (fieldName, newValue) { + var me = this, + data = me[me.persistenceProperty], + fields = me.fields, + modified = me.modified, + single = (typeof fieldName == 'string'), + currentValue, field, idChanged, key, modifiedFieldNames, name, oldId, + newId, value, values; + + if (single) { + values = me._singleProp; + values[fieldName] = newValue; + } else { + values = fieldName; + } + + for (name in values) { + if (values.hasOwnProperty(name)) { + value = values[name]; + + if (fields && (field = fields.get(name)) && field.convert) { + value = field.convert(value, me); + } + + currentValue = data[name]; + if (me.isEqual(currentValue, value)) { + continue; + } + + data[name] = value; + (modifiedFieldNames || (modifiedFieldNames = [])).push(name); + + if (field && field.persist) { + if (modified.hasOwnProperty(name)) { + if (me.isEqual(modified[name], value)) { + + + delete modified[name]; + + + + + me.dirty = false; + for (key in modified) { + if (modified.hasOwnProperty(key)){ + me.dirty = true; + break; + } + } + } + } else { + me.dirty = true; + modified[name] = currentValue; + } + } + + if (name == me.idProperty) { + idChanged = true; + oldId = currentValue; + newId = value; + } + } + } + + if (single) { + + + delete values[fieldName]; + } + + if (idChanged) { + me.changeId(oldId, newId); + } + + if (!me.editing && modifiedFieldNames) { + me.afterEdit(modifiedFieldNames); + } + + return modifiedFieldNames || null; + }, + + + copyFrom: function(sourceRecord) { + var me = this, + fields = me.fields.items, + fieldCount = fields.length, + modifiedFieldNames = [], + field, i = 0, + myData, + sourceData, + idProperty = me.idProperty, + name, + value; + + if (sourceRecord) { + myData = me[me.persistenceProperty]; + sourceData = sourceRecord[sourceRecord.persistenceProperty]; + for (; i < fieldCount; i++) { + field = fields[i]; + name = field.name; + + + + + + + + if (name != idProperty) { + value = sourceData[name]; + + + + if (value !== undefined && !me.isEqual(myData[name], value)) { + myData[name] = value; + modifiedFieldNames.push(name); + } + } + } + + + if (me.phantom && !sourceRecord.phantom) { + + + me.beginEdit(); + me.setId(sourceRecord.getId()); + me.endEdit(true); + me.commit(true); + } + } + return modifiedFieldNames; + }, + + + isEqual: function(a, b) { + + if (a instanceof Date && b instanceof Date) { + return a.getTime() === b.getTime(); + } + return a === b; + }, + + + beginEdit : function(){ + var me = this, + key, + data, + o; + + if (!me.editing) { + me.editing = true; + me.dirtySave = me.dirty; + + o = me[me.persistenceProperty]; + data = me.dataSave = {}; + for (key in o) { + if (o.hasOwnProperty(key)) { + data[key] = o[key]; + } + } + + o = me.modified; + data = me.modifiedSave = {}; + for (key in o) { + if (o.hasOwnProperty(key)) { + data[key] = o[key]; + } + } + } + }, + + + cancelEdit : function(){ + var me = this; + if (me.editing) { + me.editing = false; + + me.modified = me.modifiedSave; + me[me.persistenceProperty] = me.dataSave; + me.dirty = me.dirtySave; + me.modifiedSave = me.dataSave = me.dirtySave = null; + } + }, + + + endEdit : function(silent, modifiedFieldNames){ + var me = this, + dataSave, + changed; + + silent = silent === true; + if (me.editing) { + me.editing = false; + dataSave = me.dataSave; + me.modifiedSave = me.dataSave = me.dirtySave = null; + if (!silent) { + if (!modifiedFieldNames) { + modifiedFieldNames = me.getModifiedFieldNames(dataSave); + } + changed = me.dirty || modifiedFieldNames.length > 0; + if (changed) { + me.afterEdit(modifiedFieldNames); + } + } + } + }, + + + getModifiedFieldNames: function(saved){ + var me = this, + data = me[me.persistenceProperty], + modified = [], + key; + + saved = saved || me.dataSave; + for (key in data) { + if (data.hasOwnProperty(key)) { + if (!me.isEqual(data[key], saved[key])) { + modified.push(key); + } + } + } + return modified; + }, + + + getChanges : function(){ + var modified = this.modified, + changes = {}, + field; + + for (field in modified) { + if (modified.hasOwnProperty(field)){ + changes[field] = this.get(field); + } + } + + return changes; + }, + + + isModified : function(fieldName) { + return this.modified.hasOwnProperty(fieldName); + }, + + + setDirty : function() { + var me = this, + fields = me.fields.items, + fLen = fields.length, + field, name, f; + + me.dirty = true; + + for (f = 0; f < fLen; f++) { + field = fields[f]; + + if (field.persist) { + name = field.name; + me.modified[name] = me.get(name); + } + } + }, + + + + reject : function(silent) { + var me = this, + modified = me.modified, + field; + + for (field in modified) { + if (modified.hasOwnProperty(field)) { + if (typeof modified[field] != "function") { + me[me.persistenceProperty][field] = modified[field]; + } + } + } + + me.dirty = false; + me.editing = false; + me.modified = {}; + + if (silent !== true) { + me.afterReject(); + } + }, + + + commit : function(silent, modifiedFieldNames) { + var me = this; + + me.phantom = me.dirty = me.editing = false; + me.modified = {}; + + if (silent !== true) { + me.afterCommit(modifiedFieldNames); + } + }, + + + copy : function(newId) { + var me = this; + return new me.self(me.raw, newId, null, Ext.apply({}, me[me.persistenceProperty])); + }, + + + setProxy: function(proxy) { + + if (!proxy.isProxy) { + if (typeof proxy === "string") { + proxy = { + type: proxy + }; + } + proxy = Ext.createByAlias("proxy." + proxy.type, proxy); + } + proxy.setModel(this.self); + this.proxy = proxy; + + return proxy; + }, + + + getProxy: function() { + return this.hasOwnProperty('proxy') ? this.proxy : this.self.getProxy(); + }, + + + validate: function() { + var errors = new Ext.data.Errors(), + validations = this.validations, + validators = Ext.data.validations, + length, validation, field, valid, type, i; + + if (validations) { + length = validations.length; + + for (i = 0; i < length; i++) { + validation = validations[i]; + field = validation.field || validation.name; + type = validation.type; + valid = validators[type](validation, this.get(field)); + + if (!valid) { + errors.add({ + field : field, + message: validation.message || validators[type + 'Message'] + }); + } + } + } + + return errors; + }, + + + isValid: function(){ + return this.validate().isValid(); + }, + + + save: function(options) { + options = Ext.apply({}, options); + + var me = this, + action = me.phantom ? 'create' : 'update', + scope = options.scope || me, + stores = me.stores, + i = 0, + storeCount, + store, + args, + operation, + callback; + + Ext.apply(options, { + records: [me], + action : action + }); + + operation = new Ext.data.Operation(options); + + callback = function(operation) { + args = [me, operation]; + if (operation.wasSuccessful()) { + for(storeCount = stores.length; i < storeCount; i++) { + store = stores[i]; + store.fireEvent('write', store, operation); + store.fireEvent('datachanged', store); + + } + Ext.callback(options.success, scope, args); + } else { + Ext.callback(options.failure, scope, args); + } + + Ext.callback(options.callback, scope, args); + }; + + me.getProxy()[action](operation, callback, me); + + return me; + }, + + + destroy: function(options) { + options = Ext.apply({ + records: [this], + action : 'destroy' + }, options); + + var me = this, + isNotPhantom = me.phantom !== true, + scope = options.scope || me, + stores, + i = 0, + storeCount, + store, + args, + operation, + callback; + + operation = new Ext.data.Operation(options); + + callback = function(operation) { + args = [me, operation]; + + + stores = Ext.Array.clone(me.stores); + if (operation.wasSuccessful()) { + for (storeCount = stores.length; i < storeCount; i++) { + store = stores[i]; + + + + if (store.remove) { + store.remove(me, true); + } + if (isNotPhantom) { + store.fireEvent('write', store, operation); + } + } + me.clearListeners(); + Ext.callback(options.success, scope, args); + } else { + Ext.callback(options.failure, scope, args); + } + Ext.callback(options.callback, scope, args); + }; + + + + if (isNotPhantom) { + me.getProxy().destroy(operation, callback, me); + } + + else { + operation.complete = operation.success = true; + operation.resultSet = me.getProxy().reader.nullResultSet; + callback(operation); + } + return me; + }, + + + getId: function() { + return this.get(this.idField.name); + }, + + + getObservableId: function() { + return this.id; + }, + + + setId: function(id) { + this.set(this.idProperty, id); + }, + + changeId: function(oldId, newId) { + var me = this, + hasOldId, hasId, oldInternalId; + + if (!me.preventInternalUpdate) { + hasOldId = me.hasId(oldId); + hasId = me.hasId(newId); + oldInternalId = me.internalId; + me.phantom = !hasId; + + + + + if (hasId !== hasOldId || (hasId && hasOldId)) { + me.internalId = hasId ? newId : Ext.data.Model.id(me); + } + + me.fireEvent('idchanged', me, oldId, newId, oldInternalId); + me.callStore('onIdChanged', oldId, newId, oldInternalId); + } + }, + + + hasId: function(id) { + if (arguments.length === 0) { + id = this.getId(); + } + return !!(id || id === 0); + }, + + + join : function(store) { + var me = this; + + + if (!me.stores.length) { + me.stores[0] = store; + } else { + Ext.Array.include(this.stores, store); + } + + + this.store = this.stores[0]; + }, + + + unjoin: function(store) { + Ext.Array.remove(this.stores, store); + this.store = this.stores[0] || null; + }, + + + afterEdit : function(modifiedFieldNames) { + this.callStore('afterEdit', modifiedFieldNames); + }, + + + afterReject : function() { + this.callStore('afterReject'); + }, + + + afterCommit: function(modifiedFieldNames) { + this.callStore('afterCommit', modifiedFieldNames); + }, + + + callStore: function(fn) { + var args = Ext.Array.clone(arguments), + stores = this.stores, + i = 0, + len = stores.length, + store; + + args[0] = this; + for (; i < len; ++i) { + store = stores[i]; + if (store && Ext.isFunction(store[fn])) { + store[fn].apply(store, args); + } + } + }, + + + getData: function(includeAssociated){ + var me = this, + fields = me.fields.items, + fLen = fields.length, + data = {}, + name, f; + + for (f = 0; f < fLen; f++) { + name = fields[f].name; + data[name] = me.get(name); + } + + if (includeAssociated === true) { + Ext.apply(data, me.getAssociatedData()); + } + return data; + }, + + + getAssociatedData: function(){ + return this.prepareAssociatedData({}, 1); + }, + + + prepareAssociatedData: function(seenKeys, depth) { + + var me = this, + associations = me.associations.items, + associationCount = associations.length, + associationData = {}, + + + + toRead = [], + toReadKey = [], + toReadIndex = [], + associatedStore, associatedRecords, associatedRecord, o, index, result, seenDepth, + associationId, associatedRecordCount, association, i, j, type, name; + + for (i = 0; i < associationCount; i++) { + association = associations[i]; + associationId = association.associationId; + + seenDepth = seenKeys[associationId]; + if (seenDepth && seenDepth !== depth) { + continue; + } + seenKeys[associationId] = depth; + + type = association.type; + name = association.name; + if (type == 'hasMany') { + + associatedStore = me[association.storeName]; + + + associationData[name] = []; + + + if (associatedStore && associatedStore.getCount() > 0) { + associatedRecords = associatedStore.data.items; + associatedRecordCount = associatedRecords.length; + + + + for (j = 0; j < associatedRecordCount; j++) { + associatedRecord = associatedRecords[j]; + associationData[name][j] = associatedRecord.getData(); + toRead.push(associatedRecord); + toReadKey.push(name); + toReadIndex.push(j); + } + } + } else if (type == 'belongsTo' || type == 'hasOne') { + associatedRecord = me[association.instanceName]; + + if (associatedRecord !== undefined) { + associationData[name] = associatedRecord.getData(); + toRead.push(associatedRecord); + toReadKey.push(name); + toReadIndex.push(-1); + } + } + } + + for (i = 0, associatedRecordCount = toRead.length; i < associatedRecordCount; ++i) { + associatedRecord = toRead[i]; + o = associationData[toReadKey[i]]; + index = toReadIndex[i]; + result = associatedRecord.prepareAssociatedData(seenKeys, depth + 1); + if (index === -1) { + Ext.apply(o, result); + } else { + Ext.apply(o[index], result); + } + } + + return associationData; + } +}); + + +Ext.define('Ext.data.proxy.Server', { + extend: Ext.data.proxy.Proxy , + alias : 'proxy.server', + alternateClassName: 'Ext.data.ServerProxy', + + + + + + pageParam: 'page', + + + startParam: 'start', + + + limitParam: 'limit', + + + groupParam: 'group', + + + groupDirectionParam: 'groupDir', + + + sortParam: 'sort', + + + filterParam: 'filter', + + + directionParam: 'dir', + + + idParam: 'id', + + + simpleSortMode: false, + + + simpleGroupMode: false, + + + noCache : true, + + + cacheString: "_dc", + + + timeout : 30000, + + + + constructor: function(config) { + var me = this; + + config = config || {}; + + me.callParent([config]); + + + me.extraParams = config.extraParams || {}; + + me.api = Ext.apply({}, config.api || me.api); + + + + me.nocache = me.noCache; + }, + + + create: function() { + return this.doRequest.apply(this, arguments); + }, + + read: function() { + return this.doRequest.apply(this, arguments); + }, + + update: function() { + return this.doRequest.apply(this, arguments); + }, + + destroy: function() { + return this.doRequest.apply(this, arguments); + }, + + + setExtraParam: function(name, value) { + this.extraParams[name] = value; + }, + + + buildRequest: function(operation) { + var me = this, + + params = operation.params = Ext.apply({}, operation.params, me.extraParams), + request; + + + Ext.applyIf(params, me.getParams(operation)); + + + + + if (operation.id !== undefined && params[me.idParam] === undefined) { + params[me.idParam] = operation.id; + } + + request = new Ext.data.Request({ + params : params, + action : operation.action, + records : operation.records, + operation: operation, + url : operation.url, + + + + proxy: me + }); + + request.url = me.buildUrl(request); + + + operation.request = request; + + return request; + }, + + + processResponse: function(success, operation, request, response, callback, scope) { + var me = this, + reader, + result; + + if (success === true) { + reader = me.getReader(); + + + + + reader.applyDefaults = operation.action === 'read'; + + result = reader.read(me.extractResponseData(response)); + + if (result.success !== false) { + + Ext.apply(operation, { + response: response, + resultSet: result + }); + + operation.commitRecords(result.records); + operation.setCompleted(); + operation.setSuccessful(); + } else { + operation.setException(result.message); + me.fireEvent('exception', this, response, operation); + } + } else { + me.setException(operation, response); + me.fireEvent('exception', this, response, operation); + } + + + if (typeof callback == 'function') { + callback.call(scope || me, operation); + } + + me.afterRequest(request, success); + }, + + + setException: function(operation, response) { + operation.setException({ + status: response.status, + statusText: response.statusText + }); + }, + + + extractResponseData: Ext.identityFn, + + + applyEncoding: function(value) { + return Ext.encode(value); + }, + + + encodeSorters: function(sorters) { + var min = [], + length = sorters.length, + i = 0; + + for (; i < length; i++) { + min[i] = { + property : sorters[i].property, + direction: sorters[i].direction + }; + } + return this.applyEncoding(min); + + }, + + + encodeFilters: function(filters) { + var min = [], + length = filters.length, + i = 0; + + for (; i < length; i++) { + min[i] = { + property: filters[i].property, + value : filters[i].value + }; + } + return this.applyEncoding(min); + }, + + + getParams: function(operation) { + var me = this, + params = {}, + isDef = Ext.isDefined, + groupers = operation.groupers, + sorters = operation.sorters, + filters = operation.filters, + page = operation.page, + start = operation.start, + limit = operation.limit, + simpleSortMode = me.simpleSortMode, + simpleGroupMode = me.simpleGroupMode, + pageParam = me.pageParam, + startParam = me.startParam, + limitParam = me.limitParam, + groupParam = me.groupParam, + groupDirectionParam = me.groupDirectionParam, + sortParam = me.sortParam, + filterParam = me.filterParam, + directionParam = me.directionParam, + hasGroups, index; + + if (pageParam && isDef(page)) { + params[pageParam] = page; + } + + if (startParam && isDef(start)) { + params[startParam] = start; + } + + if (limitParam && isDef(limit)) { + params[limitParam] = limit; + } + + hasGroups = groupParam && groupers && groupers.length > 0; + if (hasGroups) { + + if (simpleGroupMode) { + params[groupParam] = groupers[0].property; + params[groupDirectionParam] = groupers[0].direction || 'ASC'; + } else { + params[groupParam] = me.encodeSorters(groupers); + } + } + + if (sortParam && sorters && sorters.length > 0) { + if (simpleSortMode) { + index = 0; + + if (sorters.length > 1 && hasGroups) { + index = 1; + } + params[sortParam] = sorters[index].property; + params[directionParam] = sorters[index].direction; + } else { + params[sortParam] = me.encodeSorters(sorters); + } + + } + + if (filterParam && filters && filters.length > 0) { + params[filterParam] = me.encodeFilters(filters); + } + + return params; + }, + + + buildUrl: function(request) { + var me = this, + url = me.getUrl(request); + + + if (me.noCache) { + url = Ext.urlAppend(url, Ext.String.format("{0}={1}", me.cacheString, Ext.Date.now())); + } + + return url; + }, + + + getUrl: function(request) { + return request.url || this.api[request.action] || this.url; + }, + + + doRequest: function(operation, callback, scope) { + }, + + + afterRequest: Ext.emptyFn, + + onDestroy: function() { + Ext.destroy(this.reader, this.writer); + } +}); + + +Ext.define('Ext.data.proxy.Ajax', { + + extend: Ext.data.proxy.Server , + alias: 'proxy.ajax', + alternateClassName: ['Ext.data.HttpProxy', 'Ext.data.AjaxProxy'], + + + actionMethods: { + create : 'POST', + read : 'GET', + update : 'POST', + destroy: 'POST' + }, + + + binary: false, + + + + doRequest: function(operation, callback, scope) { + var writer = this.getWriter(), + request = this.buildRequest(operation); + + if (operation.allowWrite()) { + request = writer.write(request); + } + + Ext.apply(request, { + binary : this.binary, + headers : this.headers, + timeout : this.timeout, + scope : this, + callback : this.createRequestCallback(request, operation, callback, scope), + method : this.getMethod(request), + disableCaching: false + }); + + Ext.Ajax.request(request); + + return request; + }, + + + getMethod: function(request) { + return this.actionMethods[request.action]; + }, + + + createRequestCallback: function(request, operation, callback, scope) { + var me = this; + + return function(options, success, response) { + me.processResponse(success, operation, request, response, callback, scope); + }; + } +}, function() { + + Ext.data.HttpProxy = this; +}); + + +Ext.define('Ext.data.proxy.Client', { + extend: Ext.data.proxy.Proxy , + alternateClassName: 'Ext.data.ClientProxy', + + + isSynchronous: true, + + + clear: function() { + } +}); + + +Ext.define('Ext.data.proxy.Memory', { + extend: Ext.data.proxy.Client , + alias: 'proxy.memory', + alternateClassName: 'Ext.data.MemoryProxy', + + + + + + constructor: function(config) { + this.callParent([config]); + + + this.setReader(this.reader); + }, + + + updateOperation: function(operation, callback, scope) { + var i = 0, + recs = operation.getRecords(), + len = recs.length; + + for (i; i < len; i++) { + recs[i].commit(); + } + operation.setCompleted(); + operation.setSuccessful(); + + Ext.callback(callback, scope || this, [operation]); + }, + + + create: function() { + this.updateOperation.apply(this, arguments); + }, + + + update: function() { + this.updateOperation.apply(this, arguments); + }, + + + destroy: function() { + this.updateOperation.apply(this, arguments); + }, + + + read: function(operation, callback, scope) { + var me = this, + resultSet = operation.resultSet = me.getReader().read(me.data), + records = resultSet.records, + sorters = operation.sorters, + groupers = operation.groupers, + filters = operation.filters; + + operation.setCompleted(); + + + if (resultSet.success) { + + + if (filters && filters.length) { + records = resultSet.records = Ext.Array.filter(records, Ext.util.Filter.createFilterFn(filters)); + } + + + if (groupers && groupers.length) { + Ext.Array.insert(sorters||[], 0, groupers); + } + + + if (sorters && sorters.length) { + resultSet.records = Ext.Array.sort(records, Ext.util.Sortable.createComparator(sorters)); + } + + + + if (me.enablePaging && operation.start !== undefined && operation.limit !== undefined) { + + + if (operation.start >= resultSet.total) { + resultSet.success = false; + resultSet.count = 0; + resultSet.records = []; + } + + else { + resultSet.records = Ext.Array.slice(resultSet.records, operation.start, operation.start + operation.limit); + resultSet.count = resultSet.records.length; + } + } + } + + if (resultSet.success) { + operation.setSuccessful(); + } else { + me.fireEvent('exception', me, null, operation); + } + Ext.callback(callback, scope || me, [operation]); + }, + + clear: Ext.emptyFn +}); + + +Ext.define('Ext.util.LruCache', { + extend: Ext.util.HashMap , + + + + constructor: function(config) { + Ext.apply(this, config); + this.callParent([config]); + }, + + + add: function(key, newValue) { + var me = this, + existingKey = me.findKey(newValue), + entry; + + + if (existingKey) { + me.unlinkEntry(entry = me.map[existingKey]); + entry.prev = me.last; + entry.next = null; + } + + else { + entry = { + prev: me.last, + next: null, + key: key, + value: newValue + }; + } + + + if (me.last) { + me.last.next = entry; + } + + else { + me.first = entry; + } + me.last = entry; + me.callParent([key, entry]); + me.prune(); + return newValue; + }, + + + insertBefore: function(key, newValue, sibling) { + var me = this, + existingKey, + entry; + + + + if (sibling = this.map[this.findKey(sibling)]) { + existingKey = me.findKey(newValue); + + + if (existingKey) { + me.unlinkEntry(entry = me.map[existingKey]); + } + + else { + entry = { + prev: sibling.prev, + next: sibling, + key: key, + value: newValue + }; + } + + if (sibling.prev) { + entry.prev.next = entry; + } else { + me.first = entry; + } + entry.next = sibling; + sibling.prev = entry; + me.prune(); + return newValue; + } + + else { + return me.add(key, newValue); + } + }, + + + get: function(key) { + var entry = this.map[key]; + if (entry) { + + + if (entry.next) { + this.moveToEnd(entry); + } + return entry.value; + } + }, + + + removeAtKey: function(key) { + this.unlinkEntry(this.map[key]); + return this.callParent(arguments); + }, + + + clear: function( initial) { + this.first = this.last = null; + return this.callParent(arguments); + }, + + + unlinkEntry: function(entry) { + + if (entry) { + if (entry.next) { + entry.next.prev = entry.prev; + } else { + this.last = entry.prev; + } + if (entry.prev) { + entry.prev.next = entry.next; + } else { + this.first = entry.next; + } + entry.prev = entry.next = null; + } + }, + + + moveToEnd: function(entry) { + this.unlinkEntry(entry); + + + + if (entry.prev = this.last) { + this.last.next = entry; + } + + else { + this.first = entry; + } + this.last = entry; + }, + + + getArray: function(isKey) { + var arr = [], + entry = this.first; + + while (entry) { + arr.push(isKey ? entry.key: entry.value); + entry = entry.next; + } + return arr; + }, + + + each: function(fn, scope, reverse) { + var me = this, + entry = reverse ? me.last : me.first, + length = me.length; + + scope = scope || me; + while (entry) { + if (fn.call(scope, entry.key, entry.value, length) === false) { + break; + } + entry = reverse ? entry.prev : entry.next; + } + return me; + }, + + + findKey: function(value) { + var key, + map = this.map; + + for (key in map) { + + + if (map.hasOwnProperty(key) && map[key].value === value) { + return key; + } + } + return undefined; + }, + + + clone: function() { + var newCache = new this.self(this.initialConfig), + map = this.map, + key; + + newCache.suspendEvents(); + for (key in map) { + if (map.hasOwnProperty(key)) { + newCache.add(key, map[key].value); + } + } + newCache.resumeEvents(); + return newCache; + }, + + + prune: function() { + var me = this, + purgeCount = me.maxSize ? (me.length - me.maxSize) : 0; + + if (purgeCount > 0) { + for (; me.first && purgeCount; purgeCount--) { + me.removeAtKey(me.first.key); + } + } + } + + + + + +}); + + +Ext.define('Ext.data.Group', { + + extend: Ext.util.Observable , + + key: undefined, + + dirty: true, + + constructor: function(){ + this.callParent(arguments); + this.records = []; + }, + + contains: function(record){ + return Ext.Array.indexOf(this.records, record); + }, + + add: function(records) { + Ext.Array.push(this.records, records); + this.dirty = true; + }, + + remove: function(records) { + if (!Ext.isArray(records)) { + records = [records]; + } + + var len = records.length, + i; + + for (i = 0; i < len; ++i) { + Ext.Array.remove(this.records, records[i]); + } + this.dirty = true; + }, + + isDirty: function(){ + return this.dirty; + }, + + hasAggregate: function(){ + return !!this.aggregate; + }, + + setDirty: function(){ + this.dirty = true; + }, + + commit: function(){ + this.dirty = false; + }, + + isCollapsed: function(){ + return this.collapsed; + }, + + getAggregateRecord: function(forceNew){ + var me = this, + Model; + + if (forceNew === true || me.dirty || !me.aggregate) { + Model = me.store.model; + me.aggregate = new Model(); + me.aggregate.isSummary = true; + } + return me.aggregate; + } + +}); + + +Ext.define('Ext.data.Store', { + extend: Ext.data.AbstractStore , + + alias: 'store.store', + + + + + + + + + + + + + + + + + + + + + + + remoteSort: false, + + + remoteFilter: false, + + + remoteGroup : false, + + + + + + + + + groupField: undefined, + + + groupDir: "ASC", + + + trailingBufferZone: 25, + + + leadingBufferZone: 200, + + + pageSize: undefined, + + + currentPage: 1, + + + clearOnPageLoad: true, + + + loading: false, + + + sortOnFilter: true, + + + buffered: false, + + + purgePageCount: 5, + + + clearRemovedOnLoad: true, + + defaultPageSize: 25, + + + defaultViewSize: 100, + + + addRecordsOptions: { + addRecords: true + }, + + statics: { + recordIdFn: function(record) { + return record.internalId; + }, + recordIndexFn: function(record) { + return record.index; + }, + grouperIdFn: function(grouper) { + return grouper.id || grouper.property; + }, + groupIdFn: function(group) { + return group.key; + } + }, + + + constructor: function(config) { + + config = Ext.apply({}, config); + + var me = this, + groupers = config.groupers || me.groupers, + groupField = config.groupField || me.groupField, + proxy, + data; + + + + + + data = config.data || me.data; + + if (data) { + me.inlineData = data; + delete config.data; + } + + if (!groupers && groupField) { + groupers = [{ + property : groupField, + direction: config.groupDir || me.groupDir + }]; + } + delete config.groupers; + + + me.groupers = new Ext.util.MixedCollection(false, Ext.data.Store.grouperIdFn); + me.groupers.addAll(me.decodeGroupers(groupers)); + + me.groups = new Ext.util.MixedCollection(false, Ext.data.Store.groupIdFn); + + me.callParent([config]); + + + if (me.buffered) { + me.data = new me.PageMap({ + store: me, + keyFn: Ext.data.Store.recordIdFn, + pageSize: me.pageSize, + maxSize: me.purgePageCount, + listeners: { + + + clear: me.onPageMapClear, + scope: me + } + }); + me.pageRequests = {}; + + + me.remoteSort = me.remoteGroup = me.remoteFilter = true; + + me.sortOnLoad = false; + me.filterOnLoad = false; + } else { + + me.data = new Ext.util.MixedCollection({ + getKey: Ext.data.Store.recordIdFn, + maintainIndices: true + }); + me.data.pageSize = me.pageSize; + } + + + if (me.remoteGroup) { + me.remoteSort = true; + } + + proxy = me.proxy; + data = me.inlineData; + + + + if (!me.buffered && !me.pageSize) { + me.pageSize = me.defaultPageSize; + } + + if (data) { + if (proxy instanceof Ext.data.proxy.Memory) { + proxy.data = data; + me.read(); + } else { + me.add.apply(me, [data]); + } + + + if (!me.remoteSort) { + me.sort(); + } + delete me.inlineData; + } else if (me.autoLoad) { + + Ext.defer(me.load, 1, me, [ typeof me.autoLoad === 'object' ? me.autoLoad : undefined ]); + } + + + if (me.groupers.items.length && !me.remoteGroup) { + me.group(null, null, true); + } + }, + + onBeforeSort: function() { + var groupers = this.groupers; + if (groupers.getCount() > 0) { + this.sort(groupers.items, 'prepend', false); + } + }, + + + decodeGroupers: function(groupers) { + if (!Ext.isArray(groupers)) { + if (groupers === undefined) { + groupers = []; + } else { + groupers = [groupers]; + } + } + + var length = groupers.length, + Grouper = Ext.util.Grouper, + config, i, result = []; + + for (i = 0; i < length; i++) { + config = groupers[i]; + + if (!(config instanceof Grouper)) { + if (Ext.isString(config)) { + config = { + property: config + }; + } + + config = Ext.apply({ + root : 'data', + direction: "ASC" + }, config); + + + if (config.fn) { + config.sorterFn = config.fn; + } + + + if (typeof config == 'function') { + config = { + sorterFn: config + }; + } + + + result.push(new Grouper(config)); + } else { + result.push(config); + } + } + return result; + }, + + + group: function(groupers, direction, suppressEvent) { + var me = this, + grouper, + newGroupers, + oldGroupers = me.groupers.getRange(), + i, gLen = oldGroupers.length; + + + for (i = 0; i < gLen; i++) { + me.sorters.remove(oldGroupers[i]); + } + + if (Ext.isArray(groupers)) { + newGroupers = groupers; + } else if (Ext.isObject(groupers)) { + newGroupers = [groupers]; + } else if (Ext.isString(groupers)) { + grouper = me.groupers.get(groupers); + + if (!grouper) { + grouper = { + property : groupers, + direction: direction || 'ASC' + }; + newGroupers = [grouper]; + } else if (direction === undefined) { + grouper.toggle(); + } else { + grouper.setDirection(direction); + } + } + + + if (newGroupers && newGroupers.length) { + me.groupers.clear(); + me.groupers.addAll(me.decodeGroupers(newGroupers)); + } + + + me.sorters.insert(0, me.groupers.getRange()); + + if (me.remoteGroup) { + if (me.buffered) { + me.data.clear(); + me.loadPage(1, { groupChange: true }); + } else { + me.load({ + scope: me, + callback: suppressEvent ? null : me.fireGroupChange + }); + } + } else { + me.doSort(me.generateComparator()); + me.constructGroups(); + if (!suppressEvent) { + me.fireGroupChange(); + } + } + }, + + getGroupField: function(){ + var first = this.groupers.first(), + group; + + if (first) { + group = first.property; + } + return group; + }, + + constructGroups: function(){ + var me = this, + data = this.data.items, + len = data.length, + groups = me.groups, + groupValue, i, group, rec; + + groups.clear(); + + for (i = 0; i < len; ++i) { + rec = data[i]; + groupValue = me.getGroupString(rec); + group = groups.get(groupValue); + if (!group) { + group = new Ext.data.Group({ + key: groupValue, + store: me + }); + groups.add(groupValue, group); + } + group.add(rec); + } + }, + + + clearGrouping: function() { + var me = this, + groupers = me.groupers.items, + gLen = groupers.length, + g; + + + for (g = 0; g < gLen; g++) { + me.sorters.remove(groupers[g]); + } + me.groupers.clear(); + if (me.remoteGroup) { + if (me.buffered) { + me.data.clear(); + me.loadPage(1, { groupChange: true }); + } else { + me.load({ + scope: me, + callback: me.fireGroupChange + }); + } + } else { + me.groups.clear(); + if (me.sorters.length) { + me.sort(); + } else { + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + } + me.fireGroupChange(); + } + }, + + + isGrouped: function() { + return this.groupers.getCount() > 0; + }, + + + fireGroupChange: function() { + this.fireEvent('groupchange', this, this.groupers); + }, + + + getGroups: function(requestGroupString) { + var records = this.data.items, + length = records.length, + groups = [], + pointers = {}, + record, + groupStr, + group, + i; + + for (i = 0; i < length; i++) { + record = records[i]; + groupStr = this.getGroupString(record); + group = pointers[groupStr]; + + if (group === undefined) { + group = { + name: groupStr, + children: [] + }; + + groups.push(group); + pointers[groupStr] = group; + } + + group.children.push(record); + } + + return requestGroupString ? pointers[requestGroupString] : groups; + }, + + + getGroupsForGrouper: function(records, grouper) { + var length = records.length, + groups = [], + oldValue, + newValue, + record, + group, + i; + + for (i = 0; i < length; i++) { + record = records[i]; + newValue = grouper.getGroupString(record); + + if (newValue !== oldValue) { + group = { + name: newValue, + grouper: grouper, + records: [] + }; + groups.push(group); + } + + group.records.push(record); + + oldValue = newValue; + } + + return groups; + }, + + + getGroupsForGrouperIndex: function(records, grouperIndex) { + var me = this, + groupers = me.groupers, + grouper = groupers.getAt(grouperIndex), + groups = me.getGroupsForGrouper(records, grouper), + length = groups.length, + i; + + if (grouperIndex + 1 < groupers.length) { + for (i = 0; i < length; i++) { + groups[i].children = me.getGroupsForGrouperIndex(groups[i].records, grouperIndex + 1); + } + } + + for (i = 0; i < length; i++) { + groups[i].depth = grouperIndex; + } + + return groups; + }, + + + getGroupData: function(sort) { + var me = this; + if (sort !== false) { + me.sort(); + } + + return me.getGroupsForGrouperIndex(me.data.items, 0); + }, + + + getGroupString: function(instance) { + var group = this.groupers.first(); + if (group) { + return group.getGroupString(instance); + } + return ''; + }, + + + insert: function(index, records) { + var me = this, + sync = false, + i, len, record, + defaults = me.modelDefaults, + out; + + + if (!Ext.isIterable(records)) { + out = records = [records]; + } else { + out = []; + } + len = records.length; + + if (len) { + for (i = 0; i < len; i++) { + record = records[i]; + if (!record.isModel) { + record = me.createModel(record); + } + out[i] = record; + if (defaults) { + record.set(defaults); + } + + record.join(me); + sync = sync || record.phantom === true; + } + + me.data.insert(index, out); + + if (me.snapshot) { + me.snapshot.addAll(out); + } + + if (me.requireSort) { + + me.suspendEvents(); + me.sort(); + me.resumeEvents(); + } + + if (me.isGrouped()) { + me.updateGroupsOnAdd(out); + } + + me.fireEvent('add', me, out, index); + me.fireEvent('datachanged', me); + if (me.autoSync && sync && !me.autoSyncSuspended) { + me.sync(); + } + } + return out; + }, + + updateGroupsOnAdd: function(records) { + var me = this, + groups = me.groups, + len = records.length, + i, groupName, group, rec; + + for (i = 0; i < len; ++i) { + rec = records[i]; + groupName = me.getGroupString(rec); + group = groups.getByKey(groupName); + if (!group) { + group = groups.add(new Ext.data.Group({ + key: groupName, + store: me + })); + } + group.add(rec); + } + }, + + updateGroupsOnRemove: function(records) { + var me = this, + groups = me.groups, + len = records.length, + i, groupName, group, rec; + + for (i = 0; i < len; ++i) { + rec = records[i]; + groupName = me.getGroupString(rec); + group = groups.getByKey(groupName); + + if (group) { + group.remove(rec); + if (group.records.length === 0) { + groups.remove(group); + } + } + } + }, + + updateGroupsOnUpdate: function(record, modifiedFieldNames){ + var me = this, + groupField = me.getGroupField(), + groupName = me.getGroupString(record), + groups = me.groups, + len, i, items, group; + + if (modifiedFieldNames && Ext.Array.indexOf(modifiedFieldNames, groupField) !== -1) { + + items = groups.items; + for (i = 0, len = items.length; i < len; ++i) { + group = items[i]; + if (group.contains(record)) { + group.remove(record); + break; + } + } + groups.getByKey(groupName); + if (!group) { + group = groups.add(new Ext.data.Group({ + key: groupName, + store: me + })); + } + group.add(record); + + + me.suspendEvents(); + me.remove(record); + me.addSorted(record); + me.resumeEvents(); + } else { + + groups.getByKey(groupName).setDirty(); + } + }, + + + add: function(arg) { + var me = this, + records, + length, isSorted; + + + + if (Ext.isArray(arg)) { + records = arg; + } else { + records = arguments; + } + + length = records.length; + isSorted = !me.remoteSort && me.sorters && me.sorters.items.length; + + + + if (isSorted && length === 1) { + return [ me.addSorted(me.createModel(records[0])) ]; + } + + + + if (isSorted) { + me.requireSort = true; + } + + records = me.insert(me.data.length, records); + delete me.requireSort; + + return records; + }, + + + addSorted: function(record) { + var me = this, + index = me.data.findInsertionIndex(record, me.generateComparator()); + + me.insert(index, record); + return record; + }, + + + createModel: function(record) { + if (!record.isModel) { + record = Ext.ModelManager.create(record, this.model); + } + + return record; + }, + + onUpdate: function(record, type, modifiedFieldNames){ + if (this.isGrouped()) { + this.updateGroupsOnUpdate(record, modifiedFieldNames); + } + }, + + + each: function(fn, scope) { + var data = this.data.items, + dLen = data.length, + record, d; + + for (d = 0; d < dLen; d++) { + record = data[d]; + if (fn.call(scope || record, record, d, dLen) === false) { + break; + } + } + }, + + + remove: function(records, isMove, silent) { + + isMove = isMove === true; + + var me = this, + sync = false, + snapshot = me.snapshot, + data = me.data, + i = 0, + length, + info = [], + allRecords = [], + indexes = [], + item, + isNotPhantom, + index, + record, + removeRange, + removeCount, + fireRemoveEvent = !silent && me.hasListeners.remove; + + + if (records.isModel) { + records = [records]; + length = 1; + } + + + else if (Ext.isIterable(records)) { + length = records.length; + } + + + + else if (typeof records === 'object') { + removeRange = true; + i = records.start; + length = records.end + 1; + removeCount = length - i; + } + + + + if (!removeRange) { + for (i = 0; i < length; ++i) { + + record = records[i]; + + + if (typeof record == 'number') { + index = record; + record = data.getAt(index); + } + + else { + index = me.indexOf(record); + } + + + if (record && index > -1) { + info.push({ + record: record, + index: index + }); + } + + + if (snapshot) { + snapshot.remove(record); + } + } + + + info = Ext.Array.sort(info, function(o1, o2) { + var index1 = o1.index, + index2 = o2.index; + + return index1 === o2.index2 ? 0 : (index1 < index2 ? -1 : 1); + }); + + + i = 0; + length = info.length; + } + + + + + for (; i < length; i++) { + if (removeRange) { + record = data.getAt(i); + index = i; + } else { + item = info[i]; + record = item.record; + index = item.index; + } + + allRecords.push(record); + indexes.push(index); + + isNotPhantom = record.phantom !== true; + + if (!isMove && isNotPhantom) { + + + + record.removedFrom = index; + me.removed.push(record); + } + + record.unjoin(me); + + + + index -= i; + sync = sync || isNotPhantom; + + + + if (!removeRange) { + data.removeAt(index); + + + if (fireRemoveEvent) { + me.fireEvent('remove', me, record, index, !!isMove); + } + } + } + + + + if (removeRange) { + data.removeRange(records.start, removeCount); + } + + if (!silent) { + me.fireEvent('bulkremove', me, allRecords, indexes, !!isMove); + me.fireEvent('datachanged', me); + } + if (!isMove && me.autoSync && sync && !me.autoSyncSuspended) { + me.sync(); + } + }, + + + removeAt: function(index, count) { + var me = this, + storeCount = me.getCount(); + + if (index <= storeCount) { + if (arguments.length === 1) { + me.remove([ index ]); + } else if (count) { + me.remove({ + start: index, + end: Math.min(index + count, storeCount) - 1 + }); + } + } + }, + + + removeAll: function(silent) { + var me = this; + + + + me.remove({ + start: 0, + end: me.getCount() - 1 + }, false, silent); + + + + if (me.data) { + me.data.clear(); + } + if (silent !== true) { + me.fireEvent('clear', me); + } + }, + + + load: function(options) { + var me = this; + + options = options || {}; + + if (typeof options == 'function') { + options = { + callback: options + }; + } + + options.groupers = options.groupers || me.groupers.items; + options.page = options.page || me.currentPage; + options.start = (options.start !== undefined) ? options.start : (options.page - 1) * me.pageSize; + options.limit = options.limit || me.pageSize; + options.addRecords = options.addRecords || false; + + if (me.buffered) { + options.limit = me.viewSize || me.defaultViewSize; + return me.loadToPrefetch(options); + } + return me.callParent([options]); + }, + + reload: function(options) { + var me = this, + startIdx, + endIdx, + startPage, + endPage, + i, + waitForReload, + bufferZone, + records, + count = me.getCount(); + + if (!options) { + options = {}; + } + + + + if (me.buffered) { + + + delete me.totalCount; + + waitForReload = function() { + if (me.rangeCached(startIdx, endIdx)) { + me.loading = false; + me.data.un('pageAdded', waitForReload); + records = me.data.getRange(startIdx, endIdx); + me.fireEvent('load', me, records, true); + } + }; + bufferZone = Math.ceil((me.leadingBufferZone + me.trailingBufferZone) / 2); + + + startIdx = options.start || (count ? me.getAt(0).index : 0); + endIdx = startIdx + (options.count || (count ? count : me.pageSize)) - 1; + + + startPage = me.getPageFromRecordIndex(Math.max(startIdx - bufferZone, 0)); + endPage = me.getPageFromRecordIndex(endIdx + bufferZone); + + + me.data.clear(true); + + if (me.fireEvent('beforeload', me, options) !== false) { + me.loading = true; + + + + me.data.on('pageAdded', waitForReload); + + + for (i = startPage; i <= endPage; i++) { + me.prefetchPage(i, options); + } + } + } else { + return me.callParent(arguments); + } + }, + + + onProxyLoad: function(operation) { + var me = this, + resultSet = operation.getResultSet(), + records = operation.getRecords(), + successful = operation.wasSuccessful(); + + if (resultSet) { + me.totalCount = resultSet.total; + } + + + + + me.loading = false; + if (successful) { + me.loadRecords(records, operation); + } + + if (me.hasListeners.load) { + me.fireEvent('load', me, records, successful); + } + + + + if (me.hasListeners.read) { + me.fireEvent('read', me, records, successful); + } + + + Ext.callback(operation.callback, operation.scope || me, [records, operation, successful]); + }, + + + getNewRecords: function() { + return this.data.filterBy(this.filterNew).items; + }, + + + getUpdatedRecords: function() { + return this.data.filterBy(this.filterUpdated).items; + }, + + + filter: function(filters, value) { + if (Ext.isString(filters)) { + filters = { + property: filters, + value: value + }; + } + + var me = this, + decoded = me.decodeFilters(filters), + i, + doLocalSort = me.sorters.length && me.sortOnFilter && !me.remoteSort, + length = decoded.length; + + for (i = 0; i < length; i++) { + me.filters.replace(decoded[i]); + } + + if (me.remoteFilter) { + + delete me.totalCount; + + + + + if (me.buffered) { + me.data.clear(); + me.loadPage(1); + } else { + + me.currentPage = 1; + + me.load(); + } + } else { + + if (me.filters.getCount()) { + me.snapshot = me.snapshot || me.data.clone(); + + + me.data = me.snapshot.filter(me.filters.items); + + + me.constructGroups(); + + if (doLocalSort) { + me.sort(); + } else { + + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + } + } + } + me.fireEvent('filterchange', me, me.filters.items); + }, + + + clearFilter: function(suppressEvent) { + var me = this; + + me.filters.clear(); + + if (me.remoteFilter) { + + + if (suppressEvent) { + return; + } + + + delete me.totalCount; + + + + + if (me.buffered) { + me.data.clear(); + me.loadPage(1); + } else { + + me.currentPage = 1; + me.load(); + } + } else if (me.isFiltered()) { + me.data = me.snapshot; + delete me.snapshot; + + + me.constructGroups(); + + if (suppressEvent !== true) { + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + } + } + me.fireEvent('filterchange', me, me.filters.items); + }, + + + removeFilter: function(toRemove, applyFilters) { + var me = this; + + if (!me.remoteFilter && me.isFiltered()) { + if (toRemove instanceof Ext.util.Filter) { + me.filters.remove(toRemove); + } else { + me.filters.removeAtKey(toRemove); + } + + if (applyFilters !== false) { + + + if (me.filters.getCount()) { + me.filter(); + } + + + else { + me.clearFilter(); + } + } + me.fireEvent('filterchange', me, me.filters.items); + } + }, + + + addFilter: function(filters, applyFilters) { + var me = this, + decoded, + i, + length; + + + decoded = me.decodeFilters(filters); + length = decoded.length; + for (i = 0; i < length; i++) { + me.filters.replace(decoded[i]); + } + + if (applyFilters !== false) { + me.filter(); + } + me.fireEvent('filterchange', me, me.filters.items); + }, + + + isFiltered: function() { + var snapshot = this.snapshot; + return !!(snapshot && snapshot !== this.data); + }, + + + filterBy: function(fn, scope) { + var me = this; + + me.snapshot = me.snapshot || me.data.clone(); + me.data = me.queryBy(fn, scope || me); + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + }, + + + queryBy: function(fn, scope) { + var me = this; + return (me.snapshot || me.data).filterBy(fn, scope || me); + }, + + + query: function(property, value, anyMatch, caseSensitive, exactMatch) { + var me = this, + queryFn = me.createFilterFn(property, value, anyMatch, caseSensitive, exactMatch), + results = me.queryBy(queryFn); + + + if(!results) { + results = new Ext.util.MixedCollection(); + } + + return results; + }, + + + loadData: function(data, append) { + var length = data.length, + newData = [], + i; + + + for (i = 0; i < length; i++) { + newData.push(this.createModel(data[i])); + } + + this.loadRecords(newData, append ? this.addRecordsOptions : undefined); + }, + + + loadRawData : function(data, append) { + var me = this, + result = me.proxy.reader.read(data), + records = result.records; + + if (result.success) { + me.totalCount = result.total; + me.loadRecords(records, append ? me.addRecordsOptions : undefined); + } + }, + + + loadRecords: function(records, options) { + var me = this, + i = 0, + length = records.length, + start, + addRecords, + snapshot = me.snapshot; + + if (options) { + start = options.start; + addRecords = options.addRecords; + } + + if (!addRecords) { + delete me.snapshot; + me.clearData(true); + } else if (snapshot) { + snapshot.addAll(records); + } + + me.data.addAll(records); + + if (start !== undefined) { + for (; i < length; i++) { + records[i].index = start + i; + records[i].join(me); + } + } else { + for (; i < length; i++) { + records[i].join(me); + } + } + + + me.suspendEvents(); + + if (me.filterOnLoad && !me.remoteFilter) { + me.filter(); + } + + if (me.sortOnLoad && !me.remoteSort) { + me.sort(undefined, undefined, undefined, true); + } + + me.resumeEvents(); + if (me.isGrouped()) { + me.constructGroups(); + } + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + }, + + + + loadPage: function(page, options) { + var me = this; + + me.currentPage = page; + + + options = Ext.apply({ + page: page, + start: (page - 1) * me.pageSize, + limit: me.pageSize, + addRecords: !me.clearOnPageLoad + }, options); + + if (me.buffered) { + options.limit = me.viewSize || me.defaultViewSize; + return me.loadToPrefetch(options); + } + me.read(options); + }, + + + nextPage: function(options) { + this.loadPage(this.currentPage + 1, options); + }, + + + previousPage: function(options) { + this.loadPage(this.currentPage - 1, options); + }, + + + clearData: function(isLoad) { + var me = this, + records, + i; + + + if (!me.buffered) { + records = me.data.items; + i = records.length; + while (i--) { + records[i].unjoin(me); + } + } + + + me.data.clear(); + if (isLoad !== true || me.clearRemovedOnLoad) { + me.removed.length = 0; + } + }, + + loadToPrefetch: function(options) { + var me = this, + i, + records, + dataSetSize, + prefetchOptions = options, + + + startIdx = options.start, + endIdx = options.start + options.limit - 1, + + + loadEndIdx = Math.min(endIdx, options.start + (me.viewSize || options.limit) - 1), + + + + startPage = me.getPageFromRecordIndex(Math.max(startIdx - me.trailingBufferZone, 0)), + endPage = me.getPageFromRecordIndex(endIdx + me.leadingBufferZone), + + + waitForRequestedRange = function() { + if (me.rangeCached(startIdx, loadEndIdx)) { + me.loading = false; + records = me.data.getRange(startIdx, loadEndIdx); + me.data.un('pageAdded', waitForRequestedRange); + + + if (me.hasListeners.guaranteedrange) { + me.guaranteeRange(startIdx, loadEndIdx, options.callback, options.scope); + } + if (options.callback) { + options.callback.call(options.scope||me, records, startIdx, endIdx, options); + } + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + me.fireEvent('load', me, records, true); + if (options.groupChange) { + me.fireGroupChange(); + } + } + }; + + if (me.fireEvent('beforeload', me, options) !== false) { + + + delete me.totalCount; + + me.loading = true; + + + + if (options.callback) { + prefetchOptions = Ext.apply({}, options); + delete options.callback; + } + + + + + + me.on('prefetch', function(records, successful, operation) { + + if (successful) { + + + if ((dataSetSize = me.getTotalCount())) { + + + me.data.on('pageAdded', waitForRequestedRange); + + + + loadEndIdx = Math.min(loadEndIdx, dataSetSize - 1); + endPage = me.getPageFromRecordIndex(loadEndIdx); + + for (i = startPage + 1; i <= endPage; ++i) { + me.prefetchPage(i, prefetchOptions); + } + } else { + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + me.fireEvent('load', me, records, true); + } + } + + else { + me.fireEvent('load', me, records, false); + } + }, null, {single: true}); + + me.prefetchPage(startPage, prefetchOptions); + } + }, + + + + prefetch: function(options) { + var me = this, + pageSize = me.pageSize, + proxy, + operation; + + + if (pageSize) { + if (me.lastPageSize && pageSize != me.lastPageSize) { + Ext.Error.raise("pageSize cannot be dynamically altered"); + } + if (!me.data.pageSize) { + me.data.pageSize = pageSize; + } + } + + + else { + me.pageSize = me.data.pageSize = pageSize = options.limit; + } + + + me.lastPageSize = pageSize; + + + if (!options.page) { + options.page = me.getPageFromRecordIndex(options.start); + options.start = (options.page - 1) * pageSize; + options.limit = Math.ceil(options.limit / pageSize) * pageSize; + } + + + if (!me.pageRequests[options.page]) { + + + options = Ext.apply({ + action : 'read', + filters: me.filters.items, + sorters: me.sorters.items, + groupers: me.groupers.items, + + + + generation: me.data.generation + }, options); + + operation = new Ext.data.Operation(options); + + if (me.fireEvent('beforeprefetch', me, operation) !== false) { + proxy = me.proxy; + me.pageRequests[options.page] = proxy.read(operation, me.onProxyPrefetch, me); + if (proxy.isSynchronous) { + delete me.pageRequests[options.page]; + } + } + } + + return me; + }, + + + onPageMapClear: function() { + var me = this, + loadingFlag = me.wasLoading, + reqs = me.pageRequests, + req, + page; + + + if (me.data.events.pageadded) { + me.data.events.pageadded.clearListeners(); + } + + + + + me.loading = true; + me.totalCount = 0; + + + for (page in reqs) { + if (reqs.hasOwnProperty(page)) { + req = reqs[page]; + delete reqs[page]; + delete req.callback; + } + } + + + me.fireEvent('clear', me); + + + + me.loading = loadingFlag; + }, + + + prefetchPage: function(page, options) { + var me = this, + pageSize = me.pageSize || me.defaultPageSize, + start = (page - 1) * me.pageSize, + total = me.totalCount; + + + if (total !== undefined && me.getCount() === total) { + return; + } + + + me.prefetch(Ext.applyIf({ + page : page, + start : start, + limit : pageSize + }, options)); + }, + + + onProxyPrefetch: function(operation) { + var me = this, + resultSet = operation.getResultSet(), + records = operation.getRecords(), + successful = operation.wasSuccessful(), + page = operation.page; + + + + if (operation.generation === me.data.generation) { + + if (resultSet) { + me.totalCount = resultSet.total; + me.fireEvent('totalcountchange', me.totalCount); + } + + + if (page !== undefined) { + delete me.pageRequests[page]; + } + + + me.loading = false; + me.fireEvent('prefetch', me, records, successful, operation); + + + + if (successful) { + me.cachePage(records, operation.page); + } + + + Ext.callback(operation.callback, operation.scope || me, [records, operation, successful]); + } + }, + + + cachePage: function(records, page) { + var me = this, + len = records.length, i; + + if (!Ext.isDefined(me.totalCount)) { + me.totalCount = records.length; + me.fireEvent('totalcountchange', me.totalCount); + } + + + for (i = 0; i < len; i++) { + records[i].join(me); + } + me.data.addPage(page, records); + }, + + + rangeCached: function(start, end) { + return this.data && this.data.hasRange(start, end); + }, + + + pageCached: function(page) { + return this.data && this.data.hasPage(page); + }, + + + rangeSatisfied: function(start, end) { + return this.rangeCached(start, end); + }, + + + getPageFromRecordIndex: function(index) { + return Math.floor(index / this.pageSize) + 1; + }, + + + onGuaranteedRange: function(options) { + var me = this, + totalCount = me.getTotalCount(), + start = options.prefetchStart, + end = (options.prefetchEnd > totalCount - 1) ? totalCount - 1 : options.prefetchEnd, + range; + + end = Math.max(0, end); + + + range = me.data.getRange(start, end); + if (options.fireEvent !== false) { + me.fireEvent('guaranteedrange', range, start, end, options); + } + if (options.callback) { + options.callback.call(options.scope || me, range, start, end, options); + } + }, + + + guaranteeRange: function(start, end, callback, scope, options) { + options = Ext.apply({ + callback: callback, + scope: scope + }, options); + this.getRange(start, end, options) + }, + + + prefetchRange: function(start, end) { + var me = this, + startPage, endPage, page; + if (!me.rangeCached(start, end)) { + startPage = me.getPageFromRecordIndex(start); + endPage = me.getPageFromRecordIndex(end); + + + + + me.data.maxSize = me.purgePageCount ? (endPage - startPage + 1) + me.purgePageCount : 0; + + + for (page = startPage; page <= endPage; page++) { + if (!me.pageCached(page)) { + me.prefetchPage(page); + } + } + } + }, + + primeCache: function(start, end, direction) { + var me = this; + + + if (direction === -1) { + start = Math.max(start - me.leadingBufferZone, 0); + end = Math.min(end + me.trailingBufferZone, me.totalCount - 1); + } + + else if (direction === 1) { + start = Math.max(Math.min(start - me.trailingBufferZone, me.totalCount - me.pageSize), 0); + end = Math.min(end + me.leadingBufferZone, me.totalCount - 1); + } + + else { + start = Math.min(Math.max(Math.floor(start - ((me.leadingBufferZone + me.trailingBufferZone) / 2)), 0), me.totalCount - me.pageSize); + end = Math.min(Math.max(Math.ceil (end + ((me.leadingBufferZone + me.trailingBufferZone) / 2)), 0), me.totalCount - 1); + } + me.prefetchRange(start, end); + }, + + + + sort: function() { + var me = this; + + if (me.buffered && me.remoteSort) { + me.data.clear(); + } + return me.callParent(arguments); + }, + + + + + doSort: function(sorterFn) { + var me = this, + range, + ln, + i; + + if (me.remoteSort) { + + + + + if (me.buffered) { + me.data.clear(); + me.loadPage(1); + } else { + + me.load(); + } + } else { + me.data.sortBy(sorterFn); + if (!me.buffered) { + range = me.getRange(); + ln = range.length; + for (i = 0; i < ln; i++) { + range[i].index = i; + } + } + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + } + }, + + + find: function(property, value, start, anyMatch, caseSensitive, exactMatch) { + var fn = this.createFilterFn(property, value, anyMatch, caseSensitive, exactMatch); + return fn ? this.data.findIndexBy(fn, null, start) : -1; + }, + + + findRecord: function() { + var me = this, + index = me.find.apply(me, arguments); + return index !== -1 ? me.getAt(index) : null; + }, + + + createFilterFn: function(property, value, anyMatch, caseSensitive, exactMatch) { + if (Ext.isEmpty(value)) { + return false; + } + value = this.data.createValueMatcher(value, anyMatch, caseSensitive, exactMatch); + return function(r) { + return value.test(r.data[property]); + }; + }, + + + findExact: function(property, value, start) { + return this.data.findIndexBy(function(rec) { + return rec.isEqual(rec.get(property), value); + }, + this, start); + }, + + + findBy: function(fn, scope, start) { + return this.data.findIndexBy(fn, scope, start); + }, + + + collect: function(dataIndex, allowNull, bypassFilter) { + var me = this, + data = (bypassFilter === true && me.snapshot) ? me.snapshot : me.data; + + return data.collect(dataIndex, 'data', allowNull); + }, + + + getCount: function() { + return this.data.getCount(); + }, + + + getTotalCount: function() { + return this.totalCount || 0; + }, + + + getAt: function(index) { + return this.data.getAt(index); + }, + + + getRange: function(start, end, options) { + + var me = this, + requiredStart, + requiredEnd, + maxIndex = me.totalCount - 1, + lastRequestStart = me.lastRequestStart, + pageAddHandler, + result; + + options = Ext.apply({ + prefetchStart: start, + prefetchEnd: end + }, options); + + if (me.buffered) { + + end = (end >= me.totalCount) ? maxIndex : end; + + + + + + requiredStart = start === 0 ? 0 : start - 1; + requiredEnd = end === maxIndex ? end : end + 1; + + + me.lastRequestStart = start; + + + if (me.rangeCached(requiredStart, requiredEnd)) { + me.onGuaranteedRange(options); + result = me.data.getRange(start, end); + } + + else { + + me.fireEvent('cachemiss', me, start, end); + + + pageAddHandler = function(page, records) { + if (me.rangeCached(requiredStart, requiredEnd)) { + + me.fireEvent('cachefilled', me, start, end); + me.data.un('pageAdded', pageAddHandler); + me.onGuaranteedRange(options); + } + }; + me.data.on('pageAdded', pageAddHandler); + + + + + me.prefetchRange(start, end); + + } + + me.primeCache(start, end, start < lastRequestStart ? -1 : 1); + } else { + result = me.data.getRange(start, end); + + + if (options.callback) { + options.callback.call(options.scope || me, result, start, end, options) + } + } + + return result; + }, + + + getById: function(id) { + var result = (this.snapshot || this.data).findBy(function(record) { + return record.getId() === id; + }); + return result; + }, + + + indexOf: function(record) { + return this.data.indexOf(record); + }, + + + + indexOfTotal: function(record) { + var index = record.index; + if (index || index === 0) { + return index; + } + return this.indexOf(record); + }, + + + indexOfId: function(id) { + return this.indexOf(this.getById(id)); + }, + + + + + first: function(grouped) { + var me = this; + + if (grouped && me.isGrouped()) { + return me.aggregate(function(records) { + return records.length ? records[0] : undefined; + }, me, true); + } else { + return me.data.first(); + } + }, + + + last: function(grouped) { + var me = this; + + if (grouped && me.isGrouped()) { + return me.aggregate(function(records) { + var len = records.length; + return len ? records[len - 1] : undefined; + }, me, true); + } else { + return me.data.last(); + } + }, + + + sum: function(field, grouped) { + var me = this; + + if (grouped && me.isGrouped()) { + return me.aggregate(me.getSum, me, true, [field]); + } else { + return me.getSum(me.data.items, field); + } + }, + + + getSum: function(records, field) { + var total = 0, + i = 0, + len = records.length; + + for (; i < len; ++i) { + total += records[i].get(field); + } + + return total; + }, + + + count: function(grouped) { + var me = this; + + if (grouped && me.isGrouped()) { + return me.aggregate(function(records) { + return records.length; + }, me, true); + } else { + return me.getCount(); + } + }, + + + min: function(field, grouped) { + var me = this; + + if (grouped && me.isGrouped()) { + return me.aggregate(me.getMin, me, true, [field]); + } else { + return me.getMin(me.data.items, field); + } + }, + + + getMin: function(records, field) { + var i = 1, + len = records.length, + value, min; + + if (len > 0) { + min = records[0].get(field); + } + + for (; i < len; ++i) { + value = records[i].get(field); + if (value < min) { + min = value; + } + } + return min; + }, + + + max: function(field, grouped) { + var me = this; + + if (grouped && me.isGrouped()) { + return me.aggregate(me.getMax, me, true, [field]); + } else { + return me.getMax(me.data.items, field); + } + }, + + + getMax: function(records, field) { + var i = 1, + len = records.length, + value, + max; + + if (len > 0) { + max = records[0].get(field); + } + + for (; i < len; ++i) { + value = records[i].get(field); + if (value > max) { + max = value; + } + } + return max; + }, + + + average: function(field, grouped) { + var me = this; + if (grouped && me.isGrouped()) { + return me.aggregate(me.getAverage, me, true, [field]); + } else { + return me.getAverage(me.data.items, field); + } + }, + + + getAverage: function(records, field) { + var i = 0, + len = records.length, + sum = 0; + + if (records.length > 0) { + for (; i < len; ++i) { + sum += records[i].get(field); + } + return sum / len; + } + return 0; + }, + + + aggregate: function(fn, scope, grouped, args) { + args = args || []; + if (grouped && this.isGrouped()) { + var groups = this.getGroups(), + len = groups.length, + out = {}, + group, i; + + for (i = 0; i < len; ++i) { + group = groups[i]; + out[group.name] = this.getAggregate(fn, scope || this, group.children, args); + } + return out; + } else { + return this.getAggregate(fn, scope, this.data.items, args); + } + }, + + getAggregate: function(fn, scope, records, args){ + args = args || []; + return fn.apply(scope || this, [records].concat(args)); + }, + + onIdChanged: function(rec, oldId, newId, oldInternalId){ + this.data.updateKey(oldInternalId, newId); + this.callParent(arguments); + }, + + + commitChanges : function(){ + var me = this, + recs = me.getModifiedRecords(), + len = recs.length, + i = 0; + + for (; i < len; i++){ + recs[i].commit(); + } + + + + me.removed.length = 0; + }, + + filterNewOnly: function(item){ + return item.phantom === true; + }, + + + + + getRejectRecords: function() { + + return Ext.Array.push(this.data.filterBy(this.filterNewOnly).items, this.getUpdatedRecords()); + }, + + + rejectChanges : function() { + var me = this, + recs = me.getRejectRecords(), + len = recs.length, + i = 0, + rec; + + for (; i < len; i++) { + rec = recs[i]; + rec.reject(); + if (rec.phantom) { + me.remove(rec); + } + } + + + recs = me.removed; + len = recs.length; + for (i = 0; i < len; i++) { + rec = recs[i]; + me.insert(rec.removedFrom || 0, rec); + rec.reject(); + } + + + + me.removed.length = 0; + } +}, function() { + + + + Ext.regStore('ext-empty-store', {fields: [], proxy: 'memory'}); + + + this.prototype.PageMap = new Ext.Class({ + extend: 'Ext.util.LruCache', + + + clear: function(initial) { + var me = this; + me.generation = (me.generation ||0) + 1; + me.callParent(arguments); + }, + + forEach: function(fn, scope) { + var me = this, + pageNumbers = Ext.Object.getKeys(me.map), + pageCount = pageNumbers.length, + i, j, + page, + pageSize; + + for (i = 0; i < pageCount; i++) { + pageNumbers[i] = Number(pageNumbers[i]); + } + Ext.Array.sort(pageNumbers); + scope = scope || me; + for (i = 0; i < pageCount; i++) { + page = me.getPage(pageNumbers[i]); + pageSize = page.length; + for (j = 0; j < pageSize; j++) { + if (fn.call(scope, page[j]) === false) { + return; + } + } + } + }, + + + findBy: function(fn, scope) { + var me = this, + result = null; + + scope = scope || me; + me.forEach(function(rec) { + if (fn.call(scope, rec)) { + result = rec; + return false; + } + }); + return result; + }, + + getPageFromRecordIndex: this.prototype.getPageFromRecordIndex, + + addAll: function(records) { + this.addPage(1, records); + }, + + addPage: function(pageNumber, records) { + var me = this, + lastPage = pageNumber + Math.floor((records.length - 1) / me.pageSize), + startIdx, + page; + + + + for (startIdx = 0; pageNumber <= lastPage; pageNumber++, startIdx += me.pageSize) { + page = Ext.Array.slice(records, startIdx, startIdx + me.pageSize); + me.add(pageNumber, page); + me.fireEvent('pageAdded', pageNumber, page); + } + }, + + getCount: function() { + var result = this.callParent(); + if (result) { + result = (result - 1) * this.pageSize + this.last.value.length; + } + return result; + }, + + indexOf: function(record) { + return record ? record.index : -1; + }, + + insert: function() { + }, + + remove: function() { + }, + + removeAt: function() { + }, + + getPage: function(pageNumber) { + return this.get(pageNumber); + }, + + hasRange: function(start, end) { + var pageNumber = this.getPageFromRecordIndex(start), + endPageNumber = this.getPageFromRecordIndex(end); + + for (; pageNumber <= endPageNumber; pageNumber++) { + if (!this.hasPage(pageNumber)) { + return false; + } + } + return true; + }, + + hasPage: function(pageNumber) { + + return !!this.get(pageNumber); + }, + + getAt: function(index) { + return this.getRange(index, index)[0]; + }, + + getRange: function(start, end) { + if (!this.hasRange(start, end)) { + Ext.Error.raise('PageMap asked for range which it does not have'); + } + var me = this, + startPageNumber = me.getPageFromRecordIndex(start), + endPageNumber = me.getPageFromRecordIndex(end), + dataStart = (startPageNumber - 1) * me.pageSize, + dataEnd = (endPageNumber * me.pageSize) - 1, + pageNumber = startPageNumber, + result = [], + sliceBegin, sliceEnd, doSlice, + i = 0, len; + + for (; pageNumber <= endPageNumber; pageNumber++) { + + + if (pageNumber == startPageNumber) { + sliceBegin = start - dataStart; + doSlice = true; + } else { + sliceBegin = 0; + doSlice = false; + } + if (pageNumber == endPageNumber) { + sliceEnd = me.pageSize - (dataEnd - end); + doSlice = true; + } + + + if (doSlice) { + Ext.Array.push(result, Ext.Array.slice(me.getPage(pageNumber), sliceBegin, sliceEnd)); + } else { + Ext.Array.push(result, me.getPage(pageNumber)); + } + } + + + for (len = result.length; i < len; i++) { + result[i].index = start++; + } + return result; + } + }); +}); + + +Ext.define('Ext.data.reader.Array', { + extend: Ext.data.reader.Json , + alternateClassName: 'Ext.data.ArrayReader', + alias : 'reader.array', + + + totalProperty: undefined, + successProperty: undefined, + + + createFieldAccessExpression: function(field, fieldVarName, dataName) { + + + var index = (field.mapping == null) ? field.originalIndex : field.mapping, + result; + + if (typeof index === 'function') { + result = fieldVarName + '.mapping(' + dataName + ', this)'; + } else { + if (isNaN(index)) { + index = '"' + index + '"'; + } + result = dataName + "[" + index + "]"; + } + return result; + } +}); + + +Ext.define('Ext.data.ArrayStore', { + extend: Ext.data.Store , + alias: 'store.array', + + + + + + constructor: function(config) { + config = Ext.apply({ + proxy: { + type: 'memory', + reader: 'array' + } + }, config); + this.callParent([config]); + }, + + loadData: function(data, append) { + if (this.expandData === true) { + var r = [], + i = 0, + ln = data.length; + + for (; i < ln; i++) { + r[r.length] = [data[i]]; + } + + data = r; + } + + this.callParent([data, append]); + } +}, function() { + + Ext.data.SimpleStore = Ext.data.ArrayStore; + +}); + + +Ext.define('Ext.data.Batch', { + mixins: { + observable: Ext.util.Observable + }, + + + autoStart: false, + + + pauseOnException: false, + + + current: -1, + + + total: 0, + + + isRunning: false, + + + isComplete: false, + + + hasException: false, + + + constructor: function(config) { + var me = this; + + + + + + + + me.mixins.observable.constructor.call(me, config); + + + me.operations = []; + + + me.exceptions = []; + }, + + + add: function(operation) { + this.total++; + + operation.setBatch(this); + + this.operations.push(operation); + + return this; + }, + + + start: function( index) { + var me = this; + + if (me.isRunning) { + return me; + } + + me.exceptions.length = 0; + me.hasException = false; + me.isRunning = true; + + return me.runOperation(Ext.isDefined(index) ? index : me.current + 1); + }, + + + retry: function() { + return this.start(this.current); + }, + + + runNextOperation: function() { + return this.runOperation(this.current + 1); + }, + + + pause: function() { + this.isRunning = false; + return this; + }, + + + runOperation: function(index) { + var me = this, + operations = me.operations, + operation = operations[index], + onProxyReturn; + + if (operation === undefined) { + me.isRunning = false; + me.isComplete = true; + me.fireEvent('complete', me, operations[operations.length - 1]); + } else { + me.current = index; + + onProxyReturn = function(operation) { + var hasException = operation.hasException(); + + if (hasException) { + me.hasException = true; + me.exceptions.push(operation); + me.fireEvent('exception', me, operation); + } + + if (hasException && me.pauseOnException) { + me.pause(); + } else { + operation.setCompleted(); + me.fireEvent('operationcomplete', me, operation); + me.runNextOperation(); + } + }; + + operation.setStarted(); + + me.proxy[operation.action](operation, onProxyReturn, me); + } + + return me; + } +}); + + +Ext.define('Ext.data.BufferStore', { + extend: Ext.data.Store , + alias: 'store.buffer', + sortOnLoad: false, + filterOnLoad: false, + + constructor: function() { + Ext.Error.raise('The BufferStore class has been deprecated. Instead, specify the buffered config option on Ext.data.Store'); + } +}); + + + +Ext.define('Ext.direct.Manager', { + singleton: true, + + + + + + + mixins: { + observable: Ext.util.Observable + }, + + + exceptions: { + TRANSPORT: 'xhr', + PARSE: 'parse', + LOGIN: 'login', + SERVER: 'exception' + }, + + constructor: function() { + var me = this; + + me.addEvents( + + 'event', + + + 'exception' + ); + + me.transactions = new Ext.util.MixedCollection(); + me.providers = new Ext.util.MixedCollection(); + + me.mixins.observable.constructor.call(me); + }, + + + addProvider: function(provider) { + var me = this, + args = arguments, + relayers = me.relayers || (me.relayers = {}), + i, len; + + if (args.length > 1) { + for (i = 0, len = args.length; i < len; ++i) { + me.addProvider(args[i]); + } + + return; + } + + + if (!provider.isProvider) { + provider = Ext.create('direct.' + provider.type + 'provider', provider); + } + + me.providers.add(provider); + provider.on('data', me.onProviderData, me); + + if (provider.relayedEvents) { + relayers[provider.id] = me.relayEvents(provider, provider.relayedEvents); + } + + if (!provider.isConnected()) { + provider.connect(); + } + + return provider; + }, + + + getProvider: function(id) { + return id.isProvider ? id : this.providers.get(id); + }, + + + removeProvider: function(provider) { + var me = this, + providers = me.providers, + relayers = me.relayers, + id; + + provider = provider.isProvider ? provider : providers.get(provider); + + if (provider) { + provider.un('data', me.onProviderData, me); + + id = provider.id; + + if (relayers[id]) { + relayers[id].destroy(); + delete relayers[id]; + } + + providers.remove(provider); + + return provider; + } + + return null; + }, + + + addTransaction: function(transaction) { + this.transactions.add(transaction); + + return transaction; + }, + + + removeTransaction: function(transaction) { + var me = this; + + transaction = me.getTransaction(transaction); + me.transactions.remove(transaction); + + return transaction; + }, + + + getTransaction: function(transaction) { + return typeof transaction === 'object' ? transaction : this.transactions.get(transaction); + }, + + onProviderData: function(provider, event) { + var me = this, + i, len; + + if (Ext.isArray(event)) { + for (i = 0, len = event.length; i < len; ++i) { + me.onProviderData(provider, event[i]); + } + + return; + } + + if (event.name && event.name != 'event' && event.name != 'exception') { + me.fireEvent(event.name, event); + } + else if (event.status === false) { + me.fireEvent('exception', event); + } + + me.fireEvent('event', event, provider); + }, + + + parseMethod: function(fn) { + if (Ext.isString(fn)) { + var parts = fn.split('.'), + i = 0, + len = parts.length, + current = Ext.global; + + while (current && i < len) { + current = current[parts[i]]; + ++i; + } + + fn = Ext.isFunction(current) ? current : null; + } + + return fn || null; + } + +}, function() { + + Ext.Direct = Ext.direct.Manager; +}); + + +Ext.define('Ext.data.proxy.Direct', { + + + extend: Ext.data.proxy.Server , + alternateClassName: 'Ext.data.DirectProxy', + + alias: 'proxy.direct', + + + + + + + paramOrder: undefined, + + + paramsAsHash: true, + + + directFn : undefined, + + + + + + + paramOrderRe: /[\s,|]/, + + constructor: function(config){ + var me = this, + paramOrder; + + me.callParent(arguments); + + paramOrder = me.paramOrder; + if (Ext.isString(paramOrder)) { + me.paramOrder = paramOrder.split(me.paramOrderRe); + } + }, + + resolveMethods: function() { + var me = this, + fn = me.directFn, + api = me.api, + Manager = Ext.direct.Manager, + method; + + if (fn) { + method = me.directFn = Manager.parseMethod(fn); + + if (!Ext.isFunction(method)) { + Ext.Error.raise('Cannot resolve directFn ' + fn); + } + } + else if (api) { + for (fn in api) { + if (api.hasOwnProperty(fn)) { + method = api[fn]; + api[fn] = Manager.parseMethod(method); + + if (!Ext.isFunction(api[fn])) { + Ext.Error.raise('Cannot resolve Direct api ' + fn + ' method ' + method); + } + } + } + } + + me.methodsResolved = true; + }, + + doRequest: function(operation, callback, scope) { + var me = this, + writer = me.getWriter(), + request = me.buildRequest(operation), + params = request.params, + args = [], + fn, method; + + if (!me.methodsResolved) { + me.resolveMethods(); + } + + fn = me.api[request.action] || me.directFn; + + + if (operation.allowWrite()) { + request = writer.write(request); + } + + if (operation.action == 'read') { + + method = fn.directCfg.method; + args = method.getArgs(params, me.paramOrder, me.paramsAsHash); + } else { + args.push(request.jsonData); + } + + Ext.apply(request, { + args: args, + directFn: fn + }); + args.push(me.createRequestCallback(request, operation, callback, scope), me); + fn.apply(window, args); + }, + + + applyEncoding: Ext.identityFn, + + createRequestCallback: function(request, operation, callback, scope){ + var me = this; + + return function(data, event){ + me.processResponse(event.status, operation, request, event, callback, scope); + }; + }, + + + extractResponseData: function(response){ + return Ext.isDefined(response.result) ? response.result : response.data; + }, + + + setException: function(operation, response) { + operation.setException(response.message); + }, + + + buildUrl: function(){ + return ''; + } +}); + + +Ext.define('Ext.data.DirectStore', { + + + extend: Ext.data.Store , + + alias: 'store.direct', + + + + + + constructor : function(config){ + config = Ext.apply({}, config); + if (!config.proxy) { + var proxy = { + type: 'direct', + reader: { + type: 'json' + } + }; + Ext.copyTo(proxy, config, 'paramOrder,paramsAsHash,directFn,api,simpleSortMode'); + Ext.copyTo(proxy.reader, config, 'totalProperty,root,idProperty'); + config.proxy = proxy; + } + this.callParent([config]); + } +}); + + +Ext.define('Ext.data.JsonP', { + + + + singleton: true, + + + + + requestCount: 0, + + + requests: {}, + + + timeout: 30000, + + + disableCaching: true, + + + disableCachingParam: '_dc', + + + callbackKey: 'callback', + + + request: function(options) { + options = Ext.apply({}, options); + + + var me = this, + disableCaching = Ext.isDefined(options.disableCaching) ? options.disableCaching : me.disableCaching, + cacheParam = options.disableCachingParam || me.disableCachingParam, + id = ++me.requestCount, + callbackName = options.callbackName || 'callback' + id, + callbackKey = options.callbackKey || me.callbackKey, + timeout = Ext.isDefined(options.timeout) ? options.timeout : me.timeout, + params = options.params || {}, + url = options.url, + name = Ext.name, + request, + script; + + + + if (disableCaching && !params[cacheParam]) { + params[cacheParam] = new Date().getTime(); + } else { + params = options.params; + } + + params[callbackKey] = name + '.data.JsonP.' + callbackName; + script = me.createScript(url, params, options); + + me.requests[id] = request = { + url: url, + params: params, + script: script, + id: id, + scope: options.scope, + success: options.success, + failure: options.failure, + callback: options.callback, + callbackKey: callbackKey, + callbackName: callbackName + }; + + if (timeout > 0) { + request.timeout = setTimeout(Ext.bind(me.handleTimeout, me, [request]), timeout); + } + + me.setupErrorHandling(request); + me[callbackName] = Ext.bind(me.handleResponse, me, [request], true); + me.loadScript(request); + return request; + }, + + + abort: function(request){ + var me = this, + requests = me.requests, + key; + + if (request) { + if (!request.id) { + request = requests[request]; + } + me.handleAbort(request); + } else { + for (key in requests) { + if (requests.hasOwnProperty(key)) { + me.abort(requests[key]); + } + } + } + }, + + + setupErrorHandling: function(request){ + request.script.onerror = Ext.bind(this.handleError, this, [request]); + }, + + + handleAbort: function(request){ + request.errorType = 'abort'; + this.handleResponse(null, request); + }, + + + handleError: function(request){ + request.errorType = 'error'; + this.handleResponse(null, request); + }, + + + cleanupErrorHandling: function(request){ + request.script.onerror = null; + }, + + + handleTimeout: function(request){ + request.errorType = 'timeout'; + this.handleResponse(null, request); + }, + + + handleResponse: function(result, request){ + + var success = true; + + if (request.timeout) { + clearTimeout(request.timeout); + } + delete this[request.callbackName]; + delete this.requests[request.id]; + this.cleanupErrorHandling(request); + Ext.fly(request.script).remove(); + + if (request.errorType) { + success = false; + Ext.callback(request.failure, request.scope, [request.errorType]); + } else { + Ext.callback(request.success, request.scope, [result]); + } + Ext.callback(request.callback, request.scope, [success, result, request.errorType]); + Ext.EventManager.idleEvent.fire(); + }, + + + createScript: function(url, params, options) { + var script = document.createElement('script'); + script.setAttribute("src", Ext.urlAppend(url, Ext.Object.toQueryString(params))); + script.setAttribute("async", true); + script.setAttribute("type", "text/javascript"); + return script; + }, + + + loadScript: function (request) { + Ext.getHead().appendChild(request.script); + } +}); + + +Ext.define('Ext.data.proxy.JsonP', { + extend: Ext.data.proxy.Server , + alternateClassName: 'Ext.data.ScriptTagProxy', + alias: ['proxy.jsonp', 'proxy.scripttag'], + + + defaultWriterType: 'base', + + + callbackKey : 'callback', + + + recordParam: 'records', + + + autoAppendParams: true, + + constructor: function() { + this.addEvents( + + 'exception' + ); + this.callParent(arguments); + }, + + + doRequest: function(operation, callback, scope) { + + var me = this, + request = me.buildRequest(operation), + params = request.params; + + + Ext.apply(request, { + callbackKey: me.callbackKey, + timeout: me.timeout, + scope: me, + disableCaching: false, + callback: me.createRequestCallback(request, operation, callback, scope) + }); + + + + if (me.autoAppendParams) { + request.params = {}; + } + + request.jsonp = Ext.data.JsonP.request(request); + + request.params = params; + operation.setStarted(); + me.lastRequest = request; + + return request; + }, + + + createRequestCallback: function(request, operation, callback, scope) { + var me = this; + + return function(success, response, errorType) { + delete me.lastRequest; + me.processResponse(success, operation, request, response, callback, scope); + }; + }, + + + setException: function(operation, response) { + operation.setException(operation.request.jsonp.errorType); + }, + + + + buildUrl: function(request) { + var me = this, + url = me.callParent(arguments), + records = request.records, + writer = me.getWriter(), + params, + filters, + filter, i; + + + + if (writer && request.operation.allowWrite()) { + request = writer.write(request); + } + + + params = request.params; + filters = params.filters, + delete params.filters; + if (filters && filters.length) { + for (i = 0; i < filters.length; i++) { + filter = filters[i]; + + if (filter.value) { + params[filter.property] = filter.value; + } + } + } + + + if ((!writer || !writer.encode) && Ext.isArray(records) && records.length > 0) { + params[me.recordParam] = me.encodeRecords(records); + } + + + + if (me.autoAppendParams) { + url = Ext.urlAppend(url, Ext.Object.toQueryString(params)); + } + + return url; + }, + + + abort: function() { + var lastRequest = this.lastRequest; + if (lastRequest) { + Ext.data.JsonP.abort(lastRequest.jsonp); + } + }, + + + encodeRecords: function(records) { + var encoded = [], + i = 0, + len = records.length; + + for (; i < len; i++) { + encoded.push(Ext.encode(records[i].getData())); + } + + return encoded; + } +}); + + +Ext.define('Ext.data.JsonPStore', { + extend: Ext.data.Store , + alias : 'store.jsonp', + + + + + + constructor: function(config) { + config = Ext.apply({ + proxy: { + type: 'jsonp', + reader: 'json' + } + }, config); + this.callParent([config]); + } +}); + + +Ext.define('Ext.data.JsonStore', { + extend: Ext.data.Store , + alias: 'store.json', + + + + + + + constructor: function(config) { + config = Ext.apply({ + proxy: { + type : 'ajax', + reader: 'json', + writer: 'json' + } + }, config); + this.callParent([config]); + } +}); + + +Ext.define('Ext.data.NodeInterface', { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + statics: { + + decorate: function(modelClass) { + var idName, idField, idType; + + + if (typeof modelClass == 'string') { + modelClass = Ext.ModelManager.getModel(modelClass); + } else if (modelClass.isModel) { + modelClass = Ext.ModelManager.getModel(modelClass.modelName); + } + + + if (modelClass.prototype.isNode) { + return; + } + + idName = modelClass.prototype.idProperty; + idField = modelClass.prototype.fields.get(idName); + idType = modelClass.prototype.fields.get(idName).type.type; + + modelClass.override(this.getPrototypeBody()); + this.applyFields(modelClass, [ + { name : 'parentId', type : idType, defaultValue : null, useNull : idField.useNull }, + { name : 'index', type : 'int', defaultValue : 0, persist : false , convert: null }, + { name : 'depth', type : 'int', defaultValue : 0, persist : false , convert: null }, + { name : 'expanded', type : 'bool', defaultValue : false, persist : false , convert: null }, + { name : 'expandable', type : 'bool', defaultValue : true, persist : false , convert: null }, + { name : 'checked', type : 'auto', defaultValue : null, persist : false , convert: null }, + { name : 'leaf', type : 'bool', defaultValue : false }, + { name : 'cls', type : 'string', defaultValue : '', persist : false , convert: null }, + { name : 'iconCls', type : 'string', defaultValue : '', persist : false , convert: null }, + { name : 'icon', type : 'string', defaultValue : '', persist : false , convert: null }, + { name : 'root', type : 'boolean', defaultValue : false, persist : false , convert: null }, + { name : 'isLast', type : 'boolean', defaultValue : false, persist : false , convert: null }, + { name : 'isFirst', type : 'boolean', defaultValue : false, persist : false , convert: null }, + { name : 'allowDrop', type : 'boolean', defaultValue : true, persist : false , convert: null }, + { name : 'allowDrag', type : 'boolean', defaultValue : true, persist : false , convert: null }, + { name : 'loaded', type : 'boolean', defaultValue : false, persist : false , convert: null }, + { name : 'loading', type : 'boolean', defaultValue : false, persist : false , convert: null }, + { name : 'href', type : 'string', defaultValue : '', persist : false , convert: null }, + { name : 'hrefTarget', type : 'string', defaultValue : '', persist : false , convert: null }, + { name : 'qtip', type : 'string', defaultValue : '', persist : false , convert: null }, + { name : 'qtitle', type : 'string', defaultValue : '', persist : false , convert: null }, + { name : 'qshowDelay', type : 'int', defaultValue : 0, persist : false , convert: null }, + { name : 'children', type : 'auto', defaultValue : null, persist : false , convert: null } + ]); + }, + + applyFields: function(modelClass, addFields) { + var modelPrototype = modelClass.prototype, + fields = modelPrototype.fields, + keys = fields.keys, + ln = addFields.length, + addField, i; + + for (i = 0; i < ln; i++) { + addField = addFields[i]; + if (!Ext.Array.contains(keys, addField.name)) { + fields.add(new Ext.data.Field(addField)); + } + } + + }, + + getPrototypeBody: function() { + var bubbledEvents = { + idchanged : true, + append : true, + remove : true, + move : true, + insert : true, + beforeappend : true, + beforeremove : true, + beforemove : true, + beforeinsert : true, + expand : true, + collapse : true, + beforeexpand : true, + beforecollapse: true, + sort : true, + rootchange : true + }; + return { + + isNode: true, + + constructor: function() { + var me = this; + me.callParent(arguments); + me.firstChild = me.lastChild = me.parentNode = me.previousSibling = me.nextSibling = null; + me.childNodes = []; + + + + + + + + + + + + + + + + + return me; + }, + + createNode: function(node) { + if (!node.isModel) { + node = Ext.ModelManager.create(node, this.modelName); + } + + + + if (!node.childNodes) { + node.firstChild = node.lastChild = node.parentNode = node.previousSibling = node.nextSibling = null; + node.childNodes = []; + } + return node; + }, + + + isLeaf : function() { + return this.get('leaf') === true; + }, + + + setFirstChild : function(node) { + this.firstChild = node; + }, + + + setLastChild : function(node) { + this.lastChild = node; + }, + + + updateInfo: function(commit, info) { + var me = this, + oldDepth = me.data.depth, + childInfo = {}, + children = me.childNodes, + childCount = children.length, + i, + phantom = me.phantom, + dataObject = me[me.persistenceProperty], + propName, newValue, + field; + + if (!info) { + Ext.Error.raise('NodeInterface expects update info to be passed'); + } + + + + + for (propName in info) { + field = me.fields.get(propName); + newValue = info[propName]; + + + if (field && field.persist) { + me.dirty = me.dirty || !me.isEqual(dataObject[propName], newValue); + } + dataObject[propName] = newValue; + } + if (commit) { + me.commit(); + me.phantom = phantom; + } + + + if (me.data.depth !== oldDepth) { + childInfo = { + depth: me.data.depth + 1 + }; + for (i = 0; i < childCount; i++) { + children[i].updateInfo(commit, childInfo); + } + } + }, + + + isLast : function() { + return this.get('isLast'); + }, + + + isFirst : function() { + return this.get('isFirst'); + }, + + + hasChildNodes : function() { + return !this.isLeaf() && this.childNodes.length > 0; + }, + + + isExpandable : function() { + var me = this; + + if (me.get('expandable')) { + return !(me.isLeaf() || (me.isLoaded() && !me.hasChildNodes())); + } + return false; + }, + + triggerUIUpdate: function() { + + + this.afterEdit([]); + }, + + + appendChild : function(node, suppressEvents, commit) { + var me = this, + i, ln, + index, + oldParent, + previousSibling, + childInfo = { + isLast: true, + parentId: me.getId(), + depth: (me.data.depth||0) + 1 + }; + + + if (Ext.isArray(node)) { + + me.callStore('suspendAutoSync'); + for (i = 0, ln = node.length - 1; i < ln; i++) { + me.appendChild(node[i], suppressEvents, commit); + } + + me.callStore('resumeAutoSync'); + me.appendChild(node[ln], suppressEvents, commit); + } else { + + node = me.createNode(node); + + if (suppressEvents !== true && me.fireEventArgs("beforeappend", [me, node]) === false) { + return false; + } + + index = me.childNodes.length; + oldParent = node.parentNode; + + + if (oldParent) { + if (suppressEvents !== true && node.fireEventArgs("beforemove", [node, oldParent, me, index]) === false) { + return false; + } + oldParent.removeChild(node, false, false, true); + } + + + Ext.suspendLayouts(); + + index = me.childNodes.length; + if (index === 0) { + me.setFirstChild(node); + } + + me.childNodes[index] = node; + node.parentNode = me; + node.nextSibling = null; + + me.setLastChild(node); + + previousSibling = me.childNodes[index - 1]; + if (previousSibling) { + node.previousSibling = previousSibling; + previousSibling.nextSibling = node; + previousSibling.updateInfo(commit, { + isLast: false + }); + previousSibling.triggerUIUpdate(); + } else { + node.previousSibling = null; + } + + + childInfo.isFirst = index === 0; + childInfo.index = index; + node.updateInfo(commit, childInfo); + + + if (!me.isLoaded()) { + me.set('loaded', true); + } else if (me.childNodes.length === 1) { + me.triggerUIUpdate(); + } + + + if (index && me.childNodes[index - 1].isExpanded()) { + me.childNodes[index - 1].cascadeBy(me.triggerUIUpdate); + } + + if(!node.isLeaf() && node.phantom) { + node.set('loaded', true); + } + + + Ext.resumeLayouts(true); + + if (suppressEvents !== true) { + me.fireEventArgs("append", [me, node, index]); + + if (oldParent) { + node.fireEventArgs("move", [node, oldParent, me, index]); + } + } + + return node; + } + }, + + + getOwnerTree: function() { + var node = this, + store; + + while (node.parentNode) { + node = node.parentNode; + } + store = node.store; + if (store) { + if (store.treeStore) { + store = store.treeStore; + } + + if (store.tree) { + return store.ownerTree; + } + } + return undefined; + }, + + + removeChild : function(node, destroy, suppressEvents, isMove) { + var me = this, + index = me.indexOf(node), + i, childCount, + previousSibling; + + if (index === -1 || (suppressEvents !== true && me.fireEventArgs("beforeremove", [me, node, !!isMove]) === false)) { + return false; + } + + + Ext.suspendLayouts(); + + + Ext.Array.erase(me.childNodes, index, 1); + + + if (me.firstChild === node) { + me.setFirstChild(node.nextSibling); + } + if (me.lastChild === node) { + me.setLastChild(node.previousSibling); + } + + + + if (previousSibling = node.previousSibling) { + node.previousSibling.nextSibling = node.nextSibling; + } + + + if (node.nextSibling) { + node.nextSibling.previousSibling = node.previousSibling; + + + if (index === 0) { + node.nextSibling.updateInfo(false, { + isFirst: true + }); + } + + + for (i = index, childCount = me.childNodes.length; i < childCount; i++) { + me.childNodes[i].updateInfo(false, { + index: i + }); + } + } + + + + else if (previousSibling) { + previousSibling.updateInfo(false, { + isLast: true + }); + + + + if (previousSibling.isExpanded()) { + previousSibling.cascadeBy(me.triggerUIUpdate); + } + + else { + previousSibling.triggerUIUpdate(); + } + } + + + if (!me.childNodes.length) { + me.triggerUIUpdate(); + } + + + Ext.resumeLayouts(true); + + if (suppressEvents !== true) { + + node.removeContext = { + parentNode: node.parentNode, + previousSibling: node.previousSibling, + nextSibling: node.nextSibling + }; + + node.previousSibling = node.nextSibling = node.parentNode = null; + me.fireEventArgs('remove', [me, node, !!isMove]); + + + node.removeContext = null; + } + + + + if (destroy) { + node.destroy(true); + } else { + node.clear(); + } + + return node; + }, + + + copy: function(newId, deep) { + var me = this, + result = me.callParent(arguments), + len = me.childNodes ? me.childNodes.length : 0, + i; + + + if (deep) { + for (i = 0; i < len; i++) { + result.appendChild(me.childNodes[i].copy(undefined, true)); + } + } + return result; + }, + + + clear : function(destroy) { + var me = this; + + + me.parentNode = me.previousSibling = me.nextSibling = null; + if (destroy) { + me.firstChild = me.lastChild = null; + } + }, + + + destroy : function(silent) { + + var me = this, + options = me.destroyOptions, + nodes = me.childNodes, + nLen = nodes.length, + n; + + if (silent === true) { + me.clear(true); + + for (n = 0; n < nLen; n++) { + nodes[n].destroy(true); + } + + me.childNodes = null; + delete me.destroyOptions; + me.callParent([options]); + } else { + me.destroyOptions = silent; + + me.remove(true); + } + }, + + + insertBefore : function(node, refNode, suppressEvents) { + var me = this, + index = me.indexOf(refNode), + oldParent = node.parentNode, + refIndex = index, + childCount, previousSibling, i; + + if (!refNode) { + return me.appendChild(node); + } + + + if (node === refNode) { + return false; + } + + + node = me.createNode(node); + + if (suppressEvents !== true && me.fireEventArgs("beforeinsert", [me, node, refNode]) === false) { + return false; + } + + + if (oldParent === me && me.indexOf(node) < index) { + refIndex--; + } + + + if (oldParent) { + if (suppressEvents !== true && node.fireEventArgs("beforemove", [node, oldParent, me, index, refNode]) === false) { + return false; + } + oldParent.removeChild(node, false, false, true); + } + + if (refIndex === 0) { + me.setFirstChild(node); + } + + Ext.Array.splice(me.childNodes, refIndex, 0, node); + node.parentNode = me; + + node.nextSibling = refNode; + refNode.previousSibling = node; + + previousSibling = me.childNodes[refIndex - 1]; + if (previousSibling) { + node.previousSibling = previousSibling; + previousSibling.nextSibling = node; + } else { + node.previousSibling = null; + } + + + node.updateInfo(false, { + parentId: me.getId(), + index: refIndex, + isFirst: refIndex === 0, + isLast: false, + depth: (me.data.depth||0) + 1 + }); + + + for (i = refIndex + 1, childCount = me.childNodes.length; i < childCount; i++) { + me.childNodes[i].updateInfo(false, { + index: i + }); + } + + if (!me.isLoaded()) { + me.set('loaded', true); + } + + else if (me.childNodes.length === 1) { + me.triggerUIUpdate(); + } + + if(!node.isLeaf() && node.phantom) { + node.set('loaded', true); + } + + if (suppressEvents !== true) { + me.fireEventArgs("insert", [me, node, refNode]); + + if (oldParent) { + node.fireEventArgs("move", [node, oldParent, me, refIndex, refNode]); + } + } + + return node; + }, + + + insertChild: function(index, node) { + var sibling = this.childNodes[index]; + if (sibling) { + return this.insertBefore(node, sibling); + } + else { + return this.appendChild(node); + } + }, + + + remove : function(destroy, suppressEvents) { + var me = this, + parentNode = me.parentNode; + + if (parentNode) { + parentNode.removeChild(me, destroy, suppressEvents); + } else if (destroy) { + + me.destroy(true); + } + return me; + }, + + + removeAll : function(destroy, suppressEvents, fromParent) { + + + + var me = this, + childNodes = this.childNodes, + i = 0, + len = childNodes.length, + treeStore, + node; + + + if (!len) { + return; + } + + fromParent = fromParent === true; + if (!fromParent) { + treeStore = me.store && me.store.treeStore; + if (treeStore) { + treeStore.beginBulkRemove(); + } + } + for (; i < len; ++i) { + node = childNodes[i]; + + + node.removeContext = { + parentNode: node.parentNode, + previousSibling: node.previousSibling, + nextSibling: node.nextSibling + }; + + node.previousSibling = node.nextSibling = node.parentNode = null; + me.fireEventArgs('remove', [me, node, false]); + + + node.removeContext = null; + + + if (destroy) { + node.destroy(true); + } + + else { + node.removeAll(false, suppressEvents, true); + } + } + + me.firstChild = me.lastChild = null; + if (fromParent) { + + me.childNodes = null; + } else { + + me.childNodes.length = 0; + } + if (!fromParent) { + me.triggerUIUpdate(); + if (treeStore) { + treeStore.endBulkRemove(); + } + } + + return me; + }, + + + getChildAt : function(index) { + return this.childNodes[index]; + }, + + + replaceChild : function(newChild, oldChild, suppressEvents) { + var s = oldChild ? oldChild.nextSibling : null; + + this.removeChild(oldChild, false, suppressEvents); + this.insertBefore(newChild, s, suppressEvents); + return oldChild; + }, + + + indexOf : function(child) { + return Ext.Array.indexOf(this.childNodes, child); + }, + + + indexOfId: function(id) { + var childNodes = this.childNodes, + len = childNodes.length, + i = 0; + + for (; i < len; ++i) { + if (childNodes[i].getId() === id) { + return i; + } + } + return -1; + }, + + + getPath: function(field, separator) { + field = field || this.idProperty; + separator = separator || '/'; + + var path = [this.get(field)], + parent = this.parentNode; + + while (parent) { + path.unshift(parent.get(field)); + parent = parent.parentNode; + } + return separator + path.join(separator); + }, + + + getDepth : function() { + return this.get('depth'); + }, + + + bubble : function(fn, scope, args) { + var p = this; + while (p) { + if (fn.apply(scope || p, args || [p]) === false) { + break; + } + p = p.parentNode; + } + }, + + cascade: function() { + if (Ext.isDefined(Ext.global.console)) { + Ext.global.console.warn('Ext.data.Node: cascade has been deprecated. Please use cascadeBy instead.'); + } + return this.cascadeBy.apply(this, arguments); + }, + + + cascadeBy : function(fn, scope, args) { + if (fn.apply(scope || this, args || [this]) !== false) { + var childNodes = this.childNodes, + length = childNodes.length, + i; + + for (i = 0; i < length; i++) { + childNodes[i].cascadeBy(fn, scope, args); + } + } + }, + + + eachChild : function(fn, scope, args) { + var childNodes = this.childNodes, + length = childNodes.length, + i; + + for (i = 0; i < length; i++) { + if (fn.apply(scope || this, args || [childNodes[i]]) === false) { + break; + } + } + }, + + + findChild : function(attribute, value, deep) { + return this.findChildBy(function() { + return this.get(attribute) == value; + }, null, deep); + }, + + + findChildBy : function(fn, scope, deep) { + var cs = this.childNodes, + len = cs.length, + i = 0, n, res; + + for (; i < len; i++) { + n = cs[i]; + if (fn.call(scope || n, n) === true) { + return n; + } + else if (deep) { + res = n.findChildBy(fn, scope, deep); + if (res !== null) { + return res; + } + } + } + + return null; + }, + + + contains : function(node) { + return node.isAncestor(this); + }, + + + isAncestor : function(node) { + var p = this.parentNode; + while (p) { + if (p === node) { + return true; + } + p = p.parentNode; + } + return false; + }, + + + sort : function(sortFn, recursive, suppressEvent) { + var cs = this.childNodes, + ln = cs.length, + i, n, info = { + isFirst: true + }; + + if (ln > 0) { + Ext.Array.sort(cs, sortFn); + this.setFirstChild(cs[0]); + this.setLastChild(cs[ln - 1]); + + for (i = 0; i < ln; i++) { + n = cs[i]; + n.previousSibling = cs[i-1]; + n.nextSibling = cs[i+1]; + + + info.isLast = (i === ln - 1); + info.index = i; + n.updateInfo(false, info); + info.isFirst = false; + + if (recursive && !n.isLeaf()) { + n.sort(sortFn, true, true); + } + } + + if (suppressEvent !== true) { + this.fireEventArgs('sort', [this, cs]); + } + } + }, + + + isExpanded: function() { + return this.get('expanded'); + }, + + + isLoaded: function() { + return this.get('loaded'); + }, + + + isLoading: function() { + return this.get('loading'); + }, + + + isRoot: function() { + return !this.parentNode; + }, + + + isVisible: function() { + var parent = this.parentNode; + while (parent) { + if (!parent.isExpanded()) { + return false; + } + parent = parent.parentNode; + } + return true; + }, + + + expand: function(recursive, callback, scope) { + var me = this; + + + + + + if (!me.isLeaf()) { + + if (me.isLoading()) { + me.on('expand', function() { + me.expand(recursive, callback, scope); + }, me, {single: true}); + } else { + + if (!me.isExpanded()) { + + + + + + me.fireEventArgs('beforeexpand', [me, me.onChildNodesAvailable, me, [recursive, callback, scope]]); + } else if (recursive) { + + me.expandChildren(true, me.getOwnerTree().singleExpand, callback, scope); + } else { + Ext.callback(callback, scope || me, [me.childNodes]); + } + } + } else { + + Ext.callback(callback, scope || me); + } + }, + + + onChildNodesAvailable: function(records, recursive, callback, scope) { + var me = this; + + + + Ext.suspendLayouts(); + + + me.set('expanded', true); + + + me.fireEventArgs('expand', [me, me.childNodes, false]); + + + if (recursive) { + me.expandChildren(true, me.getOwnerTree().singleExpand, callback, scope); + } else { + Ext.callback(callback, scope || me, [me.childNodes]); + } + + Ext.resumeLayouts(true); + }, + + + expandChildren: function(recursive, singleExpand, callback, scope) { + var me = this, + i, + allNodes = me.childNodes, + expandNodes = [], + ln = singleExpand ? Math.min(allNodes.length, 1) : allNodes.length, + node, + expanding = 0; + + for (i = 0; i < ln; ++i) { + node = allNodes[i]; + if (!node.isLeaf()) { + expandNodes.push(node); + } + } + ln = expandNodes.length; + + for (i = 0; i < ln; ++i) { + node = expandNodes[i]; + if (i === ln - 1) { + node.expand(recursive, callback, scope); + } else { + node.expand(recursive); + } + } + + if (!expanding && callback) { + Ext.callback(callback, scope || me, [me.childNodes]); + } + }, + + + collapse: function(recursive, callback, scope) { + var me = this, + expanded = me.isExpanded(), + len = me.childNodes.length, + i, collapseChildren; + + + + + + if (!me.isLeaf() && ((!expanded && recursive) || me.fireEventArgs('beforecollapse', [me]) !== false)) { + + + + Ext.suspendLayouts(); + + + if (me.isExpanded()) { + + + + + + + if (recursive) { + collapseChildren = function() { + for (i = 0; i < len; i++) { + me.childNodes[i].setCollapsed(true); + } + }; + if (callback) { + callback = Ext.Function.createSequence(collapseChildren, callback); + } else { + callback = collapseChildren; + } + } + + + me.set('expanded', false); + + + + + me.fireEventArgs('collapse', [me, me.childNodes, false, callback ? Ext.Function.bind(callback, scope, [me.childNodes]) : null, null]); + + + callback = null; + } + + + + + + else if (recursive) { + for (i = 0; i < len; i++) { + me.childNodes[i].setCollapsed(true); + } + } + + Ext.resumeLayouts(true); + } + + + Ext.callback(callback, scope || me, [me.childNodes]); + }, + + + setCollapsed: function(recursive) { + var me = this, + len = me.childNodes.length, + i; + + + if (!me.isLeaf() && me.fireEventArgs('beforecollapse', [me, Ext.emptyFn]) !== false) { + + + me.data.expanded = false; + + + + + me.fireEventArgs('collapse', [me, me.childNodes, false, null, null]); + + if (recursive) { + for (i = 0; i < len; i++) { + me.childNodes[i].setCollapsed(true); + } + } + } + }, + + + collapseChildren: function(recursive, callback, scope) { + var me = this, + i, + allNodes = me.childNodes, + ln = allNodes.length, + collapseNodes = [], + node; + + + for (i = 0; i < ln; ++i) { + node = allNodes[i]; + if (!node.isLeaf() && node.isLoaded() && node.isExpanded()) { + collapseNodes.push(node); + } + } + ln = collapseNodes.length; + + + + for (i = 0; i < ln; ++i) { + node = collapseNodes[i]; + if (i === ln - 1) { + node.collapse(recursive, callback, scope); + } else { + node.collapse(recursive); + } + } + }, + + + + + fireEventArgs: function(eventName, args) { + + + + var fireEventArgs = Ext.data.Model.prototype.fireEventArgs, + result, eventSource, rootNode; + + + if (bubbledEvents[eventName]) { + for (eventSource = this; result !== false && eventSource; eventSource = (rootNode = eventSource).parentNode) { + if (eventSource.hasListeners[eventName]) { + result = fireEventArgs.call(eventSource, eventName, args); + } + } + + + eventSource = rootNode.rootOf + if (result !== false && eventSource) { + if (eventSource.hasListeners[eventName]) { + result = eventSource.fireEventArgs.call(eventSource, eventName, args); + } + eventSource = eventSource.treeStore; + if (result !== false && eventSource) { + if (eventSource.hasListeners[eventName]) { + result = eventSource.fireEventArgs.call(eventSource, eventName, args); + } + } + } + return result; + } + + else { + return fireEventArgs.apply(this, arguments) + } + }, + + + serialize: function() { + var result = Ext.data.writer.Json.prototype.getRecordData(this), + childNodes = this.childNodes, + len = childNodes.length, + s, i; + + if (len > 0) { + for (i = 0; i < len; i++) { + s.push(childNodes[i].serialize()); + } + } + return result; + } + }; + } + } +}); + + +Ext.define('Ext.data.NodeStore', { + extend: Ext.data.Store , + alias: 'store.node', + + + + isNodeStore: true, + + + node: null, + + + recursive: false, + + + rootVisible: false, + + + + + isExpandingOrCollapsing: 0, + + constructor: function(config) { + var me = this, + node; + + config = config || {}; + Ext.apply(me, config); + + + config.proxy = {type: 'proxy'}; + me.callParent([config]); + + node = me.node; + if (node) { + me.node = null; + me.setNode(node); + } + }, + + + + + getTotalCount: function() { + return this.getCount(); + }, + + setNode: function(node) { + var me = this; + if (me.node && me.node != node) { + + me.mun(me.node, { + expand: me.onNodeExpand, + collapse: me.onNodeCollapse, + append: me.onNodeAppend, + insert: me.onNodeInsert, + remove: me.onNodeRemove, + sort: me.onNodeSort, + scope: me + }); + me.node = null; + } + + if (node) { + Ext.data.NodeInterface.decorate(node.self); + me.removeAll(); + if (me.rootVisible) { + me.add(node); + } else if (!node.isExpanded() && me.treeStore.autoLoad !== false) { + node.expand(); + } + + me.mon(node, { + expand: me.onNodeExpand, + collapse: me.onNodeCollapse, + append: me.onNodeAppend, + insert: me.onNodeInsert, + remove: me.onNodeRemove, + sort: me.onNodeSort, + scope: me + }); + me.node = node; + if (node.isExpanded() && node.isLoaded()) { + me.onNodeExpand(node, node.childNodes, true); + } + } + }, + + onNodeSort: function(node, childNodes) { + var me = this; + + if ((me.indexOf(node) !== -1 || (node === me.node && !me.rootVisible) && node.isExpanded())) { + Ext.suspendLayouts(); + me.onNodeCollapse(node, childNodes, true); + me.onNodeExpand(node, childNodes, true); + Ext.resumeLayouts(true); + } + }, + + + onNodeExpand: function(parent, records, suppressEvent) { + var me = this, + insertIndex = me.indexOf(parent) + 1, + toAdd = []; + + + + + if (!suppressEvent) { + me.fireEvent('beforeexpand', parent, records, insertIndex); + } + + me.handleNodeExpand(parent, records, toAdd); + + + + + me.insert(insertIndex, toAdd); + + + + if (!suppressEvent) { + me.fireEvent('expand', parent, records); + } + }, + + + + handleNodeExpand: function(parent, records, toAdd) { + var me = this, + ln = records ? records.length : 0, + i, record; + + + if (!me.recursive && parent !== me.node) { + return; + } + + if (parent !== this.node && !me.isVisible(parent)) { + return; + } + + if (ln) { + + + for (i = 0; i < ln; i++) { + record = records[i]; + + + + + toAdd.push(record); + + if (record.isExpanded()) { + if (record.isLoaded()) { + + me.handleNodeExpand(record, record.childNodes, toAdd); + } + else { + + record.set('expanded', false); + record.expand(); + } + } + } + } + }, + + + onNodeCollapse: function(parent, records, suppressEvent, callback, scope) { + var me = this, + collapseIndex = me.indexOf(parent) + 1, + node, lastNodeIndexPlus, sibling, found; + + if (!me.recursive && parent !== me.node) { + return; + } + + + + + + if (!suppressEvent) { + me.fireEvent('beforecollapse', parent, records, collapseIndex, callback, scope); + } + + + + + + if (records.length && me.data.contains(records[0])) { + + + + + node = parent; + while (node.parentNode) { + sibling = node.nextSibling; + if (sibling) { + found = true; + lastNodeIndexPlus = me.indexOf(sibling); + break; + } else { + node = node.parentNode; + } + } + if (!found) { + lastNodeIndexPlus = me.getCount(); + } + + + me.removeAt(collapseIndex, lastNodeIndexPlus - collapseIndex); + } + + + + if (!suppressEvent) { + me.fireEvent('collapse', parent, records, collapseIndex); + } + }, + + onNodeAppend: function(parent, node, index) { + var me = this, + refNode, sibling; + + + if (me.isVisible(node)) { + if (index === 0) { + refNode = parent; + } else { + sibling = node.previousSibling; + while (sibling.isExpanded() && sibling.lastChild) { + sibling = sibling.lastChild; + } + refNode = sibling; + } + me.insert(me.indexOf(refNode) + 1, node); + if (!node.isLeaf() && node.isExpanded()) { + if (node.isLoaded()) { + + me.onNodeExpand(node, node.childNodes, true); + } else if (!me.treeStore.fillCount ) { + + + + + node.set('expanded', false); + node.expand(); + } + } + } + }, + + onNodeInsert: function(parent, node, refNode) { + var me = this, + index = this.indexOf(refNode); + + if (index != -1 && me.isVisible(node)) { + me.insert(index, node); + if (!node.isLeaf() && node.isExpanded()) { + if (node.isLoaded()) { + + me.onNodeExpand(node, node.childNodes, true); + } + else { + node.set('expanded', false); + node.expand(); + } + } + } + }, + + onNodeRemove: function(parent, node, isMove) { + var me = this; + if (me.indexOf(node) != -1) { + + + + if (!node.isLeaf() && node.isExpanded()) { + + + + + + node.parentNode = node.removeContext.parentNode; + node.nextSibling = node.removeContext.nextSibling; + me.onNodeCollapse(node, node.childNodes, true); + node.parentNode = node.nextSibling = null; + } + me.remove(node); + } + }, + + isVisible: function(node) { + var parent = node.parentNode; + while (parent) { + + if (parent === this.node && parent.data.expanded) { + return true; + } + + + if (!parent.data.expanded) { + return false; + } + + parent = parent.parentNode; + } + + return false; + } +}); + + +Ext.define('Ext.data.Request', { + + action: undefined, + + + params: undefined, + + + method: 'GET', + + + url: undefined, + + + constructor: function(config) { + Ext.apply(this, config); + } +}); + + +Ext.define('Ext.data.SequentialIdGenerator', { + extend: Ext.data.IdGenerator , + alias: 'idgen.sequential', + + constructor: function() { + var me = this; + + me.callParent(arguments); + + me.parts = [ me.prefix, '']; + }, + + + prefix: '', + + + seed: 1, + + + generate: function () { + var me = this, + parts = me.parts; + + parts[1] = me.seed++; + return parts.join(''); + } +}); + + +Ext.define('Ext.data.Tree', { + alias: 'data.tree', + + mixins: { + observable: Ext.util.Observable + }, + + + root: null, + + + constructor: function(root) { + var me = this; + + me.mixins.observable.constructor.call(me); + + if (root) { + me.setRootNode(root); + } + + + me.on({ + scope: me, + idchanged: me.onNodeIdChanged, + insert: me.onNodeInsert, + append: me.onNodeAppend, + remove: me.onNodeRemove + }); + }, + + + getRootNode : function() { + return this.root; + }, + + + setRootNode : function(node) { + var me = this; + + me.root = node; + + + if (node.rootOf) { + node.rootOf.removeRootNode(); + } + + + else if (node.parentNode) { + node.parentNode.removeChild(node); + } + + + node.rootOf = me; + + if (node.fireEventArgs('beforeappend', [null, node]) !== false) { + node.set('root', true); + + node.updateInfo(true, { + isFirst: true, + isLast: true, + depth: 0, + index: 0, + parentId: null + }); + + + + + + + + + + + + + + + + + + me.nodeHash = {}; + node.fireEvent('append', null, node); + node.fireEvent('rootchange', node); + } + + return node; + }, + + + removeRootNode: function() { + var me = this, + root = me.root; + + root.set('root', false); + root.fireEvent('remove', null, root, false); + root.fireEvent('rootchange', null); + + + + root.rootOf = me.root = null; + return root; + }, + + + flatten: function(){ + return Ext.Object.getValues(this.nodeHash); + }, + + + onNodeInsert: function(parent, node) { + this.registerNode(node, true); + }, + + + onNodeAppend: function(parent, node) { + this.registerNode(node, true); + }, + + + onNodeRemove: function(parent, node) { + this.unregisterNode(node, true); + }, + + + onNodeIdChanged: function(node, oldId, newId, oldInternalId) { + var nodeHash = this.nodeHash; + + nodeHash[node.internalId] = node; + delete nodeHash[oldInternalId]; + }, + + + getNodeById : function(id) { + return this.nodeHash[id]; + }, + + + registerNode : function(node, includeChildren) { + var me = this, + children, length, i; + + me.nodeHash[node.internalId] = node; + if (includeChildren === true) { + children = node.childNodes; + length = children.length; + for (i = 0; i < length; i++) { + me.registerNode(children[i], true); + } + } + }, + + + unregisterNode : function(node, includeChildren) { + var me = this, + children, length, i; + + delete me.nodeHash[node.internalId]; + if (includeChildren === true) { + children = node.childNodes; + length = children.length; + for (i = 0; i < length; i++) { + me.unregisterNode(children[i], true); + } + } + }, + + + sort: function(sorterFn, recursive) { + this.getRootNode().sort(sorterFn, recursive); + }, + + + filter: function(filters, recursive) { + this.getRootNode().filter(filters, recursive); + } +}); + + +Ext.define('Ext.data.TreeModel', { + extend: Ext.data.Model + + + +}, +function () { + Ext.data.NodeInterface.decorate(this); +}); + + +Ext.define('Ext.data.TreeStore', { + extend: Ext.data.AbstractStore , + alias: 'store.tree', + + + + + + + + + + clearOnLoad : true, + + + clearRemovedOnLoad: true, + + + nodeParam: 'node', + + + defaultRootId: 'root', + + + defaultRootText: 'Root', + + + defaultRootProperty: 'children', + + + rootProperty: 'children', + + fillCount: 0, + + + folderSort: false, + + constructor: function(config) { + var me = this, + root, + fields, + defaultRoot; + + config = Ext.apply({}, config); + + + fields = config.fields || me.fields; + if (!fields) { + config.fields = [ + {name: 'text', type: 'string'} + ]; + defaultRoot = config.defaultRootProperty || me.defaultRootProperty; + if (defaultRoot !== me.defaultRootProperty) { + config.fields.push({ + name: defaultRoot, + type: 'auto', + defaultValue: null, + persist: false + }); + } + } + + me.callParent([config]); + + + me.tree = new Ext.data.Tree(); + + + me.tree.treeStore = me; + + + + + + + + + + + + + + + + + me.tree.on({ + scope: me, + remove: me.onNodeRemove, + + + beforeexpand: me.onBeforeNodeExpand, + append: me.onNodeAdded, + insert: me.onNodeAdded, + sort: me.onNodeSort + }); + + me.onBeforeSort(); + + root = me.root; + if (root) { + delete me.root; + me.setRootNode(root); + } + + if (Ext.isDefined(me.nodeParameter)) { + if (Ext.isDefined(Ext.global.console)) { + Ext.global.console.warn('Ext.data.TreeStore: nodeParameter has been deprecated. Please use nodeParam instead.'); + } + me.nodeParam = me.nodeParameter; + delete me.nodeParameter; + } + }, + + + setProxy: function(proxy) { + var reader, + needsRoot; + + if (proxy instanceof Ext.data.proxy.Proxy) { + + needsRoot = Ext.isEmpty(proxy.getReader().root); + } else if (Ext.isString(proxy)) { + + needsRoot = true; + } else { + + reader = proxy.reader; + needsRoot = !(reader && !Ext.isEmpty(reader.root)); + } + proxy = this.callParent(arguments); + + + + + proxy.idParam = this.nodeParam; + + if (needsRoot) { + reader = proxy.getReader(); + reader.root = this.defaultRootProperty; + + reader.buildExtractors(true); + } + }, + + + onBeforeSort: function() { + if (this.folderSort) { + this.sort({ + property: 'leaf', + direction: 'ASC' + }, 'prepend', false); + } + }, + + + onBeforeNodeExpand: function(node, callback, scope, args) { + var me = this, + reader, dataRoot, data, + callbackArgs; + + + if (node.isLoaded()) { + callbackArgs = [node.childNodes]; + if (args) { + callbackArgs.push.apply(callbackArgs, args); + } + Ext.callback(callback, scope || node, callbackArgs); + } + + else if (dataRoot = (data = (node.raw || node[node.persistenceProperty])[(reader = me.getProxy().getReader()).root])) { + me.fillNode(node, reader.extractData(dataRoot)); + delete data[reader.root]; + callbackArgs = [node.childNodes]; + if (args) { + callbackArgs.push.apply(callbackArgs, args); + } + Ext.callback(callback, scope || node, callbackArgs); + } + + else if (node.isLoading()) { + me.on('load', function() { + callbackArgs = [node.childNodes]; + if (args) { + callbackArgs.push.apply(callbackArgs, args); + } + Ext.callback(callback, scope || node, callbackArgs); + }, me, {single: true}); + } + + else { + me.read({ + node: node, + callback: function() { + + + delete me.lastOptions.callback; + callbackArgs = [node.childNodes]; + if (args) { + callbackArgs.push.apply(callbackArgs, args); + } + Ext.callback(callback, scope || node, callbackArgs); + } + }); + } + }, + + + getNewRecords: function() { + return Ext.Array.filter(this.tree.flatten(), this.filterNew); + }, + + + getUpdatedRecords: function() { + return Ext.Array.filter(this.tree.flatten(), this.filterUpdated); + }, + + onNodeRemove: function(parent, node, isMove) { + var me = this; + + node.unjoin(me); + + + + if (!node.phantom && !isMove) { + Ext.Array.include(me.removed, node); + } + + if (me.autoSync && !me.autoSyncSuspended && !isMove) { + me.sync(); + } + }, + + onNodeAdded: function(parent, node) { + var me = this, + proxy = me.getProxy(), + reader = proxy.getReader(), + data = node.raw || node[node.persistenceProperty], + dataRoot; + + Ext.Array.remove(me.removed, node); + node.join(me); + + + if (!node.isLeaf() && !me.lazyFill) { + dataRoot = reader.getRoot(data); + if (dataRoot) { + me.fillNode(node, reader.extractData(dataRoot)); + delete data[reader.root]; + } + } + + if (me.autoSync && !me.autoSyncSuspended && (node.phantom || node.dirty)) { + me.sync(); + } + }, + + onNodeSort: function() { + if (this.autoSync && !this.autoSyncSuspended) { + this.sync(); + } + }, + + + setRootNode: function(root, preventLoad) { + var me = this, + model = me.model, + idProperty = model.prototype.idProperty + + root = root || {}; + if (!root.isModel) { + root = Ext.apply({}, root); + + Ext.applyIf(root, { + id: me.defaultRootId, + text: me.defaultRootText, + allowDrag: false + }); + if (root[idProperty] === undefined) { + root[idProperty] = me.defaultRootId; + } + Ext.data.NodeInterface.decorate(model); + root = Ext.ModelManager.create(root, model); + } else if (root.isModel && !root.isNode) { + Ext.data.NodeInterface.decorate(model); + } + + + + + me.getProxy().getReader().buildExtractors(true); + + + me.tree.setRootNode(root); + + + + + + + if (preventLoad !== true && !root.isLoaded() && (me.autoLoad === true || root.isExpanded())) { + root.data.expanded = false; + root.expand(); + } + + return root; + }, + + + getRootNode: function() { + return this.tree.getRootNode(); + }, + + + getNodeById: function(id) { + return this.tree.getNodeById(id); + }, + + + getById: function(id) { + return this.getNodeById(id); + }, + + + load: function(options) { + options = options || {}; + options.params = options.params || {}; + + var me = this, + node = options.node || me.tree.getRootNode(); + + + + if (!node) { + node = me.setRootNode({ + expanded: true + }, true); + } + + + + options.id = node.getId(); + + if (me.clearOnLoad) { + if(me.clearRemovedOnLoad) { + + me.clearRemoved(node); + } + + me.tree.un('remove', me.onNodeRemove, me); + + node.removeAll(false); + + me.tree.on('remove', me.onNodeRemove, me); + } + + Ext.applyIf(options, { + node: node + }); + + me.callParent([options]); + + if (me.loading && node) { + node.set('loading', true); + } + + return me; + }, + + + clearRemoved: function(node) { + var me = this, + removed = me.removed, + id = node.getId(), + removedLength = removed.length, + i = removedLength, + recordsToClear = {}, + newRemoved = [], + removedHash = {}, + removedNode, + targetNode, + targetId; + + if(node === me.getRootNode()) { + + me.removed = []; + return; + } + + + for(; i--;) { + removedNode = removed[i]; + removedHash[removedNode.getId()] = removedNode; + } + + for(i = removedLength; i--;) { + removedNode = removed[i]; + targetNode = removedNode; + while(targetNode && targetNode.getId() !== id) { + + targetId = targetNode.get('parentId'); + targetNode = targetNode.parentNode || me.getNodeById(targetId) || removedHash[targetId]; + } + if(targetNode) { + + recordsToClear[removedNode.getId()] = removedNode; + } + } + + + for(i = 0; i < removedLength; i++) { + removedNode = removed[i]; + if(!recordsToClear[removedNode.getId()]) { + newRemoved.push(removedNode); + } + } + + me.removed = newRemoved; + }, + + + fillNode: function(node, newNodes) { + var me = this, + ln = newNodes ? newNodes.length : 0, + sorters = me.sorters, + i, sortCollection, + needsIndexSort = false, + performLocalSort = ln && me.sortOnLoad && !me.remoteSort && sorters && sorters.items && sorters.items.length, + node1, node2, rootFill; + + + for (i = 1; i < ln; i++) { + node1 = newNodes[i]; + node2 = newNodes[i - 1]; + needsIndexSort = node1[node1.persistenceProperty].index != node2[node2.persistenceProperty].index; + if (needsIndexSort) { + break; + } + } + + + if (performLocalSort) { + + if (needsIndexSort) { + me.sorters.insert(0, me.indexSorter); + } + sortCollection = new Ext.util.MixedCollection(); + sortCollection.addAll(newNodes); + sortCollection.sort(me.sorters.items); + newNodes = sortCollection.items; + + + me.sorters.remove(me.indexSorter); + } else if (needsIndexSort) { + Ext.Array.sort(newNodes, me.sortByIndex); + } + + node.set('loaded', true); + + + + + + rootFill = me.fillCount === 0; + if (rootFill) { + + me.fireEvent('beforefill', me, node, newNodes); + } + ++me.fillCount; + + if (newNodes.length) { + node.appendChild(newNodes, undefined, true); + } + + if (rootFill) { + + me.fireEvent('fillcomplete', me, node, newNodes); + } + --me.fillCount; + + return newNodes; + }, + + beginBulkRemove: function(){ + this.fireEvent('beforebulkremove', this); + }, + + endBulkRemove: function(){ + this.fireEvent('bulkremovecomplete', this); + }, + + + sortByIndex: function(node1, node2) { + return node1[node1.persistenceProperty].index - node2[node2.persistenceProperty].index; + }, + + onIdChanged: function(model, oldId, newId, oldInternalId){ + this.tree.onNodeIdChanged(model, oldId, newId, oldInternalId); + this.callParent(arguments); + }, + + + onProxyLoad: function(operation) { + var me = this, + successful = operation.wasSuccessful(), + records = operation.getRecords(), + node = operation.node; + + me.loading = false; + node.set('loading', false); + if (successful) { + if (!me.clearOnLoad) { + records = me.cleanRecords(node, records); + } + records = me.fillNode(node, records); + } + + + + + me.fireEvent('read', me, operation.node, records, successful); + me.fireEvent('load', me, operation.node, records, successful); + + Ext.callback(operation.callback, operation.scope || me, [records, operation, successful]); + }, + + cleanRecords: function(node, records){ + var nodeHash = {}, + childNodes = node.childNodes, + i = 0, + len = childNodes.length, + out = [], + rec; + + + for (; i < len; ++i) { + nodeHash[childNodes[i].getId()] = true; + } + + for (i = 0, len = records.length; i < len; ++i) { + rec = records[i]; + if (!nodeHash[rec.getId()]) { + out.push(rec); + } + } + + return out; + }, + + + removeAll: function() { + var root = this.getRootNode(); + if (root) { + root.destroy(true); + } + this.fireEvent('clear', this); + }, + + + doSort: function(sorterFn) { + var me = this; + if (me.remoteSort) { + + me.load(); + } else { + me.tree.sort(sorterFn, true); + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + } + me.fireEvent('sort', me, me.sorters.getRange()); + } +}, function() { + var proto = this.prototype; + proto.indexSorter = new Ext.util.Sorter({ + sorterFn: proto.sortByIndex + }); +}); + + +Ext.define('Ext.data.UuidGenerator', (function () { + var twoPow14 = Math.pow(2, 14), + twoPow16 = Math.pow(2, 16), + twoPow28 = Math.pow(2, 28), + twoPow32 = Math.pow(2, 32); + + function toHex (value, length) { + var ret = value.toString(16); + if (ret.length > length) { + ret = ret.substring(ret.length - length); + } else if (ret.length < length) { + ret = Ext.String.leftPad(ret, length, '0'); + } + return ret; + } + + function rand (lo, hi) { + var v = Math.random() * (hi - lo + 1); + return Math.floor(v) + lo; + } + + function split (bignum) { + if (typeof(bignum) == 'number') { + var hi = Math.floor(bignum / twoPow32); + return { + lo: Math.floor(bignum - hi * twoPow32), + hi: hi + }; + } + return bignum; + } + + return { + extend: Ext.data.IdGenerator , + + alias: 'idgen.uuid', + + id: 'uuid', + + + + + + + version: 4, + + constructor: function() { + var me = this; + + me.callParent(arguments); + + me.parts = []; + me.init(); + }, + + generate: function () { + var me = this, + parts = me.parts, + ts = me.timestamp; + + + parts[0] = toHex(ts.lo, 8); + parts[1] = toHex(ts.hi & 0xFFFF, 4); + parts[2] = toHex(((ts.hi >>> 16) & 0xFFF) | (me.version << 12), 4); + parts[3] = toHex(0x80 | ((me.clockSeq >>> 8) & 0x3F), 2) + + toHex(me.clockSeq & 0xFF, 2); + parts[4] = toHex(me.salt.hi, 4) + toHex(me.salt.lo, 8); + + if (me.version == 4) { + me.init(); + } else { + + ++ts.lo; + if (ts.lo >= twoPow32) { + ts.lo = 0; + ++ts.hi; + } + } + + return parts.join('-').toLowerCase(); + }, + + getRecId: function (rec) { + return rec.getId(); + }, + + + init: function () { + var me = this, + salt, time; + + if (me.version == 4) { + + + + + me.clockSeq = rand(0, twoPow14-1); + + + salt = me.salt || (me.salt = {}); + time = me.timestamp || (me.timestamp = {}); + + + salt.lo = rand(0, twoPow32-1); + salt.hi = rand(0, twoPow16-1); + time.lo = rand(0, twoPow32-1); + time.hi = rand(0, twoPow28-1); + } else { + + me.salt = split(me.salt); + me.timestamp = split(me.timestamp); + + + + me.salt.hi |= 0x100; + } + }, + + + reconfigure: function (config) { + Ext.apply(this, config); + this.init(); + } + }; +}())); + + +Ext.define('Ext.data.reader.Xml', { + extend: Ext.data.reader.Reader , + alternateClassName: 'Ext.data.XmlReader', + alias : 'reader.xml', + + + + + + + createAccessor: function(expr) { + var me = this; + + if (Ext.isEmpty(expr)) { + return Ext.emptyFn; + } + + if (Ext.isFunction(expr)) { + return expr; + } + + return function(root) { + return me.getNodeValue(Ext.DomQuery.selectNode(expr, root)); + }; + }, + + getNodeValue: function(node) { + if (node) { + + + + if (typeof node.normalize === 'function') { + node.normalize(); + } + node = node.firstChild; + if (node) { + return node.nodeValue; + } + } + return undefined; + }, + + + getResponseData: function(response) { + var xml = response.responseXML, + error, + msg; + + if (!xml) { + msg = 'XML data not found in the response'; + + error = new Ext.data.ResultSet({ + total : 0, + count : 0, + records: [], + success: false, + message: msg + }); + + this.fireEvent('exception', this, response, error); + + Ext.Logger.warn(msg); + + return error; + } + + return this.readRecords(xml); + }, + + + getData: function(data) { + return data.documentElement || data; + }, + + + getRoot: function(data) { + var nodeName = data.nodeName, + root = this.root; + + if (!root || (nodeName && nodeName == root)) { + return data; + } else if (Ext.DomQuery.isXml(data)) { + + + + return Ext.DomQuery.selectNode(root, data); + } + }, + + + extractData: function(root) { + var recordName = this.record; + + + if (recordName != root.nodeName) { + root = Ext.DomQuery.select(recordName, root); + } else { + root = [root]; + } + return this.callParent([root]); + }, + + + getAssociatedDataRoot: function(data, associationName) { + return Ext.DomQuery.select(associationName, data)[0]; + }, + + + readRecords: function(doc) { + + + if (Ext.isArray(doc)) { + doc = doc[0]; + } + + + this.xmlData = doc; + return this.callParent([doc]); + }, + + + createFieldAccessExpression: function(field, fieldVarName, dataName) { + var namespace = this.namespace, + selector, result; + + selector = field.mapping || ((namespace ? namespace + '|' : '') + field.name); + + if (typeof selector === 'function') { + result = fieldVarName + '.mapping(' + dataName + ', this)'; + } else { + result = 'me.getNodeValue(Ext.DomQuery.selectNode("' + selector + '", ' + dataName + '))'; + } + return result; + } +}); + + +Ext.define('Ext.data.writer.Xml', { + + + + extend: Ext.data.writer.Writer , + alternateClassName: 'Ext.data.XmlWriter', + + alias: 'writer.xml', + + + + + documentRoot: 'xmlData', + + + defaultDocumentRoot: 'xmlData', + + + header: '', + + + record: 'record', + + + writeRecords: function(request, data) { + var me = this, + xml = [], + i = 0, + len = data.length, + root = me.documentRoot, + record = me.record, + needsRoot = data.length !== 1, + item, + key; + + + xml.push(me.header || ''); + + if (!root && needsRoot) { + root = me.defaultDocumentRoot; + } + + if (root) { + xml.push('<', root, '>'); + } + + for (; i < len; ++i) { + item = data[i]; + xml.push('<', record, '>'); + for (key in item) { + if (item.hasOwnProperty(key)) { + xml.push('<', key, '>', item[key], ''); + } + } + xml.push(''); + } + + if (root) { + xml.push(''); + } + + request.xmlData = xml.join(''); + return request; + } +}); + + +Ext.define('Ext.data.XmlStore', { + extend: Ext.data.Store , + alias: 'store.xml', + + + + + + + + constructor: function(config){ + config = Ext.apply({ + proxy: { + type: 'ajax', + reader: 'xml', + writer: 'xml' + } + }, config); + + this.callParent([config]); + } +}); + + +Ext.define('Ext.data.association.BelongsTo', { + extend: Ext.data.association.Association , + alternateClassName: 'Ext.data.BelongsToAssociation', + alias: 'association.belongsto', + + + + + + + + + constructor: function(config) { + this.callParent(arguments); + + var me = this, + ownerProto = me.ownerModel.prototype, + associatedName = me.associatedName, + getterName = me.getterName || 'get' + associatedName, + setterName = me.setterName || 'set' + associatedName; + + Ext.applyIf(me, { + name : associatedName, + foreignKey : associatedName.toLowerCase() + "_id", + instanceName: associatedName + 'BelongsToInstance', + associationKey: associatedName.toLowerCase() + }); + + ownerProto[getterName] = me.createGetter(); + ownerProto[setterName] = me.createSetter(); + }, + + + createSetter: function() { + var me = this, + foreignKey = me.foreignKey, + instanceName = me.instanceName; + + + return function(value, options, scope) { + + var setByRecord = value && value.isModel, + valueToSet = setByRecord ? value.getId() : value; + + + if (setByRecord) { + this[instanceName] = value; + } + + + else if (this[instanceName] instanceof Ext.data.Model && !this.isEqual(this.get(foreignKey), valueToSet)) { + delete this[instanceName]; + } + + + this.set(foreignKey, valueToSet); + + if (Ext.isFunction(options)) { + options = { + callback: options, + scope: scope || this + }; + } + + if (Ext.isObject(options)) { + return this.save(options); + } + }; + }, + + + createGetter: function() { + var me = this, + associatedName = me.associatedName, + associatedModel = me.associatedModel, + foreignKey = me.foreignKey, + primaryKey = me.primaryKey, + instanceName = me.instanceName; + + + return function(options, scope) { + options = options || {}; + + var model = this, + foreignKeyId = model.get(foreignKey), + success, + instance, + args; + + if (options.reload === true || model[instanceName] === undefined) { + instance = Ext.ModelManager.create({}, associatedName); + instance.set(primaryKey, foreignKeyId); + + if (typeof options == 'function') { + options = { + callback: options, + scope: scope || model + }; + } + + + success = options.success; + options.success = function(rec){ + model[instanceName] = rec; + if (success) { + success.apply(this, arguments); + } + }; + + associatedModel.load(foreignKeyId, options); + + model[instanceName] = instance; + return instance; + } else { + instance = model[instanceName]; + args = [instance]; + scope = scope || options.scope || model; + + + + + Ext.callback(options, scope, args); + Ext.callback(options.success, scope, args); + Ext.callback(options.failure, scope, args); + Ext.callback(options.callback, scope, args); + + return instance; + } + }; + }, + + + read: function(record, reader, associationData){ + record[this.instanceName] = reader.read([associationData]).records[0]; + } +}); + + +Ext.define('Ext.util.Inflector', { + + + + singleton: true, + + + + + plurals: [ + [(/(quiz)$/i), "$1zes" ], + [(/^(ox)$/i), "$1en" ], + [(/([m|l])ouse$/i), "$1ice" ], + [(/(matr|vert|ind)ix|ex$/i), "$1ices" ], + [(/(x|ch|ss|sh)$/i), "$1es" ], + [(/([^aeiouy]|qu)y$/i), "$1ies" ], + [(/(hive)$/i), "$1s" ], + [(/(?:([^f])fe|([lr])f)$/i), "$1$2ves"], + [(/sis$/i), "ses" ], + [(/([ti])um$/i), "$1a" ], + [(/(buffal|tomat|potat)o$/i), "$1oes" ], + [(/(bu)s$/i), "$1ses" ], + [(/(alias|status|sex)$/i), "$1es" ], + [(/(octop|vir)us$/i), "$1i" ], + [(/(ax|test)is$/i), "$1es" ], + [(/^person$/), "people" ], + [(/^man$/), "men" ], + [(/^(child)$/), "$1ren" ], + [(/s$/i), "s" ], + [(/$/), "s" ] + ], + + + singulars: [ + [(/(quiz)zes$/i), "$1" ], + [(/(matr)ices$/i), "$1ix" ], + [(/(vert|ind)ices$/i), "$1ex" ], + [(/^(ox)en/i), "$1" ], + [(/(alias|status)es$/i), "$1" ], + [(/(octop|vir)i$/i), "$1us" ], + [(/(cris|ax|test)es$/i), "$1is" ], + [(/(shoe)s$/i), "$1" ], + [(/(o)es$/i), "$1" ], + [(/(bus)es$/i), "$1" ], + [(/([m|l])ice$/i), "$1ouse" ], + [(/(x|ch|ss|sh)es$/i), "$1" ], + [(/(m)ovies$/i), "$1ovie" ], + [(/(s)eries$/i), "$1eries"], + [(/([^aeiouy]|qu)ies$/i), "$1y" ], + [(/([lr])ves$/i), "$1f" ], + [(/(tive)s$/i), "$1" ], + [(/(hive)s$/i), "$1" ], + [(/([^f])ves$/i), "$1fe" ], + [(/(^analy)ses$/i), "$1sis" ], + [(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i), "$1$2sis"], + [(/([ti])a$/i), "$1um" ], + [(/(n)ews$/i), "$1ews" ], + [(/people$/i), "person" ], + [(/s$/i), "" ] + ], + + + uncountable: [ + "sheep", + "fish", + "series", + "species", + "money", + "rice", + "information", + "equipment", + "grass", + "mud", + "offspring", + "deer", + "means" + ], + + + singular: function(matcher, replacer) { + this.singulars.unshift([matcher, replacer]); + }, + + + plural: function(matcher, replacer) { + this.plurals.unshift([matcher, replacer]); + }, + + + clearSingulars: function() { + this.singulars = []; + }, + + + clearPlurals: function() { + this.plurals = []; + }, + + + isTransnumeral: function(word) { + return Ext.Array.indexOf(this.uncountable, word) != -1; + }, + + + pluralize: function(word) { + if (this.isTransnumeral(word)) { + return word; + } + + var plurals = this.plurals, + length = plurals.length, + tuple, regex, i; + + for (i = 0; i < length; i++) { + tuple = plurals[i]; + regex = tuple[0]; + + if (regex == word || (regex.test && regex.test(word))) { + return word.replace(regex, tuple[1]); + } + } + + return word; + }, + + + singularize: function(word) { + if (this.isTransnumeral(word)) { + return word; + } + + var singulars = this.singulars, + length = singulars.length, + tuple, regex, i; + + for (i = 0; i < length; i++) { + tuple = singulars[i]; + regex = tuple[0]; + + if (regex == word || (regex.test && regex.test(word))) { + return word.replace(regex, tuple[1]); + } + } + + return word; + }, + + + classify: function(word) { + return Ext.String.capitalize(this.singularize(word)); + }, + + + ordinalize: function(number) { + var parsed = parseInt(number, 10), + mod10 = parsed % 10, + mod100 = parsed % 100; + + + if (11 <= mod100 && mod100 <= 13) { + return number + "th"; + } else { + switch(mod10) { + case 1 : return number + "st"; + case 2 : return number + "nd"; + case 3 : return number + "rd"; + default: return number + "th"; + } + } + } +}, function() { + + var irregulars = { + alumnus: 'alumni', + cactus : 'cacti', + focus : 'foci', + nucleus: 'nuclei', + radius: 'radii', + stimulus: 'stimuli', + ellipsis: 'ellipses', + paralysis: 'paralyses', + oasis: 'oases', + appendix: 'appendices', + index: 'indexes', + beau: 'beaux', + bureau: 'bureaux', + tableau: 'tableaux', + woman: 'women', + child: 'children', + man: 'men', + corpus: 'corpora', + criterion: 'criteria', + curriculum: 'curricula', + genus: 'genera', + memorandum: 'memoranda', + phenomenon: 'phenomena', + foot: 'feet', + goose: 'geese', + tooth: 'teeth', + antenna: 'antennae', + formula: 'formulae', + nebula: 'nebulae', + vertebra: 'vertebrae', + vita: 'vitae' + }, + singular; + + for (singular in irregulars) { + this.plural(singular, irregulars[singular]); + this.singular(irregulars[singular], singular); + } +}); + + +Ext.define('Ext.data.association.HasMany', { + extend: Ext.data.association.Association , + alternateClassName: 'Ext.data.HasManyAssociation', + + + alias: 'association.hasmany', + + + + + + + + + + + + + + constructor: function(config) { + var me = this, + ownerProto, + name; + + me.callParent(arguments); + + me.name = me.name || Ext.util.Inflector.pluralize(me.associatedName.toLowerCase()); + + ownerProto = me.ownerModel.prototype; + name = me.name; + + Ext.applyIf(me, { + storeName : name + "Store", + foreignKey: me.ownerName.toLowerCase() + "_id" + }); + + ownerProto[name] = me.createStore(); + }, + + + createStore: function() { + var that = this, + associatedModel = that.associatedModel, + storeName = that.storeName, + foreignKey = that.foreignKey, + primaryKey = that.primaryKey, + filterProperty = that.filterProperty, + autoLoad = that.autoLoad, + storeConfig = that.storeConfig || {}; + + return function() { + var me = this, + config, filter, + modelDefaults = {}; + + if (me[storeName] === undefined) { + if (filterProperty) { + filter = { + property : filterProperty, + value : me.get(filterProperty), + exactMatch: true + }; + } else { + filter = { + property : foreignKey, + value : me.get(primaryKey), + exactMatch: true + }; + } + + modelDefaults[foreignKey] = me.get(primaryKey); + + config = Ext.apply({}, storeConfig, { + model : associatedModel, + filters : [filter], + remoteFilter : false, + modelDefaults: modelDefaults + }); + + me[storeName] = Ext.data.AbstractStore.create(config); + if (autoLoad) { + me[storeName].load(); + } + } + + return me[storeName]; + }; + }, + + + read: function(record, reader, associationData){ + var store = record[this.name](), + inverse, + items, iLen, i; + + store.add(reader.read(associationData).records); + + + + inverse = this.associatedModel.prototype.associations.findBy(function(assoc){ + return assoc.type === 'belongsTo' && assoc.associatedName === record.$className; + }); + + + if (inverse) { + items = store.data.items; + iLen = items.length; + + for (i = 0; i < iLen; i++) { + items[i][inverse.instanceName] = record; + } + } + } +}); + + +Ext.define('Ext.data.association.HasOne', { + extend: Ext.data.association.Association , + alternateClassName: 'Ext.data.HasOneAssociation', + + alias: 'association.hasone', + + + + + + + + + + constructor: function(config) { + this.callParent(arguments); + + var me = this, + ownerProto = me.ownerModel.prototype, + associatedName = me.associatedName, + getterName = me.getterName || 'get' + associatedName, + setterName = me.setterName || 'set' + associatedName; + + Ext.applyIf(me, { + name : associatedName, + foreignKey : associatedName.toLowerCase() + "_id", + instanceName: associatedName + 'HasOneInstance', + associationKey: associatedName.toLowerCase() + }); + + ownerProto[getterName] = me.createGetter(); + ownerProto[setterName] = me.createSetter(); + }, + + + createSetter: function() { + var me = this, + foreignKey = me.foreignKey, + instanceName = me.instanceName; + + + return function(value, options, scope) { + + var setByRecord = value && value.isModel, + valueToSet = setByRecord ? value.getId() : value; + + + if (setByRecord) { + this[instanceName] = value; + } + + + else if (this[instanceName] instanceof Ext.data.Model && !this.isEqual(this.get(foreignKey), valueToSet)) { + delete this[instanceName]; + } + + + this.set(foreignKey, valueToSet); + + if (Ext.isFunction(options)) { + options = { + callback: options, + scope: scope || this + }; + } + + if (Ext.isObject(options)) { + return this.save(options); + } + }; + }, + + + createGetter: function() { + var me = this, + ownerModel = me.ownerModel, + associatedName = me.associatedName, + associatedModel = me.associatedModel, + foreignKey = me.foreignKey, + primaryKey = me.primaryKey, + instanceName = me.instanceName; + + + return function(options, scope) { + options = options || {}; + + var model = this, + foreignKeyId = model.get(foreignKey), + success, + instance, + args; + + if (options.reload === true || model[instanceName] === undefined) { + instance = Ext.ModelManager.create({}, associatedName); + instance.set(primaryKey, foreignKeyId); + + if (typeof options == 'function') { + options = { + callback: options, + scope: scope || model + }; + } + + + success = options.success; + options.success = function(rec){ + model[instanceName] = rec; + if (success) { + success.apply(this, arguments); + } + }; + + associatedModel.load(foreignKeyId, options); + + model[instanceName] = instance; + return instance; + } else { + instance = model[instanceName]; + args = [instance]; + scope = scope || options.scope || model; + + + + + Ext.callback(options, scope, args); + Ext.callback(options.success, scope, args); + Ext.callback(options.failure, scope, args); + Ext.callback(options.callback, scope, args); + + return instance; + } + }; + }, + + + read: function(record, reader, associationData){ + var inverse = this.associatedModel.prototype.associations.findBy(function(assoc){ + return assoc.type === 'belongsTo' && assoc.associatedName === record.$className; + }), newRecord = reader.read([associationData]).records[0]; + + record[this.instanceName] = newRecord; + + + if (inverse) { + newRecord[inverse.instanceName] = record; + } + } +}); + + +Ext.define('Ext.data.proxy.WebStorage', { + extend: Ext.data.proxy.Client , + alternateClassName: 'Ext.data.WebStorageProxy', + + + + + + id: undefined, + + + + + + + constructor: function(config) { + this.callParent(arguments); + + + this.cache = {}; + + + + this.id = this.id || (this.store ? this.store.storeId : undefined); + + + this.initialize(); + }, + + + create: function(operation, callback, scope) { + var me = this, + records = operation.records, + length = records.length, + ids = me.getIds(), + id, record, i; + + operation.setStarted(); + + if(me.isHierarchical === undefined) { + + + me.isHierarchical = !!records[0].isNode; + if(me.isHierarchical) { + me.getStorageObject().setItem(me.getTreeKey(), true); + } + } + + for (i = 0; i < length; i++) { + record = records[i]; + + if (record.phantom) { + record.phantom = false; + id = me.getNextId(); + } else { + id = record.getId(); + } + + me.setRecord(record, id); + record.commit(); + ids.push(id); + } + + me.setIds(ids); + + operation.setCompleted(); + operation.setSuccessful(); + + if (typeof callback == 'function') { + callback.call(scope || me, operation); + } + }, + + + read: function(operation, callback, scope) { + + + var me = this, + records = [], + i = 0, + success = true, + Model = me.model, + ids, length, record, data, id; + + operation.setStarted(); + + if(me.isHierarchical) { + records = me.getTreeData(); + } else { + ids = me.getIds(); + length = ids.length; + id = operation.id; + + if (id) { + data = me.getRecord(id); + if (data !== null) { + record = new Model(data, id, data); + } + + if (record) { + records.push(record); + } else { + success = false; + } + } else { + for (; i < length; i++) { + id = ids[i]; + data = me.getRecord(id); + records.push(new Model(data, id, data)); + } + } + + } + + if(success) { + operation.setSuccessful(); + } + operation.setCompleted(); + + operation.resultSet = Ext.create('Ext.data.ResultSet', { + records: records, + total : records.length, + loaded : true + }); + + if (typeof callback == 'function') { + callback.call(scope || me, operation); + } + }, + + + update: function(operation, callback, scope) { + var records = operation.records, + length = records.length, + ids = this.getIds(), + record, id, i; + + operation.setStarted(); + + for (i = 0; i < length; i++) { + record = records[i]; + this.setRecord(record); + record.commit(); + + + + id = record.getId(); + if (id !== undefined && Ext.Array.indexOf(ids, id) == -1) { + ids.push(id); + } + } + this.setIds(ids); + + operation.setCompleted(); + operation.setSuccessful(); + + if (typeof callback == 'function') { + callback.call(scope || this, operation); + } + }, + + + destroy: function(operation, callback, scope) { + var me = this, + records = operation.records, + ids = me.getIds(), + idLength = ids.length, + newIds = [], + removedHash = {}, + i = records.length, + id; + + operation.setStarted(); + + for (; i--;) { + Ext.apply(removedHash, me.removeRecord(records[i])); + } + + for(i = 0; i < idLength; i++) { + id = ids[i]; + if(!removedHash[id]) { + newIds.push(id); + } + } + + me.setIds(newIds); + + operation.setCompleted(); + operation.setSuccessful(); + + if (typeof callback == 'function') { + callback.call(scope || me, operation); + } + }, + + + getRecord: function(id) { + var me = this, + cache = me.cache, + data = !cache[id] ? Ext.decode(me.getStorageObject().getItem(me.getRecordKey(id))) : cache[id]; + + if(!data) { + return null; + } + + cache[id] = data; + data[me.model.prototype.idProperty] = id; + + return data; + }, + + + setRecord: function(record, id) { + if (id) { + record.setId(id); + } else { + id = record.getId(); + } + + var me = this, + rawData = record.data, + data = {}, + model = me.model, + fields = model.prototype.fields.items, + length = fields.length, + i = 0, + field, name, obj, key; + + for (; i < length; i++) { + field = fields[i]; + name = field.name; + + if(field.persist) { + data[name] = rawData[name]; + } + } + + + delete data[me.model.prototype.idProperty]; + + + if(record.isNode && record.get('depth') === 1) { + delete data.parentId; + } + + obj = me.getStorageObject(); + key = me.getRecordKey(id); + + + me.cache[id] = data; + + + obj.removeItem(key); + obj.setItem(key, Ext.encode(data)); + }, + + + removeRecord: function(record) { + var me = this, + id = record.getId(), + records = {}, + i, childNodes; + + records[id] = record; + me.getStorageObject().removeItem(me.getRecordKey(id)); + delete me.cache[id]; + + if(record.childNodes) { + childNodes = record.childNodes; + for(i = childNodes.length; i--;) { + Ext.apply(records, me.removeRecord(childNodes[i])); + } + } + + return records; + }, + + + getRecordKey: function(id) { + if (id.isModel) { + id = id.getId(); + } + + return Ext.String.format("{0}-{1}", this.id, id); + }, + + + getRecordCounterKey: function() { + return Ext.String.format("{0}-counter", this.id); + }, + + + getTreeKey: function() { + return Ext.String.format("{0}-tree", this.id); + }, + + + getIds: function() { + var me = this, + ids = (me.getStorageObject().getItem(me.id) || "").split(","), + model = me.model, + length = ids.length, + isString = model.prototype.fields.get(model.prototype.idProperty).type.type === 'string', + i; + + if (length == 1 && ids[0] === "") { + ids = []; + } else { + for (i = 0; i < length; i++) { + ids[i] = isString ? ids[i] : +ids[i]; + } + } + + return ids; + }, + + + setIds: function(ids) { + var obj = this.getStorageObject(), + str = ids.join(","); + + obj.removeItem(this.id); + + if (!Ext.isEmpty(str)) { + obj.setItem(this.id, str); + } + }, + + + getNextId: function() { + var me = this, + obj = me.getStorageObject(), + key = me.getRecordCounterKey(), + model = me.model, + isString = model.prototype.fields.get(model.prototype.idProperty).type.type === 'string', + id; + + id = me.idGenerator.generate(); + + obj.setItem(key, id); + + if(!isString) { + id = +id; + } + + return id; + }, + + + getTreeData: function() { + var me = this, + ids = me.getIds(), + length = ids.length, + records = [], + recordHash = {}, + root = [], + i = 0, + Model = me.model, + idProperty = Model.prototype.idProperty, + rootLength, record, parent, parentId, children, id; + + for(; i < length; i++) { + id = ids[i]; + + record = me.getRecord(id); + + records.push(record); + + recordHash[id] = record; + if(!record.parentId) { + + root.push(record); + } + } + + rootLength = root.length; + + + Ext.Array.sort(records, me.sortByParentId); + + + for(i = rootLength; i < length; i++) { + record = records[i]; + parentId = record.parentId; + if(!parent || parent[idProperty] !== parentId) { + + parent = recordHash[parentId]; + parent.children = children = []; + } + + + children.push(record); + } + + for(i = length; i--;) { + record = records[i]; + if(!record.children && !record.leaf) { + + record.loaded = true; + } + } + + + for(i = rootLength; i--;) { + record = root[i]; + root[i] = new Model(record, record[idProperty], record); + } + + return root; + }, + + + sortByParentId: function(node1, node2) { + return (node1.parentId || 0) - (node2.parentId || 0); + }, + + + initialize: function() { + var me = this, + storageObject = me.getStorageObject(), + lastId = +storageObject.getItem(me.getRecordCounterKey()); + + storageObject.setItem(me.id, storageObject.getItem(me.id) || ""); + if(storageObject.getItem(me.getTreeKey())) { + me.isHierarchical = true; + } + + me.idGenerator = new Ext.data.SequentialIdGenerator({ + seed: lastId ? lastId + 1 : 1 + }); + }, + + + clear: function() { + var me = this, + obj = me.getStorageObject(), + ids = me.getIds(), + len = ids.length, + i; + + + for (i = 0; i < len; i++) { + obj.removeItem(me.getRecordKey(ids[i])); + } + + + obj.removeItem(me.getRecordCounterKey()); + obj.removeItem(me.getTreeKey()); + obj.removeItem(me.id); + + + me.cache = {}; + }, + + + getStorageObject: function() { + } +}); + + +Ext.define('Ext.data.proxy.LocalStorage', { + extend: Ext.data.proxy.WebStorage , + alias: 'proxy.localstorage', + alternateClassName: 'Ext.data.LocalStorageProxy', + + + getStorageObject: function() { + return window.localStorage; + } +}); + + +Ext.define('Ext.data.proxy.Rest', { + extend: Ext.data.proxy.Ajax , + alternateClassName: 'Ext.data.RestProxy', + alias : 'proxy.rest', + + + actionMethods: { + create : 'POST', + read : 'GET', + update : 'PUT', + destroy: 'DELETE' + }, + + + appendId: true, + + + + + batchActions: false, + + + buildUrl: function(request) { + var me = this, + operation = request.operation, + records = operation.records || [], + record = records[0], + format = me.format, + url = me.getUrl(request), + id = record ? record.getId() : operation.id; + + if (me.appendId && (id != null)) { + if (!url.match(/\/$/)) { + url += '/'; + } + + url += id; + } + + if (format) { + if (!url.match(/\.$/)) { + url += '.'; + } + + url += format; + } + + request.url = url; + + return me.callParent(arguments); + } +}); + + +Ext.define('Ext.data.proxy.SessionStorage', { + extend: Ext.data.proxy.WebStorage , + alias: 'proxy.sessionstorage', + alternateClassName: 'Ext.data.SessionStorageProxy', + + + getStorageObject: function() { + return window.sessionStorage; + } +}); + + + + + +Ext.define('Ext.dd.DDTarget', { + extend: Ext.dd.DragDrop , + + + constructor: function(id, sGroup, config) { + if (id) { + this.initTarget(id, sGroup, config); + } + }, + + + getDragEl: Ext.emptyFn, + + isValidHandleChild: Ext.emptyFn, + + startDrag: Ext.emptyFn, + + endDrag: Ext.emptyFn, + + onDrag: Ext.emptyFn, + + onDragDrop: Ext.emptyFn, + + onDragEnter: Ext.emptyFn, + + onDragOut: Ext.emptyFn, + + onDragOver: Ext.emptyFn, + + onInvalidDrop: Ext.emptyFn, + + onMouseDown: Ext.emptyFn, + + onMouseUp: Ext.emptyFn, + + setXConstraint: Ext.emptyFn, + + setYConstraint: Ext.emptyFn, + + resetConstraints: Ext.emptyFn, + + clearConstraints: Ext.emptyFn, + + clearTicks: Ext.emptyFn, + + setInitPosition: Ext.emptyFn, + + setDragElId: Ext.emptyFn, + + setHandleElId: Ext.emptyFn, + + setOuterHandleElId: Ext.emptyFn, + + addInvalidHandleClass: Ext.emptyFn, + + addInvalidHandleId: Ext.emptyFn, + + addInvalidHandleType: Ext.emptyFn, + + removeInvalidHandleClass: Ext.emptyFn, + + removeInvalidHandleId: Ext.emptyFn, + + removeInvalidHandleType: Ext.emptyFn, + + toString: function() { + return ("DDTarget " + this.id); + } +}); + + +Ext.define('Ext.dd.DragTracker', { + + + + mixins: { + observable: Ext.util.Observable + }, + + + active: false, + + + + + trackOver: false, + + + + + + + tolerance: 5, + + + autoStart: false, + + + + + + + + constructor : function(config){ + var me = this; + Ext.apply(me, config); + me.addEvents( + + 'mouseover', + + + 'mouseout', + + + 'mousedown', + + + 'mouseup', + + + 'mousemove', + + + 'beforedragstart', + + + 'dragstart', + + + 'dragend', + + + 'drag' + ); + + me.dragRegion = new Ext.util.Region(0,0,0,0); + + if (me.el) { + me.initEl(me.el); + } + + + me.mixins.observable.constructor.call(me); + if (me.disabled) { + me.disable(); + } + + }, + + + initEl: function(el) { + var me = this; + + me.el = Ext.get(el); + + + me.handle = Ext.get(me.delegate); + + + me.delegate = me.handle ? undefined : me.delegate; + + if (!me.handle) { + me.handle = me.el; + } + + + + me.handleListeners = { + scope: me, + delegate: me.delegate, + mousedown: me.onMouseDown + }; + + + + + if (me.trackOver || me.overCls) { + Ext.apply(me.handleListeners, { + mouseover: me.onMouseOver, + mouseout: me.onMouseOut + }); + } + me.mon(me.handle, me.handleListeners); + }, + + disable: function() { + this.disabled = true; + }, + + enable: function() { + this.disabled = false; + }, + + destroy : function() { + var me = this; + + if (me.active) { + + me.endDrag({}); + } + me.clearListeners(); + me.mun(me.handle, me.handleListeners); + me.el = me.handle = null; + }, + + + + onMouseOver: function(e, target) { + var me = this; + if (!me.disabled) { + if (Ext.EventManager.contains(e) || me.delegate) { + me.mouseIsOut = false; + if (me.overCls) { + me.el.addCls(me.overCls); + } + me.fireEvent('mouseover', me, e, me.delegate ? e.getTarget(me.delegate, target) : me.handle); + } + } + }, + + + + onMouseOut: function(e) { + var me = this; + + if (me.mouseIsDown) { + me.mouseIsOut = true; + } else { + if (me.overCls) { + me.el.removeCls(me.overCls); + } + me.fireEvent('mouseout', me, e); + } + }, + + onMouseDown: function(e, target){ + var me = this, + el; + + + if (me.disabled ||e.dragTracked) { + return; + } + + + me.dragTarget = me.delegate ? target : me.handle.dom; + me.startXY = me.lastXY = e.getXY(); + me.startRegion = Ext.fly(me.dragTarget).getRegion(); + + if (me.fireEvent('mousedown', me, e) === false || + me.fireEvent('beforedragstart', me, e) === false || + me.onBeforeStart(e) === false) { + return; + } + + + + me.mouseIsDown = true; + + + e.dragTracked = true; + + + el = me.el.dom; + if (Ext.isIE && el.setCapture) { + el.setCapture(); + } + + if (me.preventDefault !== false) { + e.preventDefault(); + } + Ext.getDoc().on({ + scope: me, + mouseup: me.onMouseUp, + mousemove: me.onMouseMove, + selectstart: me.stopSelect + }); + if (me.autoStart) { + me.timer = Ext.defer(me.triggerStart, me.autoStart === true ? 1000 : me.autoStart, me, [e]); + } + }, + + onMouseMove: function(e, target){ + var me = this, + xy = e.getXY(), + s = me.startXY; + + e.preventDefault(); + + me.lastXY = xy; + if (!me.active) { + if (Math.max(Math.abs(s[0]-xy[0]), Math.abs(s[1]-xy[1])) > me.tolerance) { + me.triggerStart(e); + } else { + return; + } + } + + + if (me.fireEvent('mousemove', me, e) === false) { + me.onMouseUp(e); + } else { + me.onDrag(e); + me.fireEvent('drag', me, e); + } + }, + + onMouseUp: function(e) { + var me = this; + + + me.mouseIsDown = false; + + + if (me.mouseIsOut) { + me.mouseIsOut = false; + me.onMouseOut(e); + } + e.preventDefault(); + + + if (Ext.isIE && document.releaseCapture) { + document.releaseCapture(); + } + + me.fireEvent('mouseup', me, e); + me.endDrag(e); + }, + + + endDrag: function(e) { + var me = this, + doc = Ext.getDoc(), + wasActive = me.active; + + doc.un('mousemove', me.onMouseMove, me); + doc.un('mouseup', me.onMouseUp, me); + doc.un('selectstart', me.stopSelect, me); + me.clearStart(); + me.active = false; + if (wasActive) { + me.onEnd(e); + me.fireEvent('dragend', me, e); + } + + delete me._constrainRegion; + + + delete Ext.EventObject.dragTracked; + }, + + triggerStart: function(e) { + var me = this; + me.clearStart(); + me.active = true; + me.onStart(e); + me.fireEvent('dragstart', me, e); + }, + + clearStart : function() { + var timer = this.timer; + if (timer) { + clearTimeout(timer); + delete this.timer; + } + }, + + stopSelect : function(e) { + e.stopEvent(); + return false; + }, + + + onBeforeStart : function(e) { + + }, + + + onStart : function(xy) { + + }, + + + onDrag : function(e) { + + }, + + + onEnd : function(e) { + + }, + + + getDragTarget : function(){ + return this.dragTarget; + }, + + + getDragCt : function(){ + return this.el; + }, + + + getConstrainRegion: function() { + var me = this; + + if (me.constrainTo) { + if (me.constrainTo instanceof Ext.util.Region) { + return me.constrainTo; + } + if (!me._constrainRegion) { + me._constrainRegion = Ext.fly(me.constrainTo).getViewRegion(); + } + } else { + if (!me._constrainRegion) { + me._constrainRegion = me.getDragCt().getViewRegion(); + } + } + return me._constrainRegion; + }, + + getXY : function(constrain){ + return constrain ? this.constrainModes[constrain](this, this.lastXY) : this.lastXY; + }, + + + getOffset : function(constrain){ + var xy = this.getXY(constrain), + s = this.startXY; + + return [xy[0]-s[0], xy[1]-s[1]]; + }, + + constrainModes: { + + point: function(me, xy) { + var dr = me.dragRegion, + constrainTo = me.getConstrainRegion(); + + + if (!constrainTo) { + return xy; + } + + dr.x = dr.left = dr[0] = dr.right = xy[0]; + dr.y = dr.top = dr[1] = dr.bottom = xy[1]; + dr.constrainTo(constrainTo); + + return [dr.left, dr.top]; + }, + + + dragTarget: function(me, xy) { + var s = me.startXY, + dr = me.startRegion.copy(), + constrainTo = me.getConstrainRegion(), + adjust; + + + if (!constrainTo) { + return xy; + } + + + + + dr.translateBy(xy[0]-s[0], xy[1]-s[1]); + + + if (dr.right > constrainTo.right) { + xy[0] += adjust = (constrainTo.right - dr.right); + dr.left += adjust; + } + if (dr.left < constrainTo.left) { + xy[0] += (constrainTo.left - dr.left); + } + + + if (dr.bottom > constrainTo.bottom) { + xy[1] += adjust = (constrainTo.bottom - dr.bottom); + dr.top += adjust; + } + if (dr.top < constrainTo.top) { + xy[1] += (constrainTo.top - dr.top); + } + return xy; + } + } +}); + + +Ext.define('Ext.dd.DragZone', { + extend: Ext.dd.DragSource , + + + constructor : function(el, config){ + var me = this, + scroll = me.containerScroll; + + me.callParent([el, config]); + if (scroll) { + el = me.scrollEl || el; + el = Ext.get(el); + if (Ext.isObject(scroll)) { + el.ddScrollConfig = scroll; + } + Ext.dd.ScrollManager.register(el); + } + }, + + + + + + + + + getDragData : function(e){ + return Ext.dd.Registry.getHandleFromEvent(e); + }, + + + onInitDrag : function(x, y){ + this.proxy.update(this.dragData.ddel.cloneNode(true)); + this.onStartDrag(x, y); + return true; + }, + + + getRepairXY : function(e){ + return Ext.fly(this.dragData.ddel).getXY(); + }, + + destroy : function(){ + this.callParent(); + if (this.containerScroll) { + Ext.dd.ScrollManager.unregister(this.scrollEl || this.el); + } + } +}); + + +Ext.define('Ext.dd.ScrollManager', { + singleton: true, + + + + + constructor: function() { + var ddm = Ext.dd.DragDropManager; + ddm.fireEvents = Ext.Function.createSequence(ddm.fireEvents, this.onFire, this); + ddm.stopDrag = Ext.Function.createSequence(ddm.stopDrag, this.onStop, this); + this.doScroll = Ext.Function.bind(this.doScroll, this); + this.ddmInstance = ddm; + this.els = {}; + this.dragEl = null; + this.proc = {}; + }, + + onStop: function(e){ + var sm = Ext.dd.ScrollManager; + sm.dragEl = null; + sm.clearProc(); + }, + + triggerRefresh: function() { + if (this.ddmInstance.dragCurrent) { + this.ddmInstance.refreshCache(this.ddmInstance.dragCurrent.groups); + } + }, + + doScroll: function() { + if (this.ddmInstance.dragCurrent) { + var proc = this.proc, + procEl = proc.el, + ddScrollConfig = proc.el.ddScrollConfig, + inc = ddScrollConfig ? ddScrollConfig.increment : this.increment; + + if (!this.animate) { + if (procEl.scroll(proc.dir, inc)) { + this.triggerRefresh(); + } + } else { + procEl.scroll(proc.dir, inc, true, this.animDuration, this.triggerRefresh); + } + } + }, + + clearProc: function() { + var proc = this.proc; + if (proc.id) { + clearInterval(proc.id); + } + proc.id = 0; + proc.el = null; + proc.dir = ""; + }, + + startProc: function(el, dir) { + this.clearProc(); + this.proc.el = el; + this.proc.dir = dir; + var group = el.ddScrollConfig ? el.ddScrollConfig.ddGroup : undefined, + freq = (el.ddScrollConfig && el.ddScrollConfig.frequency) + ? el.ddScrollConfig.frequency + : this.frequency; + + if (group === undefined || this.ddmInstance.dragCurrent.ddGroup == group) { + this.proc.id = setInterval(this.doScroll, freq); + } + }, + + onFire: function(e, isDrop) { + if (isDrop || !this.ddmInstance.dragCurrent) { + return; + } + if (!this.dragEl || this.dragEl != this.ddmInstance.dragCurrent) { + this.dragEl = this.ddmInstance.dragCurrent; + + this.refreshCache(); + } + + var xy = e.getXY(), + pt = e.getPoint(), + proc = this.proc, + els = this.els, + id, el, r, c; + + for (id in els) { + el = els[id]; + r = el._region; + c = el.ddScrollConfig ? el.ddScrollConfig : this; + if (r && r.contains(pt) && el.isScrollable()) { + if (r.bottom - pt.y <= c.vthresh) { + if(proc.el != el){ + this.startProc(el, "down"); + } + return; + }else if (r.right - pt.x <= c.hthresh) { + if (proc.el != el) { + this.startProc(el, "left"); + } + return; + } else if(pt.y - r.top <= c.vthresh) { + if (proc.el != el) { + this.startProc(el, "up"); + } + return; + } else if(pt.x - r.left <= c.hthresh) { + if (proc.el != el) { + this.startProc(el, "right"); + } + return; + } + } + } + this.clearProc(); + }, + + + register : function(el){ + if (Ext.isArray(el)) { + for(var i = 0, len = el.length; i < len; i++) { + this.register(el[i]); + } + } else { + el = Ext.get(el); + this.els[el.id] = el; + } + }, + + + unregister : function(el){ + if(Ext.isArray(el)){ + for (var i = 0, len = el.length; i < len; i++) { + this.unregister(el[i]); + } + }else{ + el = Ext.get(el); + delete this.els[el.id]; + } + }, + + + vthresh : 25, + + + hthresh : 25, + + + increment : 100, + + + frequency : 500, + + + animate: true, + + + animDuration: 0.4, + + + ddGroup: undefined, + + + refreshCache : function(){ + var els = this.els, + id; + for (id in els) { + if(typeof els[id] == 'object'){ + els[id]._region = els[id].getRegion(); + } + } + } +}); + + +Ext.define('Ext.dd.DropTarget', { + extend: Ext.dd.DDTarget , + + + + constructor : function(el, config){ + this.el = Ext.get(el); + + Ext.apply(this, config); + + if(this.containerScroll){ + Ext.dd.ScrollManager.register(this.el); + } + + this.callParent([this.el.dom, this.ddGroup || this.group, + {isTarget: true}]); + }, + + + + + dropAllowed : Ext.baseCSSPrefix + 'dd-drop-ok', + + dropNotAllowed : Ext.baseCSSPrefix + 'dd-drop-nodrop', + + + isTarget : true, + + + isNotifyTarget : true, + + + notifyEnter : function(dd, e, data){ + if(this.overClass){ + this.el.addCls(this.overClass); + } + return this.dropAllowed; + }, + + + notifyOver : function(dd, e, data){ + return this.dropAllowed; + }, + + + notifyOut : function(dd, e, data){ + if(this.overClass){ + this.el.removeCls(this.overClass); + } + }, + + + notifyDrop : function(dd, e, data){ + return false; + }, + + destroy : function(){ + this.callParent(); + if(this.containerScroll){ + Ext.dd.ScrollManager.unregister(this.el); + } + } +}); + + +Ext.define('Ext.dd.Registry', { + singleton: true, + constructor: function() { + this.elements = {}; + this.handles = {}; + this.autoIdSeed = 0; + }, + + getId: function(el, autogen){ + if(typeof el == "string"){ + return el; + } + var id = el.id; + if(!id && autogen !== false){ + id = "extdd-" + (++this.autoIdSeed); + el.id = id; + } + return id; + }, + + + register : function(el, data){ + data = data || {}; + if (typeof el == "string") { + el = document.getElementById(el); + } + data.ddel = el; + this.elements[this.getId(el)] = data; + if (data.isHandle !== false) { + this.handles[data.ddel.id] = data; + } + if (data.handles) { + var hs = data.handles, + i, len; + for (i = 0, len = hs.length; i < len; i++) { + this.handles[this.getId(hs[i])] = data; + } + } + }, + + + unregister : function(el){ + var id = this.getId(el, false), + data = this.elements[id], + hs, i, len; + if(data){ + delete this.elements[id]; + if(data.handles){ + hs = data.handles; + for (i = 0, len = hs.length; i < len; i++) { + delete this.handles[this.getId(hs[i], false)]; + } + } + } + }, + + + getHandle : function(id){ + if(typeof id != "string"){ + id = id.id; + } + return this.handles[id]; + }, + + + getHandleFromEvent : function(e){ + var t = e.getTarget(); + return t ? this.handles[t.id] : null; + }, + + + getTarget : function(id){ + if(typeof id != "string"){ + id = id.id; + } + return this.elements[id]; + }, + + + getTargetFromEvent : function(e){ + var t = e.getTarget(); + return t ? this.elements[t.id] || this.handles[t.id] : null; + } +}); + + +Ext.define('Ext.dd.DropZone', { + extend: Ext.dd.DropTarget , + + + + getTargetFromEvent : function(e){ + return Ext.dd.Registry.getTargetFromEvent(e); + }, + + + onNodeEnter : function(n, dd, e, data){ + + }, + + + onNodeOver : function(n, dd, e, data){ + return this.dropAllowed; + }, + + + onNodeOut : function(n, dd, e, data){ + + }, + + + onNodeDrop : function(n, dd, e, data){ + return false; + }, + + + onContainerOver : function(dd, e, data){ + return this.dropNotAllowed; + }, + + + onContainerDrop : function(dd, e, data){ + return false; + }, + + + notifyEnter : function(dd, e, data){ + return this.dropNotAllowed; + }, + + + notifyOver : function(dd, e, data){ + var n = this.getTargetFromEvent(e); + if(!n) { + if(this.lastOverNode){ + this.onNodeOut(this.lastOverNode, dd, e, data); + this.lastOverNode = null; + } + return this.onContainerOver(dd, e, data); + } + if(this.lastOverNode != n){ + if(this.lastOverNode){ + this.onNodeOut(this.lastOverNode, dd, e, data); + } + this.onNodeEnter(n, dd, e, data); + this.lastOverNode = n; + } + return this.onNodeOver(n, dd, e, data); + }, + + + notifyOut : function(dd, e, data){ + if(this.lastOverNode){ + this.onNodeOut(this.lastOverNode, dd, e, data); + this.lastOverNode = null; + } + }, + + + notifyDrop : function(dd, e, data){ + var me = this, + n = me.getTargetFromEvent(e), + result = n ? + me.onNodeDrop(n, dd, e, data) : + me.onContainerDrop(dd, e, data); + + + + if (me.lastOverNode) { + me.onNodeOut(me.lastOverNode, dd, e, data); + me.lastOverNode = null; + } + return result; + }, + + + triggerCacheRefresh : function() { + Ext.dd.DDM.refreshCache(this.groups); + } +}); + + +Ext.define('Ext.direct.Event', { + alias: 'direct.event', + + status: true, + + + constructor: function(config) { + Ext.apply(this, config); + }, + + + getName: function() { + return this.name; + }, + + + getData: function() { + return this.data; + } +}); + + +Ext.define('Ext.direct.RemotingEvent', { + extend: Ext.direct.Event , + alias: 'direct.rpc', + + + getTransaction: function() { + var me = this; + + return me.transaction || Ext.direct.Manager.getTransaction(me.tid); + } +}); + + +Ext.define('Ext.direct.ExceptionEvent', { + extend: Ext.direct.RemotingEvent , + alias: 'direct.exception', + + status: false +}); + + + +Ext.define('Ext.direct.JsonProvider', { + extend: Ext.direct.Provider , + alias: 'direct.jsonprovider', + + + + + + + + parseResponse: function(response) { + if (!Ext.isEmpty(response.responseText)) { + if (Ext.isObject(response.responseText)) { + return response.responseText; + } + + return Ext.decode(response.responseText); + } + + return null; + }, + + + createEvents: function(response) { + var me = this, + data = null, + events = [], + event, i, len; + + try { + data = me.parseResponse(response); + } + catch (e) { + event = new Ext.direct.ExceptionEvent({ + data: e, + xhr: response, + code: Ext.direct.Manager.exceptions.PARSE, + message: 'Error parsing json response: \n\n ' + e + }); + + return [event]; + } + + if (Ext.isArray(data)) { + for (i = 0, len = data.length; i < len; ++i) { + events.push(me.createEvent(data[i])); + } + } + else if (Ext.isObject(data)) { + events.push(me.createEvent(data)); + } + + return events; + }, + + + createEvent: function(response) { + return Ext.create('direct.' + response.type, response); + } +}); + + +Ext.define('Ext.direct.PollingProvider', { + extend: Ext.direct.JsonProvider , + alias: 'direct.pollingprovider', + + + + + + + + + + + + + interval: 3000, + + + + + + constructor: function(config) { + var me = this; + + me.callParent(arguments); + + me.addEvents( + + 'beforepoll', + + + 'poll' + ); + }, + + + isConnected: function() { + return !!this.pollTask; + }, + + + connect: function() { + var me = this, + url = me.url; + + if (url && !me.pollTask) { + me.pollTask = Ext.TaskManager.start({ + run: me.runPoll, + interval: me.interval, + scope: me + }); + + me.fireEvent('connect', me); + } + }, + + + disconnect: function() { + var me = this; + + if (me.pollTask) { + Ext.TaskManager.stop(me.pollTask); + delete me.pollTask; + me.fireEvent('disconnect', me); + } + }, + + + runPoll: function() { + var me = this, + url = me.url; + + if (me.fireEvent('beforepoll', me) !== false) { + if (Ext.isFunction(url)) { + url(me.baseParams); + } + else { + Ext.Ajax.request({ + url: url, + callback: me.onData, + scope: me, + params: me.baseParams + }); + } + + me.fireEvent('poll', me); + } + }, + + + onData: function(opt, success, response) { + var me = this, + i, len, events; + + if (success) { + events = me.createEvents(response); + + for (i = 0, len = events.length; i < len; ++i) { + me.fireEvent('data', me, events[i]); + } + } + else { + events = new Ext.direct.ExceptionEvent({ + data: null, + code: Ext.direct.Manager.exceptions.TRANSPORT, + message: 'Unable to connect to the server.', + xhr: response + }); + + me.fireEvent('data', me, events); + } + } +}); + + +Ext.define('Ext.direct.RemotingMethod', { + + constructor: function(config) { + var me = this, + params = Ext.isDefined(config.params) ? config.params : config.len, + name, pLen, p, param; + + me.name = config.name; + me.formHandler = config.formHandler; + + if (Ext.isNumeric(params)) { + + me.len = params; + me.ordered = true; + } + else { + + me.params = {}; + pLen = params.length; + + for (p = 0; p < pLen; p++) { + param = params[p]; + name = Ext.isObject(param) ? param.name : param; + me.params[name] = true; + } + } + }, + + getArgs: function(params, paramOrder, paramsAsHash) { + var me = this, + args = [], + i, len; + + if (me.ordered) { + if (me.len > 0) { + + if (paramOrder) { + for (i = 0, len = paramOrder.length; i < len; i++) { + args.push(params[paramOrder[i]]); + } + } + else if (paramsAsHash) { + + args.push(params); + } + } + } + else { + args.push(params); + } + + return args; + }, + + + getCallData: function(args) { + var me = this, + data = null, + len = me.len, + params = me.params, + callback, scope, name, options; + + if (me.ordered) { + callback = args[len]; + scope = args[len + 1]; + options = args[len + 2]; + + if (len !== 0) { + data = args.slice(0, len); + } + } + else { + data = Ext.apply({}, args[0]); + callback = args[1]; + scope = args[2]; + options = args[3]; + + + for (name in data) { + if (data.hasOwnProperty(name) && !params[name]) { + delete data[name]; + } + } + } + + return { + data: data, + callback: callback, + scope: scope, + options: options + }; + } +}); + + +Ext.define('Ext.direct.Transaction', { + alias: 'direct.transaction', + alternateClassName: 'Ext.Direct.Transaction', + + statics: { + TRANSACTION_ID: 0 + }, + + + + + constructor: function(config) { + var me = this; + + Ext.apply(me, config); + + me.id = me.tid = ++me.self.TRANSACTION_ID; + me.retryCount = 0; + }, + + send: function() { + var me = this; + + me.provider.queueTransaction(me); + }, + + retry: function() { + var me = this; + + me.retryCount++; + me.send(); + }, + + getProvider: function() { + return this.provider; + } +}); + + +Ext.define('Ext.direct.RemotingProvider', { + extend: Ext.direct.JsonProvider , + alias: 'direct.remotingprovider', + + + + + + + + + + + + + + + + + + + + enableBuffer: 10, + + + maxRetries: 1, + + + + constructor: function(config) { + var me = this; + + me.callParent(arguments); + + me.addEvents( + + 'beforecall', + + + 'call', + + + 'beforecallback' + ); + + me.namespace = (Ext.isString(me.namespace)) ? Ext.ns(me.namespace) : me.namespace || Ext.global; + me.transactions = new Ext.util.MixedCollection(); + me.callBuffer = []; + }, + + + getNamespace: function(root, action) { + var parts, ns, i, l; + + root = root || Ext.global; + parts = action.toString().split('.'); + + for (i = 0, l = parts.length; i < l; i++) { + ns = parts[i]; + root = root[ns]; + + if (typeof root === 'undefined') { + return root; + } + } + + return root; + }, + + + createNamespaces: function(root, action) { + var parts, ns; + + root = root || Ext.global; + parts = action.toString().split('.'); + + for ( var i = 0, l = parts.length; i < l; i++ ) { + ns = parts[i]; + + root[ns] = root[ns] || {}; + root = root[ns]; + }; + + return root; + }, + + + initAPI: function() { + var me = this, + actions = me.actions, + namespace = me.namespace, + action, cls, methods, i, len, method; + + for (action in actions) { + if (actions.hasOwnProperty(action)) { + if (me.disableNestedActions) { + cls = namespace[action]; + + if (!cls) { + cls = namespace[action] = {}; + } + } + else { + cls = me.getNamespace(namespace, action); + + if (!cls) { + cls = me.createNamespaces(namespace, action); + } + } + + methods = actions[action]; + + for (i = 0, len = methods.length; i < len; ++i) { + method = new Ext.direct.RemotingMethod(methods[i]); + cls[method.name] = me.createHandler(action, method); + } + } + } + }, + + + createHandler: function(action, method) { + var me = this, + slice = Array.prototype.slice, + handler; + + if (!method.formHandler) { + handler = function() { + me.configureRequest(action, method, slice.call(arguments, 0)); + }; + } + else { + handler = function(form, callback, scope) { + me.configureFormRequest(action, method, form, callback, scope); + }; + } + + handler.directCfg = { + action: action, + method: method + }; + + return handler; + }, + + + isConnected: function() { + return !!this.connected; + }, + + + connect: function() { + var me = this; + + if (me.url) { + me.initAPI(); + me.connected = true; + me.fireEvent('connect', me); + } + }, + + + disconnect: function() { + var me = this; + + if (me.connected) { + me.connected = false; + me.fireEvent('disconnect', me); + } + }, + + + runCallback: function(transaction, event) { + var success = !!event.status, + funcName = success ? 'success' : 'failure', + callback, options, result; + + if (transaction && transaction.callback) { + callback = transaction.callback; + options = transaction.callbackOptions; + result = typeof event.result !== 'undefined' ? event.result : event.data; + + if (Ext.isFunction(callback)) { + callback(result, event, success, options); + } + else { + Ext.callback(callback[funcName], callback.scope, [result, event, success, options]); + Ext.callback(callback.callback, callback.scope, [result, event, success, options]); + } + } + }, + + + onData: function(options, success, response) { + var me = this, + i, len, events, event, transaction, transactions; + + if (success) { + events = me.createEvents(response); + + for (i = 0, len = events.length; i < len; ++i) { + event = events[i]; + transaction = me.getTransaction(event); + me.fireEvent('data', me, event); + + if (transaction && me.fireEvent('beforecallback', me, event, transaction) !== false) { + me.runCallback(transaction, event, true); + Ext.direct.Manager.removeTransaction(transaction); + } + } + } + else { + transactions = [].concat(options.transaction); + + for (i = 0, len = transactions.length; i < len; ++i) { + transaction = me.getTransaction(transactions[i]); + + if (transaction && transaction.retryCount < me.maxRetries) { + transaction.retry(); + } + else { + event = new Ext.direct.ExceptionEvent({ + data: null, + transaction: transaction, + code: Ext.direct.Manager.exceptions.TRANSPORT, + message: 'Unable to connect to the server.', + xhr: response + }); + + me.fireEvent('data', me, event); + + if (transaction && me.fireEvent('beforecallback', me, transaction) !== false) { + me.runCallback(transaction, event, false); + Ext.direct.Manager.removeTransaction(transaction); + } + } + } + } + }, + + + getTransaction: function(options) { + return options && options.tid ? Ext.direct.Manager.getTransaction(options.tid) : null; + }, + + + configureRequest: function(action, method, args) { + var me = this, + callData, data, callback, scope, opts, transaction, params; + + callData = method.getCallData(args); + data = callData.data; + callback = callData.callback; + scope = callData.scope; + opts = callData.options || {}; + + params = Ext.apply({}, { + provider: me, + args: args, + action: action, + method: method.name, + data: data, + callbackOptions: opts, + callback: scope && Ext.isFunction(callback) ? Ext.Function.bind(callback, scope) : callback + }); + + if (opts.timeout) { + Ext.applyIf(params, { + timeout: opts.timeout + }); + }; + + transaction = new Ext.direct.Transaction(params); + + if (me.fireEvent('beforecall', me, transaction, method) !== false) { + Ext.direct.Manager.addTransaction(transaction); + me.queueTransaction(transaction); + me.fireEvent('call', me, transaction, method); + } + }, + + + getCallData: function(transaction) { + return { + action: transaction.action, + method: transaction.method, + data: transaction.data, + type: 'rpc', + tid: transaction.id + }; + }, + + + sendRequest: function(data) { + var me = this, + request, callData, params, + enableUrlEncode = me.enableUrlEncode, + i, len; + + request = { + url: me.url, + callback: me.onData, + scope: me, + transaction: data, + timeout: me.timeout + }; + + + if (data.timeout) { + request.timeout = data.timeout; + } + + if (Ext.isArray(data)) { + callData = []; + + for (i = 0, len = data.length; i < len; ++i) { + callData.push(me.getCallData(data[i])); + } + } + else { + callData = me.getCallData(data); + } + + if (enableUrlEncode) { + params = {}; + params[Ext.isString(enableUrlEncode) ? enableUrlEncode : 'data'] = Ext.encode(callData); + request.params = params; + } + else { + request.jsonData = callData; + } + + Ext.Ajax.request(request); + }, + + + queueTransaction: function(transaction) { + var me = this, + enableBuffer = me.enableBuffer; + + if (transaction.form) { + me.sendFormRequest(transaction); + return; + } + + if (typeof transaction.timeout !== 'undefined') { + me.sendRequest(transaction); + return; + } + + if (enableBuffer) { + me.callBuffer.push(transaction); + + if (!me.callTask) { + me.callTask = new Ext.util.DelayedTask(me.combineAndSend, me); + } + + me.callTask.delay(Ext.isNumber(enableBuffer) ? enableBuffer : 10); + } + else { + me.combineAndSend(); + } + }, + + + combineAndSend : function() { + var me = this, + buffer = me.callBuffer, + len = buffer.length; + + if (len > 0) { + me.sendRequest(len == 1 ? buffer[0] : buffer); + me.callBuffer = []; + } + }, + + + configureFormRequest: function(action, method, form, callback, scope) { + var me = this, + transaction, isUpload, params; + + transaction = new Ext.direct.Transaction({ + provider: me, + action: action, + method: method.name, + args: [form, callback, scope], + callback: scope && Ext.isFunction(callback) ? Ext.Function.bind(callback, scope) : callback, + isForm: true + }); + + if (me.fireEvent('beforecall', me, transaction, method) !== false) { + Ext.direct.Manager.addTransaction(transaction); + isUpload = String(form.getAttribute("enctype")).toLowerCase() == 'multipart/form-data'; + + params = { + extTID: transaction.id, + extAction: action, + extMethod: method.name, + extType: 'rpc', + extUpload: String(isUpload) + }; + + + + Ext.apply(transaction, { + form: Ext.getDom(form), + isUpload: isUpload, + params: callback && Ext.isObject(callback.params) ? Ext.apply(params, callback.params) : params + }); + + me.fireEvent('call', me, transaction, method); + me.sendFormRequest(transaction); + } + }, + + + sendFormRequest: function(transaction) { + var me = this; + + Ext.Ajax.request({ + url: me.url, + params: transaction.params, + callback: me.onData, + scope: me, + form: transaction.form, + isUpload: transaction.isUpload, + transaction: transaction + }); + } +}); + + +Ext.define('Ext.dom.Layer', { + extend: Ext.Element , + + alternateClassName: 'Ext.Layer', + + + + + + + + + + + + + + + + + + + + + + + statics: { + shims: [] + }, + + isLayer: true, + + localXYNames: { + get: 'getLocalXY', + set: 'setLocalXY' + }, + + + constructor: function(config, existingEl) { + config = config || {}; + var me = this, + dh = Ext.DomHelper, + cp = config.parentEl, + pel = cp ? Ext.getDom(cp) : document.body, + hm = config.hideMode, + cls = Ext.baseCSSPrefix + (config.fixed && !(Ext.isIE6 || Ext.isIEQuirks) ? 'fixed-layer' : 'layer'); + + + + + me.el = me; + + if (existingEl) { + me.dom = Ext.getDom(existingEl); + } + if (!me.dom) { + me.dom = dh.append(pel, config.dh || { + tag: 'div', + cls: cls + }); + } else { + me.addCls(cls); + if (!me.dom.parentNode) { + pel.appendChild(me.dom); + } + } + + if (config.id) { + me.id = me.dom.id = config.id; + } else { + me.id = Ext.id(me.dom); + } + + Ext.Element.addToCache(me); + + if (config.cls) { + me.addCls(config.cls); + } + me.constrain = config.constrain !== false; + + + + + if (hm) { + me.setVisibilityMode(Ext.Element[hm.toUpperCase()]); + if (me.visibilityMode == Ext.Element.ASCLASS) { + me.visibilityCls = config.visibilityCls; + } + } else if (config.useDisplay) { + me.setVisibilityMode(Ext.Element.DISPLAY); + } else { + me.setVisibilityMode(Ext.Element.VISIBILITY); + } + + if (config.shadow) { + me.shadowOffset = config.shadowOffset || 4; + me.shadow = new Ext.Shadow({ + offset: me.shadowOffset, + mode: config.shadow, + fixed: config.fixed + }); + me.disableShadow(); + } else { + me.shadowOffset = 0; + } + me.useShim = config.shim !== false && Ext.useShims; + if (config.hidden === true) { + me.hide(); + } else { + me.show(); + } + }, + + getZIndex: function() { + return parseInt((this.getShim() || this).getStyle('z-index'), 10); + }, + + getShim: function() { + var me = this, + shim, pn; + + if (!me.useShim) { + return null; + } + if (!me.shim) { + shim = me.self.shims.shift(); + if (!shim) { + shim = me.createShim(); + shim.enableDisplayMode('block'); + shim.hide(); + } + pn = me.dom.parentNode; + if (shim.dom.parentNode != pn) { + pn.insertBefore(shim.dom, me.dom); + } + me.shim = shim; + } + return me.shim; + }, + + hideShim: function() { + var me = this; + + if (me.shim) { + me.shim.setDisplayed(false); + me.self.shims.push(me.shim); + delete me.shim; + } + }, + + disableShadow: function() { + var me = this; + + if (me.shadow && !me.shadowDisabled) { + me.shadowDisabled = true; + me.shadow.hide(); + me.lastShadowOffset = me.shadowOffset; + me.shadowOffset = 0; + } + }, + + enableShadow: function(show) { + var me = this; + + if (me.shadow && me.shadowDisabled) { + me.shadowDisabled = false; + me.shadowOffset = me.lastShadowOffset; + delete me.lastShadowOffset; + if (show) { + me.sync(true); + } + } + }, + + + sync: function(doShow) { + var me = this, + shadow = me.shadow, + shadowPos, shimStyle, shadowSize, + shim, xy, x, y, w, h, shimIndex; + + if (!me.updating && me.isVisible() && (shadow || me.useShim)) { + shim = me.getShim(); + xy = me[me.localXYNames.get](); + x = xy[0]; + y = xy[1]; + w = me.dom.offsetWidth; + h = me.dom.offsetHeight; + + if (shadow && !me.shadowDisabled) { + if (doShow && !shadow.isVisible()) { + shadow.show(me); + } else { + shadow.realign(x, y, w, h); + } + if (shim) { + + shimIndex = shim.getStyle('z-index'); + if (shimIndex > me.zindex) { + me.shim.setStyle('z-index', me.zindex - 2); + } + shim.show(); + + if (shadow.isVisible()) { + shadowPos = shadow.el.getXY(); + shimStyle = shim.dom.style; + shadowSize = shadow.el.getSize(); + if (Ext.supports.CSS3BoxShadow) { + shadowSize.height += 6; + shadowSize.width += 4; + shadowPos[0] -= 2; + shadowPos[1] -= 4; + } + shimStyle.left = (shadowPos[0]) + 'px'; + shimStyle.top = (shadowPos[1]) + 'px'; + shimStyle.width = (shadowSize.width) + 'px'; + shimStyle.height = (shadowSize.height) + 'px'; + } else { + shim.setSize(w, h); + shim[me.localXYNames.set](x, y); + } + } + } else if (shim) { + + shimIndex = shim.getStyle('z-index'); + if (shimIndex > me.zindex) { + me.shim.setStyle('z-index', me.zindex - 2); + } + shim.show(); + shim.setSize(w, h); + shim[me.localXYNames.set](x, y); + } + } + return me; + }, + + remove: function() { + this.hideUnders(); + this.callParent(); + }, + + + beginUpdate: function() { + this.updating = true; + }, + + + endUpdate: function() { + this.updating = false; + this.sync(true); + }, + + + hideUnders: function() { + if (this.shadow) { + this.shadow.hide(); + } + this.hideShim(); + }, + + + constrainXY: function() { + if (this.constrain) { + var vw = Ext.Element.getViewWidth(), + vh = Ext.Element.getViewHeight(), + s = Ext.getDoc().getScroll(), + xy = this.getXY(), + x = xy[0], + y = xy[1], + so = this.shadowOffset, + w = this.dom.offsetWidth + so, + h = this.dom.offsetHeight + so, + moved = false; + + if ((x + w) > vw + s.left) { + x = vw - w - so; + moved = true; + } + if ((y + h) > vh + s.top) { + y = vh - h - so; + moved = true; + } + + if (x < s.left) { + x = s.left; + moved = true; + } + if (y < s.top) { + y = s.top; + moved = true; + } + if (moved) { + Ext.Layer.superclass.setXY.call(this, [x, y]); + this.sync(); + } + } + return this; + }, + + getConstrainOffset: function() { + return this.shadowOffset; + }, + + + setVisible: function(visible, animate, duration, callback, easing) { + var me = this, + cb; + + + cb = function() { + if (visible) { + me.sync(true); + } + if (callback) { + callback(); + } + }; + + + if (!visible) { + me.hideUnders(true); + } + me.callParent([visible, animate, duration, callback, easing]); + if (!animate) { + cb(); + } + return me; + }, + + + beforeFx: function() { + this.beforeAction(); + return this.callParent(arguments); + }, + + + afterFx: function() { + this.callParent(arguments); + this.sync(this.isVisible()); + }, + + + beforeAction: function() { + if (!this.updating && this.shadow) { + this.shadow.hide(); + } + }, + + + setLeft: function(left) { + this.callParent(arguments); + return this.sync(); + }, + + setTop: function(top) { + this.callParent(arguments); + return this.sync(); + }, + + setLeftTop: function(left, top) { + this.callParent(arguments); + return this.sync(); + }, + + setLocalX: function() { + this.callParent(arguments); + return this.sync(); + }, + + setLocalXY: function() { + this.callParent(arguments); + return this.sync(); + }, + + setLocalY: function() { + this.callParent(arguments); + return this.sync(); + }, + + setXY: function(xy, animate, duration, callback, easing) { + var me = this; + + + callback = me.createCB(callback); + + me.fixDisplay(); + me.beforeAction(); + me.callParent([xy, animate, duration, callback, easing]); + if (!animate) { + callback(); + } + return me; + }, + + + createCB: function(callback) { + var me = this, + showShadow = me.shadow && me.shadow.isVisible(); + + return function() { + me.constrainXY(); + me.sync(showShadow); + if (callback) { + callback(); + } + }; + }, + + + setX: function(x, animate, duration, callback, easing) { + this.setXY([x, this.getY()], animate, duration, callback, easing); + return this; + }, + + + setY: function(y, animate, duration, callback, easing) { + this.setXY([this.getX(), y], animate, duration, callback, easing); + return this; + }, + + + setSize: function(w, h, animate, duration, callback, easing) { + var me = this; + + + callback = me.createCB(callback); + + me.beforeAction(); + me.callParent([w, h, animate, duration, callback, easing]); + if (!animate) { + callback(); + } + return me; + }, + + + setWidth: function(w, animate, duration, callback, easing) { + var me = this; + + + callback = me.createCB(callback); + + me.beforeAction(); + me.callParent([w, animate, duration, callback, easing]); + if (!animate) { + callback(); + } + return me; + }, + + + setHeight: function(h, animate, duration, callback, easing) { + var me = this; + + + callback = me.createCB(callback); + + me.beforeAction(); + me.callParent([h, animate, duration, callback, easing]); + if (!animate) { + callback(); + } + return me; + }, + + + setBounds: function(x, y, width, height, animate, duration, callback, easing) { + var me = this; + + + callback = me.createCB(callback); + + me.beforeAction(); + if (!animate) { + Ext.Layer.superclass.setXY.call(me, [x, y]); + Ext.Layer.superclass.setSize.call(me, width, height); + callback(); + } else { + me.callParent([x, y, width, height, animate, duration, callback, easing]); + } + return me; + }, + + + setZIndex: function(zindex) { + var me = this; + + me.zindex = zindex; + if (me.getShim()) { + me.shim.setStyle('z-index', zindex++); + } + if (me.shadow) { + me.shadow.setZIndex(zindex++); + } + return me.setStyle('z-index', zindex); + }, + + onOpacitySet: function(opacity){ + var shadow = this.shadow; + if (shadow) { + shadow.setOpacity(opacity); + } + } +}); + + +Ext.define('Ext.draw.Matrix', { + + + + + + + + constructor: function(a, b, c, d, e, f) { + if (a != null) { + this.matrix = [[a, c, e], [b, d, f], [0, 0, 1]]; + } + else { + this.matrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; + } + }, + + add: function(a, b, c, d, e, f) { + var me = this, + out = [[], [], []], + matrix = [[a, c, e], [b, d, f], [0, 0, 1]], + x, + y, + z, + res; + + for (x = 0; x < 3; x++) { + for (y = 0; y < 3; y++) { + res = 0; + for (z = 0; z < 3; z++) { + res += me.matrix[x][z] * matrix[z][y]; + } + out[x][y] = res; + } + } + me.matrix = out; + }, + + prepend: function(a, b, c, d, e, f) { + var me = this, + out = [[], [], []], + matrix = [[a, c, e], [b, d, f], [0, 0, 1]], + x, + y, + z, + res; + + for (x = 0; x < 3; x++) { + for (y = 0; y < 3; y++) { + res = 0; + for (z = 0; z < 3; z++) { + res += matrix[x][z] * me.matrix[z][y]; + } + out[x][y] = res; + } + } + me.matrix = out; + }, + + invert: function() { + var matrix = this.matrix, + a = matrix[0][0], + b = matrix[1][0], + c = matrix[0][1], + d = matrix[1][1], + e = matrix[0][2], + f = matrix[1][2], + x = a * d - b * c; + return new Ext.draw.Matrix(d / x, -b / x, -c / x, a / x, (c * f - d * e) / x, (b * e - a * f) / x); + }, + + clone: function() { + var matrix = this.matrix, + a = matrix[0][0], + b = matrix[1][0], + c = matrix[0][1], + d = matrix[1][1], + e = matrix[0][2], + f = matrix[1][2]; + return new Ext.draw.Matrix(a, b, c, d, e, f); + }, + + translate: function(x, y) { + this.prepend(1, 0, 0, 1, x, y); + }, + + scale: function(x, y, cx, cy) { + var me = this; + if (y == null) { + y = x; + } + me.add(x, 0, 0, y, cx * (1 - x), cy * (1 - y)); + }, + + rotate: function(a, x, y) { + a = Ext.draw.Draw.rad(a); + var me = this, + cos = +Math.cos(a).toFixed(9), + sin = +Math.sin(a).toFixed(9); + me.add(cos, sin, -sin, cos, x - cos * x + sin * y, -(sin * x) + y - cos * y); + }, + + x: function(x, y) { + var matrix = this.matrix; + return x * matrix[0][0] + y * matrix[0][1] + matrix[0][2]; + }, + + y: function(x, y) { + var matrix = this.matrix; + return x * matrix[1][0] + y * matrix[1][1] + matrix[1][2]; + }, + + get: function(i, j) { + return + this.matrix[i][j].toFixed(4); + }, + + toString: function() { + var me = this; + return [me.get(0, 0), me.get(0, 1), me.get(1, 0), me.get(1, 1), 0, 0].join(); + }, + + toSvg: function() { + var me = this; + return "matrix(" + [me.get(0, 0), me.get(1, 0), me.get(0, 1), me.get(1, 1), me.get(0, 2), me.get(1, 2)].join() + ")"; + }, + + toFilter: function(dx, dy) { + var me = this; + dx = dx || 0; + dy = dy || 0; + return "progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', filterType='bilinear', M11=" + me.get(0, 0) + + ", M12=" + me.get(0, 1) + ", M21=" + me.get(1, 0) + ", M22=" + me.get(1, 1) + + ", Dx=" + (me.get(0, 2) + dx) + ", Dy=" + (me.get(1, 2) + dy) + ")"; + }, + + offset: function() { + var matrix = this.matrix; + return [(matrix[0][2] || 0).toFixed(4), (matrix[1][2] || 0).toFixed(4)]; + }, + + + split: function () { + function norm(a) { + return a[0] * a[0] + a[1] * a[1]; + } + function normalize(a) { + var mag = Math.sqrt(norm(a)); + a[0] /= mag; + a[1] /= mag; + } + var matrix = this.matrix, + out = { + translateX: matrix[0][2], + translateY: matrix[1][2] + }, + row; + + + row = [[matrix[0][0], matrix[0][1]], [matrix[1][1], matrix[1][1]]]; + out.scaleX = Math.sqrt(norm(row[0])); + normalize(row[0]); + + out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1]; + row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear]; + + out.scaleY = Math.sqrt(norm(row[1])); + normalize(row[1]); + out.shear /= out.scaleY; + + + out.rotate = Math.asin(-row[0][1]); + + out.isSimple = !+out.shear.toFixed(9) && (out.scaleX.toFixed(9) == out.scaleY.toFixed(9) || !out.rotate); + + return out; + } +}); + + +Ext.define('Ext.draw.SpriteDD', { + extend: Ext.dd.DragSource , + + constructor : function(sprite, cfg){ + var me = this, + el = sprite.el; + me.sprite = sprite; + me.el = el; + me.dragData = {el: el, sprite: sprite}; + me.callParent([el, cfg]); + me.sprite.setStyle('cursor', 'move'); + }, + + showFrame: Ext.emptyFn, + createFrame : Ext.emptyFn, + + getDragEl : function(e){ + return this.el; + }, + + getRegion: function() { + var me = this, + el = me.el, + pos, x1, x2, y1, y2, t, r, b, l, bbox, sprite; + + sprite = me.sprite; + bbox = sprite.getBBox(); + + try { + pos = Ext.Element.getXY(el); + } catch (e) { } + + if (!pos) { + return null; + } + + x1 = pos[0]; + x2 = x1 + bbox.width; + y1 = pos[1]; + y2 = y1 + bbox.height; + + return new Ext.util.Region(y1, x2, y2, x1); + }, + + + + startDrag: function(x, y) { + var me = this, + attr = me.sprite.attr; + me.prev = me.sprite.surface.transformToViewBox(x, y); + }, + + onDrag: function(e) { + var xy = e.getXY(), + me = this, + sprite = me.sprite, + attr = sprite.attr, dx, dy; + xy = me.sprite.surface.transformToViewBox(xy[0], xy[1]); + dx = xy[0] - me.prev[0]; + dy = xy[1] - me.prev[1]; + sprite.setAttributes({ + translate: { + x: attr.translation.x + dx, + y: attr.translation.y + dy + } + }, true); + me.prev = xy; + }, + + setDragElPos: function () { + + return false; + } +}); + + +Ext.define('Ext.draw.Sprite', { + + + + mixins: { + observable: Ext.util.Observable , + animate: Ext.util.Animate + }, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dirty: false, + dirtyHidden: false, + dirtyTransform: false, + dirtyPath: true, + dirtyFont: true, + zIndexDirty: true, + + + isSprite: true, + zIndex: 0, + fontProperties: [ + 'font', + 'font-size', + 'font-weight', + 'font-style', + 'font-family', + 'text-anchor', + 'text' + ], + pathProperties: [ + 'x', + 'y', + 'd', + 'path', + 'height', + 'width', + 'radius', + 'r', + 'rx', + 'ry', + 'cx', + 'cy' + ], + constructor: function(config) { + var me = this; + config = Ext.merge({}, config || {}); + me.id = Ext.id(null, 'ext-sprite-'); + me.transformations = []; + Ext.copyTo(this, config, 'surface,group,type,draggable'); + + me.bbox = {}; + me.attr = { + zIndex: 0, + translation: { + x: null, + y: null + }, + rotation: { + degrees: null, + x: null, + y: null + }, + scaling: { + x: null, + y: null, + cx: null, + cy: null + } + }; + + delete config.surface; + delete config.group; + delete config.type; + delete config.draggable; + me.setAttributes(config); + me.addEvents( + + 'beforedestroy', + + 'destroy', + + 'render', + + 'mousedown', + + 'mouseup', + + 'mouseover', + + 'mouseout', + + 'mousemove', + + 'click' + ); + me.mixins.observable.constructor.apply(this, arguments); + }, + + + + initDraggable: function() { + var me = this; + + if (!me.el) { + me.surface.createSpriteElement(me); + } + me.dd = new Ext.draw.SpriteDD(me, Ext.isBoolean(me.draggable) ? null : me.draggable); + me.on('beforedestroy', me.dd.destroy, me.dd); + }, + + + setAttributes: function(attrs, redraw) { + var me = this, + fontProps = me.fontProperties, + fontPropsLength = fontProps.length, + pathProps = me.pathProperties, + pathPropsLength = pathProps.length, + hasSurface = !!me.surface, + custom = hasSurface && me.surface.customAttributes || {}, + spriteAttrs = me.attr, + dirtyBBox = false, + attr, i, newTranslation, translation, newRotate, rotation, newScaling, scaling; + + attrs = Ext.apply({}, attrs); + for (attr in custom) { + if (attrs.hasOwnProperty(attr) && typeof custom[attr] == "function") { + Ext.apply(attrs, custom[attr].apply(me, [].concat(attrs[attr]))); + } + } + + + if (!!attrs.hidden !== !!spriteAttrs.hidden) { + me.dirtyHidden = true; + } + + + for (i = 0; i < pathPropsLength; i++) { + attr = pathProps[i]; + if (attr in attrs && attrs[attr] !== spriteAttrs[attr]) { + me.dirtyPath = true; + dirtyBBox = true; + break; + } + } + + + if ('zIndex' in attrs) { + me.zIndexDirty = true; + } + + + if ('text' in attrs) { + me.dirtyFont = true; + dirtyBBox = true; + } + + for (i = 0; i < fontPropsLength; i++) { + attr = fontProps[i]; + if (attr in attrs && attrs[attr] !== spriteAttrs[attr]) { + me.dirtyFont = true; + dirtyBBox = true; + break; + } + } + + newTranslation = attrs.translation || attrs.translate; + delete attrs.translate; + delete attrs.translation; + translation = spriteAttrs.translation; + if (newTranslation) { + if (('x' in newTranslation && newTranslation.x !== translation.x) || + ('y' in newTranslation && newTranslation.y !== translation.y)) { + me.dirtyTransform = true; + translation.x = newTranslation.x; + translation.y = newTranslation.y; + } + } + + newRotate = attrs.rotation || attrs.rotate; + rotation = spriteAttrs.rotation; + delete attrs.rotate; + delete attrs.rotation; + if (newRotate) { + if (('x' in newRotate && newRotate.x !== rotation.x) || + ('y' in newRotate && newRotate.y !== rotation.y) || + ('degrees' in newRotate && newRotate.degrees !== rotation.degrees)) { + me.dirtyTransform = true; + rotation.x = newRotate.x; + rotation.y = newRotate.y; + rotation.degrees = newRotate.degrees; + } + } + + newScaling = attrs.scaling || attrs.scale; + scaling = spriteAttrs.scaling; + delete attrs.scale; + delete attrs.scaling; + if (newScaling) { + if (('x' in newScaling && newScaling.x !== scaling.x) || + ('y' in newScaling && newScaling.y !== scaling.y) || + ('cx' in newScaling && newScaling.cx !== scaling.cx) || + ('cy' in newScaling && newScaling.cy !== scaling.cy)) { + me.dirtyTransform = true; + scaling.x = newScaling.x; + scaling.y = newScaling.y; + scaling.cx = newScaling.cx; + scaling.cy = newScaling.cy; + } + } + + + if (!me.dirtyTransform && dirtyBBox) { + if (spriteAttrs.scaling.x === null || + spriteAttrs.scaling.y === null || + spriteAttrs.rotation.y === null || + spriteAttrs.rotation.y === null) { + me.dirtyTransform = true; + } + } + + Ext.apply(spriteAttrs, attrs); + me.dirty = true; + + if (redraw === true && hasSurface) { + me.redraw(); + } + return this; + }, + + + getBBox: function() { + return this.surface.getBBox(this); + }, + + setText: function(text) { + return this.surface.setText(this, text); + }, + + + hide: function(redraw) { + this.setAttributes({ + hidden: true + }, redraw); + return this; + }, + + + show: function(redraw) { + this.setAttributes({ + hidden: false + }, redraw); + return this; + }, + + + remove: function() { + if (this.surface) { + this.surface.remove(this); + return true; + } + return false; + }, + + onRemove: function() { + this.surface.onRemove(this); + }, + + + destroy: function() { + var me = this; + if (me.fireEvent('beforedestroy', me) !== false) { + me.remove(); + me.surface.onDestroy(me); + me.clearListeners(); + me.fireEvent('destroy'); + } + }, + + + redraw: function() { + this.surface.renderItem(this); + return this; + }, + + + setStyle: function() { + this.el.setStyle.apply(this.el, arguments); + return this; + }, + + + addCls: function(obj) { + this.surface.addCls(this, obj); + return this; + }, + + + removeCls: function(obj) { + this.surface.removeCls(this, obj); + return this; + } +}); + + +Ext.define('Ext.draw.Text', { + extend: Ext.draw.Component , + + alias: 'widget.text', + + + text: '', + + + + + + focusable: false, + viewBox: false, + autoSize: true, + baseCls: Ext.baseCSSPrefix + 'surface ' + Ext.baseCSSPrefix + 'draw-text', + + initComponent: function() { + var me = this; + + me.textConfig = Ext.apply({ + type: 'text', + text: me.text, + rotate: { + degrees: me.degrees || 0 + } + }, me.textStyle); + Ext.apply(me.textConfig, me.getStyles(me.styleSelectors || me.styleSelector)); + + + + me.initialConfig.items = [me.textConfig]; + me.callParent(arguments); + }, + + + getStyles: function(selectors) { + selectors = Ext.Array.from(selectors); + var i = 0, + len = selectors.length, + rule, + style, + prop, + result = {}; + + for (; i < len; i++) { + + rule = Ext.util.CSS.getRule(selectors[i]); + if (rule) { + style = rule.style; + if (style) { + Ext.apply(result, { + 'font-family': style.fontFamily, + 'font-weight': style.fontWeight, + 'line-height': style.lineHeight, + 'font-size': style.fontSize, + fill: style.color + }); + } + } + } + return result; + }, + + + setAngle: function(degrees) { + var me = this, + surface, + sprite; + + if (me.rendered) { + surface = me.surface; + sprite = surface.items.items[0]; + + me.degrees = degrees; + sprite.setAttributes({ + rotate: { + degrees: degrees + } + }, true); + if (me.autoSize || me.viewBox) { + me.updateLayout(); + } + } else { + me.degrees = degrees; + } + }, + + + setText: function(text) { + var me = this, + surface, + sprite; + + if (me.rendered) { + surface = me.surface; + sprite = surface.items.items[0]; + + me.text = text || ''; + surface.remove(sprite); + me.textConfig.type = 'text'; + me.textConfig.text = me.text; + sprite = surface.add(me.textConfig); + sprite.setAttributes({ + rotate: { + degrees: me.degrees + } + }, true); + if (me.autoSize || me.viewBox) { + me.updateLayout(); + } + } else { + me.on({ + render: function() { + me.setText(text); + }, + single: true + }); + } + } +}); + + +Ext.define('Ext.draw.engine.ImageExporter', { + singleton: true, + + + defaultUrl: 'http://svg.sencha.io', + + + supportedTypes: ['image/png', 'image/jpeg'], + + + widthParam: 'width', + + + heightParam: 'height', + + + typeParam: 'type', + + + svgParam: 'svg', + + formCls: Ext.baseCSSPrefix + 'hide-display', + + + generate: function(surface, config) { + config = config || {}; + var me = this, + type = config.type, + form; + + if (Ext.Array.indexOf(me.supportedTypes, type) === -1) { + return false; + } + + form = Ext.getBody().createChild({ + tag: 'form', + method: 'POST', + action: config.url || me.defaultUrl, + cls: me.formCls, + children: [{ + tag: 'input', + type: 'hidden', + name: config.widthParam || me.widthParam, + value: config.width || surface.width + }, { + tag: 'input', + type: 'hidden', + name: config.heightParam || me.heightParam, + value: config.height || surface.height + }, { + tag: 'input', + type: 'hidden', + name: config.typeParam || me.typeParam, + value: type + }, { + tag: 'input', + type: 'hidden', + name: config.svgParam || me.svgParam + }] + }); + + + form.last(null, true).value = Ext.draw.engine.SvgExporter.generate(surface); + + form.dom.submit(); + form.remove(); + return true; + } + +}); + + +Ext.define('Ext.draw.engine.Svg', { + + + + extend: Ext.draw.Surface , + + + + + + engine: 'Svg', + + trimRe: /^\s+|\s+$/g, + spacesRe: /\s+/, + xlink: "http:/" + "/www.w3.org/1999/xlink", + + translateAttrs: { + radius: "r", + radiusX: "rx", + radiusY: "ry", + path: "d", + lineWidth: "stroke-width", + fillOpacity: "fill-opacity", + strokeOpacity: "stroke-opacity", + strokeLinejoin: "stroke-linejoin" + }, + + parsers: {}, + + minDefaults: { + circle: { + cx: 0, + cy: 0, + r: 0, + fill: "none", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + ellipse: { + cx: 0, + cy: 0, + rx: 0, + ry: 0, + fill: "none", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + rect: { + x: 0, + y: 0, + width: 0, + height: 0, + rx: 0, + ry: 0, + fill: "none", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + text: { + x: 0, + y: 0, + "text-anchor": "start", + "font-family": null, + "font-size": null, + "font-weight": null, + "font-style": null, + fill: "#000", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + path: { + d: "M0,0", + fill: "none", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + image: { + x: 0, + y: 0, + width: 0, + height: 0, + preserveAspectRatio: "none", + opacity: null + } + }, + + createSvgElement: function(type, attrs) { + var el = this.domRef.createElementNS("http:/" + "/www.w3.org/2000/svg", type), + key; + if (attrs) { + for (key in attrs) { + el.setAttribute(key, String(attrs[key])); + } + } + return el; + }, + + createSpriteElement: function(sprite) { + + var el = this.createSvgElement(sprite.type); + el.id = sprite.id; + if (el.style) { + el.style.webkitTapHighlightColor = "rgba(0,0,0,0)"; + } + sprite.el = Ext.get(el); + this.applyZIndex(sprite); + sprite.matrix = new Ext.draw.Matrix(); + sprite.bbox = { + plain: 0, + transform: 0 + }; + this.applyAttrs(sprite); + this.applyTransformations(sprite); + sprite.fireEvent("render", sprite); + return el; + }, + + getBBoxText: function (sprite) { + var bbox = {}, + bb, height, width, i, ln, el; + + if (sprite && sprite.el) { + el = sprite.el.dom; + try { + bbox = el.getBBox(); + return bbox; + } catch(e) { + + } + bbox = {x: bbox.x, y: Infinity, width: 0, height: 0}; + ln = el.getNumberOfChars(); + for (i = 0; i < ln; i++) { + bb = el.getExtentOfChar(i); + bbox.y = Math.min(bb.y, bbox.y); + height = bb.y + bb.height - bbox.y; + bbox.height = Math.max(bbox.height, height); + width = bb.x + bb.width - bbox.x; + bbox.width = Math.max(bbox.width, width); + } + return bbox; + } + }, + + hide: function() { + Ext.get(this.el).hide(); + }, + + show: function() { + Ext.get(this.el).show(); + }, + + hidePrim: function(sprite) { + this.addCls(sprite, Ext.baseCSSPrefix + 'hide-visibility'); + }, + + showPrim: function(sprite) { + this.removeCls(sprite, Ext.baseCSSPrefix + 'hide-visibility'); + }, + + getDefs: function() { + return this._defs || (this._defs = this.createSvgElement("defs")); + }, + + transform: function(sprite, matrixOnly) { + var me = this, + matrix = new Ext.draw.Matrix(), + transforms = sprite.transformations, + transformsLength = transforms.length, + i = 0, + transform, type; + + for (; i < transformsLength; i++) { + transform = transforms[i]; + type = transform.type; + if (type == "translate") { + matrix.translate(transform.x, transform.y); + } + else if (type == "rotate") { + matrix.rotate(transform.degrees, transform.x, transform.y); + } + else if (type == "scale") { + matrix.scale(transform.x, transform.y, transform.centerX, transform.centerY); + } + } + sprite.matrix = matrix; + if (!matrixOnly) { + sprite.el.set({transform: matrix.toSvg()}); + } + }, + + setSize: function(width, height) { + var me = this, + el = me.el; + + width = +width || me.width; + height = +height || me.height; + me.width = width; + me.height = height; + + el.setSize(width, height); + el.set({ + width: width, + height: height + }); + me.callParent([width, height]); + }, + + + getRegion: function() { + + + var svgXY = this.el.getXY(), + rectXY = this.bgRect.getXY(), + max = Math.max, + x = max(svgXY[0], rectXY[0]), + y = max(svgXY[1], rectXY[1]); + return { + left: x, + top: y, + right: x + this.width, + bottom: y + this.height + }; + }, + + onRemove: function(sprite) { + if (sprite.el) { + sprite.el.destroy(); + delete sprite.el; + } + this.callParent(arguments); + }, + + setViewBox: function(x, y, width, height) { + if (isFinite(x) && isFinite(y) && isFinite(width) && isFinite(height)) { + this.callParent(arguments); + this.el.dom.setAttribute("viewBox", [x, y, width, height].join(" ")); + } + }, + + render: function (container) { + var me = this, + width, + height, + el, + defs, + bgRect, + webkitRect; + if (!me.el) { + width = me.width || 0; + height = me.height || 0; + el = me.createSvgElement('svg', { + xmlns: "http:/" + "/www.w3.org/2000/svg", + version: 1.1, + width: width, + height: height + }); + defs = me.getDefs(); + + + + + + bgRect = me.createSvgElement("rect", { + width: "100%", + height: "100%", + fill: "#000", + stroke: "none", + opacity: 0 + }); + + if (Ext.isSafari3) { + + webkitRect = me.createSvgElement("rect", { + x: -10, + y: -10, + width: "110%", + height: "110%", + fill: "none", + stroke: "#000" + }); + } + el.appendChild(defs); + if (Ext.isSafari3) { + el.appendChild(webkitRect); + } + el.appendChild(bgRect); + container.appendChild(el); + me.el = Ext.get(el); + me.bgRect = Ext.get(bgRect); + if (Ext.isSafari3) { + me.webkitRect = Ext.get(webkitRect); + me.webkitRect.hide(); + } + me.el.on({ + scope: me, + mouseup: me.onMouseUp, + mousedown: me.onMouseDown, + mouseover: me.onMouseOver, + mouseout: me.onMouseOut, + mousemove: me.onMouseMove, + mouseenter: me.onMouseEnter, + mouseleave: me.onMouseLeave, + click: me.onClick, + dblclick: me.onDblClick + }); + } + me.renderAll(); + }, + + + onMouseEnter: function(e) { + if (this.el.parent().getRegion().contains(e.getPoint())) { + this.fireEvent('mouseenter', e); + } + }, + + + onMouseLeave: function(e) { + if (!this.el.parent().getRegion().contains(e.getPoint())) { + this.fireEvent('mouseleave', e); + } + }, + + processEvent: function(name, e) { + var target = e.getTarget(), + surface = this.surface, + sprite; + + this.fireEvent(name, e); + + if (target.nodeName == "tspan" && target.parentNode) { + target = target.parentNode; + } + sprite = this.items.get(target.id); + if (sprite) { + sprite.fireEvent(name, sprite, e); + } + }, + + + tuneText: function (sprite, attrs) { + var el = sprite.el.dom, + tspans = [], + height, tspan, text, i, ln, texts, factor, x; + + if (attrs.hasOwnProperty("text")) { + + + + + + text = sprite.tspans && Ext.Array.map(sprite.tspans, function(t) { return t.textContent; }).join(''); + + if (!sprite.tspans || attrs.text != text) { + tspans = this.setText(sprite, attrs.text); + sprite.tspans = tspans; + + } else { + tspans = sprite.tspans || []; + } + } + + if (tspans.length) { + height = this.getBBoxText(sprite).height; + x = sprite.el.dom.getAttribute("x"); + for (i = 0, ln = tspans.length; i < ln; i++) { + + + factor = (Ext.isFF3_0 || Ext.isFF3_5) ? 2 : 4; + tspans[i].setAttribute("x", x); + tspans[i].setAttribute("dy", i ? height * 1.2 : height / factor); + } + sprite.dirty = true; + } + }, + + setText: function(sprite, textString) { + var me = this, + el = sprite.el.dom, + tspans = [], + height, tspan, text, i, ln, texts; + + while (el.firstChild) { + el.removeChild(el.firstChild); + } + + texts = String(textString).split("\n"); + for (i = 0, ln = texts.length; i < ln; i++) { + text = texts[i]; + if (text) { + tspan = me.createSvgElement("tspan"); + tspan.appendChild(document.createTextNode(Ext.htmlDecode(text))); + el.appendChild(tspan); + tspans[i] = tspan; + } + } + return tspans; + }, + + renderAll: function() { + this.items.each(this.renderItem, this); + }, + + renderItem: function (sprite) { + if (!this.el) { + return; + } + if (!sprite.el) { + this.createSpriteElement(sprite); + } + if (sprite.zIndexDirty) { + this.applyZIndex(sprite); + } + if (sprite.dirty) { + this.applyAttrs(sprite); + if (sprite.dirtyTransform) { + this.applyTransformations(sprite); + } + } + }, + + redraw: function(sprite) { + sprite.dirty = sprite.zIndexDirty = true; + this.renderItem(sprite); + }, + + applyAttrs: function (sprite) { + var me = this, + el = sprite.el, + group = sprite.group, + sattr = sprite.attr, + parsers = me.parsers, + + + + gradientsMap = me.gradientsMap || {}, + safariFix = Ext.isSafari && !Ext.isStrict, + groups, i, ln, attrs, font, key, style, name, rect; + + if (group) { + groups = [].concat(group); + ln = groups.length; + for (i = 0; i < ln; i++) { + group = groups[i]; + me.getGroup(group).add(sprite); + } + delete sprite.group; + } + attrs = me.scrubAttrs(sprite) || {}; + + + sprite.bbox.plain = 0; + sprite.bbox.transform = 0; + if (sprite.type == "circle" || sprite.type == "ellipse") { + attrs.cx = attrs.cx || attrs.x; + attrs.cy = attrs.cy || attrs.y; + } + else if (sprite.type == "rect") { + attrs.rx = attrs.ry = attrs.r; + } + else if (sprite.type == "path" && attrs.d) { + attrs.d = Ext.draw.Draw.pathToString(Ext.draw.Draw.pathToAbsolute(attrs.d)); + } + sprite.dirtyPath = false; + + + + + + if (attrs['clip-rect']) { + me.setClip(sprite, attrs); + delete attrs['clip-rect']; + } + if (sprite.type == 'text' && attrs.font && sprite.dirtyFont) { + el.set({ style: "font: " + attrs.font}); + } + if (sprite.type == "image") { + el.dom.setAttributeNS(me.xlink, "href", attrs.src); + } + Ext.applyIf(attrs, me.minDefaults[sprite.type]); + + if (sprite.dirtyHidden) { + (sattr.hidden) ? me.hidePrim(sprite) : me.showPrim(sprite); + sprite.dirtyHidden = false; + } + for (key in attrs) { + if (attrs.hasOwnProperty(key) && attrs[key] != null) { + + + + + + if (safariFix && ('color|stroke|fill'.indexOf(key) > -1) && (attrs[key] in gradientsMap)) { + attrs[key] = gradientsMap[attrs[key]]; + } + + if (key == 'hidden' && sprite.type == 'text') { + continue; + } + if (key in parsers) { + el.dom.setAttribute(key, parsers[key](attrs[key], sprite, me)); + } else { + el.dom.setAttribute(key, attrs[key]); + } + } + } + + if (sprite.type == 'text') { + me.tuneText(sprite, attrs); + } + sprite.dirtyFont = false; + + + style = sattr.style; + if (style) { + el.setStyle(style); + } + + sprite.dirty = false; + + if (Ext.isSafari3) { + + me.webkitRect.show(); + setTimeout(function () { + me.webkitRect.hide(); + }); + } + }, + + setClip: function(sprite, params) { + var me = this, + rect = params["clip-rect"], + clipEl, clipPath; + if (rect) { + if (sprite.clip) { + sprite.clip.parentNode.parentNode.removeChild(sprite.clip.parentNode); + } + clipEl = me.createSvgElement('clipPath'); + clipPath = me.createSvgElement('rect'); + clipEl.id = Ext.id(null, 'ext-clip-'); + clipPath.setAttribute("x", rect.x); + clipPath.setAttribute("y", rect.y); + clipPath.setAttribute("width", rect.width); + clipPath.setAttribute("height", rect.height); + clipEl.appendChild(clipPath); + me.getDefs().appendChild(clipEl); + sprite.el.dom.setAttribute("clip-path", "url(#" + clipEl.id + ")"); + sprite.clip = clipPath; + } + + + + + + + }, + + + applyZIndex: function(sprite) { + var me = this, + items = me.items, + idx = items.indexOf(sprite), + el = sprite.el, + prevEl; + if (me.el.dom.childNodes[idx + 2] !== el.dom) { + if (idx > 0) { + + do { + prevEl = items.getAt(--idx).el; + } while (!prevEl && idx > 0); + } + el.insertAfter(prevEl || me.bgRect); + } + sprite.zIndexDirty = false; + }, + + createItem: function (config) { + var sprite = new Ext.draw.Sprite(config); + sprite.surface = this; + return sprite; + }, + + addGradient: function(gradient) { + gradient = Ext.draw.Draw.parseGradient(gradient); + var me = this, + ln = gradient.stops.length, + vector = gradient.vector, + + + + usePlain = Ext.isSafari && !Ext.isStrict, + gradientEl, stop, stopEl, i, gradientsMap; + + gradientsMap = me.gradientsMap || {}; + + if (!usePlain) { + if (gradient.type == "linear") { + gradientEl = me.createSvgElement("linearGradient"); + gradientEl.setAttribute("x1", vector[0]); + gradientEl.setAttribute("y1", vector[1]); + gradientEl.setAttribute("x2", vector[2]); + gradientEl.setAttribute("y2", vector[3]); + } + else { + gradientEl = me.createSvgElement("radialGradient"); + gradientEl.setAttribute("cx", gradient.centerX); + gradientEl.setAttribute("cy", gradient.centerY); + gradientEl.setAttribute("r", gradient.radius); + if (Ext.isNumber(gradient.focalX) && Ext.isNumber(gradient.focalY)) { + gradientEl.setAttribute("fx", gradient.focalX); + gradientEl.setAttribute("fy", gradient.focalY); + } + } + gradientEl.id = gradient.id; + me.getDefs().appendChild(gradientEl); + for (i = 0; i < ln; i++) { + stop = gradient.stops[i]; + stopEl = me.createSvgElement("stop"); + stopEl.setAttribute("offset", stop.offset + "%"); + stopEl.setAttribute("stop-color", stop.color); + stopEl.setAttribute("stop-opacity",stop.opacity); + gradientEl.appendChild(stopEl); + } + } else { + gradientsMap['url(#' + gradient.id + ')'] = gradient.stops[0].color; + } + me.gradientsMap = gradientsMap; + }, + + + hasCls: function(sprite, className) { + return className && (' ' + (sprite.el.dom.getAttribute('class') || '') + ' ').indexOf(' ' + className + ' ') != -1; + }, + + addCls: function(sprite, className) { + var el = sprite.el, + i, + len, + v, + cls = [], + curCls = el.getAttribute('class') || ''; + + if (!Ext.isArray(className)) { + if (typeof className == 'string' && !this.hasCls(sprite, className)) { + el.set({ 'class': curCls + ' ' + className }); + } + } + else { + for (i = 0, len = className.length; i < len; i++) { + v = className[i]; + if (typeof v == 'string' && (' ' + curCls + ' ').indexOf(' ' + v + ' ') == -1) { + cls.push(v); + } + } + if (cls.length) { + el.set({ 'class': ' ' + cls.join(' ') }); + } + } + }, + + removeCls: function(sprite, className) { + var me = this, + el = sprite.el, + curCls = el.getAttribute('class') || '', + i, idx, len, cls, elClasses; + if (!Ext.isArray(className)){ + className = [className]; + } + if (curCls) { + elClasses = curCls.replace(me.trimRe, ' ').split(me.spacesRe); + for (i = 0, len = className.length; i < len; i++) { + cls = className[i]; + if (typeof cls == 'string') { + cls = cls.replace(me.trimRe, ''); + idx = Ext.Array.indexOf(elClasses, cls); + if (idx != -1) { + Ext.Array.erase(elClasses, idx, 1); + } + } + } + el.set({ 'class': elClasses.join(' ') }); + } + }, + + destroy: function() { + var me = this; + + me.callParent(); + if (me.el) { + me.el.remove(); + } + if (me._defs) { + Ext.get(me._defs).destroy(); + } + if (me.bgRect) { + Ext.get(me.bgRect).destroy(); + } + if (me.webkitRect) { + Ext.get(me.webkitRect).destroy(); + } + delete me.el; + } +}); + + +Ext.define('Ext.draw.engine.SvgExporter', function(){ + var commaRe = /,/g, + fontRegex = /(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)\s('*.*'*)/, + rgbColorRe = /rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/g, + rgbaColorRe = /rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,([\d\.]+)\)/g, + surface, len, width, height, + + init = function(s){ + surface = s; + len = surface.length; + width = surface.width; + height = surface.height; + }, + spriteProcessor = { + path: function(sprite){ + + var attr = sprite.attr, + path = attr.path, + pathString = '', + props, p, pLen; + + if (Ext.isArray(path[0])) { + pLen = path.length; + for (p = 0; p < pLen; p++) { + pathString += path[p].join(' '); + } + } else if (Ext.isArray(path)) { + pathString = path.join(' '); + } else { + pathString = path.replace(commaRe,' '); + } + + props = toPropertyString({ + d: pathString, + fill: attr.fill || 'none', + stroke: attr.stroke, + 'fill-opacity': attr.opacity, + 'stroke-width': attr['stroke-width'], + 'stroke-opacity': attr['stroke-opacity'], + "z-index": attr.zIndex, + transform: sprite.matrix.toSvg() + }); + + return ''; + }, + text: function(sprite){ + + + + + var attr = sprite.attr, + match = fontRegex.exec(attr.font), + size = (match && match[1]) || "12", + + family = (match && match[3]) || 'Arial', + text = attr.text, + factor = (Ext.isFF3_0 || Ext.isFF3_5) ? 2 : 4, + tspanString = '', + props; + + sprite.getBBox(); + tspanString += ''; + tspanString += Ext.htmlEncode(text) + ''; + + + props = toPropertyString({ + x: attr.x, + y: attr.y, + 'font-size': size, + 'font-family': family, + 'font-weight': attr['font-weight'], + 'text-anchor': attr['text-anchor'], + + fill: attr.fill || '#000', + 'fill-opacity': attr.opacity, + transform: sprite.matrix.toSvg() + }); + + + + return '' + tspanString + ''; + }, + rect: function(sprite){ + + var attr = sprite.attr, + props = toPropertyString({ + x: attr.x, + y: attr.y, + rx: attr.rx, + ry: attr.ry, + width: attr.width, + height: attr.height, + fill: attr.fill || 'none', + 'fill-opacity': attr.opacity, + stroke: attr.stroke, + 'stroke-opacity': attr['stroke-opacity'], + 'stroke-width':attr['stroke-width'], + transform: sprite.matrix && sprite.matrix.toSvg() + }); + + return ''; + }, + circle: function(sprite){ + + var attr = sprite.attr, + props = toPropertyString({ + cx: attr.x, + cy: attr.y, + r: attr.radius, + fill: attr.translation.fill || attr.fill || 'none', + 'fill-opacity': attr.opacity, + stroke: attr.stroke, + 'stroke-opacity': attr['stroke-opacity'], + 'stroke-width':attr['stroke-width'], + transform: sprite.matrix.toSvg() + }); + + return ''; + }, + image: function(sprite){ + + var attr = sprite.attr, + props = toPropertyString({ + x: attr.x - (attr.width/2 >> 0), + y: attr.y - (attr.height/2 >> 0), + width: attr.width, + height: attr.height, + 'xlink:href': attr.src, + transform: sprite.matrix.toSvg() + }); + + return ''; + } + }, + svgHeader = function(){ + var svg = ''; + svg += ''; + return svg; + }, + svgContent = function(){ + var svg = '', + defs = '', item, itemsLen, items, gradient, + getSvgString, colorstops, stop, + coll, keys, colls, k, kLen, key, collI, i, j, stopsLen, sortedItems, za, zb; + + items = surface.items.items; + itemsLen = items.length; + + + getSvgString = function(node){ + + var childs = node.childNodes, + childLength = childs.length, + i = 0, + attrLength, + j, + svgString = '', child, attr, tagName, attrItem; + + for(; i < childLength; i++){ + child = childs[i]; + attr = child.attributes; + tagName = child.tagName; + + svgString += '<' +tagName; + + for(j = 0, attrLength = attr.length; j < attrLength; j++){ + attrItem = attr.item(j); + svgString += ' '+attrItem.name+'="'+attrItem.value+'"'; + } + + svgString += '>'; + + if(child.childNodes.length > 0){ + svgString += getSvgString(child); + } + + svgString += ''; + + } + return svgString; + }; + + + if(surface.getDefs){ + defs = getSvgString(surface.getDefs()); + }else{ + + coll = surface.gradientsColl; + if (coll) { + keys = coll.keys; + colls = coll.items; + k = 0; + kLen = keys.length; + } + + for (; k < kLen; k++) { + key = keys[k]; + collI = colls[k]; + + gradient = surface.gradientsColl.getByKey(key); + defs += ''; + + var color = gradient.colors.replace(rgbColorRe, 'rgb($1|$2|$3)'); + color = color.replace(rgbaColorRe, 'rgba($1|$2|$3|$4)') + colorstops = color.split(','); + for(i=0, stopsLen = colorstops.length; i < stopsLen; i++){ + stop = colorstops[i].split(' '); + color = Ext.draw.Color.fromString(stop[1].replace(/\|/g,',')); + defs += ''; + } + defs += ''; + } + } + + svg += '' + defs + ''; + + + svg += spriteProcessor.rect({ + attr: { + width: '100%', + height: '100%', + fill: '#fff', + stroke: 'none', + opacity: '0' + } + }); + + + sortedItems = new Array(itemsLen); + for(i = 0; i < itemsLen; i++){ + sortedItems[i] = i; + } + sortedItems.sort(function (a, b) { + za = items[a].attr.zIndex || 0; + zb = items[b].attr.zIndex || 0; + if (za == zb) { + return a - b; + } + return za - zb; + }); + + for(i = 0; i < itemsLen; i++){ + item = items[sortedItems[i]]; + if(!item.attr.hidden){ + svg += spriteProcessor[item.type](item); + } + } + + svg += ''; + + return svg; + }, + toPropertyString = function(obj){ + var propString = '', + key; + + for(key in obj){ + + if(obj.hasOwnProperty(key) && obj[key] != null){ + propString += key +'="'+ obj[key]+'" '; + } + + } + + return propString; + }; + + return { + singleton: true, + + + generate: function(surface, config){ + config = config || {}; + init(surface); + return svgHeader() + svgContent(); + } + }; +}); + + +Ext.define('Ext.draw.engine.Vml', { + + + + extend: Ext.draw.Surface , + + + + + + engine: 'Vml', + + map: {M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x"}, + bitesRe: /([clmz]),?([^clmz]*)/gi, + valRe: /-?[^,\s\-]+/g, + fillUrlRe: /^url\(\s*['"]?([^\)]+?)['"]?\s*\)$/i, + pathlike: /^(path|rect)$/, + NonVmlPathRe: /[ahqstv]/ig, // Non-VML Pathing ops + partialPathRe: /[clmz]/g, + fontFamilyRe: /^['"]+|['"]+$/g, + baseVmlCls: Ext.baseCSSPrefix + 'vml-base', + vmlGroupCls: Ext.baseCSSPrefix + 'vml-group', + spriteCls: Ext.baseCSSPrefix + 'vml-sprite', + measureSpanCls: Ext.baseCSSPrefix + 'vml-measure-span', + zoom: 21600, + coordsize: 1000, + coordorigin: '0 0', + zIndexShift: 0, + // VML uses CSS z-index and therefore doesn't need sprites to be kept in zIndex order + orderSpritesByZIndex: false, + + + + path2vml: function (path) { + var me = this, + nonVML = me.NonVmlPathRe, + map = me.map, + val = me.valRe, + zoom = me.zoom, + bites = me.bitesRe, + command = Ext.Function.bind(Ext.draw.Draw.pathToAbsolute, Ext.draw.Draw), + res, pa, p, r, i, ii, j, jj; + if (String(path).match(nonVML)) { + command = Ext.Function.bind(Ext.draw.Draw.path2curve, Ext.draw.Draw); + } else if (!String(path).match(me.partialPathRe)) { + res = String(path).replace(bites, function (all, command, args) { + var vals = [], + isMove = command.toLowerCase() == "m", + res = map[command]; + args.replace(val, function (value) { + if (isMove && vals.length === 2) { + res += vals + map[command == "m" ? "l" : "L"]; + vals = []; + } + vals.push(Math.round(value * zoom)); + }); + return res + vals; + }); + return res; + } + pa = command(path); + res = []; + for (i = 0, ii = pa.length; i < ii; i++) { + p = pa[i]; + r = pa[i][0].toLowerCase(); + if (r == "z") { + r = "x"; + } + for (j = 1, jj = p.length; j < jj; j++) { + r += Math.round(p[j] * me.zoom) + (j != jj - 1 ? "," : ""); + } + res.push(r); + } + return res.join(" "); + }, + + + translateAttrs: { + radius: "r", + radiusX: "rx", + radiusY: "ry", + lineWidth: "stroke-width", + fillOpacity: "fill-opacity", + strokeOpacity: "stroke-opacity", + strokeLinejoin: "stroke-linejoin" + }, + + + minDefaults: { + circle: { + fill: "none", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + ellipse: { + cx: 0, + cy: 0, + rx: 0, + ry: 0, + fill: "none", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + rect: { + x: 0, + y: 0, + width: 0, + height: 0, + rx: 0, + ry: 0, + fill: "none", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + text: { + x: 0, + y: 0, + "text-anchor": "start", + font: '10px "Arial"', + fill: "#000", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + path: { + d: "M0,0", + fill: "none", + stroke: null, + "stroke-width": null, + opacity: null, + "fill-opacity": null, + "stroke-opacity": null + }, + image: { + x: 0, + y: 0, + width: 0, + height: 0, + preserveAspectRatio: "none", + opacity: null + } + }, + + + onMouseEnter: function (e) { + this.fireEvent("mouseenter", e); + }, + + + onMouseLeave: function (e) { + this.fireEvent("mouseleave", e); + }, + + + processEvent: function (name, e) { + var target = e.getTarget(), + surface = this.surface, + sprite; + this.fireEvent(name, e); + sprite = this.items.get(target.id); + if (sprite) { + sprite.fireEvent(name, sprite, e); + } + }, + + + createSpriteElement: function (sprite) { + var me = this, + attr = sprite.attr, + type = sprite.type, + zoom = me.zoom, + vml = sprite.vml || (sprite.vml = {}), + round = Math.round, + el = (type === 'image') ? me.createNode('image') : me.createNode('shape'), + path, skew, textPath; + + el.coordsize = zoom + ' ' + zoom; + el.coordorigin = attr.coordorigin || "0 0"; + Ext.get(el).addCls(me.spriteCls); + if (type == "text") { + vml.path = path = me.createNode("path"); + path.textpathok = true; + vml.textpath = textPath = me.createNode("textpath"); + textPath.on = true; + el.appendChild(textPath); + el.appendChild(path); + } + el.id = sprite.id; + sprite.el = Ext.get(el); + sprite.el.setStyle('zIndex', -me.zIndexShift); + me.el.appendChild(el); + if (type !== 'image') { + skew = me.createNode("skew"); + skew.on = true; + el.appendChild(skew); + sprite.skew = skew; + } + sprite.matrix = new Ext.draw.Matrix(); + sprite.bbox = { + plain: null, + transform: null + }; + + this.applyAttrs(sprite); + this.applyTransformations(sprite); + sprite.fireEvent("render", sprite); + return sprite.el; + }, + + getBBoxText: function (sprite) { + var vml = sprite.vml; + return { + x: vml.X + (vml.bbx || 0) - vml.W / 2, + y: vml.Y - vml.H / 2, + width: vml.W, + height: vml.H + }; + }, + + applyAttrs: function (sprite) { + var me = this, + vml = sprite.vml, + group = sprite.group, + spriteAttr = sprite.attr, + el = sprite.el, + dom = el.dom, + style, name, groups, i, ln, scrubbedAttrs, font, key, + cx, cy, rx, ry; + + if (group) { + groups = [].concat(group); + ln = groups.length; + for (i = 0; i < ln; i++) { + group = groups[i]; + me.getGroup(group).add(sprite); + } + delete sprite.group; + } + scrubbedAttrs = me.scrubAttrs(sprite) || {}; + + if (sprite.zIndexDirty) { + me.setZIndex(sprite); + } + + + Ext.applyIf(scrubbedAttrs, me.minDefaults[sprite.type]); + + if (sprite.type == 'image') { + Ext.apply(sprite.attr, { + x: scrubbedAttrs.x, + y: scrubbedAttrs.y, + width: scrubbedAttrs.width, + height: scrubbedAttrs.height + }); + el.setStyle({ + width: scrubbedAttrs.width + 'px', + height: scrubbedAttrs.height + 'px' + }); + dom.src = scrubbedAttrs.src; + } + + if (dom.href) { + dom.href = scrubbedAttrs.href; + } + if (dom.title) { + dom.title = scrubbedAttrs.title; + } + if (dom.target) { + dom.target = scrubbedAttrs.target; + } + if (dom.cursor) { + dom.cursor = scrubbedAttrs.cursor; + } + + + if (sprite.dirtyHidden) { + (scrubbedAttrs.hidden) ? me.hidePrim(sprite) : me.showPrim(sprite); + sprite.dirtyHidden = false; + } + + + if (sprite.dirtyPath) { + if (sprite.type == "circle" || sprite.type == "ellipse") { + cx = scrubbedAttrs.x; + cy = scrubbedAttrs.y; + rx = scrubbedAttrs.rx || scrubbedAttrs.r || 0; + ry = scrubbedAttrs.ry || scrubbedAttrs.r || 0; + dom.path = Ext.String.format("ar{0},{1},{2},{3},{4},{1},{4},{1}", + Math.round((cx - rx) * me.zoom), + Math.round((cy - ry) * me.zoom), + Math.round((cx + rx) * me.zoom), + Math.round((cy + ry) * me.zoom), + Math.round(cx * me.zoom)); + sprite.dirtyPath = false; + } + else if (sprite.type !== "text" && sprite.type !== 'image') { + sprite.attr.path = scrubbedAttrs.path = me.setPaths(sprite, scrubbedAttrs) || scrubbedAttrs.path; + dom.path = me.path2vml(scrubbedAttrs.path); + sprite.dirtyPath = false; + } + } + + + if ("clip-rect" in scrubbedAttrs) { + me.setClip(sprite, scrubbedAttrs); + } + + + if (sprite.type == "text") { + me.setTextAttributes(sprite, scrubbedAttrs); + } + + + if (scrubbedAttrs.opacity || scrubbedAttrs['stroke-opacity'] || scrubbedAttrs.fill) { + me.setFill(sprite, scrubbedAttrs); + } + + + if (scrubbedAttrs.stroke || scrubbedAttrs['stroke-opacity'] || scrubbedAttrs.fill) { + me.setStroke(sprite, scrubbedAttrs); + } + + + style = spriteAttr.style; + if (style) { + el.setStyle(style); + } + + sprite.dirty = false; + }, + + setZIndex: function (sprite) { + var me = this, + zIndex = sprite.attr.zIndex, + shift = me.zIndexShift, + items, iLen, item, i; + + if (zIndex < shift) { + + + items = me.items.items; + iLen = items.length; + + for (i = 0; i < iLen; i++) { + if ((zIndex = items[i].attr.zIndex) && zIndex < shift) { + shift = zIndex; + } + } + + me.zIndexShift = shift; + for (i = 0; i < iLen; i++) { + item = items[i]; + if (item.el) { + item.el.setStyle('zIndex', item.attr.zIndex - shift); + } + item.zIndexDirty = false; + } + } else if (sprite.el) { + sprite.el.setStyle('zIndex', zIndex - shift); + sprite.zIndexDirty = false; + } + }, + + + setPaths: function (sprite, params) { + var spriteAttr = sprite.attr, thickness = sprite.attr['stroke-width'] || 1; + + sprite.bbox.plain = null; + sprite.bbox.transform = null; + if (sprite.type == 'circle') { + spriteAttr.rx = spriteAttr.ry = params.r; + return Ext.draw.Draw.ellipsePath(sprite); + } + else if (sprite.type == 'ellipse') { + spriteAttr.rx = params.rx; + spriteAttr.ry = params.ry; + return Ext.draw.Draw.ellipsePath(sprite); + } + else if (sprite.type == 'rect') { + spriteAttr.rx = spriteAttr.ry = params.r; + return Ext.draw.Draw.rectPath(sprite); + } + else if (sprite.type == 'path' && spriteAttr.path) { + return Ext.draw.Draw.pathToAbsolute(spriteAttr.path); + } + return false; + }, + + setFill: function (sprite, params) { + var me = this, + el = sprite.el.dom, + fillEl = el.fill, + newfill = false, + opacity, gradient, fillUrl, rotation, angle; + + if (!fillEl) { + + fillEl = el.fill = me.createNode("fill"); + newfill = true; + } + if (Ext.isArray(params.fill)) { + params.fill = params.fill[0]; + } + if (params.fill == "none") { + fillEl.on = false; + } + else { + if (typeof params.opacity == "number") { + fillEl.opacity = params.opacity; + } + if (typeof params["fill-opacity"] == "number") { + fillEl.opacity = params["fill-opacity"]; + } + fillEl.on = true; + if (typeof params.fill == "string") { + fillUrl = params.fill.match(me.fillUrlRe); + if (fillUrl) { + fillUrl = fillUrl[1]; + + if (fillUrl.charAt(0) == "#") { + gradient = me.gradientsColl.getByKey(fillUrl.substring(1)); + } + if (gradient) { + + rotation = params.rotation; + angle = -(gradient.angle + 270 + (rotation ? rotation.degrees : 0)) % 360; + + if (angle === 0) { + angle = 180; + } + fillEl.angle = angle; + fillEl.type = "gradient"; + fillEl.method = "sigma"; + if (fillEl.colors) { + fillEl.colors.value = gradient.colors; + } else { + fillEl.colors = gradient.colors; + } + } + + else { + fillEl.src = fillUrl; + fillEl.type = "tile"; + } + } + else { + fillEl.color = Ext.draw.Color.toHex(params.fill); + fillEl.src = ""; + fillEl.type = "solid"; + } + } + } + if (newfill) { + el.appendChild(fillEl); + } + }, + + setStroke: function (sprite, params) { + var me = this, + el = sprite.el.dom, + strokeEl = sprite.strokeEl, + newStroke = false, + width, opacity; + + if (!strokeEl) { + strokeEl = sprite.strokeEl = me.createNode("stroke"); + newStroke = true; + } + if (Ext.isArray(params.stroke)) { + params.stroke = params.stroke[0]; + } + if (!params.stroke || params.stroke == "none" || params.stroke == 0 || params["stroke-width"] == 0) { + strokeEl.on = false; + } + else { + strokeEl.on = true; + if (params.stroke && !params.stroke.match(me.fillUrlRe)) { + + strokeEl.color = Ext.draw.Color.toHex(params.stroke); + } + strokeEl.dashstyle = params["stroke-dasharray"] ? "dash" : "solid"; + strokeEl.joinstyle = params["stroke-linejoin"]; + strokeEl.endcap = params["stroke-linecap"] || "round"; + strokeEl.miterlimit = params["stroke-miterlimit"] || 8; + width = parseFloat(params["stroke-width"] || 1) * 0.75; + opacity = params["stroke-opacity"] || 1; + + if (Ext.isNumber(width) && width < 1) { + strokeEl.weight = 1; + strokeEl.opacity = opacity * width; + } + else { + strokeEl.weight = width; + strokeEl.opacity = opacity; + } + } + if (newStroke) { + el.appendChild(strokeEl); + } + }, + + setClip: function (sprite, params) { + var me = this, + el = sprite.el, + clipEl = sprite.clipEl, + rect = String(params["clip-rect"]).split(me.separatorRe); + if (!clipEl) { + clipEl = sprite.clipEl = me.el.insertFirst(Ext.getDoc().dom.createElement("div")); + clipEl.addCls(Ext.baseCSSPrefix + 'vml-sprite'); + } + if (rect.length == 4) { + rect[2] = +rect[2] + (+rect[0]); + rect[3] = +rect[3] + (+rect[1]); + clipEl.setStyle("clip", Ext.String.format("rect({1}px {2}px {3}px {0}px)", rect[0], rect[1], rect[2], rect[3])); + clipEl.setSize(me.el.width, me.el.height); + } + else { + clipEl.setStyle("clip", ""); + } + }, + + setTextAttributes: function (sprite, params) { + var me = this, + vml = sprite.vml, + textStyle = vml.textpath.style, + spanCacheStyle = me.span.style, + zoom = me.zoom, + round = Math.round, + fontObj = { + fontSize: "font-size", + fontWeight: "font-weight", + fontStyle: "font-style" + }, + fontProp, + paramProp; + if (sprite.dirtyFont) { + if (params.font) { + textStyle.font = spanCacheStyle.font = params.font; + } + if (params["font-family"]) { + textStyle.fontFamily = '"' + params["font-family"].split(",")[0].replace(me.fontFamilyRe, "") + '"'; + spanCacheStyle.fontFamily = params["font-family"]; + } + + for (fontProp in fontObj) { + paramProp = params[fontObj[fontProp]]; + if (paramProp) { + textStyle[fontProp] = spanCacheStyle[fontProp] = paramProp; + } + } + + me.setText(sprite, params.text); + + if (vml.textpath.string) { + me.span.innerHTML = String(vml.textpath.string).replace(/"); + } + vml.W = me.span.offsetWidth; + vml.H = me.span.offsetHeight + 2; + + + if (params["text-anchor"] == "middle") { + textStyle["v-text-align"] = "center"; + } + else if (params["text-anchor"] == "end") { + textStyle["v-text-align"] = "right"; + vml.bbx = -Math.round(vml.W / 2); + } + else { + textStyle["v-text-align"] = "left"; + vml.bbx = Math.round(vml.W / 2); + } + } + vml.X = params.x; + vml.Y = params.y; + vml.path.v = Ext.String.format("m{0},{1}l{2},{1}", Math.round(vml.X * zoom), Math.round(vml.Y * zoom), Math.round(vml.X * zoom) + 1); + + sprite.bbox.plain = null; + sprite.bbox.transform = null; + sprite.dirtyFont = false; + }, + + setText: function (sprite, text) { + sprite.vml.textpath.string = Ext.htmlDecode(text); + }, + + hide: function () { + this.el.hide(); + }, + + show: function () { + this.el.show(); + }, + + hidePrim: function (sprite) { + sprite.el.addCls(Ext.baseCSSPrefix + 'hide-visibility'); + }, + + showPrim: function (sprite) { + sprite.el.removeCls(Ext.baseCSSPrefix + 'hide-visibility'); + }, + + setSize: function (width, height) { + var me = this; + width = width || me.width; + height = height || me.height; + me.width = width; + me.height = height; + + if (me.el) { + + if (width != undefined) { + me.el.setWidth(width); + } + if (height != undefined) { + me.el.setHeight(height); + } + } + + me.callParent(arguments); + }, + + + applyViewBox: function () { + var me = this, + viewBox = me.viewBox, + width = me.width, + height = me.height, + items, + iLen, + i; + + me.callParent(); + + if (viewBox && (width || height)) { + items = me.items.items; + iLen = items.length; + + for (i = 0; i < iLen; i++) { + me.applyTransformations(items[i]); + } + } + }, + + onAdd: function (item) { + this.callParent(arguments); + if (this.el) { + this.renderItem(item); + } + }, + + onRemove: function (sprite) { + if (sprite.el) { + sprite.el.remove(); + delete sprite.el; + } + this.callParent(arguments); + }, + + render: function (container) { + var me = this, + doc = Ext.getDoc().dom, + el; + + if (!me.createNode) { + try { + if (!doc.namespaces.rvml) { + doc.namespaces.add("rvml", "urn:schemas-microsoft-com:vml"); + } + me.createNode = function (tagName) { + return doc.createElement("'); + }; + } catch (e) { + me.createNode = function (tagName) { + return doc.createElement("<" + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">'); + }; + } + } + + if (!me.el) { + el = doc.createElement("div"); + me.el = Ext.get(el); + me.el.addCls(me.baseVmlCls); + + + me.span = doc.createElement("span"); + Ext.get(me.span).addCls(me.measureSpanCls); + el.appendChild(me.span); + me.el.setSize(me.width || 0, me.height || 0); + container.appendChild(el); + me.el.on({ + scope: me, + mouseup: me.onMouseUp, + mousedown: me.onMouseDown, + mouseover: me.onMouseOver, + mouseout: me.onMouseOut, + mousemove: me.onMouseMove, + mouseenter: me.onMouseEnter, + mouseleave: me.onMouseLeave, + click: me.onClick, + dblclick: me.onDblClick + }); + } + me.renderAll(); + }, + + renderAll: function () { + this.items.each(this.renderItem, this); + }, + + redraw: function (sprite) { + sprite.dirty = true; + this.renderItem(sprite); + }, + + renderItem: function (sprite) { + + if (!this.el) { + return; + } + + + if (!sprite.el) { + this.createSpriteElement(sprite); + } + + if (sprite.dirty) { + this.applyAttrs(sprite); + if (sprite.dirtyTransform) { + this.applyTransformations(sprite); + } + } + }, + + rotationCompensation: function (deg, dx, dy) { + var matrix = new Ext.draw.Matrix(); + matrix.rotate(-deg, 0.5, 0.5); + return { + x: matrix.x(dx, dy), + y: matrix.y(dx, dy) + }; + }, + + transform: function (sprite, matrixOnly) { + var me = this, + bbox = me.getBBox(sprite, true), + cx = bbox.x + bbox.width * 0.5, + cy = bbox.y + bbox.height * 0.5, + matrix = new Ext.draw.Matrix(), + transforms = sprite.transformations, + transformsLength = transforms.length, + i = 0, + deltaDegrees = 0, + deltaScaleX = 1, + deltaScaleY = 1, + flip = "", + el = sprite.el, + dom = el.dom, + domStyle = dom.style, + zoom = me.zoom, + skew = sprite.skew, + shift = me.viewBoxShift, + deltaX, deltaY, transform, type, compensate, y, fill, newAngle, zoomScaleX, zoomScaleY, newOrigin, offset; + + + for (; i < transformsLength; i++) { + transform = transforms[i]; + type = transform.type; + if (type == "translate") { + matrix.translate(transform.x, transform.y); + } + else if (type == "rotate") { + matrix.rotate(transform.degrees, transform.x, transform.y); + deltaDegrees += transform.degrees; + } + else if (type == "scale") { + matrix.scale(transform.x, transform.y, transform.centerX, transform.centerY); + deltaScaleX *= transform.x; + deltaScaleY *= transform.y; + } + } + + sprite.matrix = matrix.clone(); + + if (matrixOnly) { + return; + } + + if (shift) { + matrix.prepend(shift.scale, 0, 0, shift.scale, shift.dx * shift.scale, shift.dy * shift.scale); + } + + + if (sprite.type != "image" && skew) { + skew.origin = "0,0"; + + skew.matrix = matrix.toString(); + + + + offset = matrix.offset(); + if (offset[0] > 32767) { + offset[0] = 32767; + } else if (offset[0] < -32768) { + offset[0] = -32768; + } + if (offset[1] > 32767) { + offset[1] = 32767; + } else if (offset[1] < -32768) { + offset[1] = -32768; + } + skew.offset = offset; + } + else { + domStyle.filter = matrix.toFilter(); + domStyle.left = Math.min( + matrix.x(bbox.x, bbox.y), + matrix.x(bbox.x + bbox.width, bbox.y), + matrix.x(bbox.x, bbox.y + bbox.height), + matrix.x(bbox.x + bbox.width, bbox.y + bbox.height)) + 'px'; + domStyle.top = Math.min( + matrix.y(bbox.x, bbox.y), + matrix.y(bbox.x + bbox.width, bbox.y), + matrix.y(bbox.x, bbox.y + bbox.height), + matrix.y(bbox.x + bbox.width, bbox.y + bbox.height)) + 'px'; + } + }, + + createItem: function (config) { + return Ext.create('Ext.draw.Sprite', config); + }, + + getRegion: function () { + return this.el.getRegion(); + }, + + addCls: function (sprite, className) { + if (sprite && sprite.el) { + sprite.el.addCls(className); + } + }, + + removeCls: function (sprite, className) { + if (sprite && sprite.el) { + sprite.el.removeCls(className); + } + }, + + + addGradient: function (gradient) { + var gradients = this.gradientsColl || (this.gradientsColl = Ext.create('Ext.util.MixedCollection')), + colors = [], + stops = Ext.create('Ext.util.MixedCollection'), + keys, + items, + iLen, + key, + item, + i; + + + stops.addAll(gradient.stops); + stops.sortByKey("ASC", function (a, b) { + a = parseInt(a, 10); + b = parseInt(b, 10); + return a > b ? 1 : (a < b ? -1 : 0); + }); + + keys = stops.keys; + items = stops.items; + iLen = keys.length; + + for (i = 0; i < iLen; i++) { + key = keys[i]; + item = items[i]; + colors.push(key + '% ' + item.color); + } + + gradients.add(gradient.id, { + colors: colors.join(","), + angle: gradient.angle + }); + }, + + destroy: function () { + var me = this; + + me.callParent(arguments); + if (me.el) { + me.el.remove(); + } + delete me.el; + } +}); + + + + + + + + + + + + + + + +Ext.define('Ext.flash.Component', { + extend: Ext.Component , + alternateClassName: 'Ext.FlashComponent', + alias: 'widget.flash', + + + flashVersion : '9.0.115', + + + backgroundColor: '#ffffff', + + + wmode: 'opaque', + + + + + + + + + + + swfWidth: '100%', + + + swfHeight: '100%', + + + expressInstall: false, + + + + + renderTpl: ['
    '], + + initComponent: function() { + + this.callParent(); + this.addEvents( + + 'success', + + + 'failure' + ); + }, + + beforeRender: function(){ + this.callParent(); + + Ext.applyIf(this.renderData, { + swfId: this.getSwfId() + }); + }, + + afterRender: function() { + var me = this, + flashParams = Ext.apply({}, me.flashParams), + flashVars = Ext.apply({}, me.flashVars); + + me.callParent(); + + flashParams = Ext.apply({ + allowScriptAccess: 'always', + bgcolor: me.backgroundColor, + wmode: me.wmode + }, flashParams); + + flashVars = Ext.apply({ + allowedDomain: document.location.hostname + }, flashVars); + + new swfobject.embedSWF( + me.url, + me.getSwfId(), + me.swfWidth, + me.swfHeight, + me.flashVersion, + me.expressInstall ? me.statics.EXPRESS_INSTALL_URL : undefined, + flashVars, + flashParams, + me.flashAttributes, + Ext.bind(me.swfCallback, me) + ); + }, + + + swfCallback: function(e) { + var me = this; + if (e.success) { + me.swf = Ext.get(e.ref); + me.onSuccess(); + me.fireEvent('success', me); + } else { + me.onFailure(); + me.fireEvent('failure', me); + } + }, + + + getSwfId: function() { + return this.swfId || (this.swfId = "extswf" + this.getAutoId()); + }, + + onSuccess: function() { + + + this.swf.setStyle('visibility', 'inherit'); + }, + + onFailure: Ext.emptyFn, + + beforeDestroy: function() { + var me = this, + swf = me.swf; + if (swf) { + swfobject.removeSWF(me.getSwfId()); + Ext.destroy(swf); + delete me.swf; + } + me.callParent(); + }, + + statics: { + + EXPRESS_INSTALL_URL: 'http:/' + '/swfobject.googlecode.com/svn/trunk/swfobject/expressInstall.swf' + } +}); + + +Ext.define('Ext.form.action.Action', { + alternateClassName: 'Ext.form.Action', + + + + + + + + + + + + + + + + + + + + + + + + + + + submitEmptyText : true, + + + + + + + + + + + constructor: function(config) { + if (config) { + Ext.apply(this, config); + } + + + var params = config.params; + if (Ext.isString(params)) { + this.params = Ext.Object.fromQueryString(params); + } + }, + + + run: Ext.emptyFn, + + + + + + + onFailure : function(response){ + this.response = response; + this.failureType = Ext.form.action.Action.CONNECT_FAILURE; + this.form.afterAction(this, false); + }, + + + processResponse : function(response){ + this.response = response; + if (!response.responseText && !response.responseXML) { + return true; + } + return (this.result = this.handleResponse(response)); + }, + + + getUrl: function() { + return this.url || this.form.url; + }, + + + getMethod: function() { + return (this.method || this.form.method || 'POST').toUpperCase(); + }, + + + getParams: function() { + return Ext.apply({}, this.params, this.form.baseParams); + }, + + + createCallback: function() { + var me = this, + undef, + form = me.form; + return { + success: me.onSuccess, + failure: me.onFailure, + scope: me, + timeout: (this.timeout * 1000) || (form.timeout * 1000), + upload: form.fileUpload ? me.onSuccess : undef + }; + }, + + statics: { + + CLIENT_INVALID: 'client', + + + SERVER_INVALID: 'server', + + + CONNECT_FAILURE: 'connect', + + + LOAD_FAILURE: 'load' + + + } +}); + + +Ext.define('Ext.form.action.Load', { + extend: Ext.form.action.Action , + + alternateClassName: 'Ext.form.Action.Load', + alias: 'formaction.load', + + type: 'load', + + + run: function() { + Ext.Ajax.request(Ext.apply( + this.createCallback(), + { + method: this.getMethod(), + url: this.getUrl(), + headers: this.headers, + params: this.getParams() + } + )); + }, + + + onSuccess: function(response){ + var result = this.processResponse(response), + form = this.form; + if (result === true || !result.success || !result.data) { + this.failureType = Ext.form.action.Action.LOAD_FAILURE; + form.afterAction(this, false); + return; + } + form.clearInvalid(); + form.setValues(result.data); + form.afterAction(this, true); + }, + + + handleResponse: function(response) { + var reader = this.form.reader, + rs, data; + if (reader) { + rs = reader.read(response); + data = rs.records && rs.records[0] ? rs.records[0].data : null; + return { + success : rs.success, + data : data + }; + } + return Ext.decode(response.responseText); + } +}); + + + +Ext.define('Ext.form.action.Submit', { + extend: Ext.form.action.Action , + alternateClassName: 'Ext.form.Action.Submit', + alias: 'formaction.submit', + + type: 'submit', + + + + + run : function(){ + var me = this, + form = me.form; + + if (me.clientValidation === false || form.isValid()) { + me.doSubmit(); + } else { + + me.failureType = Ext.form.action.Action.CLIENT_INVALID; + form.afterAction(me, false); + } + }, + + + doSubmit: function() { + var me = this, + ajaxOptions = Ext.apply(me.createCallback(), { + url: me.getUrl(), + method: me.getMethod(), + headers: me.headers + }), + form = me.form, + jsonSubmit = me.jsonSubmit || form.jsonSubmit, + paramsProp = jsonSubmit ? 'jsonData' : 'params', + formEl, formInfo; + + + + if (form.hasUpload()) { + formInfo = me.buildForm(); + ajaxOptions.form = formInfo.formEl; + ajaxOptions.isUpload = true; + } else { + ajaxOptions[paramsProp] = me.getParams(jsonSubmit); + } + + Ext.Ajax.request(ajaxOptions); + if (formInfo) { + me.cleanup(formInfo); + } + }, + + cleanup: function(formInfo) { + var formEl = formInfo.formEl, + uploadEls = formInfo.uploadEls, + uploadFields = formInfo.uploadFields, + len = uploadFields.length, + i, field; + + for (i = 0; i < len; ++i) { + field = uploadFields[i]; + if (!field.clearOnSubmit) { + field.restoreInput(uploadEls[i]); + } + } + + if (formEl) { + Ext.removeNode(formEl); + } + }, + + + getParams: function(useModelValues) { + var falseVal = false, + configParams = this.callParent(), + fieldParams = this.form.getValues(falseVal, falseVal, this.submitEmptyText !== falseVal, useModelValues); + return Ext.apply({}, fieldParams, configParams); + }, + + + buildForm: function() { + var me = this, + fieldsSpec = [], + formSpec, + formEl, + basicForm = me.form, + params = me.getParams(), + uploadFields = [], + uploadEls = [], + fields = basicForm.getFields().items, + i, + len = fields.length, + field, key, value, v, vLen, + el; + + for (i = 0; i < len; ++i) { + field = fields[i]; + + + if (field.rendered && field.isFileUpload()) { + uploadFields.push(field); + } + } + + for (key in params) { + if (params.hasOwnProperty(key)) { + value = params[key]; + + if (Ext.isArray(value)) { + vLen = value.length; + for (v = 0; v < vLen; v++) { + fieldsSpec.push(me.getFieldConfig(key, value[v])); + } + } else { + fieldsSpec.push(me.getFieldConfig(key, value)); + } + } + } + + formSpec = { + tag: 'form', + action: me.getUrl(), + method: me.getMethod(), + target: me.target || '_self', + style: 'display:none', + cn: fieldsSpec + }; + + + if (uploadFields.length) { + formSpec.encoding = formSpec.enctype = 'multipart/form-data'; + } + + + formEl = Ext.DomHelper.append(Ext.getBody(), formSpec); + + + + + len = uploadFields.length; + + for (i = 0; i < len; ++i) { + el = uploadFields[i].extractFileInput(); + formEl.appendChild(el); + uploadEls.push(el); + } + + return { + formEl: formEl, + uploadFields: uploadFields, + uploadEls: uploadEls + }; + }, + + getFieldConfig: function(name, value) { + return { + tag: 'input', + type: 'hidden', + name: name, + value: Ext.String.htmlEncode(value) + }; + }, + + + onSuccess: function(response) { + var form = this.form, + success = true, + result = this.processResponse(response); + if (result !== true && !result.success) { + if (result.errors) { + form.markInvalid(result.errors); + } + this.failureType = Ext.form.action.Action.SERVER_INVALID; + success = false; + } + form.afterAction(this, success); + }, + + + handleResponse: function(response) { + var form = this.form, + errorReader = form.errorReader, + rs, errors, i, len, records; + if (errorReader) { + rs = errorReader.read(response); + records = rs.records; + errors = []; + if (records) { + for(i = 0, len = records.length; i < len; i++) { + errors[i] = records[i].data; + } + } + if (errors.length < 1) { + errors = null; + } + return { + success : rs.success, + errors : errors + }; + } + return Ext.decode(response.responseText); + } +}); + + +Ext.define('Ext.util.ComponentDragger', { + extend: Ext.dd.DragTracker , + + + + + + + + autoStart: 500, + + + constructor: function(comp, config) { + this.comp = comp; + this.initialConstrainTo = config.constrainTo; + this.callParent([ config ]); + }, + + onStart: function(e) { + var me = this, + comp = me.comp; + + + this.startPosition = comp.getXY(); + + + + if (comp.ghost && !comp.liveDrag) { + me.proxy = comp.ghost(); + me.dragTarget = me.proxy.header.el; + } + + + if (me.constrain || me.constrainDelegate) { + me.constrainTo = me.calculateConstrainRegion(); + } + + if (comp.beginDrag) { + comp.beginDrag(); + } + }, + + calculateConstrainRegion: function() { + var me = this, + comp = me.comp, + c = me.initialConstrainTo, + constrainEl, + delegateRegion, + elRegion, + dragEl = me.proxy ? me.proxy.el : comp.el, + shadowSize = (!me.constrainDelegate && dragEl.shadow && !dragEl.shadowDisabled) ? dragEl.shadow.getShadowSize() : 0; + + + if (!(c instanceof Ext.util.Region)) { + constrainEl = Ext.fly(c); + c = constrainEl.getViewRegion(); + + + c.right = c.left + constrainEl.dom.clientWidth; + } + + + if (shadowSize) { + c.adjust(shadowSize[0], -shadowSize[1], -shadowSize[2], shadowSize[3]); + } + + + + + if (!me.constrainDelegate) { + delegateRegion = Ext.fly(me.dragTarget).getRegion(); + elRegion = dragEl.getRegion(); + + c.adjust( + delegateRegion.top - elRegion.top, + delegateRegion.right - elRegion.right, + delegateRegion.bottom - elRegion.bottom, + delegateRegion.left - elRegion.left + ); + } + return c; + }, + + + onDrag: function(e) { + var me = this, + comp = (me.proxy && !me.comp.liveDrag) ? me.proxy : me.comp, + offset = me.getOffset(me.constrain || me.constrainDelegate ? 'dragTarget' : null); + + comp.setPagePosition(me.startPosition[0] + offset[0], me.startPosition[1] + offset[1]); + }, + + onEnd: function(e) { + var comp = this.comp; + if (comp.isDestroyed || comp.destroying) { + return; + } + + if (this.proxy && !comp.liveDrag) { + comp.unghost(); + } + if (comp.endDrag) { + comp.endDrag(); + } + } +}); + + +Ext.define('Ext.window.Window', { + extend: Ext.panel.Panel , + + alternateClassName: 'Ext.Window', + + + + alias: 'widget.window', + + + + + + + + + + + + + + + + + + + + + + + baseCls: Ext.baseCSSPrefix + 'window', + + + resizable: true, + + + draggable: true, + + + constrain: false, + + + constrainHeader: false, + + + + + plain: false, + + + minimizable: false, + + + maximizable: false, + + + minHeight: 50, + + + minWidth: 50, + + + expandOnShow: true, + + + collapsible: false, + + + closable: true, + + + hidden: true, + + + autoRender: true, + + + hideMode: 'offsets', + + + floating: true, + + ariaRole: 'alertdialog', + + itemCls: Ext.baseCSSPrefix + 'window-item', + + initialAlphaNum: /^[a-z0-9]/, + + overlapHeader: true, + + ignoreHeaderBorderManagement: true, + + + alwaysFramed: true, + + + isRootCfg: { + isRoot: true + }, + + + isWindow: true, + + + initComponent: function() { + var me = this; + + + me.frame = false; + me.callParent(); + me.addEvents( + + + + + + 'resize', + + + 'maximize', + + + 'minimize', + + + 'restore' + ); + + if (me.plain) { + me.addClsWithUI('plain'); + } + + if (me.modal) { + me.ariaRole = 'dialog'; + } + + me.addStateEvents(['maximize', 'restore', 'resize', 'dragend']); + }, + + getElConfig: function () { + var me = this, + elConfig; + + elConfig = me.callParent(); + elConfig.tabIndex = -1; + return elConfig; + }, + + + + + getState: function() { + var me = this, + state = me.callParent() || {}, + maximized = !!me.maximized, + ghostBox = me.ghostBox, + pos; + + + state.maximized = maximized; + if (maximized) { + pos = me.restorePos; + } else if (ghostBox) { + + + pos = [ghostBox.x, ghostBox.y]; + } else { + pos = me.getPosition(); + } + Ext.apply(state, { + size: maximized ? me.restoreSize : me.getSize(), + pos: pos + }); + return state; + }, + + applyState: function(state){ + var me = this; + + if (state) { + me.maximized = state.maximized; + if (me.maximized) { + me.hasSavedRestore = true; + me.restoreSize = state.size; + me.restorePos = state.pos; + } else { + Ext.apply(me, { + width: state.size.width, + height: state.size.height, + x: state.pos[0], + y: state.pos[1] + }); + } + } + }, + + + onRender: function(ct, position) { + var me = this; + me.callParent(arguments); + me.focusEl = me.el; + + + if (me.maximizable) { + me.header.on({ + scope: me, + dblclick: me.toggleMaximize + }); + } + }, + + + afterRender: function() { + var me = this, + header = me.header, + keyMap; + + me.callParent(); + + + if (me.maximized) { + me.maximized = false; + me.maximize(); + if (header) { + header.removeCls(header.indicateDragCls) + } + } + + if (me.closable) { + keyMap = me.getKeyMap(); + keyMap.on(27, me.onEsc, me); + } else { + keyMap = me.keyMap; + } + if (keyMap && me.hidden) { + keyMap.disable(); + } + }, + + + + initDraggable: function() { + + this.initSimpleDraggable(); + }, + + initResizable: function(){ + this.callParent(arguments); + if (this.maximized) { + this.resizer.disable(); + } + }, + + + onEsc: function(k, e) { + + if (!Ext.FocusManager || !Ext.FocusManager.enabled || Ext.FocusManager.focusedCmp === this) { + e.stopEvent(); + this.close(); + } + }, + + + beforeDestroy: function() { + var me = this; + if (me.rendered) { + delete this.animateTarget; + me.hide(); + Ext.destroy( + me.keyMap + ); + } + me.callParent(); + }, + + + addTools: function() { + var me = this; + + + me.callParent(); + + if (me.minimizable) { + me.addTool({ + type: 'minimize', + handler: Ext.Function.bind(me.minimize, me, []) + }); + } + if (me.maximizable) { + me.addTool({ + type: 'maximize', + handler: Ext.Function.bind(me.maximize, me, []) + }); + me.addTool({ + type: 'restore', + handler: Ext.Function.bind(me.restore, me, []), + hidden: true + }); + } + }, + + + getFocusEl: function() { + return this.getDefaultFocus(); + }, + + + getDefaultFocus: function() { + var me = this, + result, + defaultComp = me.defaultButton || me.defaultFocus, + selector; + + if (defaultComp !== undefined) { + + if (Ext.isNumber(defaultComp)) { + result = me.query('button')[defaultComp]; + } + + else if (Ext.isString(defaultComp)) { + selector = defaultComp; + + + if (selector.match(me.initialAlphaNum)) { + result = me.down('#' + selector); + } + + if (!result) { + result = me.down(selector); + } + } + + else if (defaultComp.focus) { + result = defaultComp; + } + } + return result || me.el; + }, + + + onFocus: function() { + var me = this, + focusDescendant; + + + if ((Ext.FocusManager && Ext.FocusManager.enabled) || ((focusDescendant = me.getDefaultFocus()) === me)) { + me.callParent(arguments); + } else { + focusDescendant.focus(); + } + }, + + beforeLayout: function () { + var shadow = this.el.shadow; + + this.callParent(); + if (shadow) { + shadow.hide(); + } + }, + + onShow: function() { + var me = this; + + me.callParent(arguments); + if (me.expandOnShow) { + me.expand(false); + } + me.syncMonitorWindowResize(); + + if (me.keyMap) { + me.keyMap.enable(); + } + }, + + + doClose: function() { + var me = this; + + + if (me.hidden) { + me.fireEvent('close', me); + if (me.closeAction == 'destroy') { + this.destroy(); + } + } else { + + me.hide(me.animateTarget, me.doClose, me); + } + }, + + + afterHide: function() { + var me = this; + + + me.syncMonitorWindowResize(); + + + if (me.keyMap) { + me.keyMap.disable(); + } + + + me.callParent(arguments); + }, + + + onWindowResize: function() { + var me = this, + sizeModel; + + if (me.maximized) { + me.fitContainer(); + } else { + sizeModel = me.getSizeModel(); + if (sizeModel.width.natural || sizeModel.height.natural) { + me.updateLayout(); + } + me.doConstrain(); + } + + }, + + + minimize: function() { + this.fireEvent('minimize', this); + return this; + }, + + resumeHeaderLayout: function(changed) { + this.header.resumeLayouts(changed ? this.isRootCfg : null); + }, + + afterCollapse: function() { + var me = this, + header = me.header, + tools = me.tools; + + if (header && me.maximizable) { + header.suspendLayouts(); + tools.maximize.hide(); + tools.restore.hide(); + this.resumeHeaderLayout(true); + } + if (me.resizer) { + me.resizer.disable(); + } + me.callParent(arguments); + }, + + afterExpand: function() { + var me = this, + header = me.header, + tools = me.tools, + changed; + + + if (header) { + header.suspendLayouts(); + if (me.maximized) { + tools.restore.show(); + changed = true; + } else if (me.maximizable) { + tools.maximize.show(); + changed = true; + } + this.resumeHeaderLayout(changed); + } + if (me.resizer) { + me.resizer.enable(); + } + me.callParent(arguments); + }, + + + maximize: function(animate) { + var me = this, + header = me.header, + tools = me.tools, + changed; + + if (!me.maximized) { + me.expand(false); + if (!me.hasSavedRestore) { + me.restoreSize = me.getSize(); + me.restorePos = me.getPosition(true); + } + + + if (header) { + header.suspendLayouts(); + if (tools.maximize) { + tools.maximize.hide(); + changed = true; + } + if (tools.restore) { + tools.restore.show(); + changed = true; + } + if (me.collapseTool) { + me.collapseTool.hide(); + changed = true; + } + me.resumeHeaderLayout(changed); + } + + me.maximized = true; + me.el.disableShadow(); + + if (me.dd) { + me.dd.disable(); + if (header) { + header.removeCls(header.indicateDragCls) + } + } + if (me.resizer) { + me.resizer.disable(); + } + + me.el.addCls(Ext.baseCSSPrefix + 'window-maximized'); + me.container.addCls(Ext.baseCSSPrefix + 'window-maximized-ct'); + + me.syncMonitorWindowResize(); + me.fitContainer(animate = (animate || !!me.animateTarget) ? { + callback: function() { + me.fireEvent('maximize', me); + } + } : null); + if (!animate) { + me.fireEvent('maximize', me); + } + } + return me; + }, + + + restore: function(animate) { + var me = this, + tools = me.tools, + header = me.header, + newBox = me.restoreSize, + changed; + + if (me.maximized) { + me.hasSavedRestore = null; + me.removeCls(Ext.baseCSSPrefix + 'window-maximized'); + + + if (header) { + header.suspendLayouts(); + if (tools.restore) { + tools.restore.hide(); + changed = true; + } + if (tools.maximize) { + tools.maximize.show(); + changed = true; + } + if (me.collapseTool) { + me.collapseTool.show(); + changed = true; + } + me.resumeHeaderLayout(changed); + } + + me.maximized = false; + + + newBox.x = me.restorePos[0]; + newBox.y = me.restorePos[1]; + me.setBox(newBox, animate = (animate || !!me.animateTarget) ? { + callback: function() { + me.el.enableShadow(true); + me.fireEvent('restore', me); + } + } : null); + + + me.restorePos = me.restoreSize = null; + + + if (me.dd) { + me.dd.enable(); + if (header) { + header.addCls(header.indicateDragCls) + } + } + + if (me.resizer) { + me.resizer.enable(); + } + + me.container.removeCls(Ext.baseCSSPrefix + 'window-maximized-ct'); + + me.syncMonitorWindowResize(); + + if (!animate) { + me.el.enableShadow(true); + me.fireEvent('restore', me); + } + } + return me; + }, + + + syncMonitorWindowResize: function () { + var me = this, + currentlyMonitoring = me._monitoringResize, + + yes = me.monitorResize || me.constrain || me.constrainHeader || me.maximized, + + veto = me.hidden || me.destroying || me.isDestroyed; + + if (yes && !veto) { + + if (!currentlyMonitoring) { + + + Ext.EventManager.onWindowResize(me.onWindowResize, me, {delay: 1}); + me._monitoringResize = true; + } + } else if (currentlyMonitoring) { + + Ext.EventManager.removeResizeListener(me.onWindowResize, me); + me._monitoringResize = false; + } + }, + + + toggleMaximize: function() { + return this[this.maximized ? 'restore': 'maximize'](); + } + +}); + + +Ext.define("Ext.form.Labelable", { + + + autoEl: { + tag: 'table', + cellpadding: 0 + }, + + childEls: [ + + 'labelCell', + + + 'labelEl', + + + 'bodyEl', + + + 'sideErrorCell', + + + 'errorEl', + + 'inputRow' + ], + + + labelableRenderTpl: [ + + + 'id="{id}"
    >', + + + '', + '', + '{beforeLabelTpl}', + ' class="{labelCls}"', + ' style="{labelStyle}"', + + ' unselectable="on"', + '>', + '{beforeLabelTextTpl}', + '{fieldLabel}{labelSeparator}', + '{afterLabelTextTpl}', + '', + '{afterLabelTpl}', + '', + '
    ', + + + '', + '{beforeBodyEl}', + + + '', + '{beforeLabelTpl}', + '
    ', + '', + '
    ', + '{afterLabelTpl}', + '
    ', + + '{beforeSubTpl}', + '{[values.$comp.getSubTplMarkup(values)]}', + '{afterSubTpl}', + + + '', + '{afterBodyEl}', + '', + '', + '', + '', + '', + '', + '{afterBodyEl}', + '', + '', + + '', + { + disableFormats: true + } + ], + + + activeErrorsTpl: undefined, + + htmlActiveErrorsTpl: [ + '', + '
    • {.}
    ', + '
    ' + ], + + plaintextActiveErrorsTpl: [ + '', + '\n{.}', + '' + ], + + + isFieldLabelable: true, + + + formItemCls: Ext.baseCSSPrefix + 'form-item', + + + labelCls: Ext.baseCSSPrefix + 'form-item-label', + + + + + errorMsgCls: Ext.baseCSSPrefix + 'form-error-msg', + + + baseBodyCls: Ext.baseCSSPrefix + 'form-item-body', + + + fieldBodyCls: '', + + + clearCls: Ext.baseCSSPrefix + 'clear', + + + invalidCls : Ext.baseCSSPrefix + 'form-invalid', + + + fieldLabel: undefined, + + + labelAlign : 'left', + + + labelWidth: 100, + + + labelPad : 5, + + + + labelSeparator : ':', + + + + + + hideLabel: false, + + + hideEmptyLabel: true, + + + preventMark: false, + + + autoFitErrors: true, + + + msgTarget: 'qtip', + + + + + noWrap: true, + + labelableInsertions: [ + + + 'beforeBodyEl', + + + 'afterBodyEl', + + + 'beforeLabelTpl', + + + 'afterLabelTpl', + + + 'beforeSubTpl', + + + 'afterSubTpl', + + + 'beforeLabelTextTpl', + + + 'afterLabelTextTpl', + + + 'labelAttrTpl' + ], + + + labelableRenderProps: [ 'allowBlank', 'id', 'labelAlign', 'fieldBodyCls', 'baseBodyCls', + 'clearCls', 'labelSeparator', 'msgTarget' ], + + + initLabelable: function() { + var me = this, + padding = me.padding; + + + + + if (padding) { + me.padding = undefined; + me.extraMargins = Ext.Element.parseBox(padding); + } + + if (!me.activeErrorsTpl) { + if (me.msgTarget == 'title') { + me.activeErrorsTpl = me.plaintextActiveErrorsTpl; + } else { + me.activeErrorsTpl = me.htmlActiveErrorsTpl; + } + } + + me.addCls(Ext.plainTableCls); + me.addCls(me.formItemCls); + + + me.lastActiveError = ''; + + me.addEvents( + + 'errorchange' + ); + + + me.enableBubble('errorchange'); + }, + + + trimLabelSeparator: function() { + var me = this, + separator = me.labelSeparator, + label = me.fieldLabel || '', + lastChar = label.substr(label.length - 1); + + + return lastChar === separator ? label.slice(0, -1) : label; + }, + + + getFieldLabel: function() { + return this.trimLabelSeparator(); + }, + + + setFieldLabel: function(label){ + label = label || ''; + + var me = this, + separator = me.labelSeparator, + labelEl = me.labelEl; + + me.fieldLabel = label; + if (me.rendered) { + if (Ext.isEmpty(label) && me.hideEmptyLabel) { + labelEl.parent().setDisplayed('none'); + } else { + if (separator) { + label = me.trimLabelSeparator() + separator; + } + labelEl.update(label); + labelEl.parent().setDisplayed(''); + } + me.updateLayout(); + } + }, + + getInsertionRenderData: function (data, names) { + var i = names.length, + name, value; + + while (i--) { + name = names[i]; + value = this[name]; + + if (value) { + if (typeof value != 'string') { + if (!value.isTemplate) { + value = Ext.XTemplate.getTpl(this, name); + } + value = value.apply(data); + } + } + + data[name] = value || ''; + } + + return data; + }, + + + getLabelableRenderData: function() { + var me = this, + data, + tempEl, + topLabel = me.labelAlign === 'top'; + + if (!Ext.form.Labelable.errorIconWidth) { + tempEl = Ext.getBody().createChild({style: 'position:absolute', cls: Ext.baseCSSPrefix + 'form-invalid-icon'}); + Ext.form.Labelable.errorIconWidth = tempEl.getWidth() + tempEl.getMargin('l'); + tempEl.remove(); + } + + data = Ext.copyTo({ + inFormLayout : me.ownerLayout && me.ownerLayout.type === 'form', + inputId : me.getInputId(), + labelOnLeft : !topLabel, + hideLabel : !me.hasVisibleLabel(), + fieldLabel : me.getFieldLabel(), + labelCellStyle : me.getLabelCellStyle(), + labelCellAttrs : me.getLabelCellAttrs(), + labelCls : me.getLabelCls(), + labelStyle : me.getLabelStyle(), + bodyColspan : me.getBodyColspan(), + externalError : !me.autoFitErrors, + errorMsgCls : me.getErrorMsgCls(), + errorIconWidth : Ext.form.Labelable.errorIconWidth + }, + me, me.labelableRenderProps, true); + + me.getInsertionRenderData(data, me.labelableInsertions); + + return data; + }, + + xhooks: { + beforeRender: function() { + var me = this; + me.setFieldDefaults(me.getHierarchyState().fieldDefaults); + if (me.ownerLayout) { + me.addCls(Ext.baseCSSPrefix + me.ownerLayout.type + '-form-item'); + } + }, + + onRender: function() { + var me = this, + margins, + side, + style = {}; + + if (me.extraMargins) { + margins = me.el.getMargin(); + for (side in margins) { + if (margins.hasOwnProperty(side)) { + style['margin-' + side] = (margins[side] + me.extraMargins[side]) + 'px'; + } + } + me.el.setStyle(style); + } + } + }, + + + hasVisibleLabel: function(){ + if (this.hideLabel) { + return false; + } + return !(this.hideEmptyLabel && !this.getFieldLabel()); + }, + + + getLabelWidth: function(){ + var me = this; + if (!me.hasVisibleLabel()) { + return 0; + } + return me.labelWidth + me.labelPad; + }, + + + getBodyColspan: function() { + var me = this, + result; + + if (me.msgTarget === 'side' && (!me.autoFitErrors || me.hasActiveError())) { + result = 1; + } else { + result = 2; + } + if (me.labelAlign !== 'top' && !me.hasVisibleLabel()) { + result++; + } + return result; + }, + + getLabelCls: function() { + var labelCls = this.labelCls + ' ' + Ext.dom.Element.unselectableCls, + labelClsExtra = this.labelClsExtra; + + return labelClsExtra ? labelCls + ' ' + labelClsExtra : labelCls; + }, + + getLabelCellStyle: function() { + var me = this, + hideLabelCell = me.hideLabel || (!me.fieldLabel && me.hideEmptyLabel); + + return hideLabelCell ? 'display:none;' : ''; + }, + + getErrorMsgCls: function() { + var me = this, + hideLabelCell = (me.hideLabel || (!me.fieldLabel && me.hideEmptyLabel)); + + return me.errorMsgCls + (!hideLabelCell && me.labelAlign === 'top' ? ' ' + Ext.baseCSSPrefix + 'lbl-top-err-icon' : ''); + }, + + getLabelCellAttrs: function() { + var me = this, + labelAlign = me.labelAlign, + result = ''; + + if (labelAlign !== 'top') { + result = 'valign="top" halign="' + labelAlign + '" width="' + (me.labelWidth + me.labelPad) + '"'; + } + return result + ' class="' + Ext.baseCSSPrefix + 'field-label-cell"'; + }, + + + getLabelStyle: function(){ + var me = this, + labelPad = me.labelPad, + labelStyle = ''; + + + + if (me.labelAlign !== 'top') { + if (me.labelWidth) { + labelStyle = 'width:' + me.labelWidth + 'px;'; + } + if (labelPad) { + labelStyle += 'margin-right:' + labelPad + 'px;'; + } + } + + return labelStyle + (me.labelStyle || ''); + }, + + + getSubTplMarkup: function() { + return ''; + }, + + + getInputId: function() { + return ''; + }, + + + getActiveError : function() { + return this.activeError || ''; + }, + + + hasActiveError: function() { + return !!this.getActiveError(); + }, + + + setActiveError: function(msg) { + this.setActiveErrors(msg); + }, + + + getActiveErrors: function() { + return this.activeErrors || []; + }, + + + setActiveErrors: function(errors) { + errors = Ext.Array.from(errors); + this.activeError = errors[0]; + this.activeErrors = errors; + this.activeError = this.getTpl('activeErrorsTpl').apply({ + errors: errors, + listCls: Ext.plainListCls + }); + this.renderActiveError(); + }, + + + unsetActiveError: function() { + delete this.activeError; + delete this.activeErrors; + this.renderActiveError(); + }, + + + renderActiveError: function() { + var me = this, + activeError = me.getActiveError(), + hasError = !!activeError; + + if (activeError !== me.lastActiveError) { + me.fireEvent('errorchange', me, activeError); + me.lastActiveError = activeError; + } + + if (me.rendered && !me.isDestroyed && !me.preventMark) { + + me.el[hasError ? 'addCls' : 'removeCls'](me.invalidCls); + + + me.getActionEl().dom.setAttribute('aria-invalid', hasError); + + + if (me.errorEl) { + me.errorEl.dom.innerHTML = activeError; + } + } + }, + + + setFieldDefaults: function(defaults) { + var key; + + for (key in defaults) { + if (!this.hasOwnProperty(key)) { + this[key] = defaults[key]; + } + } + } +}); + + +Ext.define('Ext.form.field.Field', { + + isFormField : true, + + + + + + + disabled : false, + + + submitValue: true, + + + validateOnChange: true, + + + suspendCheckChange: 0, + + + initField: function() { + this.addEvents( + + 'change', + + 'validitychange', + + 'dirtychange' + ); + + this.initValue(); + + }, + + + initValue: function() { + var me = this; + + me.value = me.transformOriginalValue(me.value); + + me.originalValue = me.lastValue = me.value; + + + me.suspendCheckChange++; + me.setValue(me.value); + me.suspendCheckChange--; + }, + + + transformOriginalValue: Ext.identityFn, + + + getName: function() { + return this.name; + }, + + + getValue: function() { + return this.value; + }, + + + setValue: function(value) { + var me = this; + me.value = value; + me.checkChange(); + return me; + }, + + + isEqual: function(value1, value2) { + return String(value1) === String(value2); + }, + + + isEqualAsString: function(value1, value2){ + return String(Ext.value(value1, '')) === String(Ext.value(value2, '')); + }, + + + getSubmitData: function() { + var me = this, + data = null; + if (!me.disabled && me.submitValue && !me.isFileUpload()) { + data = {}; + data[me.getName()] = '' + me.getValue(); + } + return data; + }, + + + getModelData: function() { + var me = this, + data = null; + if (!me.disabled && !me.isFileUpload()) { + data = {}; + data[me.getName()] = me.getValue(); + } + return data; + }, + + + reset : function(){ + var me = this; + + me.beforeReset(); + me.setValue(me.originalValue); + me.clearInvalid(); + + delete me.wasValid; + }, + + + beforeReset: Ext.emptyFn, + + + resetOriginalValue: function() { + this.originalValue = this.getValue(); + this.checkDirty(); + }, + + + checkChange: function() { + if (!this.suspendCheckChange) { + var me = this, + newVal = me.getValue(), + oldVal = me.lastValue; + if (!me.isEqual(newVal, oldVal) && !me.isDestroyed) { + me.lastValue = newVal; + me.fireEvent('change', me, newVal, oldVal); + me.onChange(newVal, oldVal); + } + } + }, + + + onChange: function(newVal, oldVal) { + if (this.validateOnChange) { + this.validate(); + } + this.checkDirty(); + }, + + + isDirty : function() { + var me = this; + return !me.disabled && !me.isEqual(me.getValue(), me.originalValue); + }, + + + checkDirty: function() { + var me = this, + isDirty = me.isDirty(); + if (isDirty !== me.wasDirty) { + me.fireEvent('dirtychange', me, isDirty); + me.onDirtyChange(isDirty); + me.wasDirty = isDirty; + } + }, + + + onDirtyChange: Ext.emptyFn, + + + getErrors: function(value) { + return []; + }, + + + isValid : function() { + var me = this; + return me.disabled || Ext.isEmpty(me.getErrors()); + }, + + + validate : function() { + var me = this, + isValid = me.isValid(); + if (isValid !== me.wasValid) { + me.wasValid = isValid; + me.fireEvent('validitychange', me, isValid); + } + return isValid; + }, + + + batchChanges: function(fn) { + try { + this.suspendCheckChange++; + fn(); + } catch(e){ + throw e; + } finally { + this.suspendCheckChange--; + } + this.checkChange(); + }, + + + isFileUpload: function() { + return false; + }, + + + extractFileInput: function() { + return null; + }, + + + markInvalid: Ext.emptyFn, + + + clearInvalid: Ext.emptyFn + +}); + + +Ext.define('Ext.layout.component.field.Field', { + + + + extend: Ext.layout.component.Auto , + + alias: 'layout.field', + + + + + + type: 'field', + + naturalSizingProp: 'size', + + beginLayout: function(ownerContext) { + var me = this, + owner = me.owner; + + me.callParent(arguments); + + ownerContext.labelStrategy = me.getLabelStrategy(); + ownerContext.errorStrategy = me.getErrorStrategy(); + + ownerContext.labelContext = ownerContext.getEl('labelEl'); + ownerContext.bodyCellContext = ownerContext.getEl('bodyEl'); + ownerContext.inputContext = ownerContext.getEl('inputEl'); + ownerContext.errorContext = ownerContext.getEl('errorEl'); + + + + if (Ext.isIE7m && Ext.isStrict && ownerContext.inputContext) { + me.ieInputWidthAdjustment = ownerContext.inputContext.getPaddingInfo().width + ownerContext.inputContext.getBorderInfo().width; + } + + + ownerContext.labelStrategy.prepare(ownerContext, owner); + ownerContext.errorStrategy.prepare(ownerContext, owner); + }, + + beginLayoutCycle: function(ownerContext){ + var me = this, + owner = me.owner, + widthModel = ownerContext.widthModel, + ownerNaturalSize = owner[me.naturalSizingProp], + width; + + me.callParent(arguments); + + if (widthModel.shrinkWrap) { + + me.beginLayoutShrinkWrap(ownerContext); + } else if (widthModel.natural) { + + + if (typeof ownerNaturalSize == 'number' && !owner.inputWidth) { + me.beginLayoutFixed(ownerContext, (width = ownerNaturalSize * 6.5 + 20), 'px'); + } + + + else { + me.beginLayoutShrinkWrap(ownerContext); + } + ownerContext.setWidth(width, false); + } else { + me.beginLayoutFixed(ownerContext, '100', '%'); + } + }, + + beginLayoutFixed: function (ownerContext, width, suffix) { + var owner = ownerContext.target, + inputEl = owner.inputEl, + inputWidth = owner.inputWidth; + + owner.el.setStyle('table-layout', 'fixed'); + owner.bodyEl.setStyle('width', width + suffix); + if (inputEl) { + if (inputWidth) { + inputEl.setStyle('width', inputWidth + 'px'); + } else { + inputEl.setStyle('width', owner.stretchInputElFixed ? '100%' : ''); + } + } + ownerContext.isFixed = true; + }, + + beginLayoutShrinkWrap: function (ownerContext) { + var owner = ownerContext.target, + inputEl = owner.inputEl, + inputWidth = owner.inputWidth; + + if (inputEl && inputEl.dom) { + inputEl.dom.removeAttribute('size'); + if (inputWidth) { + inputEl.setStyle('width', inputWidth + 'px'); + } else { + inputEl.setStyle('width', ''); + } + } + owner.el.setStyle('table-layout', 'auto'); + owner.bodyEl.setStyle('width', ''); + }, + + finishedLayout: function(ownerContext){ + var owner = this.owner; + + this.callParent(arguments); + ownerContext.labelStrategy.finishedLayout(ownerContext, owner); + ownerContext.errorStrategy.finishedLayout(ownerContext, owner); + }, + + calculateOwnerHeightFromContentHeight: function(ownerContext, contentHeight) { + return contentHeight; + }, + + measureContentHeight: function (ownerContext) { + return ownerContext.el.getHeight(); + }, + + measureContentWidth: function (ownerContext) { + return ownerContext.el.getWidth(); + }, + + measureLabelErrorHeight: function (ownerContext) { + return ownerContext.labelStrategy.getHeight(ownerContext) + + ownerContext.errorStrategy.getHeight(ownerContext); + }, + + onFocus: function() { + this.getErrorStrategy().onFocus(this.owner); + }, + + + getLabelStrategy: function() { + var me = this, + strategies = me.labelStrategies, + labelAlign = me.owner.labelAlign; + return strategies[labelAlign] || strategies.base; + }, + + + getErrorStrategy: function() { + var me = this, + owner = me.owner, + strategies = me.errorStrategies, + msgTarget = owner.msgTarget; + return !owner.preventMark && Ext.isString(msgTarget) ? + (strategies[msgTarget] || strategies.elementId) : + strategies.none; + }, + + + labelStrategies: (function() { + var base = { + prepare: function(ownerContext, owner) { + var cls = owner.labelCls + '-' + owner.labelAlign, + labelEl = owner.labelEl; + + if (labelEl) { + labelEl.addCls(cls); + } + }, + + getHeight: function () { + return 0; + }, + + finishedLayout: Ext.emptyFn + }; + + return { + base: base, + + + top: Ext.applyIf({ + + getHeight: function (ownerContext) { + var labelContext = ownerContext.labelContext, + props = labelContext.props, + height = props.height; + + if (height === undefined) { + props.height = height = labelContext.el.getHeight(); + } + + return height; + } + }, base), + + + left: base, + + + right: base + }; + }()), + + + errorStrategies: (function() { + function showTip(owner) { + var tip = Ext.layout.component.field.Field.tip, + target; + + if (tip && tip.isVisible()) { + target = tip.activeTarget; + if (target && target.el === owner.getActionEl().dom) { + tip.toFront(true); + } + } + } + + var applyIf = Ext.applyIf, + emptyFn = Ext.emptyFn, + iconCls = Ext.baseCSSPrefix + 'form-invalid-icon', + iconWidth, + base = { + prepare: function(ownerContext, owner) { + var el = owner.errorEl; + if (el) { + el.setDisplayed(false); + } + }, + getHeight: function () { + return 0; + }, + onFocus: emptyFn, + finishedLayout: emptyFn + }; + + return { + none: base, + + + side: applyIf({ + prepare: function(ownerContext, owner) { + var errorEl = owner.errorEl, + sideErrorCell = owner.sideErrorCell, + displayError = owner.hasActiveError(), + tempEl; + + + if (!iconWidth) { + iconWidth = (tempEl = Ext.getBody().createChild({style: 'position:absolute', cls: iconCls})).getWidth(); + tempEl.remove(); + } + + errorEl.addCls(iconCls); + errorEl.set({'data-errorqtip': owner.getActiveError() || ''}); + if (owner.autoFitErrors) { + errorEl.setDisplayed(displayError); + } + + else { + errorEl.setVisible(displayError); + } + + + if (sideErrorCell && owner.autoFitErrors) { + sideErrorCell.setDisplayed(displayError); + } + owner.bodyEl.dom.colSpan = owner.getBodyColspan(); + + + Ext.layout.component.field.Field.initTip(); + }, + onFocus: showTip + }, base), + + + under: applyIf({ + prepare: function(ownerContext, owner) { + var errorEl = owner.errorEl, + cls = Ext.baseCSSPrefix + 'form-invalid-under'; + + errorEl.addCls(cls); + errorEl.setDisplayed(owner.hasActiveError()); + }, + getHeight: function (ownerContext) { + var height = 0, + errorContext, props; + + if (ownerContext.target.hasActiveError()) { + errorContext = ownerContext.errorContext; + props = errorContext.props; + height = props.height; + + if (height === undefined) { + props.height = height = errorContext.el.getHeight(); + } + } + + return height; + } + }, base), + + + qtip: applyIf({ + prepare: function(ownerContext, owner) { + Ext.layout.component.field.Field.initTip(); + owner.getActionEl().dom.setAttribute('data-errorqtip', owner.getActiveError() || ''); + }, + onFocus: showTip + }, base), + + + title: applyIf({ + prepare: function(ownerContext, owner) { + owner.getActionEl().dom.setAttribute('title', owner.getActiveError() || ''); + } + }, base), + + + elementId: applyIf({ + prepare: function(ownerContext, owner) { + var targetEl = Ext.fly(owner.msgTarget); + if (targetEl) { + targetEl.dom.innerHTML = owner.getActiveError() || ''; + targetEl.setDisplayed(owner.hasActiveError()); + } + } + }, base) + }; + }()), + + statics: { + + initTip: function() { + var tip = this.tip; + if (!tip) { + tip = this.tip = Ext.create('Ext.tip.QuickTip', { + ui: 'form-invalid' + }); + tip.tagConfig = Ext.apply({}, {attribute: 'errorqtip'}, tip.tagConfig); + } + }, + + + destroyTip: function() { + var tip = this.tip; + if (tip) { + tip.destroy(); + delete this.tip; + } + } + } +}); + + +Ext.define('Ext.form.field.Base', { + extend: Ext.Component , + mixins: { + labelable: Ext.form.Labelable , + field: Ext.form.field.Field + }, + alias: 'widget.field', + alternateClassName: ['Ext.form.Field', 'Ext.form.BaseField'], + + + + fieldSubTpl: [ + ' name="{name}"
    ', + ' value="{[Ext.util.Format.htmlEncode(values.value)]}"', + ' placeholder="{placeholder}"', + '{%if (values.maxLength !== undefined){%} maxlength="{maxLength}"{%}%}', + ' readonly="readonly"', + ' disabled="disabled"', + ' tabIndex="{tabIdx}"', + ' style="{fieldStyle}"', + ' class="{fieldCls} {typeCls} {editableCls} {inputCls}" autocomplete="off"/>', + { + disableFormats: true + } + ], + + subTplInsertions: [ + + 'inputAttrTpl' + ], + + + + + inputType: 'text', + + + + + + invalidText : 'The value in this field is invalid', + + + + fieldCls : Ext.baseCSSPrefix + 'form-field', + + + + + focusCls : 'form-focus', + + + dirtyCls : Ext.baseCSSPrefix + 'form-dirty', + + + checkChangeEvents: Ext.isIE && (!document.documentMode || document.documentMode < 9) ? + ['change', 'propertychange', 'keyup'] : + ['change', 'input', 'textInput', 'keyup', 'dragdrop'], + + + checkChangeBuffer: 50, + + componentLayout: 'field', + + + readOnly : false, + + + readOnlyCls: Ext.baseCSSPrefix + 'form-readonly', + + + + + validateOnBlur: true, + + + hasFocus : false, + + baseCls: Ext.baseCSSPrefix + 'field', + + maskOnDisable: false, + + + + + stretchInputElFixed: true, + + + initComponent : function() { + var me = this; + + me.callParent(); + + me.subTplData = me.subTplData || {}; + + me.addEvents( + + 'specialkey', + + + 'writeablechange' + ); + + + me.initLabelable(); + me.initField(); + + + if (!me.name) { + me.name = me.getInputId(); + } + + if (me.readOnly) { + me.addCls(me.readOnlyCls); + } + }, + + + getInputId: function() { + return this.inputId || (this.inputId = this.id + '-inputEl'); + }, + + + getSubTplData: function() { + var me = this, + type = me.inputType, + inputId = me.getInputId(), + data; + + data = Ext.apply({ + id : inputId, + cmpId : me.id, + name : me.name || inputId, + disabled : me.disabled, + readOnly : me.readOnly, + value : me.getRawValue(), + type : type, + fieldCls : me.fieldCls, + fieldStyle : me.getFieldStyle(), + tabIdx : me.tabIndex, + inputCls : me.inputCls, + typeCls : Ext.baseCSSPrefix + 'form-' + (type === 'password' ? 'text' : type) + }, me.subTplData); + + me.getInsertionRenderData(data, me.subTplInsertions); + + return data; + }, + + applyRenderSelectors: function() { + var me = this; + + me.callParent(); + + + + me.addChildEls('inputEl'); + + + me.inputEl = me.el.getById(me.getInputId()); + }, + + + getSubTplMarkup: function() { + return this.getTpl('fieldSubTpl').apply(this.getSubTplData()); + }, + + initRenderTpl: function() { + var me = this; + if (!me.hasOwnProperty('renderTpl')) { + me.renderTpl = me.getTpl('labelableRenderTpl'); + } + return me.callParent(); + }, + + initRenderData: function() { + return Ext.applyIf(this.callParent(), this.getLabelableRenderData()); + }, + + + setFieldStyle: function(style) { + var me = this, + inputEl = me.inputEl; + if (inputEl) { + inputEl.applyStyles(style); + } + me.fieldStyle = style; + }, + + getFieldStyle: function() { + return Ext.isObject(this.fieldStyle) ? Ext.DomHelper.generateStyles(this.fieldStyle) : this.fieldStyle ||''; + }, + + + onRender : function() { + this.callParent(arguments); + this.renderActiveError(); + }, + + getFocusEl: function() { + return this.inputEl; + }, + + isFileUpload: function() { + return this.inputType === 'file'; + }, + + + getSubmitData: function() { + var me = this, + data = null, + val; + if (!me.disabled && me.submitValue && !me.isFileUpload()) { + val = me.getSubmitValue(); + if (val !== null) { + data = {}; + data[me.getName()] = val; + } + } + return data; + }, + + + getSubmitValue: function() { + return this.processRawValue(this.getRawValue()); + }, + + + getRawValue: function() { + var me = this, + v = (me.inputEl ? me.inputEl.getValue() : Ext.value(me.rawValue, '')); + me.rawValue = v; + return v; + }, + + + setRawValue: function(value) { + var me = this; + value = Ext.value(me.transformRawValue(value), ''); + me.rawValue = value; + + + if (me.inputEl) { + me.inputEl.dom.value = value; + } + return value; + }, + + + transformRawValue: Ext.identityFn, + + + valueToRaw: function(value) { + return '' + Ext.value(value, ''); + }, + + + rawToValue: Ext.identityFn, + + + processRawValue: Ext.identityFn, + + + getValue: function() { + var me = this, + val = me.rawToValue(me.processRawValue(me.getRawValue())); + me.value = val; + return val; + }, + + + setValue: function(value) { + var me = this; + me.setRawValue(me.valueToRaw(value)); + return me.mixins.field.setValue.call(me, value); + }, + + onBoxReady: function() { + var me = this; + me.callParent(); + + if (me.setReadOnlyOnBoxReady) { + me.setReadOnly(me.readOnly); + } + + }, + + + onDisable: function() { + var me = this, + inputEl = me.inputEl; + + me.callParent(); + if (inputEl) { + inputEl.dom.disabled = true; + if (me.hasActiveError()) { + + me.clearInvalid(); + me.needsValidateOnEnable = true; + } + } + }, + + + onEnable: function() { + var me = this, + inputEl = me.inputEl; + + me.callParent(); + if (inputEl) { + inputEl.dom.disabled = false; + if (me.needsValidateOnEnable) { + delete me.needsValidateOnEnable; + + me.forceValidation = true; + me.isValid(); + delete me.forceValidation; + } + } + }, + + + setReadOnly: function(readOnly) { + var me = this, + inputEl = me.inputEl; + readOnly = !!readOnly; + me[readOnly ? 'addCls' : 'removeCls'](me.readOnlyCls); + me.readOnly = readOnly; + if (inputEl) { + inputEl.dom.readOnly = readOnly; + } else if (me.rendering) { + me.setReadOnlyOnBoxReady = true; + } + me.fireEvent('writeablechange', me, readOnly); + }, + + + fireKey: function(e){ + if(e.isSpecialKey()){ + this.fireEvent('specialkey', this, new Ext.EventObjectImpl(e)); + } + }, + + + initEvents : function(){ + var me = this, + inputEl = me.inputEl, + onChangeTask, + onChangeEvent, + events = me.checkChangeEvents, + e, + eLen = events.length, + event; + + + + if (me.inEditor) { + me.onBlur = Ext.Function.createBuffered(me.onBlur, 10); + } + if (inputEl) { + me.mon(inputEl, Ext.EventManager.getKeyEvent(), me.fireKey, me); + + + onChangeTask = new Ext.util.DelayedTask(me.checkChange, me); + me.onChangeEvent = onChangeEvent = function() { + onChangeTask.delay(me.checkChangeBuffer); + }; + + for (e = 0; e < eLen; e++) { + event = events[e]; + + if (event === 'propertychange') { + me.usesPropertychange = true; + } + + me.mon(inputEl, event, onChangeEvent); + } + } + me.callParent(); + }, + + doComponentLayout: function() { + var me = this, + inputEl = me.inputEl, + usesPropertychange = me.usesPropertychange, + ename = 'propertychange', + onChangeEvent = me.onChangeEvent; + + + + + if (usesPropertychange) { + me.mun(inputEl, ename, onChangeEvent); + } + me.callParent(arguments); + if (usesPropertychange) { + me.mon(inputEl, ename, onChangeEvent); + } + }, + + + onDirtyChange: function(isDirty) { + this[isDirty ? 'addCls' : 'removeCls'](this.dirtyCls); + }, + + + + isValid : function() { + var me = this, + disabled = me.disabled, + validate = me.forceValidation || !disabled; + + + return validate ? me.validateValue(me.processRawValue(me.getRawValue())) : disabled; + }, + + + + validateValue: function(value) { + var me = this, + errors = me.getErrors(value), + isValid = Ext.isEmpty(errors); + if (!me.preventMark) { + if (isValid) { + me.clearInvalid(); + } else { + me.markInvalid(errors); + } + } + + return isValid; + }, + + + markInvalid : function(errors) { + + var me = this, + oldMsg = me.getActiveError(), + active; + + me.setActiveErrors(Ext.Array.from(errors)); + active = me.getActiveError(); + if (oldMsg !== active) { + me.setError(active); + } + }, + + + clearInvalid : function() { + + var me = this, + hadError = me.hasActiveError(); + + delete me.needsValidateOnEnable; + me.unsetActiveError(); + if (hadError) { + me.setError(''); + } + }, + + + setError: function(active){ + var me = this, + msgTarget = me.msgTarget, + prop; + + if (me.rendered) { + if (msgTarget == 'title' || msgTarget == 'qtip') { + if (me.rendered) { + prop = msgTarget == 'qtip' ? 'data-errorqtip' : 'title'; + } + me.getActionEl().dom.setAttribute(prop, active || ''); + } else { + me.updateLayout(); + } + } + }, + + + renderActiveError: function() { + var me = this, + hasError = me.hasActiveError(); + if (me.inputEl) { + + me.inputEl[hasError ? 'addCls' : 'removeCls'](me.invalidCls + '-field'); + } + me.mixins.labelable.renderActiveError.call(me); + }, + + + getActionEl: function() { + return this.inputEl || this.el; + } + +}); + + +Ext.define('Ext.form.field.VTypes', (function(){ + + var alpha = /^[a-zA-Z_]+$/, + alphanum = /^[a-zA-Z0-9_]+$/, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + email = /^(")?(?:[^\."])(?:(?:[\.])?(?:[\w\-!#$%&'*+/=?^_`{|}~]))*\1@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/, + url = /(((^https?)|(^ftp)):\/\/((([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*)|(localhost|LOCALHOST))\/?)/i; + + + return { + singleton: true, + alternateClassName: 'Ext.form.VTypes', + + + 'email' : function(v){ + return email.test(v); + }, + + + 'emailText' : 'This field should be an e-mail address in the format "user@example.com"', + + + 'emailMask' : /[\w.\-@'"!#$%&'*+/=?^_`{|}~]/i, + + + 'url' : function(v){ + return url.test(v); + }, + + + 'urlText' : 'This field should be a URL in the format "http:/'+'/www.example.com"', + + + + 'alpha' : function(v){ + return alpha.test(v); + }, + + + 'alphaText' : 'This field should only contain letters and _', + + + 'alphaMask' : /[a-z_]/i, + + + 'alphanum' : function(v){ + return alphanum.test(v); + }, + + + 'alphanumText' : 'This field should only contain letters, numbers and _', + + + 'alphanumMask' : /[a-z0-9_]/i + }; +}())); + + +Ext.define('Ext.layout.component.field.Text', { + extend: Ext.layout.component.field.Field , + alias: 'layout.textfield', + + + type: 'textfield', + + canGrowWidth: true, + + beginLayoutCycle: function(ownerContext) { + this.callParent(arguments); + + + if (ownerContext.heightModel.shrinkWrap) { + ownerContext.inputContext.el.setStyle('height', ''); + } + }, + + measureContentWidth: function (ownerContext) { + var me = this, + owner = me.owner, + width = me.callParent(arguments), + inputContext = ownerContext.inputContext, + inputEl, value, calcWidth, max, min; + + if (owner.grow && me.canGrowWidth && !ownerContext.state.growHandled) { + inputEl = owner.inputEl; + + + value = Ext.util.Format.htmlEncode(inputEl.dom.value || (owner.hasFocus ? '' : owner.emptyText) || ''); + value += owner.growAppend; + calcWidth = inputEl.getTextWidth(value) + inputContext.getFrameInfo().width; + + max = owner.growMax; + min = Math.min(max, width); + max = Math.max(owner.growMin, max, min); + + + calcWidth = Ext.Number.constrain(calcWidth, owner.growMin, max); + inputContext.setWidth(calcWidth); + ownerContext.state.growHandled = true; + + + inputContext.domBlock(me, 'width'); + width = NaN; + } + return width; + }, + + publishInnerHeight: function(ownerContext, height) { + ownerContext.inputContext.setHeight(height - this.measureLabelErrorHeight(ownerContext)); + }, + + beginLayoutFixed: function(ownerContext, width, suffix) { + var me = this, + ieInputWidthAdjustment = me.ieInputWidthAdjustment; + + if (ieInputWidthAdjustment) { + me.adjustIEInputPadding(ownerContext); + if(suffix === 'px') { + width -= ieInputWidthAdjustment; + } + } + + me.callParent(arguments); + }, + + adjustIEInputPadding: function(ownerContext) { + + this.owner.bodyEl.setStyle('padding-right', this.ieInputWidthAdjustment + 'px'); + } +}); + + +Ext.define('Ext.form.field.Text', { + extend: Ext.form.field.Base , + alias: 'widget.textfield', + + alternateClassName: ['Ext.form.TextField', 'Ext.form.Text'], + + + + + + + size: 20, + + + + + growMin : 30, + + + growMax : 800, + + + + growAppend: 'W', + + + + + + + + + + allowBlank : true, + + + validateBlank: false, + + + allowOnlyWhitespace: true, + + + minLength : 0, + + + maxLength : Number.MAX_VALUE, + + + + + + minLengthText : 'The minimum length for this field is {0}', + + + + + maxLengthText : 'The maximum length for this field is {0}', + + + + + + + blankText : 'This field is required', + + + + + + + + regexText : '', + + + + + emptyCls : Ext.baseCSSPrefix + 'form-empty-field', + + + requiredCls : Ext.baseCSSPrefix + 'form-required-field', + + + + componentLayout: 'textfield', + + + valueContainsPlaceholder : false, + + + initComponent: function () { + var me = this; + + if (me.allowOnlyWhitespace === false) { + me.allowBlank = false; + } + + me.callParent(); + + me.addEvents( + + 'autosize', + + + 'keydown', + + 'keyup', + + 'keypress' + ); + me.addStateEvents('change'); + me.setGrowSizePolicy(); + }, + + + setGrowSizePolicy: function(){ + if (this.grow) { + this.shrinkWrap |= 1; + } + }, + + + initEvents : function(){ + var me = this, + el = me.inputEl; + + me.callParent(); + if(me.selectOnFocus || me.emptyText){ + me.mon(el, 'mousedown', me.onMouseDown, me); + } + if(me.maskRe || (me.vtype && me.disableKeyFilter !== true && (me.maskRe = Ext.form.field.VTypes[me.vtype+'Mask']))){ + me.mon(el, 'keypress', me.filterKeys, me); + } + + if (me.enableKeyEvents) { + me.mon(el, { + scope: me, + keyup: me.onKeyUp, + keydown: me.onKeyDown, + keypress: me.onKeyPress + }); + } + }, + + + isEqual: function(value1, value2) { + return this.isEqualAsString(value1, value2); + }, + + + onChange: function() { + this.callParent(); + this.autoSize(); + }, + + getSubTplData: function() { + var me = this, + value = me.getRawValue(), + isEmpty = me.emptyText && value.length < 1, + maxLength = me.maxLength, + placeholder; + + + + + if (me.enforceMaxLength) { + if (maxLength === Number.MAX_VALUE) { + maxLength = undefined; + } + } else { + maxLength = undefined; + } + + if (isEmpty) { + if (Ext.supports.Placeholder) { + placeholder = me.emptyText; + } else { + value = me.emptyText; + me.valueContainsPlaceholder = true; + } + } + + return Ext.apply(me.callParent(), { + maxLength : maxLength, + readOnly : me.readOnly, + placeholder : placeholder, + value : value, + fieldCls : me.fieldCls + ((isEmpty && (placeholder || value)) ? ' ' + me.emptyCls : '') + (me.allowBlank ? '' : ' ' + me.requiredCls) + }); + }, + + afterRender: function(){ + this.autoSize(); + this.callParent(); + }, + + onMouseDown: function(e){ + var me = this; + if(!me.hasFocus){ + me.mon(me.inputEl, 'mouseup', Ext.emptyFn, me, { single: true, preventDefault: true }); + } + }, + + + processRawValue: function(value) { + var me = this, + stripRe = me.stripCharsRe, + newValue; + + if (stripRe) { + newValue = value.replace(stripRe, ''); + if (newValue !== value) { + me.setRawValue(newValue); + value = newValue; + } + } + return value; + }, + + + onDisable: function(){ + this.callParent(); + if (Ext.isIE) { + this.inputEl.dom.unselectable = 'on'; + } + }, + + + onEnable: function(){ + this.callParent(); + if (Ext.isIE) { + this.inputEl.dom.unselectable = ''; + } + }, + + onKeyDown: function(e) { + this.fireEvent('keydown', this, e); + }, + + onKeyUp: function(e) { + this.fireEvent('keyup', this, e); + }, + + onKeyPress: function(e) { + this.fireEvent('keypress', this, e); + }, + + + reset : function(){ + this.callParent(); + this.applyEmptyText(); + }, + + applyEmptyText : function(){ + var me = this, + emptyText = me.emptyText, + isEmpty; + + if (me.rendered && emptyText) { + isEmpty = me.getRawValue().length < 1 && !me.hasFocus; + + if (Ext.supports.Placeholder) { + me.inputEl.dom.placeholder = emptyText; + } else if (isEmpty) { + me.setRawValue(emptyText); + me.valueContainsPlaceholder = true; + } + + + + if (isEmpty) { + me.inputEl.addCls(me.emptyCls); + } + + me.autoSize(); + } + }, + + afterFirstLayout: function() { + this.callParent(); + if (Ext.isIE && this.disabled) { + var el = this.inputEl; + if (el) { + el.dom.unselectable = 'on'; + } + } + }, + + + beforeFocus : function(){ + var me = this, + inputEl = me.inputEl, + emptyText = me.emptyText, + isEmpty; + + me.callParent(arguments); + if ((emptyText && !Ext.supports.Placeholder) && (inputEl.dom.value === me.emptyText && me.valueContainsPlaceholder)) { + me.setRawValue(''); + isEmpty = true; + inputEl.removeCls(me.emptyCls); + me.valueContainsPlaceholder = false; + } else if (Ext.supports.Placeholder) { + me.inputEl.removeCls(me.emptyCls); + } + if (me.selectOnFocus || isEmpty) { + + if (Ext.isWebKit) { + if (!me.inputFocusTask) { + me.inputFocusTask = new Ext.util.DelayedTask(me.focusInput, me); + } + me.inputFocusTask.delay(1); + } else { + inputEl.dom.select(); + } + } + }, + + focusInput: function(){ + var input = this.inputEl; + if (input) { + input = input.dom; + if (input) { + input.select(); + } + } + }, + + onFocus: function() { + var me = this; + me.callParent(arguments); + if (me.emptyText) { + me.autoSize(); + } + }, + + + postBlur : function(){ + this.callParent(arguments); + this.applyEmptyText(); + }, + + + filterKeys : function(e){ + + if (e.ctrlKey && !e.altKey) { + return; + } + var key = e.getKey(), + charCode = String.fromCharCode(e.getCharCode()); + + if((Ext.isGecko || Ext.isOpera) && (e.isNavKeyPress() || key === e.BACKSPACE || (key === e.DELETE && e.button === -1))){ + return; + } + + if((!Ext.isGecko && !Ext.isOpera) && e.isSpecialKey() && !charCode){ + return; + } + if(!this.maskRe.test(charCode)){ + e.stopEvent(); + } + }, + + getState: function() { + return this.addPropertyToState(this.callParent(), 'value'); + }, + + applyState: function(state) { + this.callParent(arguments); + if(state.hasOwnProperty('value')) { + this.setValue(state.value); + } + }, + + + getRawValue: function() { + var me = this, + v = me.callParent(); + if (v === me.emptyText && me.valueContainsPlaceholder) { + v = ''; + } + return v; + }, + + + setValue: function(value) { + var me = this, + inputEl = me.inputEl; + + if (inputEl && me.emptyText && !Ext.isEmpty(value)) { + inputEl.removeCls(me.emptyCls); + me.valueContainsPlaceholder = false; + } + + me.callParent(arguments); + + me.applyEmptyText(); + return me; + }, + + + getErrors: function(value) { + var me = this, + errors = me.callParent(arguments), + validator = me.validator, + vtype = me.vtype, + vtypes = Ext.form.field.VTypes, + regex = me.regex, + format = Ext.String.format, + msg, trimmed, isBlank; + + value = value || me.processRawValue(me.getRawValue()); + + if (Ext.isFunction(validator)) { + msg = validator.call(me, value); + if (msg !== true) { + errors.push(msg); + } + } + + trimmed = me.allowOnlyWhitespace ? value : Ext.String.trim(value); + + if (trimmed.length < 1 || (value === me.emptyText && me.valueContainsPlaceholder)) { + if (!me.allowBlank) { + errors.push(me.blankText); + } + + if (!me.validateBlank) { + return errors; + } + isBlank = true; + } + + + + if (!isBlank && value.length < me.minLength) { + errors.push(format(me.minLengthText, me.minLength)); + } + + if (value.length > me.maxLength) { + errors.push(format(me.maxLengthText, me.maxLength)); + } + + if (vtype) { + if (!vtypes[vtype](value, me)) { + errors.push(me.vtypeText || vtypes[vtype +'Text']); + } + } + + if (regex && !regex.test(value)) { + errors.push(me.regexText || me.invalidText); + } + + return errors; + }, + + + selectText : function(start, end){ + var me = this, + v = me.getRawValue(), + doFocus = true, + el = me.inputEl.dom, + undef, + range; + + if (v.length > 0) { + start = start === undef ? 0 : start; + end = end === undef ? v.length : end; + if (el.setSelectionRange) { + el.setSelectionRange(start, end); + } + else if(el.createTextRange) { + range = el.createTextRange(); + range.moveStart('character', start); + range.moveEnd('character', end - v.length); + range.select(); + } + doFocus = Ext.isGecko || Ext.isOpera; + } + if (doFocus) { + me.focus(); + } + }, + + + autoSize: function() { + var me = this; + if (me.grow && me.rendered) { + me.autoSizing = true; + me.updateLayout(); + } + }, + + afterComponentLayout: function() { + var me = this, + width; + + me.callParent(arguments); + if (me.autoSizing) { + width = me.inputEl.getWidth(); + if (width !== me.lastInputWidth) { + me.fireEvent('autosize', me, width); + me.lastInputWidth = width; + delete me.autoSizing; + } + } + }, + + onDestroy: function(){ + var me = this; + me.callParent(); + + if (me.inputFocusTask) { + me.inputFocusTask.cancel(); + me.inputFocusTask = null; + } + } +}); + + +Ext.define('Ext.layout.component.field.TextArea', { + extend: Ext.layout.component.field.Text , + alias: 'layout.textareafield', + + type: 'textareafield', + + canGrowWidth: false, + + naturalSizingProp: 'cols', + + beginLayout: function(ownerContext){ + this.callParent(arguments); + ownerContext.target.inputEl.setStyle('height', ''); + }, + + measureContentHeight: function (ownerContext) { + var me = this, + owner = me.owner, + height = me.callParent(arguments), + inputContext, inputEl, value, max, curWidth, calcHeight; + + if (owner.grow && !ownerContext.state.growHandled) { + inputContext = ownerContext.inputContext; + inputEl = owner.inputEl; + curWidth = inputEl.getWidth(true); + + + value = Ext.util.Format.htmlEncode(inputEl.dom.value) || ' '; + value += owner.growAppend; + + + value = value.replace(/\n/g, '
    '); + + + calcHeight = Ext.util.TextMetrics.measure(inputEl, value, curWidth).height + + inputContext.getBorderInfo().height + inputContext.getPaddingInfo().height; + + + calcHeight = Ext.Number.constrain(calcHeight, owner.growMin, owner.growMax); + inputContext.setHeight(calcHeight); + ownerContext.state.growHandled = true; + + + inputContext.domBlock(me, 'height'); + height = NaN; + } + return height; + } +}); + + +Ext.define('Ext.form.field.TextArea', { + extend: Ext.form.field.Text , + alias: ['widget.textareafield', 'widget.textarea'], + alternateClassName: 'Ext.form.TextArea', + + + + + + + + + + + + + + + + + fieldSubTpl: [ + '', + { + disableFormats: true + } + ], + + + growMin: 60, + + + growMax: 1000, + + + growAppend: '\n-', + + + cols: 20, + + + rows: 4, + + + enterIsSpecial: false, + + + preventScrollbars: false, + + + componentLayout: 'textareafield', + + setGrowSizePolicy: Ext.emptyFn, + + returnRe: /\r/g, + + inputCls: Ext.baseCSSPrefix + 'form-textarea', + + + getSubTplData: function() { + var me = this, + fieldStyle = me.getFieldStyle(), + ret = me.callParent(); + + if (me.grow) { + if (me.preventScrollbars) { + ret.fieldStyle = (fieldStyle||'') + ';overflow:hidden;height:' + me.growMin + 'px'; + } + } + + Ext.applyIf(ret, { + cols: me.cols, + rows: me.rows + }); + + return ret; + }, + + afterRender: function () { + var me = this; + + me.callParent(arguments); + + me.needsMaxCheck = me.enforceMaxLength && me.maxLength !== Number.MAX_VALUE && !Ext.supports.TextAreaMaxLength; + if (me.needsMaxCheck) { + me.inputEl.on('paste', me.onPaste, me); + } + }, + + + + + + + + transformRawValue: function(value){ + return this.stripReturns(value); + }, + + transformOriginalValue: function(value){ + return this.stripReturns(value); + }, + + getValue: function(){ + return this.stripReturns(this.callParent()); + }, + + valueToRaw: function(value){ + value = this.stripReturns(value); + return this.callParent([value]); + }, + + stripReturns: function(value){ + if (value) { + value = value.replace(this.returnRe, ''); + } + return value; + }, + + onPaste: function(e){ + var me = this; + if (!me.pasteTask) { + me.pasteTask = new Ext.util.DelayedTask(me.pasteCheck, me); + } + + me.pasteTask.delay(1); + }, + + pasteCheck: function(){ + var me = this, + value = me.getValue(), + max = me.maxLength; + + if (value.length > max) { + value = value.substr(0, max); + me.setValue(value); + } + }, + + + fireKey: function(e) { + var me = this, + key = e.getKey(), + value; + + if (e.isSpecialKey() && (me.enterIsSpecial || (key !== e.ENTER || e.hasModifier()))) { + me.fireEvent('specialkey', me, e); + } + + if (me.needsMaxCheck && key !== e.BACKSPACE && key !== e.DELETE && !e.isNavKeyPress() && !me.isCutCopyPasteSelectAll(e, key)) { + value = me.getValue(); + if (value.length >= me.maxLength) { + e.stopEvent(); + } + } + }, + + isCutCopyPasteSelectAll: function(e, key) { + if (e.ctrlKey) { + return key === e.A || key === e.C || key === e.V || key === e.X; + } + return false; + }, + + + autoSize: function() { + var me = this, + height; + + if (me.grow && me.rendered) { + me.updateLayout(); + height = me.inputEl.getHeight(); + if (height !== me.lastInputHeight) { + + me.fireEvent('autosize', me, height); + me.lastInputHeight = height; + } + } + }, + + + initAria: function() { + this.callParent(arguments); + this.getActionEl().dom.setAttribute('aria-multiline', true); + }, + + beforeDestroy: function(){ + var task = this.pasteTask; + if (task) { + task.cancel(); + this.pasteTask = null; + } + this.callParent(); + } +}); + + +Ext.define('Ext.form.field.Display', { + extend: Ext.form.field.Base , + alias: 'widget.displayfield', + + alternateClassName: ['Ext.form.DisplayField', 'Ext.form.Display'], + fieldSubTpl: [ + '
    style="{fieldStyle}"', + ' class="{fieldCls}">{value}
    ', + { + compiled: true, + disableFormats: true + } + ], + + + fieldCls: Ext.baseCSSPrefix + 'form-display-field', + + + htmlEncode: false, + + + + + + validateOnChange: false, + + initEvents: Ext.emptyFn, + + submitValue: false, + + isDirty: function(){ + return false; + }, + + isValid: function() { + return true; + }, + + validate: function() { + return true; + }, + + getRawValue: function() { + return this.rawValue; + }, + + setRawValue: function(value) { + var me = this, + display; + + value = Ext.value(value, ''); + me.rawValue = value; + if (me.rendered) { + me.inputEl.dom.innerHTML = me.getDisplayValue(); + me.updateLayout(); + } + return value; + }, + + + getDisplayValue: function() { + var me = this, + value = this.getRawValue(), + display; + if (me.renderer) { + display = me.renderer.call(me.scope || me, value, me); + } else { + display = me.htmlEncode ? Ext.util.Format.htmlEncode(value) : value; + } + return display; + }, + + getSubTplData: function() { + var ret = this.callParent(arguments); + + ret.value = this.getDisplayValue(); + + return ret; + } + + + + + + + +}); + + +Ext.define('Ext.layout.container.Anchor', { + + + + alias: 'layout.anchor', + extend: Ext.layout.container.Auto , + alternateClassName: 'Ext.layout.AnchorLayout', + + + + type: 'anchor', + + + + + defaultAnchor: '100%', + + parseAnchorRE: /^(r|right|b|bottom)$/i, + + manageOverflow: true, + + beginLayoutCycle: function (ownerContext) { + var me = this, + dimensions = 0, + anchorSpec, childContext, childItems, i, length, target; + + me.callParent(arguments); + + childItems = ownerContext.childItems; + length = childItems.length; + + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + anchorSpec = childContext.target.anchorSpec; + + if (anchorSpec) { + if (childContext.widthModel.calculated && anchorSpec.right) { + dimensions |= 1; + } + if (childContext.heightModel.calculated && anchorSpec.bottom) { + dimensions |= 2; + } + + if (dimensions == 3) { + break; + } + } + } + + ownerContext.anchorDimensions = dimensions; + + }, + + calculateItems: function (ownerContext, containerSize) { + var me = this, + childItems = ownerContext.childItems, + length = childItems.length, + gotHeight = containerSize.gotHeight, + gotWidth = containerSize.gotWidth, + ownerHeight = containerSize.height, + ownerWidth = containerSize.width, + knownDimensions = (gotWidth ? 1 : 0) | (gotHeight ? 2 : 0), + anchorDimensions = ownerContext.anchorDimensions, + anchorSpec, childContext, childMargins, height, i, width; + + if (!anchorDimensions) { + return true; + } + + for (i = 0; i < length; i++) { + childContext = childItems[i]; + childMargins = childContext.getMarginInfo(); + anchorSpec = childContext.target.anchorSpec; + + + + + + if (gotWidth && childContext.widthModel.calculated) { + width = anchorSpec.right(ownerWidth) - childMargins.width; + width = me.adjustWidthAnchor(width, childContext); + + childContext.setWidth(width); + } + + + if (gotHeight && childContext.heightModel.calculated) { + height = anchorSpec.bottom(ownerHeight) - childMargins.height; + height = me.adjustHeightAnchor(height, childContext); + + childContext.setHeight(height); + } + } + + + return (knownDimensions & anchorDimensions) === anchorDimensions; + }, + + + + anchorFactory: { + offset: function (delta) { + return function(v) { + return v + delta; + }; + }, + ratio: function (ratio) { + return function(v) { + return Math.floor(v * ratio); + }; + }, + standard: function (diff) { + return function(v) { + return v - diff; + }; + } + }, + + parseAnchor: function(a, start, cstart) { + if (a && a != 'none') { + var factory = this.anchorFactory, + delta; + + if (this.parseAnchorRE.test(a)) { + return factory.standard(cstart - start); + } + if (a.indexOf('%') != -1) { + return factory.ratio(parseFloat(a.replace('%', '')) * 0.01); + } + delta = parseInt(a, 10); + if (!isNaN(delta)) { + return factory.offset(delta); + } + } + return null; + }, + + + adjustWidthAnchor: function(value, childContext) { + return value; + }, + + + adjustHeightAnchor: function(value, childContext) { + return value; + }, + + configureItem: function(item) { + var me = this, + owner = me.owner, + anchor= item.anchor, + anchorsArray, + anchorWidth, + anchorHeight; + + me.callParent(arguments); + + if (!item.anchor && item.items && !Ext.isNumber(item.width) && !(Ext.isIE6 && Ext.isStrict)) { + item.anchor = anchor = me.defaultAnchor; + } + + + if (owner.anchorSize) { + if (typeof owner.anchorSize == 'number') { + anchorWidth = owner.anchorSize; + } else { + anchorWidth = owner.anchorSize.width; + anchorHeight = owner.anchorSize.height; + } + } else { + anchorWidth = owner.initialConfig.width; + anchorHeight = owner.initialConfig.height; + } + + if (anchor) { + + anchorsArray = anchor.split(' '); + item.anchorSpec = { + right: me.parseAnchor(anchorsArray[0], item.initialConfig.width, anchorWidth), + bottom: me.parseAnchor(anchorsArray[1], item.initialConfig.height, anchorHeight) + }; + } + }, + + sizePolicy: { + $: { + readsWidth: 1, + readsHeight: 1, + setsWidth: 0, + setsHeight: 0 + }, + b: { + readsWidth: 1, + readsHeight: 0, + setsWidth: 0, + setsHeight: 1 + }, + r: { + $: { + readsWidth: 0, + readsHeight: 1, + setsWidth: 1, + setsHeight: 0 + }, + b: { + readsWidth: 0, + readsHeight: 0, + setsWidth: 1, + setsHeight: 1 + } + } + }, + + getItemSizePolicy: function (item) { + var anchorSpec = item.anchorSpec, + key = '$', + policy = this.sizePolicy, + sizeModel; + + if (anchorSpec) { + sizeModel = this.owner.getSizeModel(); + if (anchorSpec.right && !sizeModel.width.shrinkWrap) { + policy = policy.r; + } + if (anchorSpec.bottom && !sizeModel.height.shrinkWrap) { + key = 'b'; + } + } + + return policy[key]; + } +}); + + +Ext.define('Ext.window.MessageBox', { + extend: Ext.window.Window , + + + + + + + + + + + + + alias: 'widget.messagebox', + + + OK : 1, + + YES : 2, + + NO : 4, + + CANCEL : 8, + + OKCANCEL : 9, + + YESNO : 6, + + YESNOCANCEL : 14, + + INFO : Ext.baseCSSPrefix + 'message-box-info', + + WARNING : Ext.baseCSSPrefix + 'message-box-warning', + + QUESTION : Ext.baseCSSPrefix + 'message-box-question', + + ERROR : Ext.baseCSSPrefix + 'message-box-error', + + + hideMode: 'offsets', + closeAction: 'hide', + resizable: false, + title: ' ', + + defaultMinWidth: 250, + defaultMaxWidth: 600, + defaultMinHeight: 110, + defaultMaxHeight: 500, + constrain: true, + + cls: [Ext.baseCSSPrefix + 'message-box', Ext.baseCSSPrefix + 'hide-offsets'], + + layout: { + type: 'vbox', + align: 'stretch' + }, + + + shrinkWrapDock: true, + + + defaultTextHeight : 75, + + minProgressWidth : 250, + + minPromptWidth: 250, + + + buttonText: { + ok: 'OK', + yes: 'Yes', + no: 'No', + cancel: 'Cancel' + }, + + + buttonIds: [ + 'ok', 'yes', 'no', 'cancel' + ], + + + titleText: { + confirm: 'Confirm', + prompt: 'Prompt', + wait: 'Loading...', + alert: 'Attention' + }, + + + iconHeight: 35, + iconWidth: 50, + + makeButton: function(btnIdx) { + var btnId = this.buttonIds[btnIdx]; + return new Ext.button.Button({ + handler: this.btnCallback, + itemId: btnId, + scope: this, + text: this.buttonText[btnId], + minWidth: 75 + }); + }, + + btnCallback: function(btn) { + var me = this, + value, + field; + + if (me.cfg.prompt || me.cfg.multiline) { + if (me.cfg.multiline) { + field = me.textArea; + } else { + field = me.textField; + } + value = field.getValue(); + field.reset(); + } + + + btn.blur(); + me.hide(); + me.userCallback(btn.itemId, value, me.cfg); + }, + + hide: function() { + var me = this, + cls = me.cfg.cls; + + me.dd.endDrag(); + me.progressBar.reset(); + if (cls) { + me.removeCls(cls); + } + me.callParent(arguments); + }, + + initComponent: function() { + var me = this, + baseId = me.id, + i, button; + + me.title = ' '; + + me.minWidth = me.defaultMinWidth; + me.maxWidth = me.defaultMaxWidth; + me.minHeight = me.defaultMinHeight; + me.maxHeight = me.defaultMaxHeight; + + me.topContainer = new Ext.container.Container({ + layout: 'hbox', + padding: 10, + style: { + overflow: 'hidden' + }, + items: [ + me.iconComponent = new Ext.Component({ + width: me.iconWidth, + height: me.iconHeight + }), + me.promptContainer = new Ext.container.Container({ + flex: 1, + layout: 'anchor', + items: [ + me.msg = new Ext.form.field.Display({ + id: baseId + '-displayfield', + cls: me.baseCls + '-text' + }), + me.textField = new Ext.form.field.Text({ + id: baseId + '-textfield', + anchor: '100%', + enableKeyEvents: true, + listeners: { + keydown: me.onPromptKey, + scope: me + } + }), + me.textArea = new Ext.form.field.TextArea({ + id: baseId + '-textarea', + anchor: '100%', + height: 75 + }) + ] + }) + ] + }); + me.progressBar = new Ext.ProgressBar({ + id: baseId + '-progressbar', + margins: '0 10 10 10' + }); + + me.items = [me.topContainer, me.progressBar]; + + + me.msgButtons = []; + for (i = 0; i < 4; i++) { + button = me.makeButton(i); + me.msgButtons[button.itemId] = button; + me.msgButtons.push(button); + } + me.bottomTb = new Ext.toolbar.Toolbar({ + id: baseId + '-toolbar', + ui: 'footer', + dock: 'bottom', + layout: { + pack: 'center' + }, + items: [ + me.msgButtons[0], + me.msgButtons[1], + me.msgButtons[2], + me.msgButtons[3] + ] + }); + me.dockedItems = [me.bottomTb]; + me.on('close', me.onClose, me); + me.callParent(); + }, + + onClose: function(){ + var btn = this.header.child('[type=close]'); + + btn.itemId = 'cancel'; + this.btnCallback(btn); + delete btn.itemId; + }, + + onPromptKey: function(textField, e) { + var me = this, + blur; + + if (e.keyCode === Ext.EventObject.RETURN || e.keyCode === 10) { + if (me.msgButtons.ok.isVisible()) { + blur = true; + me.msgButtons.ok.handler.call(me, me.msgButtons.ok); + } else if (me.msgButtons.yes.isVisible()) { + me.msgButtons.yes.handler.call(me, me.msgButtons.yes); + blur = true; + } + + if (blur) { + me.textField.blur(); + } + } + }, + + reconfigure: function(cfg) { + var me = this, + buttons = 0, + hideToolbar = true, + oldButtonText = me.buttonText, + width, height, i, textArea, textField, + msg, progressBar, msgButtons; + + + me.updateButtonText(); + + cfg = cfg || {}; + me.cfg = cfg; + if (cfg.width) { + width = cfg.width; + } + + if (cfg.height) { + height = cfg.height; + } + + me.minWidth = cfg.minWidth || me.defaultMinWidth; + me.maxWidth = cfg.maxWidth || me.defaultMaxWidth; + me.minHeight = cfg.minHeight || me.defaultMinHeight; + me.maxHeight = cfg.maxHeight || me.defaultMaxHeight; + + + delete me.defaultFocus; + if (cfg.defaultFocus) { + me.defaultFocus = cfg.defaultFocus; + } + + + me.animateTarget = cfg.animateTarget || undefined; + + + me.modal = cfg.modal !== false; + + + me.setTitle(cfg.title || ''); + me.setIconCls(cfg.iconCls || ''); + + + if (Ext.isObject(cfg.buttons)) { + me.buttonText = cfg.buttons; + buttons = 0; + } else { + me.buttonText = cfg.buttonText || me.buttonText; + buttons = Ext.isNumber(cfg.buttons) ? cfg.buttons : 0; + } + + + + buttons = buttons | me.updateButtonText(); + + + me.buttonText = oldButtonText; + + + + Ext.suspendLayouts(); + delete me.width; + delete me.height; + if (width || height) { + if (width) { + me.setWidth(width); + } + + if (height) { + me.setHeight(height); + } + } + me.hidden = false; + if (!me.rendered) { + me.render(Ext.getBody()); + } + + + me.closable = cfg.closable !== false && !cfg.wait; + me.header.child('[type=close]').setVisible(me.closable); + + + if (!cfg.title && !me.closable && !cfg.iconCls) { + me.header.hide(); + } else { + me.header.show(); + } + + + me.liveDrag = !cfg.proxyDrag; + + + me.userCallback = Ext.Function.bind(cfg.callback ||cfg.fn || Ext.emptyFn, cfg.scope || Ext.global); + + + me.setIcon(cfg.icon, cfg.iconWidth, cfg.iconHeight); + + + msg = me.msg; + if (cfg.msg) { + msg.setValue(cfg.msg); + msg.show(); + } else { + msg.hide(); + } + + + textArea = me.textArea; + textField = me.textField; + if (cfg.prompt || cfg.multiline) { + me.multiline = cfg.multiline; + if (cfg.multiline) { + textArea.setValue(cfg.value); + textArea.setHeight(cfg.defaultTextHeight || me.defaultTextHeight); + textArea.show(); + textField.hide(); + me.defaultFocus = textArea; + } else { + textField.setValue(cfg.value); + textArea.hide(); + textField.show(); + me.defaultFocus = textField; + } + } else { + textArea.hide(); + textField.hide(); + } + + + progressBar = me.progressBar; + if (cfg.progress || cfg.wait) { + progressBar.show(); + me.updateProgress(0, cfg.progressText); + if(cfg.wait === true){ + progressBar.wait(cfg.waitConfig); + } + } else { + progressBar.hide(); + } + + + msgButtons = me.msgButtons; + for (i = 0; i < 4; i++) { + if (buttons & Math.pow(2, i)) { + + + if (!me.defaultFocus) { + me.defaultFocus = msgButtons[i]; + } + msgButtons[i].show(); + hideToolbar = false; + } else { + msgButtons[i].hide(); + } + } + + + if (hideToolbar) { + me.bottomTb.hide(); + } else { + me.bottomTb.show(); + } + Ext.resumeLayouts(true); + }, + + + updateButtonText: function() { + var me = this, + buttonText = me.buttonText, + buttons = 0, + btnId, + btn; + + for (btnId in buttonText) { + if (buttonText.hasOwnProperty(btnId)) { + btn = me.msgButtons[btnId]; + if (btn) { + if (me.cfg && me.cfg.buttonText) { + buttons = buttons | Math.pow(2, Ext.Array.indexOf(me.buttonIds, btnId)); + } + if (btn.text != buttonText[btnId]) { + btn.setText(buttonText[btnId]); + } + } + } + } + return buttons; + }, + + + show: function(cfg) { + var me = this, + visibleFocusables; + + + if (Ext.AbstractComponent.layoutSuspendCount) { + Ext.on({ + resumelayouts: function() { + me.show(cfg); + }, + single: true + }); + return me; + } + + me.reconfigure(cfg); + if (cfg.cls) { + me.addCls(cfg.cls); + } + + + + visibleFocusables = me.query('textfield:not([hidden]),textarea:not([hidden]),button:not([hidden])'); + me.preventFocusOnActivate = !visibleFocusables.length; + + + + me.hidden = true; + me.callParent(); + return me; + }, + + onShow: function() { + this.callParent(arguments); + this.center(); + }, + + updateText: function(text) { + this.msg.setValue(text); + }, + + + setIcon : function(icon, width, height) { + var me = this, + iconCmp = me.iconComponent, + cls = me.messageIconCls; + + if (cls) { + iconCmp.removeCls(cls); + } + + if (icon) { + iconCmp.show(); + iconCmp.setSize(width || me.iconWidth, height || me.iconHeight); + iconCmp.addCls(Ext.baseCSSPrefix + 'dlg-icon'); + iconCmp.addCls(me.messageIconCls = icon); + } else { + iconCmp.removeCls(Ext.baseCSSPrefix + 'dlg-icon'); + iconCmp.hide(); + } + return me; + }, + + + updateProgress : function(value, progressText, msg){ + this.progressBar.updateProgress(value, progressText); + if (msg){ + this.updateText(msg); + } + return this; + }, + + onEsc: function() { + if (this.closable !== false) { + this.callParent(arguments); + } + }, + + + confirm: function(cfg, msg, fn, scope) { + if (Ext.isString(cfg)) { + cfg = { + title: cfg, + icon: this.QUESTION, + msg: msg, + buttons: this.YESNO, + callback: fn, + scope: scope + }; + } + return this.show(cfg); + }, + + + prompt : function(cfg, msg, fn, scope, multiline, value){ + if (Ext.isString(cfg)) { + cfg = { + prompt: true, + title: cfg, + minWidth: this.minPromptWidth, + msg: msg, + buttons: this.OKCANCEL, + callback: fn, + scope: scope, + multiline: multiline, + value: value + }; + } + return this.show(cfg); + }, + + + wait : function(cfg, title, config){ + if (Ext.isString(cfg)) { + cfg = { + title : title, + msg : cfg, + closable: false, + wait: true, + modal: true, + minWidth: this.minProgressWidth, + waitConfig: config + }; + } + return this.show(cfg); + }, + + + alert: function(cfg, msg, fn, scope) { + if (Ext.isString(cfg)) { + cfg = { + title : cfg, + msg : msg, + buttons: this.OK, + fn: fn, + scope : scope, + minWidth: this.minWidth + }; + } + return this.show(cfg); + }, + + + progress : function(cfg, msg, progressText){ + if (Ext.isString(cfg)) { + cfg = { + title: cfg, + msg: msg, + progress: true, + progressText: progressText + }; + } + return this.show(cfg); + } +}, function() { + + Ext.MessageBox = Ext.Msg = new this(); +}); + + +Ext.define('Ext.form.Basic', { + extend: Ext.util.Observable , + alternateClassName: 'Ext.form.BasicForm', + + + + + constructor: function(owner, config) { + var me = this, + reader, + api, + fn; + + + me.owner = owner; + + me.checkValidityTask = new Ext.util.DelayedTask(me.checkValidity, me); + me.checkDirtyTask = new Ext.util.DelayedTask(me.checkDirty, me); + + + + + me.monitor = new Ext.container.Monitor({ + selector: '[isFormField]', + scope: me, + addHandler: me.onFieldAdd, + removeHandler: me.onFieldRemove + }); + me.monitor.bind(owner); + + Ext.apply(me, config); + + + if (Ext.isString(me.paramOrder)) { + me.paramOrder = me.paramOrder.split(/[\s,|]/); + } + + if (me.api) { + api = me.api = Ext.apply({}, me.api); + for (fn in api) { + if (api.hasOwnProperty(fn)) { + api[fn] = Ext.direct.Manager.parseMethod(api[fn]); + } + } + } + + reader = me.reader; + if (reader && !reader.isReader) { + if (typeof reader === 'string') { + reader = { + type: reader + }; + } + me.reader = Ext.createByAlias('reader.' + reader.type, reader); + } + + reader = me.errorReader; + if (reader && !reader.isReader) { + if (typeof reader === 'string') { + reader = { + type: reader + }; + } + me.errorReader = Ext.createByAlias('reader.' + reader.type, reader); + } + + me.addEvents( + + 'beforeaction', + + 'actionfailed', + + 'actioncomplete', + + 'validitychange', + + 'dirtychange' + ); + me.callParent(); + }, + + + initialize : function() { + this.initialized = true; + this.onValidityChange(!this.hasInvalidField()); + }, + + + + + + + + + + + + + + timeout: 30, + + + + + + + paramsAsHash: false, + + + + waitTitle: 'Please Wait...', + + + + trackResetOnLoad: false, + + + + + + + + + + wasDirty: false, + + + + destroy: function() { + var me = this, + mon = me.monitor; + + if (mon) { + mon.unbind(); + me.monitor = null; + } + me.clearListeners(); + me.checkValidityTask.cancel(); + me.checkDirtyTask.cancel(); + }, + + onFieldAdd: function(field){ + var me = this; + + me.mon(field, 'validitychange', me.checkValidityDelay, me); + me.mon(field, 'dirtychange', me.checkDirtyDelay, me); + if (me.initialized) { + me.checkValidityDelay(); + } + }, + + onFieldRemove: function(field){ + var me = this; + + me.mun(field, 'validitychange', me.checkValidityDelay, me); + me.mun(field, 'dirtychange', me.checkDirtyDelay, me); + if (me.initialized) { + me.checkValidityDelay(); + } + }, + + + getFields: function() { + return this.monitor.getItems(); + }, + + + getBoundItems: function() { + var boundItems = this._boundItems; + + if (!boundItems || boundItems.getCount() === 0) { + boundItems = this._boundItems = new Ext.util.MixedCollection(); + boundItems.addAll(this.owner.query('[formBind]')); + } + + return boundItems; + }, + + + hasInvalidField: function() { + return !!this.getFields().findBy(function(field) { + var preventMark = field.preventMark, + isValid; + field.preventMark = true; + isValid = field.isValid(); + field.preventMark = preventMark; + return !isValid; + }); + }, + + + isValid: function() { + var me = this, + invalid; + Ext.suspendLayouts(); + invalid = me.getFields().filterBy(function(field) { + return !field.validate(); + }); + Ext.resumeLayouts(true); + return invalid.length < 1; + }, + + + checkValidity: function() { + var me = this, + valid = !me.hasInvalidField(); + if (valid !== me.wasValid) { + me.onValidityChange(valid); + me.fireEvent('validitychange', me, valid); + me.wasValid = valid; + } + }, + + checkValidityDelay: function(){ + this.checkValidityTask.delay(10); + }, + + + onValidityChange: function(valid) { + var boundItems = this.getBoundItems(), + items, i, iLen, cmp; + + if (boundItems) { + items = boundItems.items; + iLen = items.length; + + for (i = 0; i < iLen; i++) { + cmp = items[i]; + + if (cmp.disabled === valid) { + cmp.setDisabled(!valid); + } + } + } + }, + + + isDirty: function() { + return !!this.getFields().findBy(function(f) { + return f.isDirty(); + }); + }, + + checkDirtyDelay: function(){ + this.checkDirtyTask.delay(10); + }, + + + checkDirty: function() { + var dirty = this.isDirty(); + if (dirty !== this.wasDirty) { + this.fireEvent('dirtychange', this, dirty); + this.wasDirty = dirty; + } + }, + + + hasUpload: function() { + return !!this.getFields().findBy(function(f) { + return f.isFileUpload(); + }); + }, + + + doAction: function(action, options) { + if (Ext.isString(action)) { + action = Ext.ClassManager.instantiateByAlias('formaction.' + action, Ext.apply({}, options, {form: this})); + } + if (this.fireEvent('beforeaction', this, action) !== false) { + this.beforeAction(action); + Ext.defer(action.run, 100, action); + } + return this; + }, + + + submit: function(options) { + options = options || {}; + var me = this, + action; + + if (options.standardSubmit || me.standardSubmit) { + action = 'standardsubmit'; + } else { + action = me.api ? 'directsubmit' : 'submit'; + } + + return me.doAction(action, options); + }, + + + load: function(options) { + return this.doAction(this.api ? 'directload' : 'load', options); + }, + + + updateRecord: function(record) { + record = record || this._record; + if (!record) { + return this; + } + + var fields = record.fields.items, + values = this.getFieldValues(), + obj = {}, + i = 0, + len = fields.length, + name; + + for (; i < len; ++i) { + name = fields[i].name; + + if (values.hasOwnProperty(name)) { + obj[name] = values[name]; + } + } + + record.beginEdit(); + record.set(obj); + record.endEdit(); + + return this; + }, + + + loadRecord: function(record) { + this._record = record; + return this.setValues(record.getData()); + }, + + + getRecord: function() { + return this._record; + }, + + + beforeAction: function(action) { + var me = this, + waitMsg = action.waitMsg, + maskCls = Ext.baseCSSPrefix + 'mask-loading', + fields = me.getFields().items, + f, + fLen = fields.length, + field, waitMsgTarget; + + + for (f = 0; f < fLen; f++) { + field = fields[f]; + + if (field.isFormField && field.syncValue) { + field.syncValue(); + } + } + + if (waitMsg) { + waitMsgTarget = me.waitMsgTarget; + if (waitMsgTarget === true) { + me.owner.el.mask(waitMsg, maskCls); + } else if (waitMsgTarget) { + waitMsgTarget = me.waitMsgTarget = Ext.get(waitMsgTarget); + waitMsgTarget.mask(waitMsg, maskCls); + } else { + me.floatingAncestor = me.owner.up('[floating]'); + + + + + + + + + if (me.floatingAncestor) { + me.savePreventFocusOnActivate = me.floatingAncestor.preventFocusOnActivate; + me.floatingAncestor.preventFocusOnActivate = true; + } + Ext.MessageBox.wait(waitMsg, action.waitTitle || me.waitTitle); + } + } + }, + + + afterAction: function(action, success) { + var me = this; + if (action.waitMsg) { + var messageBox = Ext.MessageBox, + waitMsgTarget = me.waitMsgTarget; + if (waitMsgTarget === true) { + me.owner.el.unmask(); + } else if (waitMsgTarget) { + waitMsgTarget.unmask(); + } else { + messageBox.hide(); + } + } + + if (me.floatingAncestor) { + me.floatingAncestor.preventFocusOnActivate = me.savePreventFocusOnActivate; + } + if (success) { + if (action.reset) { + me.reset(); + } + Ext.callback(action.success, action.scope || action, [me, action]); + me.fireEvent('actioncomplete', me, action); + } else { + Ext.callback(action.failure, action.scope || action, [me, action]); + me.fireEvent('actionfailed', me, action); + } + }, + + + + findField: function(id) { + return this.getFields().findBy(function(f) { + return f.id === id || f.getName() === id; + }); + }, + + + + markInvalid: function(errors) { + var me = this, + e, eLen, error, value, + key; + + function mark(fieldId, msg) { + var field = me.findField(fieldId); + if (field) { + field.markInvalid(msg); + } + } + + if (Ext.isArray(errors)) { + eLen = errors.length; + + for (e = 0; e < eLen; e++) { + error = errors[e]; + mark(error.id, error.msg); + } + } else if (errors instanceof Ext.data.Errors) { + eLen = errors.items.length; + for (e = 0; e < eLen; e++) { + error = errors.items[e]; + + mark(error.field, error.message); + } + } else { + for (key in errors) { + if (errors.hasOwnProperty(key)) { + value = errors[key]; + mark(key, value, errors); + } + } + } + return this; + }, + + + setValues: function(values) { + var me = this, + v, vLen, val, field; + + function setVal(fieldId, val) { + var field = me.findField(fieldId); + if (field) { + field.setValue(val); + if (me.trackResetOnLoad) { + field.resetOriginalValue(); + } + } + } + + + + Ext.suspendLayouts(); + if (Ext.isArray(values)) { + + vLen = values.length; + + for (v = 0; v < vLen; v++) { + val = values[v]; + + setVal(val.id, val.value); + } + } else { + + Ext.iterate(values, setVal); + } + Ext.resumeLayouts(true); + return this; + }, + + + getValues: function(asString, dirtyOnly, includeEmptyText, useDataValues) { + var values = {}, + fields = this.getFields().items, + f, + fLen = fields.length, + isArray = Ext.isArray, + field, data, val, bucket, name; + + for (f = 0; f < fLen; f++) { + field = fields[f]; + + if (!dirtyOnly || field.isDirty()) { + data = field[useDataValues ? 'getModelData' : 'getSubmitData'](includeEmptyText); + + if (Ext.isObject(data)) { + for (name in data) { + if (data.hasOwnProperty(name)) { + val = data[name]; + + if (includeEmptyText && val === '') { + val = field.emptyText || ''; + } + + if (values.hasOwnProperty(name)) { + bucket = values[name]; + + if (!isArray(bucket)) { + bucket = values[name] = [bucket]; + } + + if (isArray(val)) { + values[name] = bucket.concat(val); + } else { + bucket.push(val); + } + } else { + values[name] = val; + } + } + } + } + } + } + + if (asString) { + values = Ext.Object.toQueryString(values); + } + return values; + }, + + + getFieldValues: function(dirtyOnly) { + return this.getValues(false, dirtyOnly, false, true); + }, + + + clearInvalid: function() { + Ext.suspendLayouts(); + + var me = this, + fields = me.getFields().items, + f, + fLen = fields.length; + + for (f = 0; f < fLen; f++) { + fields[f].clearInvalid(); + } + + Ext.resumeLayouts(true); + return me; + }, + + + reset: function(resetRecord) { + Ext.suspendLayouts(); + + var me = this, + fields = me.getFields().items, + f, + fLen = fields.length; + + for (f = 0; f < fLen; f++) { + fields[f].reset(); + } + + Ext.resumeLayouts(true); + + if (resetRecord === true) { + delete me._record; + } + return me; + }, + + + applyToFields: function(obj) { + var fields = this.getFields().items, + f, + fLen = fields.length; + + for (f = 0; f < fLen; f++) { + Ext.apply(fields[f], obj); + } + + return this; + }, + + + applyIfToFields: function(obj) { + var fields = this.getFields().items, + f, + fLen = fields.length; + + for (f = 0; f < fLen; f++) { + Ext.applyIf(fields[f], obj); + } + + return this; + } +}); + + +Ext.define('Ext.form.FieldAncestor', { + + + + + + + + + xhooks: { + initHierarchyState: function(hierarchyState) { + if (this.fieldDefaults) { + if (hierarchyState.fieldDefaults) { + hierarchyState.fieldDefaults = Ext.apply(Ext.Object.chain(hierarchyState.fieldDefaults), this.fieldDefaults); + } else { + hierarchyState.fieldDefaults = this.fieldDefaults; + } + } + } + }, + + + initFieldAncestor: function() { + var me = this; + + me.addEvents( + + 'fieldvaliditychange', + + + 'fielderrorchange' + ); + + + + + me.monitor = new Ext.container.Monitor({ + scope: me, + addHandler: me.onChildFieldAdd, + removeHandler: me.onChildFieldRemove + }); + me.initFieldDefaults(); + }, + + initMonitor: function() { + this.monitor.bind(this); + }, + + onChildFieldAdd: function(field) { + var me = this; + me.mon(field, 'errorchange', me.handleFieldErrorChange, me); + me.mon(field, 'validitychange', me.handleFieldValidityChange, me); + }, + + onChildFieldRemove: function(field) { + var me = this; + me.mun(field, 'errorchange', me.handleFieldErrorChange, me); + me.mun(field, 'validitychange', me.handleFieldValidityChange, me); + }, + + + initFieldDefaults: function() { + if (!this.fieldDefaults) { + this.fieldDefaults = {}; + } + }, + + + handleFieldValidityChange: function(field, isValid) { + var me = this; + if (field !== me) { + me.fireEvent('fieldvaliditychange', me, field, isValid); + me.onFieldValidityChange(field, isValid); + } + }, + + + handleFieldErrorChange: function(labelable, activeError) { + var me = this; + if (labelable !== me) { + me.fireEvent('fielderrorchange', me, labelable, activeError); + me.onFieldErrorChange(labelable, activeError); + } + }, + + + onFieldValidityChange: Ext.emptyFn, + + + onFieldErrorChange: Ext.emptyFn, + + beforeDestroy: function(){ + this.monitor.unbind(); + this.callParent(); + } + +}); + + +Ext.define('Ext.layout.component.field.FieldContainer', { + + + + extend: Ext.layout.component.field.Field , + + alias: 'layout.fieldcontainer', + + + + type: 'fieldcontainer', + + waitForOuterHeightInDom: true, + waitForOuterWidthInDom: true, + + beginLayout: function(ownerContext) { + var owner = this.owner; + this.callParent(arguments); + + + ownerContext.hasRawContent = true; + owner.bodyEl.setStyle('height', ''); + owner.containerEl.setStyle('height', ''); + ownerContext.containerElContext = ownerContext.getEl('containerEl'); + }, + + measureContentHeight: function (ownerContext) { + + + + return ownerContext.hasDomProp('containerLayoutDone') ? this.callParent(arguments) : NaN; + }, + + measureContentWidth: function (ownerContext) { + + return ownerContext.hasDomProp('containerLayoutDone') ? this.callParent(arguments) : NaN; + }, + + publishInnerWidth: function (ownerContext, width) { + var bodyContext = ownerContext.bodyCellContext, + innerWidth = bodyContext.el.getWidth(); + + bodyContext.setWidth(innerWidth, false); + ownerContext.containerElContext.setWidth(innerWidth, false); + }, + + publishInnerHeight: function (ownerContext, height) { + var bodyContext = ownerContext.bodyCellContext, + containerElContext = ownerContext.containerElContext; + + height -= this.measureLabelErrorHeight(ownerContext); + bodyContext.setHeight(height); + containerElContext.setHeight(height); + } +}); + + +Ext.define('Ext.form.FieldContainer', { + extend: Ext.container.Container , + mixins: { + labelable: Ext.form.Labelable , + fieldAncestor: Ext.form.FieldAncestor + }, + + + alias: 'widget.fieldcontainer', + + componentLayout: 'fieldcontainer', + + componentCls: Ext.baseCSSPrefix + 'form-fieldcontainer', + + + + customOverflowEl: 'containerEl', + + childEls: [ + 'containerEl' + ], + + + + + combineLabels: false, + + + + labelConnector: ', ', + + + + combineErrors: false, + + maskOnDisable: false, + + fieldSubTpl: '
    {%this.renderContainer(out,values)%}
    ', + + initComponent: function() { + var me = this; + + + me.initLabelable(); + me.initFieldAncestor(); + + me.callParent(); + me.initMonitor(); + }, + + getOverflowEl: function(){ + return this.containerEl; + }, + + + onAdd: function(labelable) { + var me = this; + + + + + if (Ext.isGecko && me.layout.type === 'absolute' && !me.hideLabel && me.labelAlign !== 'top') { + labelable.x += (me.labelWidth + me.labelPad); + } + me.callParent(arguments); + me.updateLabel(); + }, + + + onRemove: function(labelable, isDestroying) { + var me = this; + me.callParent(arguments); + if (!isDestroying) { + me.updateLabel(); + } + }, + + initRenderTpl: function() { + var me = this; + if (!me.hasOwnProperty('renderTpl')) { + me.renderTpl = me.getTpl('labelableRenderTpl'); + } + return me.callParent(); + }, + + initRenderData: function() { + var me = this, + data = me.callParent(); + + data.containerElCls = me.containerElCls; + return Ext.applyIf(data, me.getLabelableRenderData()); + }, + + + getFieldLabel: function() { + var label = this.fieldLabel || ''; + if (!label && this.combineLabels) { + label = Ext.Array.map(this.query('[isFieldLabelable]'), function(field) { + return field.getFieldLabel(); + }).join(this.labelConnector); + } + return label; + }, + + getSubTplData: function() { + var ret = this.initRenderData(); + + Ext.apply(ret, this.subTplData); + return ret; + }, + + getSubTplMarkup: function() { + var me = this, + tpl = me.getTpl('fieldSubTpl'), + html; + + if (!tpl.renderContent) { + me.setupRenderTpl(tpl); + } + + html = tpl.apply(me.getSubTplData()); + return html; + }, + + + updateLabel: function() { + var me = this, + label = me.labelEl; + + if (label) { + me.setFieldLabel(me.getFieldLabel()); + } + }, + + + + onFieldErrorChange: function(field, activeError) { + if (this.combineErrors) { + var me = this, + oldError = me.getActiveError(), + invalidFields = Ext.Array.filter(me.query('[isFormField]'), function(field) { + return field.hasActiveError(); + }), + newErrors = me.getCombinedErrors(invalidFields); + + if (newErrors) { + me.setActiveErrors(newErrors); + } else { + me.unsetActiveError(); + } + + if (oldError !== me.getActiveError()) { + me.doComponentLayout(); + } + } + }, + + + getCombinedErrors: function(invalidFields) { + var errors = [], + f, + fLen = invalidFields.length, + field, + activeErrors, a, aLen, + error, label; + + for (f = 0; f < fLen; f++) { + field = invalidFields[f]; + activeErrors = field.getActiveErrors(); + aLen = activeErrors.length; + + for (a = 0; a < aLen; a++) { + error = activeErrors[a]; + label = field.getFieldLabel(); + + errors.push((label ? label + ': ' : '') + error); + } + } + + return errors; + }, + + getTargetEl: function() { + return this.containerEl; + }, + + applyTargetCls: function(targetCls) { + var containerElCls = this.containerElCls; + + this.containerElCls = containerElCls ? containerElCls + ' ' + targetCls : targetCls; + } +}); + + +Ext.define('Ext.layout.container.CheckboxGroup', { + extend: Ext.layout.container.Container , + alias: ['layout.checkboxgroup'], + + + autoFlex: true, + + type: 'checkboxgroup', + + createsInnerCt: true, + + childEls: [ + 'innerCt' + ], + + renderTpl: [ + '', + '', + '', + '', + '
    ', + '{% this.renderColumn(out,parent,xindex-1) %}', + '
    ' + ], + + lastOwnerItemsGeneration : null, + + beginLayout: function(ownerContext) { + var me = this, + columns, + numCols, + i, width, cwidth, + totalFlex = 0, flexedCols = 0, + autoFlex = me.autoFlex, + innerCtStyle = me.innerCt.dom.style; + + me.callParent(arguments); + + columns = me.columnNodes; + ownerContext.innerCtContext = ownerContext.getEl('innerCt', me); + + + if (!ownerContext.widthModel.shrinkWrap) { + numCols = columns.length; + + + if (me.columnsArray) { + + + for (i = 0; i < numCols; i++) { + width = me.owner.columns[i]; + if (width < 1) { + totalFlex += width; + flexedCols++; + } + } + + + for (i = 0; i < numCols; i++) { + width = me.owner.columns[i]; + if (width < 1) { + cwidth = ((width / totalFlex) * 100) + '%'; + } else { + cwidth = width + 'px'; + } + columns[i].style.width = cwidth; + } + } + + + else { + for (i = 0; i < numCols; i++) { + + + + cwidth = autoFlex + ? (1 / numCols * 100) + '%' + : ''; + columns[i].style.width = cwidth; + flexedCols++; + } + } + + + if (!flexedCols) { + innerCtStyle.tableLayout = 'fixed'; + innerCtStyle.width = ''; + + } else if (flexedCols < numCols) { + innerCtStyle.tableLayout = 'fixed'; + innerCtStyle.width = '100%'; + + } else { + innerCtStyle.tableLayout = 'auto'; + + if (autoFlex) { + innerCtStyle.width = '100%'; + } else { + innerCtStyle.width = ''; + } + } + + } else { + innerCtStyle.tableLayout = 'auto'; + innerCtStyle.width = ''; + } + }, + + cacheElements: function () { + var me = this; + + + me.callParent(); + + me.rowEl = me.innerCt.down('tr'); + + + me.columnNodes = me.rowEl.dom.childNodes; + }, + + + calculate: function(ownerContext) { + var me = this, + targetContext, widthShrinkWrap, heightShrinkWrap, shrinkWrap, table, targetPadding; + + + + if (!ownerContext.getDomProp('containerChildrenSizeDone')) { + me.done = false; + } else { + targetContext = ownerContext.innerCtContext; + widthShrinkWrap = ownerContext.widthModel.shrinkWrap; + heightShrinkWrap = ownerContext.heightModel.shrinkWrap; + shrinkWrap = heightShrinkWrap || widthShrinkWrap; + table = targetContext.el.dom; + targetPadding = shrinkWrap && targetContext.getPaddingInfo(); + + if (widthShrinkWrap) { + ownerContext.setContentWidth(table.offsetWidth + targetPadding.width, true); + } + + if (heightShrinkWrap) { + ownerContext.setContentHeight(table.offsetHeight + targetPadding.height, true); + } + } + }, + + doRenderColumn: function (out, renderData, columnIndex) { + + + + var me = renderData.$layout, + owner = me.owner, + columnCount = renderData.columnCount, + items = owner.items.items, + itemCount = items.length, + item, itemIndex, rowCount, increment, tree; + + + + + + if (owner.vertical) { + + + + + + + + + + + + rowCount = Math.ceil(itemCount / columnCount); + itemIndex = columnIndex * rowCount; + itemCount = Math.min(itemCount, itemIndex + rowCount); + increment = 1; + } else { + + + + + + + + + + + + itemIndex = columnIndex; + increment = columnCount; + } + + for ( ; itemIndex < itemCount; itemIndex += increment) { + item = items[itemIndex]; + me.configureItem(item); + tree = item.getRenderTree(); + Ext.DomHelper.generateMarkup(tree, out); + } + }, + + + getColumnCount: function() { + var me = this, + owner = me.owner, + ownerColumns = owner.columns; + + + + if (me.columnsArray) { + return ownerColumns.length; + } + + if (Ext.isNumber(ownerColumns)) { + return ownerColumns; + } + return owner.items.length; + }, + + getItemSizePolicy: function (item) { + return this.autoSizePolicy; + }, + + getRenderData: function () { + var me = this, + data = me.callParent(), + owner = me.owner, + i, columns = me.getColumnCount(), + width, column, cwidth, + autoFlex = me.autoFlex, + totalFlex = 0, flexedCols = 0; + + + if (me.columnsArray) { + for (i=0; i < columns; i++) { + width = me.owner.columns[i]; + if (width < 1) { + totalFlex += width; + flexedCols++; + } + } + } + + data.colCls = owner.groupCls; + data.columnCount = columns; + + data.columns = []; + for (i = 0; i < columns; i++) { + column = (data.columns[i] = {}); + + if (me.columnsArray) { + width = me.owner.columns[i]; + if (width < 1) { + cwidth = ((width / totalFlex) * 100) + '%'; + } else { + cwidth = width + 'px'; + } + column.style = 'width:' + cwidth; + } else { + column.style = 'width:' + (1 / columns * 100) + '%'; + flexedCols++; + } + } + + + data.tableStyle = + !flexedCols ? 'table-layout:fixed;' : + (flexedCols < columns) ? 'table-layout:fixed;width:100%' : + (autoFlex) ? 'table-layout:auto;width:100%' : 'table-layout:auto;'; + + return data; + }, + + initLayout: function () { + var me = this, + owner = me.owner; + + me.columnsArray = Ext.isArray(owner.columns); + me.autoColumns = !owner.columns || owner.columns === 'auto'; + me.vertical = owner.vertical; + + me.callParent(); + }, + + + isValidParent: function() { + return true; + }, + + setupRenderTpl: function (renderTpl) { + this.callParent(arguments); + + renderTpl.renderColumn = this.doRenderColumn; + }, + + renderChildren: function () { + var me = this, + generation = me.owner.items.generation; + + if (me.lastOwnerItemsGeneration !== generation) { + me.lastOwnerItemsGeneration = generation; + me.renderItems(me.getLayoutItems()); + } + }, + + + renderItems : function(items) { + var me = this, + itemCount = items.length, + i, + item, + rowCount, + columnCount, + rowIndex, + columnIndex; + + if (itemCount) { + Ext.suspendLayouts(); + + if (me.autoColumns) { + me.addMissingColumns(itemCount); + } + + columnCount = me.columnNodes.length; + rowCount = Math.ceil(itemCount / columnCount); + + for (i = 0; i < itemCount; i++) { + item = items[i]; + rowIndex = me.getRenderRowIndex(i, rowCount, columnCount); + columnIndex = me.getRenderColumnIndex(i, rowCount, columnCount); + + if (!item.rendered) { + me.renderItem(item, rowIndex, columnIndex); + } else if (!me.isItemAtPosition(item, rowIndex, columnIndex)) { + me.moveItem(item, rowIndex, columnIndex); + } + } + + if (me.autoColumns) { + me.removeExceedingColumns(itemCount); + } + + Ext.resumeLayouts(true); + } + }, + + isItemAtPosition : function(item, rowIndex, columnIndex) { + return item.el.dom === this.getNodeAt(rowIndex, columnIndex); + }, + + getRenderColumnIndex : function(itemIndex, rowCount, columnCount) { + if (this.vertical) { + return Math.floor(itemIndex / rowCount); + } else { + return itemIndex % columnCount; + } + }, + + getRenderRowIndex : function(itemIndex, rowCount, columnCount) { + var me = this; + if (me.vertical) { + return itemIndex % rowCount; + } else { + return Math.floor(itemIndex / columnCount); + } + }, + + getNodeAt : function(rowIndex, columnIndex) { + return this.columnNodes[columnIndex].childNodes[rowIndex]; + }, + + addMissingColumns : function(itemsCount) { + var me = this, + existingColumnsCount = me.columnNodes.length, + missingColumnsCount, + row, + cls, + i; + if (existingColumnsCount < itemsCount) { + missingColumnsCount = itemsCount - existingColumnsCount; + row = me.rowEl; + cls = me.owner.groupCls; + for (i = 0; i < missingColumnsCount; i++) { + row.createChild({ + cls: cls, + tag: 'td', + vAlign: 'top' + }); + } + } + }, + + removeExceedingColumns : function(itemsCount) { + var me = this, + existingColumnsCount = me.columnNodes.length, + exceedingColumnsCount, + row, + i; + if (existingColumnsCount > itemsCount) { + exceedingColumnsCount = existingColumnsCount - itemsCount; + row = me.rowEl; + for (i = 0; i < exceedingColumnsCount; i++) { + row.last().remove(); + } + } + }, + + + renderItem : function(item, rowIndex, columnIndex) { + var me = this; + + me.configureItem(item); + item.render(Ext.get(me.columnNodes[columnIndex]), rowIndex); + me.afterRenderItem(item); + }, + + + moveItem : function(item, rowIndex, columnIndex) { + var me = this, + column = me.columnNodes[columnIndex], + targetNode = column.childNodes[rowIndex]; + column.insertBefore(item.el.dom, targetNode || null); + } + +}); + + +Ext.define('Ext.form.CheckboxGroup', { + extend: Ext.form.FieldContainer , + mixins: { + field: Ext.form.field.Field + }, + alias: 'widget.checkboxgroup', + + + + + + + + columns : 'auto', + + + vertical : false, + + + allowBlank : true, + + + + blankText : "You must select at least one item in this group", + + + + defaultType : 'checkboxfield', + + + groupCls : Ext.baseCSSPrefix + 'form-check-group', + + + fieldBodyCls: Ext.baseCSSPrefix + 'form-checkboxgroup-body', + + + layout: 'checkboxgroup', + + componentCls: Ext.baseCSSPrefix + 'form-checkboxgroup', + + initComponent: function() { + var me = this; + me.callParent(); + me.initField(); + }, + + + initValue: function() { + var me = this, + valueCfg = me.value; + me.originalValue = me.lastValue = valueCfg || me.getValue(); + if (valueCfg) { + me.setValue(valueCfg); + } + }, + + + onAdd: function(item) { + var me = this, + items, + len, i; + + if (item.isCheckbox) { + me.mon(item, 'change', me.checkChange, me); + } else if (item.isContainer) { + items = item.items.items; + for (i = 0, len = items.length; i < len; i++) { + me.onAdd(items[i]); + } + } + me.callParent(arguments); + }, + + onRemove: function(item) { + var me = this, + items, + len, i; + + if (item.isCheckbox) { + me.mun(item, 'change', me.checkChange, me); + } else if (item.isContainer) { + items = item.items.items; + for (i = 0, len = items.length; i < len; i++) { + me.onRemove(items[i]); + } + } + me.callParent(arguments); + }, + + + isEqual: function(value1, value2) { + var toQueryString = Ext.Object.toQueryString; + return toQueryString(value1) === toQueryString(value2); + }, + + + getErrors: function() { + var errors = []; + if (!this.allowBlank && Ext.isEmpty(this.getChecked())) { + errors.push(this.blankText); + } + return errors; + }, + + + getBoxes: function(query) { + return this.query('[isCheckbox]' + (query||'')); + }, + + + eachBox: function(fn, scope) { + Ext.Array.forEach(this.getBoxes(), fn, scope || this); + }, + + + getChecked: function() { + return this.getBoxes('[checked]'); + }, + + + isDirty: function(){ + var boxes = this.getBoxes(), + b , + bLen = boxes.length; + + for (b = 0; b < bLen; b++) { + if (boxes[b].isDirty()) { + return true; + } + } + }, + + + setReadOnly: function(readOnly) { + var boxes = this.getBoxes(), + b, + bLen = boxes.length; + + for (b = 0; b < bLen; b++) { + boxes[b].setReadOnly(readOnly); + } + + this.readOnly = readOnly; + }, + + + reset: function() { + var me = this, + hadError = me.hasActiveError(), + preventMark = me.preventMark; + me.preventMark = true; + me.batchChanges(function() { + var boxes = me.getBoxes(), + b, + bLen = boxes.length; + + for (b = 0; b < bLen; b++) { + boxes[b].reset(); + } + }); + me.preventMark = preventMark; + me.unsetActiveError(); + if (hadError) { + me.updateLayout(); + } + }, + + resetOriginalValue: function(){ + var me = this, + boxes = me.getBoxes(), + b, + bLen = boxes.length; + + for (b = 0; b < bLen; b++) { + boxes[b].resetOriginalValue(); + } + + me.originalValue = me.getValue(); + me.checkDirty(); + }, + + + + setValue: function(value) { + var me = this, + boxes = me.getBoxes(), + b, + bLen = boxes.length, + box, name, + cbValue; + + me.batchChanges(function() { + for (b = 0; b < bLen; b++) { + box = boxes[b]; + name = box.getName(); + cbValue = false; + + if (value && value.hasOwnProperty(name)) { + if (Ext.isArray(value[name])) { + cbValue = Ext.Array.contains(value[name], box.inputValue); + } else { + + cbValue = value[name]; + } + } + + box.setValue(cbValue); + } + }); + return me; + }, + + + + getValue: function() { + var values = {}, + boxes = this.getBoxes(), + b, + bLen = boxes.length, + box, name, inputValue, bucket; + + for (b = 0; b < bLen; b++) { + box = boxes[b]; + name = box.getName(); + inputValue = box.inputValue; + + if (box.getValue()) { + if (values.hasOwnProperty(name)) { + bucket = values[name]; + if (!Ext.isArray(bucket)) { + bucket = values[name] = [bucket]; + } + bucket.push(inputValue); + } else { + values[name] = inputValue; + } + } + } + + return values; + }, + + + getSubmitData: function() { + return null; + }, + + + getModelData: function() { + return null; + }, + + validate: function() { + var me = this, + errors, + isValid, + wasValid; + + if (me.disabled) { + isValid = true; + } else { + errors = me.getErrors(); + isValid = Ext.isEmpty(errors); + wasValid = me.wasValid; + if (isValid) { + me.unsetActiveError(); + } else { + me.setActiveError(errors); + } + } + if (isValid !== wasValid) { + me.wasValid = isValid; + me.fireEvent('validitychange', me, isValid); + me.updateLayout(); + } + + return isValid; + } + +}, function() { + + this.borrow(Ext.form.field.Base, ['markInvalid', 'clearInvalid']); + +}); + + + +Ext.define('Ext.form.CheckboxManager', { + extend: Ext.util.MixedCollection , + singleton: true, + + getByName: function(name, formId) { + return this.filterBy(function(item) { + return item.name == name && item.getFormId() == formId; + }); + } +}); + + +Ext.define('Ext.form.FieldSet', { + extend: Ext.container.Container , + mixins: { + fieldAncestor: Ext.form.FieldAncestor + }, + alias: 'widget.fieldset', + + + + + + + + + + + + collapsed: false, + + + toggleOnTitleClick : true, + + + + + baseCls: Ext.baseCSSPrefix + 'fieldset', + + + layout: 'anchor', + + border: 1, + + componentLayout: 'fieldset', + + autoEl: 'fieldset', + + childEls: [ + 'body' + ], + + renderTpl: [ + '{%this.renderLegend(out,values);%}', + '
    style="{bodyStyle}">', + '{%this.renderContainer(out,values);%}', + '
    ' + ], + + stateEvents : [ 'collapse', 'expand' ], + + maskOnDisable: false, + + beforeDestroy: function(){ + var me = this, + legend = me.legend; + + if (legend) { + + delete legend.ownerCt; + legend.destroy(); + me.legend = null; + } + me.callParent(); + }, + + initComponent: function() { + var me = this, + baseCls = me.baseCls; + + me.callParent(); + + + + + + + + + + + + me.layout.managePadding = me.layout.manageOverflow = false; + + me.addEvents( + + + "beforeexpand", + + + "beforecollapse", + + + "expand", + + + "collapse" + ); + + if (me.collapsed) { + me.addCls(baseCls + '-collapsed'); + me.collapse(); + } + if (me.title || me.checkboxToggle || me.collapsible) { + me.addTitleClasses(); + me.legend = Ext.widget(me.createLegendCt()); + } + }, + + initPadding: function(targetEl) { + var me = this, + Element = Ext.Element, + body = me.getProtoBody(), + padding = me.padding, + bodyPadding; + + if (padding !== undefined) { + if (Ext.isIEQuirks || Ext.isIE8m) { + + + padding = Element.parseBox(padding); + bodyPadding = Element.parseBox(0); + bodyPadding.top = padding.top; + padding.top = 0; + body.setStyle('padding', Element.unitizeBox(bodyPadding)); + } + + targetEl.setStyle('padding', Element.unitizeBox(padding)); + } + }, + + getProtoBody: function () { + var me = this, + body = me.protoBody; + + if (!body) { + me.protoBody = body = new Ext.util.ProtoElement({ + styleProp: 'bodyStyle', + styleIsText: true + }); + } + + return body; + }, + + + initRenderData: function() { + var me = this, + data = me.callParent(); + + data.bodyTargetCls = me.bodyTargetCls; + me.protoBody.writeTo(data); + delete me.protoBody; + + return data; + }, + + getState: function () { + var state = this.callParent(); + + state = this.addPropertyToState(state, 'collapsed'); + + return state; + }, + + afterCollapse: Ext.emptyFn, + afterExpand: Ext.emptyFn, + + collapsedHorizontal: function () { + return true; + }, + + collapsedVertical: function () { + return true; + }, + + createLegendCt: function () { + var me = this, + items = [], + legend = { + xtype: 'container', + baseCls: me.baseCls + '-header', + id: me.id + '-legend', + autoEl: 'legend', + items: items, + ownerCt: me, + shrinkWrap: true, + ownerLayout: me.componentLayout + }; + + + if (me.checkboxToggle) { + items.push(me.createCheckboxCmp()); + } else if (me.collapsible) { + + items.push(me.createToggleCmp()); + } + + + items.push(me.createTitleCmp()); + + return legend; + }, + + + createTitleCmp: function() { + var me = this, + cfg = { + xtype : 'component', + html : me.title, + cls : me.baseCls + '-header-text', + id : me.id + '-legendTitle' + }; + + if (me.collapsible && me.toggleOnTitleClick) { + cfg.listeners = { + click : { + element: 'el', + scope : me, + fn : me.toggle + } + }; + cfg.cls += ' ' + me.baseCls + '-header-text-collapsible'; + } + + return (me.titleCmp = Ext.widget(cfg)); + }, + + + + + createCheckboxCmp: function() { + var me = this, + suffix = '-checkbox'; + + me.checkboxCmp = Ext.widget({ + xtype: 'checkbox', + hideEmptyLabel: true, + name: me.checkboxName || me.id + suffix, + cls: me.baseCls + '-header' + suffix, + id: me.id + '-legendChk', + checked: !me.collapsed, + listeners: { + change: me.onCheckChange, + scope: me + } + }); + return me.checkboxCmp; + }, + + + + + createToggleCmp: function() { + var me = this; + me.toggleCmp = Ext.widget({ + xtype: 'tool', + height: 15, + width: 15, + type: 'toggle', + handler: me.toggle, + id: me.id + '-legendToggle', + scope: me + }); + return me.toggleCmp; + }, + + doRenderLegend: function (out, renderData) { + + + + var me = renderData.$comp, + legend = me.legend, + tree; + + + if (legend) { + legend.ownerLayout.configureItem(legend); + tree = legend.getRenderTree(); + Ext.DomHelper.generateMarkup(tree, out); + } + }, + + finishRender: function () { + var legend = this.legend; + + this.callParent(); + + if (legend) { + legend.finishRender(); + } + }, + + getCollapsed: function () { + return this.collapsed ? 'top' : false; + }, + + getCollapsedDockedItems: function () { + var legend = this.legend; + + return legend ? [ legend ] : []; + }, + + + setTitle: function(title) { + var me = this, + legend = me.legend, + baseCls = me.baseCls; + + me.title = title; + if (me.rendered) { + if (!legend) { + me.legend = legend = Ext.widget(me.createLegendCt()); + me.addTitleClasses(); + legend.ownerLayout.configureItem(legend); + legend.render(me.el, 0); + } + me.titleCmp.update(title); + } else if (legend) { + me.titleCmp.update(title); + } else { + me.addTitleClasses(); + me.legend = Ext.widget(me.createLegendCt()); + } + return me; + }, + + addTitleClasses: function(){ + var me = this, + title = me.title, + baseCls = me.baseCls; + + if (title) { + me.addCls(baseCls + '-with-title'); + } + + if (title || me.checkboxToggle || me.collapsible) { + me.addCls(baseCls + '-with-header'); + } + }, + + applyTargetCls: function(targetCls) { + this.bodyTargetCls = targetCls; + }, + + getTargetEl : function() { + return this.body || this.frameBody || this.el; + }, + + getDefaultContentTarget: function() { + return this.body; + }, + + + expand : function(){ + return this.setExpanded(true); + }, + + + collapse : function() { + return this.setExpanded(false); + }, + + + setExpanded: function(expanded) { + var me = this, + checkboxCmp = me.checkboxCmp, + operation = expanded ? 'expand' : 'collapse'; + + if (!me.rendered || me.fireEvent('before' + operation, me) !== false) { + expanded = !!expanded; + + if (checkboxCmp) { + checkboxCmp.setValue(expanded); + } + + if (expanded) { + me.removeCls(me.baseCls + '-collapsed'); + } else { + me.addCls(me.baseCls + '-collapsed'); + } + me.collapsed = !expanded; + if (me.rendered) { + + + + me.updateLayout({ isRoot: false }); + me.fireEvent(operation, me); + } + } + return me; + }, + + getRefItems: function(deep) { + var refItems = this.callParent(arguments), + legend = this.legend; + + + if (legend) { + refItems.unshift(legend); + if (deep) { + refItems.unshift.apply(refItems, legend.getRefItems(true)); + } + } + return refItems; + }, + + + toggle: function() { + this.setExpanded(!!this.collapsed); + }, + + + onCheckChange: function(cmp, checked) { + this.setExpanded(checked); + }, + + setupRenderTpl: function (renderTpl) { + this.callParent(arguments); + + renderTpl.renderLegend = this.doRenderLegend; + } +}); + + +Ext.define('Ext.form.Label', { + extend: Ext.Component , + alias: 'widget.label', + + + autoEl: 'label', + + + + + + maskOnDisable: false, + + getElConfig: function(){ + var me = this; + + me.html = me.text ? Ext.util.Format.htmlEncode(me.text) : (me.html || ''); + return Ext.apply(me.callParent(), { + htmlFor: me.forId || '' + }); + }, + + + setText : function(text, encode){ + var me = this; + + encode = encode !== false; + if(encode) { + me.text = text; + delete me.html; + } else { + me.html = text; + delete me.text; + } + + if(me.rendered){ + me.el.dom.innerHTML = encode !== false ? Ext.util.Format.htmlEncode(text) : text; + me.updateLayout(); + } + return me; + } +}); + + + +Ext.define('Ext.form.Panel', { + extend: Ext.panel.Panel , + mixins: { + fieldAncestor: Ext.form.FieldAncestor + }, + alias: 'widget.form', + alternateClassName: ['Ext.FormPanel', 'Ext.form.FormPanel'], + + + + + + + + layout: 'anchor', + + ariaRole: 'form', + + basicFormConfigs: [ + 'api', + 'baseParams', + 'errorReader', + 'jsonSubmit', + 'method', + 'paramOrder', + 'paramsAsHash', + 'reader', + 'standardSubmit', + 'timeout', + 'trackResetOnLoad', + 'url', + 'waitMsgTarget', + 'waitTitle' + ], + + initComponent: function() { + var me = this; + + if (me.frame) { + me.border = false; + } + + me.initFieldAncestor(); + me.callParent(); + + me.relayEvents(me.form, [ + + 'beforeaction', + + 'actionfailed', + + 'actioncomplete', + + 'validitychange', + + 'dirtychange' + ]); + + + if (me.pollForChanges) { + me.startPolling(me.pollInterval || 500); + } + }, + + initItems: function() { + + this.callParent(); + this.initMonitor(); + this.form = this.createForm(); + }, + + + afterFirstLayout: function() { + this.callParent(arguments); + this.form.initialize(); + }, + + + createForm: function() { + var cfg = {}, + props = this.basicFormConfigs, + len = props.length, + i = 0, + prop; + + for (; i < len; ++i) { + prop = props[i]; + cfg[prop] = this[prop]; + } + return new Ext.form.Basic(this, cfg); + }, + + + getForm: function() { + return this.form; + }, + + + loadRecord: function(record) { + return this.getForm().loadRecord(record); + }, + + + getRecord: function() { + return this.getForm().getRecord(); + }, + + + getValues: function(asString, dirtyOnly, includeEmptyText, useDataValues) { + return this.getForm().getValues(asString, dirtyOnly, includeEmptyText, useDataValues); + }, + + + isDirty: function () { + return this.form.isDirty(); + }, + + + isValid: function () { + return this.form.isValid(); + }, + + + hasInvalidField: function () { + return this.form.hasInvalidField(); + }, + + beforeDestroy: function() { + this.stopPolling(); + this.form.destroy(); + this.callParent(); + }, + + + load: function(options) { + this.form.load(options); + }, + + + submit: function(options) { + this.form.submit(options); + }, + + + startPolling: function(interval) { + this.stopPolling(); + var task = new Ext.util.TaskRunner(interval); + task.start({ + interval: 0, + run: this.checkChange, + scope: this + }); + this.pollTask = task; + }, + + + stopPolling: function() { + var task = this.pollTask; + if (task) { + task.stopAll(); + delete this.pollTask; + } + }, + + + checkChange: function() { + var fields = this.form.getFields().items, + f, + fLen = fields.length; + + for (f = 0; f < fLen; f++) { + fields[f].checkChange(); + } + } +}); + + +Ext.define('Ext.form.RadioGroup', { + extend: Ext.form.CheckboxGroup , + alias: 'widget.radiogroup', + + + + allowBlank : true, + + + blankText : 'You must select one item in this group', + + + + defaultType : 'radiofield', + + + groupCls : Ext.baseCSSPrefix + 'form-radio-group', + + getBoxes: function(query) { + return this.query('[isRadio]' + (query||'')); + }, + + checkChange: function() { + var value = this.getValue(), + key = Ext.Object.getKeys(value)[0]; + + + + if (Ext.isArray(value[key])) { + return; + } + this.callParent(arguments); + }, + + + setValue: function(value) { + var cbValue, first, formId, radios, + i, len, name; + + if (Ext.isObject(value)) { + for (name in value) { + if (value.hasOwnProperty(name)) { + cbValue = value[name]; + first = this.items.first(); + formId = first ? first.getFormId() : null; + radios = Ext.form.RadioManager.getWithValue(name, cbValue, formId).items; + len = radios.length; + + for (i = 0; i < len; ++i) { + radios[i].setValue(true); + } + } + } + } + return this; + } +}); + + +Ext.define('Ext.form.RadioManager', { + extend: Ext.util.MixedCollection , + singleton: true, + + getByName: function(name, formId) { + return this.filterBy(function(item) { + return item.name == name && item.getFormId() == formId; + }); + }, + + getWithValue: function(name, value, formId) { + return this.filterBy(function(item) { + return item.name == name && item.inputValue == value && item.getFormId() == formId; + }); + }, + + getChecked: function(name, formId) { + return this.findBy(function(item) { + return item.name == name && item.checked && item.getFormId() == formId; + }); + } +}); + + +Ext.define('Ext.form.action.DirectLoad', { + extend: Ext.form.action.Load , + + alternateClassName: 'Ext.form.Action.DirectLoad', + alias: 'formaction.directload', + + type: 'directload', + + run: function() { + var me = this, + form = me.form, + fn = form.api.load, + method = fn.directCfg.method, + args = method.getArgs(me.getParams(), form.paramOrder, form.paramsAsHash); + + args.push(me.onComplete, me); + fn.apply(window, args); + }, + + + + + processResponse: function(result) { + return (this.result = result); + }, + + onComplete: function(data, response) { + if (data) { + this.onSuccess(data); + } else { + this.onFailure(null); + } + } +}); + + + + +Ext.define('Ext.form.action.DirectSubmit', { + extend: Ext.form.action.Submit , + + alternateClassName: 'Ext.form.Action.DirectSubmit', + alias: 'formaction.directsubmit', + + type: 'directsubmit', + + doSubmit: function() { + var me = this, + callback = Ext.Function.bind(me.onComplete, me), + formInfo = me.buildForm(); + + me.form.api.submit(formInfo.formEl, callback, me); + me.cleanup(formInfo); + }, + + + + + processResponse: function(result) { + return (this.result = result); + }, + + onComplete: function(data, response){ + if (data) { + this.onSuccess(data); + } else { + this.onFailure(null); + } + } +}); + + +Ext.define('Ext.form.action.StandardSubmit', { + extend: Ext.form.action.Submit , + alias: 'formaction.standardsubmit', + + + + + doSubmit: function() { + var formInfo = this.buildForm(); + formInfo.formEl.submit(); + this.cleanup(formInfo); + } + +}); + + +Ext.define('Ext.form.field.Checkbox', { + extend: Ext.form.field.Base , + alias: ['widget.checkboxfield', 'widget.checkbox'], + alternateClassName: 'Ext.form.Checkbox', + + + componentLayout: 'field', + + + stretchInputElFixed: false, + + childEls: [ + + 'boxLabelEl' + ], + + + fieldSubTpl: [ + '', + '{beforeBoxLabelTpl}', + '', + '{afterBoxLabelTpl}', + '', + + + + ' tabIndex="{tabIdx}"
    ', + ' disabled="disabled"', + ' style="{fieldStyle}"', + ' class="{fieldCls} {typeCls} {inputCls}" autocomplete="off" hidefocus="true" />', + '', + '{beforeBoxLabelTpl}', + '', + '{afterBoxLabelTpl}', + '', + { + disableFormats: true, + compiled: true + } + ], + + subTplInsertions: [ + + 'beforeBoxLabelTpl', + + + 'afterBoxLabelTpl', + + + 'beforeBoxLabelTextTpl', + + + 'afterBoxLabelTextTpl', + + + 'boxLabelAttrTpl', + + + 'inputAttrTpl' + ], + + + isCheckbox: true, + + + focusCls: 'form-checkbox-focus', + + + + + fieldBodyCls: Ext.baseCSSPrefix + 'form-cb-wrap', + + + checked: false, + + + checkedCls: Ext.baseCSSPrefix + 'form-cb-checked', + + + + + boxLabelCls: Ext.baseCSSPrefix + 'form-cb-label', + + + boxLabelAlign: 'after', + + + inputValue: 'on', + + + + + + + + + checkChangeEvents: [], + inputType: 'checkbox', + + + onRe: /^on$/i, + + + inputCls: Ext.baseCSSPrefix + 'form-cb', + + initComponent: function() { + this.callParent(arguments); + this.getManager().add(this); + }, + + initValue: function() { + var me = this, + checked = !!me.checked; + + + me.originalValue = me.lastValue = checked; + + + me.setValue(checked); + }, + + getElConfig: function() { + var me = this; + + + if (me.isChecked(me.rawValue, me.inputValue)) { + me.addCls(me.checkedCls); + } + return me.callParent(); + }, + + getFieldStyle: function() { + return Ext.isObject(this.fieldStyle) ? Ext.DomHelper.generateStyles(this.fieldStyle) : this.fieldStyle ||''; + }, + + getSubTplData: function() { + var me = this; + return Ext.apply(me.callParent(), { + disabled : me.readOnly || me.disabled, + boxLabel : me.boxLabel, + boxLabelCls : me.boxLabelCls, + boxLabelAlign : me.boxLabelAlign + }); + }, + + initEvents: function() { + var me = this; + me.callParent(); + me.mon(me.inputEl, 'click', me.onBoxClick, me); + }, + + + setBoxLabel: function(boxLabel){ + var me = this; + + me.boxLabel = boxLabel; + if (me.rendered) { + me.boxLabelEl.update(boxLabel); + } + }, + + + onBoxClick: function(e) { + var me = this; + if (!me.disabled && !me.readOnly) { + this.setValue(!this.checked); + } + }, + + + getRawValue: function() { + return this.checked; + }, + + + getValue: function() { + return this.checked; + }, + + + getSubmitValue: function() { + var unchecked = this.uncheckedValue, + uncheckedVal = Ext.isDefined(unchecked) ? unchecked : null; + return this.checked ? this.inputValue : uncheckedVal; + }, + + isChecked: function(rawValue, inputValue) { + return (rawValue === true || rawValue === 'true' || rawValue === '1' || rawValue === 1 || + (((Ext.isString(rawValue) || Ext.isNumber(rawValue)) && inputValue) ? rawValue == inputValue : this.onRe.test(rawValue))); + }, + + + setRawValue: function(value) { + var me = this, + inputEl = me.inputEl, + checked = me.isChecked(value, me.inputValue); + + if (inputEl) { + me[checked ? 'addCls' : 'removeCls'](me.checkedCls); + } + + me.checked = me.rawValue = checked; + return checked; + }, + + + setValue: function(checked) { + var me = this, + boxes, i, len, box; + + + + + + if (Ext.isArray(checked)) { + boxes = me.getManager().getByName(me.name, me.getFormId()).items; + len = boxes.length; + + for (i = 0; i < len; ++i) { + box = boxes[i]; + box.setValue(Ext.Array.contains(checked, box.inputValue)); + } + } else { + me.callParent(arguments); + } + + return me; + }, + + + valueToRaw: function(value) { + + return value; + }, + + + onChange: function(newVal, oldVal) { + var me = this, + handler = me.handler; + if (handler) { + handler.call(me.scope || me, me, newVal); + } + me.callParent(arguments); + }, + + resetOriginalValue: function( fromBoxInGroup){ + var me = this, + boxes, + box, + len, + i; + + + if (!fromBoxInGroup) { + boxes = me.getManager().getByName(me.name, me.getFormId()).items; + len = boxes.length; + + for (i = 0; i < len; ++i) { + box = boxes[i]; + if (box !== me) { + boxes[i].resetOriginalValue(true); + } + } + } + me.callParent(); + }, + + + beforeDestroy: function(){ + this.callParent(); + this.getManager().removeAtKey(this.id); + }, + + + getManager: function() { + return Ext.form.CheckboxManager; + }, + + onEnable: function() { + var me = this, + inputEl = me.inputEl; + me.callParent(); + if (inputEl) { + + inputEl.dom.disabled = me.readOnly; + } + }, + + setReadOnly: function(readOnly) { + var me = this, + inputEl = me.inputEl; + if (inputEl) { + + inputEl.dom.disabled = !!readOnly || me.disabled; + } + me.callParent(arguments); + }, + + getFormId: function(){ + var me = this, + form; + + if (!me.formId) { + form = me.up('form'); + if (form) { + me.formId = form.id; + } + } + return me.formId; + } +}); + + +Ext.define('Ext.layout.component.field.Trigger', { + + + + alias: 'layout.triggerfield', + + extend: Ext.layout.component.field.Field , + + + + type: 'triggerfield', + + + borderWidths: {}, + + beginLayout: function(ownerContext) { + var me = this, + owner = me.owner, + flags; + + ownerContext.triggerWrap = ownerContext.getEl('triggerWrap'); + + me.callParent(arguments); + + + flags = owner.getTriggerStateFlags(); + if (flags != owner.lastTriggerStateFlags) { + owner.lastTriggerStateFlags = flags; + me.updateEditState(); + } + }, + + beginLayoutCycle: function(ownerContext){ + this.callParent(arguments); + + + if (ownerContext.widthModel.shrinkWrap && !this.owner.inputWidth) { + ownerContext.inputContext.el.setStyle('width', ''); + } + }, + + beginLayoutFixed: function (ownerContext, width, suffix) { + var me = this, + owner = ownerContext.target, + ieInputWidthAdjustment = me.ieInputWidthAdjustment || 0, + inputWidth = '100%', + triggerWrap = owner.triggerWrap; + + me.callParent(arguments); + + owner.inputCell.setStyle('width', '100%'); + if(ieInputWidthAdjustment) { + me.adjustIEInputPadding(ownerContext); + if(suffix === 'px') { + if (owner.inputWidth) { + inputWidth = owner.inputWidth - me.getExtraWidth(ownerContext); + } else { + inputWidth = width - ieInputWidthAdjustment - me.getExtraWidth(ownerContext); + } + inputWidth += 'px'; + } + } + owner.inputEl.setStyle('width', inputWidth); + inputWidth = owner.inputWidth; + if (inputWidth) { + triggerWrap.setStyle('width', inputWidth + (ieInputWidthAdjustment) + 'px'); + } else { + triggerWrap.setStyle('width', width + suffix); + } + triggerWrap.setStyle('table-layout', 'fixed'); + }, + + adjustIEInputPadding: function(ownerContext) { + + this.owner.inputCell.setStyle('padding-right', this.ieInputWidthAdjustment + 'px'); + }, + + + getExtraWidth: function(ownerContext) { + var me = this, + owner = me.owner, + borderWidths = me.borderWidths, + ui = owner.ui + owner.triggerEl.getCount(); + + if (!(ui in borderWidths)) { + borderWidths[ui] = ownerContext.triggerWrap.getBorderInfo().width + } + return borderWidths[ui] + owner.getTriggerWidth(); + }, + + beginLayoutShrinkWrap: function (ownerContext) { + var owner = ownerContext.target, + emptyString = '', + inputWidth = owner.inputWidth, + triggerWrap = owner.triggerWrap; + + this.callParent(arguments); + + if (inputWidth) { + triggerWrap.setStyle('width', inputWidth + 'px'); + inputWidth = (inputWidth - this.getExtraWidth(ownerContext)) + 'px'; + owner.inputEl.setStyle('width', inputWidth); + owner.inputCell.setStyle('width', inputWidth); + } else { + owner.inputCell.setStyle('width', emptyString); + owner.inputEl.setStyle('width', emptyString); + triggerWrap.setStyle('width', emptyString); + triggerWrap.setStyle('table-layout', 'auto'); + } + }, + + getTextWidth: function () { + var me = this, + owner = me.owner, + inputEl = owner.inputEl, + value; + + + value = (inputEl.dom.value || (owner.hasFocus ? '' : owner.emptyText) || '') + owner.growAppend; + return inputEl.getTextWidth(value); + }, + + publishOwnerWidth: function(ownerContext, width) { + var owner = this.owner; + this.callParent(arguments); + if (!owner.grow && !owner.inputWidth) { + width -= this.getExtraWidth(ownerContext); + if (owner.labelAlign != 'top') { + width -= owner.getLabelWidth(); + } + ownerContext.inputContext.setWidth(width); + } + }, + + measureContentWidth: function (ownerContext) { + var me = this, + owner = me.owner, + width = me.callParent(arguments), + inputContext = ownerContext.inputContext, + calcWidth, max, min; + + if (owner.grow && !ownerContext.state.growHandled) { + calcWidth = me.getTextWidth() + ownerContext.inputContext.getFrameInfo().width; + + max = owner.growMax; + min = Math.min(max, width); + max = Math.max(owner.growMin, max, min); + + + calcWidth = Ext.Number.constrain(calcWidth, owner.growMin, max); + inputContext.setWidth(calcWidth); + ownerContext.state.growHandled = true; + + + inputContext.domBlock(me, 'width'); + width = NaN; + } else if (!owner.inputWidth) { + width -= me.getExtraWidth(ownerContext); + } + return width; + }, + + updateEditState: function() { + var me = this, + owner = me.owner, + inputEl = owner.inputEl, + noeditCls = Ext.baseCSSPrefix + 'trigger-noedit', + displayed, + readOnly; + + if (me.owner.readOnly) { + inputEl.addCls(noeditCls); + readOnly = true; + displayed = false; + } else { + if (me.owner.editable) { + inputEl.removeCls(noeditCls); + readOnly = false; + } else { + inputEl.addCls(noeditCls); + readOnly = true; + } + displayed = !me.owner.hideTrigger; + } + + owner.triggerCell.setDisplayed(displayed); + inputEl.dom.readOnly = readOnly; + } +}); + + +Ext.define('Ext.form.field.Trigger', { + extend: Ext.form.field.Text , + alias: ['widget.triggerfield', 'widget.trigger'], + + alternateClassName: ['Ext.form.TriggerField', 'Ext.form.TwinTriggerField', 'Ext.form.Trigger'], + + childEls: [ + + { name: 'triggerCell', select: '.' + Ext.baseCSSPrefix + 'trigger-cell' }, + { name: 'triggerEl', select: '.' + Ext.baseCSSPrefix + 'form-trigger' }, + + + 'triggerWrap', + + + 'inputCell' + ], + + + + + triggerBaseCls: Ext.baseCSSPrefix + 'form-trigger', + + + triggerWrapCls: Ext.baseCSSPrefix + 'form-trigger-wrap', + + + triggerNoEditCls: Ext.baseCSSPrefix + 'trigger-noedit', + + + hideTrigger: false, + + + editable: true, + + + readOnly: false, + + + + + repeatTriggerClick: false, + + + + autoSize: Ext.emptyFn, + + monitorTab: true, + + mimicing: false, + + triggerIndexRe: /trigger-index-(\d+)/, + + extraTriggerCls: '', + + componentLayout: 'triggerfield', + + initComponent: function() { + this.wrapFocusCls = this.triggerWrapCls + '-focus'; + this.callParent(arguments); + }, + + getSubTplMarkup: function(values) { + var me = this, + childElCls = values.childElCls, + field = me.callParent(arguments); + + return '' + + '' + + me.getTriggerMarkup() + + '
    ' + field + '
    '; + }, + + getSubTplData: function(){ + var me = this, + data = me.callParent(), + readOnly = me.readOnly === true, + editable = me.editable !== false; + + return Ext.apply(data, { + editableCls: (readOnly || !editable) ? ' ' + me.triggerNoEditCls : '', + readOnly: !editable || readOnly + }); + }, + + getLabelableRenderData: function() { + var me = this, + triggerWrapCls = me.triggerWrapCls, + result = me.callParent(arguments); + + return Ext.applyIf(result, { + triggerWrapCls: triggerWrapCls, + triggerMarkup: me.getTriggerMarkup() + }); + }, + + getTriggerMarkup: function() { + var me = this, + i = 0, + hideTrigger = (me.readOnly || me.hideTrigger), + triggerCls, + triggerBaseCls = me.triggerBaseCls, + triggerConfigs = [], + unselectableCls = Ext.dom.Element.unselectableCls, + style = 'width:' + me.triggerWidth + 'px;' + (hideTrigger ? 'display:none;' : ''), + cls = me.extraTriggerCls + ' ' + Ext.baseCSSPrefix + 'trigger-cell ' + unselectableCls; + + + + + + if (!me.trigger1Cls) { + me.trigger1Cls = me.triggerCls; + } + + + for (i = 0; (triggerCls = me['trigger' + (i + 1) + 'Cls']) || i < 1; i++) { + triggerConfigs.push({ + tag: 'td', + valign: 'top', + cls: cls, + style: style, + cn: { + cls: [Ext.baseCSSPrefix + 'trigger-index-' + i, triggerBaseCls, triggerCls].join(' '), + role: 'button' + } + }); + } + triggerConfigs[0].cn.cls += ' ' + triggerBaseCls + '-first'; + + return Ext.DomHelper.markup(triggerConfigs); + }, + + disableCheck: function() { + return !this.disabled; + }, + + + beforeRender: function() { + var me = this, + triggerBaseCls = me.triggerBaseCls, + tempEl; + + + if (!me.triggerWidth) { + tempEl = Ext.getBody().createChild({ + style: 'position: absolute;', + cls: Ext.baseCSSPrefix + 'form-trigger' + }); + Ext.form.field.Trigger.prototype.triggerWidth = tempEl.getWidth(); + tempEl.remove(); + } + + me.callParent(); + + if (triggerBaseCls != Ext.baseCSSPrefix + 'form-trigger') { + + + me.addChildEls({ name: 'triggerEl', select: '.' + triggerBaseCls }); + } + + + me.lastTriggerStateFlags = me.getTriggerStateFlags(); + }, + + onRender: function() { + var me = this; + + me.callParent(arguments); + + me.doc = Ext.getDoc(); + me.initTrigger(); + }, + + + getTriggerWidth: function() { + var me = this, + totalTriggerWidth = 0; + + if (me.triggerWrap && !me.hideTrigger && !me.readOnly) { + totalTriggerWidth = me.triggerEl.getCount() * me.triggerWidth; + } + return totalTriggerWidth; + }, + + setHideTrigger: function(hideTrigger) { + if (hideTrigger != this.hideTrigger) { + this.hideTrigger = hideTrigger; + this.updateLayout(); + } + }, + + + setEditable: function(editable) { + if (editable != this.editable) { + this.editable = editable; + this.updateLayout(); + } + }, + + + setReadOnly: function(readOnly) { + var me = this, + old = me.readOnly; + + me.callParent(arguments); + if (readOnly != old) { + me.updateLayout(); + } + }, + + + initTrigger: function() { + var me = this, + triggerWrap = me.triggerWrap, + triggerEl = me.triggerEl, + disableCheck = me.disableCheck, + els, eLen, el, e, idx; + + if (me.repeatTriggerClick) { + me.triggerRepeater = new Ext.util.ClickRepeater(triggerWrap, { + preventDefault: true, + handler: me.onTriggerWrapClick, + listeners: { + mouseup: me.onTriggerWrapMouseup, + scope: me + }, + scope: me + }); + } else { + me.mon(triggerWrap, { + click: me.onTriggerWrapClick, + mouseup: me.onTriggerWrapMouseup, + scope: me + }); + } + + triggerEl.setVisibilityMode(Ext.Element.DISPLAY); + triggerEl.addClsOnOver(me.triggerBaseCls + '-over', disableCheck, me); + + els = triggerEl.elements; + eLen = els.length; + + for (e = 0; e < eLen; e++) { + el = els[e]; + idx = e+1; + el.addClsOnOver(me['trigger' + (idx) + 'Cls'] + '-over', disableCheck, me); + el.addClsOnClick(me['trigger' + (idx) + 'Cls'] + '-click', disableCheck, me); + } + + triggerEl.addClsOnClick(me.triggerBaseCls + '-click', disableCheck, me); + + }, + + + onDestroy: function() { + var me = this; + Ext.destroyMembers(me, 'triggerRepeater', 'triggerWrap', 'triggerEl'); + delete me.doc; + me.callParent(); + }, + + + onFocus: function() { + var me = this; + me.callParent(arguments); + if (!me.mimicing) { + me.bodyEl.addCls(me.wrapFocusCls); + me.mimicing = true; + me.mon(me.doc, 'mousedown', me.mimicBlur, me, { + delay: 10 + }); + if (me.monitorTab) { + me.on('specialkey', me.checkTab, me); + } + } + }, + + + checkTab: function(me, e) { + if (!this.ignoreMonitorTab && e.getKey() == e.TAB) { + this.triggerBlur(); + } + }, + + + getTriggerStateFlags: function () { + var me = this, + state = 0; + + if (me.readOnly) { + state += 1; + } + if (me.editable) { + state += 2; + } + if (me.hideTrigger) { + state += 4; + } + return state; + }, + + + onBlur: Ext.emptyFn, + + + mimicBlur: function(e) { + if (!this.isDestroyed && !this.bodyEl.contains(e.target) && this.validateBlur(e)) { + this.triggerBlur(e); + } + }, + + + triggerBlur: function(e) { + var me = this; + me.mimicing = false; + me.mun(me.doc, 'mousedown', me.mimicBlur, me); + if (me.monitorTab && me.inputEl) { + me.un('specialkey', me.checkTab, me); + } + Ext.form.field.Trigger.superclass.onBlur.call(me, e); + if (me.bodyEl) { + me.bodyEl.removeCls(me.wrapFocusCls); + } + }, + + + + validateBlur: function(e) { + return true; + }, + + + + + onTriggerWrapClick: function() { + var me = this, + targetEl, match, + triggerClickMethod, + event; + + event = arguments[me.triggerRepeater ? 1 : 0]; + if (event && !me.readOnly && !me.disabled) { + targetEl = event.getTarget('.' + me.triggerBaseCls, null); + match = targetEl && targetEl.className.match(me.triggerIndexRe); + + if (match) { + triggerClickMethod = me['onTrigger' + (parseInt(match[1], 10) + 1) + 'Click'] || me.onTriggerClick; + if (triggerClickMethod) { + triggerClickMethod.call(me, event); + } + } + } + }, + + + + + onTriggerWrapMouseup: Ext.emptyFn, + + + onTriggerClick: Ext.emptyFn + + + + +}); + + +Ext.define('Ext.form.field.Picker', { + extend: Ext.form.field.Trigger , + alias: 'widget.pickerfield', + alternateClassName: 'Ext.form.Picker', + + + + matchFieldWidth: true, + + + pickerAlign: 'tl-bl?', + + + + + openCls: Ext.baseCSSPrefix + 'pickerfield-open', + + + + + editable: true, + + + initComponent: function() { + this.callParent(); + + + this.addEvents( + + 'expand', + + 'collapse', + + 'select' + ); + }, + + + initEvents: function() { + var me = this; + me.callParent(); + + + me.keyNav = new Ext.util.KeyNav(me.inputEl, { + down: me.onDownArrow, + esc: { + handler: me.onEsc, + scope: me, + defaultEventAction: false + }, + scope: me, + forceKeyDown: true + }); + + + if (!me.editable) { + me.mon(me.inputEl, 'click', me.onTriggerClick, me); + } + + + if (Ext.isGecko) { + me.inputEl.dom.setAttribute('autocomplete', 'off'); + } + }, + + + onEsc: function(e) { + if (Ext.isIE) { + + + + + e.preventDefault(); + } + + if (this.isExpanded) { + this.collapse(); + e.stopEvent(); + } + }, + + onDownArrow: function(e) { + if (!this.isExpanded) { + + + this.onTriggerClick(); + } + }, + + + expand: function() { + var me = this, + bodyEl, picker, collapseIf; + + if (me.rendered && !me.isExpanded && !me.isDestroyed) { + bodyEl = me.bodyEl; + picker = me.getPicker(); + collapseIf = me.collapseIf; + + + picker.show(); + me.isExpanded = true; + me.alignPicker(); + bodyEl.addCls(me.openCls); + + + me.mon(Ext.getDoc(), { + mousewheel: collapseIf, + mousedown: collapseIf, + scope: me + }); + Ext.EventManager.onWindowResize(me.alignPicker, me); + me.fireEvent('expand', me); + me.onExpand(); + } + }, + + onExpand: Ext.emptyFn, + + + alignPicker: function() { + var me = this, + picker = me.getPicker(); + + if (me.isExpanded) { + if (me.matchFieldWidth) { + + picker.setWidth(me.bodyEl.getWidth()); + } + if (picker.isFloating()) { + me.doAlign(); + } + } + }, + + + doAlign: function(){ + var me = this, + picker = me.picker, + aboveSfx = '-above', + isAbove; + + me.picker.alignTo(me.bodyEl, me.pickerAlign, me.pickerOffset); + + + isAbove = picker.el.getY() < me.inputEl.getY(); + me.bodyEl[isAbove ? 'addCls' : 'removeCls'](me.openCls + aboveSfx); + picker[isAbove ? 'addCls' : 'removeCls'](picker.baseCls + aboveSfx); + }, + + + collapse: function() { + if (this.isExpanded && !this.isDestroyed) { + var me = this, + openCls = me.openCls, + picker = me.picker, + doc = Ext.getDoc(), + collapseIf = me.collapseIf, + aboveSfx = '-above'; + + + picker.hide(); + me.isExpanded = false; + + + me.bodyEl.removeCls([openCls, openCls + aboveSfx]); + picker.el.removeCls(picker.baseCls + aboveSfx); + + + doc.un('mousewheel', collapseIf, me); + doc.un('mousedown', collapseIf, me); + Ext.EventManager.removeResizeListener(me.alignPicker, me); + me.fireEvent('collapse', me); + me.onCollapse(); + } + }, + + onCollapse: Ext.emptyFn, + + + + collapseIf: function(e) { + var me = this; + + if (!me.isDestroyed && !e.within(me.bodyEl, false, true) && !e.within(me.picker.el, false, true) && !me.isEventWithinPickerLoadMask(e)) { + me.collapse(); + } + }, + + + getPicker: function() { + var me = this; + return me.picker || (me.picker = me.createPicker()); + }, + + + createPicker: Ext.emptyFn, + + + onTriggerClick: function() { + var me = this; + if (!me.readOnly && !me.disabled) { + if (me.isExpanded) { + me.collapse(); + } else { + me.expand(); + } + me.inputEl.focus(); + } + }, + + triggerBlur: function() { + var picker = this.picker; + + this.callParent(arguments); + if (picker && picker.isVisible()) { + picker.hide(); + } + }, + + mimicBlur: function(e) { + var me = this, + picker = me.picker; + + if (!picker || !e.within(picker.el, false, true) && !me.isEventWithinPickerLoadMask(e)) { + me.callParent(arguments); + } + }, + + onDestroy : function(){ + var me = this, + picker = me.picker; + + Ext.EventManager.removeResizeListener(me.alignPicker, me); + Ext.destroy(me.keyNav); + if (picker) { + delete picker.pickerField; + picker.destroy(); + } + me.callParent(); + }, + + + isEventWithinPickerLoadMask: function(e) { + var loadMask = this.picker.loadMask; + + return loadMask ? e.within(loadMask.maskEl, false, true) || e.within(loadMask.el, false, true) : false; + } + +}); + + + +Ext.define('Ext.selection.Model', { + extend: Ext.util.Observable , + alternateClassName: 'Ext.AbstractSelectionModel', + + mixins: { + bindable: Ext.util.Bindable + }, + + + + + + allowDeselect: false, + + + selected: null, + + + pruneRemoved: true, + + constructor: function(cfg) { + var me = this; + + cfg = cfg || {}; + Ext.apply(me, cfg); + + me.addEvents( + + 'selectionchange', + + 'focuschange' + ); + + me.modes = { + SINGLE: true, + SIMPLE: true, + MULTI: true + }; + + + me.setSelectionMode(cfg.mode || me.mode); + + + me.selected = new Ext.util.MixedCollection(null, me.getSelectionId); + + me.callParent(arguments); + }, + + + bindStore: function(store, initial){ + var me = this; + me.mixins.bindable.bindStore.apply(me, arguments); + if(me.store && !initial) { + me.refresh(); + } + }, + + getStoreListeners: function() { + var me = this; + return { + add: me.onStoreAdd, + clear: me.onStoreClear, + bulkremove: me.onStoreRemove, + update: me.onStoreUpdate, + load: me.onStoreLoad, + idchanged: me.onModelIdChanged, + refresh: me.onStoreRefresh + }; + }, + + + selectAll: function(suppressEvent) { + var me = this, + selections = me.store.getRange(), + i = 0, + len = selections.length, + start = me.getSelection().length; + + me.bulkChange = true; + for (; i < len; i++) { + me.doSelect(selections[i], true, suppressEvent); + } + delete me.bulkChange; + + me.maybeFireSelectionChange(me.getSelection().length !== start); + }, + + + deselectAll: function(suppressEvent) { + var me = this, + selections = me.getSelection(), + i = 0, + len = selections.length, + start = me.getSelection().length; + + me.bulkChange = true; + for (; i < len; i++) { + me.doDeselect(selections[i], suppressEvent); + } + delete me.bulkChange; + + me.maybeFireSelectionChange(me.getSelection().length !== start); + }, + + + + + selectWithEvent: function(record, e, keepExisting) { + var me = this, + isSelected = me.isSelected(record); + + switch (me.selectionMode) { + case 'MULTI': + if (e.shiftKey && me.selectionStart) { + me.selectRange(me.selectionStart, record, e.ctrlKey); + } else if (e.ctrlKey && isSelected) { + me.doDeselect(record, false); + } else if (e.ctrlKey) { + me.doSelect(record, true, false); + } else if (isSelected && !e.shiftKey && !e.ctrlKey && me.selected.getCount() > 1) { + me.doSelect(record, keepExisting, false); + } else if (!isSelected) { + me.doSelect(record, false); + } + break; + case 'SIMPLE': + if (isSelected) { + me.doDeselect(record); + } else { + me.doSelect(record, true); + } + break; + case 'SINGLE': + + if (me.allowDeselect && isSelected) { + me.doDeselect(record); + + } else { + me.doSelect(record, false); + } + break; + } + + + + + + if (!e.shiftKey) { + if (me.isSelected(record)) { + me.selectionStart = record; + } else { + me.selectionStart = null; + } + } + }, + + + + + afterKeyNavigate: function(e, record) { + var me = this, + recIdx, + fromIdx, + isSelected = me.isSelected(record), + from = (me.selectionStart && me.isSelected(me.lastFocused)) ? me.selectionStart : (me.selectionStart = me.lastFocused), + key = e.getCharCode(), + isSpace = key === e.SPACE, + direction = key === e.UP || key === e.PAGE_UP ? 'up' : (key === e.DOWN || key === e.DOWN ? 'down' : null); + + switch (me.selectionMode) { + case 'MULTI': + + if (isSpace) { + + if (e.shiftKey) { + me.selectRange(from, record, e.ctrlKey); + } else { + + + if (isSelected) { + me.doDeselect(record, e.ctrlKey); + + + + me.setLastFocused(null); + me.setLastFocused(record); + } + + else { + me.doSelect(record, e.ctrlKey); + } + } + } + + + else if (e.shiftKey && from) { + + + fromIdx = me.store.indexOf(from); + recIdx = me.store.indexOf(record); + + + if (direction === 'up' && fromIdx <= recIdx) { + me.deselectRange(me.lastFocused, recIdx + 1); + } + else if (direction === 'down' && fromIdx >= recIdx) { + me.deselectRange(me.lastFocused, recIdx - 1); + } + + + else if (from !== record) { + me.selectRange(from, record, e.ctrlKey); + } + me.lastSelected = record; + me.setLastFocused(record); + } + + + else if (e.ctrlKey && isSelected) { + me.setLastFocused(record); + } + + + else if (e.ctrlKey) { + me.setLastFocused(record); + } + + + else { + me.doSelect(record, false); + } + break; + case 'SIMPLE': + if (isSelected) { + me.doDeselect(record); + } else { + me.doSelect(record, true); + } + break; + case 'SINGLE': + + if (isSpace) { + if (isSelected) { + me.doDeselect(record); + me.setLastFocused(record); + } else { + me.doSelect(record); + } + } + + + else if (e.ctrlKey) { + me.setLastFocused(record); + } + + + else if (me.allowDeselect && isSelected) { + me.doDeselect(record); + } + + + else { + me.doSelect(record, false); + } + break; + } + + + + + + if (!e.shiftKey) { + if (me.isSelected(record)) { + me.selectionStart = record; + } + } + }, + + + selectRange : function(startRow, endRow, keepExisting) { + var me = this, + store = me.store, + i, + toSelect = []; + + if (me.isLocked()){ + return; + } + + if (!keepExisting) { + me.deselectAll(true); + } + + if (!Ext.isNumber(startRow)) { + startRow = store.indexOf(startRow); + } + if (!Ext.isNumber(endRow)) { + endRow = store.indexOf(endRow); + } + + + if (startRow > endRow){ + i = endRow; + endRow = startRow; + startRow = i; + } + + for (i = startRow; i <= endRow; i++){ + if (!me.isSelected(store.getAt(i))) { + toSelect.push(store.getAt(i)); + } + } + me.doMultiSelect(toSelect, true); + }, + + + deselectRange : function(startRow, endRow) { + var me = this, + store = me.store, + i, + tmp, + record; + + if (me.isLocked()){ + return; + } + + if (!Ext.isNumber(startRow)) { + startRow = store.indexOf(startRow); + } + if (!Ext.isNumber(endRow)) { + endRow = store.indexOf(endRow); + } + + + if (startRow > endRow){ + tmp = endRow; + endRow = startRow; + startRow = tmp; + } + + for (i = startRow; i <= endRow; i++) { + record = store.getAt(i); + if (me.isSelected(record)) { + me.deselect(record); + } + } + }, + + onModelIdChanged: function(store, model, oldId, newId, oldInternalId) { + this.selected.updateKey(oldInternalId, newId); + }, + + + select: function(records, keepExisting, suppressEvent) { + + if (Ext.isDefined(records)) { + this.doSelect(records, keepExisting, suppressEvent); + } + }, + + + deselect: function(records, suppressEvent) { + this.doDeselect(records, suppressEvent); + }, + + doSelect: function(records, keepExisting, suppressEvent) { + var me = this, + record; + + if (me.locked || !me.store) { + return; + } + if (typeof records === "number") { + record = me.store.getAt(records); + + if (!record) { + return; + } + records = [record]; + } + if (me.selectionMode == "SINGLE" && records) { + record = records.length ? records[0] : records; + me.doSingleSelect(record, suppressEvent); + } else { + me.doMultiSelect(records, keepExisting, suppressEvent); + } + }, + + doMultiSelect: function(records, keepExisting, suppressEvent) { + var me = this, + selected = me.selected, + change = false, + i = 0, + len, record; + + if (me.locked) { + return; + } + + + records = !Ext.isArray(records) ? [records] : records; + len = records.length; + if (!keepExisting && selected.getCount() > 0) { + if (me.doDeselect(me.getSelection(), suppressEvent) === false) { + return; + } + + } + + function commit () { + selected.add(record); + change = true; + } + + for (; i < len; i++) { + record = records[i]; + if (keepExisting && me.isSelected(record)) { + continue; + } + me.lastSelected = record; + + me.onSelectChange(record, true, suppressEvent, commit); + } + if (!me.preventFocus) { + me.setLastFocused(record, suppressEvent); + } + + me.maybeFireSelectionChange(change && !suppressEvent); + }, + + + doDeselect: function(records, suppressEvent) { + var me = this, + selected = me.selected, + i = 0, + len, record, + attempted = 0, + accepted = 0; + + if (me.locked || !me.store) { + return false; + } + + if (typeof records === "number") { + + record = me.store.getAt(records); + if (!record) { + return false; + } + records = [record]; + } else if (!Ext.isArray(records)) { + records = [records]; + } + + function commit () { + ++accepted; + selected.remove(record); + } + + len = records.length; + + for (; i < len; i++) { + record = records[i]; + if (me.isSelected(record)) { + if (me.lastSelected === record) { + me.lastSelected = selected.last(); + if (me.lastFocused === record) { + me.setLastFocused(null); + } + } + ++attempted; + me.onSelectChange(record, false, suppressEvent, commit); + } + } + + + me.maybeFireSelectionChange(accepted > 0 && !suppressEvent); + return accepted === attempted; + }, + + doSingleSelect: function(record, suppressEvent) { + var me = this, + changed = false, + selected = me.selected; + + if (me.locked) { + return; + } + + + if (me.isSelected(record)) { + return; + } + + function commit () { + me.bulkChange = true; + if (selected.getCount() > 0 && me.doDeselect(me.lastSelected, suppressEvent) === false) { + delete me.bulkChange; + return false; + } + delete me.bulkChange; + + selected.add(record); + me.lastSelected = record; + changed = true; + } + + me.onSelectChange(record, true, suppressEvent, commit); + + if (changed) { + if (!suppressEvent && !me.preventFocus) { + me.setLastFocused(record); + } + me.maybeFireSelectionChange(!suppressEvent); + } + }, + + + setLastFocused: function(record, supressFocus) { + var me = this, + recordBeforeLast = me.lastFocused; + + me.lastFocused = record; + + + if (record !== recordBeforeLast) { + me.onLastFocusChanged(recordBeforeLast, record, supressFocus); + } + }, + + + isFocused: function(record) { + return record === this.getLastFocused(); + }, + + + + + maybeFireSelectionChange: function(fireEvent) { + var me = this; + if (fireEvent && !me.bulkChange) { + me.fireEvent('selectionchange', me, me.getSelection()); + } + }, + + + getLastSelected: function() { + return this.lastSelected; + }, + + getLastFocused: function() { + return this.lastFocused; + }, + + + getSelection: function() { + return this.selected.getRange(); + }, + + + getSelectionMode: function() { + return this.selectionMode; + }, + + + setSelectionMode: function(selMode) { + selMode = selMode ? selMode.toUpperCase() : 'SINGLE'; + + + this.selectionMode = this.modes[selMode] ? selMode : 'SINGLE'; + }, + + + isLocked: function() { + return this.locked; + }, + + + setLocked: function(locked) { + this.locked = !!locked; + }, + + + isRangeSelected: function(from, to) { + var me = this, + store = me.store, + startIdx = store.indexOf(from), + endIdx = store.indexOf(to), + i; + + if (endIdx < startIdx) { + i = endIdx; + endIdx = startIdx; + startIdx = i; + } + + + for (i = startIdx; i <= endIdx; i++) { + if (!me.isSelected(store.getAt(i))) { + return false; + } + } + return true; + }, + + + isSelected: function(record) { + record = Ext.isNumber(record) ? this.store.getAt(record) : record; + return this.selected.contains(record); + }, + + + hasSelection: function() { + return this.selected.getCount() > 0; + }, + + getSelectionId: function(record){ + return record.internalId; + }, + + pruneIf: function() { + var me = this, + selected = me.selected, + toRemove = [], + len = selected.length, + i, item; + + if (me.pruneRemoved) { + for (i = 0; i < len; i++) { + item = selected.getAt(i); + if (!this.storeHasSelected(item)) { + toRemove.push(item); + } + } + if (toRemove.length) { + for (i = 0, len = toRemove.length; i < len; i++) { + selected.remove(toRemove[i]); + } + me.maybeFireSelectionChange(true); + } + } + }, + + + + + storeHasSelected: function(record) { + var store = this.store, + records, + len, id, i; + + if (record.hasId() && store.getById(record)) { + return true; + } else { + records = store.data.items; + len = records.length; + id = record.internalId; + + for (i = 0; i < len; ++i) { + if (id === records[i].internalId) { + return true; + } + } + } + return false; + }, + + refresh: function() { + var me = this, + store = me.store, + rec, + toBeSelected = [], + toBeReAdded = [], + oldSelections = me.getSelection(), + len = oldSelections.length, + selection, + change, + i = 0, + lastFocused = me.getLastFocused(); + + + if (!store) { + return; + } + + + + for (; i < len; i++) { + selection = oldSelections[i]; + if (store.indexOf(selection) !== -1) { + toBeSelected.push(selection); + } + + + else if (!me.pruneRemoved) { + + rec = store.getById(selection.getId()); + if (rec) { + toBeSelected.push(rec); + } + + else { + toBeReAdded.push(selection) + } + } + + + if (me.mode === 'SINGLE' && toBeReAdded.length) { + break; + } + } + + + + if (me.selected.getCount() != (toBeSelected.length + toBeReAdded.length)) { + change = true; + } + + me.clearSelections(); + + if (store.indexOf(lastFocused) !== -1) { + + me.setLastFocused(lastFocused, true); + } + + if (toBeSelected.length) { + + me.doSelect(toBeSelected, false, true); + } + + + if (toBeReAdded.length) { + me.selected.addAll(toBeReAdded); + + + if (!me.lastSelected) { + me.lastSelected = toBeReAdded[toBeReAdded.length - 1]; + } + } + + me.maybeFireSelectionChange(change); + }, + + + clearSelections: function() { + + this.selected.clear(); + this.lastSelected = null; + this.setLastFocused(null); + }, + + + onStoreAdd: Ext.emptyFn, + + + + onStoreClear: function() { + if (this.selected.getCount() > 0) { + this.clearSelections(); + this.maybeFireSelectionChange(true); + } + }, + + + + + onStoreRemove: function(store, records, indexes, isMove) { + var me = this; + + + if (me.selectionStart && Ext.Array.contains(records, me.selectionStart)) { + me.selectionStart = null; + } + + if (isMove || me.locked || !me.pruneRemoved) { + return; + } + me.deselectDeletedRecords(records); + }, + + + + deselectDeletedRecords: function(records) { + var me = this, + selected = me.selected, + i, length = records.length, + removed = 0, + record; + + + for (i = 0; i < length; i++) { + record = records[i]; + if (selected.remove(record)) { + if (me.lastSelected == record) { + me.lastSelected = null; + } + if (me.getLastFocused() == record) { + me.setLastFocused(null); + } + ++removed; + } + } + if (removed) { + me.maybeFireSelectionChange(true); + } + }, + + + getCount: function() { + return this.selected.getCount(); + }, + + + onUpdate: Ext.emptyFn, + + + destroy: Ext.emptyFn, + + + onStoreUpdate: Ext.emptyFn, + + onStoreRefresh: Ext.emptyFn, + + + onStoreLoad: Ext.emptyFn, + + + onSelectChange: Ext.emptyFn, + + + onLastFocusChanged: function(oldFocused, newFocused) { + this.fireEvent('focuschange', this, oldFocused, newFocused); + }, + + + onEditorKey: Ext.emptyFn, + + + bindComponent: Ext.emptyFn, + + + beforeViewRender: Ext.emptyFn + +}); + + +Ext.define('Ext.selection.DataViewModel', { + extend: Ext.selection.Model , + + + + deselectOnContainerClick: true, + + + enableKeyNav: true, + + constructor: function(cfg){ + this.addEvents( + + 'beforedeselect', + + + 'beforeselect', + + + 'deselect', + + + 'select' + ); + this.callParent(arguments); + }, + + bindComponent: function(view) { + var me = this, + eventListeners = { + refresh: me.refresh, + scope: me + }; + + me.view = view; + me.bindStore(view.getStore()); + + eventListeners[view.triggerEvent] = me.onItemClick; + eventListeners[view.triggerCtEvent] = me.onContainerClick; + + view.on(eventListeners); + + if (me.enableKeyNav) { + me.initKeyNav(view); + } + }, + + onUpdate: function(record){ + var view = this.view; + if (view && this.isSelected(record)) { + view.onItemSelect(record); + } + }, + + onItemClick: function(view, record, item, index, e) { + this.selectWithEvent(record, e); + }, + + onContainerClick: function() { + if (this.deselectOnContainerClick) { + this.deselectAll(); + } + }, + + initKeyNav: function(view) { + var me = this; + + if (!view.rendered) { + view.on({ + render: Ext.Function.bind(me.initKeyNav, me, [view]), + single: true + }); + return; + } + + view.el.set({ + tabIndex: -1 + }); + me.keyNav = new Ext.util.KeyNav({ + target: view.el, + ignoreInputFields: true, + down: Ext.pass(me.onNavKey, [1], me), + right: Ext.pass(me.onNavKey, [1], me), + left: Ext.pass(me.onNavKey, [-1], me), + up: Ext.pass(me.onNavKey, [-1], me), + scope: me + }); + }, + + onNavKey: function(step) { + step = step || 1; + var me = this, + view = me.view, + selected = me.getSelection()[0], + numRecords = me.view.store.getCount(), + idx; + + if (selected) { + idx = view.indexOf(view.getNode(selected)) + step; + } else { + idx = 0; + } + + if (idx < 0) { + idx = numRecords - 1; + } else if (idx >= numRecords) { + idx = 0; + } + + me.select(idx); + }, + + + onSelectChange: function(record, isSelected, suppressEvent, commitFn) { + var me = this, + view = me.view, + eventName = isSelected ? 'select' : 'deselect'; + + if ((suppressEvent || me.fireEvent('before' + eventName, me, record)) !== false && + commitFn() !== false) { + + if (view) { + if (isSelected) { + view.onItemSelect(record); + } else { + view.onItemDeselect(record); + } + } + + if (!suppressEvent) { + me.fireEvent(eventName, me, record); + } + } + }, + + onLastFocusChanged: function(oldFocus, newFocus, suppressFocus){ + var view = this.view; + if (view && !suppressFocus && newFocus) { + view.focusNode(newFocus); + this.fireEvent('focuschange', this, oldFocus, newFocus); + } + }, + + destroy: function(){ + Ext.destroy(this.keyNav); + this.callParent(); + } +}); + + +Ext.define('Ext.view.AbstractView', { + extend: Ext.Component , + + + + + + + + mixins: { + bindable: Ext.util.Bindable + }, + + inheritableStatics: { + getRecord: function(node) { + return this.getBoundView(node).getRecord(node); + }, + + getBoundView: function(node) { + return Ext.getCmp(node.boundView); + } + }, + + + + + + deferInitialRefresh: true, + + + + + itemCls: Ext.baseCSSPrefix + 'dataview-item', + + + + + + + + loadingText: 'Loading...', + + + + loadMask: true, + + + + + loadingUseMsg: true, + + + + + + selectedItemCls: Ext.baseCSSPrefix + 'item-selected', + + + + emptyText: "", + + + + deferEmptyText: true, + + + trackOver: false, + + + blockRefresh: false, + + + + + preserveScrollOnRefresh: false, + + + last: false, + + triggerEvent: 'itemclick', + triggerCtEvent: 'containerclick', + + addCmpEvents: function() { + + }, + + + initComponent : function(){ + var me = this, + isDef = Ext.isDefined, + itemTpl = me.itemTpl, + memberFn = {}; + + if (itemTpl) { + if (Ext.isArray(itemTpl)) { + + itemTpl = itemTpl.join(''); + } else if (Ext.isObject(itemTpl)) { + + memberFn = Ext.apply(memberFn, itemTpl.initialConfig); + itemTpl = itemTpl.html; + } + + if (!me.itemSelector) { + me.itemSelector = '.' + me.itemCls; + } + + itemTpl = Ext.String.format('
    {1}
    ', me.itemCls, itemTpl); + me.tpl = new Ext.XTemplate(itemTpl, memberFn); + } + + + me.callParent(); + me.tpl = me.getTpl('tpl'); + + + if (me.overItemCls) { + me.trackOver = true; + } + + me.addEvents( + + 'beforerefresh', + + 'refresh', + + 'viewready', + + 'itemupdate', + + 'itemadd', + + 'itemremove' + ); + + me.addCmpEvents(); + + + me.store = Ext.data.StoreManager.lookup(me.store || 'ext-empty-store'); + + + if (!me.dataSource) { + me.dataSource = me.store; + } + + + me.bindStore(me.dataSource, true, 'dataSource'); + if (!me.all) { + me.all = new Ext.CompositeElementLite(); + } + + + me.scrollState = { + top: 0, + left: 0 + }; + me.on({ + scroll: me.onViewScroll, + element: 'el', + scope: me + }); + }, + + onRender: function() { + var me = this, + mask = me.loadMask, + cfg = { + target: me, + msg: me.loadingText, + msgCls: me.loadingCls, + useMsg: me.loadingUseMsg, + + + store: me.getMaskStore() + }; + + me.callParent(arguments); + + if (mask) { + + if (Ext.isObject(mask)) { + cfg = Ext.apply(cfg, mask); + } + + + + + me.loadMask = new Ext.LoadMask(cfg); + me.loadMask.on({ + scope: me, + beforeshow: me.onMaskBeforeShow, + hide: me.onMaskHide + }); + } + }, + + finishRender: function() { + var me = this; + me.callParent(arguments); + + + if (!me.up('[collapsed],[hidden]')) { + me.doFirstRefresh(me.dataSource); + } + }, + + onBoxReady: function() { + var me = this; + + me.callParent(arguments); + + + + if (!me.firstRefreshDone) { + me.doFirstRefresh(me.dataSource); + } + }, + + getMaskStore: function(){ + return this.store; + }, + + onMaskBeforeShow: function(){ + var me = this, + loadingHeight = me.loadingHeight; + + if (loadingHeight && loadingHeight > me.getHeight()) { + me.hasLoadingHeight = true; + me.oldMinHeight = me.minHeight; + me.minHeight = loadingHeight; + me.updateLayout(); + } + }, + + onMaskHide: function(){ + var me = this; + + if (!me.destroying && me.hasLoadingHeight) { + me.minHeight = me.oldMinHeight; + me.updateLayout(); + delete me.hasLoadingHeight; + } + }, + + beforeRender: function() { + this.callParent(arguments); + this.getSelectionModel().beforeViewRender(this); + }, + + afterRender: function() { + this.callParent(arguments); + + + + + this.getSelectionModel().bindComponent(this); + }, + + + getSelectionModel: function(){ + var me = this, + mode = 'SINGLE'; + + if (me.simpleSelect) { + mode = 'SIMPLE'; + } else if (me.multiSelect) { + mode = 'MULTI'; + } + + + if (!me.selModel || !me.selModel.events) { + me.selModel = new Ext.selection.DataViewModel(Ext.apply({ + allowDeselect: me.allowDeselect, + mode: mode + }, me.selModel)); + } + + if (!me.selModel.hasRelaySetup) { + me.relayEvents(me.selModel, [ + 'selectionchange', 'beforeselect', 'beforedeselect', 'select', 'deselect', 'focuschange' + ]); + me.selModel.hasRelaySetup = true; + } + + + + if (me.disableSelection) { + me.selModel.locked = true; + } + + return me.selModel; + }, + + + refresh: function() { + var me = this, + targetEl, + targetParent, + oldDisplay, + nextSibling, + dom, + records; + + if (!me.rendered || me.isDestroyed) { + return; + } + + if (!me.hasListeners.beforerefresh || me.fireEvent('beforerefresh', me) !== false) { + targetEl = me.getTargetEl(); + records = me.getViewRange(); + dom = targetEl.dom; + + + + if (!me.preserveScrollOnRefresh) { + targetParent = dom.parentNode; + oldDisplay = dom.style.display; + dom.style.display = 'none'; + nextSibling = dom.nextSibling; + targetParent.removeChild(dom); + } + + if (me.refreshCounter) { + me.clearViewEl(); + } else { + me.fixedNodes = targetEl.dom.childNodes.length; + me.refreshCounter = 1; + } + + + + + + me.tpl.append(targetEl, me.collectData(records, me.all.startIndex)); + + + + if (records.length < 1) { + + if (!this.store.loading && (!me.deferEmptyText || me.hasFirstRefresh)) { + Ext.core.DomHelper.insertHtml('beforeEnd', targetEl.dom, me.emptyText); + } + me.all.clear(); + } else { + me.collectNodes(targetEl.dom); + me.updateIndexes(0); + } + + + if (me.hasFirstRefresh) { + + if (me.refreshSelmodelOnRefresh !== false) { + me.selModel.refresh(); + } else { + + me.selModel.pruneIf(); + } + } + + me.hasFirstRefresh = true; + + if (!me.preserveScrollOnRefresh) { + targetParent.insertBefore(dom, nextSibling); + dom.style.display = oldDisplay; + } + + + this.refreshSize(); + + me.fireEvent('refresh', me); + + + + if (!me.viewReady) { + + + me.viewReady = true; + me.fireEvent('viewready', me); + } + } + }, + + + + collectNodes: function(targetEl) { + this.all.fill(Ext.query(this.getItemSelector(), Ext.getDom(targetEl)), this.all.startIndex); + }, + + getViewRange: function() { + return this.dataSource.getRange(); + }, + + + refreshSize: function() { + var sizeModel = this.getSizeModel(); + if (sizeModel.height.shrinkWrap || sizeModel.width.shrinkWrap) { + this.updateLayout(); + } + }, + + clearViewEl: function(){ + + + + + + + + + var me = this, + el = me.getTargetEl(); + + if (me.fixedNodes) { + while (el.dom.childNodes[me.fixedNodes]) { + el.dom.removeChild(el.dom.childNodes[me.fixedNodes]); + } + } else { + el.update(''); + } + me.refreshCounter++; + }, + + + onViewScroll: Ext.emptyFn, + + onIdChanged: Ext.emptyFn, + + + saveScrollState: function() { + if (this.rendered) { + var dom = this.el.dom, + state = this.scrollState; + + state.left = dom.scrollLeft; + state.top = dom.scrollTop; + } + }, + + + restoreScrollState: function() { + if (this.rendered) { + var dom = this.el.dom, + state = this.scrollState; + + dom.scrollLeft = state.left; + dom.scrollTop = state.top; + } + }, + + + prepareData: function(data, index, record) { + var associatedData, attr, hasCopied; + if (record) { + associatedData = record.getAssociatedData(); + for (attr in associatedData) { + if (associatedData.hasOwnProperty(attr)) { + + + + + if (!hasCopied) { + data = Ext.Object.chain(data); + hasCopied = true; + } + data[attr] = associatedData[attr]; + } + } + } + return data; + }, + + + collectData: function(records, startIndex){ + var data = [], + i = 0, + len = records.length, + record; + + for (; i < len; i++) { + record = records[i]; + data[i] = this.prepareData(record.data, startIndex + i, record); + } + return data; + }, + + + bufferRender : function(records, index) { + var me = this, + div = me.renderBuffer || (me.renderBuffer = document.createElement('div')); + + me.tpl.overwrite(div, me.collectData(records, index)); + return Ext.DomQuery.select(me.getItemSelector(), div); + }, + + getNodeContainer: function() { + return this.getTargetEl(); + }, + + + onUpdate : function(ds, record){ + var me = this, + index, + node; + + if (me.viewReady) { + index = me.dataSource.indexOf(record); + if (index > -1) { + node = me.bufferRender([record], index)[0]; + + if (me.getNode(record)) { + me.all.replaceElement(index, node, true); + me.updateIndexes(index, index); + + me.selModel.onUpdate(record); + if (me.hasListeners.itemupdate) { + me.fireEvent('itemupdate', record, index, node); + } + return node; + } + } + } + + }, + + + onAdd : function(store, records, index) { + var me = this, + nodes; + + if (me.rendered) { + + + if (me.all.getCount() === 0) { + me.refresh(); + nodes = me.all.slice(); + } else { + nodes = me.doAdd(records, index); + + if (me.refreshSelmodelOnRefresh !== false) { + me.selModel.refresh(); + } + me.updateIndexes(index); + + + me.refreshSize(); + } + + if (me.hasListeners.itemadd) { + me.fireEvent('itemadd', records, index, nodes); + } + } + + }, + + doAdd: function(records, index) { + var me = this, + nodes = me.bufferRender(records, index, true), + all = me.all, + count = all.getCount(), + i, l; + + if (count === 0) { + for (i = 0, l = nodes.length; i < l; i++) { + this.getNodeContainer().appendChild(nodes[i]); + } + } else if (index < count) { + if (index === 0) { + all.item(index).insertSibling(nodes, 'before', true); + } else { + all.item(index - 1).insertSibling(nodes, 'after', true); + } + } else { + all.last().insertSibling(nodes, 'after', true); + } + + all.insert(index, nodes); + return nodes; + }, + + + onRemove : function(ds, records, indexes) { + var me = this, + fireItemRemove = me.hasListeners.itemremove, + i, + record, + index; + + if (me.all.getCount()) { + if (me.dataSource.getCount() === 0) { + + if (fireItemRemove) { + for (i = indexes.length - 1; i >= 0; --i) { + me.fireEvent('itemremove', records[i], indexes[i]); + } + } + me.refresh(); + } else { + + + for (i = indexes.length - 1; i >= 0; --i) { + record = records[i]; + index = indexes[i]; + me.doRemove(record, index); + if (fireItemRemove) { + me.fireEvent('itemremove', record, index); + } + } + me.updateIndexes(indexes[0]); + } + + + this.refreshSize(); + } + }, + + + doRemove: function(record, index) { + this.all.removeElement(index, true); + }, + + + refreshNode : function(index) { + this.onUpdate(this.dataSource, this.dataSource.getAt(index)); + }, + + + updateIndexes : function(startIndex, endIndex) { + var nodes = this.all.elements, + records = this.getViewRange(), + i; + + startIndex = startIndex || 0; + endIndex = endIndex || ((endIndex === 0) ? 0 : (nodes.length - 1)); + for (i = startIndex; i <= endIndex; i++) { + nodes[i].viewIndex = i; + nodes[i].viewRecordId = records[i].internalId; + if (!nodes[i].boundView) { + nodes[i].boundView = this.id; + } + } + }, + + + getStore : function() { + return this.store; + }, + + + bindStore : function(store, initial, propName) { + var me = this; + me.mixins.bindable.bindStore.apply(me, arguments); + + + + if (!initial) { + me.getSelectionModel().bindStore(store); + } + + + + + if (me.componentLayoutCounter) { + me.doFirstRefresh(store); + } + }, + + + doFirstRefresh: function(store) { + var me = this; + + + me.firstRefreshDone = true; + + + + + + + if (store && !store.loading) { + if (me.deferInitialRefresh) { + me.applyFirstRefresh(); + } else { + me.refresh(); + } + } + }, + + applyFirstRefresh: function(){ + var me = this; + if (me.isDestroyed) { + return; + } + + + + + + + + + + if (me.up('[isCollapsingOrExpanding]')) { + Ext.Function.defer(me.applyFirstRefresh, 100, me); + } else { + Ext.Function.defer(function () { + if (!me.isDestroyed) { + me.refresh(); + } + }, 1); + } + }, + + onUnbindStore: function(store) { + this.setMaskBind(null); + }, + + onBindStore: function(store, initial, propName) { + this.setMaskBind(store); + if (!initial && propName === 'store') { + this.bindStore(store, false, 'dataSource'); + } + }, + + setMaskBind: function(store) { + var mask = this.loadMask; + if (mask && mask.bindStore) { + mask.bindStore(store); + } + }, + + getStoreListeners: function() { + var me = this; + return { + idchanged: me.onIdChanged, + refresh: me.onDataRefresh, + add: me.onAdd, + bulkremove: me.onRemove, + update: me.onUpdate, + clear: me.refresh + }; + }, + + + onDataRefresh: function() { + var me = this, + + + blockedByAncestor = !me.firstRefreshDone && (!me.rendered || me.up('[collapsed],[isCollapsingOrExpanding],[hidden]')); + + + + + + if (blockedByAncestor) { + me.deferInitialRefresh = false; + } else if (me.blockRefresh !== true) { + me.firstRefreshDone = true; + me.refresh.apply(me, arguments); + } + + }, + + + findItemByChild: function(node){ + return Ext.fly(node).findParent(this.getItemSelector(), this.getTargetEl()); + }, + + + findTargetByEvent: function(e) { + return e.getTarget(this.getItemSelector(), this.getTargetEl()); + }, + + + + getSelectedNodes: function(){ + var nodes = [], + records = this.selModel.getSelection(), + ln = records.length, + i = 0; + + for (; i < ln; i++) { + nodes.push(this.getNode(records[i])); + } + + return nodes; + }, + + + getRecords: function(nodes) { + var records = [], + i = 0, + len = nodes.length, + data = this.dataSource.data; + + for (; i < len; i++) { + records[records.length] = data.getByKey(nodes[i].viewRecordId); + } + + return records; + }, + + + getRecord: function(node){ + return this.dataSource.data.getByKey(Ext.getDom(node).viewRecordId); + }, + + + + isSelected : function(node) { + + var r = this.getRecord(node); + return this.selModel.isSelected(r); + }, + + + select: function(records, keepExisting, suppressEvent) { + this.selModel.select(records, keepExisting, suppressEvent); + }, + + + deselect: function(records, suppressEvent) { + this.selModel.deselect(records, suppressEvent); + }, + + + getNode : function(nodeInfo) { + if ((!nodeInfo && nodeInfo !== 0) || !this.rendered) { + return null; + } + + if (Ext.isString(nodeInfo)) { + return document.getElementById(nodeInfo); + } + if (Ext.isNumber(nodeInfo)) { + return this.all.elements[nodeInfo]; + } + if (nodeInfo.isModel) { + return this.getNodeByRecord(nodeInfo); + } + return nodeInfo; + }, + + + getNodeByRecord: function(record) { + var ns = this.all.elements, + ln = ns.length, + i = 0; + + for (; i < ln; i++) { + if (ns[i].viewRecordId === record.internalId) { + return ns[i]; + } + } + + return null; + }, + + + getNodes: function(start, end) { + var all = this.all; + + if (end === undefined) { + end = all.getCount(); + } else { + end++; + } + return all.slice(start||0, end); + }, + + + indexOf: function(node) { + node = this.getNode(node); + if (!node && node !== 0) { + return -1; + } + if (Ext.isNumber(node.viewIndex)) { + return node.viewIndex; + } + return this.all.indexOf(node); + }, + + onDestroy : function() { + var me = this; + + me.all.clear(); + me.callParent(); + me.bindStore(null); + me.selModel.destroy(); + }, + + + onItemSelect: function(record) { + var node = this.getNode(record); + + if (node) { + Ext.fly(node).addCls(this.selectedItemCls); + } + }, + + + onItemDeselect: function(record) { + var node = this.getNode(record); + + if (node) { + Ext.fly(node).removeCls(this.selectedItemCls); + } + }, + + getItemSelector: function() { + return this.itemSelector; + } +}, function() { + + + + + Ext.deprecate('extjs', '4.0', function() { + Ext.view.AbstractView.override({ + + + + + + getSelectionCount : function(){ + if (Ext.global.console) { + Ext.global.console.warn("DataView: getSelectionCount will be removed, please interact with the Ext.selection.DataViewModel"); + } + return this.selModel.getSelection().length; + }, + + + getSelectedRecords : function(){ + if (Ext.global.console) { + Ext.global.console.warn("DataView: getSelectedRecords will be removed, please interact with the Ext.selection.DataViewModel"); + } + return this.selModel.getSelection(); + }, + + + + select: function(records, keepExisting, supressEvents) { + if (Ext.global.console) { + Ext.global.console.warn("DataView: select will be removed, please access select through a DataView's SelectionModel, ie: view.getSelectionModel().select()"); + } + var sm = this.getSelectionModel(); + return sm.select.apply(sm, arguments); + }, + + + clearSelections: function() { + if (Ext.global.console) { + Ext.global.console.warn("DataView: clearSelections will be removed, please access deselectAll through DataView's SelectionModel, ie: view.getSelectionModel().deselectAll()"); + } + var sm = this.getSelectionModel(); + return sm.deselectAll(); + } + }); + }); +}); + + +Ext.define('Ext.view.View', { + extend: Ext.view.AbstractView , + alternateClassName: 'Ext.DataView', + alias: 'widget.dataview', + + + + deferHighlight: Ext.isIE7m ? 100 : 0, + + + mouseOverOutBuffer: 20, + + inputTagRe: /^textarea$|^input$/i, + + inheritableStatics: { + EventMap: { + mousedown: 'MouseDown', + mouseup: 'MouseUp', + click: 'Click', + dblclick: 'DblClick', + contextmenu: 'ContextMenu', + mouseover: 'MouseOver', + mouseout: 'MouseOut', + mouseenter: 'MouseEnter', + mouseleave: 'MouseLeave', + keydown: 'KeyDown', + focus: 'Focus' + } + }, + + initComponent: function() { + var me = this; + me.callParent(); + + + if (me.mouseOverOutBuffer) { + me.handleMouseOverOrOut = + Ext.Function.createBuffered(me.handleMouseOverOrOut, me.mouseOverOutBuffer, me); + me.lastMouseOverOutEvent = new Ext.EventObjectImpl(); + } + + + else if (me.deferHighlight){ + me.setHighlightedItem = + Ext.Function.createBuffered(me.setHighlightedItem, me.deferHighlight, me); + } + }, + + addCmpEvents: function() { + this.addEvents( + + 'beforeitemmousedown', + + 'beforeitemmouseup', + + 'beforeitemmouseenter', + + 'beforeitemmouseleave', + + 'beforeitemclick', + + 'beforeitemdblclick', + + 'beforeitemcontextmenu', + + 'beforeitemkeydown', + + 'itemmousedown', + + 'itemmouseup', + + 'itemmouseenter', + + 'itemmouseleave', + + 'itemclick', + + 'itemdblclick', + + 'itemcontextmenu', + + 'itemkeydown', + + 'beforecontainermousedown', + + 'beforecontainermouseup', + + 'beforecontainermouseover', + + 'beforecontainermouseout', + + 'beforecontainerclick', + + 'beforecontainerdblclick', + + 'beforecontainercontextmenu', + + 'beforecontainerkeydown', + + 'containermouseup', + + 'containermouseover', + + 'containermouseout', + + 'containerclick', + + 'containerdblclick', + + 'containercontextmenu', + + 'containerkeydown', + + + 'selectionchange', + + 'beforeselect', + + 'beforedeselect', + + 'select', + + 'deselect', + + 'focuschange', + + + 'highlightitem', + + + 'unhighlightitem' + ); + }, + + getFocusEl: function() { + return this.getTargetEl(); + }, + + + afterRender: function(){ + var me = this, + onMouseOverOut = me.mouseOverOutBuffer ? me.onMouseOverOut : me.handleMouseOverOrOut; + + me.callParent(); + me.mon(me.getTargetEl(), { + scope: me, + + freezeEvent: true, + click: me.handleEvent, + mousedown: me.handleEvent, + mouseup: me.handleEvent, + dblclick: me.handleEvent, + contextmenu: me.handleEvent, + keydown: me.handleEvent, + mouseover: onMouseOverOut, + mouseout: onMouseOverOut + }); + }, + + onMouseOverOut: function(e) { + var me = this; + + + + me.lastMouseOverOutEvent.setEvent(e.browserEvent, true); + me.handleMouseOverOrOut(me.lastMouseOverOutEvent); + }, + + handleMouseOverOrOut: function(e) { + var me = this, + isMouseout = e.type === 'mouseout', + nowOverItem = e[isMouseout ? 'getRelatedTarget' : 'getTarget'](me.dataRowSelector||me.itemSelector); + + + if (!me.mouseOverItem || nowOverItem !== me.mouseoverItem) { + + + if (me.mouseOverItem) { + e.item = me.mouseOverItem; + e.newType = 'mouseleave'; + me.handleEvent(e); + } + + + me.mouseOverItem = nowOverItem; + if (me.mouseOverItem) { + e.item = me.mouseOverItem; + e.newType = 'mouseenter'; + me.handleEvent(e); + } + } + }, + + handleEvent: function(e) { + var me = this, + key = e.type == 'keydown' && e.getKey(); + + if (me.processUIEvent(e) !== false) { + me.processSpecialEvent(e); + } + + + + + if (key === e.SPACE) { + if (!me.inputTagRe.test(e.getTarget().tagName)) { + e.stopEvent(); + } + } + }, + + + processItemEvent: Ext.emptyFn, + processContainerEvent: Ext.emptyFn, + processSpecialEvent: Ext.emptyFn, + + processUIEvent: function(e) { + + + + if (!Ext.getBody().isAncestor(e.target)) { + return; + } + + var me = this, + item = e.getTarget(me.getItemSelector(), me.getTargetEl()), + map = this.statics().EventMap, + index, record, + type = e.type, + newType = e.type, + sm; + + + + if (e.newType) { + newType = e.newType; + item = e.item; + } + + + + if (!item && type == 'keydown') { + sm = me.getSelectionModel(); + record = sm.lastFocused || sm.getLastSelected(); + if (record) { + item = me.getNode(record, true); + } + } + + if (item) { + if (!record) { + record = me.getRecord(item); + } + index = me.indexInStore ? me.indexInStore(record) : me.indexOf(item); + + + + + if (!record || me.processItemEvent(record, item, index, e) === false) { + return false; + } + + if ( + (me['onBeforeItem' + map[newType]](record, item, index, e) === false) || + (me.fireEvent('beforeitem' + newType, me, record, item, index, e) === false) || + (me['onItem' + map[newType]](record, item, index, e) === false) + ) { + return false; + } + + me.fireEvent('item' + newType, me, record, item, index, e); + } + else { + if ( + (me.processContainerEvent(e) === false) || + (me['onBeforeContainer' + map[type]](e) === false) || + (me.fireEvent('beforecontainer' + type, me, e) === false) || + (me['onContainer' + map[type]](e) === false) + ) { + return false; + } + + me.fireEvent('container' + type, me, e); + } + + return true; + }, + + + onItemMouseEnter: function(record, item, index, e) { + if (this.trackOver) { + this.highlightItem(item); + } + }, + + + onItemMouseLeave : function(record, item, index, e) { + if (this.trackOver) { + this.clearHighlight(); + } + }, + + + onItemMouseDown: Ext.emptyFn, + onItemMouseUp: Ext.emptyFn, + onItemFocus: Ext.emptyFn, + onItemClick: Ext.emptyFn, + onItemDblClick: Ext.emptyFn, + onItemContextMenu: Ext.emptyFn, + onItemKeyDown: Ext.emptyFn, + onBeforeItemMouseDown: Ext.emptyFn, + onBeforeItemMouseUp: Ext.emptyFn, + onBeforeItemFocus: Ext.emptyFn, + onBeforeItemMouseEnter: Ext.emptyFn, + onBeforeItemMouseLeave: Ext.emptyFn, + onBeforeItemClick: Ext.emptyFn, + onBeforeItemDblClick: Ext.emptyFn, + onBeforeItemContextMenu: Ext.emptyFn, + onBeforeItemKeyDown: Ext.emptyFn, + + + onContainerMouseDown: Ext.emptyFn, + onContainerMouseUp: Ext.emptyFn, + onContainerMouseOver: Ext.emptyFn, + onContainerMouseOut: Ext.emptyFn, + onContainerClick: Ext.emptyFn, + onContainerDblClick: Ext.emptyFn, + onContainerContextMenu: Ext.emptyFn, + onContainerKeyDown: Ext.emptyFn, + onBeforeContainerMouseDown: Ext.emptyFn, + onBeforeContainerMouseUp: Ext.emptyFn, + onBeforeContainerMouseOver: Ext.emptyFn, + onBeforeContainerMouseOut: Ext.emptyFn, + onBeforeContainerClick: Ext.emptyFn, + onBeforeContainerDblClick: Ext.emptyFn, + onBeforeContainerContextMenu: Ext.emptyFn, + onBeforeContainerKeyDown: Ext.emptyFn, + + + setHighlightedItem: function(item){ + var me = this, + highlighted = me.highlightedItem; + + if (highlighted != item){ + if (highlighted) { + Ext.fly(highlighted).removeCls(me.overItemCls); + me.fireEvent('unhighlightitem', me, highlighted); + } + + me.highlightedItem = item; + + if (item) { + Ext.fly(item).addCls(me.overItemCls); + me.fireEvent('highlightitem', me, item); + } + } + }, + + + highlightItem: function(item) { + this.setHighlightedItem(item); + }, + + + clearHighlight: function() { + this.setHighlightedItem(undefined); + }, + + onUpdate: function(store, record){ + var me = this, + node, + newNode, + highlighted; + + if (me.viewReady) { + node = me.getNode(record); + newNode = me.callParent(arguments); + highlighted = me.highlightedItem; + + if (highlighted && highlighted === node) { + delete me.highlightedItem; + if (newNode) { + me.highlightItem(newNode); + } + } + } + }, + + refresh: function() { + this.clearHighlight(); + this.callParent(arguments); + }, + + + focusNode: function(rec){ + var me = this, + node = me.getNode(rec, true), + el = me.el, + adjustmentY = 0, + adjustmentX = 0, + elRegion = el.getRegion(), + nodeRegion; + + + + elRegion.bottom = elRegion.top + el.dom.clientHeight; + elRegion.right = elRegion.left + el.dom.clientWidth; + if (node) { + nodeRegion = Ext.fly(node).getRegion(); + + if (nodeRegion.top < elRegion.top) { + adjustmentY = nodeRegion.top - elRegion.top; + + } else if (nodeRegion.bottom > elRegion.bottom) { + adjustmentY = nodeRegion.bottom - elRegion.bottom; + } + + + if (nodeRegion.left < elRegion.left) { + adjustmentX = nodeRegion.left - elRegion.left; + + } else if (nodeRegion.right > elRegion.right) { + adjustmentX = nodeRegion.right - elRegion.right; + } + + if (adjustmentX || adjustmentY) { + me.scrollBy(adjustmentX, adjustmentY, false); + } + el.focus(); + } + } +}); + + +Ext.define('Ext.layout.component.BoundList', { + extend: Ext.layout.component.Auto , + alias: 'layout.boundlist', + + type: 'component', + + beginLayout: function(ownerContext) { + var me = this, + owner = me.owner, + toolbar = owner.pagingToolbar; + + me.callParent(arguments); + + if (owner.floating) { + ownerContext.savedXY = owner.getXY(); + + + owner.setXY([0, -9999]); + } + + if (toolbar) { + ownerContext.toolbarContext = ownerContext.context.getCmp(toolbar); + } + ownerContext.listContext = ownerContext.getEl('listEl'); + }, + + beginLayoutCycle: function(ownerContext){ + var owner = this.owner; + + this.callParent(arguments); + if (ownerContext.heightModel.auto) { + + + + owner.el.setHeight('auto'); + owner.listEl.setHeight('auto'); + } + }, + + getLayoutItems: function() { + var toolbar = this.owner.pagingToolbar; + return toolbar ? [toolbar] : []; + }, + + isValidParent: function() { + + + return true; + }, + + finishedLayout: function(ownerContext) { + var xy = ownerContext.savedXY; + + this.callParent(arguments); + if (xy) { + this.owner.setXY(xy); + } + }, + + measureContentWidth: function(ownerContext) { + return this.owner.listEl.getWidth(); + }, + + measureContentHeight: function(ownerContext) { + return this.owner.listEl.getHeight(); + }, + + publishInnerHeight: function(ownerContext, height) { + var toolbar = ownerContext.toolbarContext, + toolbarHeight = 0; + + if (toolbar) { + toolbarHeight = toolbar.getProp('height'); + } + + if (toolbarHeight === undefined) { + this.done = false; + } else { + ownerContext.listContext.setHeight(height - ownerContext.getFrameInfo().height - toolbarHeight); + } + }, + + calculateOwnerHeightFromContentHeight: function(ownerContext){ + var height = this.callParent(arguments), + toolbar = ownerContext.toolbarContext; + + if (toolbar) { + height += toolbar.getProp('height'); + } + return height; + } +}); + + +Ext.define('Ext.toolbar.TextItem', { + extend: Ext.toolbar.Item , + + alias: 'widget.tbtext', + alternateClassName: 'Ext.Toolbar.TextItem', + + + text: '', + + renderTpl: '{text}', + + baseCls: Ext.baseCSSPrefix + 'toolbar-text', + + beforeRender : function() { + var me = this; + + me.callParent(); + + Ext.apply(me.renderData, { + text: me.text + }); + }, + + + setText : function(text) { + var me = this; + me.text = text; + if (me.rendered) { + me.el.update(text); + me.updateLayout(); + } + } +}); + + +Ext.define('Ext.form.field.Spinner', { + extend: Ext.form.field.Trigger , + alias: 'widget.spinnerfield', + alternateClassName: 'Ext.form.Spinner', + + + trigger1Cls: Ext.baseCSSPrefix + 'form-spinner-up', + trigger2Cls: Ext.baseCSSPrefix + 'form-spinner-down', + + + spinUpEnabled: true, + + + spinDownEnabled: true, + + + keyNavEnabled: true, + + + mouseWheelEnabled: true, + + + repeatTriggerClick: true, + + + onSpinUp: Ext.emptyFn, + + + onSpinDown: Ext.emptyFn, + + triggerTpl: '' + + '
    ' + + '
    ' + + '' + + '', + + initComponent: function() { + this.callParent(); + + this.addEvents( + + 'spin', + + + 'spinup', + + + 'spindown' + ); + }, + + + onRender: function() { + var me = this, + triggers; + + me.callParent(arguments); + triggers = me.triggerEl; + + + me.spinUpEl = triggers.item(0); + + me.spinDownEl = triggers.item(1); + + me.triggerCell = me.spinUpEl.parent(); + + + if (me.keyNavEnabled) { + me.spinnerKeyNav = new Ext.util.KeyNav(me.inputEl, { + scope: me, + up: me.spinUp, + down: me.spinDown + }); + } + + + if (me.mouseWheelEnabled) { + me.mon(me.bodyEl, 'mousewheel', me.onMouseWheel, me); + } + }, + + getSubTplMarkup: function(values) { + var me = this, + childElCls = values.childElCls, + field = Ext.form.field.Base.prototype.getSubTplMarkup.apply(me, arguments); + + return '' + + '' + + '' + + me.getTriggerMarkup() + + '
    ' + field + '
    '; + }, + + getTriggerMarkup: function() { + return this.getTpl('triggerTpl').apply(this.getTriggerData()); + }, + + getTriggerData: function(){ + var me = this, + hideTrigger = (me.readOnly || me.hideTrigger); + + return { + triggerCls: Ext.baseCSSPrefix + 'trigger-cell', + triggerStyle: hideTrigger ? 'display:none' : '', + spinnerUpCls: !me.spinUpEnabled ? me.trigger1Cls + '-disabled': '', + spinnerDownCls: !me.spinDownEnabled ? me.trigger2Cls + '-disabled': '' + }; + }, + + + getTriggerWidth: function() { + var me = this, + totalTriggerWidth = 0; + + if (me.triggerWrap && !me.hideTrigger && !me.readOnly) { + totalTriggerWidth = me.triggerWidth; + } + return totalTriggerWidth; + }, + + + onTrigger1Click: function() { + this.spinUp(); + }, + + + onTrigger2Click: function() { + this.spinDown(); + }, + + + + onTriggerWrapMouseup: function() { + this.inputEl.focus(); + }, + + + spinUp: function() { + var me = this; + if (me.spinUpEnabled && !me.disabled) { + me.fireEvent('spin', me, 'up'); + me.fireEvent('spinup', me); + me.onSpinUp(); + } + }, + + + spinDown: function() { + var me = this; + if (me.spinDownEnabled && !me.disabled) { + me.fireEvent('spin', me, 'down'); + me.fireEvent('spindown', me); + me.onSpinDown(); + } + }, + + + setSpinUpEnabled: function(enabled) { + var me = this, + wasEnabled = me.spinUpEnabled; + me.spinUpEnabled = enabled; + if (wasEnabled !== enabled && me.rendered) { + me.spinUpEl[enabled ? 'removeCls' : 'addCls'](me.trigger1Cls + '-disabled'); + } + }, + + + setSpinDownEnabled: function(enabled) { + var me = this, + wasEnabled = me.spinDownEnabled; + me.spinDownEnabled = enabled; + if (wasEnabled !== enabled && me.rendered) { + me.spinDownEl[enabled ? 'removeCls' : 'addCls'](me.trigger2Cls + '-disabled'); + } + }, + + + onMouseWheel: function(e) { + var me = this, + delta; + if (me.hasFocus) { + delta = e.getWheelDelta(); + if (delta > 0) { + me.spinUp(); + } else if (delta < 0) { + me.spinDown(); + } + e.stopEvent(); + } + }, + + onDestroy: function() { + Ext.destroyMembers(this, 'spinnerKeyNav', 'spinUpEl', 'spinDownEl'); + this.callParent(); + } + +}); + + +Ext.define('Ext.form.field.Number', { + extend: Ext.form.field.Spinner , + alias: 'widget.numberfield', + alternateClassName: ['Ext.form.NumberField', 'Ext.form.Number'], + + + + + + allowDecimals : true, + + + + decimalSeparator : '.', + + + + + submitLocaleSeparator: true, + + + + + decimalPrecision : 2, + + + + minValue: Number.NEGATIVE_INFINITY, + + + maxValue: Number.MAX_VALUE, + + + step: 1, + + + + minText : 'The minimum value for this field is {0}', + + + + + maxText : 'The maximum value for this field is {0}', + + + + + nanText : '{0} is not a valid number', + + + + + negativeText : 'The value cannot be negative', + + + + baseChars : '0123456789', + + + autoStripChars: false, + + initComponent: function() { + var me = this; + me.callParent(); + + me.setMinValue(me.minValue); + me.setMaxValue(me.maxValue); + }, + + + getErrors: function(value) { + var me = this, + errors = me.callParent(arguments), + format = Ext.String.format, + num; + + value = Ext.isDefined(value) ? value : this.processRawValue(this.getRawValue()); + + if (value.length < 1) { + return errors; + } + + value = String(value).replace(me.decimalSeparator, '.'); + + if(isNaN(value)){ + errors.push(format(me.nanText, value)); + } + + num = me.parseValue(value); + + if (me.minValue === 0 && num < 0) { + errors.push(this.negativeText); + } + else if (num < me.minValue) { + errors.push(format(me.minText, me.minValue)); + } + + if (num > me.maxValue) { + errors.push(format(me.maxText, me.maxValue)); + } + + + return errors; + }, + + rawToValue: function(rawValue) { + var value = this.fixPrecision(this.parseValue(rawValue)); + if (value === null) { + value = rawValue || null; + } + return value; + }, + + valueToRaw: function(value) { + var me = this, + decimalSeparator = me.decimalSeparator; + value = me.parseValue(value); + value = me.fixPrecision(value); + value = Ext.isNumber(value) ? value : parseFloat(String(value).replace(decimalSeparator, '.')); + value = isNaN(value) ? '' : String(value).replace('.', decimalSeparator); + return value; + }, + + getSubmitValue: function() { + var me = this, + value = me.callParent(); + + if (!me.submitLocaleSeparator) { + value = value.replace(me.decimalSeparator, '.'); + } + return value; + }, + + onChange: function() { + this.toggleSpinners(); + this.callParent(arguments); + }, + + toggleSpinners: function(){ + var me = this, + value = me.getValue(), + valueIsNull = value === null, + enabled; + + + + if (me.spinUpEnabled || me.spinUpDisabledByToggle) { + enabled = valueIsNull || value < me.maxValue; + me.setSpinUpEnabled(enabled, true); + } + + + if (me.spinDownEnabled || me.spinDownDisabledByToggle) { + enabled = valueIsNull || value > me.minValue; + me.setSpinDownEnabled(enabled, true); + } + }, + + + setMinValue : function(value) { + var me = this, + allowed; + + me.minValue = Ext.Number.from(value, Number.NEGATIVE_INFINITY); + me.toggleSpinners(); + + + if (me.disableKeyFilter !== true) { + allowed = me.baseChars + ''; + if (me.allowDecimals) { + allowed += me.decimalSeparator; + } + if (me.minValue < 0) { + allowed += '-'; + } + allowed = Ext.String.escapeRegex(allowed); + me.maskRe = new RegExp('[' + allowed + ']'); + if (me.autoStripChars) { + me.stripCharsRe = new RegExp('[^' + allowed + ']', 'gi'); + } + } + }, + + + setMaxValue: function(value) { + this.maxValue = Ext.Number.from(value, Number.MAX_VALUE); + this.toggleSpinners(); + }, + + + parseValue : function(value) { + value = parseFloat(String(value).replace(this.decimalSeparator, '.')); + return isNaN(value) ? null : value; + }, + + + fixPrecision : function(value) { + var me = this, + nan = isNaN(value), + precision = me.decimalPrecision; + + if (nan || !value) { + return nan ? '' : value; + } else if (!me.allowDecimals || precision <= 0) { + precision = 0; + } + + return parseFloat(Ext.Number.toFixed(parseFloat(value), precision)); + }, + + beforeBlur : function() { + var me = this, + v = me.parseValue(me.getRawValue()); + + if (!Ext.isEmpty(v)) { + me.setValue(v); + } + }, + + setSpinUpEnabled: function(enabled, internal){ + this.callParent(arguments); + if (!internal) { + delete this.spinUpDisabledByToggle; + } else { + this.spinUpDisabledByToggle = !enabled; + } + }, + + onSpinUp: function() { + var me = this; + + if (!me.readOnly) { + me.setSpinValue(Ext.Number.constrain(me.getValue() + me.step, me.minValue, me.maxValue)); + } + }, + + setSpinDownEnabled: function(enabled, internal){ + this.callParent(arguments); + if (!internal) { + delete this.spinDownDisabledByToggle; + } else { + this.spinDownDisabledByToggle = !enabled; + } + }, + + onSpinDown: function() { + var me = this; + + if (!me.readOnly) { + me.setSpinValue(Ext.Number.constrain(me.getValue() - me.step, me.minValue, me.maxValue)); + } + }, + + setSpinValue: function(value) { + var me = this, + len; + + if (me.enforceMaxLength) { + + + if (me.fixPrecision(value).toString().length > me.maxLength) { + return; + } + } + me.setValue(value); + } +}); + + +Ext.define('Ext.toolbar.Paging', { + extend: Ext.toolbar.Toolbar , + alias: 'widget.pagingtoolbar', + alternateClassName: 'Ext.PagingToolbar', + + mixins: { + bindable: Ext.util.Bindable + }, + + + + displayInfo: false, + + + prependButtons: false, + + + + displayMsg : 'Displaying {0} - {1} of {2}', + + + + + emptyMsg : 'No data to display', + + + + + beforePageText : 'Page', + + + + + afterPageText : 'of {0}', + + + + + firstText : 'First Page', + + + + + prevText : 'Previous Page', + + + + + nextText : 'Next Page', + + + + + lastText : 'Last Page', + + + + + refreshText : 'Refresh', + + + + inputItemWidth : 30, + + + getPagingItems: function() { + var me = this; + + return [{ + itemId: 'first', + tooltip: me.firstText, + overflowText: me.firstText, + iconCls: Ext.baseCSSPrefix + 'tbar-page-first', + disabled: true, + handler: me.moveFirst, + scope: me + },{ + itemId: 'prev', + tooltip: me.prevText, + overflowText: me.prevText, + iconCls: Ext.baseCSSPrefix + 'tbar-page-prev', + disabled: true, + handler: me.movePrevious, + scope: me + }, + '-', + me.beforePageText, + { + xtype: 'numberfield', + itemId: 'inputItem', + name: 'inputItem', + cls: Ext.baseCSSPrefix + 'tbar-page-number', + allowDecimals: false, + minValue: 1, + hideTrigger: true, + enableKeyEvents: true, + keyNavEnabled: false, + selectOnFocus: true, + submitValue: false, + + isFormField: false, + width: me.inputItemWidth, + margins: '-1 2 3 2', + listeners: { + scope: me, + keydown: me.onPagingKeyDown, + blur: me.onPagingBlur + } + },{ + xtype: 'tbtext', + itemId: 'afterTextItem', + text: Ext.String.format(me.afterPageText, 1) + }, + '-', + { + itemId: 'next', + tooltip: me.nextText, + overflowText: me.nextText, + iconCls: Ext.baseCSSPrefix + 'tbar-page-next', + disabled: true, + handler: me.moveNext, + scope: me + },{ + itemId: 'last', + tooltip: me.lastText, + overflowText: me.lastText, + iconCls: Ext.baseCSSPrefix + 'tbar-page-last', + disabled: true, + handler: me.moveLast, + scope: me + }, + '-', + { + itemId: 'refresh', + tooltip: me.refreshText, + overflowText: me.refreshText, + iconCls: Ext.baseCSSPrefix + 'tbar-loading', + handler: me.doRefresh, + scope: me + }]; + }, + + initComponent : function(){ + var me = this, + pagingItems = me.getPagingItems(), + userItems = me.items || me.buttons || []; + + if (me.prependButtons) { + me.items = userItems.concat(pagingItems); + } else { + me.items = pagingItems.concat(userItems); + } + delete me.buttons; + + if (me.displayInfo) { + me.items.push('->'); + me.items.push({xtype: 'tbtext', itemId: 'displayItem'}); + } + + me.callParent(); + + me.addEvents( + + 'change', + + + 'beforechange' + ); + me.on('beforerender', me.onLoad, me, {single: true}); + + me.bindStore(me.store || 'ext-empty-store', true); + }, + + updateInfo : function(){ + var me = this, + displayItem = me.child('#displayItem'), + store = me.store, + pageData = me.getPageData(), + count, msg; + + if (displayItem) { + count = store.getCount(); + if (count === 0) { + msg = me.emptyMsg; + } else { + msg = Ext.String.format( + me.displayMsg, + pageData.fromRecord, + pageData.toRecord, + pageData.total + ); + } + displayItem.setText(msg); + } + }, + + + onLoad : function(){ + var me = this, + pageData, + currPage, + pageCount, + afterText, + count, + isEmpty; + + count = me.store.getCount(); + isEmpty = count === 0; + if (!isEmpty) { + pageData = me.getPageData(); + currPage = pageData.currentPage; + pageCount = pageData.pageCount; + afterText = Ext.String.format(me.afterPageText, isNaN(pageCount) ? 1 : pageCount); + } else { + currPage = 0; + pageCount = 0; + afterText = Ext.String.format(me.afterPageText, 0); + } + + Ext.suspendLayouts(); + me.child('#afterTextItem').setText(afterText); + me.child('#inputItem').setDisabled(isEmpty).setValue(currPage); + me.child('#first').setDisabled(currPage === 1 || isEmpty); + me.child('#prev').setDisabled(currPage === 1 || isEmpty); + me.child('#next').setDisabled(currPage === pageCount || isEmpty); + me.child('#last').setDisabled(currPage === pageCount || isEmpty); + me.child('#refresh').enable(); + me.updateInfo(); + Ext.resumeLayouts(true); + + if (me.rendered) { + me.fireEvent('change', me, pageData); + } + }, + + + getPageData : function(){ + var store = this.store, + totalCount = store.getTotalCount(); + + return { + total : totalCount, + currentPage : store.currentPage, + pageCount: Math.ceil(totalCount / store.pageSize), + fromRecord: ((store.currentPage - 1) * store.pageSize) + 1, + toRecord: Math.min(store.currentPage * store.pageSize, totalCount) + + }; + }, + + + onLoadError : function(){ + if (!this.rendered) { + return; + } + this.child('#refresh').enable(); + }, + + + readPageFromInput : function(pageData){ + var v = this.child('#inputItem').getValue(), + pageNum = parseInt(v, 10); + + if (!v || isNaN(pageNum)) { + this.child('#inputItem').setValue(pageData.currentPage); + return false; + } + return pageNum; + }, + + onPagingFocus : function(){ + this.child('#inputItem').select(); + }, + + + onPagingBlur : function(e){ + var curPage = this.getPageData().currentPage; + this.child('#inputItem').setValue(curPage); + }, + + + onPagingKeyDown : function(field, e){ + var me = this, + k = e.getKey(), + pageData = me.getPageData(), + increment = e.shiftKey ? 10 : 1, + pageNum; + + if (k == e.RETURN) { + e.stopEvent(); + pageNum = me.readPageFromInput(pageData); + if (pageNum !== false) { + pageNum = Math.min(Math.max(1, pageNum), pageData.pageCount); + if(me.fireEvent('beforechange', me, pageNum) !== false){ + me.store.loadPage(pageNum); + } + } + } else if (k == e.HOME || k == e.END) { + e.stopEvent(); + pageNum = k == e.HOME ? 1 : pageData.pageCount; + field.setValue(pageNum); + } else if (k == e.UP || k == e.PAGE_UP || k == e.DOWN || k == e.PAGE_DOWN) { + e.stopEvent(); + pageNum = me.readPageFromInput(pageData); + if (pageNum) { + if (k == e.DOWN || k == e.PAGE_DOWN) { + increment *= -1; + } + pageNum += increment; + if (pageNum >= 1 && pageNum <= pageData.pageCount) { + field.setValue(pageNum); + } + } + } + }, + + + beforeLoad : function(){ + if(this.rendered && this.refresh){ + this.refresh.disable(); + } + }, + + + moveFirst : function(){ + if (this.fireEvent('beforechange', this, 1) !== false){ + this.store.loadPage(1); + } + }, + + + movePrevious : function(){ + var me = this, + prev = me.store.currentPage - 1; + + if (prev > 0) { + if (me.fireEvent('beforechange', me, prev) !== false) { + me.store.previousPage(); + } + } + }, + + + moveNext : function(){ + var me = this, + total = me.getPageData().pageCount, + next = me.store.currentPage + 1; + + if (next <= total) { + if (me.fireEvent('beforechange', me, next) !== false) { + me.store.nextPage(); + } + } + }, + + + moveLast : function(){ + var me = this, + last = me.getPageData().pageCount; + + if (me.fireEvent('beforechange', me, last) !== false) { + me.store.loadPage(last); + } + }, + + + doRefresh : function(){ + var me = this, + current = me.store.currentPage; + + if (me.fireEvent('beforechange', me, current) !== false) { + me.store.loadPage(current); + } + }, + + getStoreListeners: function() { + return { + beforeload: this.beforeLoad, + load: this.onLoad, + exception: this.onLoadError + }; + }, + + + unbind : function(store){ + this.bindStore(null); + }, + + + bind : function(store){ + this.bindStore(store); + }, + + + onDestroy : function(){ + this.unbind(); + this.callParent(); + } +}); + + +Ext.define('Ext.view.BoundList', { + extend: Ext.view.View , + alias: 'widget.boundlist', + alternateClassName: 'Ext.BoundList', + + + + pageSize: 0, + + + + + + + baseCls: Ext.baseCSSPrefix + 'boundlist', + itemCls: Ext.baseCSSPrefix + 'boundlist-item', + listItemCls: '', + shadow: false, + trackOver: true, + refreshed: 0, + + + deferInitialRefresh: false, + + componentLayout: 'boundlist', + + childEls: [ + 'listEl' + ], + + renderTpl: [ + '
    ', + '{%', + 'var me=values.$comp, pagingToolbar=me.pagingToolbar;', + 'if (pagingToolbar) {', + 'pagingToolbar.ownerLayout = me.componentLayout;', + 'Ext.DomHelper.generateMarkup(pagingToolbar.getRenderTree(), out);', + '}', + '%}', + { + disableFormats: true + } + ], + + + + initComponent: function() { + var me = this, + baseCls = me.baseCls, + itemCls = me.itemCls; + + me.selectedItemCls = baseCls + '-selected'; + me.overItemCls = baseCls + '-item-over'; + me.itemSelector = "." + itemCls; + + if (me.floating) { + me.addCls(baseCls + '-floating'); + } + + if (!me.tpl) { + + + me.tpl = new Ext.XTemplate( + '
      ', + '
    • ' + me.getInnerTpl(me.displayField) + '
    • ', + '
    ' + ); + } else if (Ext.isString(me.tpl)) { + me.tpl = new Ext.XTemplate(me.tpl); + } + + if (me.pageSize) { + me.pagingToolbar = me.createPagingToolbar(); + } + + me.callParent(); + }, + + beforeRender: function() { + var me = this; + + me.callParent(arguments); + + + + if (me.up('menu')) { + me.addCls(Ext.baseCSSPrefix + 'menu'); + } + }, + + getRefOwner: function() { + return this.pickerField; + }, + + getRefItems: function() { + return this.pagingToolbar ? [ this.pagingToolbar ] : []; + }, + + createPagingToolbar: function() { + return Ext.widget('pagingtoolbar', { + id: this.id + '-paging-toolbar', + pageSize: this.pageSize, + store: this.dataSource, + border: false, + ownerCt: this, + ownerLayout: this.getComponentLayout() + }); + }, + + + + finishRenderChildren: function () { + var toolbar = this.pagingToolbar; + + this.callParent(arguments); + + if (toolbar) { + toolbar.finishRender(); + } + }, + + refresh: function(){ + var me = this, + toolbar = me.pagingToolbar, + rendered = me.rendered; + + me.callParent(); + + + if (rendered && toolbar && toolbar.rendered && !me.preserveScrollOnRefresh) { + me.el.appendChild(toolbar.el); + } + + + + if (rendered && Ext.isIE6 && Ext.isStrict) { + me.listEl.repaint(); + } + }, + + bindStore : function(store, initial) { + var toolbar = this.pagingToolbar; + + this.callParent(arguments); + if (toolbar) { + toolbar.bindStore(store, initial); + } + }, + + getTargetEl: function() { + return this.listEl || this.el; + }, + + + getInnerTpl: function(displayField) { + return '{' + displayField + '}'; + }, + + onDestroy: function() { + Ext.destroyMembers(this, 'pagingToolbar', 'listEl'); + this.callParent(); + } +}); + + +Ext.define('Ext.view.BoundListKeyNav', { + extend: Ext.util.KeyNav , + + + + + constructor: function(el, config) { + var me = this; + me.boundList = config.boundList; + me.callParent([el, Ext.apply({}, config, me.defaultHandlers)]); + }, + + defaultHandlers: { + up: function() { + var me = this, + boundList = me.boundList, + allItems = boundList.all, + oldItem = boundList.highlightedItem, + oldItemIdx = oldItem ? boundList.indexOf(oldItem) : -1, + newItemIdx = oldItemIdx > 0 ? oldItemIdx - 1 : allItems.getCount() - 1; + me.highlightAt(newItemIdx); + }, + + down: function() { + var me = this, + boundList = me.boundList, + allItems = boundList.all, + oldItem = boundList.highlightedItem, + oldItemIdx = oldItem ? boundList.indexOf(oldItem) : -1, + newItemIdx = oldItemIdx < allItems.getCount() - 1 ? oldItemIdx + 1 : 0; + me.highlightAt(newItemIdx); + }, + + pageup: function() { + + }, + + pagedown: function() { + + }, + + home: function() { + this.highlightAt(0); + }, + + end: function() { + var me = this; + me.highlightAt(me.boundList.all.getCount() - 1); + }, + + enter: function(e) { + this.selectHighlighted(e); + } + }, + + + highlightAt: function(index) { + var boundList = this.boundList, + item = boundList.all.item(index); + if (item) { + item = item.dom; + boundList.highlightItem(item); + boundList.getTargetEl().scrollChildIntoView(item, false); + } + }, + + + selectHighlighted: function(e) { + var me = this, + boundList = me.boundList, + highlighted = boundList.highlightedItem, + selModel = boundList.getSelectionModel(); + if (highlighted) { + selModel.selectWithEvent(boundList.getRecord(highlighted), e); + } + } + +}); + + +Ext.define('Ext.layout.component.field.ComboBox', { + extend: Ext.layout.component.field.Trigger , + alias: 'layout.combobox', + + + type: 'combobox', + + startingWidth: null, + + getTextWidth: function () { + var me = this, + owner = me.owner, + store = owner.store, + field = owner.displayField, + storeLn = store.data.length, + value = '', + i = 0, n = 0, ln, item, width; + + for (; i < storeLn; i++) { + item = store.getAt(i).data[field]; + ln = item.length; + + if (ln > n) { + n = ln; + value = item; + } + } + + width = Math.max(me.callParent(arguments), owner.inputEl.getTextWidth(value + owner.growAppend)); + + + + if (!me.startingWidth || owner.removingRecords) { + me.startingWidth = width; + + + + if (width < owner.growMin) { + owner.defaultListConfig.minWidth = owner.growMin; + } + + owner.removingRecords = false; + } + + + return (width < me.startingWidth) ? me.startingWidth : width; + } +}); + + +Ext.define('Ext.form.field.ComboBox', { + extend: Ext.form.field.Picker , + + alternateClassName: 'Ext.form.ComboBox', + alias: ['widget.combobox', 'widget.combo'], + mixins: { + bindable: Ext.util.Bindable + }, + + componentLayout: 'combobox', + + + triggerCls: Ext.baseCSSPrefix + 'form-arrow-trigger', + + + hiddenName: '', + + + + + hiddenDataCls: Ext.baseCSSPrefix + 'hide-display ' + Ext.baseCSSPrefix + 'form-data-hidden', + + + fieldSubTpl: [ + '', + ' value="{[Ext.util.Format.htmlEncode(values.value)]}"
    ', + ' name="{name}"', + ' placeholder="{placeholder}"', + ' size="{size}"', + ' maxlength="{maxLength}"', + ' readonly="readonly"', + ' disabled="disabled"', + ' tabIndex="{tabIdx}"', + ' style="{fieldStyle}"', + '/>', + { + compiled: true, + disableFormats: true + } + ], + + getSubTplData: function(){ + var me = this; + Ext.applyIf(me.subTplData, { + hiddenDataCls: me.hiddenDataCls + }); + return me.callParent(arguments); + }, + + afterRender: function(){ + var me = this; + me.callParent(arguments); + me.setHiddenValue(me.value); + }, + + + + + multiSelect: false, + + + + delimiter: ', ', + + + + displayField: 'text', + + + + + triggerAction: 'all', + + + allQuery: '', + + + queryParam: 'query', + + + queryMode: 'remote', + + + queryCaching: true, + + + pageSize: 0, + + + + + + + autoSelect: true, + + + typeAhead: false, + + + typeAheadDelay: 250, + + + selectOnTab: true, + + + forceSelection: false, + + + growToLongestValue: true, + + + + + + + + + defaultListConfig: { + loadingHeight: 70, + minWidth: 70, + maxHeight: 300, + shadow: 'sides' + }, + + + + + + + ignoreSelection: 0, + + + removingRecords: null, + + + resizeComboToGrow: function () { + var me = this; + return me.grow && me.growToLongestValue; + }, + + initComponent: function() { + var me = this, + isDefined = Ext.isDefined, + store = me.store, + transform = me.transform, + transformSelect, isLocalMode; + + Ext.applyIf(me.renderSelectors, { + hiddenDataEl: '.' + me.hiddenDataCls.split(' ').join('.') + }); + + + this.addEvents( + + 'beforequery', + + + 'select', + + + 'beforeselect', + + + 'beforedeselect' + ); + + + if (transform) { + transformSelect = Ext.getDom(transform); + if (transformSelect) { + if (!me.store) { + store = Ext.Array.map(Ext.Array.from(transformSelect.options), function(option){ + return [option.value, option.text]; + }); + } + if (!me.name) { + me.name = transformSelect.name; + } + if (!('value' in me)) { + me.value = transformSelect.value; + } + } + } + + me.bindStore(store || 'ext-empty-store', true); + store = me.store; + if (store.autoCreated) { + me.queryMode = 'local'; + me.valueField = me.displayField = 'field1'; + if (!store.expanded) { + me.displayField = 'field2'; + } + } + + + + me.queryFilter = new Ext.util.Filter({ + id: me.id + '-query-filter', + disabled: true, + root: 'data', + property: me.displayField + }); + store.filter(me.queryFilter); + + if (!isDefined(me.valueField)) { + me.valueField = me.displayField; + } + + isLocalMode = me.queryMode === 'local'; + if (!isDefined(me.queryDelay)) { + me.queryDelay = isLocalMode ? 10 : 500; + } + if (!isDefined(me.minChars)) { + me.minChars = isLocalMode ? 0 : 4; + } + + if (!me.displayTpl) { + me.displayTpl = new Ext.XTemplate( + '' + + '{[typeof values === "string" ? values : values["' + me.displayField + '"]]}' + + '' + me.delimiter + '' + + '' + ); + } else if (Ext.isString(me.displayTpl)) { + me.displayTpl = new Ext.XTemplate(me.displayTpl); + } + + me.callParent(); + + me.doQueryTask = new Ext.util.DelayedTask(me.doRawQuery, me); + + + if (me.store.getCount() > 0) { + me.setValue(me.value); + } + + + if (transformSelect) { + me.render(transformSelect.parentNode, transformSelect); + Ext.removeNode(transformSelect); + delete me.renderTo; + } + }, + + + getStore : function(){ + return this.store; + }, + + beforeBlur: function() { + this.doQueryTask.cancel(); + this.assertValue(); + }, + + + assertValue: function() { + var me = this, + value = me.getRawValue(), + rec, currentValue; + + if (me.forceSelection) { + if (me.multiSelect) { + + + if (value !== me.getDisplayValue()) { + me.setValue(me.lastSelection); + } + } else { + + + rec = me.findRecordByDisplay(value); + if (rec) { + currentValue = me.value; + + + if (!me.findRecordByValue(currentValue)) { + me.select(rec, true); + } + } else { + me.setValue(me.lastSelection); + } + } + } + me.collapse(); + }, + + onTypeAhead: function() { + var me = this, + displayField = me.displayField, + record = me.store.findRecord(displayField, me.getRawValue()), + boundList = me.getPicker(), + newValue, len, selStart; + + if (record) { + newValue = record.get(displayField); + len = newValue.length; + selStart = me.getRawValue().length; + + boundList.highlightItem(boundList.getNode(record)); + + if (selStart !== 0 && selStart !== len) { + me.setRawValue(newValue); + me.selectText(selStart, newValue.length); + } + } + }, + + + + resetToDefault: Ext.emptyFn, + + beforeReset: function() { + this.callParent(); + + + if (!this.queryFilter.disabled) { + this.queryFilter.disabled = true; + this.store.filter(); + } + }, + + onUnbindStore: function(store) { + var me = this, + picker = me.picker; + + me.store.removeFilter(me.queryFilter); + if (!store && picker) { + picker.bindStore(null); + } + }, + + onBindStore: function(store, initial) { + var picker = this.picker; + if (!initial) { + this.resetToDefault(); + store.filter(this.queryFilter); + } + + if (picker) { + picker.bindStore(store); + } + }, + + getStoreListeners: function() { + var me = this; + + return { + beforeload: me.onBeforeLoad, + clear: me.onClear, + datachanged: me.onDataChanged, + load: me.onLoad, + exception: me.onException, + remove: me.onRemove + }; + }, + + onBeforeLoad: function(){ + + + + ++this.ignoreSelection; + }, + + onDataChanged: function() { + var me = this; + + if (me.resizeComboToGrow()) { + me.updateLayout(); + } + }, + + onClear: function() { + var me = this; + + if (me.resizeComboToGrow()) { + me.removingRecords = true; + me.onDataChanged(); + } + }, + + onRemove: function() { + var me = this; + + if (me.resizeComboToGrow()) { + me.removingRecords = true; + } + }, + + onException: function(){ + if (this.ignoreSelection > 0) { + --this.ignoreSelection; + } + this.collapse(); + }, + + onLoad: function() { + var me = this, + value = me.value; + + if (me.ignoreSelection > 0) { + --me.ignoreSelection; + } + + if (me.rawQuery) { + me.rawQuery = false; + me.syncSelection(); + if (me.picker && !me.picker.getSelectionModel().hasSelection()) { + me.doAutoSelect(); + } + } + + else { + + if (me.value || me.value === 0) { + me.setValue(me.value); + } else { + + + if (me.store.getCount()) { + me.doAutoSelect(); + } else { + + me.setValue(me.value); + } + } + } + }, + + + doRawQuery: function() { + this.doQuery(this.getRawValue(), false, true); + }, + + + doQuery: function(queryString, forceAll, rawQuery) { + queryString = queryString || ''; + + + + var me = this, + qe = { + query: queryString, + forceAll: forceAll, + combo: me, + cancel: false + }, + store = me.store, + isLocalMode = me.queryMode === 'local'; + + if (me.fireEvent('beforequery', qe) === false || qe.cancel) { + return false; + } + + + queryString = qe.query; + forceAll = qe.forceAll; + + + if (forceAll || (queryString.length >= me.minChars)) { + + me.expand(); + + + if (!me.queryCaching || me.lastQuery !== queryString) { + me.lastQuery = queryString; + + if (isLocalMode) { + + + if (queryString || !forceAll) { + + + me.queryFilter.disabled = false; + me.queryFilter.setValue(me.enableRegEx ? new RegExp(queryString) : queryString); + } + + + else { + me.queryFilter.disabled = true; + } + + + store.filter(); + } else { + + me.rawQuery = rawQuery; + + + + if (me.pageSize) { + + me.loadPage(1); + } else { + store.load({ + params: me.getParams(queryString) + }); + } + } + } + + + if (me.getRawValue() !== me.getDisplayValue()) { + me.ignoreSelection++; + me.picker.getSelectionModel().deselectAll(); + me.ignoreSelection--; + } + + if (isLocalMode) { + me.doAutoSelect(); + } + if (me.typeAhead) { + me.doTypeAhead(); + } + } + return true; + }, + + loadPage: function(pageNum){ + this.store.loadPage(pageNum, { + params: this.getParams(this.lastQuery) + }); + }, + + onPageChange: function(toolbar, newPage){ + + this.loadPage(newPage); + return false; + }, + + + getParams: function(queryString) { + var params = {}, + param = this.queryParam; + + if (param) { + params[param] = queryString; + } + return params; + }, + + + doAutoSelect: function() { + var me = this, + picker = me.picker, + lastSelected, itemNode; + if (picker && me.autoSelect && me.store.getCount() > 0) { + + lastSelected = picker.getSelectionModel().lastSelected; + itemNode = picker.getNode(lastSelected || 0); + if (itemNode) { + picker.highlightItem(itemNode); + picker.listEl.scrollChildIntoView(itemNode, false); + } + } + }, + + doTypeAhead: function() { + if (!this.typeAheadTask) { + this.typeAheadTask = new Ext.util.DelayedTask(this.onTypeAhead, this); + } + if (this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE) { + this.typeAheadTask.delay(this.typeAheadDelay); + } + }, + + onTriggerClick: function() { + var me = this; + if (!me.readOnly && !me.disabled) { + if (me.isExpanded) { + me.collapse(); + } else { + me.onFocus({}); + if (me.triggerAction === 'all') { + me.doQuery(me.allQuery, true); + } else { + me.doQuery(me.getRawValue(), false, true); + } + } + me.inputEl.focus(); + } + }, + + onPaste: function(){ + var me = this; + + if (!me.readOnly && !me.disabled && me.editable) { + me.doQueryTask.delay(me.queryDelay); + } + }, + + + onKeyUp: function(e, t) { + var me = this, + key = e.getKey(); + + if (!me.readOnly && !me.disabled && me.editable) { + me.lastKey = key; + + + + + if (!e.isSpecialKey() || key == e.BACKSPACE || key == e.DELETE) { + me.doQueryTask.delay(me.queryDelay); + } + } + + if (me.enableKeyEvents) { + me.callParent(arguments); + } + }, + + initEvents: function() { + var me = this; + me.callParent(); + + + if (!me.enableKeyEvents) { + me.mon(me.inputEl, 'keyup', me.onKeyUp, me); + } + me.mon(me.inputEl, 'paste', me.onPaste, me); + }, + + onDestroy: function() { + this.bindStore(null); + this.callParent(); + }, + + + + onAdded: function() { + var me = this; + me.callParent(arguments); + if (me.picker) { + me.picker.ownerCt = me.up('[floating]'); + me.picker.registerWithOwnerCt(); + } + }, + + createPicker: function() { + var me = this, + picker, + pickerCfg = Ext.apply({ + xtype: 'boundlist', + pickerField: me, + selModel: { + mode: me.multiSelect ? 'SIMPLE' : 'SINGLE' + }, + floating: true, + hidden: true, + store: me.store, + displayField: me.displayField, + focusOnToFront: false, + pageSize: me.pageSize, + tpl: me.tpl + }, me.listConfig, me.defaultListConfig); + + picker = me.picker = Ext.widget(pickerCfg); + if (me.pageSize) { + picker.pagingToolbar.on('beforechange', me.onPageChange, me); + } + + me.mon(picker, { + itemclick: me.onItemClick, + refresh: me.onListRefresh, + scope: me + }); + + me.mon(picker.getSelectionModel(), { + beforeselect: me.onBeforeSelect, + beforedeselect: me.onBeforeDeselect, + selectionchange: me.onListSelectionChange, + scope: me + }); + + return picker; + }, + + alignPicker: function(){ + var me = this, + picker = me.getPicker(), + heightAbove = me.getPosition()[1] - Ext.getBody().getScroll().top, + heightBelow = Ext.Element.getViewHeight() - heightAbove - me.getHeight(), + space = Math.max(heightAbove, heightBelow); + + + if (picker.height) { + delete picker.height; + picker.updateLayout(); + } + + if (picker.getHeight() > space - 5) { + picker.setHeight(space - 5); + } + me.callParent(); + }, + + onListRefresh: function() { + this.alignPicker(); + this.syncSelection(); + }, + + onItemClick: function(picker, record){ + + var me = this, + selection = me.picker.getSelectionModel().getSelection(), + valueField = me.valueField; + + if (!me.multiSelect && selection.length) { + if (record.get(valueField) === selection[0].get(valueField)) { + + me.displayTplData = [record.data]; + me.setRawValue(me.getDisplayValue()); + me.collapse(); + } + } + }, + + onBeforeSelect: function(list, record) { + return this.fireEvent('beforeselect', this, record, record.index); + }, + + onBeforeDeselect: function(list, record) { + return this.fireEvent('beforedeselect', this, record, record.index); + }, + + onListSelectionChange: function(list, selectedRecords) { + var me = this, + isMulti = me.multiSelect, + hasRecords = selectedRecords.length > 0; + + + if (!me.ignoreSelection && me.isExpanded) { + if (!isMulti) { + Ext.defer(me.collapse, 1, me); + } + + if (isMulti || hasRecords) { + me.setValue(selectedRecords, false); + } + if (hasRecords) { + me.fireEvent('select', me, selectedRecords); + } + me.inputEl.focus(); + } + }, + + + onExpand: function() { + var me = this, + keyNav = me.listKeyNav, + selectOnTab = me.selectOnTab, + picker = me.getPicker(); + + + if (keyNav) { + keyNav.enable(); + } else { + keyNav = me.listKeyNav = new Ext.view.BoundListKeyNav(this.inputEl, { + boundList: picker, + forceKeyDown: true, + tab: function(e) { + if (selectOnTab) { + this.selectHighlighted(e); + me.triggerBlur(); + } + + return true; + }, + enter: function(e){ + var selModel = picker.getSelectionModel(), + count = selModel.getCount(); + + this.selectHighlighted(e); + + + + if (!me.multiSelect && count === selModel.getCount()) { + me.collapse(); + } + } + }); + } + + + if (selectOnTab) { + me.ignoreMonitorTab = true; + } + + Ext.defer(keyNav.enable, 1, keyNav); + me.inputEl.focus(); + }, + + + onCollapse: function() { + var me = this, + keyNav = me.listKeyNav; + if (keyNav) { + keyNav.disable(); + me.ignoreMonitorTab = false; + } + }, + + + select: function(r, assert) { + var me = this, + picker = me.picker, + doSelect = true; + + if (r && r.isModel && assert === true) { + if (picker) { + doSelect = !picker.getSelectionModel().isSelected(r); + } + + if (doSelect) { + me.fireEvent('select', me, r); + } + } + me.setValue(r, true); + }, + + + findRecord: function(field, value) { + var ds = this.store, + idx = ds.findExact(field, value); + return idx !== -1 ? ds.getAt(idx) : false; + }, + + + findRecordByValue: function(value) { + return this.findRecord(this.valueField, value); + }, + + + findRecordByDisplay: function(value) { + return this.findRecord(this.displayField, value); + }, + + + setValue: function(value, doSelect) { + var me = this, + valueNotFoundText = me.valueNotFoundText, + inputEl = me.inputEl, + i, len, record, + dataObj, + matchedRecords = [], + displayTplData = [], + processedValue = []; + + if (me.store.loading) { + + me.value = value; + me.setHiddenValue(me.value); + return me; + } + + + value = Ext.Array.from(value); + + + for (i = 0, len = value.length; i < len; i++) { + record = value[i]; + if (!record || !record.isModel) { + record = me.findRecordByValue(record); + } + + if (record) { + matchedRecords.push(record); + displayTplData.push(record.data); + processedValue.push(record.get(me.valueField)); + } + + + else { + + + if (!me.forceSelection) { + processedValue.push(value[i]); + dataObj = {}; + dataObj[me.displayField] = value[i]; + displayTplData.push(dataObj); + + } + + else if (Ext.isDefined(valueNotFoundText)) { + displayTplData.push(valueNotFoundText); + } + } + } + + + me.setHiddenValue(processedValue); + me.value = me.multiSelect ? processedValue : processedValue[0]; + if (!Ext.isDefined(me.value)) { + me.value = null; + } + me.displayTplData = displayTplData; + me.lastSelection = me.valueModels = matchedRecords; + + if (inputEl && me.emptyText && !Ext.isEmpty(value)) { + inputEl.removeCls(me.emptyCls); + } + + + me.setRawValue(me.getDisplayValue()); + me.checkChange(); + + if (doSelect !== false) { + me.syncSelection(); + } + me.applyEmptyText(); + + return me; + }, + + + setHiddenValue: function(values){ + var me = this, + name = me.hiddenName, + i, + dom, childNodes, input, valueCount, childrenCount; + + if (!me.hiddenDataEl || !name) { + return; + } + values = Ext.Array.from(values); + dom = me.hiddenDataEl.dom; + childNodes = dom.childNodes; + input = childNodes[0]; + valueCount = values.length; + childrenCount = childNodes.length; + + if (!input && valueCount > 0) { + me.hiddenDataEl.update(Ext.DomHelper.markup({ + tag: 'input', + type: 'hidden', + name: name + })); + childrenCount = 1; + input = dom.firstChild; + } + while (childrenCount > valueCount) { + dom.removeChild(childNodes[0]); + -- childrenCount; + } + while (childrenCount < valueCount) { + dom.appendChild(input.cloneNode(true)); + ++ childrenCount; + } + for (i = 0; i < valueCount; i++) { + childNodes[i].value = values[i]; + } + }, + + + getDisplayValue: function() { + return this.displayTpl.apply(this.displayTplData); + }, + + getValue: function() { + + + + var me = this, + picker = me.picker, + rawValue = me.getRawValue(), + value = me.value; + + if (me.getDisplayValue() !== rawValue) { + value = rawValue; + me.value = me.displayTplData = me.valueModels = null; + if (picker) { + me.ignoreSelection++; + picker.getSelectionModel().deselectAll(); + me.ignoreSelection--; + } + } + + return value; + }, + + getSubmitValue: function() { + var value = this.getValue(); + + + if (Ext.isEmpty(value)) { + value = ''; + } + return value; + }, + + isEqual: function(v1, v2) { + var fromArray = Ext.Array.from, + i, len; + + v1 = fromArray(v1); + v2 = fromArray(v2); + len = v1.length; + + if (len !== v2.length) { + return false; + } + + for(i = 0; i < len; i++) { + if (v2[i] !== v1[i]) { + return false; + } + } + + return true; + }, + + + clearValue: function() { + this.setValue([]); + }, + + + syncSelection: function() { + var me = this, + picker = me.picker, + selection, selModel, + values = me.valueModels || [], + vLen = values.length, v, value; + + if (picker) { + + selection = []; + for (v = 0; v < vLen; v++) { + value = values[v]; + + if (value && value.isModel && me.store.indexOf(value) >= 0) { + selection.push(value); + } + } + + + me.ignoreSelection++; + selModel = picker.getSelectionModel(); + selModel.deselectAll(); + if (selection.length) { + selModel.select(selection, undefined, true); + } + me.ignoreSelection--; + } + }, + + onEditorTab: function(e){ + var keyNav = this.listKeyNav; + + if (this.selectOnTab && keyNav) { + keyNav.selectHighlighted(e); + } + } +}); + + +Ext.define('Ext.picker.Month', { + extend: Ext.Component , + + + + + + + alias: 'widget.monthpicker', + alternateClassName: 'Ext.MonthPicker', + + childEls: [ + 'bodyEl', 'prevEl', 'nextEl', 'buttonsEl', 'monthEl', 'yearEl' + ], + + renderTpl: [ + '
    ', + '
    ', + '', + '
    ', + + '{.}', + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + + '', + '
    ', + '
    ', + + '', + '
    ', + '
    ', + '', + '
    ', + + '{.}', + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + '', + '
    {%', + 'var me=values.$comp, okBtn=me.okBtn, cancelBtn=me.cancelBtn;', + 'okBtn.ownerLayout = cancelBtn.ownerLayout = me.componentLayout;', + 'okBtn.ownerCt = cancelBtn.ownerCt = me;', + 'Ext.DomHelper.generateMarkup(okBtn.getRenderTree(), out);', + 'Ext.DomHelper.generateMarkup(cancelBtn.getRenderTree(), out);', + '%}
    ', + '
    ' + ], + + + + okText: 'OK', + + + + + cancelText: 'Cancel', + + + + baseCls: Ext.baseCSSPrefix + 'monthpicker', + + + showButtons: true, + + + + + + measureWidth: 35, + measureMaxHeight: 20, + + + smallCls: Ext.baseCSSPrefix + 'monthpicker-small', + + + totalYears: 10, + yearOffset: 5, + monthOffset: 6, + + + + initComponent: function(){ + var me = this; + + me.selectedCls = me.baseCls + '-selected'; + me.addEvents( + + 'cancelclick', + + + 'monthclick', + + + 'monthdblclick', + + + 'okclick', + + + 'select', + + + 'yearclick', + + + 'yeardblclick' + ); + if (me.small) { + me.addCls(me.smallCls); + } + me.setValue(me.value); + me.activeYear = me.getYear(new Date().getFullYear() - 4, -4); + + if (me.showButtons) { + me.okBtn = new Ext.button.Button({ + text: me.okText, + handler: me.onOkClick, + scope: me + }); + me.cancelBtn = new Ext.button.Button({ + text: me.cancelText, + handler: me.onCancelClick, + scope: me + }); + } + + this.callParent(); + }, + + + + beforeRender: function(){ + var me = this, + i = 0, + months = [], + shortName = Ext.Date.getShortMonthName, + monthLen = me.monthOffset, + margin = me.monthMargin, + style = ''; + + me.callParent(); + + for (; i < monthLen; ++i) { + months.push(shortName(i), shortName(i + monthLen)); + } + + if (Ext.isDefined(margin)) { + style = 'margin: 0 ' + margin + 'px;'; + } + + Ext.apply(me.renderData, { + months: months, + years: me.getYears(), + showButtons: me.showButtons, + monthStyle: style + }); + }, + + + + afterRender: function(){ + var me = this, + body = me.bodyEl, + buttonsEl = me.buttonsEl; + + me.callParent(); + + me.mon(body, 'click', me.onBodyClick, me); + me.mon(body, 'dblclick', me.onBodyClick, me); + + + me.years = body.select('.' + me.baseCls + '-year a'); + me.months = body.select('.' + me.baseCls + '-month a'); + + me.backRepeater = new Ext.util.ClickRepeater(me.prevEl, { + handler: Ext.Function.bind(me.adjustYear, me, [-me.totalYears]) + }); + + me.prevEl.addClsOnOver(me.baseCls + '-yearnav-prev-over'); + me.nextRepeater = new Ext.util.ClickRepeater(me.nextEl, { + handler: Ext.Function.bind(me.adjustYear, me, [me.totalYears]) + }); + me.nextEl.addClsOnOver(me.baseCls + '-yearnav-next-over'); + me.updateBody(); + + if (!Ext.isDefined(me.monthMargin)) { + Ext.picker.Month.prototype.monthMargin = me.calculateMonthMargin(); + } + }, + + calculateMonthMargin: function(){ + + + + + var me = this, + monthEl = me.monthEl, + months = me.months, + first = months.first(), + itemMargin = first.getMargin('l'); + + while (itemMargin && me.getLargest() > me.measureMaxHeight) { + --itemMargin; + months.setStyle('margin', '0 ' + itemMargin + 'px'); + } + return itemMargin; + }, + + getLargest: function(months){ + var largest = 0; + this.months.each(function(item){ + var h = item.getHeight(); + if (h > largest) { + largest = h; + } + }); + return largest; + + }, + + + setValue: function(value){ + var me = this, + active = me.activeYear, + offset = me.monthOffset, + year, + index; + + if (!value) { + me.value = [null, null]; + } else if (Ext.isDate(value)) { + me.value = [value.getMonth(), value.getFullYear()]; + } else { + me.value = [value[0], value[1]]; + } + + if (me.rendered) { + year = me.value[1]; + if (year !== null) { + if ((year < active || year > active + me.yearOffset)) { + me.activeYear = year - me.yearOffset + 1; + } + } + me.updateBody(); + } + + return me; + }, + + + getValue: function(){ + return this.value; + }, + + + hasSelection: function(){ + var value = this.value; + return value[0] !== null && value[1] !== null; + }, + + + getYears: function(){ + var me = this, + offset = me.yearOffset, + start = me.activeYear, + end = start + offset, + i = start, + years = []; + + for (; i < end; ++i) { + years.push(i, i + offset); + } + + return years; + }, + + + updateBody: function(){ + var me = this, + years = me.years, + months = me.months, + yearNumbers = me.getYears(), + cls = me.selectedCls, + value = me.getYear(null), + month = me.value[0], + monthOffset = me.monthOffset, + year, + yearItems, y, yLen, el; + + if (me.rendered) { + years.removeCls(cls); + months.removeCls(cls); + + yearItems = years.elements; + yLen = yearItems.length; + + for (y = 0; y < yLen; y++) { + el = Ext.fly(yearItems[y]); + + year = yearNumbers[y]; + el.dom.innerHTML = year; + if (year == value) { + el.addCls(cls); + } + } + if (month !== null) { + if (month < monthOffset) { + month = month * 2; + } else { + month = (month - monthOffset) * 2 + 1; + } + months.item(month).addCls(cls); + } + } + }, + + + getYear: function(defaultValue, offset) { + var year = this.value[1]; + offset = offset || 0; + return year === null ? defaultValue : year + offset; + }, + + + onBodyClick: function(e, t) { + var me = this, + isDouble = e.type == 'dblclick'; + + if (e.getTarget('.' + me.baseCls + '-month')) { + e.stopEvent(); + me.onMonthClick(t, isDouble); + } else if (e.getTarget('.' + me.baseCls + '-year')) { + e.stopEvent(); + me.onYearClick(t, isDouble); + } + }, + + + adjustYear: function(offset){ + if (typeof offset != 'number') { + offset = this.totalYears; + } + this.activeYear += offset; + this.updateBody(); + }, + + + onOkClick: function(){ + this.fireEvent('okclick', this, this.value); + }, + + + onCancelClick: function(){ + this.fireEvent('cancelclick', this); + }, + + + onMonthClick: function(target, isDouble){ + var me = this; + me.value[0] = me.resolveOffset(me.months.indexOf(target), me.monthOffset); + me.updateBody(); + me.fireEvent('month' + (isDouble ? 'dbl' : '') + 'click', me, me.value); + me.fireEvent('select', me, me.value); + }, + + + onYearClick: function(target, isDouble){ + var me = this; + me.value[1] = me.activeYear + me.resolveOffset(me.years.indexOf(target), me.yearOffset); + me.updateBody(); + me.fireEvent('year' + (isDouble ? 'dbl' : '') + 'click', me, me.value); + me.fireEvent('select', me, me.value); + + }, + + + resolveOffset: function(index, offset){ + if (index % 2 === 0) { + return (index / 2); + } else { + return offset + Math.floor(index / 2); + } + }, + + + + beforeDestroy: function(){ + var me = this; + me.years = me.months = null; + Ext.destroyMembers(me, 'backRepeater', 'nextRepeater', 'okBtn', 'cancelBtn'); + me.callParent(); + }, + + + + finishRenderChildren: function () { + var me = this; + + this.callParent(arguments); + + if (this.showButtons) { + me.okBtn.finishRender(); + me.cancelBtn.finishRender(); + } + }, + + onDestroy: function() { + Ext.destroyMembers(this, 'okBtn', 'cancelBtn'); + this.callParent(); + } + +}); + + +Ext.define('Ext.picker.Date', { + extend: Ext.Component , + + + + + + + + + + + alias: 'widget.datepicker', + alternateClassName: 'Ext.DatePicker', + + childEls: [ + 'innerEl', 'eventEl', 'prevEl', 'nextEl', 'middleBtnEl', 'footerEl' + ], + + border: true, + + renderTpl: [ + '
    ', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '{#:this.isEndOfWeek}', + '', + '', + '', + '', + '', + '', + '', + '
    ', + { + firstInitial: function(value) { + return Ext.picker.Date.prototype.getDayInitial(value); + }, + isEndOfWeek: function(value) { + + + value--; + var end = value % 7 === 0 && value !== 0; + return end ? '' : ''; + }, + renderTodayBtn: function(values, out) { + Ext.DomHelper.generateMarkup(values.$comp.todayBtn.getRenderTree(), out); + }, + renderMonthBtn: function(values, out) { + Ext.DomHelper.generateMarkup(values.$comp.monthBtn.getRenderTree(), out); + } + } + ], + + + + todayText : 'Today', + + + + + ariaTitle: 'Date Picker: {0}', + + + + + ariaTitleDateFormat: 'F d, Y', + + + + + + + + + todayTip : '{0} (Spacebar)', + + + + + minText : 'This date is before the minimum date', + + + + + maxText : 'This date is after the maximum date', + + + + + + + disabledDaysText : 'Disabled', + + + + + disabledDatesText : 'Disabled', + + + + + + + + + nextText : 'Next Month (Control+Right)', + + + + + prevText : 'Previous Month (Control+Left)', + + + + + monthYearText : 'Choose a month (Control+Up/Down to move years)', + + + + + monthYearFormat: 'F Y', + + + + + startDay : 0, + + + + + showToday : true, + + + + + + + + + + + + + + disableAnim: false, + + + baseCls: Ext.baseCSSPrefix + 'datepicker', + + + + + + + + longDayFormat: 'F d, Y', + + + + + + focusOnShow: false, + + + + focusOnSelect: true, + + + + initHour: 12, + + numDays: 42, + + + initComponent : function() { + var me = this, + clearTime = Ext.Date.clearTime; + + me.selectedCls = me.baseCls + '-selected'; + me.disabledCellCls = me.baseCls + '-disabled'; + me.prevCls = me.baseCls + '-prevday'; + me.activeCls = me.baseCls + '-active'; + me.cellCls = me.baseCls + '-cell'; + me.nextCls = me.baseCls + '-prevday'; + me.todayCls = me.baseCls + '-today'; + me.dayNames = me.dayNames.slice(me.startDay).concat(me.dayNames.slice(0, me.startDay)); + + me.callParent(); + + me.value = me.value ? + clearTime(me.value, true) : clearTime(new Date()); + + me.addEvents( + + 'select' + ); + + me.initDisabledDays(); + }, + + beforeRender: function () { + + var me = this, + days = new Array(me.numDays), + today = Ext.Date.format(new Date(), me.format); + + + + if (me.up('menu')) { + me.addCls(Ext.baseCSSPrefix + 'menu'); + } + + me.monthBtn = new Ext.button.Split({ + ownerCt: me, + ownerLayout: me.getComponentLayout(), + text: '', + tooltip: me.monthYearText, + listeners: { + click: me.showMonthPicker, + arrowclick: me.showMonthPicker, + scope: me + } + }); + + if (me.showToday) { + me.todayBtn = new Ext.button.Button({ + ownerCt: me, + ownerLayout: me.getComponentLayout(), + text: Ext.String.format(me.todayText, today), + tooltip: Ext.String.format(me.todayTip, today), + tooltipType: 'title', + handler: me.selectToday, + scope: me + }); + } + + me.callParent(); + + Ext.applyIf(me, { + renderData: {} + }); + + Ext.apply(me.renderData, { + dayNames: me.dayNames, + showToday: me.showToday, + prevText: me.prevText, + nextText: me.nextText, + days: days + }); + + me.protoEl.unselectable(); + }, + + + + finishRenderChildren: function () { + var me = this; + + me.callParent(); + me.monthBtn.finishRender(); + if (me.showToday) { + me.todayBtn.finishRender(); + } + }, + + + + onRender : function(container, position){ + var me = this; + + me.callParent(arguments); + + me.cells = me.eventEl.select('tbody td'); + me.textNodes = me.eventEl.query('tbody td a'); + + me.mon(me.eventEl, { + scope: me, + mousewheel: me.handleMouseWheel, + click: { + fn: me.handleDateClick, + delegate: 'a.' + me.baseCls + '-date' + } + }); + + }, + + + + initEvents: function(){ + var me = this, + eDate = Ext.Date, + day = eDate.DAY; + + me.callParent(); + + me.prevRepeater = new Ext.util.ClickRepeater(me.prevEl, { + handler: me.showPrevMonth, + scope: me, + preventDefault: true, + stopDefault: true + }); + + me.nextRepeater = new Ext.util.ClickRepeater(me.nextEl, { + handler: me.showNextMonth, + scope: me, + preventDefault:true, + stopDefault:true + }); + + me.keyNav = new Ext.util.KeyNav(me.eventEl, Ext.apply({ + scope: me, + left : function(e){ + if(e.ctrlKey){ + me.showPrevMonth(); + }else{ + me.update(eDate.add(me.activeDate, day, -1)); + } + }, + + right : function(e){ + if(e.ctrlKey){ + me.showNextMonth(); + }else{ + me.update(eDate.add(me.activeDate, day, 1)); + } + }, + + up : function(e){ + if(e.ctrlKey){ + me.showNextYear(); + }else{ + me.update(eDate.add(me.activeDate, day, -7)); + } + }, + + down : function(e){ + if(e.ctrlKey){ + me.showPrevYear(); + }else{ + me.update(eDate.add(me.activeDate, day, 7)); + } + }, + pageUp : me.showNextMonth, + pageDown : me.showPrevMonth, + enter : function(e){ + e.stopPropagation(); + return true; + } + }, me.keyNavConfig)); + + if (me.showToday) { + me.todayKeyListener = me.eventEl.addKeyListener(Ext.EventObject.SPACE, me.selectToday, me); + } + me.update(me.value); + }, + + + initDisabledDays : function(){ + var me = this, + dd = me.disabledDates, + re = '(?:', + len, + d, dLen, dI; + + if(!me.disabledDatesRE && dd){ + len = dd.length - 1; + + dLen = dd.length; + + for (d = 0; d < dLen; d++) { + dI = dd[d]; + + re += Ext.isDate(dI) ? '^' + Ext.String.escapeRegex(Ext.Date.dateFormat(dI, me.format)) + '$' : dI; + if (d != len) { + re += '|'; + } + } + + me.disabledDatesRE = new RegExp(re + ')'); + } + }, + + + setDisabledDates : function(dd){ + var me = this; + + if(Ext.isArray(dd)){ + me.disabledDates = dd; + me.disabledDatesRE = null; + }else{ + me.disabledDatesRE = dd; + } + me.initDisabledDays(); + me.update(me.value, true); + return me; + }, + + + setDisabledDays : function(dd){ + this.disabledDays = dd; + return this.update(this.value, true); + }, + + + setMinDate : function(dt){ + this.minDate = dt; + return this.update(this.value, true); + }, + + + setMaxDate : function(dt){ + this.maxDate = dt; + return this.update(this.value, true); + }, + + + setValue : function(value){ + this.value = Ext.Date.clearTime(value, true); + return this.update(this.value); + }, + + + getValue : function(){ + return this.value; + }, + + + + getDayInitial: function(value){ + return value.substr(0,1); + }, + + + + focus : function(){ + this.update(this.activeDate); + }, + + + + onEnable: function(){ + this.callParent(); + this.setDisabledStatus(false); + this.update(this.activeDate); + + }, + + + + onDisable : function(){ + this.callParent(); + this.setDisabledStatus(true); + }, + + + setDisabledStatus : function(disabled){ + var me = this; + + me.keyNav.setDisabled(disabled); + me.prevRepeater.setDisabled(disabled); + me.nextRepeater.setDisabled(disabled); + if (me.showToday) { + me.todayKeyListener.setDisabled(disabled); + me.todayBtn.setDisabled(disabled); + } + }, + + + getActive: function(){ + return this.activeDate || this.value; + }, + + + runAnimation: function(isHide){ + var picker = this.monthPicker, + options = { + duration: 200, + callback: function(){ + if (isHide) { + picker.hide(); + } else { + picker.show(); + } + } + }; + + if (isHide) { + picker.el.slideOut('t', options); + } else { + picker.el.slideIn('t', options); + } + }, + + + hideMonthPicker : function(animate){ + var me = this, + picker = me.monthPicker; + + if (picker) { + if (me.shouldAnimate(animate)) { + me.runAnimation(true); + } else { + picker.hide(); + } + } + return me; + }, + + + showMonthPicker : function(animate){ + var me = this, + picker; + + if (me.rendered && !me.disabled) { + picker = me.createMonthPicker(); + picker.setValue(me.getActive()); + picker.setSize(me.getSize()); + picker.setPosition(-1, -1); + if (me.shouldAnimate(animate)) { + me.runAnimation(false); + } else { + picker.show(); + } + } + return me; + }, + + + shouldAnimate: function(animate){ + return Ext.isDefined(animate) ? animate : !this.disableAnim; + }, + + + createMonthPicker: function(){ + var me = this, + picker = me.monthPicker; + + if (!picker) { + me.monthPicker = picker = new Ext.picker.Month({ + renderTo: me.el, + floating: true, + shadow: false, + small: me.showToday === false, + listeners: { + scope: me, + cancelclick: me.onCancelClick, + okclick: me.onOkClick, + yeardblclick: me.onOkClick, + monthdblclick: me.onOkClick + } + }); + if (!me.disableAnim) { + + picker.el.setStyle('display', 'none'); + } + me.on('beforehide', Ext.Function.bind(me.hideMonthPicker, me, [false])); + } + return picker; + }, + + + onOkClick: function(picker, value){ + var me = this, + month = value[0], + year = value[1], + date = new Date(year, month, me.getActive().getDate()); + + if (date.getMonth() !== month) { + + date = Ext.Date.getLastDateOfMonth(new Date(year, month, 1)); + } + me.setValue(date); + me.hideMonthPicker(); + }, + + + onCancelClick: function(){ + + this.selectedUpdate(this.activeDate); + this.hideMonthPicker(); + }, + + + showPrevMonth : function(e){ + return this.setValue(Ext.Date.add(this.activeDate, Ext.Date.MONTH, -1)); + }, + + + showNextMonth : function(e){ + return this.setValue(Ext.Date.add(this.activeDate, Ext.Date.MONTH, 1)); + }, + + + showPrevYear : function(){ + return this.setValue(Ext.Date.add(this.activeDate, Ext.Date.YEAR, -1)); + }, + + + showNextYear : function(){ + return this.setValue(Ext.Date.add(this.activeDate, Ext.Date.YEAR, 1)); + }, + + + handleMouseWheel : function(e){ + e.stopEvent(); + if(!this.disabled){ + var delta = e.getWheelDelta(); + if(delta > 0){ + this.showPrevMonth(); + } else if(delta < 0){ + this.showNextMonth(); + } + } + }, + + + handleDateClick : function(e, t){ + var me = this, + handler = me.handler; + + e.stopEvent(); + if(!me.disabled && t.dateValue && !Ext.fly(t.parentNode).hasCls(me.disabledCellCls)){ + me.doCancelFocus = me.focusOnSelect === false; + me.setValue(new Date(t.dateValue)); + delete me.doCancelFocus; + me.fireEvent('select', me, me.value); + if (handler) { + handler.call(me.scope || me, me, me.value); + } + + + + + me.onSelect(); + } + }, + + + onSelect: function() { + if (this.hideOnSelect) { + this.hide(); + } + }, + + + selectToday : function(){ + var me = this, + btn = me.todayBtn, + handler = me.handler; + + if(btn && !btn.disabled){ + me.setValue(Ext.Date.clearTime(new Date())); + me.fireEvent('select', me, me.value); + if (handler) { + handler.call(me.scope || me, me, me.value); + } + me.onSelect(); + } + return me; + }, + + + selectedUpdate: function(date){ + var me = this, + t = date.getTime(), + cells = me.cells, + cls = me.selectedCls, + cellItems = cells.elements, + c, + cLen = cellItems.length, + cell; + + cells.removeCls(cls); + + for (c = 0; c < cLen; c++) { + cell = Ext.fly(cellItems[c]); + + if (cell.dom.firstChild.dateValue == t) { + me.fireEvent('highlightitem', me, cell); + cell.addCls(cls); + + if(me.isVisible() && !me.doCancelFocus){ + Ext.fly(cell.dom.firstChild).focus(50); + } + + break; + } + } + }, + + + fullUpdate: function(date){ + var me = this, + cells = me.cells.elements, + textNodes = me.textNodes, + disabledCls = me.disabledCellCls, + eDate = Ext.Date, + i = 0, + extraDays = 0, + visible = me.isVisible(), + sel = +eDate.clearTime(date, true), + today = +eDate.clearTime(new Date()), + min = me.minDate ? eDate.clearTime(me.minDate, true) : Number.NEGATIVE_INFINITY, + max = me.maxDate ? eDate.clearTime(me.maxDate, true) : Number.POSITIVE_INFINITY, + ddMatch = me.disabledDatesRE, + ddText = me.disabledDatesText, + ddays = me.disabledDays ? me.disabledDays.join('') : false, + ddaysText = me.disabledDaysText, + format = me.format, + days = eDate.getDaysInMonth(date), + firstOfMonth = eDate.getFirstDateOfMonth(date), + startingPos = firstOfMonth.getDay() - me.startDay, + previousMonth = eDate.add(date, eDate.MONTH, -1), + longDayFormat = me.longDayFormat, + disabled, + prevStart, + current, + disableToday, + tempDate, + setCellClass, + html, + cls, + formatValue, + value; + + if (startingPos < 0) { + startingPos += 7; + } + + days += startingPos; + prevStart = eDate.getDaysInMonth(previousMonth) - startingPos; + current = new Date(previousMonth.getFullYear(), previousMonth.getMonth(), prevStart, me.initHour); + + if (me.showToday) { + tempDate = eDate.clearTime(new Date()); + disableToday = (tempDate < min || tempDate > max || + (ddMatch && format && ddMatch.test(eDate.dateFormat(tempDate, format))) || + (ddays && ddays.indexOf(tempDate.getDay()) != -1)); + + if (!me.disabled) { + me.todayBtn.setDisabled(disableToday); + me.todayKeyListener.setDisabled(disableToday); + } + } + + setCellClass = function(cell, cls){ + disabled = false; + value = +eDate.clearTime(current, true); + cell.title = eDate.format(current, longDayFormat); + + cell.firstChild.dateValue = value; + if(value == today){ + cls += ' ' + me.todayCls; + cell.title = me.todayText; + } + if(value == sel){ + cls += ' ' + me.selectedCls; + me.fireEvent('highlightitem', me, cell); + if (visible && me.floating) { + Ext.fly(cell.firstChild).focus(50); + } + } + + + if(value < min) { + cls += ' ' + disabledCls; + cell.title = me.minText; + disabled = true; + } + if (!disabled && value > max) { + cls += ' ' + disabledCls; + cell.title = me.maxText; + disabled = true; + } + if (!disabled && ddays) { + if(ddays.indexOf(current.getDay()) !== -1){ + cell.title = ddaysText; + cls += ' ' + disabledCls; + disabled = true; + } + } + if(!disabled && ddMatch && format){ + formatValue = eDate.dateFormat(current, format); + if(ddMatch.test(formatValue)){ + cell.title = ddText.replace('%0', formatValue); + cls += ' ' + disabledCls; + } + } + cell.className = cls + ' ' + me.cellCls; + }; + + for(; i < me.numDays; ++i) { + if (i < startingPos) { + html = (++prevStart); + cls = me.prevCls; + } else if (i >= days) { + html = (++extraDays); + cls = me.nextCls; + } else { + html = i - startingPos + 1; + cls = me.activeCls; + } + textNodes[i].innerHTML = html; + current.setDate(current.getDate() + 1); + setCellClass(cells[i], cls); + } + + me.monthBtn.setText(Ext.Date.format(date, me.monthYearFormat)); + }, + + + update : function(date, forceRefresh){ + var me = this, + active = me.activeDate; + + if (me.rendered) { + me.activeDate = date; + if(!forceRefresh && active && me.el && active.getMonth() == date.getMonth() && active.getFullYear() == date.getFullYear()){ + me.selectedUpdate(date, active); + } else { + me.fullUpdate(date, active); + } + me.innerEl.dom.title = Ext.String.format(me.ariaTitle, Ext.Date.format(me.activeDate, me.ariaTitleDateFormat)); + } + return me; + }, + + + + beforeDestroy : function() { + var me = this; + + if (me.rendered) { + Ext.destroy( + me.todayKeyListener, + me.keyNav, + me.monthPicker, + me.monthBtn, + me.nextRepeater, + me.prevRepeater, + me.todayBtn + ); + delete me.textNodes; + delete me.cells.elements; + } + me.callParent(); + }, + + + + onShow: function() { + this.callParent(arguments); + if (this.focusOnShow) { + this.focus(); + } + } +}, + + +function() { + var proto = this.prototype, + date = Ext.Date; + + proto.monthNames = date.monthNames; + proto.dayNames = date.dayNames; + proto.format = date.defaultFormat; +}); + + +Ext.define('Ext.form.field.Date', { + extend: Ext.form.field.Picker , + alias: 'widget.datefield', + + alternateClassName: ['Ext.form.DateField', 'Ext.form.Date'], + + + + format : "m/d/Y", + + + + altFormats : "m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|n-j|n/j", + + + + disabledDaysText : "Disabled", + + + + disabledDatesText : "Disabled", + + + + minText : "The date in this field must be equal to or after {0}", + + + + maxText : "The date in this field must be equal to or before {0}", + + + + invalidText : "{0} is not a valid date - it must be in the format {1}", + + + triggerCls : Ext.baseCSSPrefix + 'form-date-trigger', + + showToday : true, + + + + + + + + + useStrict: undefined, + + + + initTime: '12', + + initTimeFormat: 'H', + + matchFieldWidth: false, + + + startDay: 0, + + + initComponent : function(){ + var me = this, + isString = Ext.isString, + min, max; + + min = me.minValue; + max = me.maxValue; + if(isString(min)){ + me.minValue = me.parseDate(min); + } + if(isString(max)){ + me.maxValue = me.parseDate(max); + } + me.disabledDatesRE = null; + me.initDisabledDays(); + + me.callParent(); + }, + + initValue: function() { + var me = this, + value = me.value; + + + if (Ext.isString(value)) { + me.value = me.rawToValue(value); + } + + me.callParent(); + }, + + + initDisabledDays : function(){ + if(this.disabledDates){ + var dd = this.disabledDates, + len = dd.length - 1, + re = "(?:", + d, + dLen = dd.length, + date; + + for (d = 0; d < dLen; d++) { + date = dd[d]; + + re += Ext.isDate(date) ? '^' + Ext.String.escapeRegex(date.dateFormat(this.format)) + '$' : date; + if (d !== len) { + re += '|'; + } + } + + this.disabledDatesRE = new RegExp(re + ')'); + } + }, + + + setDisabledDates : function(dd){ + var me = this, + picker = me.picker; + + me.disabledDates = dd; + me.initDisabledDays(); + if (picker) { + picker.setDisabledDates(me.disabledDatesRE); + } + }, + + + setDisabledDays : function(dd){ + var picker = this.picker; + + this.disabledDays = dd; + if (picker) { + picker.setDisabledDays(dd); + } + }, + + + setMinValue : function(dt){ + var me = this, + picker = me.picker, + minValue = (Ext.isString(dt) ? me.parseDate(dt) : dt); + + me.minValue = minValue; + if (picker) { + picker.minText = Ext.String.format(me.minText, me.formatDate(me.minValue)); + picker.setMinDate(minValue); + } + }, + + + setMaxValue : function(dt){ + var me = this, + picker = me.picker, + maxValue = (Ext.isString(dt) ? me.parseDate(dt) : dt); + + me.maxValue = maxValue; + if (picker) { + picker.maxText = Ext.String.format(me.maxText, me.formatDate(me.maxValue)); + picker.setMaxDate(maxValue); + } + }, + + + getErrors: function(value) { + var me = this, + format = Ext.String.format, + clearTime = Ext.Date.clearTime, + errors = me.callParent(arguments), + disabledDays = me.disabledDays, + disabledDatesRE = me.disabledDatesRE, + minValue = me.minValue, + maxValue = me.maxValue, + len = disabledDays ? disabledDays.length : 0, + i = 0, + svalue, + fvalue, + day, + time; + + value = me.formatDate(value || me.processRawValue(me.getRawValue())); + + if (value === null || value.length < 1) { + return errors; + } + + svalue = value; + value = me.parseDate(value); + if (!value) { + errors.push(format(me.invalidText, svalue, Ext.Date.unescapeFormat(me.format))); + return errors; + } + + time = value.getTime(); + if (minValue && time < clearTime(minValue).getTime()) { + errors.push(format(me.minText, me.formatDate(minValue))); + } + + if (maxValue && time > clearTime(maxValue).getTime()) { + errors.push(format(me.maxText, me.formatDate(maxValue))); + } + + if (disabledDays) { + day = value.getDay(); + + for(; i < len; i++) { + if (day === disabledDays[i]) { + errors.push(me.disabledDaysText); + break; + } + } + } + + fvalue = me.formatDate(value); + if (disabledDatesRE && disabledDatesRE.test(fvalue)) { + errors.push(format(me.disabledDatesText, fvalue)); + } + + return errors; + }, + + rawToValue: function(rawValue) { + return this.parseDate(rawValue) || rawValue || null; + }, + + valueToRaw: function(value) { + return this.formatDate(this.parseDate(value)); + }, + + + + + safeParse : function(value, format) { + var me = this, + utilDate = Ext.Date, + result = null, + strict = me.useStrict, + parsedDate; + + if (utilDate.formatContainsHourInfo(format)) { + + result = utilDate.parse(value, format, strict); + } else { + + parsedDate = utilDate.parse(value + ' ' + me.initTime, format + ' ' + me.initTimeFormat, strict); + if (parsedDate) { + result = utilDate.clearTime(parsedDate); + } + } + return result; + }, + + + getSubmitValue: function() { + var format = this.submitFormat || this.format, + value = this.getValue(); + + return value ? Ext.Date.format(value, format) : ''; + }, + + + parseDate : function(value) { + if(!value || Ext.isDate(value)){ + return value; + } + + var me = this, + val = me.safeParse(value, me.format), + altFormats = me.altFormats, + altFormatsArray = me.altFormatsArray, + i = 0, + len; + + if (!val && altFormats) { + altFormatsArray = altFormatsArray || altFormats.split('|'); + len = altFormatsArray.length; + for (; i < len && !val; ++i) { + val = me.safeParse(value, altFormatsArray[i]); + } + } + return val; + }, + + + formatDate : function(date){ + return Ext.isDate(date) ? Ext.Date.dateFormat(date, this.format) : date; + }, + + createPicker: function() { + var me = this, + format = Ext.String.format; + + return new Ext.picker.Date({ + pickerField: me, + ownerCt: me.ownerCt, + renderTo: document.body, + floating: true, + hidden: true, + focusOnShow: true, + minDate: me.minValue, + maxDate: me.maxValue, + disabledDatesRE: me.disabledDatesRE, + disabledDatesText: me.disabledDatesText, + disabledDays: me.disabledDays, + disabledDaysText: me.disabledDaysText, + format: me.format, + showToday: me.showToday, + startDay: me.startDay, + minText: format(me.minText, me.formatDate(me.minValue)), + maxText: format(me.maxText, me.formatDate(me.maxValue)), + listeners: { + scope: me, + select: me.onSelect + }, + keyNavConfig: { + esc: function() { + me.collapse(); + } + } + }); + }, + + onDownArrow: function(e) { + this.callParent(arguments); + if (this.isExpanded) { + this.getPicker().focus(); + } + }, + + onSelect: function(m, d) { + var me = this; + + me.setValue(d); + me.fireEvent('select', me, d); + me.collapse(); + }, + + + onExpand: function() { + var value = this.getValue(); + this.picker.setValue(Ext.isDate(value) ? value : new Date()); + }, + + + onCollapse: function() { + this.focus(false, 60); + }, + + + beforeBlur : function(){ + var me = this, + v = me.parseDate(me.getRawValue()), + focusTask = me.focusTask; + + if (focusTask) { + focusTask.cancel(); + } + + if (v) { + me.setValue(v); + } + } + + + + + +}); + + +Ext.define('Ext.form.field.FileButton', { + extend: Ext.button.Button , + alias: 'widget.filebutton', + + childEls: [ + 'btnEl', 'btnWrap', 'btnInnerEl', 'btnIconEl', 'fileInputEl' + ], + + inputCls: Ext.baseCSSPrefix + 'form-file-input', + + cls: Ext.baseCSSPrefix + 'form-file-btn', + + preventDefault: false, + + renderTpl: [ + '', + '' + ], + + getTemplateArgs: function(){ + var args = this.callParent(); + args.inputCls = this.inputCls; + args.inputName = this.inputName; + return args; + }, + + afterRender: function(){ + var me = this; + me.callParent(arguments); + me.fileInputEl.on('change', me.fireChange, me); + }, + + fireChange: function(e){ + this.fireEvent('change', this, e, this.fileInputEl.dom.value); + }, + + + createFileInput : function(isTemporary) { + var me = this; + me.fileInputEl = me.el.createChild({ + name: me.inputName, + id: !isTemporary ? me.id + '-fileInputEl' : undefined, + cls: me.inputCls, + tag: 'input', + type: 'file', + size: 1 + }); + me.fileInputEl.on('change', me.fireChange, me); + }, + + reset: function(remove){ + if (remove) { + this.fileInputEl.remove(); + } + this.createFileInput(!remove); + }, + + restoreInput: function(el){ + this.fileInputEl.remove(); + el = Ext.get(el); + this.el.appendChild(el); + this.fileInputEl = el; + }, + + onDisable: function(){ + this.callParent(); + this.fileInputEl.dom.disabled = true; + }, + + onEnable : function() { + this.callParent(); + this.fileInputEl.dom.disabled = false; + } +}); + + +Ext.define('Ext.form.field.File', { + extend: Ext.form.field.Trigger , + alias: ['widget.filefield', 'widget.fileuploadfield'], + alternateClassName: ['Ext.form.FileUploadField', 'Ext.ux.form.FileUploadField', 'Ext.form.File'], + + + + + + + buttonText: 'Browse...', + + + + buttonOnly: false, + + + buttonMargin: 3, + + + clearOnSubmit: true, + + + + + + + + + + + fieldBodyCls: Ext.baseCSSPrefix + 'form-file-wrap', + + + readOnly: true, + + + triggerNoEditCls: '', + + + componentLayout: 'triggerfield', + + + childEls: ['browseButtonWrap'], + + + onRender: function() { + var me = this, + id = me.id, + inputEl; + + me.callParent(arguments); + + inputEl = me.inputEl; + inputEl.dom.name = ''; + + + + + me.button = new Ext.form.field.FileButton(Ext.apply({ + renderTo: id + '-browseButtonWrap', + ownerCt: me, + ownerLayout: me.componentLayout, + id: id + '-button', + ui: me.ui, + disabled: me.disabled, + text: me.buttonText, + style: me.buttonOnly ? '' : 'margin-left:' + me.buttonMargin + 'px', + inputName: me.getName(), + listeners: { + scope: me, + change: me.onFileChange + } + }, me.buttonConfig)); + me.fileInputEl = me.button.fileInputEl; + + if (me.buttonOnly) { + me.inputCell.setDisplayed(false); + } + + + me.browseButtonWrap.dom.style.width = (me.browseButtonWrap.dom.lastChild.offsetWidth + me.button.getEl().getMargin('lr')) + 'px'; + if (Ext.isIE) { + me.button.getEl().repaint(); + } + }, + + + getTriggerMarkup: function() { + return ''; + }, + + + onFileChange: function(button, e, value) { + this.lastValue = null; + Ext.form.field.File.superclass.setValue.call(this, value); + }, + + + setValue: Ext.emptyFn, + + reset : function(){ + var me = this, + clear = me.clearOnSubmit; + if (me.rendered) { + me.button.reset(clear); + me.fileInputEl = me.button.fileInputEl; + if (clear) { + me.inputEl.dom.value = ''; + } + } + me.callParent(); + }, + + onShow: function(){ + this.callParent(); + + + this.button.updateLayout(); + }, + + onDisable: function(){ + this.callParent(); + this.button.disable(); + }, + + onEnable: function(){ + this.callParent(); + this.button.enable(); + }, + + isFileUpload: function() { + return true; + }, + + extractFileInput: function() { + var fileInput = this.button.fileInputEl.dom; + this.reset(); + return fileInput; + }, + + restoreInput: function(el) { + var button = this.button; + button.restoreInput(el); + this.fileInputEl = button.fileInputEl; + }, + + onDestroy: function(){ + Ext.destroyMembers(this, 'button'); + delete this.fileInputEl; + this.callParent(); + } +}); + + +Ext.define('Ext.form.field.Hidden', { + extend: Ext.form.field.Base , + alias: ['widget.hiddenfield', 'widget.hidden'], + alternateClassName: 'Ext.form.Hidden', + + + inputType : 'hidden', + hideLabel: true, + + initComponent: function(){ + this.formItemCls += '-hidden'; + this.callParent(); + }, + + + isEqual: function(value1, value2) { + return this.isEqualAsString(value1, value2); + }, + + + initEvents: Ext.emptyFn, + setSize : Ext.emptyFn, + setWidth : Ext.emptyFn, + setHeight : Ext.emptyFn, + setPosition : Ext.emptyFn, + setPagePosition : Ext.emptyFn, + markInvalid : Ext.emptyFn, + clearInvalid : Ext.emptyFn +}); + + +Ext.define('Ext.picker.Color', { + extend: Ext.Component , + + alias: 'widget.colorpicker', + alternateClassName: 'Ext.ColorPalette', + + + componentCls : Ext.baseCSSPrefix + 'color-picker', + + + selectedCls: Ext.baseCSSPrefix + 'color-picker-selected', + + + itemCls: Ext.baseCSSPrefix + 'color-picker-item', + + + value : null, + + + clickEvent :'click', + + + allowReselect : false, + + + colors : [ + '000000', '993300', '333300', '003300', '003366', '000080', '333399', '333333', + '800000', 'FF6600', '808000', '008000', '008080', '0000FF', '666699', '808080', + 'FF0000', 'FF9900', '99CC00', '339966', '33CCCC', '3366FF', '800080', '969696', + 'FF00FF', 'FFCC00', 'FFFF00', '00FF00', '00FFFF', '00CCFF', '993366', 'C0C0C0', + 'FF99CC', 'FFCC99', 'FFFF99', 'CCFFCC', 'CCFFFF', '99CCFF', 'CC99FF', 'FFFFFF' + ], + + + + + + colorRe: /(?:^|\s)color-(.{6})(?:\s|$)/, + + renderTpl: [ + '', + '', + ' ', + '', + '' + ], + + + initComponent : function(){ + var me = this; + + me.callParent(arguments); + me.addEvents( + + 'select' + ); + + if (me.handler) { + me.on('select', me.handler, me.scope, true); + } + }, + + + + initRenderData : function(){ + var me = this; + return Ext.apply(me.callParent(), { + itemCls: me.itemCls, + colors: me.colors + }); + }, + + onRender : function(){ + var me = this, + clickEvent = me.clickEvent; + + me.callParent(arguments); + + me.mon(me.el, clickEvent, me.handleClick, me, {delegate: 'a'}); + + if(clickEvent != 'click'){ + me.mon(me.el, 'click', Ext.emptyFn, me, {delegate: 'a', stopEvent: true}); + } + }, + + + afterRender : function(){ + var me = this, + value; + + me.callParent(arguments); + if (me.value) { + value = me.value; + me.value = null; + me.select(value, true); + } + }, + + + handleClick : function(event, target){ + var me = this, + color; + + event.stopEvent(); + if (!me.disabled) { + color = target.className.match(me.colorRe)[1]; + me.select(color.toUpperCase()); + } + }, + + + select : function(color, suppressEvent){ + + var me = this, + selectedCls = me.selectedCls, + value = me.value, + el; + + color = color.replace('#', ''); + if (!me.rendered) { + me.value = color; + return; + } + + + if (color != value || me.allowReselect) { + el = me.el; + + if (me.value) { + el.down('a.color-' + value).removeCls(selectedCls); + } + el.down('a.color-' + color).addCls(selectedCls); + me.value = color; + if (suppressEvent !== true) { + me.fireEvent('select', me, color); + } + } + }, + + + getValue: function(){ + return this.value || null; + } +}); + + +Ext.define('Ext.layout.component.field.HtmlEditor', { + extend: Ext.layout.component.field.FieldContainer , + alias: ['layout.htmleditor'], + + type: 'htmleditor', + + naturalHeight: 150, + naturalWidth: 300, + + beginLayout: function(ownerContext) { + var owner = this.owner; + this.callParent(arguments); + + ownerContext.toolbarContext = ownerContext.context.getCmp(owner.toolbar); + ownerContext.inputCmpContext = ownerContext.context.getCmp(owner.inputCmp); + ownerContext.textAreaContext = ownerContext.getEl('textareaEl'); + ownerContext.iframeContext = ownerContext.getEl('iframeEl'); + }, + + beginLayoutCycle: function(ownerContext) { + var me = this, + widthModel = ownerContext.widthModel, + heightModel = ownerContext.heightModel, + owner = me.owner, + iframeEl = owner.iframeEl, + textareaEl = owner.textareaEl; + + me.callParent(arguments); + if (widthModel.shrinkWrap) { + iframeEl.setStyle('width', ''); + textareaEl.setStyle('width', ''); + } else if (widthModel.natural) { + ownerContext.bodyCellContext.setWidth(me.naturalWidth); + } + + if (heightModel.natural || heightModel.shrinkWrap) { + iframeEl.setHeight(me.naturalHeight); + textareaEl.setHeight(me.naturalHeight); + } + }, + + finishedLayout: function(){ + this.callParent(arguments); + + + if (Ext.isIE9m && Ext.isIEQuirks) { + this.owner.el.repaint(); + } + }, + + publishOwnerWidth: function(ownerContext, width){ + this.callParent(arguments); + width -= ownerContext.inputCmpContext.getBorderInfo().width; + ownerContext.textAreaContext.setWidth(width); + ownerContext.iframeContext.setWidth(width); + }, + + + + + + + + publishInnerWidth: function(ownerContext, width){ + var border = ownerContext.inputCmpContext.getBorderInfo().width, + ieBug = Ext.isStrict && Ext.isIE8m, + natural = ownerContext.widthModel.natural; + + this.callParent(arguments); + width = ownerContext.bodyCellContext.props.width - border; + if (natural) { + if (ieBug) { + width -= 2; + } + ownerContext.textAreaContext.setWidth(width); + ownerContext.iframeContext.setWidth(width); + } else if (ieBug) { + ownerContext.textAreaContext.setWidth(width); + } + }, + + publishInnerHeight: function (ownerContext, height) { + var toolbarHeight = ownerContext.toolbarContext.getProp('height'), + sourceEdit = this.owner.sourceEditMode; + + this.callParent(arguments); + height = ownerContext.bodyCellContext.props.height; + + if (toolbarHeight !== undefined) { + height -= toolbarHeight + ownerContext.inputCmpContext.getFrameInfo().height; + if (Ext.isIE8 && Ext.isStrict) { + height -= 2; + } else if (Ext.isIEQuirks && (Ext.isIE8 || Ext.isIE9)) { + height -= 4; + } + ownerContext.iframeContext.setHeight(height); + ownerContext.textAreaContext.setHeight(height); + } else { + this.done = false; + } + } + +}); + + +Ext.define('Ext.form.field.HtmlEditor', { + extend: Ext.form.FieldContainer , + mixins: { + field: Ext.form.field.Field + }, + alias: 'widget.htmleditor', + alternateClassName: 'Ext.form.HtmlEditor', + + + + + + + + + + + componentLayout: 'htmleditor', + + componentTpl: [ + '{beforeTextAreaTpl}', + '', + '{afterTextAreaTpl}', + '{beforeIFrameTpl}', + '', + '{afterIFrameTpl}', + { + disableFormats: true + } + ], + + stretchInputElFixed: true, + + subTplInsertions: [ + + 'beforeTextAreaTpl', + + + 'afterTextAreaTpl', + + + 'beforeIFrameTpl', + + + 'afterIFrameTpl', + + + 'iframeAttrTpl', + + + 'inputAttrTpl' + ], + + + enableFormat: true, + + enableFontSize: true, + + enableColors: true, + + enableAlignments: true, + + enableLists: true, + + enableSourceEdit: true, + + enableLinks: true, + + enableFont: true, + + + createLinkText: 'Please enter the URL for the link:', + + + defaultLinkValue: 'http:/'+'/', + + fontFamilies: [ + 'Arial', + 'Courier New', + 'Tahoma', + 'Times New Roman', + 'Verdana' + ], + + defaultValue: (Ext.isOpera || Ext.isIE6) ? ' ' : '​', + + fieldBodyCls: Ext.baseCSSPrefix + 'html-editor-wrap', + + + + + initialized: false, + + activated: false, + + sourceEditMode: false, + + iframePad:3, + + hideMode:'offsets', + + maskOnDisable: true, + + containerElCls: Ext.baseCSSPrefix + 'html-editor-container', + + + initComponent: function(){ + var me = this; + + me.addEvents( + + 'initialize', + + 'activate', + + 'beforesync', + + 'beforepush', + + 'sync', + + 'push', + + 'editmodechange' + ); + + me.items = [me.createToolbar(), me.createInputCmp()]; + + me.layout = { + type: 'vbox', + align: 'stretch' + }; + + me.callParent(arguments); + me.initField(); + }, + + createInputCmp: function(){ + this.inputCmp = Ext.widget(this.getInputCmpCfg()); + return this.inputCmp; + }, + + getInputCmpCfg: function(){ + var me = this, + id = me.id + '-inputCmp', + data = { + id : id, + name : me.name, + textareaCls : Ext.baseCSSPrefix + 'hidden', + value : me.value, + iframeName : Ext.id(), + iframeSrc : Ext.SSL_SECURE_URL, + iframeCls : Ext.baseCSSPrefix + 'htmleditor-iframe' + }; + + me.getInsertionRenderData(data, me.subTplInsertions); + + return { + flex: 1, + xtype: 'component', + tpl: me.getTpl('componentTpl'), + childEls: ['iframeEl', 'textareaEl'], + id: id, + cls: Ext.baseCSSPrefix + 'html-editor-input', + data: data + }; + }, + + + createToolbar: function(){ + this.toolbar = Ext.widget(this.getToolbarCfg()); + return this.toolbar; + }, + + getToolbarCfg: function(){ + var me = this, + items = [], i, + tipsEnabled = Ext.quickTipsActive && Ext.tip.QuickTipManager.isEnabled(), + baseCSSPrefix = Ext.baseCSSPrefix, + fontSelectItem, undef; + + function btn(id, toggle, handler){ + return { + itemId: id, + cls: baseCSSPrefix + 'btn-icon', + iconCls: baseCSSPrefix + 'edit-'+id, + enableToggle:toggle !== false, + scope: me, + handler:handler||me.relayBtnCmd, + clickEvent: 'mousedown', + tooltip: tipsEnabled ? me.buttonTips[id] || undef : undef, + overflowText: me.buttonTips[id].title || undef, + tabIndex: -1 + }; + } + + + if (me.enableFont && !Ext.isSafari2) { + fontSelectItem = Ext.widget('component', { + itemId: 'fontSelect', + renderTpl: [ + '' + ], + childEls: ['selectEl'], + afterRender: function() { + me.fontSelect = this.selectEl; + Ext.Component.prototype.afterRender.apply(this, arguments); + }, + onDisable: function() { + var selectEl = this.selectEl; + if (selectEl) { + selectEl.dom.disabled = true; + } + Ext.Component.prototype.onDisable.apply(this, arguments); + }, + onEnable: function() { + var selectEl = this.selectEl; + if (selectEl) { + selectEl.dom.disabled = false; + } + Ext.Component.prototype.onEnable.apply(this, arguments); + }, + listeners: { + change: function() { + me.win.focus(); + me.relayCmd('fontName', me.fontSelect.dom.value); + me.deferFocus(); + }, + element: 'selectEl' + } + }); + + items.push( + fontSelectItem, + '-' + ); + } + + if (me.enableFormat) { + items.push( + btn('bold'), + btn('italic'), + btn('underline') + ); + } + + if (me.enableFontSize) { + items.push( + '-', + btn('increasefontsize', false, me.adjustFont), + btn('decreasefontsize', false, me.adjustFont) + ); + } + + if (me.enableColors) { + items.push( + '-', { + itemId: 'forecolor', + cls: baseCSSPrefix + 'btn-icon', + iconCls: baseCSSPrefix + 'edit-forecolor', + overflowText: me.buttonTips.forecolor.title, + tooltip: tipsEnabled ? me.buttonTips.forecolor || undef : undef, + tabIndex:-1, + menu: Ext.widget('menu', { + plain: true, + + items: [{ + xtype: 'colorpicker', + allowReselect: true, + focus: Ext.emptyFn, + value: '000000', + plain: true, + clickEvent: 'mousedown', + handler: function(cp, color) { + me.relayCmd('forecolor', Ext.isWebKit || Ext.isIE ? '#'+color : color); + this.up('menu').hide(); + } + }] + }) + }, { + itemId: 'backcolor', + cls: baseCSSPrefix + 'btn-icon', + iconCls: baseCSSPrefix + 'edit-backcolor', + overflowText: me.buttonTips.backcolor.title, + tooltip: tipsEnabled ? me.buttonTips.backcolor || undef : undef, + tabIndex:-1, + menu: Ext.widget('menu', { + plain: true, + + items: [{ + xtype: 'colorpicker', + focus: Ext.emptyFn, + value: 'FFFFFF', + plain: true, + allowReselect: true, + clickEvent: 'mousedown', + handler: function(cp, color) { + if (Ext.isGecko) { + me.execCmd('useCSS', false); + me.execCmd('hilitecolor', '#'+color); + me.execCmd('useCSS', true); + me.deferFocus(); + } else { + me.relayCmd(Ext.isOpera ? 'hilitecolor' : 'backcolor', Ext.isWebKit || Ext.isIE || Ext.isOpera ? '#'+color : color); + } + this.up('menu').hide(); + } + }] + }) + } + ); + } + + if (me.enableAlignments) { + items.push( + '-', + btn('justifyleft'), + btn('justifycenter'), + btn('justifyright') + ); + } + + if (!Ext.isSafari2) { + if (me.enableLinks) { + items.push( + '-', + btn('createlink', false, me.createLink) + ); + } + + if (me.enableLists) { + items.push( + '-', + btn('insertorderedlist'), + btn('insertunorderedlist') + ); + } + if (me.enableSourceEdit) { + items.push( + '-', + btn('sourceedit', true, function(btn){ + me.toggleSourceEdit(!me.sourceEditMode); + }) + ); + } + } + + + for (i = 0; i < items.length; i++) { + if (items[i].itemId !== 'sourceedit') { + items[i].disabled = true; + } + } + + + + return { + xtype: 'toolbar', + defaultButtonUI: me.defaultButtonUI, + cls: Ext.baseCSSPrefix + 'html-editor-tb', + enableOverflow: true, + items: items, + + + listeners: { + click: function(e){ + e.preventDefault(); + }, + element: 'el' + } + }; + }, + + getMaskTarget: function(){ + + + return Ext.isGecko ? this.inputCmp.el : this.bodyEl; + }, + + + setReadOnly: function(readOnly) { + var me = this, + textareaEl = me.textareaEl, + iframeEl = me.iframeEl, + body; + + me.readOnly = readOnly; + + if (textareaEl) { + textareaEl.dom.readOnly = readOnly; + } + + if (me.initialized) { + body = me.getEditorBody(); + if (Ext.isIE) { + + iframeEl.setDisplayed(false); + body.contentEditable = !readOnly; + iframeEl.setDisplayed(true); + } else { + me.setDesignMode(!readOnly); + } + if (body) { + body.style.cursor = readOnly ? 'default' : 'text'; + } + me.disableItems(readOnly); + } + }, + + + getDocMarkup: function() { + var me = this, + h = me.iframeEl.getHeight() - me.iframePad * 2, + oldIE = Ext.isIE8m; + + + + + return Ext.String.format( + (oldIE ? '' : '') + + '' + , me.iframePad, h, me.defaultFont); + }, + + + getEditorBody: function() { + var doc = this.getDoc(); + return doc.body || doc.documentElement; + }, + + + getDoc: function() { + return (!Ext.isIE && this.iframeEl.dom.contentDocument) || this.getWin().document; + }, + + + getWin: function() { + return Ext.isIE ? this.iframeEl.dom.contentWindow : window.frames[this.iframeEl.dom.name]; + }, + + initDefaultFont: function(){ + + + + + + var me = this, + selIdx = 0, + fonts, font, select, + option, i, len, lower; + + if (!me.defaultFont) { + font = me.textareaEl.getStyle('font-family'); + font = Ext.String.capitalize(font.split(',')[0]); + fonts = Ext.Array.clone(me.fontFamilies); + Ext.Array.include(fonts, font); + fonts.sort(); + me.defaultFont = font; + + select = me.down('#fontSelect').selectEl.dom; + for (i = 0, len = fonts.length; i < len; ++i) { + font = fonts[i]; + lower = font.toLowerCase(); + option = new Option(font, lower); + if (font == me.defaultFont) { + selIdx = i; + } + option.style.fontFamily = lower; + select.add(option); + } + + + select.options[selIdx].selected = true; + } + }, + + + afterRender: function() { + var me = this, + inputCmp = me.inputCmp; + + me.callParent(arguments); + + me.iframeEl = inputCmp.iframeEl; + me.textareaEl = inputCmp.textareaEl; + + + + me.inputEl = me.iframeEl; + + me.initDefaultFont(); + + + me.monitorTask = Ext.TaskManager.start({ + run: me.checkDesignMode, + scope: me, + interval: 100 + }); + me.relayCmd('fontName', me.defaultFont); + }, + + initFrameDoc: function() { + var me = this, + doc, task; + + Ext.TaskManager.stop(me.monitorTask); + + doc = me.getDoc(); + me.win = me.getWin(); + + doc.open(); + doc.write(me.getDocMarkup()); + doc.close(); + + task = { + run: function() { + var doc = me.getDoc(); + if (doc.body || doc.readyState === 'complete') { + Ext.TaskManager.stop(task); + me.setDesignMode(true); + Ext.defer(me.initEditor, 10, me); + } + }, + interval: 10, + duration:10000, + scope: me + }; + Ext.TaskManager.start(task); + }, + + checkDesignMode: function() { + var me = this, + doc = me.getDoc(); + if (doc && (!doc.editorInitialized || me.getDesignMode() !== 'on')) { + me.initFrameDoc(); + } + }, + + + setDesignMode: function(mode) { + var me = this, + doc = me.getDoc(); + if (doc) { + if (me.readOnly) { + mode = false; + } + doc.designMode = (/on|true/i).test(String(mode).toLowerCase()) ?'on':'off'; + } + }, + + + getDesignMode: function() { + var doc = this.getDoc(); + return !doc ? '' : String(doc.designMode).toLowerCase(); + }, + + disableItems: function(disabled) { + var items = this.getToolbar().items.items, + i, + iLen = items.length, + item; + + for (i = 0; i < iLen; i++) { + item = items[i]; + + if (item.getItemId() !== 'sourceedit') { + item.setDisabled(disabled); + } + } + }, + + + toggleSourceEdit: function(sourceEditMode) { + var me = this, + iframe = me.iframeEl, + textarea = me.textareaEl, + hiddenCls = Ext.baseCSSPrefix + 'hidden', + btn = me.getToolbar().getComponent('sourceedit'); + + if (!Ext.isBoolean(sourceEditMode)) { + sourceEditMode = !me.sourceEditMode; + } + me.sourceEditMode = sourceEditMode; + + if (btn.pressed !== sourceEditMode) { + btn.toggle(sourceEditMode); + } + if (sourceEditMode) { + me.disableItems(true); + me.syncValue(); + iframe.addCls(hiddenCls); + textarea.removeCls(hiddenCls); + textarea.dom.removeAttribute('tabIndex'); + textarea.focus(); + me.inputEl = textarea; + } else { + if (me.initialized) { + me.disableItems(me.readOnly); + } + me.pushValue(); + iframe.removeCls(hiddenCls); + textarea.addCls(hiddenCls); + textarea.dom.setAttribute('tabIndex', -1); + me.deferFocus(); + me.inputEl = iframe; + } + me.fireEvent('editmodechange', me, sourceEditMode); + me.updateLayout(); + }, + + + createLink: function() { + var url = prompt(this.createLinkText, this.defaultLinkValue); + if (url && url !== 'http:/'+'/') { + this.relayCmd('createlink', url); + } + }, + + clearInvalid: Ext.emptyFn, + + setValue: function(value) { + var me = this, + textarea = me.textareaEl; + me.mixins.field.setValue.call(me, value); + if (value === null || value === undefined) { + value = ''; + } + if (textarea) { + textarea.dom.value = value; + } + me.pushValue(); + return this; + }, + + + cleanHtml: function(html) { + html = String(html); + if (Ext.isWebKit) { + html = html.replace(/\sclass="(?:Apple-style-span|Apple-tab-span|khtml-block-placeholder)"/gi, ''); + } + + + if (html.charCodeAt(0) === parseInt(this.defaultValue.replace(/\D/g, ''), 10)) { + html = html.substring(1); + } + return html; + }, + + + syncValue: function(){ + var me = this, + body, changed, html, bodyStyle, match; + + if (me.initialized) { + body = me.getEditorBody(); + html = body.innerHTML; + if (Ext.isWebKit) { + bodyStyle = body.getAttribute('style'); + match = bodyStyle.match(/text-align:(.*?);/i); + if (match && match[1]) { + html = '
    ' + html + '
    '; + } + } + html = me.cleanHtml(html); + if (me.fireEvent('beforesync', me, html) !== false) { + if (me.textareaEl.dom.value != html) { + me.textareaEl.dom.value = html; + changed = true; + } + + me.fireEvent('sync', me, html); + + if (changed) { + + + me.checkChange(); + } + } + } + }, + + getValue: function() { + var me = this, + value; + if (!me.sourceEditMode) { + me.syncValue(); + } + value = me.rendered ? me.textareaEl.dom.value : me.value; + me.value = value; + return value; + }, + + + pushValue: function() { + var me = this, + v; + if(me.initialized){ + v = me.textareaEl.dom.value || ''; + if (!me.activated && v.length < 1) { + v = me.defaultValue; + } + if (me.fireEvent('beforepush', me, v) !== false) { + me.getEditorBody().innerHTML = v; + if (Ext.isGecko) { + + me.setDesignMode(false); + me.setDesignMode(true); + } + me.fireEvent('push', me, v); + } + } + }, + + + deferFocus: function(){ + this.focus(false, true); + }, + + getFocusEl: function() { + var me = this, + win = me.win; + return win && !me.sourceEditMode ? win : me.textareaEl; + }, + + focus: function(selectText, delay) { + var me = this, + value, focusEl; + + if (delay) { + if (!me.focusTask) { + me.focusTask = new Ext.util.DelayedTask(me.focus); + } + me.focusTask.delay(Ext.isNumber(delay) ? delay : 10, null, me, [selectText, false]); + } + else { + if (selectText) { + if (me.textareaEl && me.textareaEl.dom) { + value = me.textareaEl.dom.value; + } + if (value && value.length) { + me.execCmd('selectall', true); + } + } + focusEl = me.getFocusEl(); + if (focusEl && (focusEl.isComponent || focusEl.dom)) { + focusEl.focus(); + } + } + return me; + }, + + + initEditor: function(){ + + try { + var me = this, + dbody = me.getEditorBody(), + ss = me.textareaEl.getStyles('font-size', 'font-family', 'background-image', 'background-repeat', 'background-color', 'color'), + doc, + fn; + + ss['background-attachment'] = 'fixed'; + dbody.bgProperties = 'fixed'; + + Ext.DomHelper.applyStyles(dbody, ss); + + doc = me.getDoc(); + + if (doc) { + try { + Ext.EventManager.removeAll(doc); + } catch(e) {} + } + + + fn = Ext.Function.bind(me.onEditorEvent, me); + Ext.EventManager.on(doc, { + mousedown: fn, + dblclick: fn, + click: fn, + keyup: fn, + buffer:100 + }); + + + + + + + fn = me.onRelayedEvent; + Ext.EventManager.on(doc, { + mousedown: fn, + mousemove: fn, + mouseup: fn, + click: fn, + dblclick: fn, + scope: me + }); + + if (Ext.isGecko) { + Ext.EventManager.on(doc, 'keypress', me.applyCommand, me); + } + if (me.fixKeys) { + Ext.EventManager.on(doc, 'keydown', me.fixKeys, me); + } + + + + + if (Ext.isIE8m || (Ext.isIE9 && !Ext.isStrict)) { + Ext.EventManager.on(doc, 'focusout', function() { + me.savedSelection = doc.selection.type !== 'None' ? doc.selection.createRange() : null; + }, me); + + Ext.EventManager.on(doc, 'focusin', function() { + if (me.savedSelection) { + me.savedSelection.select(); + } + }, me); + } + + + Ext.EventManager.onWindowUnload(me.beforeDestroy, me); + doc.editorInitialized = true; + + me.initialized = true; + me.pushValue(); + me.setReadOnly(me.readOnly); + me.fireEvent('initialize', me); + } catch(ex) { + + } + }, + + + beforeDestroy: function(){ + var me = this, + monitorTask = me.monitorTask, + doc, prop; + + if (monitorTask) { + Ext.TaskManager.stop(monitorTask); + } + if (me.rendered) { + Ext.EventManager.removeUnloadListener(me.beforeDestroy, me); + try { + doc = me.getDoc(); + if (doc) { + + + + + + Ext.EventManager.removeAll(Ext.fly(doc)); + for (prop in doc) { + if (doc.hasOwnProperty && doc.hasOwnProperty(prop)) { + delete doc[prop]; + } + } + } + } catch(e) { + + } + delete me.iframeEl; + delete me.textareaEl; + delete me.toolbar; + delete me.inputCmp; + } + me.callParent(); + }, + + + onRelayedEvent: function (event) { + + + var iframeEl = this.iframeEl, + + + iframeXY = Ext.Element.getTrueXY(iframeEl), + originalEventXY = event.getXY(), + + + + + eventXY = Ext.EventManager.getPageXY(event.browserEvent); + + + + event.xy = [iframeXY[0] + eventXY[0], iframeXY[1] + eventXY[1]]; + + event.injectEvent(iframeEl); + + event.xy = originalEventXY; + }, + + + onFirstFocus: function(){ + var me = this, + selection, range; + me.activated = true; + me.disableItems(me.readOnly); + if (Ext.isGecko) { + me.win.focus(); + selection = me.win.getSelection(); + if (!selection.focusNode || selection.focusNode.nodeType !== 3) { + range = selection.getRangeAt(0); + range.selectNodeContents(me.getEditorBody()); + range.collapse(true); + me.deferFocus(); + } + try { + me.execCmd('useCSS', true); + me.execCmd('styleWithCSS', false); + } catch(e) { + + } + } + me.fireEvent('activate', me); + }, + + + adjustFont: function(btn) { + var adjust = btn.getItemId() === 'increasefontsize' ? 1 : -1, + size = this.getDoc().queryCommandValue('FontSize') || '2', + isPxSize = Ext.isString(size) && size.indexOf('px') !== -1, + isSafari; + size = parseInt(size, 10); + if (isPxSize) { + + + if (size <= 10) { + size = 1 + adjust; + } + else if (size <= 13) { + size = 2 + adjust; + } + else if (size <= 16) { + size = 3 + adjust; + } + else if (size <= 18) { + size = 4 + adjust; + } + else if (size <= 24) { + size = 5 + adjust; + } + else { + size = 6 + adjust; + } + size = Ext.Number.constrain(size, 1, 6); + } else { + isSafari = Ext.isSafari; + if (isSafari) { + adjust *= 2; + } + size = Math.max(1, size + adjust) + (isSafari ? 'px' : 0); + } + this.relayCmd('FontSize', size); + }, + + + onEditorEvent: function(e) { + this.updateToolbar(); + }, + + + updateToolbar: function() { + var me = this, + i, l, btns, doc, name, queriedName, fontSelect, + toolbarSubmenus; + + if (me.readOnly) { + return; + } + + if (!me.activated) { + me.onFirstFocus(); + return; + } + + btns = me.getToolbar().items.map; + doc = me.getDoc(); + + if (me.enableFont && !Ext.isSafari2) { + + + queriedName = doc.queryCommandValue('fontName'); + name = (queriedName ? queriedName.split(",")[0].replace(/^'/,'').replace(/'$/,'') : me.defaultFont).toLowerCase(); + fontSelect = me.fontSelect.dom; + if (name !== fontSelect.value || name != queriedName) { + fontSelect.value = name; + } + } + + function updateButtons() { + for (i = 0, l = arguments.length, name; i < l; i++) { + name = arguments[i]; + btns[name].toggle(doc.queryCommandState(name)); + } + } + if(me.enableFormat){ + updateButtons('bold', 'italic', 'underline'); + } + if(me.enableAlignments){ + updateButtons('justifyleft', 'justifycenter', 'justifyright'); + } + if(!Ext.isSafari2 && me.enableLists){ + updateButtons('insertorderedlist', 'insertunorderedlist'); + } + + + + toolbarSubmenus = me.toolbar.query('menu'); + for (i = 0; i < toolbarSubmenus.length; i++) { + toolbarSubmenus[i].hide(); + } + me.syncValue(); + }, + + + relayBtnCmd: function(btn) { + this.relayCmd(btn.getItemId()); + }, + + + relayCmd: function(cmd, value) { + Ext.defer(function() { + var me = this; + + if (!this.isDestroyed) { + me.win.focus(); + me.execCmd(cmd, value); + me.updateToolbar(); + } + }, 10, this); + }, + + + execCmd: function(cmd, value){ + var me = this, + doc = me.getDoc(); + doc.execCommand(cmd, false, (value == undefined ? null : value)); + me.syncValue(); + }, + + + applyCommand: function(e){ + if (e.ctrlKey) { + var me = this, + c = e.getCharCode(), cmd; + if (c > 0) { + c = String.fromCharCode(c); + switch (c) { + case 'b': + cmd = 'bold'; + break; + case 'i': + cmd = 'italic'; + break; + case 'u': + cmd = 'underline'; + break; + } + if (cmd) { + me.win.focus(); + me.execCmd(cmd); + me.deferFocus(); + e.preventDefault(); + } + } + } + }, + + + insertAtCursor: function(text){ + var me = this, + range; + + if (me.activated) { + me.win.focus(); + if (Ext.isIE) { + range = me.getDoc().selection.createRange(); + if (range) { + range.pasteHTML(text); + me.syncValue(); + me.deferFocus(); + } + }else{ + me.execCmd('InsertHTML', text); + me.deferFocus(); + } + } + }, + + + fixKeys: (function() { + if (Ext.isIE) { + return function(e){ + var me = this, + k = e.getKey(), + doc = me.getDoc(), + readOnly = me.readOnly, + range, target; + + if (k === e.TAB) { + e.stopEvent(); + if (!readOnly) { + range = doc.selection.createRange(); + if(range){ + range.collapse(true); + range.pasteHTML('    '); + me.deferFocus(); + } + } + } + else if (k === e.ENTER) { + if (!readOnly) { + range = doc.selection.createRange(); + if (range) { + target = range.parentElement(); + if(!target || target.tagName.toLowerCase() !== 'li'){ + e.stopEvent(); + range.pasteHTML('
    '); + range.collapse(false); + range.select(); + } + } + } + } + }; + } + + if (Ext.isOpera) { + return function(e){ + var me = this, + k = e.getKey(), + readOnly = me.readOnly; + if (k === e.TAB) { + e.stopEvent(); + if (!readOnly) { + me.win.focus(); + me.execCmd('InsertHTML','    '); + me.deferFocus(); + } + } + }; + } + + return null; + }()), + + + getToolbar: function(){ + return this.toolbar; + }, + + + + buttonTips: { + bold: { + title: 'Bold (Ctrl+B)', + text: 'Make the selected text bold.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + italic: { + title: 'Italic (Ctrl+I)', + text: 'Make the selected text italic.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + underline: { + title: 'Underline (Ctrl+U)', + text: 'Underline the selected text.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + increasefontsize: { + title: 'Grow Text', + text: 'Increase the font size.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + decreasefontsize: { + title: 'Shrink Text', + text: 'Decrease the font size.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + backcolor: { + title: 'Text Highlight Color', + text: 'Change the background color of the selected text.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + forecolor: { + title: 'Font Color', + text: 'Change the color of the selected text.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + justifyleft: { + title: 'Align Text Left', + text: 'Align text to the left.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + justifycenter: { + title: 'Center Text', + text: 'Center text in the editor.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + justifyright: { + title: 'Align Text Right', + text: 'Align text to the right.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + insertunorderedlist: { + title: 'Bullet List', + text: 'Start a bulleted list.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + insertorderedlist: { + title: 'Numbered List', + text: 'Start a numbered list.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + createlink: { + title: 'Hyperlink', + text: 'Make the selected text a hyperlink.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + sourceedit: { + title: 'Source Edit', + text: 'Switch to source editing mode.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + } + } + + + + + + + + + + + + + + + + + + +}); + + +Ext.define('Ext.form.field.Radio', { + extend: Ext.form.field.Checkbox , + alias: ['widget.radiofield', 'widget.radio'], + alternateClassName: 'Ext.form.Radio', + + + + isRadio: true, + + + focusCls: 'form-radio-focus', + + + + + inputType: 'radio', + ariaRole: 'radio', + + formId: null, + + + getGroupValue: function() { + var selected = this.getManager().getChecked(this.name, this.getFormId()); + return selected ? selected.inputValue : null; + }, + + + onBoxClick: function(e) { + var me = this; + if (!me.disabled && !me.readOnly) { + this.setValue(true); + } + }, + + onRemoved: function(){ + this.callParent(arguments); + this.formId = null; + }, + + + setValue: function(v) { + var me = this, + active; + + if (Ext.isBoolean(v)) { + me.callParent(arguments); + } else { + active = me.getManager().getWithValue(me.name, v, me.getFormId()).getAt(0); + if (active) { + active.setValue(true); + } + } + return me; + }, + + + getSubmitValue: function() { + return this.checked ? this.inputValue : null; + }, + + getModelData: function() { + return this.getSubmitData(); + }, + + + onChange: function(newVal, oldVal) { + var me = this, + r, rLen, radio, radios; + + me.callParent(arguments); + + if (newVal) { + radios = me.getManager().getByName(me.name, me.getFormId()).items; + rLen = radios.length; + + for (r = 0; r < rLen; r++) { + radio = radios[r]; + + if (radio !== me) { + radio.setValue(false); + } + } + } + }, + + + getManager: function() { + return Ext.form.RadioManager; + } +}); + + +Ext.define('Ext.picker.Time', { + extend: Ext.view.BoundList , + alias: 'widget.timepicker', + + + + + + + + increment: 15, + + + + format : "g:i A", + + + + displayField: 'disp', + + + initDate: [2008,0,1], + + componentCls: Ext.baseCSSPrefix + 'timepicker', + + + loadMask: false, + + initComponent: function() { + var me = this, + dateUtil = Ext.Date, + clearTime = dateUtil.clearTime, + initDate = me.initDate; + + + me.absMin = clearTime(new Date(initDate[0], initDate[1], initDate[2])); + me.absMax = dateUtil.add(clearTime(new Date(initDate[0], initDate[1], initDate[2])), 'mi', (24 * 60) - 1); + + me.store = me.createStore(); + + + + me.store.addFilter(me.rangeFilter = new Ext.util.Filter({ + id: 'time-picker-filter' + }), false); + + + me.updateList(); + + me.callParent(); + }, + + + setMinValue: function(value) { + this.minValue = value; + this.updateList(); + }, + + + setMaxValue: function(value) { + this.maxValue = value; + this.updateList(); + }, + + + normalizeDate: function(date) { + var initDate = this.initDate; + date.setFullYear(initDate[0], initDate[1], initDate[2]); + return date; + }, + + + updateList: function() { + var me = this, + min = me.normalizeDate(me.minValue || me.absMin), + max = me.normalizeDate(me.maxValue || me.absMax); + + me.rangeFilter.setFilterFn(function(record) { + var date = record.get('date'); + return date >= min && date <= max; + }); + me.store.filter(); + }, + + + createStore: function() { + var me = this, + utilDate = Ext.Date, + times = [], + min = me.absMin, + max = me.absMax; + + while(min <= max){ + times.push({ + disp: utilDate.dateFormat(min, me.format), + date: min + }); + min = utilDate.add(min, 'mi', me.increment); + } + + return new Ext.data.Store({ + fields: ['disp', 'date'], + data: times + }); + }, + + focusNode: function (rec) { + + + return false; + } + +}); + + +Ext.define('Ext.form.field.Time', { + extend: Ext.form.field.ComboBox , + alias: 'widget.timefield', + + alternateClassName: ['Ext.form.TimeField', 'Ext.form.Time'], + + + triggerCls: Ext.baseCSSPrefix + 'form-time-trigger', + + + + + + + + minText : "The time in this field must be equal to or after {0}", + + + + + maxText : "The time in this field must be equal to or before {0}", + + + + + invalidText : "{0} is not a valid time", + + + + + format : "g:i A", + + + + + + + + + altFormats : "g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|gi a|hi a|giA|hiA|gi A|hi A", + + + + increment: 15, + + + pickerMaxHeight: 300, + + + selectOnTab: true, + + + snapToIncrement: false, + + + initDate: '1/1/2008', + initDateFormat: 'j/n/Y', + + ignoreSelection: 0, + + queryMode: 'local', + + displayField: 'disp', + + valueField: 'date', + + initComponent: function() { + var me = this, + min = me.minValue, + max = me.maxValue; + if (min) { + me.setMinValue(min); + } + if (max) { + me.setMaxValue(max); + } + me.displayTpl = new Ext.XTemplate( + '' + + '{[typeof values === "string" ? values : this.formatDate(values["' + me.displayField + '"])]}' + + '' + me.delimiter + '' + + '', { + formatDate: Ext.Function.bind(me.formatDate, me) + }); + this.callParent(); + }, + + + transformOriginalValue: function(value) { + if (Ext.isString(value)) { + return this.rawToValue(value); + } + return value; + }, + + + isEqual: function(v1, v2) { + return Ext.Date.isEqual(v1, v2); + }, + + + setMinValue: function(value) { + var me = this, + picker = me.picker; + me.setLimit(value, true); + if (picker) { + picker.setMinValue(me.minValue); + } + }, + + + setMaxValue: function(value) { + var me = this, + picker = me.picker; + me.setLimit(value, false); + if (picker) { + picker.setMaxValue(me.maxValue); + } + }, + + + setLimit: function(value, isMin) { + var me = this, + d, val; + if (Ext.isString(value)) { + d = me.parseDate(value); + } + else if (Ext.isDate(value)) { + d = value; + } + if (d) { + val = Ext.Date.clearTime(new Date(me.initDate)); + val.setHours(d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()); + } + + else { + val = null; + } + me[isMin ? 'minValue' : 'maxValue'] = val; + }, + + rawToValue: function(rawValue) { + return this.parseDate(rawValue) || rawValue || null; + }, + + valueToRaw: function(value) { + return this.formatDate(this.parseDate(value)); + }, + + + getErrors: function(value) { + var me = this, + format = Ext.String.format, + errors = me.callParent(arguments), + minValue = me.minValue, + maxValue = me.maxValue, + date; + + value = me.formatDate(value || me.processRawValue(me.getRawValue())); + + if (value === null || value.length < 1) { + return errors; + } + + date = me.parseDate(value); + if (!date) { + errors.push(format(me.invalidText, value, Ext.Date.unescapeFormat(me.format))); + return errors; + } + + if (minValue && date < minValue) { + errors.push(format(me.minText, me.formatDate(minValue))); + } + + if (maxValue && date > maxValue) { + errors.push(format(me.maxText, me.formatDate(maxValue))); + } + + return errors; + }, + + formatDate: function() { + return Ext.form.field.Date.prototype.formatDate.apply(this, arguments); + }, + + + parseDate: function(value) { + var me = this, + val = value, + altFormats = me.altFormats, + altFormatsArray = me.altFormatsArray, + i = 0, + len; + + if (value && !Ext.isDate(value)) { + val = me.safeParse(value, me.format); + + if (!val && altFormats) { + altFormatsArray = altFormatsArray || altFormats.split('|'); + len = altFormatsArray.length; + for (; i < len && !val; ++i) { + val = me.safeParse(value, altFormatsArray[i]); + } + } + } + + + if (val && me.snapToIncrement) { + val = new Date(Ext.Number.snap(val.getTime(), me.increment * 60 * 1000)); + } + return val; + }, + + safeParse: function(value, format){ + var me = this, + utilDate = Ext.Date, + parsedDate, + result = null; + + if (utilDate.formatContainsDateInfo(format)) { + + result = utilDate.parse(value, format); + } else { + + parsedDate = utilDate.parse(me.initDate + ' ' + value, me.initDateFormat + ' ' + format); + if (parsedDate) { + result = parsedDate; + } + } + return result; + }, + + + getSubmitValue: function() { + var me = this, + format = me.submitFormat || me.format, + value = me.getValue(); + + return value ? Ext.Date.format(value, format) : null; + }, + + + createPicker: function() { + var me = this, + picker; + + me.listConfig = Ext.apply({ + xtype: 'timepicker', + selModel: { + mode: 'SINGLE' + }, + cls: undefined, + minValue: me.minValue, + maxValue: me.maxValue, + increment: me.increment, + format: me.format, + maxHeight: me.pickerMaxHeight + }, me.listConfig); + picker = me.callParent(); + me.bindStore(picker.store); + return picker; + }, + + onItemClick: function(picker, record){ + + var me = this, + selected = picker.getSelectionModel().getSelection(); + + if (selected.length > 0) { + selected = selected[0]; + if (selected && Ext.Date.isEqual(record.get('date'), selected.get('date'))) { + me.collapse(); + } + } + }, + + + onListSelectionChange: function(list, recordArray) { + if (recordArray.length) { + var me = this, + val = recordArray[0].get('date'); + + if (!me.ignoreSelection) { + me.skipSync = true; + me.setValue(val); + me.skipSync = false; + me.fireEvent('select', me, val); + me.picker.clearHighlight(); + me.collapse(); + me.inputEl.focus(); + } + } + }, + + + syncSelection: function() { + var me = this, + picker = me.picker, + toSelect, + selModel, + value, + data, d, dLen, rec; + + if (picker && !me.skipSync) { + picker.clearHighlight(); + value = me.getValue(); + selModel = picker.getSelectionModel(); + + me.ignoreSelection++; + if (value === null) { + selModel.deselectAll(); + } else if (Ext.isDate(value)) { + + data = picker.store.data.items; + dLen = data.length; + + for (d = 0; d < dLen; d++) { + rec = data[d]; + + if (Ext.Date.isEqual(rec.get('date'), value)) { + toSelect = rec; + break; + } + } + + selModel.select(toSelect); + } + me.ignoreSelection--; + } + }, + + postBlur: function() { + var me = this, + val = me.getValue(); + + me.callParent(arguments); + + + if (me.wasValid && val) { + me.setRawValue(me.formatDate(val)); + } + }, + + setValue: function() { + + + this.getPicker(); + + return this.callParent(arguments); + }, + + getValue: function() { + return this.parseDate(this.callParent(arguments)); + } +}); + + +Ext.define('Ext.grid.CellEditor', { + extend: Ext.Editor , + constructor: function(config) { + config = Ext.apply({}, config); + + if (config.field) { + config.field.monitorTab = false; + } + this.callParent([config]); + }, + + + onShow: function() { + var me = this, + innerCell = me.boundEl.first(), + treeNode, + textNode; + + if (innerCell) { + + + + if (me.isForTree) { + treeNode = innerCell.child('.' + Ext.baseCSSPrefix + 'tree-node-text', true); + if (treeNode) { + textNode = treeNode.firstChild; + } + } else { + textNode = innerCell.dom.lastChild; + } + + if (textNode && textNode.nodeType === 3) { + + me.cellTextNode = textNode; + + me.cellTextValue = textNode.nodeValue; + + + textNode.nodeValue = me.emptyText; + } + } + me.callParent(arguments); + }, + + + onHide: function() { + var me = this, + innerCell = me.boundEl.first(), + node = me.cellTextNode; + + if (innerCell && node) { + + + if (node.nodeValue == me.emptyText) { + node.nodeValue = me.cellTextValue; + } + delete me.cellTextNode; + delete me.cellTextValue; + } + me.callParent(arguments); + }, + + + afterRender: function() { + var me = this, + field = me.field; + + me.callParent(arguments); + if (field.isXType('checkboxfield')) { + field.mon(field.inputEl, { + mousedown: me.onCheckBoxMouseDown, + click: me.onCheckBoxClick, + scope: me + }); + } + }, + + + onCheckBoxMouseDown: function() { + this.completeEdit = Ext.emptyFn; + }, + + + onCheckBoxClick: function() { + delete this.completeEdit; + this.field.focus(false, 10); + }, + + + realign: function(autoSize) { + var me = this, + boundEl = me.boundEl, + innerCell = boundEl.first(), + children = innerCell.dom.childNodes, + childCount = children.length, + offsets = Ext.Array.clone(me.offsets), + textSpan, width; + + + + + + + if (me.isForTree && (childCount > 1 || (childCount === 1 && children[0].nodeType !== 3))) { + + textSpan = innerCell.child('.' + Ext.baseCSSPrefix + 'tree-node-text'); + + + offsets[0] = textSpan.getOffsetsTo(innerCell)[0]; + + + + + + width = innerCell.getWidth() - offsets[0]; + + me.addCls(Ext.baseCSSPrefix + 'grid-cell-editor-on-text-node'); + } else { + width = boundEl.getWidth() - 1; + } + + if (autoSize === true) { + me.field.setWidth(width); + } + + me.alignTo(boundEl, me.alignment, offsets); + }, + + onEditorTab: function(e){ + var field = this.field; + if (field.onEditorTab) { + field.onEditorTab(e); + } + }, + + emptyText: '\u00a0', + + alignment: "tl-tl", + hideEl : false, + cls: Ext.baseCSSPrefix + 'small-editor ' + + Ext.baseCSSPrefix + 'grid-editor ' + + Ext.baseCSSPrefix + 'grid-cell-editor', + shim: false, + shadow: false +}); + + +Ext.define('Ext.grid.ColumnComponentLayout', { + extend: Ext.layout.component.Auto , + alias: 'layout.columncomponent', + + type: 'columncomponent', + + setWidthInDom: true, + + getContentHeight : function(ownerContext) { + + return this.owner.isGroupHeader ? ownerContext.getProp('contentHeight') : this.callParent(arguments); + }, + + calculateOwnerHeightFromContentHeight: function (ownerContext, contentHeight) { + var result = this.callParent(arguments); + if (this.owner.isGroupHeader) { + result += this.owner.titleEl.dom.offsetHeight; + } + return result; + }, + + getContentWidth : function(ownerContext) { + + return this.owner.isGroupHeader ? ownerContext.getProp('contentWidth') : this.callParent(arguments); + }, + + calculateOwnerWidthFromContentWidth: function (ownerContext, contentWidth) { + return contentWidth + ownerContext.getPaddingInfo().width; + } +}); + + +Ext.define('Ext.grid.ColumnLayout', { + extend: Ext.layout.container.HBox , + alias: 'layout.gridcolumn', + type : 'gridcolumn', + + reserveOffset: false, + + firstHeaderCls: Ext.baseCSSPrefix + 'column-header-first', + lastHeaderCls: Ext.baseCSSPrefix + 'column-header-last', + + initLayout: function() { + this.grid = this.owner.up('[scrollerOwner]'); + this.callParent(); + }, + + + beginLayout: function (ownerContext) { + var me = this, + owner = me.owner, + grid = me.grid, + view = grid.view, + items = me.getVisibleItems(), + len = items.length, + firstCls = me.firstHeaderCls, + lastCls = me.lastHeaderCls, + i, item; + + + + + if (grid.lockable) { + if (owner.up('tablepanel') === view.normalGrid) { + view = view.normalGrid.getView(); + } else { + view = null; + } + } + + for (i = 0; i < len; i++) { + item = items[i]; + item.removeCls([firstCls, lastCls]); + if (i === 0) { + item.addCls(firstCls); + } + + if (i === len - 1) { + item.addCls(lastCls); + } + } + + me.callParent(arguments); + + + + if (!owner.isHeader && Ext.getScrollbarSize().width && !grid.collapsed && view && + view.rendered && (ownerContext.viewTable = view.body.dom)) { + ownerContext.viewContext = ownerContext.context.getCmp(view); + } + }, + + beginLayoutCycle: function(ownerContext) { + this.callParent(arguments); + + var items = this.getVisibleItems(), + len = items.length, + i = 0, item; + + + for (; i < len; i++) { + item = items[i]; + item.el.setStyle({ + height: 'auto' + }); + item.titleEl.setStyle({ + paddingTop: '', + paddingBottom: '' + }); + } + }, + + roundFlex: function(width) { + return Math.floor(width); + }, + + calculate: function(ownerContext) { + this.callParent(arguments); + + if (ownerContext.state.parallelDone) { + ownerContext.setProp('columnWidthsDone', true); + } + + + if (ownerContext.viewContext) { + ownerContext.state.tableHeight = ownerContext.viewTable.offsetHeight; + } + }, + + completeLayout: function(ownerContext) { + var me = this, + owner = me.owner, + state = ownerContext.state; + + me.callParent(arguments); + + + + + if (!ownerContext.flexedItems.length && !state.flexesCalculated && owner.forceFit && !owner.isHeader) { + + + + if (me.convertWidthsToFlexes(ownerContext)) { + me.cacheFlexes(ownerContext); + ownerContext.invalidate({ + state: { + flexesCalculated: true + } + }); + } + } + }, + + convertWidthsToFlexes: function(ownerContext) { + var me = this, + totalWidth = 0, + calculated = me.sizeModels.calculated, + childItems, len, i, childContext, item; + + childItems = ownerContext.childItems; + len = childItems.length; + + for (i = 0; i < len; i++) { + childContext = childItems[i]; + item = childContext.target; + + + + totalWidth += childContext.props.width; + item.flex = ownerContext.childItems[i].flex = childContext.props.width; + item.width = null; + childContext.widthModel = calculated; + } + + + return totalWidth !== ownerContext.props.width; + }, + + + finalizeLayout: function(ownerContext) { + var me = this, + i = 0, + items = me.getVisibleItems(), + len = items.length, + availHeight; + + + availHeight = ownerContext.props.height; + + + if (me.owner.isGroupHeader) { + availHeight -= me.owner.titleEl.dom.offsetHeight; + } + + for (; i < len; i++) { + items[i].setPadding(ownerContext.childItems[i], availHeight); + } + }, + + + getContainerSize: function(ownerContext) { + var me = this, + result = me.callParent(arguments), + viewContext = ownerContext.viewContext, + viewHeight; + + + + if (viewContext && !viewContext.heightModel.shrinkWrap && + viewContext.target.componentLayout.ownerContext) { + viewHeight = viewContext.getProp('height'); + if (isNaN(viewHeight)) { + me.done = false; + } else if (ownerContext.state.tableHeight > viewHeight) { + result.width -= Ext.getScrollbarSize().width; + ownerContext.state.parallelDone = false; + viewContext.invalidate(); + } + } + + + + + return result; + }, + + + + publishInnerCtSize: function(ownerContext) { + var me = this, + size = ownerContext.state.boxPlan.targetSize, + cw = ownerContext.peek('contentWidth'), + view; + + + me.owner.tooNarrow = ownerContext.state.boxPlan.tooNarrow; + + + if ((cw != null) && !me.owner.isHeader) { + size.width = cw; + + + view = me.owner.ownerCt.view; + if (view.scrollFlags.y) { + size.width += Ext.getScrollbarSize().width; + } + } + + return me.callParent(arguments); + } +}); + + +Ext.define('Ext.layout.container.Fit', { + + + extend: Ext.layout.container.Container , + alternateClassName: 'Ext.layout.FitLayout', + + alias: 'layout.fit', + + + + itemCls: Ext.baseCSSPrefix + 'fit-item', + targetCls: Ext.baseCSSPrefix + 'layout-fit', + type: 'fit', + + + defaultMargins: { + top: 0, + right: 0, + bottom: 0, + left: 0 + }, + + manageMargins: true, + + sizePolicies: { + 0: { readsWidth: 1, readsHeight: 1, setsWidth: 0, setsHeight: 0 }, + 1: { readsWidth: 0, readsHeight: 1, setsWidth: 1, setsHeight: 0 }, + 2: { readsWidth: 1, readsHeight: 0, setsWidth: 0, setsHeight: 1 }, + 3: { readsWidth: 0, readsHeight: 0, setsWidth: 1, setsHeight: 1 } + }, + + getItemSizePolicy: function (item, ownerSizeModel) { + + var sizeModel = ownerSizeModel || this.owner.getSizeModel(), + mode = (sizeModel.width.shrinkWrap ? 0 : 1) | + (sizeModel.height.shrinkWrap ? 0 : 2); + + return this.sizePolicies[mode]; + }, + + beginLayoutCycle: function (ownerContext, firstCycle) { + var me = this, + + resetHeight = me.lastHeightModel && me.lastHeightModel.calculated, + resetWidth = me.lastWidthModel && me.lastWidthModel.calculated, + resetSizes = resetWidth || resetHeight, + maxChildMinHeight = 0, maxChildMinWidth = 0, + c, childItems, i, item, length, margins, minHeight, minWidth, style, undef; + + me.callParent(arguments); + + + + + + if (resetSizes && ownerContext.targetContext.el.dom.tagName.toUpperCase() != 'TD') { + resetSizes = resetWidth = resetHeight = false; + } + + childItems = ownerContext.childItems; + length = childItems.length; + + for (i = 0; i < length; ++i) { + item = childItems[i]; + + + + + if (firstCycle) { + c = item.target; + minHeight = c.minHeight; + minWidth = c.minWidth; + + if (minWidth || minHeight) { + margins = item.marginInfo || item.getMarginInfo(); + + + minHeight += margins.height; + minWidth += margins.height; + + + + if (maxChildMinHeight < minHeight) { + maxChildMinHeight = minHeight; + } + if (maxChildMinWidth < minWidth) { + maxChildMinWidth = minWidth; + } + } + } + + if (resetSizes) { + style = item.el.dom.style; + + if (resetHeight) { + style.height = ''; + } + if (resetWidth) { + style.width = ''; + } + } + } + + if (firstCycle) { + ownerContext.maxChildMinHeight = maxChildMinHeight; + ownerContext.maxChildMinWidth = maxChildMinWidth; + } + + + + + c = ownerContext.target; + ownerContext.overflowX = (!ownerContext.widthModel.shrinkWrap && + ownerContext.maxChildMinWidth && + c.scrollFlags.x) || undef; + + ownerContext.overflowY = (!ownerContext.heightModel.shrinkWrap && + ownerContext.maxChildMinHeight && + c.scrollFlags.y) || undef; + }, + + calculate : function (ownerContext) { + var me = this, + childItems = ownerContext.childItems, + length = childItems.length, + containerSize = me.getContainerSize(ownerContext), + info = { + length: length, + ownerContext: ownerContext, + targetSize: containerSize + }, + shrinkWrapWidth = ownerContext.widthModel.shrinkWrap, + shrinkWrapHeight = ownerContext.heightModel.shrinkWrap, + overflowX = ownerContext.overflowX, + overflowY = ownerContext.overflowY, + scrollbars, scrollbarSize, padding, i, contentWidth, contentHeight; + + if (overflowX || overflowY) { + + + + scrollbars = me.getScrollbarsNeeded( + overflowX && containerSize.width, overflowY && containerSize.height, + ownerContext.maxChildMinWidth, ownerContext.maxChildMinHeight); + + if (scrollbars) { + scrollbarSize = Ext.getScrollbarSize(); + if (scrollbars & 1) { + containerSize.height -= scrollbarSize.height; + } + if (scrollbars & 2) { + containerSize.width -= scrollbarSize.width; + } + } + } + + + for (i = 0; i < length; ++i) { + info.index = i; + me.fitItem(childItems[i], info); + } + + if (shrinkWrapHeight || shrinkWrapWidth) { + padding = ownerContext.targetContext.getPaddingInfo(); + + if (shrinkWrapWidth) { + if (overflowY && !containerSize.gotHeight) { + + + + me.done = false; + } else { + contentWidth = info.contentWidth + padding.width; + + + + if (scrollbars & 2) { + contentWidth += scrollbarSize.width; + } + if (!ownerContext.setContentWidth(contentWidth)) { + me.done = false; + } + } + } + + if (shrinkWrapHeight) { + if (overflowX && !containerSize.gotWidth) { + + + + me.done = false; + } else { + contentHeight = info.contentHeight + padding.height; + + + + if (scrollbars & 1) { + contentHeight += scrollbarSize.height; + } + if (!ownerContext.setContentHeight(contentHeight)) { + me.done = false; + } + } + } + } + }, + + fitItem: function (itemContext, info) { + var me = this; + + if (itemContext.invalid) { + me.done = false; + return; + } + + info.margins = itemContext.getMarginInfo(); + info.needed = info.got = 0; + + me.fitItemWidth(itemContext, info); + me.fitItemHeight(itemContext, info); + + + if (info.got != info.needed) { + me.done = false; + } + }, + + fitItemWidth: function (itemContext, info) { + var contentWidth, width; + + if (info.ownerContext.widthModel.shrinkWrap) { + + width = itemContext.getProp('width') + info.margins.width; + + + contentWidth = info.contentWidth; + if (contentWidth === undefined) { + info.contentWidth = width; + } else { + info.contentWidth = Math.max(contentWidth, width); + } + } else if (itemContext.widthModel.calculated) { + ++info.needed; + if (info.targetSize.gotWidth) { + ++info.got; + this.setItemWidth(itemContext, info); + } + } + + this.positionItemX(itemContext, info); + }, + + fitItemHeight: function (itemContext, info) { + var contentHeight, height; + if (info.ownerContext.heightModel.shrinkWrap) { + + height = itemContext.getProp('height') + info.margins.height; + + + contentHeight = info.contentHeight; + if (contentHeight === undefined) { + info.contentHeight = height; + } else { + info.contentHeight = Math.max(contentHeight, height); + } + } else if (itemContext.heightModel.calculated) { + ++info.needed; + if (info.targetSize.gotHeight) { + ++info.got; + this.setItemHeight(itemContext, info); + } + } + + this.positionItemY(itemContext, info); + }, + + positionItemX: function (itemContext, info) { + var margins = info.margins; + + + + if (info.index || margins.left) { + itemContext.setProp('x', margins.left); + } + + if (margins.width) { + + itemContext.setProp('margin-right', margins.width); + } + }, + + positionItemY: function (itemContext, info) { + var margins = info.margins; + + if (info.index || margins.top) { + itemContext.setProp('y', margins.top); + } + + if (margins.height) { + + itemContext.setProp('margin-bottom', margins.height); + } + }, + + setItemHeight: function (itemContext, info) { + itemContext.setHeight(info.targetSize.height - info.margins.height); + }, + + setItemWidth: function (itemContext, info) { + itemContext.setWidth(info.targetSize.width - info.margins.width); + } +}); + + +Ext.define('Ext.panel.Table', { + extend: Ext.panel.Panel , + + alias: 'widget.tablepanel', + + + + + + + + + + + extraBaseCls: Ext.baseCSSPrefix + 'grid', + extraBodyCls: Ext.baseCSSPrefix + 'grid-body', + + layout: 'fit', + + hasView: false, + + + + viewType: null, + + + + + + + selType: 'rowmodel', + + + + + + + + + + + scroll: true, + + + + + + + + + + + + + + deferRowRender: true, + + + sortableColumns: true, + + + enableLocking: false, + + + + scrollerOwner: true, + + + enableColumnMove: true, + + + sealedColumns: false, + + + enableColumnResize: true, + + + + + + + rowLines: true, + + + + + + + + + + colLinesCls: Ext.baseCSSPrefix + 'grid-with-col-lines', + rowLinesCls: Ext.baseCSSPrefix + 'grid-with-row-lines', + hiddenHeaderCtCls: Ext.baseCSSPrefix + 'grid-header-ct-hidden', + hiddenHeaderCls: Ext.baseCSSPrefix + 'grid-header-hidden', + resizeMarkerCls: Ext.baseCSSPrefix + 'grid-resize-marker', + emptyCls: Ext.baseCSSPrefix + 'grid-empty', + + initComponent: function() { + + var me = this, + headerCtCfg = me.columns || me.colModel, + view, + i, len, + + store = me.store = Ext.data.StoreManager.lookup(me.store || 'ext-empty-store'); + + if (me.columnLines) { + me.addCls(me.colLinesCls); + } + + if (me.rowLines) { + me.addCls(me.rowLinesCls); + } + + + + + if (headerCtCfg instanceof Ext.grid.header.Container) { + me.headerCt = headerCtCfg; + me.headerCt.isRootHeader = true; + me.columns = me.headerCt.items.items; + } else { + if (Ext.isArray(headerCtCfg)) { + headerCtCfg = { + items: headerCtCfg + }; + } + Ext.apply(headerCtCfg, { + forceFit: me.forceFit, + sortable: me.sortableColumns, + enableColumnMove: me.enableColumnMove, + enableColumnResize: me.enableColumnResize, + sealed: me.sealedColumns, + isRootHeader: true + }); + + if (Ext.isDefined(me.enableColumnHide)) { + headerCtCfg.enableColumnHide = me.enableColumnHide; + } + + me.columns = headerCtCfg.items; + + + + if (me.enableLocking || me.hasLockedColumns(me.columns)) { + me.self.mixin('lockable', Ext.grid.locking.Lockable); + me.injectLockable(); + } + } + + me.scrollTask = new Ext.util.DelayedTask(me.syncHorizontalScroll, me); + + me.addEvents( + + 'reconfigure', + + 'viewready' + ); + + me.bodyCls = me.bodyCls || ''; + me.bodyCls += (' ' + me.extraBodyCls); + + me.cls = me.cls || ''; + me.cls += (' ' + me.extraBaseCls); + + + delete me.autoScroll; + + + + if (!me.hasView) { + + + + if (!me.headerCt) { + me.headerCt = new Ext.grid.header.Container(headerCtCfg); + } + + + me.columns = me.headerCt.items.items; + + + if (store.buffered && !store.remoteSort) { + for (i = 0, len = me.columns.length; i < len; i++) { + me.columns[i].sortable = false; + } + } + + if (me.hideHeaders) { + me.headerCt.height = 0; + + me.headerCt.hiddenHeaders = true; + me.headerCt.addCls(me.hiddenHeaderCtCls); + me.addCls(me.hiddenHeaderCls); + + + if (Ext.isIEQuirks) { + me.headerCt.style = { + display: 'none' + }; + } + } + + me.relayHeaderCtEvents(me.headerCt); + me.features = me.features || []; + if (!Ext.isArray(me.features)) { + me.features = [me.features]; + } + me.dockedItems = [].concat(me.dockedItems || []); + me.dockedItems.unshift(me.headerCt); + me.viewConfig = me.viewConfig || {}; + + + + view = me.getView(); + + me.items = [view]; + me.hasView = true; + + + + if (!me.hideHeaders) { + view.on({ + scroll: { + fn: me.onHorizontalScroll, + element: 'el', + scope: me + } + }); + } + + + me.bindStore(store, true); + + me.mon(view, { + viewready: me.onViewReady, + refresh: me.onRestoreHorzScroll, + scope: me + }); + } + + + me.relayEvents(me.view, [ + + 'beforeitemmousedown', + + 'beforeitemmouseup', + + 'beforeitemmouseenter', + + 'beforeitemmouseleave', + + 'beforeitemclick', + + 'beforeitemdblclick', + + 'beforeitemcontextmenu', + + 'itemmousedown', + + 'itemmouseup', + + 'itemmouseenter', + + 'itemmouseleave', + + 'itemclick', + + 'itemdblclick', + + 'itemcontextmenu', + + 'beforecellclick', + + 'cellclick', + + 'beforecelldblclick', + + 'celldblclick', + + 'beforecellcontextmenu', + + 'cellcontextmenu', + + 'beforecellmousedown', + + 'cellmousedown', + + 'beforecellmouseup', + + 'cellmouseup', + + 'beforecellkeydown', + + 'cellkeydown', + + 'beforecontainermousedown', + + 'beforecontainermouseup', + + 'beforecontainermouseover', + + 'beforecontainermouseout', + + 'beforecontainerclick', + + 'beforecontainerdblclick', + + 'beforecontainercontextmenu', + + 'containermouseup', + + 'containermouseover', + + 'containermouseout', + + 'containerclick', + + 'containerdblclick', + + 'containercontextmenu', + + 'selectionchange', + + 'beforeselect', + + 'select', + + 'beforedeselect', + + 'deselect' + ]); + + me.callParent(arguments); + me.addStateEvents(['columnresize', 'columnmove', 'columnhide', 'columnshow', 'sortchange', 'filterchange']); + + + if (!me.lockable && me.headerCt) { + me.headerCt.on('afterlayout', me.onRestoreHorzScroll, me); + } + }, + + + hasLockedColumns: function(columns) { + var i, + len = columns.length, + column; + + for (i = 0; i < len; i++) { + column = columns[i]; + if (!column.processed && column.locked) { + return true; + } + } + }, + + relayHeaderCtEvents: function (headerCt) { + this.relayEvents(headerCt, [ + + 'columnresize', + + 'columnmove', + + 'columnhide', + + 'columnshow', + + 'columnschanged', + + 'sortchange', + + 'headerclick', + + 'headercontextmenu', + + 'headertriggerclick' + ]); + }, + + getState: function(){ + var me = this, + state = me.callParent(), + storeState = me.store.getState(); + + state = me.addPropertyToState(state, 'columns', me.headerCt.getColumnsState()); + + if (storeState) { + state.storeState = storeState; + } + return state; + }, + + applyState: function(state) { + var me = this, + sorter = state.sort, + storeState = state.storeState, + store = me.store, + columns = state.columns; + + delete state.columns; + + + + me.callParent(arguments); + + if (columns) { + me.headerCt.applyColumnsState(columns); + } + + + if (sorter) { + if (store.remoteSort) { + + store.sort({ + property: sorter.property, + direction: sorter.direction, + root: sorter.root + }, null, false); + } else { + store.sort(sorter.property, sorter.direction); + } + } + + else if (storeState) { + store.applyState(storeState); + } + }, + + + getStore: function(){ + return this.store; + }, + + + getView: function() { + var me = this, + sm; + + if (!me.view) { + sm = me.getSelectionModel(); + + + Ext.widget(Ext.apply({ + + + grid: me, + deferInitialRefresh: me.deferRowRender !== false, + trackOver: me.trackMouseOver !== false, + scroll: me.scroll, + xtype: me.viewType, + store: me.store, + headerCt: me.headerCt, + selModel: sm, + features: me.features, + panel: me, + emptyText: me.emptyText || '' + }, me.viewConfig)); + + + + + + if (me.view.emptyText) { + me.view.emptyText = '
    ' + me.view.emptyText + '
    '; + } + + + me.view.getComponentLayout().headerCt = me.headerCt; + + me.mon(me.view, { + uievent: me.processEvent, + scope: me + }); + sm.view = me.view; + me.headerCt.view = me.view; + } + return me.view; + }, + + + setAutoScroll: Ext.emptyFn, + + + processEvent: function(type, view, cell, recordIndex, cellIndex, e) { + var me = this, + header; + + if (cellIndex !== -1) { + header = me.headerCt.getGridColumns()[cellIndex]; + return header.processEvent.apply(header, arguments); + } + }, + + + determineScrollbars: function () { + }, + + + invalidateScroller: function () { + }, + + scrollByDeltaY: function(yDelta, animate) { + this.getView().scrollBy(0, yDelta, animate); + }, + + scrollByDeltaX: function(xDelta, animate) { + this.getView().scrollBy(xDelta, 0, animate); + }, + + afterCollapse: function() { + var me = this; + me.saveScrollPos(); + me.saveScrollPos(); + me.callParent(arguments); + }, + + afterExpand: function() { + var me = this; + me.callParent(arguments); + me.restoreScrollPos(); + me.restoreScrollPos(); + }, + + saveScrollPos: Ext.emptyFn, + + restoreScrollPos: Ext.emptyFn, + + onHeaderResize: function(){ + this.delayScroll(); + }, + + + onHeaderMove: function(headerCt, header, colsToMove, fromIdx, toIdx) { + var me = this; + + + + if (me.optimizedColumnMove === false) { + me.view.refresh(); + } + + + else { + me.view.moveColumn(fromIdx, toIdx, colsToMove); + } + me.delayScroll(); + }, + + + onHeaderHide: function(headerCt, header) { + this.delayScroll(); + }, + + onHeaderShow: function(headerCt, header) { + this.delayScroll(); + }, + + delayScroll: function(){ + var target = this.getScrollTarget().el; + if (target) { + this.scrollTask.delay(10, null, null, [target.dom.scrollLeft]); + } + }, + + + onViewReady: function() { + this.fireEvent('viewready', this); + }, + + + onRestoreHorzScroll: function() { + var left = this.scrollLeftPos; + if (left) { + + this.syncHorizontalScroll(left, true); + } + }, + + getScrollerOwner: function() { + var rootCmp = this; + if (!this.scrollerOwner) { + rootCmp = this.up('[scrollerOwner]'); + } + return rootCmp; + }, + + + getLhsMarker: function() { + var me = this; + return me.lhsMarker || (me.lhsMarker = Ext.DomHelper.append(me.el, { + cls: me.resizeMarkerCls + }, true)); + }, + + + getRhsMarker: function() { + var me = this; + + return me.rhsMarker || (me.rhsMarker = Ext.DomHelper.append(me.el, { + cls: me.resizeMarkerCls + }, true)); + }, + + + getSelectionModel: function(){ + var me = this, + selModel = me.selModel, + applyMode, mode, type; + + if (!selModel) { + selModel = {}; + + applyMode = true; + } + + if (!selModel.events) { + + type = selModel.selType || me.selType; + applyMode = !selModel.mode; + selModel = me.selModel = Ext.create('selection.' + type, selModel); + } + + if (me.simpleSelect) { + mode = 'SIMPLE'; + } else if (me.multiSelect) { + mode = 'MULTI'; + } + + Ext.applyIf(selModel, { + allowDeselect: me.allowDeselect + }); + + if (mode && applyMode) { + selModel.setSelectionMode(mode); + } + + if (!selModel.hasRelaySetup) { + me.relayEvents(selModel, [ + 'selectionchange', 'beforeselect', 'beforedeselect', 'select', 'deselect' + ]); + selModel.hasRelaySetup = true; + } + + + + if (me.disableSelection) { + selModel.locked = true; + } + return selModel; + }, + + getScrollTarget: function(){ + var owner = this.getScrollerOwner(), + items = owner.query('tableview'); + + return items[1] || items[0]; + }, + + onHorizontalScroll: function(event, target) { + this.syncHorizontalScroll(target.scrollLeft); + }, + + syncHorizontalScroll: function(left, setBody) { + var me = this, + scrollTarget; + + setBody = setBody === true; + + + if (me.rendered && (setBody || left !== me.scrollLeftPos)) { + + + if (setBody) { + scrollTarget = me.getScrollTarget(); + scrollTarget.el.dom.scrollLeft = left; + } + me.headerCt.el.dom.scrollLeft = left; + me.scrollLeftPos = left; + } + }, + + + onStoreLoad: Ext.emptyFn, + + getEditorParent: function() { + return this.body; + }, + + bindStore: function(store, initial) { + var me = this, + view = me.getView(), + bufferedStore = store && store.buffered, + bufferedRenderer; + + + me.store = store; + + if (view.store !== store) { + if (initial) { + + view.bindStore(store, false, 'dataSource'); + } else { + + + view.bindStore(store, false); + } + } + + me.mon(store, { + load: me.onStoreLoad, + scope: me + }); + me.storeRelayers = me.relayEvents(store, [ + + 'filterchange' + ]); + + + + bufferedRenderer = me.findPlugin('bufferedrenderer'); + if (bufferedRenderer) { + me.verticalScroller = bufferedRenderer; + + if (bufferedRenderer.store) { + bufferedRenderer.bindStore(store); + } + } else if (bufferedStore) { + me.verticalScroller = bufferedRenderer = me.addPlugin(Ext.apply({ + ptype: 'bufferedrenderer' + }, me.initialConfig.verticalScroller)); + } + + + if (bufferedRenderer) { + me.invalidateScrollerOnRefresh = false; + } + + if (me.invalidateScrollerOnRefresh !== undefined) { + view.preserveScrollOnRefresh = !me.invalidateScrollerOnRefresh; + } + }, + + unbindStore: function() { + var me = this, + store = me.store; + + if (store) { + me.store = null; + me.mun(store, { + load: me.onStoreLoad, + scope: me + }); + Ext.destroy(me.storeRelayers); + } + }, + + + reconfigure: function(store, columns) { + var me = this, + view = me.getView(), + originalDeferinitialRefresh, + oldStore = me.store, + headerCt = me.headerCt, + oldColumns = headerCt ? headerCt.items.getRange() : me.columns; + + + if (columns) { + columns = Ext.Array.slice(columns); + + + delete view.tpl; + } + + me.fireEvent('beforereconfigure', me, store, columns, oldStore, oldColumns); + if (me.lockable) { + me.reconfigureLockable(store, columns); + } else { + Ext.suspendLayouts(); + if (columns) { + + delete me.scrollLeftPos; + headerCt.removeAll(); + headerCt.add(columns); + } + if (store && store !== oldStore) { + + if (me.store) { + me.unbindStore(); + } + store = Ext.StoreManager.lookup(store); + + + originalDeferinitialRefresh = view.deferInitialRefresh; + view.deferInitialRefresh = false; + me.bindStore(store); + view.deferInitialRefresh = originalDeferinitialRefresh; + } else { + me.getView().refresh(); + } + headerCt.setSortState(); + Ext.resumeLayouts(true); + } + me.fireEvent('reconfigure', me, store, columns, oldStore, oldColumns); + }, + + beforeDestroy: function(){ + var task = this.scrollTask; + if (task) { + task.cancel(); + this.scrollTask = null; + } + this.callParent(); + }, + + onDestroy: function(){ + if (this.lockable) { + this.destroyLockable(); + } + this.callParent(); + + } +}); + + +Ext.define('Ext.util.CSS', function() { + var CSS, + rules = null, + doc = document, + camelRe = /(-[a-z])/gi, + camelFn = function(m, a){ return a.charAt(1).toUpperCase(); }; + + return { + + singleton: true, + + rules: rules, + + initialized: false, + + constructor: function() { + + CSS = this; + }, + + + createStyleSheet : function(cssText, id) { + var ss, + head = doc.getElementsByTagName("head")[0], + styleEl = doc.createElement("style"); + + styleEl.setAttribute("type", "text/css"); + if (id) { + styleEl.setAttribute("id", id); + } + + if (Ext.isIE) { + head.appendChild(styleEl); + ss = styleEl.styleSheet; + ss.cssText = cssText; + } else { + try{ + styleEl.appendChild(doc.createTextNode(cssText)); + } catch(e) { + styleEl.cssText = cssText; + } + head.appendChild(styleEl); + ss = styleEl.styleSheet ? styleEl.styleSheet : (styleEl.sheet || doc.styleSheets[doc.styleSheets.length-1]); + } + CSS.cacheStyleSheet(ss); + return ss; + }, + + + removeStyleSheet : function(id) { + var existing = doc.getElementById(id); + if (existing) { + existing.parentNode.removeChild(existing); + } + }, + + + swapStyleSheet : function(id, url) { + var ss; + CSS.removeStyleSheet(id); + ss = doc.createElement("link"); + ss.setAttribute("rel", "stylesheet"); + ss.setAttribute("type", "text/css"); + ss.setAttribute("id", id); + ss.setAttribute("href", url); + doc.getElementsByTagName("head")[0].appendChild(ss); + }, + + + refreshCache : function() { + return CSS.getRules(true); + }, + + + cacheStyleSheet : function(ss) { + if (!rules) { + rules = CSS.rules = {}; + } + try { + var ssRules = ss.cssRules || ss.rules, + i = ssRules.length - 1, + imports = ss.imports, + len = imports ? imports.length : 0, + rule, j; + + + for (j = 0; j < len; ++j) { + CSS.cacheStyleSheet(imports[j]); + } + + for (; i >= 0; --i) { + rule = ssRules[i]; + + if (rule.styleSheet) { + CSS.cacheStyleSheet(rule.styleSheet); + } + CSS.cacheRule(rule, ss); + } + } catch(e) {} + }, + + cacheRule: function(cssRule, styleSheet) { + + if (cssRule.styleSheet) { + return CSS.cacheStyleSheet(cssRule.styleSheet); + } + + var selectorText = cssRule.selectorText, + selectorCount, j; + + if (selectorText) { + + + selectorText = selectorText.split(','); + selectorCount = selectorText.length; + for (j = 0; j < selectorCount; j++) { + + + rules[Ext.String.trim(selectorText[j]).toLowerCase()] = { + parentStyleSheet: styleSheet, + cssRule: cssRule + }; + }; + } + }, + + + getRules : function(refreshCache) { + var result = {}, + selector; + + if (rules === null || refreshCache) { + CSS.refreshCache(); + } + for (selector in rules) { + result[selector] = rules[selector].cssRule; + } + return result; + }, + + refreshCache: function() { + var ds = doc.styleSheets, + i = 0, + len = ds.length; + + rules = CSS.rules = {} + for (; i < len; i++) { + try { + if (!ds[i].disabled) { + CSS.cacheStyleSheet(ds[i]); + } + } catch(e) {} + } + }, + + + getRule: function(selector, refreshCache, rawCache) { + var i, result; + + if (!rules || refreshCache) { + CSS.refreshCache(); + } + if (!Ext.isArray(selector)) { + result = rules[selector.toLowerCase()] + if (result && !rawCache) { + result = result.cssRule; + } + return result || null; + } + for (i = 0; i < selector.length; i++) { + if (rules[selector[i]]) { + return rawCache ? rules[selector[i].toLowerCase()] : rules[selector[i].toLowerCase()].cssRule; + } + } + return null; + }, + + + createRule: function(styleSheet, selector, cssText) { + var result, + ruleSet = styleSheet.cssRules || styleSheet.rules, + index = ruleSet.length; + + if (styleSheet.insertRule) { + styleSheet.insertRule(selector + '{' + cssText + '}', index); + } else { + styleSheet.addRule(selector, cssText||' '); + } + CSS.cacheRule(result = ruleSet[index], styleSheet); + return result; + }, + + + updateRule : function(selector, property, value) { + var rule, i, styles; + if (!Ext.isArray(selector)) { + rule = CSS.getRule(selector); + if (rule) { + + if (arguments.length == 2) { + styles = Ext.Element.parseStyles(property); + for (property in styles) { + rule.style[property.replace(camelRe, camelFn)] = styles[property]; + } + } else { + rule.style[property.replace(camelRe, camelFn)] = value; + } + return true; + } + } else { + for (i = 0; i < selector.length; i++) { + if (CSS.updateRule(selector[i], property, value)) { + return true; + } + } + } + return false; + }, + + deleteRule: function(selector) { + var rule = CSS.getRule(selector, false, true), + styleSheet, index; + + if (rule) { + styleSheet = rule.parentStyleSheet; + index = Ext.Array.indexOf(styleSheet.cssRules || styleSheet.rules, rule.cssRule); + if (styleSheet.deleteRule) { + styleSheet.deleteRule(index); + } else { + styleSheet.removeRule(index); + } + delete rules[selector]; + } + } + }; +}); + + +Ext.define('Ext.view.TableLayout', { + extend: Ext.layout.component.Auto , + + + alias: ['layout.tableview'], + type: 'tableview', + + beginLayout: function(ownerContext) { + var me = this, + otherSide = me.owner.lockingPartner, + owner = me.owner; + + me.callParent(arguments); + + + if (otherSide) { + me.lockedGrid = me.owner.up('[lockable]'); + me.lockedGrid.needsRowHeightSync = true; + if (!ownerContext.lockingPartner) { + ownerContext.lockingPartner = ownerContext.context.getItem(otherSide, otherSide.el); + if (ownerContext.lockingPartner && !ownerContext.lockingPartner.lockingPartner) { + ownerContext.lockingPartner.lockingPartner = ownerContext; + } + } + } + + + ownerContext.headerContext = ownerContext.context.getCmp(me.headerCt); + + + if (me.owner.body.dom) { + ownerContext.bodyContext = ownerContext.getEl(me.owner.body); + } + if (Ext.isWebKit) { + owner.el.select(owner.getBodySelector()).setStyle('table-layout', 'auto'); + } + }, + + calculate: function(ownerContext) { + var me = this, + lockingPartner = me.lockingPartner, + contentHeight; + + + + if (ownerContext.headerContext.hasProp('columnWidthsDone')) { + me.setColumnWidths(ownerContext); + ownerContext.state.columnWidthsSynced = true; + if (ownerContext.bodyContext) { + ownerContext.bodyContext.setHeight(contentHeight = ownerContext.bodyContext.el.dom.offsetHeight, false); + ownerContext.setProp('contentHeight', contentHeight); + } + + + + if (lockingPartner && !lockingPartner.state.columnWidthsSynced) { + me.done = false; + } else { + me.callParent(arguments); + } + + } else { + me.done = false; + } + }, + + measureContentHeight: function(ownerContext) { + var lockingPartner = ownerContext.lockingPartner; + + + + if (!ownerContext.bodyContext || (ownerContext.state.columnWidthsSynced && (!lockingPartner || lockingPartner.state.columnWidthsSynced))) { + return this.callParent(arguments); + } + }, + + setColumnWidths: function(ownerContext) { + var me = this, + owner = me.owner, + context = ownerContext.context, + columns = me.headerCt.getGridColumns(), + column, + i = 0, len = columns.length, + tableWidth = 0, + colWidth, + isContentBox = !Ext.isBorderBox; + + + if (context) { + context.currentLayout = me; + } + + + for (i = 0; i < len; i++) { + column = columns[i]; + + if (column.hidden || column.hiddenAncestor) { + colWidth = 0; + } else { + colWidth = context.getCmp(column).props.width; + tableWidth += colWidth; + + + if (isContentBox) { + colWidth -= context.getCmp(column).borderInfo.width; + } + } + + + + + + + + + owner.body.select(owner.getColumnSizerSelector(column)).setWidth(colWidth); + } + + owner.el.select(owner.getBodySelector()).setWidth(tableWidth); + }, + + finishedLayout: function() { + var me = this, + owner = me.owner; + + me.callParent(arguments); + + if (Ext.isWebKit) { + owner.el.select(owner.getBodySelector()).setStyle('table-layout', ''); + } + + + if (owner.refreshCounter && me.lockedGrid && me.lockedGrid.syncRowHeight && me.lockedGrid.needsRowHeightSync) { + me.lockedGrid.syncRowHeights(); + me.lockedGrid.needsRowHeightSync = false; + } + } +}); + + +Ext.define('Ext.view.NodeCache', { + constructor: function(view) { + this.view = view; + this.clear(); + this.el = new Ext.dom.AbstractElement.Fly(); + }, + + + clear: function(removeDom) { + var me = this, + elements = this.elements, + i, el; + + if (removeDom) { + for (i in elements) { + el = elements[i]; + el.parentNode.removeChild(el); + } + } + me.elements = {}; + me.count = me.startIndex = 0; + me.endIndex = -1; + }, + + + fill: function(newElements, startIndex) { + var me = this, + elements = me.elements = {}, + i, + len = newElements.length; + + if (!startIndex) { + startIndex = 0; + } + for (i = 0; i < len; i++) { + elements[startIndex + i] = newElements[i]; + } + me.startIndex = startIndex; + me.endIndex = startIndex + len - 1; + me.count = len; + return this; + }, + + insert: function(insertPoint, nodes) { + var me = this, + elements = me.elements, + i, + nodeCount = nodes.length; + + + if (me.count) { + + + if (insertPoint < me.count) { + for (i = me.endIndex + nodeCount; i >= insertPoint + nodeCount; i--) { + elements[i] = elements[i - nodeCount]; + elements[i].setAttribute('data-recordIndex', i); + } + } + me.endIndex = me.endIndex + nodeCount; + } + + else { + me.startIndex = insertPoint; + me.endIndex = insertPoint + nodeCount - 1; + } + + + for (i = 0; i < nodeCount; i++, insertPoint++) { + elements[insertPoint] = nodes[i]; + elements[insertPoint].setAttribute('data-recordIndex', insertPoint); + } + me.count += nodeCount; + }, + + item: function(index, asDom) { + var el = this.elements[index], + result = null; + + if (el) { + result = asDom ? this.elements[index] : this.el.attach(this.elements[index]); + } + return result; + }, + + first: function(asDom) { + return this.item(this.startIndex, asDom); + }, + + last: function(asDom) { + return this.item(this.endIndex, asDom); + }, + + getCount : function() { + return this.count; + }, + + slice: function(start, end) { + var elements = this.elements, + result = [], + i; + + if (arguments.length < 2) { + end = this.endIndex; + } else { + end = Math.min(this.endIndex, end - 1); + } + for (i = start||this.startIndex; i <= end; i++) { + result.push(elements[i]); + } + return result; + }, + + + replaceElement: function(el, replacement, domReplace) { + var elements = this.elements, + index = (typeof el === 'number') ? el : this.indexOf(el); + + if (index > -1) { + replacement = Ext.getDom(replacement); + if (domReplace) { + el = elements[index]; + el.parentNode.insertBefore(replacement, el); + Ext.removeNode(el); + replacement.setAttribute('data-recordIndex', index); + } + this.elements[index] = replacement; + } + return this; + }, + + + indexOf: function(el) { + var elements = this.elements, + index; + + el = Ext.getDom(el); + for (index = this.startIndex; index <= this.endIndex; index++) { + if (elements[index] === el) { + return index; + } + } + return -1; + }, + + removeRange: function(start, end, removeDom) { + var me = this, + elements = me.elements, + el, + i, removeCount, fromPos; + + if (end === undefined) { + end = me.count; + } else { + end = Math.min(me.endIndex + 1, end + 1); + } + if (!start) { + start = 0; + } + removeCount = end - start; + for (i = start, fromPos = end; i < me.endIndex; i++, fromPos++) { + + if (removeDom && i < end) { + Ext.removeNode(elements[i]); + } + + if (fromPos <= me.endIndex) { + el = elements[i] = elements[fromPos]; + el.setAttribute('data-recordIndex', i); + } + + else { + delete elements[i]; + } + } + me.count -= removeCount; + me.endIndex -= removeCount; + }, + + + removeElement: function(keys, removeDom) { + var me = this, + elements = me.elements, + el, + deleteCount, + keyIndex = 0, index, + fromIndex; + + + + if (Ext.isArray(keys)) { + deleteCount = keys.length; + for (keyIndex = 0; keyIndex < deleteCount; keyIndex++) { + if (typeof keys[keyIndex] !== 'number') { + keys[keyIndex] = me.indexOf(keys[keyIndex]); + } + } + Ext.Array.sort(keys); + } else { + deleteCount = 1; + keys = [keys]; + } + + + + for (index = fromIndex = keys[0], keyIndex = 0; index <= me.endIndex; index++, fromIndex++) { + + + + + if (keyIndex < deleteCount && index === keys[keyIndex]) { + fromIndex++; + keyIndex++; + if (removeDom) { + Ext.removeNode(elements[index]); + } + } + + + if (fromIndex <= me.endIndex && fromIndex >= me.startIndex) { + el = elements[index] = elements[fromIndex]; + el.setAttribute('data-recordIndex', index); + } else { + delete elements[index]; + } + } + me.endIndex -= deleteCount; + me.count -= deleteCount; + }, + + + scroll: function(newRecords, direction, removeCount) { + var me = this, + elements = me.elements, + recCount = newRecords.length, + i, el, removeEnd, + newNodes, + nodeContainer = me.view.getNodeContainer(), + frag = document.createDocumentFragment(); + + + if (direction == -1) { + for (i = (me.endIndex - removeCount) + 1; i <= me.endIndex; i++) { + el = elements[i]; + delete elements[i]; + el.parentNode.removeChild(el); + } + me.endIndex -= removeCount; + + + newNodes = me.view.bufferRender(newRecords, me.startIndex -= recCount); + for (i = 0; i < recCount; i++) { + elements[me.startIndex + i] = newNodes[i]; + frag.appendChild(newNodes[i]); + } + nodeContainer.insertBefore(frag, nodeContainer.firstChild); + } + + + else { + removeEnd = me.startIndex + removeCount; + for (i = me.startIndex; i < removeEnd; i++) { + el = elements[i]; + delete elements[i]; + el.parentNode.removeChild(el); + } + me.startIndex = i; + + + newNodes = me.view.bufferRender(newRecords, me.endIndex + 1); + for (i = 0; i < recCount; i++) { + elements[me.endIndex += 1] = newNodes[i]; + frag.appendChild(newNodes[i]); + } + nodeContainer.appendChild(frag); + } + + me.count = me.endIndex - me.startIndex + 1; + } +}); + + +Ext.define('Ext.view.Table', { + extend: Ext.view.View , + alias: 'widget.tableview', + + + + + + + + componentLayout: 'tableview', + + baseCls: Ext.baseCSSPrefix + 'grid-view', + + + firstCls: Ext.baseCSSPrefix + 'grid-cell-first', + + + lastCls: Ext.baseCSSPrefix + 'grid-cell-last', + + headerRowSelector: 'tr.' + Ext.baseCSSPrefix + 'grid-header-row', + + selectedItemCls: Ext.baseCSSPrefix + 'grid-row-selected', + selectedCellCls: Ext.baseCSSPrefix + 'grid-cell-selected', + focusedItemCls: Ext.baseCSSPrefix + 'grid-row-focused', + overItemCls: Ext.baseCSSPrefix + 'grid-row-over', + altRowCls: Ext.baseCSSPrefix + 'grid-row-alt', + dirtyCls: Ext.baseCSSPrefix + 'grid-dirty-cell', + rowClsRe: new RegExp('(?:^|\\s*)' + Ext.baseCSSPrefix + 'grid-row-(first|last|alt)(?:\\s+|$)', 'g'), + cellRe: new RegExp(Ext.baseCSSPrefix + 'grid-cell-([^\\s]+) ', ''), + positionBody: true, + + + trackOver: true, + + + getRowClass: null, + + + stripeRows: true, + + + markDirty : true, + + + + + tpl: '{%values.view.tableTpl.applyOut(values, out)%}', + + tableTpl: [ + '', + '{[values.view.renderColumnSizer(out)]}', + '{[values.view.renderTHead(values, out)]}', + '{[values.view.renderTFoot(values, out)]}', + '', + '{%', + 'values.view.renderRows(values.rows, values.viewStartIndex, out);', + '%}', + '', + '
    ', + { + priority: 0 + } + ], + + rowTpl: [ + '{%', + 'var dataRowCls = values.recordIndex === -1 ? "" : " ' + Ext.baseCSSPrefix + 'grid-data-row";', + '%}', + '', + '' + + '{%', + 'parent.view.renderCell(values, parent.record, parent.recordIndex, xindex - 1, out, parent)', + '%}', + '', + '', + { + priority: 0 + } + ], + + cellTpl: [ + '', + '
    {style}">{value}
    ', + '', { + priority: 0 + } + ], + + + refreshSelmodelOnRefresh: false, + + tableValues: {}, + + + + rowValues: { + itemClasses: [], + rowClasses: [] + }, + cellValues: { + classes: [ + Ext.baseCSSPrefix + 'grid-cell ' + Ext.baseCSSPrefix + 'grid-td' + ] + }, + + + renderBuffer: document.createElement('div'), + + constructor: function(config) { + + if (config.grid.isTree) { + config.baseCls = Ext.baseCSSPrefix + 'tree-view'; + } + this.callParent([config]); + }, + + initComponent: function() { + var me = this, + scroll = me.scroll; + + this.addEvents( + + 'beforecellclick', + + 'cellclick', + + 'beforecelldblclick', + + 'celldblclick', + + 'beforecellcontextmenu', + + 'cellcontextmenu', + + 'beforecellmousedown', + + 'cellmousedown', + + 'beforecellmouseup', + + 'cellmouseup', + + 'beforecellkeydown', + + 'cellkeydown' + ); + + + me.body = new Ext.dom.Element.Fly(); + me.body.id = me.id + 'gridBody'; + + + + me.autoScroll = undefined; + + + + if (!me.trackOver) { + me.overItemCls = null; + } + + + if (scroll === true || scroll === 'both') { + me.autoScroll = true; + } else if (scroll === 'horizontal') { + me.overflowX = 'auto'; + } else if (scroll === 'vertical') { + me.overflowY = 'auto'; + } + me.selModel.view = me; + me.headerCt.view = me; + + + + me.grid.view = me; + me.initFeatures(me.grid); + delete me.grid; + + + me.tpl = me.getTpl('tpl'); + me.itemSelector = me.getItemSelector(); + me.all = new Ext.view.NodeCache(me); + me.callParent(); + }, + + + moveColumn: function(fromIdx, toIdx, colsToMove) { + var me = this, + fragment = (colsToMove > 1) ? document.createDocumentFragment() : undefined, + destinationCellIdx = toIdx, + colCount = me.getGridColumns().length, + lastIndex = colCount - 1, + doFirstLastClasses = (me.firstCls || me.lastCls) && (toIdx === 0 || toIdx == colCount || fromIdx === 0 || fromIdx == lastIndex), + i, + j, + rows, len, tr, cells, + tables; + + + + if (me.rendered && toIdx !== fromIdx) { + + + rows = me.el.query(me.getDataRowSelector()); + + if (toIdx > fromIdx && fragment) { + destinationCellIdx -= colsToMove; + } + + for (i = 0, len = rows.length; i < len; i++) { + tr = rows[i]; + cells = tr.childNodes; + + + if (doFirstLastClasses) { + + if (cells.length === 1) { + Ext.fly(cells[0]).addCls(me.firstCls); + Ext.fly(cells[0]).addCls(me.lastCls); + continue; + } + if (fromIdx === 0) { + Ext.fly(cells[0]).removeCls(me.firstCls); + Ext.fly(cells[1]).addCls(me.firstCls); + } else if (fromIdx === lastIndex) { + Ext.fly(cells[lastIndex]).removeCls(me.lastCls); + Ext.fly(cells[lastIndex - 1]).addCls(me.lastCls); + } + if (toIdx === 0) { + Ext.fly(cells[0]).removeCls(me.firstCls); + Ext.fly(cells[fromIdx]).addCls(me.firstCls); + } else if (toIdx === colCount) { + Ext.fly(cells[lastIndex]).removeCls(me.lastCls); + Ext.fly(cells[fromIdx]).addCls(me.lastCls); + } + } + + if (fragment) { + for (j = 0; j < colsToMove; j++) { + fragment.appendChild(cells[fromIdx]); + } + tr.insertBefore(fragment, cells[destinationCellIdx] || null); + } else { + tr.insertBefore(cells[fromIdx], cells[destinationCellIdx] || null); + } + } + + + tables = me.el.query(me.getBodySelector()); + for (i = 0, len = tables.length; i < len; i++) { + tr = tables[i]; + if (fragment) { + for (j = 0; j < colsToMove; j++) { + fragment.appendChild(tr.childNodes[fromIdx]); + } + tr.insertBefore(fragment, tr.childNodes[destinationCellIdx] || null); + } else { + tr.insertBefore(tr.childNodes[fromIdx], tr.childNodes[destinationCellIdx] || null); + } + } + } + }, + + + scrollToTop: Ext.emptyFn, + + + addElListener: function(eventName, fn, scope){ + this.mon(this, eventName, fn, scope, { + element: 'el' + }); + }, + + + getGridColumns: function() { + return this.headerCt.getGridColumns(); + }, + + + getHeaderAtIndex: function(index) { + return this.headerCt.getHeaderAtIndex(index); + }, + + + getCell: function(record, column) { + var row = this.getNode(record, true); + return Ext.fly(row).down(column.getCellSelector()); + }, + + + getFeature: function(id) { + var features = this.featuresMC; + if (features) { + return features.get(id); + } + }, + + + + findFeature: function(ftype) { + if (this.features) { + return Ext.Array.findBy(this.features, function(feature) { + if (feature.ftype === ftype) { + return true; + } + }); + } + }, + + + initFeatures: function(grid) { + var me = this, + i, + features, + feature, + len; + + me.tableTpl = Ext.XTemplate.getTpl(this, 'tableTpl'); + me.rowTpl = Ext.XTemplate.getTpl(this, 'rowTpl'); + me.cellTpl = Ext.XTemplate.getTpl(this, 'cellTpl'); + + me.featuresMC = new Ext.util.MixedCollection(); + features = me.features = me.constructFeatures(); + len = features ? features.length : 0; + for (i = 0; i < len; i++) { + feature = features[i]; + + + feature.view = me; + feature.grid = grid; + me.featuresMC.add(feature); + feature.init(grid); + } + }, + + renderTHead: function(values, out) { + var headers = values.view.headerFns, + len, i; + + if (headers) { + for (i = 0, len = headers.length; i < len; ++i) { + headers[i].call(this, values, out); + } + } + }, + + + + + + addHeaderFn: function(){ + var headers = this.headerFns; + if (!headers) { + headers = this.headerFns = []; + } + headers.push(fn); + }, + + renderTFoot: function(values, out){ + var footers = values.view.footerFns, + len, i; + + if (footers) { + for (i = 0, len = footers.length; i < len; ++i) { + footers[i].call(this, values, out); + } + } + }, + + addFooterFn: function(fn){ + var footers = this.footerFns; + if (!footers) { + footers = this.footerFns = []; + } + footers.push(fn); + }, + + addTableTpl: function(newTpl) { + return this.addTpl('tableTpl', newTpl); + }, + + addRowTpl: function(newTpl) { + return this.addTpl('rowTpl', newTpl); + }, + + addCellTpl: function(newTpl) { + return this.addTpl('cellTpl', newTpl); + }, + + addTpl: function(which, newTpl) { + var me = this, + tpl, + prevTpl; + + newTpl = Ext.Object.chain(newTpl); + + + + + + + if (!newTpl.isTemplate) { + newTpl.applyOut = me.tplApplyOut; + } + + + for (tpl = me[which]; newTpl.priority < tpl.priority; tpl = tpl.nextTpl) { + prevTpl = tpl; + } + + + if (prevTpl) { + prevTpl.nextTpl = newTpl; + } + + else { + me[which] = newTpl; + } + newTpl.nextTpl = tpl; + return newTpl; + }, + + tplApplyOut: function(values, out) { + if (this.before) { + if (this.before(values, out) === false) { + return; + } + } + this.nextTpl.applyOut(values, out); + if (this.after) { + this.after(values, out); + } + }, + + + constructFeatures: function() { + var me = this, + features = me.features, + feature, + result, + i = 0, len; + + if (features) { + result = []; + len = features.length; + for (; i < len; i++) { + feature = features[i]; + if (!feature.isFeature) { + feature = Ext.create('feature.' + feature.ftype, feature); + } + result[i] = feature; + } + } + return result; + }, + + beforeRender: function() { + var me = this; + me.callParent(); + + if (!me.enableTextSelection) { + me.protoEl.unselectable(); + } + }, + + + onViewScroll: function(e, t) { + this.callParent(arguments); + this.fireEvent('bodyscroll', e, t); + }, + + + + + createRowElement: function(record, index) { + var me = this, + div = me.renderBuffer; + + me.tpl.overwrite(div, me.collectData([record], index)); + + return Ext.fly(div).down(me.getNodeContainerSelector(), true).firstChild; + }, + + + + + bufferRender: function(records, index) { + var me = this, + div = me.renderBuffer; + + me.tpl.overwrite(div, me.collectData(records, index)); + return Ext.Array.toArray(Ext.fly(div).down(me.getNodeContainerSelector(), true).childNodes); + }, + + collectData: function(records, startIndex) { + this.rowValues.view = this; + + return { + view: this, + rows: records, + viewStartIndex: startIndex, + tableStyle: this.bufferedRenderer ? ('position:absolute;top:' + this.bufferedRenderer.bodyTop) : '' + }; + }, + + + + + collectNodes: function(targetEl) { + this.all.fill(this.getNodeContainer().childNodes, this.all.startIndex); + }, + + + + + + + + refreshSize: function() { + var me = this, + grid, + bodySelector = me.getBodySelector(); + + + + if (bodySelector) { + me.body.attach(me.el.child(bodySelector, true)); + } + + if (!me.hasLoadingHeight) { + grid = me.up('tablepanel'); + + + + Ext.suspendLayouts(); + + me.callParent(); + + + + grid.updateLayout(); + + Ext.resumeLayouts(true); + } + }, + + statics: { + getBoundView: function(node) { + return Ext.getCmp(node.getAttribute('data-boundView')); + } + }, + + getRecord: function(node) { + node = this.getNode(node); + if (node) { + var recordIndex = node.getAttribute('data-recordIndex'); + if (recordIndex) { + recordIndex = parseInt(recordIndex, 10); + if (recordIndex > -1) { + + + return this.store.data.getAt(recordIndex); + } + } + return this.dataSource.data.get(node.getAttribute('data-recordId')); + } + }, + + indexOf: function(node) { + node = this.getNode(node, false); + if (!node && node !== 0) { + return -1; + } + return this.all.indexOf(node); + }, + + indexInStore: function(node) { + node = this.getNode(node, true); + if (!node && node !== 0) { + return -1; + } + var recordIndex = node.getAttribute('data-recordIndex'); + if (recordIndex) { + return parseInt(recordIndex, 10); + } + return this.dataSource.indexOf(this.getRecord(node)); + }, + + renderRows: function(rows, viewStartIndex, out) { + var rowValues = this.rowValues, + rowCount = rows.length, + headerCt = this.getHeaderCt(), + i; + + rowValues.view = this; + rowValues.columns = headerCt.getGridColumns(); + rowValues.visibleColumns = headerCt.getVisibleGridColumns(); + + for (i = 0; i < rowCount; i++, viewStartIndex++) { + rowValues.itemClasses.length = rowValues.rowClasses.length = 0; + this.renderRow(rows[i], viewStartIndex, out); + } + + + rowValues.view = rowValues.columns = rowValues.visibleColumns = rowValues.record = null; + }, + + + + renderColumnSizer: function(out) { + var columns = this.getGridColumns(), + len = columns.length, i, + column, width; + + for (i = 0; i < len; i++) { + column = columns[i]; + width = column.hidden ? 0 : (column.lastBox ? column.lastBox.width : Ext.grid.header.Container.prototype.defaultWidth); + out.push(''); + } + }, + + + renderRow: function(record, rowIdx, out) { + var me = this, + isMetadataRecord = rowIdx === -1, + selModel = me.selModel, + rowValues = me.rowValues, + itemClasses = rowValues.itemClasses, + rowClasses = rowValues.rowClasses, + cls, + rowTpl = me.rowTpl; + + + rowValues.record = record; + rowValues.recordId = record.internalId; + rowValues.recordIndex = rowIdx; + rowValues.rowId = me.getRowId(record); + rowValues.itemCls = rowValues.rowCls = ''; + if (!rowValues.columns) { + rowValues.columns = me.headerCt.getGridColumns(); + } + + itemClasses.length = rowClasses.length = 0; + + + + + if (!isMetadataRecord) { + itemClasses[0] = Ext.baseCSSPrefix + "grid-row"; + if (selModel && selModel.isRowSelected && selModel.isRowSelected(record, rowIdx)) { + itemClasses.push(me.selectedItemCls); + } + + if (me.stripeRows && rowIdx % 2 !== 0) { + rowClasses.push(me.altRowCls); + } + + if (me.getRowClass) { + cls = me.getRowClass(record, rowIdx, null, me.dataSource); + if (cls) { + rowClasses.push(cls); + } + } + } + + if (out) { + rowTpl.applyOut(rowValues, out); + } else { + return rowTpl.apply(rowValues); + } + }, + + + renderCell: function(column, record, recordIndex, columnIndex, out) { + var me = this, + selModel = me.selModel, + cellValues = me.cellValues, + classes = cellValues.classes, + fieldValue = record.data[column.dataIndex], + cellTpl = me.cellTpl, + value, clsInsertPoint; + + cellValues.record = record; + cellValues.column = column; + cellValues.recordIndex = recordIndex; + cellValues.columnIndex = columnIndex; + cellValues.cellIndex = columnIndex; + cellValues.align = column.align; + cellValues.tdCls = column.tdCls; + cellValues.style = cellValues.tdAttr = ""; + cellValues.unselectableAttr = me.enableTextSelection ? '' : 'unselectable="on"'; + + if (column.renderer && column.renderer.call) { + value = column.renderer.call(column.scope || me.ownerCt, fieldValue, cellValues, record, recordIndex, columnIndex, me.dataSource, me); + if (cellValues.css) { + + + record.cssWarning = true; + cellValues.tdCls += ' ' + cellValues.css; + delete cellValues.css; + } + } else { + value = fieldValue; + } + cellValues.value = (value == null || value === '') ? ' ' : value; + + + classes[1] = Ext.baseCSSPrefix + 'grid-cell-' + column.getItemId(); + + + + clsInsertPoint = 2; + + if (column.tdCls) { + classes[clsInsertPoint++] = column.tdCls; + } + if (me.markDirty && record.isModified(column.dataIndex)) { + classes[clsInsertPoint++] = me.dirtyCls; + } + if (column.isFirstVisible) { + classes[clsInsertPoint++] = me.firstCls; + } + if (column.isLastVisible) { + classes[clsInsertPoint++] = me.lastCls; + } + if (!me.enableTextSelection) { + classes[clsInsertPoint++] = Ext.baseCSSPrefix + 'unselectable'; + } + + classes[clsInsertPoint++] = cellValues.tdCls; + if (selModel && selModel.isCellSelected && selModel.isCellSelected(me, recordIndex, columnIndex)) { + classes[clsInsertPoint++] = (me.selectedCellCls); + } + + + classes.length = clsInsertPoint; + + cellValues.tdCls = classes.join(' '); + + cellTpl.applyOut(cellValues, out); + + + cellValues.column = null; + }, + + + getNode: function(nodeInfo, dataRow) { + var fly, + result = this.callParent(arguments); + + if (result && result.tagName) { + if (dataRow) { + if (!(fly = Ext.fly(result)).is(this.dataRowSelector)) { + return fly.down(this.dataRowSelector, true); + } + } else if (dataRow === false) { + if (!(fly = Ext.fly(result)).is(this.itemSelector)) { + return fly.up(this.itemSelector, null, true); + } + } + } + return result; + }, + + getRowId: function(record){ + return this.id + '-record-' + record.internalId; + }, + + constructRowId: function(internalId){ + return this.id + '-record-' + internalId; + }, + + getNodeById: function(id, dataRow){ + id = this.constructRowId(id); + return this.retrieveNode(id, dataRow); + }, + + getNodeByRecord: function(record, dataRow) { + var id = this.getRowId(record); + return this.retrieveNode(id, dataRow); + }, + + retrieveNode: function(id, dataRow){ + var result = this.el.getById(id, true), + itemSelector = this.itemSelector, + fly; + + if (dataRow === false && result) { + if (!(fly = Ext.fly(result)).is(itemSelector)) { + return fly.up(itemSelector, null, true); + } + } + return result; + }, + + + updateIndexes: Ext.emptyFn, + + + bodySelector: 'table', + + + nodeContainerSelector: 'tbody', + + + itemSelector: 'tr.' + Ext.baseCSSPrefix + 'grid-row', + + + dataRowSelector: 'tr.' + Ext.baseCSSPrefix + 'grid-data-row', + + + cellSelector: 'td.' + Ext.baseCSSPrefix + 'grid-cell', + + + sizerSelector: 'col.' + Ext.baseCSSPrefix + 'grid-cell', + + innerSelector: 'div.' + Ext.baseCSSPrefix + 'grid-cell-inner', + + getNodeContainer: function() { + return this.el.down(this.nodeContainerSelector, true); + }, + + + getBodySelector: function() { + return this.bodySelector + '.' + Ext.baseCSSPrefix + this.id + '-table'; + }, + + + getNodeContainerSelector: function() { + return this.nodeContainerSelector; + }, + + + getColumnSizerSelector: function(header) { + return this.sizerSelector + '-' + header.getItemId(); + }, + + + getItemSelector: function() { + return this.itemSelector; + }, + + + getDataRowSelector: function() { + return this.dataRowSelector; + }, + + + getCellSelector: function(header) { + var result = this.cellSelector; + if (header) { + result += '-' + header.getItemId(); + } + return result; + }, + + + getCellInnerSelector: function(header) { + return this.getCellSelector(header) + ' ' + this.innerSelector; + }, + + + addRowCls: function(rowInfo, cls) { + var row = this.getNode(rowInfo, false); + if (row) { + Ext.fly(row).addCls(cls); + } + }, + + + removeRowCls: function(rowInfo, cls) { + var row = this.getNode(rowInfo, false); + if (row) { + Ext.fly(row).removeCls(cls); + } + }, + + + onRowSelect : function(rowIdx) { + this.addRowCls(rowIdx, this.selectedItemCls); + }, + + + onRowDeselect : function(rowIdx) { + var me = this; + + me.removeRowCls(rowIdx, me.selectedItemCls); + me.removeRowCls(rowIdx, me.focusedItemCls); + }, + + onCellSelect: function(position) { + var cell = this.getCellByPosition(position, true); + if (cell) { + Ext.fly(cell).addCls(this.selectedCellCls); + } + }, + + onCellDeselect: function(position) { + var cell = this.getCellByPosition(position, true); + if (cell) { + Ext.fly(cell).removeCls(this.selectedCellCls); + } + + }, + + onCellFocus: function(position) { + this.focusCell(position); + }, + + getCellByPosition: function(position, returnDom) { + if (position) { + var node = this.getNode(position.row, true), + header = this.headerCt.getHeaderAtIndex(position.column); + + if (header && node) { + return Ext.fly(node).down(this.getCellSelector(header), returnDom); + } + } + return false; + }, + + focus: function() { + var focusedRow = this.getFocusEl(); + if (focusedRow) { + this.focusRow(focusedRow); + } + }, + + getFocusEl: function() { + var me = this, + result; + + if (me.refreshCounter) { + result = me.focusedRow; + + + if (!(result && me.el.contains(result))) { + + + if (me.all.getCount()) { + me.focusRow(me.getFirstVisibleRowIndex()); + result = me.focusedRow; + } else { + result = me.body; + } + } + } else { + return me.el; + } + return Ext.get(result); + }, + + + + onRowFocus: function(rowIdx, highlight, supressFocus) { + var me = this; + + if (highlight) { + me.addRowCls(rowIdx, me.focusedItemCls); + if (!supressFocus) { + me.focusRow(rowIdx); + } + + } else { + me.removeRowCls(rowIdx, me.focusedItemCls); + } + }, + + + focusRow: function(rowIdx) { + var me = this, + row, + gridCollapsed = me.ownerCt && me.ownerCt.collapsed, + record; + + + if (me.isVisible(true) && !gridCollapsed && (row = me.getNode(rowIdx, true)) && me.el) { + record = me.getRecord(row); + rowIdx = me.indexInStore(row); + + + me.selModel.setLastFocused(record); + row.focus(); + me.focusedRow = row; + me.fireEvent('rowfocus', record, row, rowIdx); + } + }, + + focusCell: function(position) { + var me = this, + cell = me.getCellByPosition(position), + record = me.getRecord(position.row), + el = me.el, + adjustmentX = 0, + elRegion = el.getRegion(), + panel = me.ownerCt, + cellRegion; + + this.focusRow(record); + if (cell) { + + + elRegion.right = elRegion.left + el.dom.clientWidth; + cellRegion = cell.getRegion(); + + + if (cellRegion.left < elRegion.left) { + adjustmentX = cellRegion.left - elRegion.left; + + } else if (cellRegion.right > elRegion.right) { + adjustmentX = cellRegion.right - elRegion.right; + } + + if (adjustmentX) { + panel.scrollByDeltaX(adjustmentX); + } + me.fireEvent('cellfocus', record, cell, position); + } + }, + + + scrollByDelta: function(delta, dir) { + dir = dir || 'scrollTop'; + var elDom = this.el.dom; + elDom[dir] = (elDom[dir] += delta); + }, + + + isDataRow: function(row) { + return Ext.fly(row).hasCls(Ext.baseCSSPrefix + 'grid-data-row'); + }, + + syncRowHeights: function(firstRow, secondRow) { + firstRow = Ext.get(firstRow); + secondRow = Ext.get(secondRow); + firstRow.dom.style.height = secondRow.dom.style.height = ''; + var me = this, + rowTpl = me.rowTpl, + firstRowHeight = firstRow.dom.offsetHeight, + secondRowHeight = secondRow.dom.offsetHeight; + + + if (firstRowHeight !== secondRowHeight) { + + + while (rowTpl) { + if (rowTpl.syncRowHeights) { + + if (rowTpl.syncRowHeights(firstRow, secondRow) === false) { + break; + } + } + rowTpl = rowTpl.nextTpl; + } + + + firstRowHeight = firstRow.dom.offsetHeight; + secondRowHeight = secondRow.dom.offsetHeight; + if (firstRowHeight !== secondRowHeight) { + + + firstRow = firstRow.down('[data-recordId]') || firstRow; + secondRow = secondRow.down('[data-recordId]') || secondRow; + + + if (firstRow && secondRow) { + firstRow.dom.style.height = secondRow.dom.style.height = ''; + firstRowHeight = firstRow.dom.offsetHeight; + secondRowHeight = secondRow.dom.offsetHeight; + + if (firstRowHeight > secondRowHeight) { + firstRow.setHeight(firstRowHeight); + secondRow.setHeight(firstRowHeight); + } else if (secondRowHeight > firstRowHeight) { + firstRow.setHeight(secondRowHeight); + secondRow.setHeight(secondRowHeight); + } + } + } + } + }, + + onIdChanged: function(store, rec, oldId, newId, oldInternalId){ + var me = this, + rowDom; + + if (me.viewReady) { + rowDom = me.getNodeById(oldInternalId); + if (rowDom) { + rowDom.setAttribute('data-recordId', rec.internalId); + rowDom.id = me.getRowId(rec); + } + } + }, + + + onUpdate : function(store, record, operation, changedFieldNames) { + var me = this, + rowTpl = me.rowTpl, + index, + oldRow, oldRowDom, + newRowDom, + newAttrs, attLen, attName, attrIndex, + overItemCls, + focusedItemCls, + columns; + + if (me.viewReady) { + + oldRowDom = me.getNodeByRecord(record, false); + + + if (oldRowDom) { + overItemCls = me.overItemCls; + focusedItemCls = me.focusedItemCls; + + index = me.indexInStore(record); + oldRow = Ext.fly(oldRowDom, '_internal'); + newRowDom = me.createRowElement(record, index); + if (oldRow.hasCls(overItemCls)) { + Ext.fly(newRowDom).addCls(overItemCls); + } + if (oldRow.hasCls(focusedItemCls)) { + Ext.fly(newRowDom).addCls(focusedItemCls); + } + columns = me.headerCt.getGridColumns(); + + + if (oldRowDom.mergeAttributes) { + oldRowDom.mergeAttributes(newRowDom, true); + } else { + newAttrs = newRowDom.attributes; + attLen = newAttrs.length; + for (attrIndex = 0; attrIndex < attLen; attrIndex++) { + attName = newAttrs[attrIndex].name; + if (attName !== 'id') { + oldRowDom.setAttribute(attName, newAttrs[attrIndex].value); + } + } + } + + + + if (columns.length) { + me.updateColumns(record, me.getNode(oldRowDom, true), me.getNode(newRowDom, true), columns, changedFieldNames); + } + + + while (rowTpl) { + if (rowTpl.syncContent) { + if (rowTpl.syncContent(oldRowDom, newRowDom) === false) { + break; + } + } + rowTpl = rowTpl.nextTpl; + } + + + + me.fireEvent('itemupdate', record, index, oldRowDom); + me.refreshSize(); + } + } + }, + + updateColumns: function(record, oldRowDom, newRowDom, columns, changedFieldNames) { + var me = this, + newAttrs, attLen, attName, attrIndex, + colCount = columns.length, + colIndex, + column, + oldCell, newCell, + row, + + + + + editingPlugin = me.editingPlugin || (me.lockingPartner && me.ownerCt.ownerLockable.view.editingPlugin), + + + isEditing = editingPlugin && editingPlugin.editing, + cellSelector = me.getCellSelector(); + + + + if (oldRowDom.mergeAttributes) { + oldRowDom.mergeAttributes(newRowDom, true); + } else { + newAttrs = newRowDom.attributes; + attLen = newAttrs.length; + for (attrIndex = 0; attrIndex < attLen; attrIndex++) { + attName = newAttrs[attrIndex].name; + if (attName !== 'id') { + oldRowDom.setAttribute(attName, newAttrs[attrIndex].value); + } + } + } + + + for (colIndex = 0; colIndex < colCount; colIndex++) { + column = columns[colIndex]; + + + + if (me.shouldUpdateCell(record, column, changedFieldNames)) { + + + + cellSelector = me.getCellSelector(column); + oldCell = Ext.DomQuery.selectNode(cellSelector, oldRowDom); + newCell = Ext.DomQuery.selectNode(cellSelector, newRowDom); + + + if (isEditing) { + Ext.fly(oldCell).syncContent(newCell); + } + + else { + + row = oldCell.parentNode; + row.insertBefore(newCell, oldCell); + row.removeChild(oldCell); + } + } + } + }, + + shouldUpdateCell: function(record, column, changedFieldNames){ + + + + + if (column.hasCustomRenderer || !changedFieldNames) { + return true; + } + + if (changedFieldNames) { + var len = changedFieldNames.length, + i, field; + + for (i = 0; i < len; ++i) { + field = changedFieldNames[i]; + if (field === column.dataIndex || field === record.idProperty) { + return true; + } + } + } + return false; + }, + + + refresh: function() { + var me = this; + me.callParent(arguments); + me.headerCt.setSortState(); + me.selModel.onLastFocusChanged(null, me.selModel.lastFocused); + + }, + + processItemEvent: function(record, row, rowIndex, e) { + + if (this.indexInStore(row) !== -1) { + var me = this, + cell = e.getTarget(me.getCellSelector(), row), + cellIndex, + map = me.statics().EventMap, + selModel = me.getSelectionModel(), + type = e.type, + features = me.features, + len = features.length, + i, result, feature; + + if (type == 'keydown' && !cell && selModel.getCurrentPosition) { + + cell = me.getCellByPosition(selModel.getCurrentPosition(), true); + } + + + if (cell) { + if (!cell.parentNode) { + + + return false; + } + cellIndex = cell.cellIndex; + if (!(cellIndex || cellIndex === 0)) { + + cellIndex = Number(cell.getAttribute('data-cellIndex')); + } + } else { + cellIndex = -1; + } + + result = me.fireEvent('uievent', type, me, cell, rowIndex, cellIndex, e, record, row); + + if (result === false || me.callParent(arguments) === false) { + return false; + } + + for (i = 0; i < len; ++i) { + feature = features[i]; + + + if (feature.wrapsItem) { + if (feature.vetoEvent(record, row, rowIndex, e) === false) { + + + me.processSpecialEvent(e); + return false; + } + } + } + + + if (type == 'mouseover' || type == 'mouseout') { + return true; + } + + if(!cell) { + + + return true; + } + + return !( + + (me['onBeforeCell' + map[type]](cell, cellIndex, record, row, rowIndex, e) === false) || + (me.fireEvent('beforecell' + type, me, cell, cellIndex, record, row, rowIndex, e) === false) || + (me['onCell' + map[type]](cell, cellIndex, record, row, rowIndex, e) === false) || + (me.fireEvent('cell' + type, me, cell, cellIndex, record, row, rowIndex, e) === false) + ); + } else { + + this.processSpecialEvent(e); + return false; + } + }, + + processSpecialEvent: function(e) { + var me = this, + features = me.features, + ln = features.length, + type = e.type, + i, feature, prefix, featureTarget, + beforeArgs, args, + panel = me.ownerCt; + + me.callParent(arguments); + + if (type == 'mouseover' || type == 'mouseout') { + return; + } + + for (i = 0; i < ln; i++) { + feature = features[i]; + if (feature.hasFeatureEvent) { + featureTarget = e.getTarget(feature.eventSelector, me.getTargetEl()); + if (featureTarget) { + prefix = feature.eventPrefix; + + + beforeArgs = feature.getFireEventArgs('before' + prefix + type, me, featureTarget, e); + args = feature.getFireEventArgs(prefix + type, me, featureTarget, e); + + if ( + + (me.fireEvent.apply(me, beforeArgs) === false) || + + (panel.fireEvent.apply(panel, beforeArgs) === false) || + + (me.fireEvent.apply(me, args) === false) || + + (panel.fireEvent.apply(panel, args) === false) + ) { + return false; + } + } + } + } + return true; + }, + + onCellMouseDown: Ext.emptyFn, + onCellMouseUp: Ext.emptyFn, + onCellClick: Ext.emptyFn, + onCellDblClick: Ext.emptyFn, + onCellContextMenu: Ext.emptyFn, + onCellKeyDown: Ext.emptyFn, + onBeforeCellMouseDown: Ext.emptyFn, + onBeforeCellMouseUp: Ext.emptyFn, + onBeforeCellClick: Ext.emptyFn, + onBeforeCellDblClick: Ext.emptyFn, + onBeforeCellContextMenu: Ext.emptyFn, + onBeforeCellKeyDown: Ext.emptyFn, + + + expandToFit: function(header) { + this.autoSizeColumn(header); + }, + + + autoSizeColumn: function(header) { + if (Ext.isNumber(header)) { + header = this.getGridColumns[header]; + } + if (header) { + if (header.isGroupHeader) { + header.autoSize(); + return; + } + delete header.flex; + header.setWidth(this.getMaxContentWidth(header)); + } + }, + + + getMaxContentWidth: function(header) { + var me = this, + cells = me.el.query(header.getCellInnerSelector()), + originalWidth = header.getWidth(), + i = 0, + ln = cells.length, + maxWidth; + + + me.body.select(me.getColumnSizerSelector(header)).setWidth(40); + + + maxWidth = header.textEl.dom.offsetWidth + header.titleEl.getPadding('lr'); + for (; i < ln; i++) { + + maxWidth = Math.max(maxWidth, cells[i].scrollWidth + 2); + } + + me.body.select(me.getColumnSizerSelector(header)).setWidth(originalWidth); + + return maxWidth; + }, + + getPositionByEvent: function(e) { + var me = this, + cellNode = e.getTarget(me.cellSelector), + rowNode = e.getTarget(me.itemSelector), + record = me.getRecord(rowNode), + header = me.getHeaderByCell(cellNode); + + return me.getPosition(record, header); + }, + + getHeaderByCell: function(cell) { + if (cell) { + var m = cell.className.match(this.cellRe); + if (m && m[1]) { + return Ext.getCmp(m[1]); + } + } + return false; + }, + + + walkCells: function(pos, direction, e, preventWrap, verifierFn, scope) { + + + + if (!pos) { + return false; + } + + var me = this, + row = pos.row, + column = pos.column, + rowCount = me.dataSource.getCount(), + firstCol = me.getFirstVisibleColumnIndex(), + lastCol = me.getLastVisibleColumnIndex(), + newPos = {row: row, column: column}, + activeHeader = me.headerCt.getHeaderAtIndex(column); + + + if (!activeHeader || activeHeader.hidden || !rowCount) { + return false; + } + + e = e || {}; + direction = direction.toLowerCase(); + switch (direction) { + case 'right': + + if (column === lastCol) { + + if (preventWrap || row === rowCount - 1) { + return false; + } + if (!e.ctrlKey) { + + newPos.row = me.walkRows(row, 1); + if (newPos.row !== row) { + newPos.column = firstCol; + } + } + + } else { + if (!e.ctrlKey) { + newPos.column = column + me.getRightGap(activeHeader); + } else { + newPos.column = lastCol; + } + } + break; + + case 'left': + + if (column === firstCol) { + + if (preventWrap || row === 0) { + return false; + } + if (!e.ctrlKey) { + + newPos.row = me.walkRows(row, -1); + if (newPos.row !== row) { + newPos.column = lastCol; + } + } + + } else { + if (!e.ctrlKey) { + newPos.column = column + me.getLeftGap(activeHeader); + } else { + newPos.column = firstCol; + } + } + break; + + case 'up': + + if (row === 0) { + return false; + + } else { + if (!e.ctrlKey) { + newPos.row = me.walkRows(row, -1); + } else { + + newPos.row = me.walkRows(-1, 1); + } + } + break; + + case 'down': + + if (row === rowCount - 1) { + return false; + + } else { + if (!e.ctrlKey) { + newPos.row = me.walkRows(row, 1); + } else { + + newPos.row = me.walkRows(rowCount, -1); + } + } + break; + } + + if (verifierFn && verifierFn.call(scope || window, newPos) !== true) { + return false; + } else { + return newPos; + } + }, + + + walkRows: function(startRow, distance) { + + + var me = this, + moved = 0, + lastValid = startRow, + node, + last = (me.dataSource.buffered ? me.dataSource.getTotalCount() : me.dataSource.getCount()) - 1, + limit = (distance < 0) ? 0 : last, + increment = limit ? 1 : -1, + result = startRow; + + do { + + if (limit ? result >= limit : result <= 0) { + return lastValid || limit; + } + + + result += increment; + + + + if ((node = Ext.fly(me.getNode(result, true))) && node.isVisible(true)) { + moved += increment; + lastValid = result; + } + } while (moved !== distance); + return result; + }, + + + walkRecs: function(startRec, distance) { + + + var me = this, + moved = 0, + lastValid = startRec, + node, + last = (me.store.buffered ? me.store.getTotalCount() : me.store.getCount()) - 1, + limit = (distance < 0) ? 0 : last, + increment = limit ? 1 : -1, + testIndex = me.store.indexOf(startRec), + rec; + + do { + + if (limit ? testIndex >= limit : testIndex <= 0) { + return lastValid; + } + + + testIndex += increment; + + + + rec = me.store.getAt(testIndex); + if ((node = Ext.fly(me.getNodeByRecord(rec, true))) && node.isVisible(true)) { + moved += increment; + lastValid = rec; + } + } while (moved !== distance); + return lastValid; + }, + + getFirstVisibleRowIndex: function() { + var me = this, + count = (me.dataSource.buffered ? me.dataSource.getTotalCount() : me.dataSource.getCount()), + result = me.indexOf(me.all.first()) - 1; + + do { + result += 1; + if (result === count) { + return; + } + } while (!Ext.fly(me.getNode(result, true)).isVisible(true)); + return result; + }, + + getLastVisibleRowIndex: function() { + var me = this, + result = me.indexOf(me.all.last()); + + do { + result -= 1; + if (result === -1) { + return; + } + } while (!Ext.fly(me.getNode(result, true)).isVisible(true)); + return result; + }, + + getFirstVisibleColumnIndex: function() { + var firstVisibleHeader = this.getHeaderCt().getVisibleGridColumns()[0]; + + return firstVisibleHeader ? firstVisibleHeader.getIndex() : -1; + }, + + getLastVisibleColumnIndex: function() { + var visHeaders = this.getHeaderCt().getVisibleGridColumns(), + lastHeader = visHeaders[visHeaders.length - 1]; + + return lastHeader.getIndex(); + }, + + getHeaderCt: function() { + return this.headerCt; + }, + + + getPosition: function(record, header) { + return { + row: this.dataSource.indexOf(record, true), + column: Ext.Array.indexOf(this.headerCt.getGridColumns(), header) + }; + }, + + + getRightGap: function(activeHeader) { + var headerCt = this.getHeaderCt(), + headers = headerCt.getGridColumns(), + activeHeaderIdx = Ext.Array.indexOf(headers, activeHeader), + i = activeHeaderIdx + 1, + nextIdx; + + for (; i <= headers.length; i++) { + if (!headers[i].hidden) { + nextIdx = i; + break; + } + } + + return nextIdx - activeHeaderIdx; + }, + + beforeDestroy: function() { + var me = this; + + if (me.rendered) { + me.el.removeAllListeners(); + } + me.callParent(arguments); + }, + + onDestroy: function(){ + var me = this, + features = me.featuresMC, + len, + i; + + if (features) { + for (i = 0, len = features.getCount(); i < len; ++i) { + features.getAt(i).destroy(); + } + } + me.featuresMC = null; + this.callParent(arguments); + }, + + + getLeftGap: function(activeHeader) { + var headerCt = this.getHeaderCt(), + headers = headerCt.getGridColumns(), + activeHeaderIdx = Ext.Array.indexOf(headers, activeHeader), + i = activeHeaderIdx - 1, + prevIdx; + + for (; i >= 0; i--) { + if (!headers[i].hidden) { + prevIdx = i; + break; + } + } + + return prevIdx - activeHeaderIdx; + }, + + + onAdd: function(ds, records, index) { + this.callParent(arguments); + this.doStripeRows(index); + }, + + + onRemove: function(ds, records, indexes) { + this.callParent(arguments); + this.doStripeRows(indexes[0]); + }, + + + doStripeRows: function(startRow, endRow) { + var me = this, + rows, + rowsLn, + i, + row; + + + if (me.rendered && me.stripeRows) { + rows = me.getNodes(startRow, endRow); + + for (i = 0, rowsLn = rows.length; i < rowsLn; i++) { + row = rows[i]; + + row.className = row.className.replace(me.rowClsRe, ' '); + startRow++; + + if (startRow % 2 === 0) { + row.className += (' ' + me.altRowCls); + } + } + } + } +}); + + +Ext.define('Ext.grid.View', { + extend: Ext.view.Table , + alias: 'widget.gridview', + + + stripeRows: true, + + autoScroll: true +}); + + +Ext.define('Ext.grid.Panel', { + extend: Ext.panel.Table , + + alias: ['widget.gridpanel', 'widget.grid'], + alternateClassName: ['Ext.list.ListView', 'Ext.ListView', 'Ext.grid.GridPanel'], + viewType: 'gridview', + + lockable: false, + + + rowLines: true + + + + + + + + + +}); + + +Ext.define('Ext.grid.plugin.BufferedRendererTableView', { + override: 'Ext.view.Table', + + + onAdd: function(store, records, index) { + var bufferedRenderer = this.bufferedRenderer, + rows = this.all; + + + if (bufferedRenderer && (rows.getCount() + records.length) > bufferedRenderer.viewSize) { + + + if (index < rows.startIndex + bufferedRenderer.viewSize && (index + records.length) > rows.startIndex) { + this.onDataRefresh(); + } + + else { + bufferedRenderer.stretchView(this, bufferedRenderer.getScrollHeight()); + } + } + + + + else { + this.callParent([store, records, index]); + } + }, + + + onRemove: function(store, records, indices) { + + + if (this.bufferedRenderer) { + this.onDataRefresh(); + } + + + + else { + this.callParent([store, records, indices]); + } + } +}); + + +Ext.define('Ext.grid.RowEditorButtons', { + extend: Ext.container.Container , + alias: 'widget.roweditorbuttons', + + frame: true, + + constructor: function(config) { + var rowEditor = config.rowEditor, + cssPrefix = Ext.baseCSSPrefix, + plugin = rowEditor.editingPlugin; + + config = Ext.apply({ + floating: { + shadow: false + }, + baseCls: cssPrefix + 'grid-row-editor-buttons', + layout: { + type: 'hbox', + align: 'middle' + }, + defaults: { + xtype: 'button', + ui: rowEditor.buttonUI, + scope: plugin, + flex: 1, + minWidth: Ext.panel.Panel.prototype.minButtonWidth + }, + items: [{ + cls: cssPrefix + 'row-editor-update-button', + itemId: 'update', + handler: plugin.completeEdit, + text: rowEditor.saveBtnText, + disabled: rowEditor.updateButtonDisabled + }, { + cls: cssPrefix + 'row-editor-cancel-button', + handler: plugin.cancelEdit, + text: rowEditor.cancelBtnText + }] + }, config); + this.callParent([config]); + }, + + getTargetEl: function() { + return this.el; + }, + + + afterComponentLayout: function() { + if (Ext.isIEQuirks && !this.componentLayoutCounter) { + this.el.setWidth(this.width = this.layout.innerCt.getWidth() + this.getFrameInfo().width); + } + this.callParent(arguments); + } +}); + + + + + + + + + + +Ext.define('Ext.grid.RowEditor', { + extend: Ext.form.Panel , + alias: 'widget.roweditor', + + + + + + + + + saveBtnText : 'Update', + + + cancelBtnText: 'Cancel', + + + errorsText: 'Errors', + + + dirtyText: 'You need to commit or cancel your changes', + + + lastScrollLeft: 0, + lastScrollTop: 0, + + border: false, + + buttonUI: 'default', + + + + hideMode: 'offsets', + + initComponent: function() { + var me = this, + form; + + me.cls = Ext.baseCSSPrefix + 'grid-editor ' + Ext.baseCSSPrefix + 'grid-row-editor'; + + me.layout = { + type: 'hbox', + align: 'middle' + }; + + + + me.columns = new Ext.util.HashMap(); + me.columns.getKey = function(columnHeader) { + var f; + if (columnHeader.getEditor) { + f = columnHeader.getEditor(); + if (f) { + return f.id; + } + } + return columnHeader.id; + }; + me.mon(me.columns, { + add: me.doColumnAdd, + remove: me.doColumnRemove, + replace: me.onColumnReplace, + scope: me + }); + + me.callParent(arguments); + + if (me.fields) { + me.setField(me.fields, true); + delete me.fields; + } + + me.mon(me.hierarchyEventSource, { + scope: me, + show: me.repositionIfVisible + }); + + + me.mon(me.view.headerCt, 'afterlayout', me.correctWidth, me); + + form = me.getForm(); + form.trackResetOnLoad = true; + }, + + onFieldRender: function(field){ + var me = this, + margins = me.getEditorMargins(field), + column = me.columns.get(field.id), + fn; + + field.setMargin('0 ' + margins.right + ' 0 ' + margins.left, true); + if (column.isVisible()) { + me.setFieldWidth(column, field); + } else if (!column.rendered) { + + fn = Ext.Function.bind(me.setFieldWidth, me, [column, field]); + me.mon(me.view.headerCt, 'afterlayout', fn, me, { + single: true + }) + } + }, + + setFieldWidth: function(column, field) { + var margins = this.getEditorMargins(field); + field.setWidth(column.getWidth() - margins.width); + }, + + setupMargin: function(field) { + var me = this, + cellPadding = me.cellPadding, + view = me.view, + fieldPadLeft = 0, + fieldPadRight = 0, + offset = 1, + inputEl, margins, + cell; + + + if (!cellPadding) { + cell = view.el.down(view.cellSelector + ' ' + view.innerSelector); + if (cell) { + cellPadding = { + left: cell.getPadding('l'), + right: cell.getPadding('r'), + top: cell.getPadding('t'), + bottom: cell.getPadding('b') + }; + } else { + + cellPadding = { + left: 0, + right: 0 + }; + } + me.cellPadding = cellPadding; + } + + + inputEl = field.inputEl; + if (inputEl) { + fieldPadLeft = inputEl.getPadding('l'); + fieldPadRight = inputEl.getPadding('r'); + } + + if (field.isXType('textfield')) { + offset = 1; + } + + + margins = { + left: Math.max(1, cellPadding.left - (fieldPadLeft + offset)), + right: Math.max(1, cellPadding.right - (fieldPadRight + offset)), + top: cellPadding.top, + bottom: cellPadding.bottom + }; + margins.width = margins.left + margins.right; + field.editorMargin = margins; + return margins; + }, + + getEditorMargins: function(field) { + var margins = field.editorMargin; + + + if (!margins) { + margins = this.setupMargin(field); + } + return margins; + }, + + onFieldChange: function() { + var me = this, + form = me.getForm(), + valid = form.isValid(); + if (me.errorSummary && me.isVisible()) { + me[valid ? 'hideToolTip' : 'showToolTip'](); + } + me.updateButton(valid); + me.isValid = valid; + }, + + updateButton: function(valid){ + var buttons = this.floatingButtons; + if (buttons) { + buttons.child('#update').setDisabled(!valid); + } else { + + this.updateButtonDisabled = !valid; + } + }, + + afterRender: function() { + var me = this, + plugin = me.editingPlugin, + grid = plugin.grid, + field, margins; + + me.callParent(arguments); + me.mon(me.container, 'scroll', me.onCtScroll, me, { buffer: 10 }); + + if (grid.lockable) { + grid.normalGrid.view.mon(grid.normalGrid.view.el, 'scroll', me.onNormalViewScroll, me, { buffer: 10 }); + } + + + me.mon(me.el, { + click: Ext.emptyFn, + stopPropagation: true + }); + + me.el.swallowEvent([ + 'keypress', + 'keydown' + ]); + + me.keyNav = new Ext.util.KeyNav(me.el, { + enter: plugin.completeEdit, + esc: plugin.onEscKey, + scope: plugin + }); + + me.mon(plugin.view, { + beforerefresh: me.onBeforeViewRefresh, + refresh: me.onViewRefresh, + itemremove: me.onViewItemRemove, + scope: me + }); + + + me.preventReposition = true; + me.columns.each(function(fieldId, column) { + field = column.getEditor(); + margins = me.getEditorMargins(field); + column.getEditor().setMargin('0 ' + margins.right + ' 0 ' + margins.left, true); + if (column.isVisible()) { + me.onColumnShow(column); + } + }, me); + delete me.preventReposition; + }, + + onBeforeViewRefresh: function(view) { + var me = this, + viewDom = view.el.dom; + + if (me.el.dom.parentNode === viewDom) { + viewDom.removeChild(me.el.dom); + } + }, + + onViewRefresh: function(view) { + var me = this, + context = me.context, + idx; + + me.container.dom.appendChild(me.el.dom); + + + if (context && (idx = context.store.indexOf(context.record)) >= 0) { + context.row = view.getNode(idx); + me.reposition(); + if (me.tooltip && me.tooltip.isVisible()) { + me.tooltip.setTarget(context.row); + } + } else { + me.editingPlugin.cancelEdit(); + } + }, + + onViewItemRemove: function(record, index) { + var context = this.context; + if (context && record === context.record) { + + this.editingPlugin.cancelEdit(); + } + }, + + onCtScroll: function(e, target) { + var me = this, + scrollTop = target.scrollTop, + scrollLeft = Ext.fly(target).getScrollLeft(); + + if (scrollTop !== me.lastScrollTop) { + me.lastScrollTop = scrollTop; + if ((me.tooltip && me.tooltip.isVisible()) || me.hiddenTip) { + me.repositionTip(); + } + } + if (scrollLeft !== me.lastScrollLeft) { + me.lastScrollLeft = scrollLeft; + me.reposition(); + } + }, + + onNormalViewScroll: function(e, target) { + if (this.ignoreScroll) { + this.ignoreScroll = false; + return; + } + var me = this, + scrollTop = target.scrollTop; + + if (scrollTop !== me.lastScrollTop) { + me.lastScrollTop = scrollTop; + if ((me.tooltip && me.tooltip.isVisible()) || me.hiddenTip) { + me.repositionTip(); + } + } + this.reposition(null, true); + }, + + onColumnResize: function(column, width) { + var field; + + if (!column.isGroupHeader && this.rendered) { + field = column.getEditor(); + field.setWidth(width - this.getEditorMargins(field).width); + this.repositionIfVisible(); + } + }, + + onColumnHide: function(column) { + if (!column.isGroupHeader) { + column.getEditor().hide(); + this.repositionIfVisible(); + } + }, + + onColumnShow: function(column) { + var me = this, + field; + + if (!column.isGroupHeader) { + field = column.getEditor(); + field.show(); + if (me.rendered) { + field.setWidth(column.getWidth() - me.getEditorMargins(field).width); + if (!me.preventReposition) { + this.repositionIfVisible(); + } + } + } + }, + + onColumnMove: function(column, fromIdx, toIdx) { + var grid = this.editingPlugin.grid, + lockedColCount; + + + + if (grid.lockable && grid.normalGrid.headerCt.contains(column, true)) { + lockedColCount = grid.lockedGrid.view.getGridColumns().length; + fromIdx += lockedColCount; + toIdx += lockedColCount; + } + + if (!column.isGroupHeader) { + var field = column.getEditor(); + if (this.items.indexOf(field) != toIdx) { + this.move(fromIdx, toIdx); + } + } + }, + + onColumnAdd: function(column) { + this.doColumnAdd(this.columns, column.getEditor().id, column); + if (!column.isGroupHeader) { + this.setField(column); + } + }, + + doColumnAdd: function(map, fieldId, column){ + var me = this, + colIdx, + field; + + if (!column.isGroupHeader) { + colIdx = me.editingPlugin.grid.headerCt.getHeaderIndex(column); + field = column.getEditor({ xtype: 'displayfield' }); + me.insert(colIdx, field); + } + }, + + onColumnRemove: function(column) { + this.doColumnRemove(this.columns, column.getEditor().id, column); + this.columns.remove(column); + }, + + doColumnRemove: function(map, fieldId, column){ + var me = this, + field; + + if (!column.isGroupHeader) { + field = column.getEditor(); + me.remove(field, false); + } + }, + + onColumnReplace: function(map, fieldId, column, oldColumn) { + this.onColumnRemove(map, fieldId, oldColumn); + }, + + clearFields: function() { + var map = this.columns, + key; + + for (key in map) { + if (map.hasOwnProperty(key)) { + map.removeAtKey(key); + } + } + }, + + getFloatingButtons: function() { + var me = this; + + if (!me.floatingButtons) { + me.floatingButtons = new Ext.grid.RowEditorButtons({ + rowEditor: me, + renderTo: me.el + }); + } + return me.floatingButtons; + }, + + repositionIfVisible: function(c){ + var me = this, + view = me.view; + + + + if (c && (c == me || !c.el.isAncestor(view.el))) { + return; + } + + if (me.isVisible() && view.isVisible(true)) { + me.reposition(); + } + }, + + getRefOwner: function() { + return this.editingPlugin.grid; + }, + + reposition: function(animateConfig, doNotScroll) { + var me = this, + context = me.context, + row = context && Ext.get(context.row), + btns = me.getFloatingButtons(), + btnEl = btns.el, + grid = me.editingPlugin.grid, + viewEl = grid.lockable ? grid.normalGrid.view.el : grid.view.el, + + + + mainBodyWidth = grid.headerCt.getFullWidth(), + scrollerWidth = grid.getWidth(), + + + + width = Math.min(mainBodyWidth, scrollerWidth), + scrollLeft = Ext.fly(grid.view.el.dom).getScrollLeft(), + btnWidth = btns.getWidth(), + left = (width - btnWidth) / 2 + scrollLeft, + localX = me.getLocalX(), + scrollDistance, + + invalidateScroller = function() { + if (!doNotScroll) { + + + if ((scrollDistance = (btnEl.getRegion().bottom - grid.el.getRegion().bottom)) > 0) { + + + if (grid.lockable) { + grid.normalGrid.view.body.dom.style.marginBottom = + grid.lockedGrid.view.body.dom.style.marginBottom = btnEl.getHeight() + 'px'; + } + + + me.ignoreScroll = true; + viewEl.dom.scrollTop += scrollDistance; + + + if (grid.lockable) { + me.setLocalY(me.getLocalY() - scrollDistance); + } + } + } + if (animateConfig && animateConfig.callback) { + animateConfig.callback.call(animateConfig.scope || me); + } + }, + + animObj; + + + if (grid.lockable) { + + grid.normalGrid.view.body.dom.style.marginBottom = + grid.lockedGrid.view.body.dom.style.marginBottom = ''; + localX += grid.normalGrid.view.el.dom.scrollLeft * (me.rtl ? 1 : -1); + } + + + if (row && Ext.isElement(row.dom)) { + + + + if (!doNotScroll) { + row.scrollIntoView(viewEl, false); + } + + + + + me.setLocalX(localX); + + if (animateConfig) { + animObj = { + to: { + y: row.getXY()[1] - me.body.getBorderPadding().beforeY + }, + duration: animateConfig.duration || 125, + listeners: { + afteranimate: function() { + me.setButtonPosition(btnEl, left); + invalidateScroller(); + } + } + }; + me.animate(animObj); + } else { + me.setLocalY((grid.lockable ? row.getOffsetsTo(grid.body)[1] : row.dom.offsetTop) - me.body.getBorderPadding().beforeY); + me.setButtonPosition(btnEl, left); + invalidateScroller(); + } + } + me.correctWidth(); + }, + + + correctWidth: function() { + var me = this, + mainBodyWidth; + + + if (me.rendered && me.isVisible() && me.el.dom.parentNode) { + mainBodyWidth = me.editingPlugin.grid.headerCt.getFullWidth(); + if (me.getWidth() != mainBodyWidth) { + me.setWidth(mainBodyWidth); + } + } + }, + + getLocalX: function() { + return 0; + }, + + setButtonPosition: function(btnEl, left){ + btnEl.setLocalXY(left, this.el.dom.offsetHeight - 1); + }, + + getEditor: function(fieldInfo) { + var me = this; + + if (Ext.isNumber(fieldInfo)) { + + + + return me.query('>[isFormField]')[fieldInfo]; + } else if (fieldInfo.isHeader && !fieldInfo.isGroupHeader) { + return fieldInfo.getEditor(); + } + }, + + removeField: function(field) { + var me = this; + + + field = me.getEditor(field); + me.mun(field, 'validitychange', me.onValidityChange, me); + + + + me.columns.removeAtKey(field.id); + Ext.destroy(field); + }, + + setField: function(column, initial) { + var me = this, + i, + length, field; + + if (Ext.isArray(column)) { + length = column.length; + + for (i = 0; i < length; i++) { + me.setField(column[i], initial); + } + + return; + } + + + field = column.getEditor(null, { + xtype: 'displayfield', + + + getModelData: function() { + return null; + } + }); + + me.mon(field, 'change', me.onFieldChange, me); + if (me.rendered) { + + + me.mon(field, 'afterrender', me.onFieldRender, me, { + single: true + }); + } + + if (me.isVisible() && me.context) { + if (field.is('displayfield')) { + me.renderColumnData(field, me.context.record, column); + } else { + field.suspendEvents(); + field.setValue(me.context.record.get(column.dataIndex)); + field.resumeEvents(); + } + } + + + + + me.columns.add(field.id, column); + if (column.hidden) { + me.onColumnHide(column); + } else if (column.rendered && !initial) { + + me.onColumnShow(column); + } + }, + + loadRecord: function(record) { + var me = this, + form = me.getForm(), + fields = form.getFields(), + items = fields.items, + length = items.length, + i, displayFields, + isValid; + + + for (i = 0; i < length; i++) { + items[i].suspendEvents(); + } + + form.loadRecord(record); + + for (i = 0; i < length; i++) { + items[i].resumeEvents(); + } + + isValid = form.isValid(); + if (me.errorSummary) { + if (isValid) { + me.hideToolTip(); + } else { + me.showToolTip(); + } + } + + me.updateButton(isValid); + + + displayFields = me.query('>displayfield'); + length = displayFields.length; + + for (i = 0; i < length; i++) { + me.renderColumnData(displayFields[i], record); + } + }, + + renderColumnData: function(field, record, activeColumn) { + var me = this, + grid = me.editingPlugin.grid, + headerCt = grid.headerCt, + view = grid.view, + store = view.store, + column = activeColumn || me.columns.get(field.id), + value = record.get(column.dataIndex), + renderer = column.editRenderer || column.renderer, + metaData, + rowIdx, + colIdx; + + + if (renderer) { + metaData = { tdCls: '', style: '' }; + rowIdx = store.indexOf(record); + colIdx = headerCt.getHeaderIndex(column); + + value = renderer.call( + column.scope || headerCt.ownerCt, + value, + metaData, + record, + rowIdx, + colIdx, + store, + view + ); + } + + field.setRawValue(value); + field.resetOriginalValue(); + }, + + beforeEdit: function() { + var me = this; + + if (me.isVisible() && me.errorSummary && !me.autoCancel && me.isDirty()) { + me.showToolTip(); + return false; + } + }, + + + startEdit: function(record, columnHeader) { + var me = this, + grid = me.editingPlugin.grid, + store = grid.store, + view = grid.getView(), + context = me.context = Ext.apply(me.editingPlugin.context, { + view: view, + store: store + }); + + if (!me.rendered) { + me.render(view.el); + } + + context.grid.getSelectionModel().select(record); + + + me.loadRecord(record); + + if (!me.isVisible()) { + me.show(); + } + me.reposition({ + callback: this.focusContextCell + }); + }, + + + focusContextCell: function() { + var field = this.getEditor(this.context.colIdx); + if (field && field.focus) { + field.focus(); + } + }, + + cancelEdit: function() { + var me = this, + form = me.getForm(), + fields = form.getFields(), + items = fields.items, + length = items.length, + i; + + me.hide(); + form.clearInvalid(); + + + for (i = 0; i < length; i++) { + items[i].suspendEvents(); + } + + form.reset(); + + for (i = 0; i < length; i++) { + items[i].resumeEvents(); + } + }, + + completeEdit: function() { + var me = this, + form = me.getForm(); + + if (!form.isValid()) { + return; + } + + form.updateRecord(me.context.record); + me.hide(); + return true; + }, + + onShow: function() { + this.callParent(arguments); + this.reposition(); + }, + + onHide: function() { + var me = this; + me.callParent(arguments); + if (me.tooltip) { + me.hideToolTip(); + } + if (me.context) { + me.context.view.focus(); + me.context = null; + } + }, + + isDirty: function() { + var me = this, + form = me.getForm(); + return form.isDirty(); + }, + + getToolTip: function() { + return this.tooltip || (this.tooltip = new Ext.tip.ToolTip({ + cls: Ext.baseCSSPrefix + 'grid-row-editor-errors', + title: this.errorsText, + autoHide: false, + closable: true, + closeAction: 'disable', + anchor: 'left', + anchorToTarget: false + })); + }, + + hideToolTip: function() { + var me = this, + tip = me.getToolTip(); + if (tip.rendered) { + tip.disable(); + } + me.hiddenTip = false; + }, + + showToolTip: function() { + var me = this, + tip = me.getToolTip(); + + tip.showAt([0, 0]); + tip.update(me.getErrors()); + me.repositionTip(); + tip.enable(); + }, + + repositionTip: function() { + var me = this, + tip = me.getToolTip(), + context = me.context, + row = Ext.get(context.row), + viewEl = context.grid.view.el, + viewHeight = viewEl.getHeight(), + viewTop = me.lastScrollTop, + viewBottom = viewTop + viewHeight, + rowHeight = row.getHeight(), + rowTop = row.dom.offsetTop, + rowBottom = rowTop + rowHeight; + + if (rowBottom > viewTop && rowTop < viewBottom) { + tip.showAt(tip.getAlignToXY(viewEl, 'tl-tr', [15, row.getOffsetsTo(viewEl)[1]])); + me.hiddenTip = false; + } else { + tip.hide(); + me.hiddenTip = true; + } + }, + + getErrors: function() { + var me = this, + dirtyText = !me.autoCancel && me.isDirty() ? me.dirtyText + '
    ' : '', + errors = [], + fields = me.query('>[isFormField]'), + length = fields.length, + i; + + for (i = 0; i < length; i++) { + errors = errors.concat( + Ext.Array.map(fields[i].getErrors(), me.createListItem) + ); + } + + return dirtyText + '
      ' + errors.join('') + '
    '; + }, + + createListItem: function(e) { + return '
  • ' + e + '
  • '; + }, + + beforeDestroy: function(){ + Ext.destroy(this.floatingButtons, this.tooltip); + this.callParent(); + } +}); + + +Ext.define('Ext.grid.plugin.HeaderResizer', { + extend: Ext.AbstractPlugin , + + alias: 'plugin.gridheaderresizer', + + disabled: false, + + config: { + + dynamic: false + }, + + colHeaderCls: Ext.baseCSSPrefix + 'column-header', + + minColWidth: 40, + maxColWidth: 1000, + wResizeCursor: 'col-resize', + eResizeCursor: 'col-resize', + + + + + + init: function(headerCt) { + this.headerCt = headerCt; + headerCt.on('render', this.afterHeaderRender, this, {single: true}); + }, + + + destroy: function() { + if (this.tracker) { + this.tracker.destroy(); + } + }, + + afterHeaderRender: function() { + var headerCt = this.headerCt, + el = headerCt.el; + + headerCt.mon(el, 'mousemove', this.onHeaderCtMouseMove, this); + + this.tracker = new Ext.dd.DragTracker({ + disabled: this.disabled, + onBeforeStart: Ext.Function.bind(this.onBeforeStart, this), + onStart: Ext.Function.bind(this.onStart, this), + onDrag: Ext.Function.bind(this.onDrag, this), + onEnd: Ext.Function.bind(this.onEnd, this), + tolerance: 3, + autoStart: 300, + el: el + }); + }, + + + + + onHeaderCtMouseMove: function(e, t) { + var me = this, + prevSiblings, + headerEl, overHeader, resizeHeader, resizeHeaderOwnerGrid, ownerGrid; + + if (me.headerCt.dragging) { + if (me.activeHd) { + me.activeHd.el.dom.style.cursor = ''; + delete me.activeHd; + } + } else { + headerEl = e.getTarget('.' + me.colHeaderCls, 3, true); + + if (headerEl){ + overHeader = Ext.getCmp(headerEl.id); + + + if (overHeader.isOnLeftEdge(e)) { + resizeHeader = overHeader.previousNode('gridcolumn:not([hidden]):not([isGroupHeader])') + + if (resizeHeader) { + + ownerGrid = me.headerCt.up('tablepanel'); + resizeHeaderOwnerGrid = resizeHeader.up('tablepanel'); + + + + + if (!((resizeHeaderOwnerGrid === ownerGrid) || ((ownerGrid.ownerCt.isXType('tablepanel')) && ownerGrid.ownerCt.view.lockedGrid === resizeHeaderOwnerGrid))) { + resizeHeader = null; + } + } + } + + else if (overHeader.isOnRightEdge(e)) { + resizeHeader = overHeader; + } + + else { + resizeHeader = null; + } + + + if (resizeHeader) { + + + + if (resizeHeader.isGroupHeader) { + prevSiblings = resizeHeader.getGridColumns(); + resizeHeader = prevSiblings[prevSiblings.length - 1]; + } + + + + if (resizeHeader && !(resizeHeader.fixed || (resizeHeader.resizable === false) || me.disabled)) { + me.activeHd = resizeHeader; + overHeader.el.dom.style.cursor = me.eResizeCursor; + if (overHeader.triggerEl) { + overHeader.triggerEl.dom.style.cursor = me.eResizeCursor; + } + } + + } else { + overHeader.el.dom.style.cursor = ''; + if (overHeader.triggerEl) { + overHeader.triggerEl.dom.style.cursor = ''; + } + me.activeHd = null; + } + } + } + }, + + + onBeforeStart : function(e) { + + this.dragHd = this.activeHd; + + if (!!this.dragHd && !this.headerCt.dragging) { + this.tracker.constrainTo = this.getConstrainRegion(); + return true; + } else { + this.headerCt.dragging = false; + return false; + } + }, + + + getConstrainRegion: function() { + var me = this, + dragHdEl = me.dragHd.el, + nextHd; + + + + if (me.headerCt.forceFit) { + nextHd = me.dragHd.nextNode('gridcolumn:not([hidden]):not([isGroupHeader])'); + if (!me.headerInSameGrid(nextHd)) { + nextHd = null; + } + } + + return me.adjustConstrainRegion( + Ext.util.Region.getRegion(dragHdEl), + 0, + me.headerCt.forceFit ? (nextHd ? nextHd.getWidth() - me.minColWidth : 0) : me.maxColWidth - dragHdEl.getWidth(), + 0, + me.minColWidth + ); + }, + + + + onStart: function(e){ + var me = this, + dragHd = me.dragHd, + width = dragHd.el.getWidth(), + headerCt = dragHd.getOwnerHeaderCt(), + x, y, gridSection, markerOwner, lhsMarker, rhsMarker, markerHeight; + + me.headerCt.dragging = true; + me.origWidth = width; + + + if (!me.dynamic) { + gridSection = markerOwner = headerCt.up('tablepanel'); + if (gridSection.ownerLockable) { + markerOwner = gridSection.ownerLockable; + } + x = me.getLeftMarkerX(markerOwner); + lhsMarker = markerOwner.getLhsMarker(); + rhsMarker = markerOwner.getRhsMarker(); + markerHeight = gridSection.body.getHeight() + headerCt.getHeight(); + y = headerCt.getOffsetsTo(markerOwner)[1]; + + lhsMarker.setLocalY(y); + rhsMarker.setLocalY(y); + lhsMarker.setHeight(markerHeight); + rhsMarker.setHeight(markerHeight); + me.setMarkerX(lhsMarker, x); + me.setMarkerX(rhsMarker, x + width); + } + }, + + + onDrag: function(e){ + var me = this, + markerOwner; + + if (me.dynamic) { + me.doResize(); + } else { + markerOwner = this.headerCt.up('tablepanel'); + if (markerOwner.ownerLockable) { + markerOwner = markerOwner.ownerLockable; + } + this.setMarkerX(this.getMovingMarker(markerOwner), this.calculateDragX(markerOwner)); + } + }, + + getMovingMarker: function(markerOwner){ + return markerOwner.getRhsMarker(); + }, + + onEnd: function(e) { + this.headerCt.dragging = false; + if (this.dragHd) { + if (!this.dynamic) { + var markerOwner = this.headerCt.up('tablepanel'); + + + if (markerOwner.ownerLockable) { + markerOwner = markerOwner.ownerLockable; + } + this.setMarkerX(markerOwner.getLhsMarker(), -9999); + this.setMarkerX(markerOwner.getRhsMarker(), -9999); + } + this.doResize(); + } + }, + + doResize: function() { + var me = this, + dragHd = me.dragHd, + nextHd, + offset; + + if (dragHd) { + offset = me.tracker.getOffset('point'); + + + if (dragHd.flex) { + delete dragHd.flex; + } + + Ext.suspendLayouts(); + + + me.adjustColumnWidth(offset[0]); + + + + if (me.headerCt.forceFit) { + nextHd = dragHd.nextNode('gridcolumn:not([hidden]):not([isGroupHeader])'); + if (!me.headerInSameGrid(nextHd)) { + nextHd = null; + } + if (nextHd) { + delete nextHd.flex; + nextHd.setWidth(nextHd.getWidth() - offset[0]); + } + } + + + Ext.resumeLayouts(true); + } + }, + + + headerInSameGrid: function(header) { + var grid = this.dragHd.up('tablepanel'); + + return !!header.up(grid); + }, + + disable: function() { + this.disabled = true; + if (this.tracker) { + this.tracker.disable(); + } + }, + + enable: function() { + this.disabled = false; + if (this.tracker) { + this.tracker.enable(); + } + }, + + calculateDragX: function(markerOwner) { + return this.tracker.getXY('point')[0] - markerOwner.getX() - markerOwner.el.getBorderWidth('l'); + }, + + getLeftMarkerX: function(markerOwner) { + return this.dragHd.getX() - markerOwner.getX() - markerOwner.el.getBorderWidth('l') - 1; + }, + + setMarkerX: function(marker, x) { + marker.setLocalX(x); + }, + + adjustConstrainRegion: function(region, t, r, b, l) { + return region.adjust(t, r, b, l); + }, + + adjustColumnWidth: function(offsetX) { + this.dragHd.setWidth(this.origWidth + offsetX); + } +}); + + +Ext.define('Ext.grid.header.DragZone', { + extend: Ext.dd.DragZone , + colHeaderCls: Ext.baseCSSPrefix + 'column-header', + maxProxyWidth: 120, + + constructor: function(headerCt) { + this.headerCt = headerCt; + this.ddGroup = this.getDDGroup(); + this.callParent([headerCt.el]); + this.proxy.el.addCls(Ext.baseCSSPrefix + 'grid-col-dd'); + }, + + getDDGroup: function() { + return 'header-dd-zone-' + this.headerCt.up('[scrollerOwner]').id; + }, + + getDragData: function(e) { + var header = e.getTarget('.'+this.colHeaderCls), + headerCmp, + ddel; + + if (header) { + headerCmp = Ext.getCmp(header.id); + if (!this.headerCt.dragging && headerCmp.draggable && !(headerCmp.isOnLeftEdge(e) || headerCmp.isOnRightEdge(e))) { + ddel = document.createElement('div'); + ddel.innerHTML = Ext.getCmp(header.id).text; + return { + ddel: ddel, + header: headerCmp + }; + } + } + return false; + }, + + onBeforeDrag: function() { + return !(this.headerCt.dragging || this.disabled); + }, + + onInitDrag: function() { + this.headerCt.dragging = true; + this.callParent(arguments); + }, + + onDragDrop: function() { + this.headerCt.dragging = false; + this.callParent(arguments); + }, + + afterRepair: function() { + this.callParent(); + this.headerCt.dragging = false; + }, + + getRepairXY: function() { + return this.dragData.header.el.getXY(); + }, + + disable: function() { + this.disabled = true; + }, + + enable: function() { + this.disabled = false; + } +}); + + +Ext.define('Ext.grid.header.DropZone', { + extend: Ext.dd.DropZone , + colHeaderCls: Ext.baseCSSPrefix + 'column-header', + proxyOffsets: [-4, -9], + + constructor: function(headerCt){ + this.headerCt = headerCt; + this.ddGroup = this.getDDGroup(); + this.callParent([headerCt.el]); + }, + + getDDGroup: function() { + return 'header-dd-zone-' + this.headerCt.up('[scrollerOwner]').id; + }, + + getTargetFromEvent : function(e){ + return e.getTarget('.' + this.colHeaderCls); + }, + + getTopIndicator: function() { + if (!this.topIndicator) { + this.self.prototype.topIndicator = Ext.DomHelper.append(Ext.getBody(), { + cls: "col-move-top", + html: " " + }, true); + this.self.prototype.indicatorXOffset = Math.floor((this.topIndicator.dom.offsetWidth + 1) / 2); + } + return this.topIndicator; + }, + + getBottomIndicator: function() { + if (!this.bottomIndicator) { + this.self.prototype.bottomIndicator = Ext.DomHelper.append(Ext.getBody(), { + cls: "col-move-bottom", + html: " " + }, true); + } + return this.bottomIndicator; + }, + + getLocation: function(e, t) { + var x = e.getXY()[0], + region = Ext.fly(t).getRegion(), + pos; + + if ((region.right - x) <= (region.right - region.left) / 2) { + pos = "after"; + } else { + pos = "before"; + } + return { + pos: pos, + header: Ext.getCmp(t.id), + node: t + }; + }, + + positionIndicator: function(data, node, e){ + var me = this, + dragHeader = data.header, + dropLocation = me.getLocation(e, node), + targetHeader = dropLocation.header, + pos = dropLocation.pos, + fromHeader, + toHeader, + nextHd, + prevHd, + topIndicator, bottomIndicator, topAnchor, bottomAnchor, + topXY, bottomXY, headerCtEl, minX, maxX, + allDropZones, ln, i, dropZone; + + + if (targetHeader === me.lastTargetHeader && pos === me.lastDropPos) { + return; + } + fromHeader = dragHeader.up('headercontainer:not(gridcolumn)'); + toHeader = targetHeader.up('headercontainer:not(gridcolumn)'); + nextHd = dragHeader.nextSibling('gridcolumn:not([hidden])'); + prevHd = dragHeader.previousSibling('gridcolumn:not([hidden])'); + me.lastTargetHeader = targetHeader; + me.lastDropPos = pos; + + + if (!targetHeader.draggable && pos === 'before' && targetHeader.getIndex() === 0) { + return false; + } + + + data.isLock = data.isUnlock = false; + if (fromHeader !== toHeader && fromHeader.lockableInjected && toHeader.lockableInjected && toHeader.lockedCt) { + data.isLock = true; + } else if (fromHeader !== toHeader && fromHeader.lockableInjected && toHeader.lockableInjected && fromHeader.lockedCt) { + data.isUnlock = true; + } + + + + if ((data.isUnlock && dragHeader.lockable === false) || (data.isLock && !dragHeader.isLockable())) { + return false; + } + + data.dropLocation = dropLocation; + + if ((dragHeader !== targetHeader) && + ((pos === "before" && nextHd !== targetHeader) || + (pos === "after" && prevHd !== targetHeader)) && + !targetHeader.isDescendantOf(dragHeader)) { + + + + + allDropZones = Ext.dd.DragDropManager.getRelated(me); + ln = allDropZones.length; + i = 0; + + for (; i < ln; i++) { + dropZone = allDropZones[i]; + if (dropZone !== me && dropZone.invalidateDrop) { + dropZone.invalidateDrop(); + } + } + + me.valid = true; + topIndicator = me.getTopIndicator(); + bottomIndicator = me.getBottomIndicator(); + if (pos === 'before') { + topAnchor = 'bc-tl'; + bottomAnchor = 'tc-bl'; + } else { + topAnchor = 'bc-tr'; + bottomAnchor = 'tc-br'; + } + + + topXY = topIndicator.getAlignToXY(targetHeader.el, topAnchor); + bottomXY = bottomIndicator.getAlignToXY(targetHeader.el, bottomAnchor); + + + headerCtEl = me.headerCt.el; + minX = headerCtEl.getX() - me.indicatorXOffset; + maxX = headerCtEl.getX() + headerCtEl.getWidth(); + + topXY[0] = Ext.Number.constrain(topXY[0], minX, maxX); + bottomXY[0] = Ext.Number.constrain(bottomXY[0], minX, maxX); + + + topIndicator.setXY(topXY); + bottomIndicator.setXY(bottomXY); + topIndicator.show(); + bottomIndicator.show(); + + + } else { + me.invalidateDrop(); + } + }, + + invalidateDrop: function() { + this.valid = false; + this.hideIndicators(); + }, + + onNodeOver: function(node, dragZone, e, data) { + var me = this, + doPosition = true, + from = data.header, + to; + + if (data.header.el.dom === node) { + doPosition = false; + } else { + to = me.getLocation(e, node).header; + doPosition = (from.ownerCt === to.ownerCt) || (!from.ownerCt.sealed && !to.ownerCt.sealed); + } + + if (doPosition) { + me.positionIndicator(data, node, e); + } else { + me.valid = false; + } + return me.valid ? me.dropAllowed : me.dropNotAllowed; + }, + + hideIndicators: function() { + var me = this; + + me.getTopIndicator().hide(); + me.getBottomIndicator().hide(); + me.lastTargetHeader = me.lastDropPos = null; + + }, + + onNodeOut: function() { + this.hideIndicators(); + }, + + onNodeDrop: function(node, dragZone, e, data) { + if (this.valid) { + var dragHeader = data.header, + dropLocation = data.dropLocation, + targetHeader = dropLocation.header, + fromCt = dragHeader.ownerCt, + localFromIdx = fromCt.items.indexOf(dragHeader), + toCt = targetHeader.ownerCt, + localToIdx = toCt.items.indexOf(targetHeader), + headerCt = this.headerCt, + fromIdx = headerCt.getHeaderIndex(dragHeader), + colsToMove = dragHeader.isGroupHeader ? dragHeader.query(':not([isGroupHeader])').length : 1, + toIdx = headerCt.getHeaderIndex(targetHeader), + sameCt = fromCt === toCt, + scrollerOwner, savedWidth; + + + if (dropLocation.pos === 'after') { + localToIdx++; + toIdx += targetHeader.isGroupHeader ? targetHeader.query(':not([isGroupHeader])').length : 1; + } + + + + + if (data.isLock) { + scrollerOwner = fromCt.up('[scrollerOwner]'); + scrollerOwner.lock(dragHeader, localToIdx); + data.isLock = false; + + + this.onNodeDrop(node, dragZone, e, data); + } else if (data.isUnlock) { + scrollerOwner = fromCt.up('[scrollerOwner]'); + scrollerOwner.unlock(dragHeader, localToIdx); + data.isUnlock = false; + + + this.onNodeDrop(node, dragZone, e, data); + } + + + else { + this.invalidateDrop(); + + savedWidth = dragHeader.getWidth(); + + + if (sameCt) { + + + + if (localToIdx === localFromIdx) { + + headerCt.onHeaderMoved(dragHeader, colsToMove, fromIdx, toIdx); + return; + } + + if (localToIdx > localFromIdx) { + localToIdx -= 1; + } + } + + + Ext.suspendLayouts(); + + if (sameCt) { + toCt.move(localFromIdx, localToIdx); + } else { + fromCt.remove(dragHeader, false); + toCt.insert(localToIdx, dragHeader); + } + + + + + if (toCt.isGroupHeader) { + + if (!sameCt) { + dragHeader.savedFlex = dragHeader.flex; + delete dragHeader.flex; + dragHeader.width = savedWidth; + } + } else { + if (dragHeader.savedFlex) { + dragHeader.flex = dragHeader.savedFlex; + delete dragHeader.width; + } + } + + + headerCt.purgeCache(); + Ext.resumeLayouts(true); + headerCt.onHeaderMoved(dragHeader, colsToMove, fromIdx, toIdx); + + + } + } + } +}); + + +Ext.define('Ext.grid.plugin.HeaderReorderer', { + extend: Ext.AbstractPlugin , + + alias: 'plugin.gridheaderreorderer', + + init: function(headerCt) { + this.headerCt = headerCt; + headerCt.on({ + render: this.onHeaderCtRender, + single: true, + scope: this + }); + }, + + + destroy: function() { + Ext.destroy(this.dragZone, this.dropZone); + }, + + onHeaderCtRender: function() { + var me = this; + + me.dragZone = new Ext.grid.header.DragZone(me.headerCt); + me.dropZone = new Ext.grid.header.DropZone(me.headerCt); + if (me.disabled) { + me.dragZone.disable(); + } + }, + + enable: function() { + this.disabled = false; + if (this.dragZone) { + this.dragZone.enable(); + } + }, + + disable: function() { + this.disabled = true; + if (this.dragZone) { + this.dragZone.disable(); + } + } +}); + + +Ext.define('Ext.grid.header.Container', { + extend: Ext.container.Container , + + + + + + + + + + + + border: true, + + alias: 'widget.headercontainer', + + baseCls: Ext.baseCSSPrefix + 'grid-header-ct', + dock: 'top', + + + weight: 100, + + defaultType: 'gridcolumn', + + detachOnRemove: false, + + + defaultWidth: 100, + + + + + sortAscText: 'Sort Ascending', + + + sortDescText: 'Sort Descending', + + + sortClearText: 'Clear Sort', + + + columnsText: 'Columns', + + + headerOpenCls: Ext.baseCSSPrefix + 'column-header-open', + + menuSortAscCls: Ext.baseCSSPrefix + 'hmenu-sort-asc', + + menuSortDescCls: Ext.baseCSSPrefix + 'hmenu-sort-desc', + + menuColsIcon: Ext.baseCSSPrefix + 'cols-icon', + + + triStateSort: false, + + ddLock: false, + + dragging: false, + + + + + sortable: true, + + + enableColumnHide: true, + + initComponent: function() { + var me = this; + + me.headerCounter = 0; + me.plugins = me.plugins || []; + + + + + + + if (!me.isHeader) { + if (me.enableColumnResize) { + me.resizer = new Ext.grid.plugin.HeaderResizer(); + me.plugins.push(me.resizer); + } + if (me.enableColumnMove) { + me.reorderer = new Ext.grid.plugin.HeaderReorderer(); + me.plugins.push(me.reorderer); + } + } + + + if (me.isHeader && !me.items) { + me.layout = me.layout || 'container'; + } + + else { + me.layout = Ext.apply({ + type: 'gridcolumn', + align: 'stretchmax' + }, me.initialConfig.layout); + } + me.defaults = me.defaults || {}; + Ext.applyIf(me.defaults, { + triStateSort: me.triStateSort, + sortable: me.sortable + }); + + me.menuTask = new Ext.util.DelayedTask(me.updateMenuDisabledState, me); + me.callParent(); + me.addEvents( + + 'columnresize', + + + 'headerclick', + + + 'headercontextmenu', + + + 'headertriggerclick', + + + 'columnmove', + + 'columnhide', + + 'columnshow', + + 'columnschanged', + + 'sortchange', + + 'menucreate' + ); + }, + + isLayoutRoot: function(){ + + + + + + if (this.hiddenHeaders) { + return false; + } + return this.callParent(); + }, + + + getOwnerHeaderCt: function() { + var me = this; + return me.isRootHeader ? me : me.up('[isRootHeader]'); + }, + + onDestroy: function() { + var me = this; + + if (me.menu) { + me.menu.un('hide', me.onMenuHide, me); + } + me.menuTask.cancel(); + Ext.destroy(me.resizer, me.reorderer); + me.callParent(); + }, + + applyColumnsState: function(columns) { + if (!columns || !columns.length) { + return; + } + + var me = this, + items = me.items.items, + count = items.length, + i = 0, + length = columns.length, + c, col, columnState, index; + + for (c = 0; c < length; c++) { + columnState = columns[c]; + + for (index = count; index--; ) { + col = items[index]; + if (col.getStateId && col.getStateId() == columnState.id) { + + + + + if (i !== index) { + me.moveHeader(index, i); + } + + if (col.applyColumnState) { + col.applyColumnState(columnState); + } + ++i; + break; + } + } + } + }, + + getColumnsState: function () { + var me = this, + columns = [], + state; + + me.items.each(function (col) { + state = col.getColumnState && col.getColumnState(); + if (state) { + columns.push(state); + } + }); + + return columns; + }, + + + + + onAdd: function(c) { + var me = this; + + if (!c.headerId) { + c.headerId = c.initialConfig.id || Ext.id(null, 'header-'); + } + + + if (!c.getStateId()) { + + + + + c.stateId = c.initialConfig.id || ('h' + (++me.headerCounter)); + } + + me.callParent(arguments); + me.onColumnsChanged(); + }, + + onMove: function() { + this.callParent(arguments); + this.onColumnsChanged(); + }, + + onShow: function() { + this.callParent(arguments); + this.onColumnsChanged(); + }, + + + + + onColumnsChanged: function() { + var topHeaderCt = this.getOwnerHeaderCt(); + + if (topHeaderCt) { + topHeaderCt.purgeCache(); + if (this.rendered) { + topHeaderCt.fireEvent('columnschanged', topHeaderCt); + } + } + }, + + + + + onRemove: function(c) { + var me = this, + ownerCt = me.ownerCt; + + me.callParent(arguments); + + + if (!me.destroying) { + me.onColumnsChanged(); + if (me.isGroupHeader && !me.items.getCount() && ownerCt) { + + + + me.detachComponent(c); + + + Ext.suspendLayouts(); + ownerCt.remove(me); + Ext.resumeLayouts(true); + } + } + }, + + + applyDefaults: function(config) { + var ret; + + if (config && !config.isComponent && config.xtype == 'rownumberer') { + ret = config; + } else { + ret = this.callParent(arguments); + + + if (!config.isGroupHeader && !('width' in ret) && !ret.flex) { + ret.width = this.defaultWidth; + } + } + return ret; + }, + + setSortState: function(){ + var store = this.up('[store]').store, + + + first = store.getFirstSorter(), + hd; + + if (first) { + hd = this.down('gridcolumn[dataIndex=' + first.property +']'); + if (hd) { + hd.setSortState(first.direction, false, true); + } + } else { + this.clearOtherSortStates(null); + } + }, + + getHeaderMenu: function(){ + var menu = this.getMenu(), + item; + + if (menu) { + item = menu.child('#columnItem'); + if (item) { + return item.menu; + } + } + return null; + }, + + onHeaderVisibilityChange: function(header, visible){ + var me = this, + menu = me.getHeaderMenu(), + item; + + if (menu) { + + item = me.getMenuItemForHeader(menu, header); + if (item) { + item.setChecked(visible, true); + } + + if (menu.isVisible()) { + me.menuTask.delay(50); + } + } + }, + + updateMenuDisabledState: function(menu) { + var me = this, + columns = me.query(':not([hidden])'), + i, + len = columns.length, + item, + checkItem, + method; + + + if (!menu) { + menu = me.getMenu(); + } + + for (i = 0; i < len; ++i) { + item = columns[i]; + checkItem = me.getMenuItemForHeader(menu, item); + if (checkItem) { + method = item.isHideable() ? 'enable' : 'disable'; + if (checkItem.menu) { + method += 'CheckChange'; + } + checkItem[method](); + } + } + }, + + getMenuItemForHeader: function(menu, header) { + return header ? menu.down('menucheckitem[headerId=' + header.id + ']') : null; + }, + + onHeaderShow: function(header) { + + var me = this, + gridSection = me.ownerCt; + + if (me.forceFit) { + delete me.flex; + + } + + me.onHeaderVisibilityChange(header, true); + + + + if (!header.isGroupHeader) { + if (gridSection) { + gridSection.onHeaderShow(me, header); + } + } + me.fireEvent('columnshow', me, header); + me.fireEvent('columnschanged', this); + }, + + onHeaderHide: function(header) { + + var me = this, + gridSection = me.ownerCt; + + me.onHeaderVisibilityChange(header, false); + + + if (!header.isGroupHeader) { + if (gridSection) { + gridSection.onHeaderHide(me, header); + } + } + me.fireEvent('columnhide', me, header); + me.fireEvent('columnschanged', this); + }, + + + tempLock: function() { + this.ddLock = true; + Ext.Function.defer(function() { + this.ddLock = false; + }, 200, this); + }, + + onHeaderResize: function(header, w, suppressFocus) { + var me = this, + view = me.view, + gridSection = me.ownerCt; + + + if (view && view.body.dom) { + me.tempLock(); + if (gridSection) { + gridSection.onHeaderResize(me, header, w); + } + } + me.fireEvent('columnresize', this, header, w); + }, + + onHeaderClick: function(header, e, t) { + header.fireEvent('headerclick', this, header, e, t); + this.fireEvent('headerclick', this, header, e, t); + }, + + onHeaderContextMenu: function(header, e, t) { + header.fireEvent('headercontextmenu', this, header, e, t); + this.fireEvent('headercontextmenu', this, header, e, t); + }, + + onHeaderTriggerClick: function(header, e, t) { + + var me = this; + if (header.fireEvent('headertriggerclick', me, header, e, t) !== false && me.fireEvent('headertriggerclick', me, header, e, t) !== false) { + me.showMenuBy(t, header); + } + }, + + showMenuBy: function(t, header) { + var menu = this.getMenu(), + ascItem = menu.down('#ascItem'), + descItem = menu.down('#descItem'), + sortableMth; + + + + menu.activeHeader = menu.ownerButton = header; + header.setMenuActive(true); + + + sortableMth = header.sortable ? 'enable' : 'disable'; + if (ascItem) { + ascItem[sortableMth](); + } + if (descItem) { + descItem[sortableMth](); + } + menu.showBy(t); + }, + + + onMenuHide: function(menu) { + menu.activeHeader.setMenuActive(false); + }, + + moveHeader: function(fromIdx, toIdx) { + + this.tempLock(); + this.onHeaderMoved(this.move(fromIdx, toIdx), 1, fromIdx, toIdx); + }, + + purgeCache: function() { + var me = this, + menu = me.menu; + + + me.gridDataColumns = me.hideableColumns = null; + + + + if (menu && menu.hidden) { + + menu.hide(); + menu.destroy(); + me.menu = null; + } + }, + + onHeaderMoved: function(header, colsToMove, fromIdx, toIdx) { + var me = this, + gridSection = me.ownerCt; + + if (gridSection && gridSection.onHeaderMove) { + gridSection.onHeaderMove(me, header, colsToMove, fromIdx, toIdx); + } + me.fireEvent("columnmove", me, header, fromIdx, toIdx); + }, + + + getMenu: function() { + var me = this; + + if (!me.menu) { + me.menu = new Ext.menu.Menu({ + hideOnParentHide: false, + items: me.getMenuItems(), + listeners: { + hide: me.onMenuHide, + scope: me + } + }); + me.fireEvent('menucreate', me, me.menu); + } + me.updateMenuDisabledState(me.menu); + return me.menu; + }, + + + getMenuItems: function() { + var me = this, + menuItems = [], + hideableColumns = me.enableColumnHide ? me.getColumnMenu(me) : null; + + if (me.sortable) { + menuItems = [{ + itemId: 'ascItem', + text: me.sortAscText, + cls: me.menuSortAscCls, + handler: me.onSortAscClick, + scope: me + },{ + itemId: 'descItem', + text: me.sortDescText, + cls: me.menuSortDescCls, + handler: me.onSortDescClick, + scope: me + }]; + } + if (hideableColumns && hideableColumns.length) { + if (me.sortable) { + menuItems.push('-'); + } + menuItems.push({ + itemId: 'columnItem', + text: me.columnsText, + cls: me.menuColsIcon, + menu: hideableColumns, + hideOnClick: false + }); + } + return menuItems; + }, + + + onSortAscClick: function() { + var menu = this.getMenu(), + activeHeader = menu.activeHeader; + + activeHeader.setSortState('ASC'); + }, + + + onSortDescClick: function() { + var menu = this.getMenu(), + activeHeader = menu.activeHeader; + + activeHeader.setSortState('DESC'); + }, + + + getColumnMenu: function(headerContainer) { + var menuItems = [], + i = 0, + item, + items = headerContainer.query('>gridcolumn[hideable]'), + itemsLn = items.length, + menuItem; + + for (; i < itemsLn; i++) { + item = items[i]; + menuItem = new Ext.menu.CheckItem({ + text: item.menuText || item.text, + checked: !item.hidden, + hideOnClick: false, + headerId: item.id, + menu: item.isGroupHeader ? this.getColumnMenu(item) : undefined, + checkHandler: this.onColumnCheckChange, + scope: this + }); + menuItems.push(menuItem); + + + + item.on({ + destroy: Ext.Function.bind(menuItem.destroy, menuItem) + }); + } + return menuItems; + }, + + onColumnCheckChange: function(checkItem, checked) { + var header = Ext.getCmp(checkItem.headerId); + header[checked ? 'show' : 'hide'](); + }, + + + getColumnCount: function() { + return this.getGridColumns().length; + }, + + + getFullWidth: function() { + var fullWidth = 0, + headers = this.getVisibleGridColumns(), + headersLn = headers.length, + i = 0, + header; + + + for (; i < headersLn; i++) { + header = headers[i]; + + if (header.getDesiredWidth) { + fullWidth += header.getDesiredWidth() || 0; + + } else { + fullWidth += header.getWidth(); + } + } + return fullWidth; + }, + + + clearOtherSortStates: function(activeHeader) { + var headers = this.getGridColumns(), + headersLn = headers.length, + i = 0; + + for (; i < headersLn; i++) { + if (headers[i] !== activeHeader) { + + headers[i].setSortState(null, true); + } + } + }, + + + getVisibleGridColumns: function() { + var allColumns = this.getGridColumns(), + result = [], + len = allColumns.length, i; + + + + for (i = 0; i < len; i++) { + if (!allColumns[i].hidden) { + result[result.length] = allColumns[i]; + } + } + return result; + }, + + + getGridColumns: function(inResult, hiddenAncestor) { + if (!inResult && this.gridDataColumns) { + return this.gridDataColumns; + } + + var me = this, + result = inResult || [], + items, i, len, item, + lastVisibleColumn; + + hiddenAncestor = hiddenAncestor || me.hidden; + if (me.items) { + items = me.items.items; + for (i = 0, len = items.length; i < len; i++) { + item = items[i]; + if (item.isGroupHeader) { + item.getGridColumns(result, hiddenAncestor); + } else { + item.hiddenAncestor = hiddenAncestor; + result.push(item); + } + } + } + if (!inResult) { + me.gridDataColumns = result; + } + + + if (!inResult && len) { + + for (i = 0, len = result.length; i < len; i++) { + item = result[i]; + item.isFirstVisible = item.isLastVisible = false; + if (!item.hidden || item.hiddenAncestor) { + if (!lastVisibleColumn) { + item.isFirstVisible = true; + } + lastVisibleColumn = item; + } + } + + if (lastVisibleColumn) { + lastVisibleColumn.isLastVisible = true; + } + } + + return result; + }, + + + getHideableColumns: function() { + var me = this, + result = me.hideableColumns; + + if (!result) { + result = me.hideableColumns = me.query('[hideable]'); + } + return result; + }, + + + getHeaderIndex: function(header) { + + if (header.isGroupHeader) { + header = header.down(':not([isGroupHeader])'); + } + return Ext.Array.indexOf(this.getGridColumns(), header); + }, + + + getHeaderAtIndex: function(index) { + var columns = this.getGridColumns(); + return columns.length ? columns[index] : null; + }, + + + getVisibleHeaderClosestToIndex: function(index) { + var result = this.getHeaderAtIndex(index); + if (result && result.hidden) { + result = result.next(':not([hidden])') || result.prev(':not([hidden])'); + } + return result; + }, + + autoSizeColumn : function(header) { + var view = this.view; + if (view) { + view.autoSizeColumn(header); + } + } +}); + + +Ext.define('Ext.grid.column.Column', { + extend: Ext.grid.header.Container , + alias: 'widget.gridcolumn', + + alternateClassName: 'Ext.grid.Column', + + baseCls: Ext.baseCSSPrefix + 'column-header', + + + hoverCls: Ext.baseCSSPrefix + 'column-header-over', + + handleWidth: 4, + + sortState: null, + + possibleSortStates: ['ASC', 'DESC'], + + childEls: [ + 'titleEl', 'triggerEl', 'textEl' + ], + + renderTpl: + '
    ' + + '' + + '{text}' + + '' + + ''+ + '
    ' + + '
    ' + + '
    ' + + '{%this.renderContainer(out,values)%}', + + + + + + + dataIndex: null, + + + text: ' ', + + + + + menuText: null, + + + emptyCellText: ' ', + + + sortable: true, + + + + + + + + + + + resizable: true, + + + hideable: true, + + + menuDisabled: false, + + + renderer: false, + + + + + + + editRenderer: false, + + + align: 'left', + + + draggable: true, + + + + + tooltipType: 'qtip', + + + + initDraggable: Ext.emptyFn, + + + tdCls: '', + + + + + + + + + + + isHeader: true, + + ascSortCls: Ext.baseCSSPrefix + 'column-header-sort-ASC', + descSortCls: Ext.baseCSSPrefix + 'column-header-sort-DESC', + + componentLayout: 'columncomponent', + + groupSubHeaderCls: Ext.baseCSSPrefix + 'group-sub-header', + + groupHeaderCls: Ext.baseCSSPrefix + 'group-header', + + + detachOnRemove : true, + + + initResizable: Ext.emptyFn, + + initComponent: function() { + var me = this, + renderer, + listeners; + + if (Ext.isDefined(me.header)) { + me.text = me.header; + delete me.header; + } + + if (!me.triStateSort) { + me.possibleSortStates.length = 2; + } + + + if (Ext.isDefined(me.columns)) { + me.isGroupHeader = true; + + + + me.items = me.columns; + delete me.columns; + delete me.flex; + delete me.width; + me.cls = (me.cls||'') + ' ' + me.groupHeaderCls; + me.sortable = false; + me.resizable = false; + me.align = 'center'; + } else { + + + me.isContainer = false; + + + + + if (me.flex) { + me.minWidth = me.minWidth || Ext.grid.plugin.HeaderResizer.prototype.minColWidth; + } + } + me.addCls(Ext.baseCSSPrefix + 'column-header-align-' + me.align); + + renderer = me.renderer; + if (renderer) { + + + if (typeof renderer == 'string') { + me.renderer = Ext.util.Format[renderer]; + } + me.hasCustomRenderer = true; + } else if (me.defaultRenderer) { + me.scope = me; + me.renderer = me.defaultRenderer; + } + + + me.callParent(arguments); + + listeners = { + element: 'el', + click: me.onElClick, + contextmenu: me.onElContextMenu, + scope: me + }; + if (me.resizable) { + listeners.dblclick = me.onElDblClick; + } + me.on(listeners); + me.on({ + element: 'titleEl', + mouseenter: me.onTitleMouseOver, + mouseleave: me.onTitleMouseOut, + scope: me + }); + }, + + onAdd: function(childHeader) { + childHeader.isSubHeader = true; + if (this.hidden) { + childHeader.hide(); + } + childHeader.addCls(this.groupSubHeaderCls); + this.callParent(arguments); + }, + + onRemove: function(childHeader) { + childHeader.isSubHeader = false; + childHeader.removeCls(this.groupSubHeaderCls); + this.callParent(arguments); + }, + + initRenderData: function() { + var me = this, + tipMarkup = '', + tip = me.tooltip, + attr = me.tooltipType == 'qtip' ? 'data-qtip' : 'title'; + + if (!Ext.isEmpty(tip)) { + tipMarkup = attr + '="' + tip + '" '; + } + + return Ext.applyIf(me.callParent(arguments), { + text: me.text, + menuDisabled: me.menuDisabled, + tipMarkup: tipMarkup + }); + }, + + applyColumnState: function (state) { + var me = this, + defined = Ext.isDefined; + + + me.applyColumnsState(state.columns); + + + + if (defined(state.hidden)) { + me.hidden = state.hidden; + } + if (defined(state.locked)) { + me.locked = state.locked; + } + if (defined(state.sortable)) { + me.sortable = state.sortable; + } + if (defined(state.width)) { + delete me.flex; + me.width = state.width; + } else if (defined(state.flex)) { + delete me.width; + me.flex = state.flex; + } + }, + + getColumnState: function () { + var me = this, + items = me.items.items, + + iLen = items ? items.length : 0, + i, + columns = [], + state = { + id: me.getStateId() + }; + + me.savePropsToState(['hidden', 'sortable', 'locked', 'flex', 'width'], state); + + if (me.isGroupHeader) { + for (i = 0; i < iLen; i++) { + columns.push(items[i].getColumnState()); + } + + if (columns.length) { + state.columns = columns; + } + } else if (me.isSubHeader && me.ownerCt.hidden) { + + delete me.hidden; + } + + if ('width' in state) { + delete state.flex; + } + return state; + }, + + getStateId: function () { + return this.stateId || this.headerId; + }, + + + setText: function(text) { + this.text = text; + if (this.rendered) { + this.textEl.update(text); + } + }, + + + getIndex: function() { + return this.isGroupColumn ? false : this.getOwnerHeaderCt().getHeaderIndex(this); + }, + + + getVisibleIndex: function() { + return this.isGroupColumn ? false : Ext.Array.indexOf(this.getOwnerHeaderCt().getVisibleGridColumns(), this); + }, + + beforeRender: function() { + var me = this, + grid = me.up('tablepanel'); + + me.callParent(); + + + + if (grid && (!me.sortable || grid.sortableColumns === false) && !me.groupable && + !me.lockable && (grid.enableColumnHide === false || + !me.getOwnerHeaderCt().getHideableColumns().length)) { + me.menuDisabled = true; + } + + me.protoEl.unselectable(); + }, + + afterRender: function() { + var me = this, + el = me.el; + + me.callParent(arguments); + + if (me.overCls) { + el.addClsOnOver(me.overCls); + } + + + + if (!Ext.isIE8 || !Ext.isStrict) { + me.mon(me.getFocusEl(), { + focus: me.onTitleMouseOver, + blur: me.onTitleMouseOut, + scope: me + }); + } + + me.keyNav = new Ext.util.KeyNav(el, { + enter: me.onEnterKey, + down: me.onDownKey, + scope: me + }); + }, + + + + afterComponentLayout: function(width, height, oldWidth, oldHeight) { + var me = this, + ownerHeaderCt = me.getOwnerHeaderCt(); + + me.callParent(arguments); + + if (ownerHeaderCt && (oldWidth != null || me.flex) && width !== oldWidth) { + ownerHeaderCt.onHeaderResize(me, width, true); + } + }, + + + + + setPadding: function(headerContext, availableHeight) { + var me = this, + textHeight = me.textEl.dom.offsetHeight, + titleEl = me.titleEl, + titleHeight = titleEl.dom.offsetHeight, + pt, pb; + + + availableHeight -= headerContext.borderInfo.height; + + + if (headerContext.innerCtContext) { + me.layout.innerCt.setHeight(availableHeight - titleHeight); + } + + else { + if (titleHeight < availableHeight) { + + + if (textHeight) { + titleHeight = availableHeight; + availableHeight -= textHeight; + pt = Math.floor(availableHeight / 2); + pb = availableHeight - pt; + titleEl.setStyle({ + paddingTop: pt + 'px', + paddingBottom: pb + 'px' + }); + } + } + } + + + if ((Ext.isIE6 || Ext.isIEQuirks) && me.triggerEl) { + me.triggerEl.setHeight(titleHeight); + } + }, + + onDestroy: function() { + var me = this; + + Ext.destroy(me.textEl, me.keyNav, me.field); + delete me.keyNav; + me.callParent(arguments); + }, + + onTitleMouseOver: function() { + this.titleEl.addCls(this.hoverCls); + }, + + onTitleMouseOut: function() { + this.titleEl.removeCls(this.hoverCls); + }, + + onDownKey: function(e) { + if (this.triggerEl) { + this.onElClick(e, this.triggerEl.dom || this.el.dom); + } + }, + + onEnterKey: function(e) { + this.onElClick(e, this.el.dom); + }, + + + onElDblClick: function(e, t) { + var me = this, + prev, + leafColumns; + + + if (me.isOnLeftEdge(e)) { + + + + prev = me.previousNode('gridcolumn:not([hidden]):not([isGroupHeader])'); + + + if (prev && prev.getOwnerHeaderCt() === me.getOwnerHeaderCt()) { + prev.autoSize(); + } + } + + else if (me.isOnRightEdge(e)) { + + + if (me.isGroupHeader && e.getPoint().isContainedBy(me.layout.innerCt)) { + leafColumns = me.query('gridcolumn:not([hidden]):not([isGroupHeader])'); + this.getOwnerHeaderCt().autoSizeColumn(leafColumns[leafColumns.length - 1]); + return; + } + me.autoSize(); + } + }, + + + autoSize: function() { + var me = this, + leafColumns, + numLeaves, i, + headerCt; + + + if (me.isGroupHeader) { + leafColumns = me.query('gridcolumn:not([hidden]):not([isGroupHeader])'); + numLeaves = leafColumns.length; + headerCt = this.getOwnerHeaderCt(); + Ext.suspendLayouts(); + for (i = 0; i < numLeaves; i++) { + headerCt.autoSizeColumn(leafColumns[i]); + } + Ext.resumeLayouts(true); + return; + } + this.getOwnerHeaderCt().autoSizeColumn(this); + }, + + onElClick: function(e, t) { + + + var me = this, + ownerHeaderCt = me.getOwnerHeaderCt(); + + if (ownerHeaderCt && !ownerHeaderCt.ddLock) { + + + if (me.triggerEl && (e.target === me.triggerEl.dom || t === me.triggerEl.dom || e.within(me.triggerEl))) { + ownerHeaderCt.onHeaderTriggerClick(me, e, t); + + } else if (e.getKey() || (!me.isOnLeftEdge(e) && !me.isOnRightEdge(e))) { + me.toggleSortState(); + ownerHeaderCt.onHeaderClick(me, e, t); + } + } + }, + + onElContextMenu: function(e, t) { + + var me = this, + ownerHeaderCt = me.getOwnerHeaderCt(); + + if (ownerHeaderCt && !ownerHeaderCt.ddLock) { + ownerHeaderCt.onHeaderContextMenu(me, e, t); + } + }, + + + processEvent: function(type, view, cell, recordIndex, cellIndex, e) { + return this.fireEvent.apply(this, arguments); + }, + + toggleSortState: function() { + var me = this, + idx, + nextIdx; + + if (me.sortable) { + idx = Ext.Array.indexOf(me.possibleSortStates, me.sortState); + + nextIdx = (idx + 1) % me.possibleSortStates.length; + me.setSortState(me.possibleSortStates[nextIdx]); + } + }, + + doSort: function(state) { + var tablePanel = this.up('tablepanel'), + store = tablePanel.store; + + + + + if (tablePanel.ownerLockable && store.isNodeStore) { + store = tablePanel.ownerLockable.lockedGrid.store; + } + store.sort({ + property: this.getSortParam(), + direction: state + }); + }, + + + getSortParam: function() { + return this.dataIndex; + }, + + setSortState: function(state, skipClear, initial) { + var me = this, + ascCls = me.ascSortCls, + descCls = me.descSortCls, + ownerHeaderCt = me.getOwnerHeaderCt(), + oldSortState = me.sortState; + + state = state || null; + + if (!me.sorting && oldSortState !== state && me.getSortParam()) { + + if (state && !initial) { + + + me.sorting = true; + me.doSort(state); + me.sorting = false; + } + switch (state) { + case 'DESC': + me.addCls(descCls); + me.removeCls(ascCls); + break; + case 'ASC': + me.addCls(ascCls); + me.removeCls(descCls); + break; + default: + me.removeCls([ascCls, descCls]); + } + if (ownerHeaderCt && !me.triStateSort && !skipClear) { + ownerHeaderCt.clearOtherSortStates(me); + } + me.sortState = state; + + if (me.triStateSort || state != null) { + ownerHeaderCt.fireEvent('sortchange', ownerHeaderCt, me, state); + } + } + }, + + + isHideable: function() { + var result = { + hideCandidate: this, + result: this.hideable + }; + + if (result.result) { + this.ownerCt.bubble(this.hasOtherMenuEnabledChildren, null, [result]); + } + return result.result; + }, + + + + hasOtherMenuEnabledChildren: function(result) { + var visibleChildren, + count; + + + + if (!this.isXType('headercontainer')) { + result.result = false; + return false; + } + + + + + visibleChildren = this.query('>:not([hidden]):not([menuDisabled])'); + count = visibleChildren.length; + if (Ext.Array.contains(visibleChildren, result.hideCandidate)) { + count--; + } + if (count) { + return false; + } + + result.hideCandidate = this; + }, + + + isLockable: function() { + var result = { + result: this.lockable !== false + }; + + if (result.result) { + this.ownerCt.bubble(this.hasMultipleVisibleChildren, null, [result]); + } + return result.result; + }, + + + + hasMultipleVisibleChildren: function(result) { + + if (!this.isXType('headercontainer')) { + result.result = false; + return false; + } + + if (this.query('>:not([hidden])').length > 1) { + return false; + } + }, + + hide: function(fromOwner) { + var me = this, + ownerHeaderCt = me.getOwnerHeaderCt(), + owner = me.ownerCt, + ownerIsGroup, + item, items, len, i; + + + + if (!ownerHeaderCt) { + me.callParent(); + return me; + } + + + + + if (ownerHeaderCt.forceFit) { + me.visibleSiblingCount = ownerHeaderCt.getVisibleGridColumns().length - 1; + if (me.flex) { + me.savedWidth = me.getWidth(); + delete me.flex; + } + } + + ownerIsGroup = owner.isGroupHeader; + + + if (ownerIsGroup && !fromOwner) { + items = owner.query('>:not([hidden])'); + + if (items.length === 1 && items[0] == me) { + me.ownerCt.hide(); + return; + } + } + + Ext.suspendLayouts(); + + if (me.isGroupHeader) { + items = me.items.items; + for (i = 0, len = items.length; i < len; i++) { + item = items[i]; + if (!item.hidden) { + item.hide(true); + } + } + } + + me.callParent(); + + ownerHeaderCt.onHeaderHide(me); + + Ext.resumeLayouts(true); + return me; + }, + + show: function(fromOwner, fromChild) { + var me = this, + ownerHeaderCt = me.getOwnerHeaderCt(), + ownerCt = me.ownerCt, + items, + len, i, + item, + myWidth, + availFlex, + totalFlex, + oldLen; + + if (!me.rendered) { + me.hidden = false; + return; + } + + availFlex = ownerHeaderCt.el.getViewSize().width - (ownerHeaderCt.view.el.dom.scrollHeight > ownerHeaderCt.view.el.dom.clientHeight ? Ext.getScrollbarSize().width : 0); + + + if (ownerHeaderCt.forceFit) { + + items = Ext.ComponentQuery.query(':not([flex])', ownerHeaderCt.getVisibleGridColumns()); + + + + + + if (items.length) { + me.width = me.savedWidth || me.width || Ext.grid.header.Container.prototype.defaultWidth; + } + + else { + items = ownerHeaderCt.getVisibleGridColumns(); + len = items.length; + oldLen = me.visibleSiblingCount; + + + + + + myWidth = (me.savedWidth || me.width || Ext.grid.header.Container.prototype.defaultWidth); + + + + + + + + + + myWidth = Math.min(Math.max(myWidth * (oldLen / len), Ext.grid.header.Container.prototype.defaultWidth), + availFlex - (len * Ext.grid.header.Container.prototype.defaultWidth)); + + delete me.width; + me.flex = myWidth; + availFlex -= myWidth; + totalFlex = 0; + for (i = 0; i < len; i++) { + item = items[i]; + item.flex = (item.width || item.getWidth()); + totalFlex += item.flex; + delete item.width; + } + + + + + for (i = 0; i < len; i++) { + item = items[i]; + item.flex = item.flex / totalFlex * availFlex; + } + } + } + + Ext.suspendLayouts(); + + + if (me.isSubHeader && ownerCt.hidden) { + ownerCt.show(false, true); + } + + me.callParent(arguments); + + + if (me.isGroupHeader && fromChild !== true && !me.query(':not([hidden])').length) { + items = me.items.items; + for (i = 0, len = items.length; i < len; i++) { + item = items[i]; + if (item.hidden) { + item.show(true); + } + } + } + + Ext.resumeLayouts(true); + + + ownerCt = me.getOwnerHeaderCt(); + if (ownerCt) { + ownerCt.onHeaderShow(me); + } + }, + + getDesiredWidth: function() { + var me = this; + if (me.rendered && me.componentLayout && me.componentLayout.lastComponentSize) { + + + + + + + return me.componentLayout.lastComponentSize.width; + + + + } + else if (me.flex) { + + return me.width; + } + else { + return me.width; + } + }, + + getCellSelector: function() { + return '.' + Ext.baseCSSPrefix + 'grid-cell-' + this.getItemId(); + }, + + getCellInnerSelector: function() { + return this.getCellSelector() + ' .' + Ext.baseCSSPrefix + 'grid-cell-inner'; + }, + + isOnLeftEdge: function(e) { + return (e.getXY()[0] - this.getX() <= this.handleWidth); + }, + + isOnRightEdge: function(e) { + return (this.getX() + this.getWidth() - e.getXY()[0] <= this.handleWidth); + }, + + + + setMenuActive: function(isMenuOpen) { + this.titleEl[isMenuOpen ? 'addCls' : 'removeCls'](this.headerOpenCls); + } + + + + + + +}); + + +Ext.define('Ext.grid.RowNumberer', { + extend: Ext.grid.column.Column , + alias: 'widget.rownumberer', + + + text: " ", + + + width: 23, + + + sortable: false, + + + draggable: false, + + + autoLock: true, + + + lockable: false, + + align: 'right', + + constructor : function(config){ + + + + this.width = this.width; + + this.callParent(arguments); + if (this.rowspan) { + this.renderer = Ext.Function.bind(this.renderer, this); + } + }, + + + resizable: false, + hideable: false, + menuDisabled: true, + dataIndex: '', + cls: Ext.baseCSSPrefix + 'row-numberer', + rowspan: undefined, + + + renderer: function(value, metaData, record, rowIdx, colIdx, store) { + var rowspan = this.rowspan; + if (rowspan) { + metaData.tdAttr = 'rowspan="' + rowspan + '"'; + } + + metaData.tdCls = Ext.baseCSSPrefix + 'grid-cell-special'; + return rowIdx + 1; + } +}); + + + +Ext.define('Ext.view.DropZone', { + extend: Ext.dd.DropZone , + + indicatorHtml: '
    ', + indicatorCls: Ext.baseCSSPrefix + 'grid-drop-indicator', + + constructor: function(config) { + var me = this; + Ext.apply(me, config); + + + + + + + if (!me.ddGroup) { + me.ddGroup = 'view-dd-zone-' + me.view.id; + } + + + + + me.callParent([me.view.el]); + }, + + + + fireViewEvent: function() { + var me = this, + result; + + me.lock(); + result = me.view.fireEvent.apply(me.view, arguments); + me.unlock(); + return result; + }, + + getTargetFromEvent : function(e) { + var node = e.getTarget(this.view.getItemSelector()), + mouseY, nodeList, testNode, i, len, box; + + + + if (!node) { + mouseY = e.getPageY(); + for (i = 0, nodeList = this.view.getNodes(), len = nodeList.length; i < len; i++) { + testNode = nodeList[i]; + box = Ext.fly(testNode).getBox(); + if (mouseY <= box.bottom) { + return testNode; + } + } + } + return node; + }, + + getIndicator: function() { + var me = this; + + if (!me.indicator) { + me.indicator = new Ext.Component({ + html: me.indicatorHtml, + cls: me.indicatorCls, + ownerCt: me.view, + floating: true, + shadow: false + }); + } + return me.indicator; + }, + + getPosition: function(e, node) { + var y = e.getXY()[1], + region = Ext.fly(node).getRegion(), + pos; + + if ((region.bottom - y) >= (region.bottom - region.top) / 2) { + pos = "before"; + } else { + pos = "after"; + } + return pos; + }, + + + containsRecordAtOffset: function(records, record, offset) { + if (!record) { + return false; + } + var view = this.view, + recordIndex = view.indexOf(record), + nodeBefore = view.getNode(recordIndex + offset, true), + recordBefore = nodeBefore ? view.getRecord(nodeBefore) : null; + + return recordBefore && Ext.Array.contains(records, recordBefore); + }, + + positionIndicator: function(node, data, e) { + var me = this, + view = me.view, + pos = me.getPosition(e, node), + overRecord = view.getRecord(node), + draggingRecords = data.records, + indicatorY; + + if (!Ext.Array.contains(draggingRecords, overRecord) && ( + pos == 'before' && !me.containsRecordAtOffset(draggingRecords, overRecord, -1) || + pos == 'after' && !me.containsRecordAtOffset(draggingRecords, overRecord, 1) + )) { + me.valid = true; + + if (me.overRecord != overRecord || me.currentPosition != pos) { + + indicatorY = Ext.fly(node).getY() - view.el.getY() - 1; + if (pos == 'after') { + indicatorY += Ext.fly(node).getHeight(); + } + me.getIndicator().setWidth(Ext.fly(view.el).getWidth()).showAt(0, indicatorY); + + + me.overRecord = overRecord; + me.currentPosition = pos; + } + } else { + me.invalidateDrop(); + } + }, + + invalidateDrop: function() { + if (this.valid) { + this.valid = false; + this.getIndicator().hide(); + } + }, + + + onNodeOver: function(node, dragZone, e, data) { + var me = this; + + if (!Ext.Array.contains(data.records, me.view.getRecord(node))) { + me.positionIndicator(node, data, e); + } + return me.valid ? me.dropAllowed : me.dropNotAllowed; + }, + + + + notifyOut: function(node, dragZone, e, data) { + var me = this; + + me.callParent(arguments); + me.overRecord = me.currentPosition = null + me.valid = false; + if (me.indicator) { + me.indicator.hide(); + } + }, + + + onContainerOver : function(dd, e, data) { + var me = this, + view = me.view, + count = view.dataSource.getCount(); + + + if (count) { + me.positionIndicator(view.all.last(), data, e); + } + + + else { + me.overRecord = me.currentPosition = null; + me.getIndicator().setWidth(Ext.fly(view.el).getWidth()).showAt(0, 0); + me.valid = true; + } + return me.dropAllowed; + }, + + onContainerDrop : function(dd, e, data) { + return this.onNodeDrop(dd, null, e, data); + }, + + onNodeDrop: function(targetNode, dragZone, e, data) { + var me = this, + dropHandled = false, + + + + + + + dropHandlers = { + wait: false, + processDrop: function () { + me.invalidateDrop(); + me.handleNodeDrop(data, me.overRecord, me.currentPosition); + dropHandled = true; + me.fireViewEvent('drop', targetNode, data, me.overRecord, me.currentPosition); + }, + + cancelDrop: function() { + me.invalidateDrop(); + dropHandled = true; + } + }, + performOperation = false; + + if (me.valid) { + performOperation = me.fireViewEvent('beforedrop', targetNode, data, me.overRecord, me.currentPosition, dropHandlers); + if (dropHandlers.wait) { + return; + } + + if (performOperation !== false) { + + if (!dropHandled) { + dropHandlers.processDrop(); + } + } + } + return performOperation; + }, + + destroy: function(){ + Ext.destroy(this.indicator); + delete this.indicator; + this.callParent(); + } +}); + + +Ext.define('Ext.grid.ViewDropZone', { + extend: Ext.view.DropZone , + + indicatorHtml: '
    ', + indicatorCls: Ext.baseCSSPrefix + 'grid-drop-indicator', + + handleNodeDrop : function(data, record, position) { + var view = this.view, + store = view.getStore(), + index, records, i, len; + + + if (data.copy) { + records = data.records; + data.records = []; + for (i = 0, len = records.length; i < len; i++) { + data.records.push(records[i].copy()); + } + } else { + + data.view.store.remove(data.records, data.view === view); + } + + if (record && position) { + index = store.indexOf(record); + + + if (position !== 'before') { + index++; + } + store.insert(index, data.records); + } + + else { + store.add(data.records); + } + + view.getSelectionModel().select(data.records); + } +}); + + +Ext.define('Ext.grid.column.Action', { + extend: Ext.grid.column.Column , + alias: ['widget.actioncolumn'], + alternateClassName: 'Ext.grid.ActionColumn', + + + + + + + + + + + + + + + actionIdRe: new RegExp(Ext.baseCSSPrefix + 'action-col-(\\d+)'), + + + altText: '', + + + menuText: 'Actions', + + sortable: false, + + constructor: function(config) { + var me = this, + cfg = Ext.apply({}, config), + + items = cfg.items || me.items || [me], + hasGetClass, + i, + len; + + + me.origRenderer = cfg.renderer || me.renderer; + me.origScope = cfg.scope || me.scope; + + me.renderer = me.scope = cfg.renderer = cfg.scope = null; + + + cfg.items = null; + me.callParent([cfg]); + + + me.items = items; + + for (i = 0, len = items.length; i < len; ++i) { + if (items[i].getClass) { + hasGetClass = true; + break; + } + } + + + if (me.origRenderer || hasGetClass) { + me.hasCustomRenderer = true; + } + }, + + + + defaultRenderer: function(v, meta, record, rowIdx, colIdx, store, view){ + var me = this, + prefix = Ext.baseCSSPrefix, + scope = me.origScope || me, + items = me.items, + len = items.length, + i = 0, + item, ret, disabled, tooltip; + + + + + ret = Ext.isFunction(me.origRenderer) ? me.origRenderer.apply(scope, arguments) || '' : ''; + + meta.tdCls += ' ' + Ext.baseCSSPrefix + 'action-col-cell'; + for (; i < len; i++) { + item = items[i]; + + disabled = item.disabled || (item.isDisabled ? item.isDisabled.call(item.scope || scope, view, rowIdx, colIdx, item, record) : false); + tooltip = disabled ? null : (item.tooltip || (item.getTip ? item.getTip.apply(item.scope || scope, arguments) : null)); + + + if (!item.hasActionConfiguration) { + + + item.stopSelection = me.stopSelection; + item.disable = Ext.Function.bind(me.disableAction, me, [i], 0); + item.enable = Ext.Function.bind(me.enableAction, me, [i], 0); + item.hasActionConfiguration = true; + } + + ret += '' + (item.altText || me.altText) + ''; + } + return ret; + }, + + + enableAction: function(index, silent) { + var me = this; + + if (!index) { + index = 0; + } else if (!Ext.isNumber(index)) { + index = Ext.Array.indexOf(me.items, index); + } + me.items[index].disabled = false; + me.up('tablepanel').el.select('.' + Ext.baseCSSPrefix + 'action-col-' + index).removeCls(me.disabledCls); + if (!silent) { + me.fireEvent('enable', me); + } + }, + + + disableAction: function(index, silent) { + var me = this; + + if (!index) { + index = 0; + } else if (!Ext.isNumber(index)) { + index = Ext.Array.indexOf(me.items, index); + } + me.items[index].disabled = true; + me.up('tablepanel').el.select('.' + Ext.baseCSSPrefix + 'action-col-' + index).addCls(me.disabledCls); + if (!silent) { + me.fireEvent('disable', me); + } + }, + + destroy: function() { + delete this.items; + delete this.renderer; + return this.callParent(arguments); + }, + + + processEvent : function(type, view, cell, recordIndex, cellIndex, e, record, row){ + var me = this, + target = e.getTarget(), + match, + item, fn, + key = type == 'keydown' && e.getKey(), + disabled; + + + + + if (key && !Ext.fly(target).findParent(view.getCellSelector())) { + target = Ext.fly(cell).down('.' + Ext.baseCSSPrefix + 'action-col-icon', true); + } + + + if (target && (match = target.className.match(me.actionIdRe))) { + item = me.items[parseInt(match[1], 10)]; + disabled = item.disabled || (item.isDisabled ? item.isDisabled.call(item.scope || me.origScope || me, view, recordIndex, cellIndex, item, record) : false); + if (item && !disabled) { + if (type == 'click' || (key == e.ENTER || key == e.SPACE)) { + fn = item.handler || me.handler; + if (fn) { + fn.call(item.scope || me.origScope || me, view, recordIndex, cellIndex, item, e, record, row); + } + } else if (type == 'mousedown' && item.stopSelection !== false) { + return false; + } + } + } + return me.callParent(arguments); + }, + + cascade: function(fn, scope) { + fn.call(scope||this, this); + }, + + + getRefItems: function() { + return []; + } +}); + + +Ext.define('Ext.grid.column.Boolean', { + extend: Ext.grid.column.Column , + alias: ['widget.booleancolumn'], + alternateClassName: 'Ext.grid.BooleanColumn', + + + + trueText: 'true', + + + + + falseText: 'false', + + + + undefinedText: ' ', + + + + + + defaultRenderer: function(value){ + if (value === undefined) { + return this.undefinedText; + } + + if (!value || value === 'false') { + return this.falseText; + } + return this.trueText; + } +}); + + +Ext.define('Ext.grid.column.CheckColumn', { + extend: Ext.grid.column.Column , + alternateClassName: 'Ext.ux.CheckColumn', + alias: 'widget.checkcolumn', + + + align: 'center', + + + stopSelection: true, + + tdCls: Ext.baseCSSPrefix + 'grid-cell-checkcolumn', + + constructor: function() { + this.addEvents( + + 'beforecheckchange', + + 'checkchange' + ); + this.scope = this; + this.callParent(arguments); + }, + + + processEvent: function(type, view, cell, recordIndex, cellIndex, e, record, row) { + var me = this, + key = type === 'keydown' && e.getKey(), + mousedown = type == 'mousedown'; + + if (!me.disabled && (mousedown || (key == e.ENTER || key == e.SPACE))) { + var dataIndex = me.dataIndex, + checked = !record.get(dataIndex); + + + if (me.fireEvent('beforecheckchange', me, recordIndex, checked) !== false) { + record.set(dataIndex, checked); + me.fireEvent('checkchange', me, recordIndex, checked); + + + if (mousedown) { + e.stopEvent(); + } + + + + if (!me.stopSelection) { + view.selModel.selectByPosition({ + row: recordIndex, + column: cellIndex + }); + } + + + return false; + } else { + + return !me.stopSelection; + } + } else { + return me.callParent(arguments); + } + }, + + + onEnable: function(silent) { + var me = this; + + me.callParent(arguments); + me.up('tablepanel').el.select('.' + Ext.baseCSSPrefix + 'grid-cell-' + me.id).removeCls(me.disabledCls); + if (!silent) { + me.fireEvent('enable', me); + } + }, + + + onDisable: function(silent) { + var me = this; + + me.callParent(arguments); + me.up('tablepanel').el.select('.' + Ext.baseCSSPrefix + 'grid-cell-' + me.id).addCls(me.disabledCls); + if (!silent) { + me.fireEvent('disable', me); + } + }, + + + + renderer : function(value, meta) { + var cssPrefix = Ext.baseCSSPrefix, + cls = [cssPrefix + 'grid-checkcolumn']; + + if (this.disabled) { + meta.tdCls += ' ' + this.disabledCls; + } + if (value) { + cls.push(cssPrefix + 'grid-checkcolumn-checked'); + } + return ''; + } +}); + + +Ext.define('Ext.grid.column.Date', { + extend: Ext.grid.column.Column , + alias: ['widget.datecolumn'], + + alternateClassName: 'Ext.grid.DateColumn', + + + + + + + + initComponent: function(){ + if (!this.format) { + this.format = Ext.Date.defaultFormat; + } + + this.callParent(arguments); + }, + + defaultRenderer: function(value){ + return Ext.util.Format.date(value, this.format); + } +}); + + +Ext.define('Ext.grid.column.Number', { + extend: Ext.grid.column.Column , + alias: ['widget.numbercolumn'], + + alternateClassName: 'Ext.grid.NumberColumn', + + + + format : '0,000.00', + + + + + + + defaultRenderer: function(value){ + return Ext.util.Format.number(value, this.format); + } +}); + + +Ext.define('Ext.grid.column.Template', { + extend: Ext.grid.column.Column , + alias: ['widget.templatecolumn'], + + alternateClassName: 'Ext.grid.TemplateColumn', + + + + + + + + initComponent: function(){ + var me = this; + me.tpl = (!Ext.isPrimitive(me.tpl) && me.tpl.compile) ? me.tpl : new Ext.XTemplate(me.tpl); + + + me.hasCustomRenderer = true; + me.callParent(arguments); + }, + + defaultRenderer: function(value, meta, record) { + var data = Ext.apply({}, record.data, record.getAssociatedData()); + return this.tpl.apply(data); + } +}); + + +Ext.define('Ext.grid.feature.Feature', { + extend: Ext.util.Observable , + alias: 'feature.feature', + + wrapsItem: false, + + + isFeature: true, + + + disabled: false, + + + hasFeatureEvent: true, + + + eventPrefix: null, + + + eventSelector: null, + + + view: null, + + + grid: null, + + constructor: function(config) { + this.initialConfig = config; + this.callParent(arguments); + }, + + clone: function() { + return new this.self(this.initialConfig); + }, + + init: Ext.emptyFn, + + destroy: function(){ + this.clearListeners(); + }, + + + getFireEventArgs: function(eventName, view, featureTarget, e) { + return [eventName, view, featureTarget, e]; + }, + + vetoEvent: Ext.emptyFn, + + + enable: function() { + this.disabled = false; + }, + + + disable: function() { + this.disabled = true; + } + +}); + + +Ext.define('Ext.grid.feature.AbstractSummary', { + + extend: Ext.grid.feature.Feature , + + alias: 'feature.abstractsummary', + + summaryRowCls: Ext.baseCSSPrefix + 'grid-row-summary', + summaryTableCls: Ext.baseCSSPrefix + 'table-plain ' + Ext.baseCSSPrefix + 'grid-table', + summaryRowSelector: '.' + Ext.baseCSSPrefix + 'grid-row-summary', + + + + summaryRowTpl: { + before: function(values, out) { + + + if (values.record.isSummary) { + this.summaryFeature.outputSummaryRecord(values.record, values, out); + return false; + } + }, + priority: 1000 + }, + + + showSummaryRow: true, + + + init: function() { + var me = this; + me.view.summaryFeature = me; + me.rowTpl = me.view.self.prototype.rowTpl; + + + + me.view.addRowTpl(me.summaryRowTpl).summaryFeature = me; + }, + + + toggleSummaryRow: function(visible) { + this.showSummaryRow = !!visible; + }, + + outputSummaryRecord: function(summaryRecord, contextValues, out) { + var view = contextValues.view, + savedRowValues = view.rowValues, + columns = contextValues.columns || view.headerCt.getGridColumns(), + colCount = columns.length, i, column, + + + values = { + view: view, + record: summaryRecord, + rowStyle: '', + rowClasses: [ this.summaryRowCls ], + itemClasses: [], + recordIndex: -1, + rowId: view.getRowId(summaryRecord), + columns: columns, + visibleColumns: contextValues.visibleColumns || view.headerCt.getVisibleGridColumns() + }; + + + for (i = 0; i < colCount; i++) { + column = columns[i]; + column.savedRenderer = column.renderer; + if (column.summaryRenderer) { + column.renderer = column.summaryRenderer; + } else if (!column.summaryType) { + column.renderer = Ext.emptyFn; + } + + + if (!column.dataIndex) { + column.dataIndex = column.id; + } + } + + + view.rowValues = values; + view.self.prototype.rowTpl.applyOut(values, out); + view.rowValues = savedRowValues; + + + for (i = 0; i < colCount; i++) { + column = columns[i]; + column.renderer = column.savedRenderer; + column.savedRenderer = null; + } + }, + + + getSummary: function(store, type, field, group){ + var records = group.records; + + if (type) { + if (Ext.isFunction(type)) { + return store.getAggregate(type, null, records, [field]); + } + + switch (type) { + case 'count': + return records.length; + case 'min': + return store.getMin(records, field); + case 'max': + return store.getMax(records, field); + case 'sum': + return store.getSum(records, field); + case 'average': + return store.getAverage(records, field); + default: + return ''; + + } + } + }, + + + generateSummaryData: function(){ + var me = this, + store = me.view.store, + groups = store.groups.items, + reader = store.proxy.reader, + len = groups.length, + groupField = me.getGroupField(), + data = {}, + lockingPartner = me.lockingPartner, + i, group, record, + root, summaryRows, hasRemote, + convertedSummaryRow, remoteData; + + + if (me.remoteRoot && reader.rawData) { + hasRemote = true; + remoteData = {}; + + root = reader.root; + reader.root = me.remoteRoot; + reader.buildExtractors(true); + summaryRows = reader.getRoot(reader.rawData); + len = summaryRows.length; + + + if (!reader.convertRecordData) { + reader.buildExtractors(); + } + + for (i = 0; i < len; ++i) { + convertedSummaryRow = {}; + + + reader.convertRecordData(convertedSummaryRow, summaryRows[i]); + remoteData[convertedSummaryRow[groupField]] = convertedSummaryRow; + } + + + reader.root = root; + reader.buildExtractors(true); + } + + for (i = 0; i < len; ++i) { + group = groups[i]; + + if (hasRemote || group.isDirty() || !group.hasAggregate()) { + if (hasRemote) { + record = me.populateRemoteRecord(group, remoteData); + } else { + record = me.populateRecord(group); + } + + if (!lockingPartner || (me.view.ownerCt === me.view.ownerCt.ownerLockable.normalGrid)) { + group.commit(); + } + } else { + record = group.getAggregateRecord(); + if (lockingPartner && !record.hasPartnerData) { + me.populateRecord(group); + record.hasPartnerData = true; + } + } + data[group.key] = record; + } + + return data; + }, + + populateRemoteRecord: function(group, data) { + var record = group.getAggregateRecord(true), + groupData = data[group.key], + field; + + record.beginEdit(); + for (field in groupData) { + if (groupData.hasOwnProperty(field)) { + if (field !== record.idProperty) { + record.set(field, groupData[field]); + } + } + } + record.endEdit(true); + record.commit(true); + + return record; + }, + + populateRecord: function(group){ + var me = this, + view = me.view, + store = view.store, + record = group.getAggregateRecord(), + columns = view.headerCt.getGridColumns(), + len = columns.length, + i, column, fieldName; + + record.beginEdit(); + for (i = 0; i < len; ++i) { + column = columns[i]; + + fieldName = column.dataIndex || column.id; + record.set(fieldName, me.getSummary(store, column.summaryType, fieldName, group)); + } + record.endEdit(true); + record.commit(); + + return record; + } +}); + + +Ext.define('Ext.grid.feature.GroupStore', { + extend: Ext.util.Observable , + + isStore: true, + + constructor: function(groupingFeature, store) { + var me = this; + + me.superclass.constructor.apply(me, arguments); + me.groupingFeature = groupingFeature; + me.bindStore(store); + me.processStore(store); + me.view.dataSource = me; + }, + + bindStore: function(store) { + var me = this; + + if (me.store) { + Ext.destroy(me.storeListeners); + me.store = null; + } + if (store) { + me.storeListeners = store.on({ + bulkremove: me.onBulkRemove, + add: me.onAdd, + update: me.onUpdate, + refresh: me.onRefresh, + clear: me.onClear, + scope: me, + destroyable: true + }); + me.store = store; + } + }, + + processStore: function(store) { + var me = this, + Model = store.model, + groups = store.getGroups(), + groupCount = groups.length, + i, + group, + groupPlaceholder, + data = me.data, + oldGroupCache = this.groupingFeature.groupCache, + groupCache = this.groupingFeature.groupCache = {}, + collapseAll = me.groupingFeature.startCollapsed; + + if (data) { + data.clear(); + } else { + data = me.data = new Ext.util.MixedCollection(false, Ext.data.Store.recordIdFn); + } + + for (i = 0; i < groupCount; i++) { + + + + group = groups[i]; + + + groupCache[group.name] = group; + group.isCollapsed = collapseAll || (oldGroupCache[group.name] && oldGroupCache[group.name].isCollapsed); + + + + if (group.isCollapsed) { + group.placeholder = groupPlaceholder = new Model(null, 'group-' + group.name + '-placeholder'); + groupPlaceholder.set(me.getGroupField(), group.name); + groupPlaceholder.rows = groupPlaceholder.children = group.children; + data.add(groupPlaceholder); + } + + + else { + data.insert(me.data.length, group.children); + } + } + }, + + isCollapsed: function(name) { + return this.groupingFeature.groupCache[name].isCollapsed; + }, + + isInCollapsedGroup: function(record) { + var groupData; + + if (this.store.isGrouped() && (groupData = this.groupingFeature.groupCache[record.get(this.getGroupField())])) { + return groupData.isCollapsed || false; + } + return false; + }, + + getCount: function() { + return this.data.getCount(); + }, + + getTotalCount: function() { + return this.data.getCount(); + }, + + + rangeCached: function() { + return true; + }, + + getRange: function(start, end, options) { + var result = this.data.getRange(start, end); + + if (options && options.callback) { + options.callback.call(options.scope || this, result, start, end, options); + } + return result; + }, + + getAt: function(index) { + return this.getRange(index, index)[0]; + }, + + getById: function(id) { + return this.store.getById(id); + }, + + + + + indexOf: function(record, viewOnly) { + var me = this, + groupField, + groups, + groupCount, + i, + group, + groupIndex, + result = 0; + + if (record && !me.isInCollapsedGroup(record)) { + groupField = me.store.groupField; + groups = me.store.getGroups(); + groupCount = groups.length; + for (i = 0; i < groupCount; i++) { + + + + group = groups[i]; + if (group.name === record.get(groupField)) { + groupIndex = Ext.Array.indexOf(group.children, record); + return result + groupIndex; + } + + result += (viewOnly && this.isCollapsed(group.name)) ? 1 : group.children.length; + } + } + return -1; + }, + + onRefresh: function(store) { + this.processStore(this.store); + this.fireEvent('refresh', this); + }, + + onBulkRemove: function(store, records, indices) { + this.processStore(this.store); + this.fireEvent('refresh', this); + }, + + onClear: function(store, records, startIndex) { + this.processStore(this.store); + this.fireEvent('clear', this); + }, + + onAdd: function(store, records, startIndex) { + this.processStore(this.store); + this.fireEvent('refresh', this); + }, + + onUpdate: function(store, record, operation, modifiedFieldNames) { + var me = this, + groupInfo = me.groupingFeature.getRecordGroup(record), + firstRec, lastRec; + + + + + if (store.isGrouped()) { + if (modifiedFieldNames && Ext.Array.contains(modifiedFieldNames, me.groupingFeature.getGroupField())) { + return me.onRefresh(me.store); + } + + + if (groupInfo.isCollapsed) { + me.fireEvent('update', me, groupInfo.placeholder); + } + + + + else { + Ext.suspendLayouts(); + + + me.fireEvent('update', me, record, operation, modifiedFieldNames); + + + + firstRec = groupInfo.children[0]; + lastRec = groupInfo.children[groupInfo.children.length - 1]; + + + if (firstRec !== record) { + me.fireEvent('update', me, firstRec, 'edit'); + } + if (lastRec !== record && lastRec !== firstRec) { + me.fireEvent('update', me, lastRec, 'edit'); + } + Ext.resumeLayouts(true); + } + } + } +}); + + +Ext.define('Ext.grid.feature.Grouping', { + extend: Ext.grid.feature.Feature , + mixins: { + summary: Ext.grid.feature.AbstractSummary + }, + + + alias: 'feature.grouping', + + eventPrefix: 'group', + groupCls: Ext.baseCSSPrefix + 'grid-group-hd', + eventSelector: '.' + Ext.baseCSSPrefix + 'grid-group-hd', + + refreshData: {}, + groupInfo: {}, + wrapsItem: true, + + + + + + + + + + + + + groupHeaderTpl: '{columnName}: {name}', + + + depthToIndent: 17, + + collapsedCls: Ext.baseCSSPrefix + 'grid-group-collapsed', + hdCollapsedCls: Ext.baseCSSPrefix + 'grid-group-hd-collapsed', + hdNotCollapsibleCls: Ext.baseCSSPrefix + 'grid-group-hd-not-collapsible', + collapsibleCls: Ext.baseCSSPrefix + 'grid-group-hd-collapsible', + ctCls: Ext.baseCSSPrefix + 'group-hd-container', + + + + groupByText : 'Group by this field', + + + + showGroupsText : 'Show in groups', + + + + hideGroupedHeader : false, + + + startCollapsed : false, + + + enableGroupingMenu : true, + + + enableNoGroups : true, + + + collapsible: true, + + + expandTip: 'Click to expand. CTRL key collapses all others', + + + + collapseTip: 'Click to collapse. CTRL/click collapses all others', + + + showSummaryRow: false, + + tableTpl: { + before: function(values) { + + if (values.rows.length === 1 && values.rows[0].isSummary) { + return; + } + this.groupingFeature.setup(values.rows, values.view.rowValues); + }, + after: function(values) { + + if (values.rows.length === 1 && values.rows[0].isSummary) { + return; + } + this.groupingFeature.cleanup(values.rows, values.view.rowValues); + }, + priority: 200 + }, + + groupTpl: [ + '{%', + 'var me = this.groupingFeature;', + 'me.setupRowData(values.record, values.recordIndex, values);', + 'values.needsWrap = values.isFirstRow || values.summaryRecord;', + 'values.recordIndex += me.skippedRows;', + '%}', + '', + '', + '', + '', + '{%', + + + 'var groupTitleStyle = (!values.view.lockingPartner || (values.view.ownerCt === values.view.ownerCt.ownerLockable.lockedGrid) || (values.view.lockingPartner.headerCt.getVisibleGridColumns().length === 0)) ? "" : "visibility:hidden";', + '%}', + '
    ', + '
    ', + '{[values.groupHeaderTpl.apply(values.groupInfo, parent) || " "]}', + '
    ', + '
    ', + '
    ', + + + '', + '', + '{[values.view.renderColumnSizer(out)]}', + + '', + '{%', + 'values.itemClasses.length = 0;', + 'this.nextTpl.applyOut(values, out, parent);', + '%}', + '', + '', + '{%me.outputSummaryRecord(values.summaryRecord, values, out);%}', + '', + '
    ', + '
    ', + '', + '', + '{%', + 'if (values.isCollapsedGroup) {', + 'me.skippedRows += me.getRecordGroup(values.record).children.length - 1;', + '}', + '%}', + '', + '{%this.nextTpl.applyOut(values, out, parent);%}', + '', { + priority: 200, + + syncRowHeights: function(firstRow, secondRow) { + firstRow = Ext.fly(firstRow, 'syncDest'); + secondRow = Ext.fly(secondRow, 'sycSrc'); + var owner = this.owner, + firstHd = firstRow.down(owner.eventSelector, true), + secondHd, + firstSummaryRow = firstRow.down(owner.summaryRowSelector, true), + secondSummaryRow, + firstHeight, secondHeight; + + + if (firstHd && (secondHd = secondRow.down(owner.eventSelector, true))) { + firstHd.style.height = secondHd.style.height = ''; + if ((firstHeight = firstHd.offsetHeight) > (secondHeight = secondHd.offsetHeight)) { + Ext.fly(secondHd).setHeight(firstHeight); + } + else if (secondHeight > firstHeight) { + Ext.fly(firstHd).setHeight(secondHeight); + } + } + + + if (firstSummaryRow && (secondSummaryRow = secondRow.down(owner.summaryRowSelector, true))) { + firstSummaryRow.style.height = secondSummaryRow.style.height = ''; + if ((firstHeight = firstSummaryRow.offsetHeight) > (secondHeight = secondSummaryRow.offsetHeight)) { + Ext.fly(secondSummaryRow).setHeight(firstHeight); + } + else if (secondHeight > firstHeight) { + Ext.fly(firstSummaryRow).setHeight(secondHeight); + } + } + }, + + syncContent: function(destRow, sourceRow) { + destRow = Ext.fly(destRow, 'syncDest'); + sourceRow = Ext.fly(sourceRow, 'sycSrc'); + var owner = this.owner, + destHd = destRow.down(owner.eventSelector, true), + sourceHd = sourceRow.down(owner.eventSelector, true), + destSummaryRow = destRow.down(owner.summaryRowSelector, true), + sourceSummaryRow = sourceRow.down(owner.summaryRowSelector, true); + + + if (destHd && sourceHd) { + Ext.fly(destHd).syncContent(sourceHd); + } + + + if (destSummaryRow && sourceSummaryRow) { + Ext.fly(destSummaryRow).syncContent(sourceSummaryRow); + } + } + } + ], + + constructor: function() { + this.groupCache = {}; + this.callParent(arguments); + }, + + init: function(grid) { + var me = this, + view = me.view; + + me.mixins.summary.init.call(me); + + me.callParent(arguments); + view.headerCt.on({ + columnhide: me.onColumnHideShow, + columnshow: me.onColumnHideShow, + columnmove: me.onColumnMove, + scope: me + }); + + + view.addTableTpl(me.tableTpl).groupingFeature = me; + + + view.addRowTpl(Ext.XTemplate.getTpl(me, 'groupTpl')).groupingFeature = me; + + view.preserveScrollOnRefresh = true; + + + if (view.store.buffered) { + me.collapsible = false; + } + + else { + me.dataSource = view.dataSource = new Ext.grid.feature.GroupStore(me, view.store); + + + me.startCollapsed = false; + } + + me.grid.on({ + reconfigure: me.onReconfigure + }); + view.on({ + afterrender: me.afterViewRender, + scope: me, + single: true + }); + }, + + vetoEvent: function(record, row, rowIndex, e) { + + if (e.type !== 'mouseover' && e.type !== 'mouseout' && e.type !== 'mouseenter' && e.type !== 'mouseleave' && e.getTarget(this.eventSelector)) { + return false; + } + }, + + enable: function() { + var me = this, + view = me.view, + store = view.store, + groupToggleMenuItem; + + me.lastGroupField = me.getGroupField(); + + if (me.lastGroupIndex) { + me.block(); + store.group(me.lastGroupIndex); + me.unblock(); + } + me.callParent(); + groupToggleMenuItem = me.view.headerCt.getMenu().down('#groupToggleMenuItem'); + if (groupToggleMenuItem) { + groupToggleMenuItem.setChecked(true, true); + } + me.refreshIf(); + }, + + disable: function() { + var me = this, + view = me.view, + store = view.store, + groupToggleMenuItem, + lastGroup; + + lastGroup = store.groupers.first(); + if (lastGroup) { + me.lastGroupIndex = lastGroup.property; + me.block(); + store.clearGrouping(); + me.unblock(); + } + + me.callParent(); + groupToggleMenuItem = me.view.headerCt.getMenu().down('#groupToggleMenuItem'); + if (groupToggleMenuItem) { + groupToggleMenuItem.setChecked(false, true); + } + me.refreshIf(); + }, + + refreshIf: function() { + var ownerCt = this.grid.ownerCt, + view = this.view; + + if (!view.store.remoteGroup && !this.blockRefresh) { + + + if (ownerCt && ownerCt.lockable) { + ownerCt.view.refresh(); + } else { + view.refresh(); + } + } + }, + + + afterViewRender: function() { + var me = this, + view = me.view; + + view.on({ + scope: me, + groupclick: me.onGroupClick + }); + + if (me.enableGroupingMenu) { + me.injectGroupingMenu(); + } + + me.pruneGroupedHeader(); + + me.lastGroupField = me.getGroupField(); + me.block(); + me.onGroupChange(); + me.unblock(); + }, + + injectGroupingMenu: function() { + var me = this, + headerCt = me.view.headerCt; + + headerCt.showMenuBy = me.showMenuBy; + headerCt.getMenuItems = me.getMenuItems(); + }, + + onColumnHideShow: function(headerOwnerCt, header) { + var view = this.view, + headerCt = view.headerCt, + menu = headerCt.getMenu(), + groupToggleMenuItem = menu.down('#groupMenuItem'), + colCount = headerCt.getGridColumns().length, + items, + len, + i; + + + if (groupToggleMenuItem) { + if (headerCt.getVisibleGridColumns().length > 1) { + groupToggleMenuItem.enable(); + } else { + groupToggleMenuItem.disable(); + } + } + + + if (view.rendered) { + items = view.el.query('.' + this.ctCls); + for (i = 0, len = items.length; i < len; ++i) { + items[i].colSpan = colCount; + } + } + }, + + + + onColumnMove: function() { + var me = this, + store = me.view.store, + groups, + i, len, + groupInfo, firstRec, lastRec; + + if (store.isGrouped()) { + groups = store.getGroups(); + len = groups.length; + + + for (i = 0; i < len; i++) { + groupInfo = groups[i]; + firstRec = groupInfo.children[0]; + lastRec = groupInfo.children[groupInfo.children.length - 1]; + store.fireEvent('update', store, firstRec, 'edit'); + if (lastRec !== firstRec) { + store.fireEvent('update', store, lastRec, 'edit'); + } + } + } + }, + + showMenuBy: function(t, header) { + var menu = this.getMenu(), + groupMenuItem = menu.down('#groupMenuItem'), + groupMenuMeth = header.groupable === false || this.view.headerCt.getVisibleGridColumns().length < 2 ? 'disable' : 'enable', + groupToggleMenuItem = menu.down('#groupToggleMenuItem'), + isGrouped = this.view.store.isGrouped(); + + groupMenuItem[groupMenuMeth](); + if (groupToggleMenuItem) { + groupToggleMenuItem.setChecked(isGrouped, true); + groupToggleMenuItem[isGrouped ? 'enable' : 'disable'](); + } + Ext.grid.header.Container.prototype.showMenuBy.apply(this, arguments); + }, + + getMenuItems: function() { + var me = this, + groupByText = me.groupByText, + disabled = me.disabled || !me.getGroupField(), + showGroupsText = me.showGroupsText, + enableNoGroups = me.enableNoGroups, + getMenuItems = me.view.headerCt.getMenuItems; + + + return function() { + + + + var o = getMenuItems.call(this); + o.push('-', { + iconCls: Ext.baseCSSPrefix + 'group-by-icon', + itemId: 'groupMenuItem', + text: groupByText, + handler: me.onGroupMenuItemClick, + scope: me + }); + if (enableNoGroups) { + o.push({ + itemId: 'groupToggleMenuItem', + text: showGroupsText, + checked: !disabled, + checkHandler: me.onGroupToggleMenuItemClick, + scope: me + }); + } + return o; + }; + }, + + + onGroupMenuItemClick: function(menuItem, e) { + var me = this, + menu = menuItem.parentMenu, + hdr = menu.activeHeader, + view = me.view, + store = view.store; + + delete me.lastGroupIndex; + me.block(); + me.enable(); + store.group(hdr.dataIndex); + me.pruneGroupedHeader(); + me.unblock(); + me.refreshIf(); + }, + + block: function() { + this.blockRefresh = this.view.blockRefresh = true; + }, + + unblock: function() { + this.blockRefresh = this.view.blockRefresh = false; + }, + + + onGroupToggleMenuItemClick: function(menuItem, checked) { + this[checked ? 'enable' : 'disable'](); + }, + + + pruneGroupedHeader: function() { + var me = this, + header = me.getGroupedHeader(); + + if (me.hideGroupedHeader && header) { + Ext.suspendLayouts(); + if (me.prunedHeader && me.prunedHeader !== header) { + me.prunedHeader.show(); + } + me.prunedHeader = header; + header.hide(); + Ext.resumeLayouts(true); + } + }, + + getHeaderNode: function(groupName) { + return Ext.get(this.createGroupId(groupName)); + }, + + getGroup: function(name) { + var cache = this.groupCache, + item = cache[name]; + + if (!item) { + item = cache[name] = { + isCollapsed: false + }; + } + return item; + }, + + + isExpanded: function(groupName) { + return !this.getGroup(groupName).isCollapsed; + }, + + + expand: function(groupName, focus) { + this.doCollapseExpand(false, groupName, focus); + }, + + + expandAll: function() { + var me = this, + view = me.view, + groupCache = me.groupCache, + groupName, + lockingPartner = me.lockingPartner; + + + for (groupName in groupCache) { + if (groupCache.hasOwnProperty(groupName)) { + groupCache[groupName].isCollapsed = false; + } + } + Ext.suspendLayouts(); + view.suspendEvent('beforerefresh', 'refresh'); + me.dataSource.onRefresh(); + view.resumeEvent('beforerefresh', 'refresh'); + + if (lockingPartner) { + lockingPartner.expandAll(); + } + Ext.resumeLayouts(true); + + + for (groupName in groupCache) { + if (groupCache.hasOwnProperty(groupName)) { + view.fireEvent('groupexpand', view, Ext.get(this.getHeaderNode(groupName)), groupName); + } + } + }, + + + collapse: function(groupName, focus) { + this.doCollapseExpand(true, groupName, focus); + }, + + + collapseAll: function() { + var me = this, + view = me.view, + groupCache = me.groupCache, + groupName, + lockingPartner = me.lockingPartner; + + + for (groupName in groupCache) { + if (groupCache.hasOwnProperty(groupName)) { + groupCache[groupName].isCollapsed = true; + } + } + Ext.suspendLayouts(); + view.suspendEvent('beforerefresh', 'refresh'); + me.dataSource.onRefresh(); + view.resumeEvent('beforerefresh', 'refresh'); + + if (lockingPartner) { + lockingPartner.collapseAll(); + } + Ext.resumeLayouts(true); + + + for (groupName in groupCache) { + if (groupCache.hasOwnProperty(groupName)) { + view.fireEvent('groupcollapse', view, Ext.get(this.getHeaderNode(groupName)), groupName); + } + } + + }, + + doCollapseExpand: function(collapsed, groupName, focus) { + var me = this, + view = me.view, + lockingPartner = me.lockingPartner, + header; + + if (me.groupCache[groupName].isCollapsed != collapsed) { + me.groupCache[groupName].isCollapsed = collapsed; + + Ext.suspendLayouts(); + me.dataSource.onRefresh(); + header = Ext.get(this.getHeaderNode(groupName)); + view.fireEvent(collapsed ? 'groupcollapse' : 'groupexpand', view, header, groupName); + + + if (lockingPartner) { + lockingPartner.doCollapseExpand(collapsed, groupName, focus); + } + Ext.resumeLayouts(true); + if (focus) { + header.up(view.getItemSelector()).scrollIntoView(view.el, null, true); + } + } + }, + + onGroupChange: function() { + var me = this, + field = me.getGroupField(), + menuItem, + visibleGridColumns, + groupingByLastVisibleColumn; + + if (me.hideGroupedHeader) { + if (me.lastGroupField) { + menuItem = me.getMenuItem(me.lastGroupField); + if (menuItem) { + menuItem.setChecked(true); + } + } + if (field) { + visibleGridColumns = me.view.headerCt.getVisibleGridColumns(); + + + + groupingByLastVisibleColumn = ((visibleGridColumns.length === 1) && (visibleGridColumns[0].dataIndex == field)); + menuItem = me.getMenuItem(field); + if (menuItem && !groupingByLastVisibleColumn) { + menuItem.setChecked(false); + } + } + } + me.refreshIf(); + me.lastGroupField = field; + }, + + + getMenuItem: function(dataIndex){ + var view = this.view, + header = view.headerCt.down('gridcolumn[dataIndex=' + dataIndex + ']'), + menu = view.headerCt.getMenu(); + + return header ? menu.down('menuitem[headerId='+ header.id +']') : null; + }, + + onGroupKey: function(keyCode, event) { + var me = this, + groupName = me.getGroupName(event.target); + + if (groupName) { + me.onGroupClick(me.view, event.target, groupName, event); + } + }, + + + onGroupClick: function(view, rowElement, groupName, e) { + var me = this, + groupCache = me.groupCache, + groupIsCollapsed = !me.isExpanded(groupName), + g; + + if (me.collapsible) { + + + if (e.ctrlKey) { + Ext.suspendLayouts(); + for (g in groupCache) { + if (g === groupName) { + if (groupIsCollapsed) { + me.expand(groupName); + } + } else { + me.doCollapseExpand(true, g, false); + } + } + Ext.resumeLayouts(true); + return; + } + + if (groupIsCollapsed) { + me.expand(groupName); + } else { + me.collapse(groupName); + } + } + }, + + setupRowData: function(record, idx, rowValues) { + var me = this, + data = me.refreshData, + groupInfo = me.groupInfo, + header = data.header, + groupField = data.groupField, + store = me.view.dataSource, + grouper, groupName, prev, next; + + rowValues.isCollapsedGroup = false; + rowValues.summaryRecord = null; + + if (data.doGrouping) { + grouper = me.view.store.groupers.first(); + groupName = grouper.getGroupString(record); + + + rowValues.isFirstRow = idx === 0; + if (!rowValues.isFirstRow) { + prev = store.getAt(idx - 1); + + if (prev) { + + rowValues.isFirstRow = !prev.isEqual(grouper.getGroupString(prev), groupName); + } + } + + + rowValues.isLastRow = idx == store.getTotalCount() - 1; + if (!rowValues.isLastRow) { + next = store.getAt(idx + 1); + if (next) { + + rowValues.isLastRow = !next.isEqual(grouper.getGroupString(next), groupName); + } + } + + if (rowValues.isFirstRow) { + groupInfo.groupField = groupField; + groupInfo.name = groupName; + groupInfo.groupValue = record.get(groupField); + groupInfo.columnName = header ? header.text : groupField; + rowValues.collapsibleCls = me.collapsible ? me.collapsibleCls : me.hdNotCollapsibleCls; + rowValues.groupId = me.createGroupId(groupName); + + if (!me.isExpanded(groupName)) { + rowValues.itemClasses.push(me.hdCollapsedCls); + rowValues.isCollapsedGroup = true; + } + + + if (store.buffered) { + groupInfo.rows = groupInfo.children = []; + } else { + groupInfo.rows = groupInfo.children = me.getRecordGroup(record).children; + } + rowValues.groupInfo = groupInfo; + } + + if (rowValues.isLastRow) { + + if (me.showSummaryRow) { + rowValues.summaryRecord = data.summaryData[groupName]; + } + } + } + }, + + setup: function(rows, rowValues) { + var me = this, + data = me.refreshData; + + me.skippedRows = 0; + if (rowValues.view.bufferedRenderer) { + rowValues.view.bufferedRenderer.variableRowHeight = true; + } + data.groupField = me.getGroupField(); + data.header = me.getGroupedHeader(data.groupField); + data.doGrouping = !me.disabled && me.view.store.isGrouped(); + rowValues.groupHeaderTpl = Ext.XTemplate.getTpl(me, 'groupHeaderTpl'); + + if (me.showSummaryRow) { + data.summaryData = me.generateSummaryData(); + } + }, + + cleanup: function(rows, rowValues) { + var data = this.refreshData; + + rowValues.groupInfo = rowValues.groupHeaderTpl = rowValues.isFirstRow = null; + data.groupField = data.header = null; + }, + + getGroupName: function(element) { + var me = this, + view = me.view, + eventSelector = me.eventSelector, + parts, + targetEl, + row; + + + targetEl = Ext.fly(element).findParent(eventSelector); + + if (!targetEl) { + + row = Ext.fly(element).findParent(view.itemSelector); + if (row) { + targetEl = row.down(eventSelector, true); + } + } + + if (targetEl) { + parts = targetEl.id.split(view.id + '-hd-'); + if (parts.length === 2) { + return Ext.htmlDecode(parts[1]); + } + } + }, + + + getRecordGroup: function(record) { + var grouper = this.view.store.groupers.first(); + if (grouper) { + return this.groupCache[grouper.getGroupString(record)]; + } + }, + + createGroupId: function(group) { + return this.view.id + '-hd-' + Ext.htmlEncode(group); + }, + + createGroupCls: function(group) { + return this.view.id + '-' + Ext.htmlEncode(group) + '-item'; + }, + + getGroupField: function(){ + return this.view.store.getGroupField(); + }, + + getGroupedHeader: function(groupField) { + var me = this, + headerCt = me.view.headerCt, + partner = me.lockingPartner, + selector, header; + + groupField = groupField || this.getGroupField(); + + if (groupField) { + selector = '[dataIndex=' + groupField + ']'; + header = headerCt.down(selector); + + if (!header && partner) { + header = partner.view.headerCt.down(selector); + } + } + return header || null; + }, + + getFireEventArgs: function(type, view, targetEl, e) { + return [type, view, targetEl, this.getGroupName(targetEl), e]; + }, + + destroy: function(){ + var me = this, + dataSource = me.dataSource; + + delete me.view; + delete me.prunedHeader; + delete me.grid; + me.callParent(); + me.groupCache = null; + if (dataSource) { + dataSource.bindStore(null); + } + }, + + onReconfigure: function(grid, store, columns, oldStore, oldColumns) { + var me = grid; + + if (store !== oldStore) { + + if (store.buffered !== oldStore.buffered) { + Ext.Error.raise('Cannot reconfigure grouping switching between buffered and non-buffered stores'); + } + if (store.buffered) { + me.bindStore(store); + me.dataSource.processStore(store); + } + } + } +}); + + +Ext.define('Ext.grid.feature.GroupingSummary', { + + extend: Ext.grid.feature.Grouping , + + alias: 'feature.groupingsummary', + + showSummaryRow: true, + + vetoEvent: function(record, row, rowIndex, e){ + var result = this.callParent(arguments); + if (result !== false) { + if (e.getTarget(this.summaryRowSelector)) { + result = false; + } + } + return result; + } +}); + + +Ext.define('Ext.grid.feature.RowBody', { + extend: Ext.grid.feature.Feature , + alias: 'feature.rowbody', + + rowBodyCls: Ext.baseCSSPrefix + 'grid-row-body', + rowBodyHiddenCls: Ext.baseCSSPrefix + 'grid-row-body-hidden', + rowBodyTdSelector: 'td.' + Ext.baseCSSPrefix + 'grid-cell-rowbody', + eventPrefix: 'rowbody', + eventSelector: 'tr.' + Ext.baseCSSPrefix + 'grid-rowbody-tr', + + tableTpl: { + before: function(values, out) { + var view = values.view, + rowValues = view.rowValues; + + if (!rowValues.visibleColumns) { + rowValues.visibleColumns = view.headerCt.getVisibleGridColumns(); + } + this.rowBody.setup(values.rows, rowValues); + }, + after: function(values, out) { + var view = values.view, + rowValues = view.rowValues; + + this.rowBody.cleanup(values.rows, rowValues); + }, + priority: 100 + }, + + extraRowTpl: [ + '{%', + 'values.view.rowBodyFeature.setupRowData(values.record, values.recordIndex, values);', + 'this.nextTpl.applyOut(values, out, parent);', + '%}', + '', + '', + '
    {rowBody}
    ', + '', + '', { + priority: 100, + + syncRowHeights: function(firstRow, secondRow) { + var owner = this.owner, + firstRowBody = Ext.fly(firstRow).down(owner.eventSelector, true), + secondRowBody, + firstHeight, secondHeight; + + + if (firstRowBody && (secondRowBody = Ext.fly(secondRow).down(owner.eventSelector, true))) { + if ((firstHeight = firstRowBody.offsetHeight) > (secondHeight = secondRowBody.offsetHeight)) { + Ext.fly(secondRowBody).setHeight(firstHeight); + } + else if (secondHeight > firstHeight) { + Ext.fly(firstRowBody).setHeight(secondHeight); + } + } + }, + + syncContent: function(destRow, sourceRow) { + var owner = this.owner, + destRowBody = Ext.fly(destRow).down(owner.eventSelector, true), + sourceRowBody; + + + if (destRowBody && (sourceRowBody = Ext.fly(sourceRow).down(owner.eventSelector, true))) { + Ext.fly(destRowBody).syncContent(sourceRowBody); + } + } + } + ], + + init: function(grid) { + var me = this, + view = me.view; + + view.rowBodyFeature = me; + + + + if (!view.findFeature('rowwrap')) { + grid.mon(view, { + element: 'el', + mousedown: me.onMouseDown, + scope: me + }); + + me.mon(grid.getStore(), 'remove', me.onStoreRemove, me); + } + + view.headerCt.on({ + columnschanged: me.onColumnsChanged, + scope: me + }); + view.addTableTpl(me.tableTpl).rowBody = me; + view.addRowTpl(Ext.XTemplate.getTpl(this, 'extraRowTpl')); + me.callParent(arguments); + }, + + onStoreRemove: function(store, model, index){ + var view = this.view, + node; + + if (view.rendered) { + node = view.getNode(index); + if (node) { + node = Ext.fly(node).next(this.eventSelector); + if (node) { + node.remove(); + } + } + } + }, + + + onMouseDown: function(e) { + var me = this, + tableRow = e.getTarget(me.eventSelector); + + + if (tableRow && Ext.fly(tableRow = tableRow.previousSibling).is(me.view.getItemSelector())) { + e.target = tableRow; + me.view.handleEvent(e); + } + }, + + getSelectedRow: function(view, rowIndex) { + var selectedRow = view.getNode(rowIndex, false); + if (selectedRow) { + return Ext.fly(selectedRow).down(this.eventSelector); + } + return null; + }, + + + onColumnsChanged: function(headerCt) { + var items = this.view.el.query(this.rowBodyTdSelector), + colspan = headerCt.getGridColumns().length, + len = items.length, + i; + + for (i = 0; i < len; ++i) { + items[i].colSpan = colspan; + } + }, + + + setupRowData: function(record, rowIndex, rowValues) { + if (this.getAdditionalData) { + Ext.apply(rowValues, this.getAdditionalData(record.data, rowIndex, record, rowValues)); + } + }, + + setup: function(rows, rowValues) { + rowValues.rowBodyCls = this.rowBodyCls; + rowValues.rowBodyColspan = rowValues.view.getGridColumns().length; + }, + + cleanup: function(rows, rowValues) { + rowValues.rowBodyCls = rowValues.rowBodyColspan = rowValues.rowBody = null; + } +}); + + +Ext.define('Ext.grid.feature.RowWrap', { + extend: Ext.grid.feature.Feature , + alias: 'feature.rowwrap', + + rowWrapTd: 'td.' + Ext.baseCSSPrefix + 'grid-rowwrap', + + + hasFeatureEvent: false, + + tableTpl: { + before: function(values, out) { + if (values.view.bufferedRenderer) { + values.view.bufferedRenderer.variableRowHeight = true; + } + }, + priority: 200 + }, + + wrapTpl: [ + '', + '', + '', + '{[values.view.renderColumnSizer(out)]}', + '{%', + 'values.itemClasses.length = 0;', + 'this.nextTpl.applyOut(values, out, parent)', + '%}', + '
    ', + '', + '', { + priority: 200 + } + ], + + init: function(grid) { + var me = this; + me.view.addTableTpl(me.tableTpl); + me.view.addRowTpl(Ext.XTemplate.getTpl(me, 'wrapTpl')); + me.view.headerCt.on({ + columnhide: me.onColumnHideShow, + columnshow: me.onColumnHideShow, + scope: me + }); + }, + + + onColumnHideShow: function() { + var view = this.view, + items = view.el.query(this.rowWrapTd), + colspan = view.headerCt.getGridColumns().length, + len = items.length, + i; + + for (i = 0; i < len; ++i) { + items[i].colSpan = colspan; + } + } +}); + + +Ext.define('Ext.grid.feature.Summary', { + + + + extend: Ext.grid.feature.AbstractSummary , + + alias: 'feature.summary', + + + dock: undefined, + + dockedSummaryCls: Ext.baseCSSPrefix + 'docked-summary', + + panelBodyCls: Ext.baseCSSPrefix + 'summary-', + + init: function(grid) { + var me = this, + view = me.view; + + me.callParent(arguments); + + if (me.dock) { + grid.headerCt.on({ + afterlayout: me.onStoreUpdate, + scope: me + }); + grid.on({ + beforerender: function() { + me.summaryBar = grid.addDocked({ + childEls: ['innerCt'], + renderTpl: [ + '
    ', + '', + '', + '
    ', + '
    ' + ], + style: 'overflow:hidden', + itemId: 'summaryBar', + cls: [ me.dockedSummaryCls, me.dockedSummaryCls + '-' + me.dock ], + xtype: 'component', + dock: me.dock, + weight: 10000000 + })[0]; + }, + afterrender: function() { + grid.body.addCls(me.panelBodyCls + me.dock); + view.mon(view.el, { + scroll: me.onViewScroll, + scope: me + }); + me.onStoreUpdate(); + }, + single: true + }); + + + grid.headerCt.afterComponentLayout = Ext.Function.createSequence(grid.headerCt.afterComponentLayout, function() { + me.summaryBar.innerCt.setWidth(this.getFullWidth() + Ext.getScrollbarSize().width); + }); + } else { + me.view.addFooterFn(me.renderTFoot); + } + + grid.on({ + columnmove: me.onStoreUpdate, + scope: me + }); + + + view.mon(view.store, { + update: me.onStoreUpdate, + datachanged: me.onStoreUpdate, + scope: me + }); + }, + + renderTFoot: function(values, out) { + var view = values.view, + me = view.findFeature('summary'); + + if (me.showSummaryRow) { + out.push(''); + me.outputSummaryRecord(me.createSummaryRecord(view), values, out); + out.push(''); + } + }, + + vetoEvent: function(record, row, rowIndex, e) { + return !e.getTarget(this.summaryRowSelector); + }, + + onViewScroll: function() { + this.summaryBar.el.dom.scrollLeft = this.view.el.dom.scrollLeft; + }, + + createSummaryRecord: function(view) { + var columns = view.headerCt.getVisibleGridColumns(), + info = { + records: view.store.getRange() + }, + colCount = columns.length, i, column, + summaryRecord = this.summaryRecord || (this.summaryRecord = new view.store.model(null, view.id + '-summary-record')); + + + summaryRecord.beginEdit(); + for (i = 0; i < colCount; i++) { + column = columns[i]; + + + + if (!column.dataIndex) { + column.dataIndex = column.id; + } + + summaryRecord.set(column.dataIndex, this.getSummary(view.store, column.summaryType, column.dataIndex, info)); + } + summaryRecord.endEdit(true); + + summaryRecord.commit(true); + summaryRecord.isSummary = true; + + return summaryRecord; + }, + + onStoreUpdate: function() { + var me = this, + view = me.view, + record = me.createSummaryRecord(view), + newRowDom = view.createRowElement(record, -1), + oldRowDom, partner, + p; + + if (!view.rendered) { + return; + } + + + if (me.dock) { + oldRowDom = me.summaryBar.el.down('.' + me.summaryRowCls, true); + } + + + else { + oldRowDom = me.view.getNode(record); + } + + if (oldRowDom) { + p = oldRowDom.parentNode; + p.insertBefore(newRowDom, oldRowDom); + p.removeChild(oldRowDom); + + partner = me.lockingPartner; + + + if (partner && partner.grid.rendered && !me.calledFromLockingPartner) { + partner.calledFromLockingPartner = true; + partner.onStoreUpdate(); + partner.calledFromLockingPartner = false; + } + } + + if (me.dock) { + me.onColumnHeaderLayout(); + } + }, + + + onColumnHeaderLayout: function() { + var view = this.view, + columns = view.headerCt.getGridColumns(), + column, + len = columns.length, i, + summaryEl = this.summaryBar.el, + el; + + for (i = 0; i < len; i++) { + column = columns[i]; + el = summaryEl.down(view.getCellSelector(column)); + if (el) { + if (column.hidden) { + el.setDisplayed(false); + } else { + el.setDisplayed(true); + el.setWidth(column.width || (column.lastBox ? column.lastBox.width : 100)); + } + } + } + } +}); + + +Ext.define('Ext.grid.locking.HeaderContainer', { + extend: Ext.grid.header.Container , + + constructor: function(lockable) { + var me = this, + events, + event, + eventNames = []; + + me.lockable = lockable; + me.callParent(); + + + events = me.lockable.lockedGrid.headerCt.events; + for (event in events) { + if (events.hasOwnProperty(event)) { + eventNames.push(event); + } + } + me.relayEvents(me.lockable.lockedGrid.headerCt, eventNames); + me.relayEvents(me.lockable.normalGrid.headerCt, eventNames); + }, + + + + getGridColumns: function() { + return this.lockable.lockedGrid.headerCt.getGridColumns().concat(this.lockable.normalGrid.headerCt.getGridColumns()); + }, + + + getColumnsState: function () { + var me = this, + locked = me.lockable.lockedGrid.headerCt.getColumnsState(), + normal = me.lockable.normalGrid.headerCt.getColumnsState(); + + return locked.concat(normal); + }, + + + applyColumnsState: function (columns) { + var me = this, + lockedGrid = me.lockable.lockedGrid, + lockedHeaderCt = lockedGrid.headerCt, + normalHeaderCt = me.lockable.normalGrid.headerCt, + lockedCols = Ext.Array.toValueMap(lockedHeaderCt.items.items, 'headerId'), + normalCols = Ext.Array.toValueMap(normalHeaderCt.items.items, 'headerId'), + locked = [], + normal = [], + lockedWidth = 1, + length = columns.length, + i, existing, + lockedDefault, + col; + + for (i = 0; i < length; i++) { + col = columns[i]; + + lockedDefault = lockedCols[col.id]; + existing = lockedDefault || normalCols[col.id]; + + if (existing) { + if (existing.applyColumnState) { + existing.applyColumnState(col); + } + if (existing.locked === undefined) { + existing.locked = !!lockedDefault; + } + if (existing.locked) { + locked.push(existing); + if (!existing.hidden && typeof existing.width == 'number') { + lockedWidth += existing.width; + } + } else { + normal.push(existing); + } + } + } + + + if (locked.length + normal.length == lockedHeaderCt.items.getCount() + normalHeaderCt.items.getCount()) { + lockedHeaderCt.removeAll(false); + normalHeaderCt.removeAll(false); + + lockedHeaderCt.add(locked); + normalHeaderCt.add(normal); + + lockedGrid.setWidth(lockedWidth); + } + } +}); + + +Ext.define('Ext.grid.locking.View', { + alternateClassName: 'Ext.grid.LockingView', + + mixins: { + observable: Ext.util.Observable + }, + + + isLockingView: true, + + eventRelayRe: /^(beforeitem|beforecontainer|item|container|cell|refresh)/, + + constructor: function(config){ + var me = this, + eventNames = [], + eventRe = me.eventRelayRe, + locked = config.locked.getView(), + normal = config.normal.getView(), + events, + event; + + Ext.apply(me, { + lockedView: locked, + normalView: normal, + lockedGrid: config.locked, + normalGrid: config.normal, + panel: config.panel + }); + me.mixins.observable.constructor.call(me, config); + + + events = locked.events; + for (event in events) { + if (events.hasOwnProperty(event) && eventRe.test(event)) { + eventNames.push(event); + } + } + me.relayEvents(locked, eventNames); + me.relayEvents(normal, eventNames); + + normal.on({ + scope: me, + itemmouseleave: me.onItemMouseLeave, + itemmouseenter: me.onItemMouseEnter + }); + + locked.on({ + scope: me, + itemmouseleave: me.onItemMouseLeave, + itemmouseenter: me.onItemMouseEnter + }); + + me.panel.on({ + render: me.onPanelRender, + scope: me + }); + }, + + onPanelRender: function() { + var me = this, + mask = me.loadMask, + cfg = { + target: me.panel, + msg: me.loadingText, + msgCls: me.loadingCls, + useMsg: me.loadingUseMsg, + store: me.panel.store + }; + + + + me.el = me.panel.body; + me.fireEvent('render', me); + + if (mask) { + + if (Ext.isObject(mask)) { + cfg = Ext.apply(cfg, mask); + } + + + + + me.loadMask = new Ext.LoadMask(cfg); + } + }, + + getGridColumns: function() { + var cols = this.lockedGrid.headerCt.getGridColumns(); + return cols.concat(this.normalGrid.headerCt.getGridColumns()); + }, + + getEl: function(column){ + return this.getViewForColumn(column).getEl(); + }, + + getViewForColumn: function(column) { + var view = this.lockedView, + inLocked; + + view.headerCt.cascade(function(col){ + if (col === column) { + inLocked = true; + return false; + } + }); + + return inLocked ? view : this.normalView; + }, + + onItemMouseEnter: function(view, record){ + var me = this, + locked = me.lockedView, + other = me.normalView, + item; + + if (view.trackOver) { + if (view !== locked) { + other = locked; + } + item = other.getNode(record, false); + other.highlightItem(item); + } + }, + + onItemMouseLeave: function(view, record){ + var me = this, + locked = me.lockedView, + other = me.normalView; + + if (view.trackOver) { + if (view !== locked) { + other = locked; + } + other.clearHighlight(); + } + }, + + relayFn: function(name, args){ + args = args || []; + + var view = this.lockedView; + view[name].apply(view, args); + view = this.normalView; + view[name].apply(view, args); + }, + + getSelectionModel: function(){ + return this.panel.getSelectionModel(); + }, + + getStore: function(){ + return this.panel.store; + }, + + getNode: function(nodeInfo, dataRow) { + + return this.normalView.getNode(nodeInfo, dataRow); + }, + + getCell: function(record, column) { + var view = this.getViewForColumn(column), + row = view.getNode(record, true); + + return Ext.fly(row).down(column.getCellSelector()); + }, + + indexOf: function(record) { + var result = this.lockedView.indexOf(record); + if (!result) { + result = this.normalView.indexOf(record); + } + return result; + }, + + focus: function() { + var p = this.getSelectionModel().getCurrentPosition(), + v = p ? p.view : this.normalView; + + v.focus(); + }, + + focusCell: function(position) { + position.view.focusCell(position); + }, + + isVisible: function(deep) { + return this.panel.isVisible(deep); + }, + + getRecord: function(node) { + var result = this.lockedView.getRecord(node); + if (!result) { + result = this.normalView.getRecord(node); + } + return result; + }, + + scrollBy: function(){ + var normal = this.normalView; + normal.scrollBy.apply(normal, arguments); + }, + + addElListener: function(eventName, fn, scope){ + this.relayFn('addElListener', arguments); + }, + + refreshNode: function(){ + this.relayFn('refreshNode', arguments); + }, + + refresh: function(){ + this.relayFn('refresh', arguments); + }, + + bindStore: function(){ + this.relayFn('bindStore', arguments); + }, + + addRowCls: function(){ + this.relayFn('addRowCls', arguments); + }, + + removeRowCls: function(){ + this.relayFn('removeRowCls', arguments); + }, + + destroy: function(){ + var me = this, + mask = me.loadMask; + + + + me.clearListeners(); + if (mask && mask.bindStore) { + mask.bindStore(null); + } + } + +}); + + +Ext.define('Ext.grid.locking.Lockable', { + alternateClassName: 'Ext.grid.Lockable', + + + + + + + + + syncRowHeight: true, + + + + + + + + headerCounter: 0, + + + scrollDelta: 40, + + + + + + lockedGridCls: Ext.baseCSSPrefix + 'grid-inner-locked', + + + + unlockText: 'Unlock', + + + lockText: 'Lock', + + + + + bothCfgCopy: [ + 'invalidateScrollerOnRefresh', + 'hideHeaders', + 'enableColumnHide', + 'enableColumnMove', + 'enableColumnResize', + 'sortableColumns', + 'columnLines', + 'rowLines' + ], + normalCfgCopy: [ + 'verticalScroller', + 'verticalScrollDock', + 'verticalScrollerType', + 'scroll' + ], + lockedCfgCopy: [], + + determineXTypeToCreate: function(lockedSide) { + var me = this, + typeToCreate, + xtypes, xtypesLn, xtype, superxtype; + + if (me.subGridXType) { + typeToCreate = me.subGridXType; + } else { + + + if (!lockedSide) { + return 'gridpanel'; + } + xtypes = this.getXTypes().split('/'); + xtypesLn = xtypes.length; + xtype = xtypes[xtypesLn - 1]; + superxtype = xtypes[xtypesLn - 2]; + + if (superxtype !== 'tablepanel') { + typeToCreate = superxtype; + } else { + typeToCreate = xtype; + } + } + + return typeToCreate; + }, + + + + injectLockable: function() { + + this.lockable = true; + + + this.hasView = true; + + var me = this, + scrollbarHeight = Ext.getScrollbarSize().width, + store = me.store = Ext.StoreManager.lookup(me.store), + + + selModel = me.getSelectionModel(), + + + allFeatures, + + + allPlugins, + + lockedGrid, + normalGrid, + i, + columns, + lockedHeaderCt, + normalHeaderCt, + lockedView, + normalView, + listeners; + + allFeatures = me.constructLockableFeatures(); + + + if (me.features) { + me.features = null; + } + + + allPlugins = me.constructLockablePlugins(); + me.plugins = allPlugins.topPlugins; + + lockedGrid = Ext.apply({ + id: me.id + '-locked', + ownerLockable: me, + xtype: me.determineXTypeToCreate(true), + store: store, + scrollerOwner: false, + + + animate: false, + + scroll: scrollbarHeight ? false : 'vertical', + selModel: selModel, + border: false, + cls: me.lockedGridCls, + isLayoutRoot: function() { + return false; + }, + features: allFeatures.lockedFeatures, + plugins: allPlugins.lockedPlugins + }, me.lockedGridConfig); + + normalGrid = Ext.apply({ + id: me.id + '-normal', + ownerLockable: me, + xtype: me.determineXTypeToCreate(), + store: store, + scrollerOwner: false, + selModel: selModel, + border: false, + isLayoutRoot: function() { + return false; + }, + features: allFeatures.normalFeatures, + plugins: allPlugins.normalPlugins + }, me.normalGridConfig); + + me.addCls(Ext.baseCSSPrefix + 'grid-locked'); + + + + + Ext.copyTo(normalGrid, me, me.bothCfgCopy, true); + Ext.copyTo(lockedGrid, me, me.bothCfgCopy, true); + Ext.copyTo(normalGrid, me, me.normalCfgCopy, true); + Ext.copyTo(lockedGrid, me, me.lockedCfgCopy, true); + for (i = 0; i < me.normalCfgCopy.length; i++) { + delete me[me.normalCfgCopy[i]]; + } + for (i = 0; i < me.lockedCfgCopy.length; i++) { + delete me[me.lockedCfgCopy[i]]; + } + + me.addEvents( + + 'processcolumns', + + + 'lockcolumn', + + + 'unlockcolumn' + ); + + me.addStateEvents(['lockcolumn', 'unlockcolumn']); + + columns = me.processColumns(me.columns); + + + + lockedGrid.width = columns.lockedWidth + Ext.num(selModel.headerWidth, 0) + (columns.locked.items.length ? 1 : 0); + lockedGrid.columns = columns.locked; + normalGrid.columns = columns.normal; + + + normalGrid.flex = 1; + lockedGrid.viewConfig = me.lockedViewConfig || {}; + lockedGrid.viewConfig.loadingUseMsg = false; + lockedGrid.viewConfig.loadMask = false; + + + + + + if (scrollbarHeight) { + lockedGrid.viewConfig.style = 'border-bottom:' + scrollbarHeight + + 'px solid #f6f6f6;' + (lockedGrid.viewConfig.style || ''); + } + + normalGrid.viewConfig = me.normalViewConfig || {}; + normalGrid.viewConfig.loadMask = false; + + + Ext.applyIf(lockedGrid.viewConfig, me.viewConfig); + Ext.applyIf(normalGrid.viewConfig, me.viewConfig); + + me.lockedGrid = Ext.ComponentManager.create(lockedGrid); + + if (me.isTree) { + + me.lockedGrid.getView().animate = false; + + + normalGrid.store = me.lockedGrid.view.store; + + + normalGrid.deferRowRender = false; + + + normalGrid.viewConfig.stripeRows = me.lockedGrid.view.stripeRows; + normalGrid.rowLines = me.lockedGrid.rowLines; + } + + + lockedView = me.lockedGrid.getView(); + normalGrid.viewConfig.lockingPartner = lockedView; + me.normalGrid = Ext.ComponentManager.create(normalGrid); + lockedView.lockingPartner = normalView = me.normalGrid.getView(); + + me.view = new Ext.grid.locking.View({ + loadingText: normalView.loadingText, + loadingCls: normalView.loadingCls, + loadingUseMsg: normalView.loadingUseMsg, + loadMask: me.loadMask !== false, + locked: me.lockedGrid, + normal: me.normalGrid, + panel: me + }); + + + listeners = { + scroll: { + fn: me.onLockedViewScroll, + element: 'el', + scope: me + } + }; + + + + + + if (scrollbarHeight) { + me.lockedGrid.on({ + afterlayout: me.afterLockedViewLayout, + scope: me + }); + + + lockedView.getOverflowStyle(); + + + if (lockedView.scrollFlags.y) { + me.lockedGrid.headerCt.forceFit = true; + } + + else { + listeners.mousewheel = { + fn: me.onLockedViewMouseWheel, + element: 'el', + scope: me + }; + } + } + lockedView.on(listeners); + + + listeners = { + scroll: { + fn: me.onNormalViewScroll, + element: 'el', + scope: me + }, + scope: me + }; + normalView.on(listeners); + + lockedHeaderCt = me.lockedGrid.headerCt; + normalHeaderCt = me.normalGrid.headerCt; + + + + me.headerCt = me.view.headerCt = new Ext.grid.locking.HeaderContainer(this); + + lockedHeaderCt.lockedCt = true; + lockedHeaderCt.lockableInjected = true; + normalHeaderCt.lockableInjected = true; + + lockedHeaderCt.on({ + + add: { + buffer: 1, + scope: me, + fn: me.onLockedHeaderAdd + }, + columnshow: me.onLockedHeaderShow, + columnhide: me.onLockedHeaderHide, + sortchange: me.onLockedHeaderSortChange, + columnresize: me.onLockedHeaderResize, + scope: me + }); + + normalHeaderCt.on({ + sortchange: me.onNormalHeaderSortChange, + scope: me + }); + + me.modifyHeaderCt(); + me.items = [me.lockedGrid, me.normalGrid]; + + me.relayHeaderCtEvents(lockedHeaderCt); + me.relayHeaderCtEvents(normalHeaderCt); + + + + me.storeRelayers = me.relayEvents(store, [ + + 'filterchange' + ]); + + me.layout = { + type: 'hbox', + align: 'stretch' + }; + }, + + getLockingViewConfig: function(){ + return { + xclass: 'Ext.grid.locking.View', + locked: this.lockedGrid, + normal: this.normalGrid, + panel: this + }; + }, + + processColumns: function(columns){ + + var i = 0, + len = columns.length, + lockedWidth = 0, + lockedHeaders = [], + normalHeaders = [], + column, + result; + + for (; i < len; ++i) { + column = columns[i]; + + + if (!column.isComponent) { + column = Ext.ComponentManager.create(columns[i], 'gridcolumn'); + } + + + + column.processed = true; + if (column.locked || column.autoLock) { + if (!column.hidden) { + lockedWidth += this.getColumnWidth(column) || Ext.grid.header.Container.prototype.defaultWidth; + } + lockedHeaders.push(column); + } else { + normalHeaders.push(column); + } + if (!column.headerId) { + column.headerId = (column.initialConfig || column).id || ('h' + (++this.headerCounter)); + } + } + result = { + lockedWidth: lockedWidth, + locked: { + items: lockedHeaders, + itemId: 'lockedHeaderCt', + stretchMaxPartner: '^^>>#normalHeaderCt' + }, + normal: { + items: normalHeaders, + itemId: 'normalHeaderCt', + stretchMaxPartner: '^^>>#lockedHeaderCt' + } + }; + this.fireEvent('processcolumns', this, result.lockedHeaders, result.normalHeaders); + return result; + }, + + + + getColumnWidth: function(column) { + var result = column.width || 0, + subcols, len, i; + + if (!result && column.isGroupHeader) { + subcols = column.items.items; + len = subcols.length; + for (i = 0; i < len; i++) { + result += this.getColumnWidth(subcols[i]); + } + } + return result; + }, + + + + + afterLockedViewLayout: function() { + var me = this, + lockedView = me.lockedGrid.getView(), + lockedViewEl = lockedView.el.dom, + spacerHeight = (me.normalGrid.headerCt.tooNarrow ? Ext.getScrollbarSize().height : 0); + + + if (lockedView.scrollFlags.x && lockedViewEl.scrollWidth > lockedViewEl.clientWidth) { + spacerHeight = 0; + } + + lockedView.el.dom.style.borderBottomWidth = spacerHeight + 'px'; + + + + if (!Ext.isBorderBox) { + lockedView.el.setHeight(lockedView.lastBox.height); + } + }, + + + onLockedViewMouseWheel: function(e) { + var me = this, + scrollDelta = -me.scrollDelta, + deltaY = scrollDelta * e.getWheelDeltas().y, + vertScrollerEl = me.lockedGrid.getView().el.dom, + verticalCanScrollDown, verticalCanScrollUp; + + if (!me.ignoreMousewheel) { + if (vertScrollerEl) { + verticalCanScrollDown = vertScrollerEl.scrollTop !== vertScrollerEl.scrollHeight - vertScrollerEl.clientHeight; + verticalCanScrollUp = vertScrollerEl.scrollTop !== 0; + } + + if ((deltaY < 0 && verticalCanScrollUp) || (deltaY > 0 && verticalCanScrollDown)) { + e.stopEvent(); + + + + + vertScrollerEl.scrollTop += deltaY; + me.normalGrid.getView().el.dom.scrollTop = vertScrollerEl.scrollTop; + + + me.onNormalViewScroll(); + } + } + }, + + onLockedViewScroll: function() { + var me = this, + lockedView = me.lockedGrid.getView(), + normalView = me.normalGrid.getView(), + normalDom = normalView.el.dom, + lockedDom = lockedView.el.dom, + normalTable, + lockedTable; + + + if (normalDom.scrollTop !== lockedDom.scrollTop) { + normalDom.scrollTop = lockedDom.scrollTop; + + + if (me.store.buffered) { + lockedTable = lockedView.el.child('table', true); + normalTable = normalView.el.child('table', true); + normalTable.style.position = 'absolute'; + normalTable.style.top = lockedTable.style.top; + } + } + }, + + onNormalViewScroll: function() { + var me = this, + lockedView = me.lockedGrid.getView(), + normalView = me.normalGrid.getView(), + normalDom = normalView.el.dom, + lockedDom = lockedView.el.dom, + normalTable, + lockedTable; + + + + + + + + + + + + if (normalDom.scrollTop !== lockedDom.scrollTop) { + lockedDom.scrollTop = normalDom.scrollTop; + + + if (me.store.buffered) { + lockedTable = lockedView.el.child('table', true); + normalTable = normalView.el.child('table', true); + lockedTable.style.position = 'absolute'; + lockedTable.style.top = normalTable.style.top; + } + } + }, + + + syncRowHeights: function() { + var me = this, + i, + lockedView = me.lockedGrid.getView(), + normalView = me.normalGrid.getView(), + lockedRowEls = lockedView.all.slice(), + normalRowEls = normalView.all.slice(), + ln = lockedRowEls.length, + scrollTop; + + + if (normalRowEls.length === ln) { + + + for (i = 0; i < ln; i++) { + normalView.syncRowHeights(lockedRowEls[i], normalRowEls[i]); + } + + + scrollTop = normalView.el.dom.scrollTop; + normalView.el.dom.scrollTop = scrollTop; + lockedView.el.dom.scrollTop = scrollTop; + } + }, + + + + modifyHeaderCt: function() { + var me = this; + me.lockedGrid.headerCt.getMenuItems = me.getMenuItems(me.lockedGrid.headerCt.getMenuItems, true); + me.normalGrid.headerCt.getMenuItems = me.getMenuItems(me.normalGrid.headerCt.getMenuItems, false); + me.lockedGrid.headerCt.showMenuBy = Ext.Function.createInterceptor(me.lockedGrid.headerCt.showMenuBy, me.showMenuBy); + me.normalGrid.headerCt.showMenuBy = Ext.Function.createInterceptor(me.normalGrid.headerCt.showMenuBy, me.showMenuBy); + }, + + onUnlockMenuClick: function() { + this.unlock(); + }, + + onLockMenuClick: function() { + this.lock(); + }, + + showMenuBy: function(t, header) { + var menu = this.getMenu(), + unlockItem = menu.down('#unlockItem'), + lockItem = menu.down('#lockItem'), + sep = unlockItem.prev(); + + if (header.lockable === false) { + sep.hide(); + unlockItem.hide(); + lockItem.hide(); + } else { + sep.show(); + unlockItem.show(); + lockItem.show(); + if (!unlockItem.initialConfig.disabled) { + unlockItem.setDisabled(header.lockable === false); + } + if (!lockItem.initialConfig.disabled) { + lockItem.setDisabled(!header.isLockable()); + } + } + }, + + getMenuItems: function(getMenuItems, locked) { + var me = this, + unlockText = me.unlockText, + lockText = me.lockText, + unlockCls = Ext.baseCSSPrefix + 'hmenu-unlock', + lockCls = Ext.baseCSSPrefix + 'hmenu-lock', + unlockHandler = Ext.Function.bind(me.onUnlockMenuClick, me), + lockHandler = Ext.Function.bind(me.onLockMenuClick, me); + + + return function() { + + + + var o = getMenuItems.call(this); + o.push('-', { + itemId: 'unlockItem', + cls: unlockCls, + text: unlockText, + handler: unlockHandler, + disabled: !locked + }); + o.push({ + itemId: 'lockItem', + cls: lockCls, + text: lockText, + handler: lockHandler, + disabled: locked + }); + return o; + }; + }, + + + syncLockedWidth: function() { + var me = this, + locked = me.lockedGrid, + lockedView = locked.view, + lockedViewEl = lockedView.el.dom, + normal = me.normalGrid, + lockedColCount = locked.headerCt.getVisibleGridColumns().length, + normalColCount = normal.headerCt.getVisibleGridColumns().length; + + Ext.suspendLayouts(); + + + + if (normalColCount) { + normal.show(); + if (lockedColCount) { + + + + if (!locked.headerCt.forceFit) { + delete locked.flex; + + locked.setWidth(locked.headerCt.getFullWidth()); + } + locked.addCls(me.lockedGridCls); + locked.show(); + } else { + + + + locked.getView().refresh(); + locked.hide(); + } + + + lockedView.el.setStyle(lockedView.getOverflowStyle()); + + + me.ignoreMousewheel = lockedView.scrollFlags.y; + } + + + + else { + normal.hide(); + + + lockedViewEl.style.borderBottomWidth = '0'; + + + locked.flex = 1; + delete locked.width; + locked.removeCls(me.lockedGridCls); + locked.show(); + + + + lockedView.el.setStyle(normal.view.getOverflowStyle()); + me.ignoreMousewheel = true; + } + Ext.resumeLayouts(true); + return [lockedColCount, normalColCount]; + }, + + onLockedHeaderAdd: function() { + + + if (!this.ignoreAddLockedColumn) { + this.syncLockedWidth(); + } + }, + + onLockedHeaderResize: function() { + this.syncLockedWidth(); + }, + + onLockedHeaderHide: function() { + this.syncLockedWidth(); + }, + + onLockedHeaderShow: function() { + this.syncLockedWidth(); + }, + + onLockedHeaderSortChange: function(headerCt, header, sortState) { + if (sortState) { + + + this.normalGrid.headerCt.clearOtherSortStates(null, true); + } + }, + + onNormalHeaderSortChange: function(headerCt, header, sortState) { + if (sortState) { + + + this.lockedGrid.headerCt.clearOtherSortStates(null, true); + } + }, + + + + lock: function(activeHd, toIdx) { + var me = this, + normalGrid = me.normalGrid, + lockedGrid = me.lockedGrid, + normalHCt = normalGrid.headerCt, + lockedHCt = lockedGrid.headerCt, + refreshFlags, + ownerCt; + + activeHd = activeHd || normalHCt.getMenu().activeHeader; + ownerCt = activeHd.ownerCt; + + + + if (activeHd.flex) { + activeHd.width = activeHd.getWidth(); + delete activeHd.flex; + } + + Ext.suspendLayouts(); + ownerCt.remove(activeHd, false); + activeHd.locked = true; + + + me.ignoreAddLockedColumn = true; + if (Ext.isDefined(toIdx)) { + lockedHCt.insert(toIdx, activeHd); + } else { + lockedHCt.add(activeHd); + } + me.ignoreAddLockedColumn = false; + + refreshFlags = me.syncLockedWidth(); + if (refreshFlags[0]) { + lockedGrid.getView().refresh(); + } + if (refreshFlags[1]) { + normalGrid.getView().refresh(); + } + Ext.resumeLayouts(true); + + me.fireEvent('lockcolumn', me, activeHd); + }, + + + + unlock: function(activeHd, toIdx) { + var me = this, + normalGrid = me.normalGrid, + lockedGrid = me.lockedGrid, + normalHCt = normalGrid.headerCt, + lockedHCt = lockedGrid.headerCt, + refreshFlags; + + + if (!Ext.isDefined(toIdx)) { + toIdx = 0; + } + activeHd = activeHd || lockedHCt.getMenu().activeHeader; + + Ext.suspendLayouts(); + activeHd.ownerCt.remove(activeHd, false); + activeHd.locked = false; + normalHCt.insert(toIdx, activeHd); + + + + refreshFlags = me.syncLockedWidth(); + + if (refreshFlags[0]) { + lockedGrid.getView().refresh(); + } + if (refreshFlags[1]) { + normalGrid.getView().refresh(); + } + Ext.resumeLayouts(true); + + me.fireEvent('unlockcolumn', me, activeHd); + }, + + + reconfigureLockable: function(store, columns) { + var me = this, + oldStore = me.store, + lockedGrid = me.lockedGrid, + normalGrid = me.normalGrid; + + Ext.suspendLayouts(); + if (columns) { + lockedGrid.headerCt.removeAll(); + normalGrid.headerCt.removeAll(); + + columns = me.processColumns(columns); + + + me.ignoreAddLockedColumn = true; + lockedGrid.headerCt.add(columns.locked.items); + me.ignoreAddLockedColumn = false; + normalGrid.headerCt.add(columns.normal.items); + + + + me.syncLockedWidth(); + } + + if (store && store !== oldStore) { + store = Ext.data.StoreManager.lookup(store); + me.store = store; + lockedGrid.bindStore(store); + normalGrid.bindStore(store); + } else { + lockedGrid.getView().refresh(); + normalGrid.getView().refresh(); + } + Ext.resumeLayouts(true); + }, + + constructLockableFeatures: function() { + var features = this.features, + feature, + featureClone, + lockedFeatures, + normalFeatures, + i = 0, len; + + if (features) { + lockedFeatures = []; + normalFeatures = []; + len = features.length; + for (; i < len; i++) { + feature = features[i]; + if (!feature.isFeature) { + feature = Ext.create('feature.' + feature.ftype, feature); + } + switch (feature.lockableScope) { + case 'locked': + lockedFeatures.push(feature); + break; + case 'normal': + normalFeatures.push(feature); + break; + default: + feature.lockableScope = 'both'; + lockedFeatures.push(feature); + normalFeatures.push(featureClone = feature.clone()); + + + featureClone.lockingPartner = feature; + feature.lockingPartner = featureClone; + } + } + } + return { + normalFeatures: normalFeatures, + lockedFeatures: lockedFeatures + }; + }, + + constructLockablePlugins: function() { + var plugins = this.plugins, + plugin, + normalPlugin, + lockedPlugin, + topPlugins, + lockedPlugins, + normalPlugins, + i = 0, len; + + if (plugins) { + topPlugins = []; + lockedPlugins = []; + normalPlugins = []; + len = plugins.length; + for (; i < len; i++) { + + plugin = plugins[i]; + + switch (plugin.lockableScope) { + case 'both': + lockedPlugins.push(lockedPlugin = plugin.clonePlugin()); + normalPlugins.push(normalPlugin = plugin.clonePlugin()); + + + lockedPlugin.lockingPartner = normalPlugin; + normalPlugin.lockingPartner = lockedPlugin; + + + + Ext.destroy(plugin); + break; + case 'locked': + lockedPlugins.push(plugin); + break; + case 'normal': + normalPlugins.push(plugin); + break; + default: + topPlugins.push(plugin); + } + } + } + return { + topPlugins: topPlugins, + normalPlugins: normalPlugins, + lockedPlugins: lockedPlugins + }; + }, + + destroyLockable: function(){ + + Ext.destroy(this.view); + } +}, function() { + this.borrow(Ext.AbstractComponent, ['constructPlugin']); +}); + + +Ext.define('Ext.tree.View', { + extend: Ext.view.Table , + alias: 'widget.treeview', + + + + + + + isTreeView: true, + + loadingCls: Ext.baseCSSPrefix + 'grid-tree-loading', + expandedCls: Ext.baseCSSPrefix + 'grid-tree-node-expanded', + leafCls: Ext.baseCSSPrefix + 'grid-tree-node-leaf', + + expanderSelector: '.' + Ext.baseCSSPrefix + 'tree-expander', + checkboxSelector: '.' + Ext.baseCSSPrefix + 'tree-checkbox', + expanderIconOverCls: Ext.baseCSSPrefix + 'tree-expander-over', + + + + + nodeAnimWrapCls: Ext.baseCSSPrefix + 'tree-animator-wrap', + + blockRefresh: true, + + + loadMask: false, + + + rootVisible: true, + + + deferInitialRefresh: false, + + + + expandDuration: 250, + collapseDuration: 250, + + toggleOnDblClick: true, + + stripeRows: false, + + + uiFields: ['expanded', 'loaded', 'checked', 'expandable', 'leaf', 'icon', 'iconCls', 'loading', 'qtip', 'qtitle'], + + + treeRowTpl: [ + '{%', + 'this.processRowValues(values);', + 'this.nextTpl.applyOut(values, out, parent);', + '%}', { + priority: 10, + processRowValues: function(rowValues) { + var record = rowValues.record, + view = rowValues.view, + qtip = record.get('qtip'), + qtitle = record.get('qttle'); + + rowValues.rowAttr = {}; + if (qtip) { + rowValues.rowAttr['data-qtip'] = qtip; + } + if (qtitle) { + rowValues.rowAttr['data-qtitle'] = qtitle; + } + if (record.isExpanded()) { + rowValues.rowClasses.push(view.expandedCls); + } + if (record.isLeaf()) { + rowValues.rowClasses.push(view.leafCls); + } + if (record.isLoading()) { + rowValues.rowClasses.push(view.loadingCls); + } + } + } + ], + + initComponent: function() { + var me = this, + treeStore = me.panel.getStore(), + store = me.store; + + if (me.initialConfig.animate === undefined) { + me.animate = Ext.enableFx; + } + + if (!store || store === treeStore) { + me.store = store = new Ext.data.NodeStore({ + treeStore: treeStore, + recursive: true, + rootVisible: me.rootVisible + }); + } + + if (me.node) { + me.setRootNode(me.node); + } + me.animQueue = {}; + me.animWraps = {}; + me.addEvents( + + 'afteritemexpand', + + 'afteritemcollapse', + + 'nodedragover' + ); + me.callParent(arguments); + me.addRowTpl(Ext.XTemplate.getTpl(me, 'treeRowTpl')); + }, + + onBeforeFill: function(treeStore, fillRoot) { + this.store.suspendEvents(); + }, + + onFillComplete: function(treeStore, fillRoot, newNodes) { + var me = this, + store = me.store, + start = store.indexOf(newNodes[0]); + + store.resumeEvents(); + + + + fillRoot.triggerUIUpdate(); + + + + if (!newNodes.length || start === -1) { + return; + } + + + me.onAdd(me.store, newNodes, start); + + me.refreshPartner(); + }, + + onBeforeSort: function() { + this.store.suspendEvents(); + }, + + onSort: function(o) { + + + if (o.isStore) { + this.store.resumeEvents(); + this.refresh(); + this.refreshPartner(); + } + }, + + refreshPartner: function() { + var partner = this.lockingPartner; + if (partner) { + partner.refresh(); + } + }, + + getMaskStore: function() { + return this.panel.getStore(); + }, + + afterRender: function() { + var me = this; + me.callParent(arguments); + + me.el.on({ + scope: me, + delegate: me.expanderSelector, + mouseover: me.onExpanderMouseOver, + mouseout: me.onExpanderMouseOut, + click: { + delegate: me.checkboxSelector, + fn: me.onCheckboxChange, + scope: me + } + }); + }, + + afterComponentLayout: function() { + this.callParent(arguments); + var stretcher = this.stretcher; + if (stretcher) { + stretcher.setWidth((this.getWidth() - Ext.getScrollbarSize().width)); + } + }, + + processUIEvent: function(e) { + + + + if (e.getTarget('.' + this.nodeAnimWrapCls, this.el)) { + return false; + } + return this.callParent(arguments); + }, + + onClear: function() { + this.store.removeAll(); + }, + + setRootNode: function(node) { + var me = this; + me.store.setNode(node); + me.node = node; + }, + + onCheckboxChange: function(e, t) { + var me = this, + item = e.getTarget(me.getItemSelector(), me.getTargetEl()); + + if (item) { + me.onCheckChange(me.getRecord(item)); + } + }, + + onCheckChange: function(record) { + var checked = record.get('checked'); + if (Ext.isBoolean(checked)) { + checked = !checked; + record.set('checked', checked); + this.fireEvent('checkchange', record, checked); + } + }, + + getChecked: function() { + var checked = []; + this.node.cascadeBy(function(rec){ + if (rec.get('checked')) { + checked.push(rec); + } + }); + return checked; + }, + + isItemChecked: function(rec) { + return rec.get('checked'); + }, + + + createAnimWrap: function(record, index) { + var me = this, + node = me.getNode(record), + tmpEl, nodeEl, + columnSizer = []; + + me.renderColumnSizer(columnSizer); + nodeEl = Ext.get(node); + tmpEl = nodeEl.insertSibling({ + tag: 'tr', + html: [ + '', + '
    ', + + '', + columnSizer.join(''), + '
    ', + '
    ', + '' + ].join('') + }, 'after'); + + return { + record: record, + node: node, + el: tmpEl, + expanding: false, + collapsing: false, + animating: false, + animateEl: tmpEl.down('div'), + targetEl: tmpEl.down('tbody') + }; + }, + + + getAnimWrap: function(parent, bubble) { + if (!this.animate) { + return null; + } + + var wraps = this.animWraps, + wrap = wraps[parent.internalId]; + + if (bubble !== false) { + while (!wrap && parent) { + parent = parent.parentNode; + if (parent) { + wrap = wraps[parent.internalId]; + } + } + } + return wrap; + }, + + doAdd: function(records, index) { + + + var me = this, + nodes = me.bufferRender(records, index, true), + record = records[0], + parent = record.parentNode, + all = me.all, + relativeIndex, + animWrap = me.getAnimWrap(parent), + targetEl, children, len; + + if (!animWrap || !animWrap.expanding) { + return me.callParent(arguments); + } + + + parent = animWrap.record; + + + targetEl = animWrap.targetEl; + children = targetEl.dom.childNodes; + len = children.length; + + + relativeIndex = index - me.indexInStore(parent) - 1; + + + + if (!len || relativeIndex >= len) { + targetEl.appendChild(nodes); + } + + + else { + Ext.fly(children[relativeIndex]).insertSibling(nodes, 'before', true); + } + + + all.insert(index, nodes); + + + + if (animWrap.isAnimating) { + me.onExpand(parent); + } + }, + + + + + + beginBulkUpdate: function() { + if (this.rendered) { + Ext.suspendLayouts(); + } + }, + endBulkUpdate: function(){ + if (this.rendered) { + this.refreshSize(); + Ext.resumeLayouts(true); + } + }, + + onRemove : function(ds, records, indexes) { + var me = this, + empty, i; + + if (me.viewReady) { + empty = me.store.getCount() === 0; + + + if (empty) { + me.refresh(); + } + else { + + for (i = indexes.length - 1; i >= 0; --i) { + me.doRemove(records[i], indexes[i]); + } + } + + + if (me.hasListeners.itemremove) { + for (i = indexes.length - 1; i >= 0; --i) { + me.fireEvent('itemremove', records[i], indexes[i]); + } + } + } + }, + + doRemove: function(record, index) { + + + var me = this, + all = me.all, + animWrap = me.getAnimWrap(record), + item = all.item(index), + node = item ? item.dom : null; + + if (!node || !animWrap || !animWrap.collapsing) { + return me.callParent(arguments); + } + + + + animWrap.targetEl.dom.insertBefore(node, animWrap.targetEl.dom.firstChild); + all.removeElement(index); + }, + + onBeforeExpand: function(parent, records, index) { + var me = this, + animWrap; + + if (me.rendered && me.all.getCount() && me.animate) { + if (me.getNode(parent)) { + animWrap = me.getAnimWrap(parent, false); + if (!animWrap) { + animWrap = me.animWraps[parent.internalId] = me.createAnimWrap(parent); + animWrap.animateEl.setHeight(0); + } + else if (animWrap.collapsing) { + + + animWrap.targetEl.select(me.itemSelector).remove(); + } + animWrap.expanding = true; + animWrap.collapsing = false; + } + } + }, + + onExpand: function(parent) { + var me = this, + queue = me.animQueue, + id = parent.getId(), + node = me.getNode(parent), + index = node ? me.indexOf(node) : -1, + animWrap, + animateEl, + targetEl, + fromHeight = Ext.isIEQuirks ? 1 : 0 + + if (me.singleExpand) { + me.ensureSingleExpand(parent); + } + + + if (index === -1) { + return; + } + + animWrap = me.getAnimWrap(parent, false); + + if (!animWrap) { + parent.isExpandingOrCollapsing = false; + me.fireEvent('afteritemexpand', parent, index, node); + me.refreshSize(); + return; + } + + animateEl = animWrap.animateEl; + targetEl = animWrap.targetEl; + + animateEl.stopAnimation(); + queue[id] = true; + + + animateEl.dom.style.height = fromHeight + 'px'; + animateEl.animate({ + from: { + height: fromHeight + }, + to: { + height: targetEl.getHeight() + }, + duration: me.expandDuration, + listeners: { + afteranimate: function() { + + + + var items = targetEl.query(me.itemSelector); + if (items.length) { + animWrap.el.insertSibling(items, 'before', true); + } + animWrap.el.remove(); + me.refreshSize(); + delete me.animWraps[animWrap.record.internalId]; + delete queue[id]; + } + }, + callback: function() { + parent.isExpandingOrCollapsing = false; + me.fireEvent('afteritemexpand', parent, index, node); + } + }); + + animWrap.isAnimating = true; + }, + + + onBeforeCollapse: function(parent, records, index, callback, scope) { + var me = this, + animWrap; + + if (me.rendered && me.all.getCount()) { + if (me.animate) { + + + + if (Ext.Array.contains(parent.stores, me.store)) { + animWrap = me.getAnimWrap(parent); + if (!animWrap) { + animWrap = me.animWraps[parent.internalId] = me.createAnimWrap(parent, index); + } + else if (animWrap.expanding) { + + + animWrap.targetEl.select(this.itemSelector).remove(); + } + animWrap.expanding = false; + animWrap.collapsing = true; + animWrap.callback = callback; + animWrap.scope = scope; + } + } else { + + me.onCollapseCallback = callback; + me.onCollapseScope = scope; + } + } + }, + + onCollapse: function(parent) { + var me = this, + queue = me.animQueue, + id = parent.getId(), + node = me.getNode(parent), + index = node ? me.indexOf(node) : -1, + animWrap = me.getAnimWrap(parent), + animateEl; + + + + + if (!me.all.getCount() || !Ext.Array.contains(parent.stores, me.store)) { + return; + } + + + if (!animWrap) { + parent.isExpandingOrCollapsing = false; + me.fireEvent('afteritemcollapse', parent, index, node); + me.refreshSize(); + + + Ext.callback(me.onCollapseCallback, me.onCollapseScope); + me.onCollapseCallback = me.onCollapseScope = null; + return; + } + + animateEl = animWrap.animateEl; + + queue[id] = true; + + animateEl.stopAnimation(); + animateEl.animate({ + to: { + height: Ext.isIEQuirks ? 1 : 0 + }, + duration: me.collapseDuration, + listeners: { + afteranimate: function() { + + animWrap.el.remove(); + me.refreshSize(); + delete me.animWraps[animWrap.record.internalId]; + delete queue[id]; + } + }, + callback: function() { + parent.isExpandingOrCollapsing = false; + me.fireEvent('afteritemcollapse', parent, index, node); + + + Ext.callback(animWrap.callback, animWrap.scope); + animWrap.callback = animWrap.scope = null; + } + }); + animWrap.isAnimating = true; + }, + + + isAnimating: function(node) { + return !!this.animQueue[node.getId()]; + }, + + + expand: function(record, deep, callback, scope) { + var me = this, + doAnimate = !!me.animate, + result; + + + if (!doAnimate || !record.isExpandingOrCollapsing) { + if (!record.isLeaf()) { + record.isExpandingOrCollapsing = doAnimate; + } + + + + + Ext.suspendLayouts(); + result = record.expand(deep, callback, scope); + Ext.resumeLayouts(true); + return result; + } + }, + + + collapse: function(record, deep, callback, scope) { + var me = this, + doAnimate = !!me.animate; + + + if (!doAnimate || !record.isExpandingOrCollapsing) { + if (!record.isLeaf()) { + record.isExpandingOrCollapsing = doAnimate; + } + return record.collapse(deep, callback, scope); + } + }, + + + toggle: function(record, deep, callback, scope) { + if (record.isExpanded()) { + this.collapse(record, deep, callback, scope); + } else { + this.expand(record, deep, callback, scope); + } + }, + + onItemDblClick: function(record, item, index) { + var me = this, + editingPlugin = me.editingPlugin; + + me.callParent(arguments); + if (me.toggleOnDblClick && record.isExpandable() && !(editingPlugin && editingPlugin.clicksToEdit === 2)) { + me.toggle(record); + } + }, + + onBeforeItemMouseDown: function(record, item, index, e) { + if (e.getTarget(this.expanderSelector, item)) { + return false; + } + return this.callParent(arguments); + }, + + onItemClick: function(record, item, index, e) { + if (e.getTarget(this.expanderSelector, item) && record.isExpandable()) { + this.toggle(record, e.ctrlKey); + return false; + } + return this.callParent(arguments); + }, + + onExpanderMouseOver: function(e, t) { + e.getTarget(this.cellSelector, 10, true).addCls(this.expanderIconOverCls); + }, + + onExpanderMouseOut: function(e, t) { + e.getTarget(this.cellSelector, 10, true).removeCls(this.expanderIconOverCls); + }, + + getStoreListeners: function(){ + var me = this, + listeners = me.callParent(arguments); + + return Ext.apply(listeners, { + beforeexpand: me.onBeforeExpand, + expand: me.onExpand, + beforecollapse: me.onBeforeCollapse, + collapse: me.onCollapse, + write: me.onStoreWrite, + datachanged: me.onStoreDataChanged + }); + }, + + onBindStore: function(){ + var me = this, + treeStore = me.getTreeStore(); + + me.callParent(arguments); + + me.mon(treeStore, { + scope: me, + beforefill: me.onBeforeFill, + fillcomplete: me.onFillComplete, + beforebulkremove: me.beginBulkUpdate, + bulkremovecomplete: me.endBulkUpdate + }); + + if (!treeStore.remoteSort) { + + + me.mon(treeStore, { + scope: me, + beforesort: me.onBeforeSort, + sort: me.onSort + }); + } + }, + + onUnbindStore: function(){ + var me = this, + treeStore = me.getTreeStore(); + + me.callParent(arguments); + + me.mun(treeStore, { + scope: me, + beforefill: me.onBeforeFill, + fillcomplete: me.onFillComplete, + beforebulkremove: me.beginBulkUpdate, + bulkremovecomplete: me.endBulkUpdate + }); + + if (!treeStore.remoteSort) { + me.mun(treeStore, { + scope: me, + beforesort: me.onBeforeSort, + sort: me.onSort + }); + } + }, + + + getTreeStore: function() { + return this.panel.store; + }, + + ensureSingleExpand: function(node) { + var parent = node.parentNode; + if (parent) { + parent.eachChild(function(child) { + if (child !== node && child.isExpanded()) { + child.collapse(); + } + }); + } + }, + + shouldUpdateCell: function(record, column, changedFieldNames){ + if (changedFieldNames) { + var i = 0, + len = changedFieldNames.length; + + for (; i < len; ++i) { + if (Ext.Array.contains(this.uiFields, changedFieldNames[i])) { + return true; + } + } + } + return this.callParent(arguments); + }, + + + onStoreWrite: function(store, operation) { + var treeStore = this.panel.store; + treeStore.fireEvent('write', treeStore, operation); + }, + + + onStoreDataChanged: function(store, operation) { + var treeStore = this.panel.store; + treeStore.fireEvent('datachanged', treeStore); + } +}); + + +Ext.define('Ext.grid.plugin.BufferedRendererTreeView', { + override: 'Ext.tree.View', + + onRemove: function(store, records, indices) { + + + + if (this.bufferedRenderer) { + this.onDataRefresh(); + } + + else { + this.callParent([store, records, indices]); + } + } +}); + + +Ext.define('Ext.grid.plugin.BufferedRenderer', { + extend: Ext.AbstractPlugin , + + + + + alias: 'plugin.bufferedrenderer', + lockableScope: 'both', + + + percentageFromEdge: 0.35, + + + variableRowHeight: false, + + + numFromEdge: 8, + + + trailingBufferZone: 10, + + + leadingBufferZone: 20, + + + synchronousRender: true, + + + scrollToLoadBuffer: 200, + + + viewSize: 0, + + rowHeight: 21, + + tableStart: 0, + tableEnd: 0, + + position: 0, + lastScrollDirection: 1, + bodyTop: 0, + + + init: function(grid) { + var me = this, + view = grid.view, + viewListeners = { + scroll: { + fn: me.onViewScroll, + element: 'el', + scope: me + }, + boxready: me.onViewResize, + resize: me.onViewResize, + refresh: me.onViewRefresh, + scope: me, + destroyable: true + }; + + + if (!me.variableRowHeight && grid.ownerLockable) { + grid.ownerLockable.syncRowHeight = false; + } + + + + if (grid.isTree || grid.ownerLockable && grid.ownerLockable.isTree) { + view.blockRefresh = false; + view.loadMask = true; + } + if (view.positionBody) { + viewListeners.refresh = me.onViewRefresh; + } + me.grid = grid; + me.view = view; + view.bufferedRenderer = me; + view.preserveScrollOnRefresh = true; + + me.bindStore(view.dataSource); + view.getViewRange = function() { + return me.getViewRange(); + }; + + me.position = 0; + + me.gridListeners = grid.on('reconfigure', me.onReconfigure, me); + me.viewListeners = view.on(viewListeners); + }, + + bindStore: function(store) { + var me = this; + if (me.store) { + me.unbindStore(); + } + me.storeListeners = store.on({ + scope: me, + clear: me.onStoreClear, + destroyable: true + }); + me.store = store; + + + if (me.view.componentLayout.layoutCount) { + me.onViewResize(me.view, 0, me.view.getHeight()); + } + }, + + onReconfigure: function(grid, store){ + if (store && store !== this.store) { + this.bindStore(store); + } + }, + + unbindStore: function() { + this.storeListeners.destroy(); + delete this.view.getStoreListeners; + this.store = null; + }, + + onStoreClear: function() { + var me = this; + + + if (me.view.rendered && !me.store.isDestroyed) { + + + if (me.scrollTop !== 0) { + me.ignoreNextScrollEvent = true; + me.view.el.dom.scrollTop = me.bodyTop = me.scrollTop = 0; + } + + me.position = 0; + delete me.lastScrollDirection; + delete me.scrollOffset; + delete me.rowHeight; + } + }, + + onViewRefresh: function() { + var me = this, + view = me.view; + + if (me.scrollTop !== view.el.dom.scrollTop) { + + + + me.onViewScroll(); + } else { + me.setBodyTop(me.bodyTop); + if (view.all.getCount()) { + me.viewSize = 0; + me.onViewResize(view, null, view.getHeight()); + } + } + }, + + onViewResize: function(view, width, height, oldWidth, oldHeight) { + + if (!oldHeight || height !== oldHeight) { + var me = this, + newViewSize, + scrollRange; + + + if (view.all.getCount()) { + + delete me.rowHeight; + } + + + + + scrollRange = me.getScrollHeight(); + newViewSize = Math.ceil(height / me.rowHeight) + me.trailingBufferZone + me.leadingBufferZone; + me.viewSize = me.setViewSize(newViewSize); + me.stretchView(view, scrollRange); + } + }, + + stretchView: function(view, scrollRange) { + var me = this, + recordCount = (me.store.buffered ? me.store.getTotalCount() : me.store.getCount()); + + if (me.stretcher) { + me.stretcher.dom.style.marginTop = (scrollRange - 1) + 'px'; + } else { + var el = view.el; + + + + if (view.refreshCounter) { + view.fixedNodes++; + } + + + if (recordCount && (me.view.all.endIndex === recordCount - 1)) { + scrollRange = me.bodyTop + view.body.dom.offsetHeight; + } + this.stretcher = el.createChild({ + style: { + width: '1px', + height: '1px', + 'marginTop': (scrollRange - 1) + 'px', + left: 0, + position: 'absolute' + } + }, el.dom.firstChild); + } + }, + + setViewSize: function(viewSize) { + if (viewSize !== this.viewSize) { + + + this.scrollTop = this.view.el.dom.scrollTop; + + var me = this, + store = me.store, + elCount = me.view.all.getCount(), + start, end; + + me.viewSize = store.viewSize = viewSize; + + + + if (elCount) { + start = me.view.all.startIndex; + end = Math.min(start + viewSize - 1, (store.buffered ? store.getTotalCount() : store.getCount()) - 1); + me.renderRange(start, end); + } + } + return viewSize; + }, + + getViewRange: function() { + var me = this, + rows = me.view.all, + store = me.store; + + if (store.data.getCount()) { + return store.getRange(rows.startIndex, rows.startIndex + (me.viewSize || me.store.defaultViewSize) - 1); + } else { + return []; + } + }, + + + scrollTo: function(recordIdx, doSelect, callback, scope) { + var me = this, + view = me.view, + viewDom = view.el.dom, + store = me.store, + total = store.buffered ? store.getTotalCount() : store.getCount(), + startIdx, endIdx, + targetRec, + targetRow, + tableTop; + + + recordIdx = Math.min(Math.max(recordIdx, 0), total - 1); + + + startIdx = Math.max(Math.min(recordIdx - ((me.leadingBufferZone + me.trailingBufferZone) / 2), total - me.viewSize + 1), 0); + tableTop = startIdx * me.rowHeight; + endIdx = Math.min(startIdx + me.viewSize - 1, total - 1); + + store.getRange(startIdx, endIdx, { + callback: function(range, start, end) { + + me.renderRange(start, end, true); + + targetRec = store.data.getRange(recordIdx, recordIdx)[0]; + targetRow = view.getNode(targetRec, false); + view.body.dom.style.top = tableTop + 'px'; + me.position = me.scrollTop = viewDom.scrollTop = tableTop = Math.min(Math.max(0, tableTop - view.body.getOffsetsTo(targetRow)[1]), viewDom.scrollHeight - viewDom.clientHeight); + + + if (Ext.isIE) { + viewDom.scrollTop = tableTop; + } + if (doSelect) { + view.selModel.select(targetRec); + } + if (callback) { + callback.call(scope||me, recordIdx, targetRec); + } + } + }); + }, + + onViewScroll: function(e, t) { + var me = this, + vscrollDistance, + scrollDirection, + scrollTop = me.view.el.dom.scrollTop; + + + + if (me.ignoreNextScrollEvent) { + me.ignoreNextScrollEvent = false; + return; + } + + + + if (!me.disabled) { + + vscrollDistance = scrollTop - me.position; + scrollDirection = vscrollDistance > 0 ? 1 : -1; + me.scrollTop = scrollTop; + + + if (Math.abs(vscrollDistance) >= 20 || (scrollDirection !== me.lastScrollDirection)) { + me.position = scrollTop; + me.lastScrollDirection = scrollDirection; + me.handleViewScroll(me.lastScrollDirection); + } + } + }, + + handleViewScroll: function(direction) { + var me = this, + rows = me.view.all, + store = me.store, + viewSize = me.viewSize, + totalCount = (store.buffered ? store.getTotalCount() : store.getCount()), + requestStart, + requestEnd; + + + if (totalCount >= viewSize) { + + + if (direction == -1) { + + + if (rows.startIndex) { + if ((me.getFirstVisibleRowIndex() - rows.startIndex) < me.numFromEdge) { + requestStart = Math.max(0, me.getLastVisibleRowIndex() + me.trailingBufferZone - viewSize); + } + } + } + + else { + + + if (rows.endIndex < totalCount - 1) { + if ((rows.endIndex - me.getLastVisibleRowIndex()) < me.numFromEdge) { + requestStart = Math.max(0, me.getFirstVisibleRowIndex() - me.trailingBufferZone); + } + } + } + + + if (requestStart !== undefined) { + requestEnd = Math.min(requestStart + viewSize - 1, totalCount - 1); + + + if (requestStart !== rows.startIndex || requestEnd !== rows.endIndex) { + me.renderRange(requestStart, requestEnd); + } + } + } + }, + + renderRange: function(start, end, forceSynchronous) { + var me = this, + store = me.store; + + + if (store.rangeCached(start, end)) { + me.cancelLoad(); + + if (me.synchronousRender || forceSynchronous) { + me.onRangeFetched(null, start, end); + } else { + if (!me.renderTask) { + me.renderTask = new Ext.util.DelayedTask(me.onRangeFetched, me, null, false); + } + + + + + me.renderTask.delay(1, null, null, [null, start, end]); + } + } + + + else { + me.attemptLoad(start, end); + } + }, + + onRangeFetched: function(range, start, end) { + var me = this, + view = me.view, + oldStart, + rows = view.all, + removeCount, + increment = 0, + calculatedTop = start * me.rowHeight, + top; + + + if (view.isDestroyed) { + return; + } + + + if (!range) { + range = me.store.getRange(start, end); + + + if (!range) { + return; + } + } + + + if (start > rows.endIndex || end < rows.startIndex) { + rows.clear(true); + top = calculatedTop; + } + + if (!rows.getCount()) { + view.doAdd(range, start); + } + + else if (end > rows.endIndex) { + removeCount = Math.max(start - rows.startIndex, 0); + + + if (me.variableRowHeight) { + increment = rows.item(rows.startIndex + removeCount, true).offsetTop; + } + rows.scroll(Ext.Array.slice(range, rows.endIndex + 1 - start), 1, removeCount, start, end); + + + if (me.variableRowHeight) { + + top = me.bodyTop + increment; + } else { + top = calculatedTop; + } + } + + else { + removeCount = Math.max(rows.endIndex - end, 0); + oldStart = rows.startIndex; + rows.scroll(Ext.Array.slice(range, 0, rows.startIndex - start), -1, removeCount, start, end); + + + if (me.variableRowHeight) { + + top = me.bodyTop - rows.item(oldStart, true).offsetTop; + } else { + top = calculatedTop; + } + } + + + + if (view.positionBody) { + me.setBodyTop(top, calculatedTop); + } + }, + + setBodyTop: function(bodyTop, calculatedTop) { + var me = this, + view = me.view, + store = me.store, + body = view.body.dom, + delta; + + bodyTop = Math.floor(bodyTop); + + + + + if (calculatedTop !== undefined) { + delta = bodyTop - calculatedTop; + bodyTop = calculatedTop; + } + body.style.position = 'absolute'; + body.style.top = (me.bodyTop = bodyTop) + 'px'; + + + + if (delta) { + me.scrollTop = me.position = view.el.dom.scrollTop -= delta; + } + + + if (me.view.all.endIndex === (store.buffered ? store.getTotalCount() : store.getCount()) - 1) { + me.stretchView(view, me.bodyTop + body.offsetHeight); + } + }, + + getFirstVisibleRowIndex: function(startRow, endRow, viewportTop, viewportBottom) { + var me = this, + view = me.view, + rows = view.all, + elements = rows.elements, + clientHeight = view.el.dom.clientHeight, + target, + targetTop; + + + if (rows.getCount() && me.variableRowHeight) { + if (!arguments.length) { + startRow = rows.startIndex; + endRow = rows.endIndex; + viewportTop = me.scrollTop; + viewportBottom = viewportTop + clientHeight; + + + if (me.bodyTop > viewportBottom || me.bodyTop + view.body.getHeight() < viewportTop) { + return Math.floor(me.scrollTop / me.rowHeight); + } + + + target = startRow + Math.min(me.numFromEdge + ((me.lastScrollDirection == -1) ? me.leadingBufferZone : me.trailingBufferZone), Math.floor((endRow - startRow) / 2)); + } else { + target = startRow + Math.floor((endRow - startRow) / 2); + } + targetTop = me.bodyTop + elements[target].offsetTop; + + + if (targetTop + elements[target].offsetHeight < viewportTop) { + return me.getFirstVisibleRowIndex(target + 1, endRow, viewportTop, viewportBottom); + } + + + if (targetTop <= viewportTop) { + return target; + } + + else if (target !== startRow) { + return me.getFirstVisibleRowIndex(startRow, target - 1, viewportTop, viewportBottom); + } + } + return Math.floor(me.scrollTop / me.rowHeight); + }, + + getLastVisibleRowIndex: function(startRow, endRow, viewportTop, viewportBottom) { + var me = this, + view = me.view, + rows = view.all, + elements = rows.elements, + clientHeight = view.el.dom.clientHeight, + target, + targetTop, targetBottom; + + + if (rows.getCount() && me.variableRowHeight) { + if (!arguments.length) { + startRow = rows.startIndex; + endRow = rows.endIndex; + viewportTop = me.scrollTop; + viewportBottom = viewportTop + clientHeight; + + + if (me.bodyTop > viewportBottom || me.bodyTop + view.body.getHeight() < viewportTop) { + return Math.floor(me.scrollTop / me.rowHeight) + Math.ceil(clientHeight / me.rowHeight); + } + + + target = endRow - Math.min(me.numFromEdge + ((me.lastScrollDirection == 1) ? me.leadingBufferZone : me.trailingBufferZone), Math.floor((endRow - startRow) / 2)); + } else { + target = startRow + Math.floor((endRow - startRow) / 2); + } + targetTop = me.bodyTop + elements[target].offsetTop; + + + if (targetTop > viewportBottom) { + return me.getLastVisibleRowIndex(startRow, target - 1, viewportTop, viewportBottom); + } + targetBottom = targetTop + elements[target].offsetHeight; + + + if (targetBottom >= viewportBottom) { + return target; + } + + else if (target !== endRow) { + return me.getLastVisibleRowIndex(target + 1, endRow, viewportTop, viewportBottom); + } + } + return me.getFirstVisibleRowIndex() + Math.ceil(clientHeight / me.rowHeight); + }, + + getScrollHeight: function() { + var me = this, + view = me.view, + store = me.store, + doCalcHeight = !me.hasOwnProperty('rowHeight'), + storeCount = me.store.getCount(); + + if (!storeCount) { + return 0; + } + if (doCalcHeight) { + if (view.all.getCount()) { + me.rowHeight = Math.floor(view.body.getHeight() / view.all.getCount()); + } + } + return Math.floor((store.buffered ? store.getTotalCount() : store.getCount()) * me.rowHeight); + }, + + attemptLoad: function(start, end) { + var me = this; + if (me.scrollToLoadBuffer) { + if (!me.loadTask) { + me.loadTask = new Ext.util.DelayedTask(me.doAttemptLoad, me, []); + } + me.loadTask.delay(me.scrollToLoadBuffer, me.doAttemptLoad, me, [start, end]); + } else { + me.store.getRange(start, end, { + callback: me.onRangeFetched, + scope: me, + fireEvent: false + }); + } + }, + + cancelLoad: function() { + if (this.loadTask) { + this.loadTask.cancel(); + } + }, + + doAttemptLoad: function(start, end) { + this.store.getRange(start, end, { + callback: this.onRangeFetched, + scope: this, + fireEvent: false + }); + }, + + destroy: function() { + var me = this, + view = me.view; + + if (view && view.el) { + view.el.un('scroll', me.onViewScroll, me); + } + + + Ext.destroy(me.viewListeners, me.storeListeners, me.gridListeners); + } +}); + + +Ext.define('Ext.grid.plugin.Editing', { + alias: 'editing.editing', + extend: Ext.AbstractPlugin , + + + + + + + mixins: { + observable: Ext.util.Observable + }, + + + clicksToEdit: 2, + + + triggerEvent: undefined, + + relayedEvents: [ + 'beforeedit', + 'edit', + 'validateedit', + 'canceledit' + ], + + + defaultFieldXType: 'textfield', + + + editStyle: '', + + constructor: function(config) { + var me = this; + + me.addEvents( + + 'beforeedit', + + + 'edit', + + + 'validateedit', + + 'canceledit' + + ); + me.callParent(arguments); + me.mixins.observable.constructor.call(me); + + me.on("edit", function(editor, e) { + me.fireEvent("afteredit", editor, e); + }); + }, + + + init: function(grid) { + var me = this; + + me.grid = grid; + me.view = grid.view; + me.initEvents(); + + + me.mon(grid, { + reconfigure: me.onReconfigure, + scope: me, + beforerender: { + fn: me.onReconfigure, + single: true, + scope: me + } + }); + + grid.relayEvents(me, me.relayedEvents); + + + if (me.grid.ownerLockable) { + me.grid.ownerLockable.relayEvents(me, me.relayedEvents); + } + + + grid.isEditable = true; + grid.editingPlugin = grid.view.editingPlugin = me; + }, + + + onReconfigure: function() { + var grid = this.grid; + + + + grid = grid.ownerLockable ? grid.ownerLockable : grid; + this.initFieldAccessors(grid.getView().getGridColumns()); + }, + + + destroy: function() { + var me = this, + grid = me.grid; + + Ext.destroy(me.keyNav); + + me.clearListeners(); + + if (grid) { + me.removeFieldAccessors(grid.getView().getGridColumns()); + grid.editingPlugin = grid.view.editingPlugin = me.grid = me.view = me.editor = me.keyNav = null; + } + }, + + + getEditStyle: function() { + return this.editStyle; + }, + + + initFieldAccessors: function(columns) { + columns = [].concat(columns); + + var me = this, + c, + cLen = columns.length, + column; + + for (c = 0; c < cLen; c++) { + column = columns[c]; + + Ext.applyIf(column, { + getEditor: function(record, defaultField) { + return me.getColumnField(this, defaultField); + }, + + setEditor: function(field) { + me.setColumnField(this, field); + } + }); + } + }, + + + removeFieldAccessors: function(columns) { + columns = [].concat(columns); + + var c, + cLen = columns.length, + column; + + for (c = 0; c < cLen; c++) { + column = columns[c]; + + delete column.getEditor; + delete column.setEditor; + } + }, + + + + getColumnField: function(columnHeader, defaultField) { + var field = columnHeader.field; + + if (!field && columnHeader.editor) { + field = columnHeader.editor; + delete columnHeader.editor; + } + + if (!field && defaultField) { + field = defaultField; + } + + if (field) { + if (Ext.isString(field)) { + field = { xtype: field }; + } + if (!field.isFormField) { + field = Ext.ComponentManager.create(field, this.defaultFieldXType); + } + columnHeader.field = field; + + Ext.apply(field, { + name: columnHeader.dataIndex + }); + + return field; + } + }, + + + + setColumnField: function(column, field) { + if (Ext.isObject(field) && !field.isFormField) { + field = Ext.ComponentManager.create(field, this.defaultFieldXType); + } + column.field = field; + }, + + + initEvents: function() { + var me = this; + me.initEditTriggers(); + me.initCancelTriggers(); + }, + + + initCancelTriggers: Ext.emptyFn, + + + initEditTriggers: function() { + var me = this, + view = me.view; + + + if (me.triggerEvent == 'cellfocus') { + me.mon(view, 'cellfocus', me.onCellFocus, me); + } else if (me.triggerEvent == 'rowfocus') { + me.mon(view, 'rowfocus', me.onRowFocus, me); + } else { + + + + + + + + if (view.getSelectionModel().isCellModel) { + view.onCellFocus = Ext.Function.bind(me.beforeViewCellFocus, me); + } + + + me.mon(view, me.triggerEvent || ('cell' + (me.clicksToEdit === 1 ? 'click' : 'dblclick')), me.onCellClick, me); + } + + + + me.initAddRemoveHeaderEvents() + + view.on('render', me.initKeyNavHeaderEvents, me, {single: true}); + }, + + + beforeViewCellFocus: function(position) { + + if (this.view.selModel.keyNavigation || !this.editing || !this.isCellEditable || !this.isCellEditable(position.row, position.columnHeader)) { + this.view.focusCell.apply(this.view, arguments); + } + }, + + + onRowFocus: function(record, row, rowIdx) { + this.startEdit(row, 0); + }, + + + onCellFocus: function(record, cell, position) { + this.startEdit(position.row, position.column); + }, + + + onCellClick: function(view, cell, colIdx, record, row, rowIdx, e) { + + if(!view.expanderSelector || !e.getTarget(view.expanderSelector)) { + this.startEdit(record, view.getHeaderAtIndex(colIdx)); + } + }, + + initAddRemoveHeaderEvents: function(){ + var me = this; + me.mon(me.grid.headerCt, { + scope: me, + add: me.onColumnAdd, + remove: me.onColumnRemove + }); + }, + + initKeyNavHeaderEvents: function() { + var me = this; + + me.keyNav = Ext.create('Ext.util.KeyNav', me.view.el, { + enter: me.onEnterKey, + esc: me.onEscKey, + scope: me + }); + }, + + + onColumnAdd: function(ct, column) { + if (column.isHeader) { + this.initFieldAccessors(column); + } + }, + + + onColumnRemove: function(ct, column) { + if (column.isHeader) { + this.removeFieldAccessors(column); + } + }, + + + onEnterKey: function(e) { + var me = this, + grid = me.grid, + selModel = grid.getSelectionModel(), + record, + pos, + columnHeader = grid.headerCt.getHeaderAtIndex(0); + + + + if (selModel.getCurrentPosition) { + pos = selModel.getCurrentPosition(); + if (pos) { + record = grid.getView().getStore().getAt(pos.row); + columnHeader = grid.headerCt.getHeaderAtIndex(pos.column); + } + } + + else { + record = selModel.getLastSelected(); + } + + + if (record && columnHeader) { + me.startEdit(record, columnHeader); + } + }, + + + onEscKey: function(e) { + return this.cancelEdit(); + }, + + + beforeEdit: Ext.emptyFn, + + + startEdit: function(record, columnHeader) { + var me = this, + context, + layoutView = me.grid.lockable ? me.grid : me.view; + + + + if (!layoutView.componentLayoutCounter) { + layoutView.on({ + boxready: Ext.Function.bind(me.startEdit, me, [record, columnHeader]), + single: true + }); + return false; + } + + + if (me.grid.collapsed || !me.grid.view.isVisible(true)) { + return false; + } + + context = me.getEditingContext(record, columnHeader); + if (context == null || me.beforeEdit(context) === false || me.fireEvent('beforeedit', me, context) === false || context.cancel) { + return false; + } + + + me.editing = true; + return context; + }, + + + + getEditingContext: function(record, columnHeader) { + var me = this, + grid = me.grid, + view = grid.getView(), + recordNode = view.getNode(record, true), + rowIdx, colIdx; + + + if (!recordNode) { + return; + } + + + columnHeader = grid.headerCt.getVisibleHeaderClosestToIndex(Ext.isNumber(columnHeader) ? columnHeader : columnHeader.getIndex()); + + + if (!columnHeader) { + return; + } + + colIdx = columnHeader.getIndex(); + + if (Ext.isNumber(record)) { + + rowIdx = record; + record = view.getRecord(recordNode); + } else { + rowIdx = view.indexOf(recordNode); + } + + + + if (!record) { + return; + } + + return { + grid : grid, + record : record, + field : columnHeader.dataIndex, + value : record.get(columnHeader.dataIndex), + row : recordNode, + column : columnHeader, + rowIdx : rowIdx, + colIdx : colIdx + }; + }, + + + cancelEdit: function() { + var me = this; + + me.editing = false; + me.fireEvent('canceledit', me, me.context); + }, + + + completeEdit: function() { + var me = this; + + if (me.editing && me.validateEdit()) { + me.fireEvent('edit', me, me.context); + } + + me.context = null; + me.editing = false; + }, + + + validateEdit: function() { + var me = this, + context = me.context; + + return me.fireEvent('validateedit', me, context) !== false && !context.cancel; + } +}); + + +Ext.define('Ext.grid.plugin.CellEditing', { + alias: 'plugin.cellediting', + extend: Ext.grid.plugin.Editing , + + lockableScope: 'both', + + + + + + + init: function(grid) { + var me = this, + lockingPartner = me.lockingPartner; + + me.callParent(arguments); + + + if (lockingPartner) { + if (lockingPartner.editors) { + me.editors = lockingPartner.editors; + me.editTask = lockingPartner.editTask; + } else { + me.editors = lockingPartner.editors = new Ext.util.MixedCollection(false, function(editor) { + return editor.editorId; + }); + me.editTask = lockingPartner.editTask = new Ext.util.DelayedTask(); + } + } else { + me.editors = new Ext.util.MixedCollection(false, function(editor) { + return editor.editorId; + }); + me.editTask = new Ext.util.DelayedTask(); + } + }, + + onReconfigure: function(grid, store, columns){ + + if (columns) { + this.editors.clear(); + } + this.callParent(); + }, + + + destroy: function() { + var me = this; + if (me.editors) { + me.editTask.cancel(); + me.editors.each(Ext.destroy, Ext); + me.editors.clear(); + } + me.callParent(arguments); + }, + + onBodyScroll: function() { + var me = this, + ed = me.getActiveEditor(), + scroll = me.view.el.getScroll(); + + + + if (ed && ed.editing && ed.editingPlugin === me) { + + if (scroll.top !== me.scroll.top) { + if (ed.field) { + if (ed.field.triggerBlur) { + ed.field.triggerBlur(); + } else { + ed.field.blur(); + } + } + } + + else { + ed.realign(); + } + } + me.scroll = scroll; + }, + + + + initCancelTriggers: function() { + var me = this, + grid = me.grid, + view = grid.view; + + me.mon(view, 'bodyscroll', me.onBodyScroll, me); + me.mon(grid, { + columnresize: me.cancelEdit, + columnmove: me.cancelEdit, + scope: me + }); + }, + + isCellEditable: function(record, columnHeader) { + var me = this, + context = me.getEditingContext(record, columnHeader); + + if (me.grid.view.isVisible(true) && context) { + columnHeader = context.column; + record = context.record; + if (columnHeader && me.getEditor(record, columnHeader)) { + return true; + } + } + }, + + + startEdit: function(record, columnHeader, context) { + var me = this, + ed; + + context = context || me.callParent(arguments); + + + + + me.completeEdit(); + + + + if (context && me.grid.view.isVisible(true)) { + me.context = context; + + record = context.record; + columnHeader = context.column; + + + if (columnHeader && !columnHeader.getEditor(record)) { + return false; + } + + context.originalValue = context.value = record.get(columnHeader.dataIndex); + if (me.beforeEdit(context) === false || me.fireEvent('beforeedit', me, context) === false || context.cancel) { + return false; + } + + ed = me.getEditor(record, columnHeader); + + + me.grid.view.cancelFocus(); + me.view.focusCell({ + row: context.rowIdx, + column: context.colIdx + }); + if (ed) { + me.editTask.delay(15, me.showEditor, me, [ed, context, context.value]); + return true; + } + return false; + } + }, + + showEditor: function(ed, context, value) { + var me = this, + record = context.record, + columnHeader = context.column, + sm = me.grid.getSelectionModel(), + selection = sm.getCurrentPosition(), + otherView = selection && selection.view; + + + + if (otherView && otherView !== me.view) { + return me.lockingPartner.showEditor(ed, me.lockingPartner.getEditingContext(selection.record, selection.columnHeader), value); + } + + me.setEditingContext(context); + me.setActiveEditor(ed); + me.setActiveRecord(record); + me.setActiveColumn(columnHeader); + + + if (sm.selectByPosition && (!selection || selection.column !== context.colIdx || selection.row !== context.rowIdx)) { + sm.selectByPosition({ + row: context.rowIdx, + column: context.colIdx, + view: me.view + }); + } + + ed.startEdit(me.getCell(record, columnHeader), value, context); + me.editing = true; + me.scroll = me.view.el.getScroll(); + }, + + completeEdit: function() { + var activeEd = this.getActiveEditor(); + if (activeEd) { + activeEd.completeEdit(); + this.editing = false; + } + }, + + + setEditingContext: function(context) { + this.context = context; + if (this.lockingPartner) { + this.lockingPartner.context = context; + } + }, + + setActiveEditor: function(ed) { + this.activeEditor = ed; + if (this.lockingPartner) { + this.lockingPartner.activeEditor = ed; + } + }, + + getActiveEditor: function() { + return this.activeEditor; + }, + + setActiveColumn: function(column) { + this.activeColumn = column; + if (this.lockingPartner) { + this.lockingPartner.activeColumn = column; + } + }, + + getActiveColumn: function() { + return this.activeColumn; + }, + + setActiveRecord: function(record) { + this.activeRecord = record; + if (this.lockingPartner) { + this.lockingPartner.activeRecord = record; + } + }, + + getActiveRecord: function() { + return this.activeRecord; + }, + + getEditor: function(record, column) { + var me = this, + editors = me.editors, + editorId = column.getItemId(), + editor = editors.getByKey(editorId), + + editorOwner = me.grid.ownerLockable || me.grid; + + if (!editor) { + editor = column.getEditor(record); + if (!editor) { + return false; + } + + + if (editor instanceof Ext.grid.CellEditor) { + editor.floating = true; + editor.isForTree = me.grid.isTree; + } + + else { + editor = new Ext.grid.CellEditor({ + floating: true, + editorId: editorId, + field: editor, + isForTree: me.grid.isTree + }); + } + + editorOwner.add(editor); + editor.on({ + scope: me, + specialkey: me.onSpecialKey, + complete: me.onEditComplete, + canceledit: me.cancelEdit + }); + column.on('removed', me.cancelActiveEdit, me); + editors.add(editor); + } + + + editor.editingPlugin = me; + return editor; + }, + + cancelActiveEdit: function(column){ + var context = this.context + if (context && context.column === column) { + this.cancelEdit(); + } + }, + + + setColumnField: function(column, field) { + var ed = this.editors.getByKey(column.getItemId()); + Ext.destroy(ed, column.field); + this.editors.removeAtKey(column.getItemId()); + this.callParent(arguments); + }, + + + getCell: function(record, column) { + return this.grid.getView().getCell(record, column); + }, + + onSpecialKey: function(ed, field, e) { + var sm; + + if (e.getKey() === e.TAB) { + e.stopEvent(); + + if (ed) { + + + ed.onEditorTab(e); + } + + sm = ed.up('tablepanel').getSelectionModel(); + if (sm.onEditorTab) { + return sm.onEditorTab(ed.editingPlugin, e); + } + } + }, + + onEditComplete : function(ed, value, startValue) { + var me = this, + grid = me.grid, + activeColumn = me.getActiveColumn(), + sm = grid.getSelectionModel(), + context = me.context, + record; + + if (activeColumn) { + record = context.record; + + me.setActiveEditor(null); + me.setActiveColumn(null); + me.setActiveRecord(null); + + context.value = value; + if (!me.validateEdit()) { + return; + } + + + + if (!record.isEqual(value, startValue)) { + record.set(activeColumn.dataIndex, value); + } + + + if (sm.setCurrentPosition) { + sm.setCurrentPosition(sm.getCurrentPosition()); + } else { + grid.getView().focus(); + } + me.fireEvent('edit', me, context); + me.editing = false; + } + }, + + + cancelEdit: function() { + var me = this, + activeEd = me.getActiveEditor(), + viewEl = me.grid.getView().getEl(me.getActiveColumn()); + + me.setActiveEditor(null); + me.setActiveColumn(null); + me.setActiveRecord(null); + if (activeEd) { + activeEd.cancelEdit(); + viewEl.focus(); + me.callParent(arguments); + return; + } + + return true; + }, + + + startEditByPosition: function(position) { + + + position.column = this.view.getHeaderCt().getVisibleHeaderClosestToIndex(position.column).getIndex(); + + return this.startEdit(position.row, position.column); + } +}); + +Ext.define('Ext.grid.plugin.DivRenderer', { + alias: 'plugin.divrenderer', + extend: Ext.AbstractPlugin , + + tableTpl: [ + '
    ', + '{%', + 'values.view.renderRows(values.rows, values.viewStartIndex, out);', + '%}', + '
    ', + { + priority: 0 + } + ], + + rowTpl: [ + '{%', + 'var dataRowCls = values.recordIndex === -1 ? "" : " ' + Ext.baseCSSPrefix + 'grid-data-row";', + '%}', + '
    ', + '' + + '{%', + 'parent.view.renderCell(values, parent.record, parent.recordIndex, xindex - 1, out, parent)', + '%}', + '', + '
    ', + { + priority: 0 + } + ], + + cellTpl: [ + '
    ', + '
    {style}">{value}
    ', + '
    ', { + priority: 0 + } + ], + + selectors: { + + bodySelector: 'div', + + + nodeContainerSelector: 'div', + + + itemSelector: 'dl.' + Ext.baseCSSPrefix + 'grid-row', + + + dataRowSelector: 'dl.' + Ext.baseCSSPrefix + 'grid-data-row', + + + cellSelector: 'dt.' + Ext.baseCSSPrefix + 'grid-cell', + + innerSelector: 'div.' + Ext.baseCSSPrefix + 'grid-cell-inner', + + getNodeContainerSelector: function() { + return this.getBodySelector(); + }, + + getNodeContainer: function() { + return this.el.getById(this.id + '-table', true); + } + }, + + init: function(grid) { + var view = grid.getView(); + view.tableTpl = Ext.XTemplate.getTpl(this, 'tableTpl'); + view.rowTpl = Ext.XTemplate.getTpl(this, 'rowTpl'); + view.cellTpl = Ext.XTemplate.getTpl(this, 'cellTpl'); + Ext.apply(view, this.selectors); + } +}); + + +Ext.define('Ext.grid.plugin.DragDrop', { + extend: Ext.AbstractPlugin , + alias: 'plugin.gridviewdragdrop', + + + + + + + + + + + + + dragText : '{0} selected row{1}', + + + + ddGroup : "GridDD", + + + + + + + enableDrop: true, + + + enableDrag: true, + + + containerScroll: false, + + init : function(view) { + view.on('render', this.onViewRender, this, {single: true}); + }, + + + destroy: function() { + Ext.destroy(this.dragZone, this.dropZone); + }, + + enable: function() { + var me = this; + if (me.dragZone) { + me.dragZone.unlock(); + } + if (me.dropZone) { + me.dropZone.unlock(); + } + me.callParent(); + }, + + disable: function() { + var me = this; + if (me.dragZone) { + me.dragZone.lock(); + } + if (me.dropZone) { + me.dropZone.lock(); + } + me.callParent(); + }, + + onViewRender : function(view) { + var me = this, + scrollEl; + + if (me.enableDrag) { + if (me.containerScroll) { + scrollEl = view.getEl(); + } + + me.dragZone = new Ext.view.DragZone({ + view: view, + ddGroup: me.dragGroup || me.ddGroup, + dragText: me.dragText, + containerScroll: me.containerScroll, + scrollEl: scrollEl + }); + } + + if (me.enableDrop) { + me.dropZone = new Ext.grid.ViewDropZone({ + view: view, + ddGroup: me.dropGroup || me.ddGroup + }); + } + } +}); + + +Ext.define('Ext.grid.plugin.RowEditing', { + extend: Ext.grid.plugin.Editing , + alias: 'plugin.rowediting', + + + + + + lockableScope: 'top', + + editStyle: 'row', + + + autoCancel: true, + + + + + errorSummary: true, + + constructor: function() { + var me = this; + + me.callParent(arguments); + + if (!me.clicksToMoveEditor) { + me.clicksToMoveEditor = me.clicksToEdit; + } + + me.autoCancel = !!me.autoCancel; + }, + + + destroy: function() { + Ext.destroy(this.editor); + this.callParent(arguments); + }, + + + startEdit: function(record, columnHeader) { + var me = this, + editor = me.getEditor(), + context; + + if (editor.beforeEdit() !== false) { + context = me.callParent(arguments); + if (context) { + me.context = context; + + + if (me.lockingPartner) { + me.lockingPartner.cancelEdit(); + } + editor.startEdit(context.record, context.column, context); + return true; + } + } + return false; + }, + + + cancelEdit: function() { + var me = this; + + if (me.editing) { + me.getEditor().cancelEdit(); + me.callParent(arguments); + return; + } + + return true; + }, + + + completeEdit: function() { + var me = this; + + if (me.editing && me.validateEdit()) { + me.editing = false; + me.fireEvent('edit', me, me.context); + } + }, + + + validateEdit: function() { + var me = this, + editor = me.editor, + context = me.context, + record = context.record, + newValues = {}, + originalValues = {}, + editors = editor.items.items, + e, + eLen = editors.length, + name, item; + + for (e = 0; e < eLen; e++) { + item = editors[e]; + name = item.name; + + newValues[name] = item.getValue(); + originalValues[name] = record.get(name); + } + + Ext.apply(context, { + newValues : newValues, + originalValues : originalValues + }); + + return me.callParent(arguments) && me.getEditor().completeEdit(); + }, + + + getEditor: function() { + var me = this; + + if (!me.editor) { + me.editor = me.initEditor(); + } + return me.editor; + }, + + + initEditor: function() { + return new Ext.grid.RowEditor(this.initEditorConfig()); + }, + + initEditorConfig: function(){ + var me = this, + grid = me.grid, + view = me.view, + headerCt = grid.headerCt, + btns = ['saveBtnText', 'cancelBtnText', 'errorsText', 'dirtyText'], + b, + bLen = btns.length, + cfg = { + autoCancel: me.autoCancel, + errorSummary: me.errorSummary, + fields: headerCt.getGridColumns(), + hidden: true, + view: view, + + editingPlugin: me + }, + item; + + for (b = 0; b < bLen; b++) { + item = btns[b]; + + if (Ext.isDefined(me[item])) { + cfg[item] = me[item]; + } + } + return cfg; + }, + + + initEditTriggers: function() { + var me = this, + view = me.view, + moveEditorEvent = me.clicksToMoveEditor === 1 ? 'click' : 'dblclick'; + + me.callParent(arguments); + + if (me.clicksToMoveEditor !== me.clicksToEdit) { + me.mon(view, 'cell' + moveEditorEvent, me.moveEditorByClick, me); + } + + view.on({ + render: function() { + me.mon(me.grid.headerCt, { + scope: me, + columnresize: me.onColumnResize, + columnhide: me.onColumnHide, + columnshow: me.onColumnShow, + columnmove: me.onColumnMove + }); + }, + single: true + }); + }, + + startEditByClick: function() { + var me = this; + if (!me.editing || me.clicksToMoveEditor === me.clicksToEdit) { + me.callParent(arguments); + } + }, + + moveEditorByClick: function() { + var me = this; + if (me.editing) { + me.superclass.onCellClick.apply(me, arguments); + } + }, + + + onColumnAdd: function(ct, column) { + if (column.isHeader) { + var me = this, + editor; + + me.initFieldAccessors(column); + + + + editor = me.editor; + if (editor && editor.onColumnAdd) { + editor.onColumnAdd(column); + } + } + }, + + + onColumnRemove: function(ct, column) { + if (column.isHeader) { + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnRemove) { + editor.onColumnRemove(column); + } + me.removeFieldAccessors(column); + } + }, + + + onColumnResize: function(ct, column, width) { + if (column.isHeader) { + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnResize) { + editor.onColumnResize(column, width); + } + } + }, + + + onColumnHide: function(ct, column) { + + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnHide) { + editor.onColumnHide(column); + } + }, + + + onColumnShow: function(ct, column) { + + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnShow) { + editor.onColumnShow(column); + } + }, + + + onColumnMove: function(ct, column, fromIdx, toIdx) { + + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnMove) { + + + editor.onColumnMove(column, fromIdx, toIdx - (toIdx > fromIdx ? 1 : 0)); + } + }, + + + setColumnField: function(column, field) { + var me = this, + editor = me.getEditor(); + + editor.removeField(column); + me.callParent(arguments); + me.getEditor().setField(column); + } +}); + + + + + + +Ext.define('Ext.grid.plugin.RowExpander', { + extend: Ext.AbstractPlugin , + lockableScope: 'normal', + + + + + + + alias: 'plugin.rowexpander', + + rowBodyTpl: null, + + + expandOnEnter: true, + + + expandOnDblClick: true, + + + selectRowOnExpand: false, + + rowBodyTrSelector: '.x-grid-rowbody-tr', + rowBodyHiddenCls: 'x-grid-row-body-hidden', + rowCollapsedCls: 'x-grid-row-collapsed', + + addCollapsedCls: { + before: function(values, out) { + var me = this.rowExpander; + if (!me.recordsExpanded[values.record.internalId]) { + values.itemClasses.push(me.rowCollapsedCls); + } + }, + priority: 500 + }, + + + + + setCmp: function(grid) { + var me = this, + rowBodyTpl, + features; + + me.callParent(arguments); + + me.recordsExpanded = {}; + + me.rowBodyTpl = Ext.XTemplate.getTpl(me, 'rowBodyTpl'); + rowBodyTpl = this.rowBodyTpl; + features = [{ + ftype: 'rowbody', + lockableScope: 'normal', + recordsExpanded: me.recordsExpanded, + rowBodyHiddenCls: me.rowBodyHiddenCls, + rowCollapsedCls: me.rowCollapsedCls, + setupRowData: me.getRowBodyFeatureData, + getRowBodyContents: function(record) { + return rowBodyTpl.applyTemplate(record.getData()); + } + },{ + ftype: 'rowwrap', + lockableScope: 'normal' + }]; + + if (grid.features) { + grid.features = Ext.Array.push(features, grid.features); + } else { + grid.features = features; + } + + }, + + init: function(grid) { + var me = this, + reconfigurable = grid, + lockedView; + + me.callParent(arguments); + me.grid = grid; + me.view = grid.getView(); + + + me.addExpander(); + + + + me.bindView(me.view); + me.view.addRowTpl(me.addCollapsedCls).rowExpander = me; + + + + if (grid.ownerLockable) { + + reconfigurable = grid.ownerLockable; + reconfigurable.syncRowHeight = false; + lockedView = reconfigurable.lockedGrid.getView(); + + + + me.bindView(lockedView); + lockedView.addRowTpl(me.addCollapsedCls).rowExpander = me; + + + + reconfigurable.mon(reconfigurable, 'columnschanged', me.refreshRowHeights, me); + reconfigurable.mon(reconfigurable.store, 'datachanged', me.refreshRowHeights, me); + } + reconfigurable.on('beforereconfigure', me.beforeReconfigure, me); + }, + + beforeReconfigure: function(grid, store, columns, oldStore, oldColumns) { + var expander = this.getHeaderConfig(); + expander.locked = true; + columns.unshift(expander); + }, + + + addExpander: function() { + var me = this, + expanderGrid = me.grid, + expanderHeader = me.getHeaderConfig(); + + + if (expanderGrid.ownerLockable) { + expanderGrid = expanderGrid.ownerLockable.lockedGrid; + expanderGrid.width += expanderHeader.width; + } + expanderGrid.headerCt.insert(0, expanderHeader); + }, + + getRowBodyFeatureData: function(record, idx, rowValues) { + var me = this + me.self.prototype.setupRowData.apply(me, arguments); + + + if (!me.grid.ownerLockable) { + rowValues.rowBodyColspan = rowValues.rowBodyColspan - 1; + } + rowValues.rowBody = me.getRowBodyContents(record); + rowValues.rowBodyCls = me.recordsExpanded[record.internalId] ? '' : me.rowBodyHiddenCls; + }, + + bindView: function(view) { + if (this.expandOnEnter) { + view.on('itemkeydown', this.onKeyDown, this); + } + if (this.expandOnDblClick) { + view.on('itemdblclick', this.onDblClick, this); + } + }, + + onKeyDown: function(view, record, row, rowIdx, e) { + if (e.getKey() == e.ENTER) { + var ds = view.store, + sels = view.getSelectionModel().getSelection(), + ln = sels.length, + i = 0; + + for (; i < ln; i++) { + rowIdx = ds.indexOf(sels[i]); + this.toggleRow(rowIdx, sels[i]); + } + } + }, + + onDblClick: function(view, record, row, rowIdx, e) { + this.toggleRow(rowIdx, record); + }, + + toggleRow: function(rowIdx, record) { + var me = this, + view = me.view, + rowNode = view.getNode(rowIdx), + row = Ext.fly(rowNode, '_rowExpander'), + nextBd = row.down(me.rowBodyTrSelector, true), + isCollapsed = row.hasCls(me.rowCollapsedCls), + addOrRemoveCls = isCollapsed ? 'removeCls' : 'addCls', + rowHeight; + + + Ext.suspendLayouts(); + row[addOrRemoveCls](me.rowCollapsedCls); + Ext.fly(nextBd)[addOrRemoveCls](me.rowBodyHiddenCls); + me.recordsExpanded[record.internalId] = isCollapsed; + view.refreshSize(); + view.fireEvent(isCollapsed ? 'expandbody' : 'collapsebody', row.dom, record, nextBd); + + + if (me.grid.ownerLockable) { + view = me.grid.ownerLockable.lockedGrid.view; + rowHeight = row.getHeight(); + row = Ext.fly(view.getNode(rowIdx), '_rowExpander'); + row.setHeight(rowHeight); + row[addOrRemoveCls](me.rowCollapsedCls); + view.refreshSize(); + } + + Ext.resumeLayouts(true); + }, + + + + + + + + refreshRowHeights: function() { + Ext.globalEvents.on({ + idle: this.doRefreshRowHeights, + scope: this, + single: true + }); + }, + + doRefreshRowHeights: function() { + var me = this, + recordsExpanded = me.recordsExpanded, + key, record, + lockedView = me.grid.ownerLockable.lockedGrid.view, + normalView = me.grid.ownerLockable.normalGrid.view, + normalRow, + lockedRow, + lockedHeight, + normalHeight; + + for (key in recordsExpanded) { + if (recordsExpanded.hasOwnProperty(key)) { + record = this.view.store.data.get(key); + lockedRow = lockedView.getNode(record, false); + normalRow = normalView.getNode(record, false); + lockedRow.style.height = normalRow.style.height = ''; + lockedHeight = lockedRow.offsetHeight; + normalHeight = normalRow.offsetHeight; + if (normalHeight > lockedHeight) { + lockedRow.style.height = normalHeight + 'px'; + } else if (lockedHeight > normalHeight) { + normalRow.style.height = lockedHeight + 'px'; + } + } + } + }, + + getHeaderConfig: function() { + var me = this; + + return { + width: 24, + lockable: false, + sortable: false, + resizable: false, + draggable: false, + hideable: false, + menuDisabled: true, + tdCls: Ext.baseCSSPrefix + 'grid-cell-special', + renderer: function(value, metadata) { + + if (!me.grid.ownerLockable) { + metadata.tdAttr += ' rowspan="2"'; + } + return '
     
    '; + }, + processEvent: function(type, view, cell, rowIndex, cellIndex, e, record) { + if (type == "mousedown" && e.getTarget('.x-grid-row-expander')) { + me.toggleRow(rowIndex, record); + return me.selectRowOnExpand; + } + } + }; + } +}); + + +Ext.define('Ext.grid.property.Grid', { + + extend: Ext.grid.Panel , + + alias: 'widget.propertygrid', + + alternateClassName: 'Ext.grid.PropertyGrid', + + + + + + + + + + + + + + + + + + + + + + + + + valueField: 'value', + + + nameField: 'name', + + + inferTypes: true, + + + + + enableColumnMove: false, + columnLines: true, + stripeRows: false, + trackMouseOver: false, + clicksToEdit: 1, + enableHdMenu: false, + + gridCls: Ext.baseCSSPrefix + 'property-grid', + + + initComponent : function(){ + var me = this; + + me.source = me.source || {}; + me.addCls(me.gridCls); + me.plugins = me.plugins || []; + + + me.plugins.push(new Ext.grid.plugin.CellEditing({ + clicksToEdit: me.clicksToEdit, + + + startEdit: function(record, column) { + + return this.self.prototype.startEdit.call(this, record, me.headerCt.child('#' + me.valueField)); + } + })); + + me.selModel = { + selType: 'cellmodel', + onCellSelect: function(position) { + if (position.column != 1) { + position.column = 1; + } + return this.self.prototype.onCellSelect.call(this, position); + } + }; + + me.sourceConfig = Ext.apply({}, me.sourceConfig); + + + if (!me.store) { + me.propStore = me.store = new Ext.grid.property.Store(me, me.source); + } + me.configure(me.sourceConfig); + + if (me.sortableColumns) { + me.store.sort('name', 'ASC'); + } + me.columns = new Ext.grid.property.HeaderContainer(me, me.store); + + me.addEvents( + + 'beforepropertychange', + + 'propertychange' + ); + me.callParent(); + + + me.getView().walkCells = this.walkCells; + + + me.editors = { + 'date' : new Ext.grid.CellEditor({ field: new Ext.form.field.Date({selectOnFocus: true})}), + 'string' : new Ext.grid.CellEditor({ field: new Ext.form.field.Text({selectOnFocus: true})}), + 'number' : new Ext.grid.CellEditor({ field: new Ext.form.field.Number({selectOnFocus: true})}), + 'boolean' : new Ext.grid.CellEditor({ field: new Ext.form.field.ComboBox({ + editable: false, + store: [[ true, me.headerCt.trueText ], [false, me.headerCt.falseText ]] + })}) + }; + + + me.store.on('update', me.onUpdate, me); + }, + + configure: function(config){ + var me = this, + store = me.store, + i = 0, + len = me.store.getCount(), + nameField = me.nameField, + valueField = me.valueField, + name, value, rec, type; + + me.configureLegacy(config); + + if (me.inferTypes) { + for (; i < len; ++i) { + rec = store.getAt(i); + name = rec.get(nameField); + if (!me.getConfig(name, 'type')) { + value = rec.get(valueField); + if (Ext.isDate(value)) { + type = 'date'; + } else if (Ext.isNumber(value)) { + type = 'number'; + } else if (Ext.isBoolean(value)) { + type = 'boolean'; + } else { + type = 'string'; + } + me.setConfig(name, 'type', type); + } + } + } + }, + + getConfig: function(fieldName, key, defaultValue) { + var config = this.sourceConfig[fieldName], + out; + + if (config) { + out = config[key]; + } + return out || defaultValue; + }, + + setConfig: function(fieldName, key, value) { + var sourceCfg = this.sourceConfig, + o = sourceCfg[fieldName]; + + if (!o) { + o = sourceCfg[fieldName] = { + __copied: true + }; + } else if (!o.__copied) { + o = Ext.apply({ + __copied: true + }, o); + sourceCfg[fieldName] = o; + } + o[key] = value; + return value; + }, + + + configureLegacy: function(config){ + var me = this, + o, key, value; + + me.copyLegacyObject(config, me.customRenderers, 'renderer'); + me.copyLegacyObject(config, me.customEditors, 'editor'); + me.copyLegacyObject(config, me.propertyNames, 'displayName'); + + }, + + copyLegacyObject: function(config, o, keyName){ + var key, value; + + for (key in o) { + if (o.hasOwnProperty(key)) { + if (!config[key]) { + config[key] = {}; + } + config[key][keyName] = o[key]; + } + } + }, + + + onUpdate : function(store, record, operation) { + var me = this, + v, oldValue; + + if (me.rendered && operation == Ext.data.Model.EDIT) { + v = record.get(me.valueField); + oldValue = record.modified.value; + if (me.fireEvent('beforepropertychange', me.source, record.getId(), v, oldValue) !== false) { + if (me.source) { + me.source[record.getId()] = v; + } + record.commit(); + me.fireEvent('propertychange', me.source, record.getId(), v, oldValue); + } else { + record.reject(); + } + } + }, + + + walkCells: function(pos, direction, e, preventWrap, verifierFn, scope) { + if (direction == 'left') { + direction = 'up'; + } else if (direction == 'right') { + direction = 'down'; + } + pos = Ext.view.Table.prototype.walkCells.call(this, pos, direction, e, preventWrap, verifierFn, scope); + if (pos && !pos.column) { + pos.column = 1; + } + return pos; + }, + + + + getCellEditor : function(record, column) { + var me = this, + propName = record.get(me.nameField), + val = record.get(me.valueField), + editor = me.getConfig(propName, 'editor'), + type = me.getConfig(propName, 'type'), + editors = me.editors; + + + + if (editor) { + if (!(editor instanceof Ext.grid.CellEditor)) { + if (!(editor instanceof Ext.form.field.Base)) { + editor = Ext.ComponentManager.create(editor, 'textfield'); + } + editor = me.setConfig(propName, 'editor', new Ext.grid.CellEditor({ field: editor })); + } + } else if (type) { + switch (type) { + case 'date': + editor = editors.date; + break; + case 'number': + editor = editors.number; + break; + case 'boolean': + editor = me.editors['boolean']; + break; + default: + editor = editors.string; + } + } else if (Ext.isDate(val)) { + editor = editors.date; + } else if (Ext.isNumber(val)) { + editor = editors.number; + } else if (Ext.isBoolean(val)) { + editor = editors['boolean']; + } else { + editor = editors.string; + } + + + editor.editorId = propName; + return editor; + }, + + beforeDestroy: function() { + var me = this; + me.callParent(); + me.destroyEditors(me.editors); + me.destroyEditors(me.customEditors); + delete me.source; + }, + + destroyEditors: function (editors) { + for (var ed in editors) { + if (editors.hasOwnProperty(ed)) { + Ext.destroy(editors[ed]); + } + } + }, + + + setSource: function(source, sourceConfig) { + var me = this; + + me.source = source; + if (sourceConfig !== undefined) { + me.sourceConfig = Ext.apply({}, sourceConfig); + me.configure(me.sourceConfig); + } + me.propStore.setSource(source); + }, + + + getSource: function() { + return this.propStore.getSource(); + }, + + + setProperty: function(prop, value, create) { + this.propStore.setValue(prop, value, create); + }, + + + removeProperty: function(prop) { + this.propStore.remove(prop); + } + + + +}); + + +Ext.define('Ext.grid.property.HeaderContainer', { + + extend: Ext.grid.header.Container , + + alternateClassName: 'Ext.grid.PropertyColumnModel', + + nameWidth: 115, + + + + nameText : 'Name', + + + valueText : 'Value', + + + dateFormat : 'm/j/Y', + + + trueText: 'true', + + + falseText: 'false', + + + + nameColumnCls: Ext.baseCSSPrefix + 'grid-property-name', + + + constructor : function(grid, store) { + var me = this; + + me.grid = grid; + me.store = store; + me.callParent([{ + enableColumnResize: Ext.isDefined(grid.enableColumnResize) ? grid.enableColumnResize : me.enableColumnResize, + enableColumnMove: Ext.isDefined(grid.enableColumnMove) ? grid.enableColumnMove : me.enableColumnMove, + items: [{ + header: me.nameText, + width: grid.nameColumnWidth || me.nameWidth, + sortable: grid.sortableColumns, + dataIndex: grid.nameField, + renderer: Ext.Function.bind(me.renderProp, me), + itemId: grid.nameField, + menuDisabled :true, + tdCls: me.nameColumnCls + }, { + header: me.valueText, + renderer: Ext.Function.bind(me.renderCell, me), + getEditor: Ext.Function.bind(me.getCellEditor, me), + sortable: grid.sortableColumns, + flex: 1, + fixed: true, + dataIndex: grid.valueField, + itemId: grid.valueField, + menuDisabled: true + }] + }]); + }, + + getCellEditor: function(record){ + return this.grid.getCellEditor(record, this); + }, + + + + renderProp : function(v) { + return this.getPropertyName(v); + }, + + + + renderCell : function(val, meta, rec) { + var me = this, + grid = me.grid, + renderer = grid.getConfig(rec.get(grid.nameField), 'renderer'), + result = val; + + if (renderer) { + return renderer.apply(me, arguments); + } + if (Ext.isDate(val)) { + result = me.renderDate(val); + } else if (Ext.isBoolean(val)) { + result = me.renderBool(val); + } + return Ext.util.Format.htmlEncode(result); + }, + + + renderDate : Ext.util.Format.date, + + + renderBool : function(bVal) { + return this[bVal ? 'trueText' : 'falseText']; + }, + + + + getPropertyName : function(name) { + return this.grid.getConfig(name, 'displayName', name); + } +}); + + +Ext.define('Ext.grid.property.Property', { + extend: Ext.data.Model , + + alternateClassName: 'Ext.PropGridProperty', + + fields: [{ + name: 'name', + type: 'string' + }, { + name: 'value' + }], + idProperty: 'name' +}); + + +Ext.define('Ext.grid.property.Store', { + + extend: Ext.data.Store , + + alternateClassName: 'Ext.grid.PropertyStore', + + sortOnLoad: false, + + + + + constructor : function(grid, source){ + var me = this; + + me.grid = grid; + me.source = source; + me.callParent([{ + data: source, + model: Ext.grid.property.Property, + proxy: me.getProxy() + }]); + }, + + + getProxy: function() { + if (!this.proxy) { + Ext.grid.property.Store.prototype.proxy = new Ext.data.proxy.Memory({ + model: Ext.grid.property.Property, + reader: this.getReader() + }); + } + return this.proxy; + }, + + + getReader: function() { + if (!this.reader) { + Ext.grid.property.Store.prototype.reader = new Ext.data.reader.Reader({ + model: Ext.grid.property.Property, + + buildExtractors: Ext.emptyFn, + + read: function(dataObject) { + return this.readRecords(dataObject); + }, + + readRecords: function(dataObject) { + var val, + propName, + result = { + records: [], + success: true + }; + + for (propName in dataObject) { + if (dataObject.hasOwnProperty(propName)) { + val = dataObject[propName]; + if (this.isEditableValue(val)) { + result.records.push(new Ext.grid.property.Property({ + name: propName, + value: val + }, propName)); + } + } + } + result.total = result.count = result.records.length; + return new Ext.data.ResultSet(result); + }, + + + isEditableValue: function(val){ + return Ext.isPrimitive(val) || Ext.isDate(val) || val === null; + } + }); + } + return this.reader; + }, + + + + setSource : function(dataObject) { + var me = this; + + me.source = dataObject; + me.suspendEvents(); + me.removeAll(); + me.proxy.data = dataObject; + me.load(); + me.resumeEvents(); + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + }, + + + getProperty : function(row) { + return Ext.isNumber(row) ? this.getAt(row) : this.getById(row); + }, + + + setValue : function(prop, value, create){ + var me = this, + rec = me.getRec(prop); + + if (rec) { + rec.set('value', value); + me.source[prop] = value; + } else if (create) { + + me.source[prop] = value; + rec = new Ext.grid.property.Property({name: prop, value: value}, prop); + me.add(rec); + } + }, + + + remove : function(prop) { + var rec = this.getRec(prop); + if (rec) { + this.callParent([rec]); + delete this.source[prop]; + } + }, + + + getRec : function(prop) { + return this.getById(prop); + }, + + + + getSource : function() { + return this.source; + } +}); + + +Ext.define('Ext.layout.ClassList', (function () { + + var splitWords = Ext.String.splitWords, + toMap = Ext.Array.toMap; + + return { + dirty: false, + + constructor: function (owner) { + this.owner = owner; + this.map = toMap(this.classes = splitWords(owner.el.className)); + }, + + + add: function (cls) { + var me = this; + + if (!me.map[cls]) { + me.map[cls] = true; + me.classes.push(cls); + if (!me.dirty) { + me.dirty = true; + me.owner.markDirty(); + } + } + }, + + + addMany: function (classes) { + Ext.each(splitWords(classes), this.add, this); + }, + + contains: function (cls) { + return this.map[cls]; + }, + + flush: function () { + this.owner.el.className = this.classes.join(' '); + this.dirty = false; + }, + + + remove: function (cls) { + var me = this; + + if (me.map[cls]) { + delete me.map[cls]; + me.classes = Ext.Array.filter(me.classes, function (c) { + return c != cls; + }); + if (!me.dirty) { + me.dirty = true; + me.owner.markDirty(); + } + } + }, + + + removeMany: function (classes) { + var me = this, + remove = toMap(splitWords(classes)); + + me.classes = Ext.Array.filter(me.classes, function (c) { + if (!remove[c]) { + return true; + } + + delete me.map[c]; + if (!me.dirty) { + me.dirty = true; + me.owner.markDirty(); + } + return false; + }); + } + }; +}())); + + +Ext.define('Ext.util.Queue', { + + constructor: function() { + this.clear(); + }, + + add : function(obj) { + var me = this, + key = me.getKey(obj); + + if (!me.map[key]) { + ++me.length; + me.items.push(obj); + me.map[key] = obj; + } + + return obj; + }, + + + clear : function(){ + var me = this, + items = me.items; + + me.items = []; + me.map = {}; + me.length = 0; + + return items; + }, + + contains: function (obj) { + var key = this.getKey(obj); + + return this.map.hasOwnProperty(key); + }, + + + getCount : function(){ + return this.length; + }, + + getKey : function(obj){ + return obj.id; + }, + + + remove : function(obj){ + var me = this, + key = me.getKey(obj), + items = me.items, + index; + + if (me.map[key]) { + index = Ext.Array.indexOf(items, obj); + Ext.Array.erase(items, index, 1); + delete me.map[key]; + --me.length; + } + + return obj; + } +}); + + +Ext.define('Ext.layout.ContextItem', { + + + + heightModel: null, + widthModel: null, + sizeModel: null, + + + optOut: false, + + ownerSizePolicy: null, + + boxChildren: null, + + boxParent: null, + isBorderBoxValue: null, + + children: [], + + dirty: null, + + + dirtyCount: 0, + + hasRawContent: true, + + isContextItem: true, + + isTopLevel: false, + + consumersContentHeight: 0, + consumersContentWidth: 0, + consumersContainerHeight: 0, + consumersContainerWidth: 0, + consumersHeight: 0, + consumersWidth: 0, + + ownerCtContext: null, + + remainingChildDimensions: 0, + + + props: null, + + + state: null, + + + wrapsComponent: false, + + constructor: function (config) { + var me = this, + sizeModels = Ext.layout.SizeModel.sizeModels, + configured = sizeModels.configured, + shrinkWrap = sizeModels.shrinkWrap, + el, lastBox, ownerCt, ownerCtContext, props, sizeModel, target, + lastWidth, lastHeight, sameWidth, sameHeight, widthModel, heightModel, optOut; + + Ext.apply(me, config); + + el = me.el; + me.id = el.id; + + + + + + + + + + + + + + + + + + + + + + me.flushedProps = {}; + me.props = props = {}; + + + me.styles = {}; + + target = me.target; + + if (!target.isComponent) { + lastBox = el.lastBox; + } else { + me.wrapsComponent = true; + me.framing = target.frameSize || null; + me.isComponentChild = target.ownerLayout && target.ownerLayout.isComponentLayout; + + lastBox = target.lastBox; + + + + ownerCt = target.ownerCt; + if (ownerCt && (ownerCtContext = me.context.items[ownerCt.el.id])) { + me.ownerCtContext = ownerCtContext; + } + + + + me.sizeModel = sizeModel = target.getSizeModel(ownerCtContext && + ownerCtContext.widthModel.pairsByHeightOrdinal[ownerCtContext.heightModel.ordinal]); + + + + + + + + me.widthModel = widthModel = sizeModel.width; + me.heightModel = heightModel = sizeModel.height; + + + + + if (lastBox && lastBox.invalid === false) { + sameWidth = (target.width === (lastWidth = lastBox.width)); + sameHeight = (target.height === (lastHeight = lastBox.height)); + + if (widthModel === shrinkWrap && heightModel === shrinkWrap) { + optOut = true; + } else if (widthModel === configured && sameWidth) { + optOut = heightModel === shrinkWrap || + (heightModel === configured && sameHeight); + } + + if (optOut) { + + me.optOut = true; + props.width = lastWidth; + props.height = lastHeight; + } + } + } + + me.lastBox = lastBox; + }, + + + init: function (full, options) { + var me = this, + oldProps = me.props, + oldDirty = me.dirty, + ownerCtContext = me.ownerCtContext, + ownerLayout = me.target.ownerLayout, + firstTime = !me.state, + ret = full || firstTime, + children, i, n, ownerCt, sizeModel, target, + oldHeightModel = me.heightModel, + oldWidthModel = me.widthModel, + newHeightModel, newWidthModel; + + me.dirty = me.invalid = false; + me.props = {}; + + + me.remainingChildDimensions = 0; + + if (me.boxChildren) { + me.boxChildren.length = 0; + } + + if (!firstTime) { + me.clearAllBlocks('blocks'); + me.clearAllBlocks('domBlocks'); + } + + + if (!me.wrapsComponent) { + return ret; + } + + + target = me.target; + me.state = {}; + + if (firstTime) { + + + if (target.beforeLayout && target.beforeLayout !== Ext.emptyFn) { + target.beforeLayout(); + } + + + + + + + + if (!ownerCtContext && (ownerCt = target.ownerCt)) { + ownerCtContext = me.context.items[ownerCt.el.id]; + } + + if (ownerCtContext) { + me.ownerCtContext = ownerCtContext; + me.isBoxParent = target.ownerLayout.isItemBoxParent(me); + } else { + me.isTopLevel = true; + } + + me.frameBodyContext = me.getEl('frameBody'); + } else { + ownerCtContext = me.ownerCtContext; + + + me.isTopLevel = !ownerCtContext; + + + + children = me.children; + for (i = 0, n = children.length; i < n; ++i) { + children[i].init(true); + } + } + + + + + me.hasRawContent = !(target.isContainer && target.items.items.length > 0); + + if (full) { + + + me.widthModel = me.heightModel = null; + sizeModel = target.getSizeModel(ownerCtContext && + ownerCtContext.widthModel.pairsByHeightOrdinal[ownerCtContext.heightModel.ordinal]); + + if (firstTime) { + me.sizeModel = sizeModel; + } + + me.widthModel = sizeModel.width; + me.heightModel = sizeModel.height; + + + + + if (ownerCtContext && !me.isComponentChild) { + ownerCtContext.remainingChildDimensions += 2; + } + } else if (oldProps) { + + + me.recoverProp('x', oldProps, oldDirty); + me.recoverProp('y', oldProps, oldDirty); + + + if (me.widthModel.calculated) { + me.recoverProp('width', oldProps, oldDirty); + } + if (me.heightModel.calculated) { + me.recoverProp('height', oldProps, oldDirty); + } + + + + + + if (ownerCtContext && !me.isComponentChild) { + ownerCtContext.remainingChildDimensions += + ('width' in oldProps) + ('height' in oldProps); + } + } + + if (oldProps && ownerLayout && ownerLayout.manageMargins) { + me.recoverProp('margin-top', oldProps, oldDirty); + me.recoverProp('margin-right', oldProps, oldDirty); + me.recoverProp('margin-bottom', oldProps, oldDirty); + me.recoverProp('margin-left', oldProps, oldDirty); + } + + + + if (options) { + + + + + + + + + + + + + + + + + + + + + + newHeightModel = options.heightModel; + newWidthModel = options.widthModel; + if (newWidthModel && newHeightModel && oldWidthModel && oldHeightModel) { + if (oldWidthModel.shrinkWrap && oldHeightModel.shrinkWrap) { + if (newWidthModel.constrainedMax && newHeightModel.constrainedMin) { + newHeightModel = null; + } + } + } + + + if (newWidthModel) { + me.widthModel = newWidthModel; + } + if (newHeightModel) { + me.heightModel = newHeightModel; + } + + if (options.state) { + Ext.apply(me.state, options.state); + } + } + + return ret; + }, + + + initContinue: function (full) { + var me = this, + ownerCtContext = me.ownerCtContext, + comp = me.target, + widthModel = me.widthModel, + hierarchyState = comp.getHierarchyState(), + boxParent; + + if (widthModel.fixed) { + hierarchyState.inShrinkWrapTable = false; + } else { + delete hierarchyState.inShrinkWrapTable; + } + + if (full) { + if (ownerCtContext && widthModel.shrinkWrap) { + boxParent = ownerCtContext.isBoxParent ? ownerCtContext : ownerCtContext.boxParent; + if (boxParent) { + boxParent.addBoxChild(me); + } + } else if (widthModel.natural) { + me.boxParent = ownerCtContext; + } + } + + return full; + }, + + + initDone: function(containerLayoutDone) { + var me = this, + props = me.props, + state = me.state; + + + if (me.remainingChildDimensions === 0) { + props.containerChildrenSizeDone = true; + } + if (containerLayoutDone) { + props.containerLayoutDone = true; + } + + if (me.boxChildren && me.boxChildren.length && me.widthModel.shrinkWrap) { + + + me.el.setWidth(10000); + + + state.blocks = (state.blocks || 0) + 1; + } + }, + + + initAnimation: function() { + var me = this, + target = me.target, + ownerCtContext = me.ownerCtContext; + + if (ownerCtContext && ownerCtContext.isTopLevel) { + + + me.animatePolicy = target.ownerLayout.getAnimatePolicy(me); + } else if (!ownerCtContext && target.isCollapsingOrExpanding && target.animCollapse) { + + + + me.animatePolicy = target.componentLayout.getAnimatePolicy(me); + } + + if (me.animatePolicy) { + me.context.queueAnimation(me); + } + }, + + + addCls: function(newCls) { + this.getClassList().addMany(newCls); + }, + + + removeCls: function(removeCls) { + this.getClassList().removeMany(removeCls); + }, + + + addBlock: function (name, layout, propName) { + var me = this, + collection = me[name] || (me[name] = {}), + blockedLayouts = collection[propName] || (collection[propName] = {}); + + if (!blockedLayouts[layout.id]) { + blockedLayouts[layout.id] = layout; + ++layout.blockCount; + ++me.context.blockCount; + } + }, + + addBoxChild: function (boxChildItem) { + var me = this, + children, + widthModel = boxChildItem.widthModel; + + boxChildItem.boxParent = this; + + + + + + + + boxChildItem.measuresBox = widthModel.shrinkWrap ? boxChildItem.hasRawContent : widthModel.natural; + + if (boxChildItem.measuresBox) { + children = me.boxChildren; + + if (children) { + children.push(boxChildItem); + } else { + me.boxChildren = [ boxChildItem ]; + } + } + }, + + + addPositionStyles: function(styles, props) { + var x = props.x, + y = props.y, + count = 0; + + if (x !== undefined) { + styles.left = x + 'px'; + ++count; + } + if (y !== undefined) { + styles.top = y + 'px'; + ++count; + } + return count; + }, + + + addTrigger: function (propName, inDom) { + var me = this, + name = inDom ? 'domTriggers' : 'triggers', + collection = me[name] || (me[name] = {}), + context = me.context, + layout = context.currentLayout, + triggers = collection[propName] || (collection[propName] = {}); + + if (!triggers[layout.id]) { + triggers[layout.id] = layout; + ++layout.triggerCount; + + triggers = context.triggers[inDom ? 'dom' : 'data']; + (triggers[layout.id] || (triggers[layout.id] = [])).push({ + item: this, + prop: propName + }); + + if (me.props[propName] !== undefined) { + if (!inDom || !(me.dirty && (propName in me.dirty))) { + ++layout.firedTriggers; + } + } + } + }, + + boxChildMeasured: function () { + var me = this, + state = me.state, + count = (state.boxesMeasured = (state.boxesMeasured || 0) + 1); + + if (count == me.boxChildren.length) { + + + state.clearBoxWidth = 1; + ++me.context.progressCount; + me.markDirty(); + } + }, + + borderNames: [ 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width'], + marginNames: [ 'margin-top', 'margin-right', 'margin-bottom', 'margin-left' ], + paddingNames: [ 'padding-top', 'padding-right', 'padding-bottom', 'padding-left' ], + trblNames: [ 'top', 'right', 'bottom', 'left' ], + + cacheMissHandlers: { + borderInfo: function (me) { + var info = me.getStyles(me.borderNames, me.trblNames); + + info.width = info.left + info.right; + info.height = info.top + info.bottom; + + return info; + }, + + marginInfo: function (me) { + var info = me.getStyles(me.marginNames, me.trblNames); + + info.width = info.left + info.right; + info.height = info.top + info.bottom; + + return info; + }, + + paddingInfo: function (me) { + + var item = me.frameBodyContext || me, + info = item.getStyles(me.paddingNames, me.trblNames); + + info.width = info.left + info.right; + info.height = info.top + info.bottom; + + return info; + } + }, + + checkCache: function (entry) { + return this.cacheMissHandlers[entry](this); + }, + + clearAllBlocks: function (name) { + var collection = this[name], + propName; + + if (collection) { + for (propName in collection) { + this.clearBlocks(name, propName); + } + } + }, + + + clearBlocks: function (name, propName) { + var collection = this[name], + blockedLayouts = collection && collection[propName], + context, layout, layoutId; + + if (blockedLayouts) { + delete collection[propName]; + + context = this.context; + + for (layoutId in blockedLayouts) { + layout = blockedLayouts[layoutId]; + + --context.blockCount; + if (! --layout.blockCount && !layout.pending && !layout.done) { + context.queueLayout(layout); + } + } + } + }, + + + block: function (layout, propName) { + this.addBlock('blocks', layout, propName); + }, + + + domBlock: function (layout, propName) { + this.addBlock('domBlocks', layout, propName); + }, + + + fireTriggers: function (name, propName) { + var collection = this[name], + triggers = collection && collection[propName], + context = this.context, + layout, layoutId; + + if (triggers) { + for (layoutId in triggers) { + layout = triggers[layoutId]; + ++layout.firedTriggers; + if (!layout.done && !layout.blockCount && !layout.pending) { + context.queueLayout(layout); + } + } + } + }, + + + flush: function () { + var me = this, + dirty = me.dirty, + state = me.state, + targetEl = me.el; + + me.dirtyCount = 0; + + + if (me.classList && me.classList.dirty) { + me.classList.flush(); + } + + + if ('attributes' in me) { + targetEl.set(me.attributes); + delete me.attributes; + } + + + if ('innerHTML' in me) { + targetEl.innerHTML = me.innerHTML; + delete me.innerHTML; + } + + if (state && state.clearBoxWidth) { + state.clearBoxWidth = 0; + me.el.setStyle('width', null); + + if (! --state.blocks) { + me.context.queueItemLayouts(me); + } + } + + if (dirty) { + delete me.dirty; + me.writeProps(dirty, true); + } + }, + + + flushAnimations: function() { + var me = this, + animateFrom = me.previousSize, + target, targetAnim, duration, animateProps, anim, + changeCount, j, propsLen, propName, oldValue, newValue; + + + if (animateFrom) { + target = me.target; + targetAnim = target.layout && target.layout.animate; + if (targetAnim) { + duration = Ext.isNumber(targetAnim) ? targetAnim : targetAnim.duration; + } + animateProps = Ext.Object.getKeys(me.animatePolicy); + + + + anim = Ext.apply({}, { + from: {}, + to: {}, + duration: duration || Ext.fx.Anim.prototype.duration + }, targetAnim); + + for (changeCount = 0, j = 0, propsLen = animateProps.length; j < propsLen; j++) { + propName = animateProps[j]; + oldValue = animateFrom[propName]; + newValue = me.peek(propName); + if (oldValue != newValue) { + propName = me.translateProps[propName]||propName; + anim.from[propName] = oldValue; + anim.to[propName] = newValue; + ++changeCount; + } + } + + + if (changeCount) { + + if (me.isCollapsingOrExpanding === 1) { + target.componentLayout.undoLayout(me); + } + + + else { + me.writeProps(anim.from); + } + me.el.animate(anim); + + Ext.fx.Manager.getFxQueue(me.el.id)[0].on({ + afteranimate: function() { + if (me.isCollapsingOrExpanding === 1) { + target.componentLayout.redoLayout(me); + target.afterCollapse(true); + } else if (me.isCollapsingOrExpanding === 2) { + target.afterExpand(true); + } + } + }); + } + } + }, + + + getBorderInfo: function () { + var me = this, + info = me.borderInfo; + + if (!info) { + me.borderInfo = info = me.checkCache('borderInfo'); + } + + return info; + }, + + + getClassList: function () { + return this.classList || (this.classList = new Ext.layout.ClassList(this)); + }, + + + getEl: function (nameOrEl, owner) { + var me = this, + src, el, elContext; + + if (nameOrEl) { + if (nameOrEl.dom) { + el = nameOrEl; + } else { + src = me.target; + if (owner) { + src = owner; + } + + el = src[nameOrEl]; + if (typeof el == 'function') { + el = el.call(src); + if (el === me.el) { + return this; + } + } + } + + if (el) { + elContext = me.context.getEl(me, el); + } + } + + return elContext || null; + }, + + + getFrameInfo: function () { + var me = this, + info = me.frameInfo, + framing, border; + + if (!info) { + framing = me.framing; + border = me.getBorderInfo(); + + me.frameInfo = info = + framing ? { + top : framing.top + border.top, + right : framing.right + border.right, + bottom: framing.bottom + border.bottom, + left : framing.left + border.left, + width : framing.width + border.width, + height: framing.height + border.height + } : border; + } + + return info; + }, + + + getMarginInfo: function () { + var me = this, + info = me.marginInfo, + comp, manageMargins, margins, ownerLayout, ownerLayoutId; + + if (!info) { + if (!me.wrapsComponent) { + info = me.checkCache('marginInfo'); + } else { + comp = me.target; + ownerLayout = comp.ownerLayout; + ownerLayoutId = ownerLayout ? ownerLayout.id : null; + manageMargins = ownerLayout && ownerLayout.manageMargins; + + + + + + + + + + + + + + + + + info = comp.margin$; + if (info && info.ownerId !== ownerLayoutId) { + + info = null; + + + + + } + + if (!info) { + + info = me.parseMargins(comp, comp.margin) || me.checkCache('marginInfo'); + + + if (manageMargins) { + margins = me.parseMargins(comp, comp.margins, ownerLayout.defaultMargins); + + if (margins) { + + info = { + top: info.top + margins.top, + right: info.right + margins.right, + bottom: info.bottom + margins.bottom, + left: info.left + margins.left + }; + } + + me.setProp('margin-top', 0); + me.setProp('margin-right', 0); + me.setProp('margin-bottom', 0); + me.setProp('margin-left', 0); + } + + + info.ownerId = ownerLayoutId; + comp.margin$ = info; + } + + info.width = info.left + info.right; + info.height = info.top + info.bottom; + } + + me.marginInfo = info; + } + + return info; + }, + + + clearMarginCache: function() { + delete this.marginInfo; + delete this.target.margin$; + }, + + + getPaddingInfo: function () { + var me = this, + info = me.paddingInfo; + + if (!info) { + me.paddingInfo = info = me.checkCache('paddingInfo'); + } + + return info; + }, + + + getProp: function (propName) { + var me = this, + result = me.props[propName]; + + me.addTrigger(propName); + return result; + }, + + + getDomProp: function (propName) { + var me = this, + result = (me.dirty && (propName in me.dirty)) ? undefined : me.props[propName]; + + me.addTrigger(propName, true); + return result; + }, + + + getStyle: function (styleName) { + var me = this, + styles = me.styles, + info, value; + + if (styleName in styles) { + value = styles[styleName]; + } else { + info = me.styleInfo[styleName]; + value = me.el.getStyle(styleName); + + if (info && info.parseInt) { + value = parseInt(value, 10) || 0; + } + + styles[styleName] = value; + } + + return value; + }, + + + getStyles: function (styleNames, altNames) { + var me = this, + styleCache = me.styles, + values = {}, + hits = 0, + n = styleNames.length, + i, missing, missingAltNames, name, info, styleInfo, styles, value; + + altNames = altNames || styleNames; + + + + for (i = 0; i < n; ++i) { + name = styleNames[i]; + + if (name in styleCache) { + values[altNames[i]] = styleCache[name]; + ++hits; + + if (i && hits==1) { + missing = styleNames.slice(0, i); + missingAltNames = altNames.slice(0, i); + } + } else if (hits) { + (missing || (missing = [])).push(name); + (missingAltNames || (missingAltNames = [])).push(altNames[i]); + } + } + + if (hits < n) { + missing = missing || styleNames; + missingAltNames = missingAltNames || altNames; + styleInfo = me.styleInfo; + + styles = me.el.getStyle(missing); + + for (i = missing.length; i--; ) { + name = missing[i]; + info = styleInfo[name]; + value = styles[name]; + + if (info && info.parseInt) { + value = parseInt(value, 10) || 0; + } + + values[missingAltNames[i]] = value; + styleCache[name] = value; + } + } + + return values; + }, + + + hasProp: function (propName) { + var value = this.getProp(propName); + return typeof value != 'undefined'; + }, + + + hasDomProp: function (propName) { + var value = this.getDomProp(propName); + return typeof value != 'undefined'; + }, + + + invalidate: function (options) { + this.context.queueInvalidate(this, options); + }, + + markDirty: function () { + if (++this.dirtyCount == 1) { + + this.context.queueFlush(this); + } + }, + + onBoxMeasured: function () { + var boxParent = this.boxParent, + state = this.state; + + if (boxParent && boxParent.widthModel.shrinkWrap && !state.boxMeasured && this.measuresBox) { + + + state.boxMeasured = 1; + boxParent.boxChildMeasured(); + } + }, + + parseMargins: function (comp, margins, defaultMargins) { + if (margins === true) { + margins = 5; + } + + var type = typeof margins, + ret; + + if (type == 'string' || type == 'number') { + ret = comp.parseBox(margins); + } else if (margins || defaultMargins) { + ret = { top: 0, right: 0, bottom: 0, left: 0 }; + + if (defaultMargins) { + Ext.apply(ret, this.parseMargins(comp, defaultMargins)); + } + + if (margins) { + margins = Ext.apply(ret, comp.parseBox(margins)); + } + } + + return ret; + }, + + peek: function (propName) { + return this.props[propName]; + }, + + + recoverProp: function (propName, oldProps, oldDirty) { + var me = this, + props = me.props, + dirty; + + if (propName in oldProps) { + props[propName] = oldProps[propName]; + + if (oldDirty && propName in oldDirty) { + dirty = me.dirty || (me.dirty = {}); + dirty[propName] = oldDirty[propName]; + } + } + }, + + redo: function(deep) { + var me = this, + items, len, i; + + me.revertProps(me.props); + + if (deep && me.wrapsComponent) { + + if (me.childItems) { + for (i = 0, items = me.childItems, len = items.length; i < len; i++) { + items[i].redo(deep); + } + } + + + for (i = 0, items = me.children, len = items.length; i < len; i++) { + items[i].redo(); + } + } + }, + + + removeEl: function(nameOrEl, owner) { + var me = this, + src, el; + + if (nameOrEl) { + if (nameOrEl.dom) { + el = nameOrEl; + } else { + src = me.target; + if (owner) { + src = owner; + } + + el = src[nameOrEl]; + if (typeof el == 'function') { + el = el.call(src); + if (el === me.el) { + return this; + } + } + } + + if (el) { + me.context.removeEl(me, el); + } + } + }, + + revertProps: function (props) { + var name, + flushed = this.flushedProps, + reverted = {}; + + for (name in props) { + if (flushed.hasOwnProperty(name)) { + reverted[name] = props[name]; + } + } + + this.writeProps(reverted); + }, + + + setAttribute: function(name, value) { + var me = this; + if (!me.attributes) { + me.attributes = {}; + } + me.attributes[name] = value; + me.markDirty(); + }, + + setBox: function (box) { + var me = this; + + if ('left' in box) { + me.setProp('x', box.left); + } + if ('top' in box) { + me.setProp('y', box.top); + } + + + + + me.setSize(box.width, box.height); + }, + + + setContentHeight: function (height, measured) { + if (!measured && this.hasRawContent) { + return 1; + } + + return this.setProp('contentHeight', height); + }, + + + setContentWidth: function (width, measured) { + if (!measured && this.hasRawContent) { + return 1; + } + + return this.setProp('contentWidth', width); + }, + + + setContentSize: function (width, height, measured) { + return this.setContentWidth(width, measured) + + this.setContentHeight(height, measured) == 2; + }, + + + setProp: function (propName, value, dirty) { + var me = this, + valueType = typeof value, + borderBox, info; + + if (valueType == 'undefined' || (valueType === 'number' && isNaN(value))) { + return 0; + } + if (me.props[propName] === value) { + return 1; + } + + me.props[propName] = value; + ++me.context.progressCount; + + if (dirty === false) { + + + me.fireTriggers('domTriggers', propName); + me.clearBlocks('domBlocks', propName); + } else { + info = me.styleInfo[propName]; + if (info) { + if (!me.dirty) { + me.dirty = {}; + } + + if (propName == 'width' || propName == 'height') { + borderBox = me.isBorderBoxValue; + if (borderBox === null) { + me.isBorderBoxValue = borderBox = !!me.el.isBorderBox(); + } + + if (!borderBox) { + me.borderInfo || me.getBorderInfo(); + me.paddingInfo || me.getPaddingInfo(); + } + } + me.dirty[propName] = value; + me.markDirty(); + } + } + + + me.fireTriggers('triggers', propName); + me.clearBlocks('blocks', propName); + return 1; + }, + + + setHeight: function (height, dirty ) { + var me = this, + comp = me.target, + ownerCtContext = me.ownerCtContext, + frameBody, frameInfo, min, oldHeight, rem; + + if (height < 0) { + height = 0; + } + if (!me.wrapsComponent) { + if (!me.setProp('height', height, dirty)) { + return NaN; + } + } else { + min = me.collapsedVert ? 0 : (comp.minHeight || 0); + height = Ext.Number.constrain(height, min, comp.maxHeight); + oldHeight = me.props.height; + if (!me.setProp('height', height, dirty)) { + return NaN; + } + + + + if (ownerCtContext && !me.isComponentChild && isNaN(oldHeight)) { + rem = --ownerCtContext.remainingChildDimensions; + if (!rem) { + + + + ownerCtContext.setProp('containerChildrenSizeDone', true); + } + } + + frameBody = me.frameBodyContext; + if (frameBody){ + frameInfo = me.getFrameInfo(); + frameBody.setHeight(height - frameInfo.height, dirty); + } + } + + return height; + }, + + + setWidth: function (width, dirty ) { + var me = this, + comp = me.target, + ownerCtContext = me.ownerCtContext, + frameBody, frameInfo, min, oldWidth, rem; + + if (width < 0) { + width = 0; + } + if (!me.wrapsComponent) { + if (!me.setProp('width', width, dirty)) { + return NaN; + } + } else { + min = me.collapsedHorz ? 0 : (comp.minWidth || 0); + width = Ext.Number.constrain(width, min, comp.maxWidth); + oldWidth = me.props.width + if (!me.setProp('width', width, dirty)) { + return NaN; + } + + + + if (ownerCtContext && !me.isComponentChild && isNaN(oldWidth)) { + rem = --ownerCtContext.remainingChildDimensions; + if (!rem) { + + + + ownerCtContext.setProp('containerChildrenSizeDone', true); + } + } + + + frameBody = me.frameBodyContext; + if (frameBody) { + frameInfo = me.getFrameInfo(); + frameBody.setWidth(width - frameInfo.width, dirty); + } + + + } + + return width; + }, + + setSize: function (width, height, dirty) { + this.setWidth(width, dirty); + this.setHeight(height, dirty); + }, + + translateProps: { + x: 'left', + y: 'top' + }, + + undo: function(deep) { + var me = this, + items, len, i; + + me.revertProps(me.lastBox); + + if (deep && me.wrapsComponent) { + + if (me.childItems) { + for (i = 0, items = me.childItems, len = items.length; i < len; i++) { + items[i].undo(deep); + } + } + + + for (i = 0, items = me.children, len = items.length; i < len; i++) { + items[i].undo(); + } + } + }, + + unsetProp: function (propName) { + var dirty = this.dirty; + + delete this.props[propName]; + if (dirty) { + delete dirty[propName]; + } + }, + + writeProps: function(dirtyProps, flushing) { + if (!(dirtyProps && typeof dirtyProps == 'object')) { + return; + } + + var me = this, + el = me.el, + styles = {}, + styleCount = 0, + styleInfo = me.styleInfo, + + info, + propName, + numericValue, + width = dirtyProps.width, + height = dirtyProps.height, + isBorderBox = me.isBorderBoxValue, + target = me.target, + max = Math.max, + paddingWidth = 0, + paddingHeight = 0, + hasWidth, hasHeight, isAbsolute, scrollbarSize, style, targetEl; + + + if ('displayed' in dirtyProps) { + el.setDisplayed(dirtyProps.displayed); + } + + + for (propName in dirtyProps) { + if (flushing) { + me.fireTriggers('domTriggers', propName); + me.clearBlocks('domBlocks', propName); + me.flushedProps[propName] = 1; + } + + info = styleInfo[propName]; + if (info && info.dom) { + + if (info.suffix && (numericValue = parseInt(dirtyProps[propName], 10))) { + styles[propName] = numericValue + info.suffix; + } + + else { + styles[propName] = dirtyProps[propName]; + } + ++styleCount; + } + } + + + if ('x' in dirtyProps || 'y' in dirtyProps) { + if (target.isComponent) { + target.setPosition(dirtyProps.x, dirtyProps.y); + } else { + + styleCount += me.addPositionStyles(styles, dirtyProps); + } + } + + + if (!isBorderBox && (width > 0 || height > 0)) { + + + if(!me.frameBodyContext) { + + paddingWidth = me.paddingInfo.width; + paddingHeight = me.paddingInfo.height; + } + if (width) { + width = max(parseInt(width, 10) - (me.borderInfo.width + paddingWidth), 0); + styles.width = width + 'px'; + ++styleCount; + } + if (height) { + height = max(parseInt(height, 10) - (me.borderInfo.height + paddingHeight), 0); + styles.height = height + 'px'; + ++styleCount; + } + } + + + + + + + + if (me.wrapsComponent && Ext.isIE9 && Ext.isStrict) { + + + if ((hasWidth = width !== undefined && me.hasOverflowY) || + (hasHeight = height !== undefined && me.hasOverflowX)) { + + isAbsolute = me.isAbsolute; + if (isAbsolute === undefined) { + isAbsolute = false; + targetEl = me.target.getTargetEl(); + style = targetEl.getStyle('position'); + + if (style == 'absolute') { + style = targetEl.getStyle('box-sizing'); + isAbsolute = (style == 'border-box'); + } + + me.isAbsolute = isAbsolute; + } + + if (isAbsolute) { + scrollbarSize = Ext.getScrollbarSize(); + + if (hasWidth) { + width = parseInt(width, 10) + scrollbarSize.width; + styles.width = width + 'px'; + ++styleCount; + } + if (hasHeight) { + height = parseInt(height, 10) + scrollbarSize.height; + styles.height = height + 'px'; + ++styleCount; + } + } + } + } + + + if (styleCount) { + el.setStyle(styles); + } + } +}, function () { + + var px = { dom: true, parseInt: true, suffix: 'px' }, + isDom = { dom: true }, + faux = { dom: false }; + + + + + + + + + + this.prototype.styleInfo = { + containerChildrenSizeDone: faux, + containerLayoutDone: faux, + displayed: faux, + done: faux, + x: faux, + y: faux, + + + columnWidthsDone: faux, + + left: px, + top: px, + right: px, + bottom: px, + width: px, + height: px, + + 'border-top-width': px, + 'border-right-width': px, + 'border-bottom-width': px, + 'border-left-width': px, + + 'margin-top': px, + 'margin-right': px, + 'margin-bottom': px, + 'margin-left': px, + + 'padding-top': px, + 'padding-right': px, + 'padding-bottom': px, + 'padding-left': px, + + 'line-height': isDom, + display: isDom + }; +}); + + +Ext.define('Ext.layout.Context', { + + + + + + + + + remainingLayouts: 0, + + + state: 0, + + constructor: function (config) { + var me = this; + + Ext.apply(me, config); + + + me.items = {}; + + + me.layouts = {}; + + + me.blockCount = 0; + + me.cycleCount = 0; + + me.flushCount = 0; + + me.calcCount = 0; + + me.animateQueue = me.newQueue(); + me.completionQueue = me.newQueue(); + me.finalizeQueue = me.newQueue(); + me.finishQueue = me.newQueue(); + me.flushQueue = me.newQueue(); + + me.invalidateData = {}; + + + me.layoutQueue = me.newQueue(); + + + + me.invalidQueue = []; + + me.triggers = { + data: { + + }, + dom: {} + }; + }, + + callLayout: function (layout, methodName) { + this.currentLayout = layout; + layout[methodName](this.getCmp(layout.owner)); + }, + + cancelComponent: function (comp, isChild, isDestroying) { + var me = this, + components = comp, + isArray = !comp.isComponent, + length = isArray ? components.length : 1, + i, k, klen, items, layout, newQueue, oldQueue, entry, temp, + ownerCtContext; + + for (i = 0; i < length; ++i) { + if (isArray) { + comp = components[i]; + } + + + if (isDestroying && comp.ownerCt) { + ownerCtContext = this.items[comp.ownerCt.el.id]; + if (ownerCtContext) { + Ext.Array.remove(ownerCtContext.childItems, me.getCmp(comp)); + } + } + + if (!isChild) { + oldQueue = me.invalidQueue; + klen = oldQueue.length; + + if (klen) { + me.invalidQueue = newQueue = []; + for (k = 0; k < klen; ++k) { + entry = oldQueue[k]; + temp = entry.item.target; + if (temp != comp && !temp.isDescendant(comp)) { + newQueue.push(entry); + } + } + } + } + + layout = comp.componentLayout; + me.cancelLayout(layout); + + if (layout.getLayoutItems) { + items = layout.getLayoutItems(); + if (items.length) { + me.cancelComponent(items, true); + } + } + + if (comp.isContainer && !comp.collapsed) { + layout = comp.layout; + me.cancelLayout(layout); + + items = layout.getVisibleItems(); + if (items.length) { + me.cancelComponent(items, true); + } + } + } + }, + + cancelLayout: function (layout) { + var me = this; + + me.completionQueue.remove(layout); + me.finalizeQueue.remove(layout); + me.finishQueue.remove(layout); + me.layoutQueue.remove(layout); + + if (layout.running) { + me.layoutDone(layout); + } + + layout.ownerContext = null; + }, + + clearTriggers: function (layout, inDom) { + var id = layout.id, + collection = this.triggers[inDom ? 'dom' : 'data'], + triggers = collection && collection[id], + length = (triggers && triggers.length) || 0, + collection, i, item, trigger; + + for (i = 0; i < length; ++i) { + trigger = triggers[i]; + item = trigger.item; + + collection = inDom ? item.domTriggers : item.triggers; + delete collection[trigger.prop][id]; + } + }, + + + flush: function () { + var me = this, + items = me.flushQueue.clear(), + length = items.length, i; + + if (length) { + ++me.flushCount; + + for (i = 0; i < length; ++i) { + items[i].flush(); + } + } + }, + + flushAnimations: function() { + var me = this, + items = me.animateQueue.clear(), + len = items.length, + i; + + if (len) { + for (i = 0; i < len; i++) { + + + + if (items[i].target.animate !== false) { + items[i].flushAnimations(); + } + } + + + + Ext.fx.Manager.runner(); + } + }, + + flushInvalidates: function () { + var me = this, + queue = me.invalidQueue, + length = queue && queue.length, + comp, components, entry, i; + + me.invalidQueue = []; + + if (length) { + components = []; + for (i = 0; i < length; ++i) { + comp = (entry = queue[i]).item.target; + + + + + if (!comp.container.isDetachedBody) { + components.push(comp); + + if (entry.options) { + me.invalidateData[comp.id] = entry.options; + } + } + } + + me.invalidate(components, null); + } + }, + + flushLayouts: function (queueName, methodName, dontClear) { + var me = this, + layouts = dontClear ? me[queueName].items : me[queueName].clear(), + length = layouts.length, + i, layout; + + if (length) { + for (i = 0; i < length; ++i) { + layout = layouts[i]; + if (!layout.running) { + me.callLayout(layout, methodName); + } + } + me.currentLayout = null; + } + }, + + + getCmp: function (cmp) { + return this.getItem(cmp, cmp.el); + }, + + + getEl: function (parent, el) { + var item = this.getItem(el, el); + + if (!item.parent) { + item.parent = parent; + + + + + if (parent.children.length) { + parent.children.push(item); + } else { + parent.children = [ item ]; + } + } + + return item; + }, + + getItem: function (target, el) { + var id = el.id, + items = this.items, + item = items[id] || + (items[id] = new Ext.layout.ContextItem({ + context: this, + target: target, + el: el + })); + + return item; + }, + + handleFailure: function () { + + + + var layouts = this.layouts, + layout, key; + + Ext.failedLayouts = (Ext.failedLayouts || 0) + 1; + + for (key in layouts) { + layout = layouts[key]; + + if (layouts.hasOwnProperty(key)) { + layout.running = false; + layout.ownerContext = null; + } + } + + }, + + + invalidate: function (components, full) { + var me = this, + isArray = !components.isComponent, + containerLayoutDone, + firstTime, i, comp, item, items, length, componentLayout, layout, + invalidateOptions, token; + + for (i = 0, length = isArray ? components.length : 1; i < length; ++i) { + comp = isArray ? components[i] : components; + + if (comp.rendered && !comp.hidden) { + item = me.getCmp(comp); + + + + + + + + componentLayout = comp.componentLayout; + firstTime = !componentLayout.ownerContext; + layout = (comp.isContainer && !comp.collapsed) ? comp.layout : null; + + + invalidateOptions = me.invalidateData[item.id]; + delete me.invalidateData[item.id]; + + + + + + + + token = item.init(full, invalidateOptions); + + if (invalidateOptions) { + me.processInvalidate(invalidateOptions, item, 'before'); + } + + + + + if (componentLayout.beforeLayoutCycle) { + componentLayout.beforeLayoutCycle(item); + } + + if (layout && layout.beforeLayoutCycle) { + + + + + layout.beforeLayoutCycle(item); + } + + + + token = item.initContinue(token); + + + + containerLayoutDone = true; + + + + + + if (componentLayout.getLayoutItems) { + componentLayout.renderChildren(); + + items = componentLayout.getLayoutItems(); + if (items.length) { + me.invalidate(items, true); + } + } + + if (layout) { + containerLayoutDone = false; + layout.renderChildren(); + + items = layout.getVisibleItems(); + if (items.length) { + me.invalidate(items, true); + } + } + + + + item.initDone(containerLayoutDone); + + + + me.resetLayout(componentLayout, item, firstTime); + if (layout) { + me.resetLayout(layout, item, firstTime); + } + + + + + item.initAnimation(); + + if (invalidateOptions) { + me.processInvalidate(invalidateOptions, item, 'after'); + } + } + } + + me.currentLayout = null; + }, + + layoutDone: function (layout) { + var ownerContext = layout.ownerContext; + + layout.running = false; + + + if (layout.isComponentLayout) { + if (ownerContext.measuresBox) { + ownerContext.onBoxMeasured(); + } + + ownerContext.setProp('done', true); + } else { + ownerContext.setProp('containerLayoutDone', true); + } + + --this.remainingLayouts; + ++this.progressCount; + }, + + newQueue: function () { + return new Ext.util.Queue(); + }, + + processInvalidate: function (options, item, name) { + + + if (options[name]) { + var me = this, + currentLayout = me.currentLayout; + + me.currentLayout = options.layout || null; + + options[name](item, options); + + me.currentLayout = currentLayout; + } + }, + + + queueAnimation: function (item) { + this.animateQueue.add(item); + }, + + + queueCompletion: function (layout) { + this.completionQueue.add(layout); + }, + + + queueFinalize: function (layout) { + this.finalizeQueue.add(layout); + }, + + + queueFlush: function (item) { + this.flushQueue.add(item); + }, + + chainFns: function (oldOptions, newOptions, funcName) { + var me = this, + oldLayout = oldOptions.layout, + newLayout = newOptions.layout, + oldFn = oldOptions[funcName], + newFn = newOptions[funcName]; + + + + return function (contextItem) { + var prev = me.currentLayout; + if (oldFn) { + me.currentLayout = oldLayout; + oldFn.call(oldOptions.scope || oldOptions, contextItem, oldOptions); + } + me.currentLayout = newLayout; + newFn.call(newOptions.scope || newOptions, contextItem, newOptions); + me.currentLayout = prev; + }; + }, + + + queueInvalidate: function (item, options) { + var me = this, + newQueue = [], + oldQueue = me.invalidQueue, + index = oldQueue.length, + comp, old, oldComp, oldOptions, oldState; + + if (item.isComponent) { + item = me.getCmp(comp = item); + } else { + comp = item.target; + } + + item.invalid = true; + + + + + while (index--) { + old = oldQueue[index]; + oldComp = old.item.target; + + if (comp.isDescendant(oldComp)) { + return; + } + + if (oldComp == comp) { + + if (!(oldOptions = old.options)) { + old.options = options; + } else if (options) { + if (options.widthModel) { + oldOptions.widthModel = options.widthModel; + } + if (options.heightModel) { + oldOptions.heightModel = options.heightModel; + } + if (!(oldState = oldOptions.state)) { + oldOptions.state = options.state; + } else if (options.state) { + Ext.apply(oldState, options.state); + } + + if (options.before) { + oldOptions.before = me.chainFns(oldOptions, options, 'before'); + } + if (options.after) { + oldOptions.after = me.chainFns(oldOptions, options, 'after'); + } + } + + + return; + } + + if (!oldComp.isDescendant(comp)) { + newQueue.push(old); + } + + } + + + + + newQueue.push({ item: item, options: options }); + + me.invalidQueue = newQueue; + }, + + queueItemLayouts: function (item) { + var comp = item.isComponent ? item : item.target, + layout = comp.componentLayout; + + if (!layout.pending && !layout.invalid && !layout.done) { + this.queueLayout(layout); + } + + layout = comp.layout; + if (layout && !layout.pending && !layout.invalid && !layout.done) { + this.queueLayout(layout); + } + }, + + + queueLayout: function (layout) { + this.layoutQueue.add(layout); + layout.pending = true; + }, + + + removeEl: function (parent, el) { + var id = el.id, + children = parent.children, + items = this.items; + + if(children) { + Ext.Array.remove(children, items[id]); + } + delete items[id]; + }, + + + resetLayout: function (layout, ownerContext, firstTime) { + var me = this; + + me.currentLayout = layout; + + layout.done = false; + layout.pending = true; + layout.firedTriggers = 0; + + me.layoutQueue.add(layout); + + if (firstTime) { + me.layouts[layout.id] = layout; + layout.running = true; + + if (layout.finishedLayout) { + me.finishQueue.add(layout); + } + + + + ++me.remainingLayouts; + ++layout.layoutCount; + + layout.ownerContext = ownerContext; + layout.beginCount = 0; + layout.blockCount = 0; + layout.calcCount = 0; + layout.triggerCount = 0; + + if (!layout.initialized) { + layout.initLayout(); + } + + layout.beginLayout(ownerContext); + } else { + ++layout.beginCount; + + if (!layout.running) { + + ++me.remainingLayouts; + layout.running = true; + + if (layout.isComponentLayout) { + + + + ownerContext.unsetProp('done'); + } + + + me.completionQueue.remove(layout); + me.finalizeQueue.remove(layout); + } + } + + layout.beginLayoutCycle(ownerContext, firstTime); + }, + + + run: function () { + var me = this, + flushed = false, + watchDog = 100; + + me.flushInvalidates(); + + me.state = 1; + me.totalCount = me.layoutQueue.getCount(); + + + + + + + + me.flush(); + + + while ((me.remainingLayouts || me.invalidQueue.length) && watchDog--) { + if (me.invalidQueue.length) { + me.flushInvalidates(); + } + + + if (me.runCycle()) { + flushed = false; + + } else if (!flushed) { + + + me.flush(); + flushed = true; + + me.flushLayouts('completionQueue', 'completeLayout'); + } else if (!me.invalidQueue.length) { + + me.state = 2; + break; + } + + if (!(me.remainingLayouts || me.invalidQueue.length)) { + me.flush(); + me.flushLayouts('completionQueue', 'completeLayout'); + me.flushLayouts('finalizeQueue', 'finalizeLayout'); + } + } + + return me.runComplete(); + }, + + runComplete: function () { + var me = this; + + me.state = 2; + + if (me.remainingLayouts) { + me.handleFailure(); + return false; + } + + me.flush(); + + + me.flushLayouts('finishQueue', 'finishedLayout', true); + + + me.flushLayouts('finishQueue', 'notifyOwner'); + + me.flush(); + + me.flushAnimations(); + + return true; + }, + + + runCycle: function () { + var me = this, + layouts = me.layoutQueue.clear(), + length = layouts.length, + i; + + ++me.cycleCount; + + + + me.progressCount = 0; + + for (i = 0; i < length; ++i) { + me.runLayout(me.currentLayout = layouts[i]); + } + + me.currentLayout = null; + + return me.progressCount > 0; + }, + + + runLayout: function (layout) { + var me = this, + ownerContext = me.getCmp(layout.owner); + + layout.pending = false; + + if (ownerContext.state.blocks) { + return; + } + + + + + + layout.done = true; + + ++layout.calcCount; + ++me.calcCount; + + layout.calculate(ownerContext); + + if (layout.done) { + me.layoutDone(layout); + + if (layout.completeLayout) { + me.queueCompletion(layout); + } + if (layout.finalizeLayout) { + me.queueFinalize(layout); + } + } else if (!layout.pending && !layout.invalid && !(layout.blockCount + layout.triggerCount - layout.firedTriggers)) { + + + me.queueLayout(layout); + } + }, + + + setItemSize: function(item, width, height) { + var items = item, + len = 1, + contextItem, i; + + + + + + + + if (item.isComposite) { + items = item.elements; + len = items.length; + item = items[0]; + } else if (!item.dom && !item.el) { + len = items.length; + item = items[0]; + } + + + for (i = 0; i < len; ) { + contextItem = this.get(item); + contextItem.setSize(width, height); + + item = items[++i]; + } + } +}); + +//@define Ext.layout.SizePolicy + + + + + + + + + + + + + +Ext.define('Ext.layout.component.Body', { + + + + alias: ['layout.body'], + + extend: Ext.layout.component.Auto , + + + + type: 'body', + + beginLayout: function (ownerContext) { + this.callParent(arguments); + + ownerContext.bodyContext = ownerContext.getEl('body'); + }, + + beginLayoutCycle: function(ownerContext, firstCycle){ + var me = this, + lastWidthModel = me.lastWidthModel, + lastHeightModel = me.lastHeightModel, + body = me.owner.body; + + me.callParent(arguments); + + if (lastWidthModel && lastWidthModel.fixed && ownerContext.widthModel.shrinkWrap) { + body.setWidth(null); + } + + if (lastHeightModel && lastHeightModel.fixed && ownerContext.heightModel.shrinkWrap) { + body.setHeight(null); + } + }, + + + + + + + + + calculateOwnerHeightFromContentHeight: function (ownerContext, contentHeight) { + var height = this.callParent(arguments); + + if (ownerContext.targetContext != ownerContext) { + height += ownerContext.getPaddingInfo().height; + } + + return height; + }, + + calculateOwnerWidthFromContentWidth: function (ownerContext, contentWidth) { + var width = this.callParent(arguments); + + if (ownerContext.targetContext != ownerContext) { + width += ownerContext.getPaddingInfo().width; + } + + return width; + }, + + measureContentWidth: function (ownerContext) { + return ownerContext.bodyContext.setWidth(ownerContext.bodyContext.el.dom.offsetWidth, false); + }, + + measureContentHeight: function (ownerContext) { + return ownerContext.bodyContext.setHeight(ownerContext.bodyContext.el.dom.offsetHeight, false); + }, + + publishInnerHeight: function (ownerContext, height) { + var innerHeight = height - ownerContext.getFrameInfo().height, + targetContext = ownerContext.targetContext; + + if (targetContext != ownerContext) { + innerHeight -= ownerContext.getPaddingInfo().height; + } + + + return ownerContext.bodyContext.setHeight(innerHeight, !ownerContext.heightModel.natural); + }, + + publishInnerWidth: function (ownerContext, width) { + var innerWidth = width - ownerContext.getFrameInfo().width, + targetContext = ownerContext.targetContext; + + if (targetContext != ownerContext) { + innerWidth -= ownerContext.getPaddingInfo().width; + } + + ownerContext.bodyContext.setWidth(innerWidth, !ownerContext.widthModel.natural); + } +}); + + +Ext.define('Ext.layout.component.FieldSet', { + extend: Ext.layout.component.Body , + alias: ['layout.fieldset'], + + type: 'fieldset', + + defaultCollapsedWidth: 100, + + beforeLayoutCycle: function (ownerContext) { + if (ownerContext.target.collapsed) { + ownerContext.heightModel = this.sizeModels.shrinkWrap; + } + }, + + beginLayoutCycle: function (ownerContext) { + var target = ownerContext.target, + lastSize; + + this.callParent(arguments); + + + + + if (target.collapsed) { + ownerContext.setContentHeight(0); + + + ownerContext.restoreMinHeight = target.minHeight; + delete target.minHeight; + + + + + if (ownerContext.widthModel.shrinkWrap) { + lastSize = target.lastComponentSize; + ownerContext.setContentWidth((lastSize && lastSize.contentWidth) || this.defaultCollapsedWidth); + } + } + }, + + finishedLayout: function(ownerContext) { + var owner = this.owner, + restore = ownerContext.restoreMinHeight; + + this.callParent(arguments); + if (restore) { + owner.minHeight = restore; + } + }, + + calculateOwnerHeightFromContentHeight: function (ownerContext, contentHeight) { + var border = ownerContext.getBorderInfo(), + legend = ownerContext.target.legend; + + + + return ownerContext.getProp('contentHeight') + + ownerContext.getPaddingInfo().height + + + ((Ext.isIEQuirks || Ext.isIE8m) ? + ownerContext.bodyContext.getPaddingInfo().top : 0) + + (legend ? legend.getHeight() : border.top) + + border.bottom; + }, + + publishInnerHeight: function (ownerContext, height) { + + + + var legend = ownerContext.target.legend; + if (legend) { + height -= legend.getHeight(); + } + this.callParent([ownerContext, height]); + }, + + getLayoutItems : function() { + var legend = this.owner.legend; + return legend ? [legend] : []; + } +}); + + +Ext.define('Ext.layout.component.field.Slider', { + + + + alias: ['layout.sliderfield'], + + extend: Ext.layout.component.field.Field , + + + + type: 'sliderfield', + + beginLayout: function(ownerContext) { + this.callParent(arguments); + + ownerContext.endElContext = ownerContext.getEl('endEl'); + ownerContext.innerElContext = ownerContext.getEl('innerEl'); + ownerContext.bodyElContext = ownerContext.getEl('bodyEl'); + }, + + publishInnerHeight: function (ownerContext, height) { + var innerHeight = height - this.measureLabelErrorHeight(ownerContext), + endElPad, + inputPad; + if (this.owner.vertical) { + endElPad = ownerContext.endElContext.getPaddingInfo(); + inputPad = ownerContext.inputContext.getPaddingInfo(); + ownerContext.innerElContext.setHeight(innerHeight - inputPad.height - endElPad.height); + } else { + ownerContext.bodyElContext.setHeight(innerHeight); + } + }, + + publishInnerWidth: function (ownerContext, width) { + if (!this.owner.vertical) { + var endElPad = ownerContext.endElContext.getPaddingInfo(), + inputPad = ownerContext.inputContext.getPaddingInfo(); + + ownerContext.innerElContext.setWidth(width - inputPad.left - endElPad.right - ownerContext.labelContext.getProp('width')); + } + }, + + beginLayoutFixed: function(ownerContext, width, suffix) { + var me = this, + ieInputWidthAdjustment = me.ieInputWidthAdjustment; + + if (ieInputWidthAdjustment) { + + + me.owner.bodyEl.setStyle('padding-right', ieInputWidthAdjustment + 'px'); + } + + me.callParent(arguments); + } +}); + + +Ext.define('Ext.layout.container.Absolute', { + + + + alias: 'layout.absolute', + extend: Ext.layout.container.Anchor , + alternateClassName: 'Ext.layout.AbsoluteLayout', + + + + targetCls: Ext.baseCSSPrefix + 'abs-layout-ct', + itemCls: Ext.baseCSSPrefix + 'abs-layout-item', + + + ignoreOnContentChange: true, + + type: 'absolute', + + + adjustWidthAnchor: function(value, childContext) { + var padding = this.targetPadding, + x = childContext.getStyle('left'); + + return value - x + padding.left; + }, + + + adjustHeightAnchor: function(value, childContext) { + var padding = this.targetPadding, + y = childContext.getStyle('top'); + + return value - y + padding.top; + }, + + isItemLayoutRoot: function (item) { + return this.ignoreOnContentChange || this.callParent(arguments); + }, + + isItemShrinkWrap: function (item) { + return true; + }, + + beginLayout: function (ownerContext) { + var me = this, + target = me.getTarget(); + + me.callParent(arguments); + + + if (target.dom !== document.body) { + target.position(); + } + + me.targetPadding = ownerContext.targetContext.getPaddingInfo(); + }, + + isItemBoxParent: function (itemContext) { + return true; + }, + + onContentChange: function () { + if (this.ignoreOnContentChange) { + return false; + } + return this.callParent(arguments); + }, + + calculateContentSize: function (ownerContext, dimensions) { + var me = this, + containerDimensions = (dimensions || 0) | + ((ownerContext.widthModel.shrinkWrap ? 1 : 0) | + (ownerContext.heightModel.shrinkWrap ? 2 : 0)), + calcWidth = (containerDimensions & 1) || undefined, + calcHeight = (containerDimensions & 2) || undefined, + childItems = ownerContext.childItems, + length = childItems.length, + contentHeight = 0, + contentWidth = 0, + needed = 0, + props = ownerContext.props, + targetPadding, child, childContext, height, i, margins, width; + + if (calcWidth) { + if (isNaN(props.contentWidth)) { + ++needed; + } else { + calcWidth = undefined; + } + } + if (calcHeight) { + if (isNaN(props.contentHeight)) { + ++needed; + } else { + calcHeight = undefined; + } + } + + if (needed) { + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + child = childContext.target; + height = calcHeight && childContext.getProp('height'); + width = calcWidth && childContext.getProp('width'); + margins = childContext.getMarginInfo(); + + height += margins.bottom; + width += margins.right; + + contentHeight = Math.max(contentHeight, (child.y || 0) + height); + contentWidth = Math.max(contentWidth, (child.x || 0) + width); + + if (isNaN(contentHeight) && isNaN(contentWidth)) { + me.done = false; + return; + } + } + + if (calcWidth || calcHeight) { + targetPadding = ownerContext.targetContext.getPaddingInfo(); + } + if (calcWidth && !ownerContext.setContentWidth(contentWidth + targetPadding.width)) { + me.done = false; + } + if (calcHeight && !ownerContext.setContentHeight(contentHeight + targetPadding.height)) { + me.done = false; + } + + + } + } +}); + + +Ext.define('Ext.layout.container.Accordion', { + extend: Ext.layout.container.VBox , + alias: ['layout.accordion'], + alternateClassName: 'Ext.layout.AccordionLayout', + + targetCls: Ext.baseCSSPrefix + 'accordion-layout-ct', + itemCls: [Ext.baseCSSPrefix + 'box-item', Ext.baseCSSPrefix + 'accordion-item'], + + align: 'stretch', + + + fill : true, + + + + + titleCollapse : true, + + + hideCollapseTool : false, + + + collapseFirst : undefined, + + + animate : true, + + activeOnTop : false, + + multi: false, + + defaultAnimatePolicy: { + y: true, + height: true + }, + + constructor: function() { + var me = this; + + me.callParent(arguments); + + if (!me.multi && me.animate) { + me.animatePolicy = Ext.apply({}, me.defaultAnimatePolicy); + } else { + me.animatePolicy = null; + } + }, + + beforeRenderItems: function (items) { + var me = this, + ln = items.length, + i = 0, + owner = me.owner, + collapseFirst = me.collapseFirst, + hasCollapseFirst = Ext.isDefined(collapseFirst), + expandedItem = me.getExpanded(true)[0], + multi = me.multi, + comp; + + for (; i < ln; i++) { + comp = items[i]; + if (!comp.rendered) { + + if (!multi || comp.collapsible !== false) { + comp.collapsible = true; + } + + if (comp.collapsible) { + if (hasCollapseFirst) { + comp.collapseFirst = collapseFirst; + } + if (me.hideCollapseTool) { + comp.hideCollapseTool = me.hideCollapseTool; + comp.titleCollapse = true; + } else if (me.titleCollapse && comp.titleCollapse === undefined) { + + + comp.titleCollapse = me.titleCollapse; + } + } + + delete comp.hideHeader; + delete comp.width; + comp.title = comp.title || ' '; + comp.addBodyCls(Ext.baseCSSPrefix + 'accordion-body'); + + + + + if (!multi) { + if (expandedItem) { + comp.collapsed = expandedItem !== comp; + } else if (comp.hasOwnProperty('collapsed') && comp.collapsed === false) { + expandedItem = comp; + } else { + comp.collapsed = true; + } + + + owner.mon(comp, { + show: me.onComponentShow, + beforeexpand: me.onComponentExpand, + beforecollapse: me.onComponentCollapse, + scope: me + }); + } + + + owner.mon(comp, 'beforecollapse', me.onComponentCollapse, me); + comp.headerOverCls = Ext.baseCSSPrefix + 'accordion-hd-over'; + } + } + + + if (!multi) { + if (!expandedItem) { + if (ln) { + items[0].collapsed = false; + } + } else if (me.activeOnTop) { + expandedItem.collapsed = false; + me.configureItem(expandedItem); + if (owner.items.indexOf(expandedItem) > 0) { + owner.insert(0, expandedItem); + } + } + } + }, + + getItemsRenderTree: function(items) { + this.beforeRenderItems(items); + return this.callParent(arguments); + }, + + renderItems : function(items, target) { + this.beforeRenderItems(items); + + this.callParent(arguments); + }, + + configureItem: function(item) { + this.callParent(arguments); + + + + item.animCollapse = item.border = false; + + + if (this.fill) { + item.flex = 1; + } + }, + + beginLayout: function (ownerContext) { + this.callParent(arguments); + this.updatePanelClasses(ownerContext); + }, + + updatePanelClasses: function(ownerContext) { + var children = ownerContext.visibleItems, + ln = children.length, + siblingCollapsed = true, + i, child, header; + + for (i = 0; i < ln; i++) { + child = children[i]; + header = child.header; + header.addCls(Ext.baseCSSPrefix + 'accordion-hd'); + + if (siblingCollapsed) { + header.removeCls(Ext.baseCSSPrefix + 'accordion-hd-sibling-expanded'); + } else { + header.addCls(Ext.baseCSSPrefix + 'accordion-hd-sibling-expanded'); + } + + if (i + 1 == ln && child.collapsed) { + header.addCls(Ext.baseCSSPrefix + 'accordion-hd-last-collapsed'); + } else { + header.removeCls(Ext.baseCSSPrefix + 'accordion-hd-last-collapsed'); + } + + siblingCollapsed = child.collapsed; + } + }, + + + + + onComponentExpand: function(toExpand) { + var me = this, + owner = me.owner, + multi = me.multi, + animate = me.animate, + moveToTop = !multi && !me.animate && me.activeOnTop, + expanded, + expandedCount, i, + previousValue; + + if (!me.processing) { + me.processing = true; + previousValue = owner.deferLayouts; + owner.deferLayouts = true; + expanded = multi ? [] : me.getExpanded(); + expandedCount = expanded.length; + + + for (i = 0; i < expandedCount; i++) { + expanded[i].collapse(); + } + + if (moveToTop) { + + Ext.suspendLayouts(); + owner.insert(0, toExpand); + Ext.resumeLayouts(); + } + + owner.deferLayouts = previousValue; + me.processing = false; + } + }, + + onComponentCollapse: function(comp) { + var me = this, + owner = me.owner, + toExpand, + expanded, + previousValue; + + if (me.owner.items.getCount() === 1) { + + return false; + } + + if (!me.processing) { + me.processing = true; + previousValue = owner.deferLayouts; + owner.deferLayouts = true; + toExpand = comp.next() || comp.prev(); + + + + if (me.multi) { + expanded = me.getExpanded(); + + + + if (expanded.length === 1) { + toExpand.expand(); + } + + } else if (toExpand) { + toExpand.expand(); + } + owner.deferLayouts = previousValue; + me.processing = false; + } + }, + + onComponentShow: function(comp) { + + this.onComponentExpand(comp); + }, + + getExpanded: function(explicitCheck){ + var items = this.owner.items.items, + len = items.length, + i = 0, + out = [], + add, + item; + + for (; i < len; ++i) { + item = items[i]; + if (explicitCheck) { + add = item.hasOwnProperty('collapsed') && item.collapsed === false; + } else { + add = !item.collapsed; + } + if (add) { + out.push(item); + } + } + return out; + + } +}); + + +Ext.define('Ext.resizer.Splitter', { + extend: Ext.Component , + + + alias: 'widget.splitter', + + childEls: [ + 'collapseEl' + ], + + renderTpl: [ + '', + '
     ', + '
    ', + '
    ' + ], + + baseCls: Ext.baseCSSPrefix + 'splitter', + collapsedClsInternal: Ext.baseCSSPrefix + 'splitter-collapsed', + + + canResize: true, + + + collapsible: false, + + + + + collapseOnDblClick: true, + + + defaultSplitMin: 40, + + + defaultSplitMax: 1000, + + + + + collapseTarget: 'next', + + + + horizontal: false, + vertical: false, + + + size: 5, + + + getTrackerConfig: function () { + return { + xclass: 'Ext.resizer.SplitterTracker', + el: this.el, + splitter: this + }; + }, + + beforeRender: function() { + var me = this, + target = me.getCollapseTarget(), + collapseDir = me.getCollapseDirection(), + vertical = me.vertical, + fixedSizeProp = vertical ? 'width' : 'height', + stretchSizeProp = vertical ? 'height' : 'width', + cls; + + me.callParent(); + + if (!me.hasOwnProperty(stretchSizeProp)) { + me[stretchSizeProp] = '100%'; + } + if (!me.hasOwnProperty(fixedSizeProp)) { + me[fixedSizeProp] = me.size; + } + + if (target.collapsed) { + me.addCls(me.collapsedClsInternal); + } + + cls = me.baseCls + '-' + me.orientation; + me.addCls(cls); + if (!me.canResize) { + me.addCls(cls + '-noresize'); + } + + Ext.applyIf(me.renderData, { + collapseDir: collapseDir, + collapsible: me.collapsible || target.collapsible + }); + + me.protoEl.unselectable(); + }, + + onRender: function() { + var me = this; + + me.callParent(arguments); + + + if (me.performCollapse !== false) { + if (me.renderData.collapsible) { + me.mon(me.collapseEl, 'click', me.toggleTargetCmp, me); + } + if (me.collapseOnDblClick) { + me.mon(me.el, 'dblclick', me.toggleTargetCmp, me); + } + } + + + me.mon(me.getCollapseTarget(), { + collapse: me.onTargetCollapse, + expand: me.onTargetExpand, + beforeexpand: me.onBeforeTargetExpand, + beforecollapse: me.onBeforeTargetCollapse, + scope: me + }); + + if (me.canResize) { + me.tracker = Ext.create(me.getTrackerConfig()); + + me.relayEvents(me.tracker, [ 'beforedragstart', 'dragstart', 'dragend' ]); + } + }, + + getCollapseDirection: function() { + var me = this, + dir = me.collapseDirection, + collapseTarget, idx, items, type; + + if (!dir) { + collapseTarget = me.collapseTarget; + if (collapseTarget.isComponent) { + dir = collapseTarget.collapseDirection; + } + + if (!dir) { + + + + + + + + type = me.ownerCt.layout.type; + if (collapseTarget.isComponent) { + items = me.ownerCt.items; + idx = Number(items.indexOf(collapseTarget) == items.indexOf(me) - 1) << 1 | Number(type == 'hbox'); + } else { + idx = Number(me.collapseTarget == 'prev') << 1 | Number(type == 'hbox'); + } + + + dir = ['bottom', 'right', 'top', 'left'][idx]; + } + + me.collapseDirection = dir; + } + + me.orientation = (dir == 'top' || dir == 'bottom') ? 'horizontal' : 'vertical'; + me[me.orientation] = true; + + return dir; + }, + + getCollapseTarget: function() { + var me = this; + + return me.collapseTarget.isComponent ? me.collapseTarget : me.collapseTarget == 'prev' ? me.previousSibling() : me.nextSibling(); + }, + + setCollapseEl: function(display){ + var el = this.collapseEl; + if (el) { + el.setDisplayed(display); + } + }, + + onBeforeTargetExpand: function(target) { + this.setCollapseEl('none'); + }, + + onBeforeTargetCollapse: function(){ + this.setCollapseEl('none'); + }, + + onTargetCollapse: function(target) { + this.el.addCls([this.collapsedClsInternal, this.collapsedCls]); + this.setCollapseEl(''); + }, + + onTargetExpand: function(target) { + this.el.removeCls([this.collapsedClsInternal, this.collapsedCls]); + this.setCollapseEl(''); + }, + + toggleTargetCmp: function(e, t) { + var cmp = this.getCollapseTarget(), + placeholder = cmp.placeholder, + toggle; + + + if (Ext.isFunction(cmp.expand) && Ext.isFunction(cmp.collapse)) { + if (placeholder && !placeholder.hidden) { + toggle = true; + } else { + toggle = !cmp.hidden; + } + + if (toggle) { + if (cmp.collapsed) { + cmp.expand(); + } else if (cmp.collapseDirection) { + cmp.collapse(); + } else { + cmp.collapse(this.renderData.collapseDir); + } + } + } + }, + + + setSize: function() { + var me = this; + me.callParent(arguments); + if (Ext.isIE && me.el) { + me.el.repaint(); + } + }, + + beforeDestroy: function(){ + Ext.destroy(this.tracker); + this.callParent(); + } +}); + + +Ext.define('Ext.resizer.BorderSplitter', { + extend: Ext.resizer.Splitter , + + + + alias: 'widget.bordersplitter', + + + collapseTarget: null, + + getTrackerConfig: function () { + var trackerConfig = this.callParent(); + + trackerConfig.xclass = 'Ext.resizer.BorderSplitterTracker'; + + return trackerConfig; + } +}); + + +Ext.define('Ext.layout.container.Border', { + + alias: 'layout.border', + + extend: Ext.layout.container.Container , + + + + alternateClassName: 'Ext.layout.BorderLayout', + + + targetCls: Ext.baseCSSPrefix + 'border-layout-ct', + + itemCls: [Ext.baseCSSPrefix + 'border-item', Ext.baseCSSPrefix + 'box-item'], + + type: 'border', + + + + + + + padding: undefined, + + percentageRe: /(\d+)%/, + + + axisProps: { + horz: { + borderBegin: 'west', + borderEnd: 'east', + horizontal: true, + posProp: 'x', + sizeProp: 'width', + sizePropCap: 'Width' + }, + vert: { + borderBegin: 'north', + borderEnd: 'south', + horizontal: false, + posProp: 'y', + sizeProp: 'height', + sizePropCap: 'Height' + } + }, + + + centerRegion: null, + + + collapseDirections: { + north: 'top', + south: 'bottom', + east: 'right', + west: 'left' + }, + + manageMargins: true, + + panelCollapseAnimate: true, + + panelCollapseMode: 'placeholder', + + + regionWeights: { + north: 20, + south: 10, + center: 0, + west: -10, + east: -20 + }, + + + + + + beginAxis: function (ownerContext, regions, name) { + var me = this, + props = me.axisProps[name], + isVert = !props.horizontal, + sizeProp = props.sizeProp, + totalFlex = 0, + childItems = ownerContext.childItems, + length = childItems.length, + center, i, childContext, centerFlex, comp, region, match, size, type, target, placeholder; + + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + comp = childContext.target; + + childContext.layoutPos = {}; + + if (comp.region) { + childContext.region = region = comp.region; + + childContext.isCenter = comp.isCenter; + childContext.isHorz = comp.isHorz; + childContext.isVert = comp.isVert; + + childContext.weight = comp.weight || me.regionWeights[region] || 0; + regions[comp.id] = childContext; + + if (comp.isCenter) { + center = childContext; + centerFlex = comp.flex; + ownerContext.centerRegion = center; + + continue; + } + + if (isVert !== childContext.isVert) { + continue; + } + + + + childContext.reverseWeighting = (region == props.borderEnd); + + size = comp[sizeProp]; + type = typeof size; + + if (!comp.collapsed) { + if (type == 'string' && (match = me.percentageRe.exec(size))) { + childContext.percentage = parseInt(match[1], 10); + } else if (comp.flex) { + totalFlex += childContext.flex = comp.flex; + } + } + } + } + + + if (center) { + target = center.target; + + if ((placeholder = target.placeholderFor)) { + if (!centerFlex && isVert === placeholder.collapsedVertical()) { + + centerFlex = 0; + center.collapseAxis = name; + } + } else if (target.collapsed && (isVert === target.collapsedVertical())) { + + centerFlex = 0; + center.collapseAxis = name; + } + } + + if (centerFlex == null) { + + centerFlex = 1; + } + + totalFlex += centerFlex; + + return Ext.apply({ + before : isVert ? 'top' : 'left', + totalFlex : totalFlex + }, props); + }, + + beginLayout: function (ownerContext) { + var me = this, + items = me.getLayoutItems(), + pad = me.padding, + type = typeof pad, + padOnContainer = false, + childContext, item, length, i, regions, collapseTarget, + doShow, hidden, region; + + + if (pad) { + if (type == 'string' || type == 'number') { + pad = Ext.util.Format.parseBox(pad); + } + } else { + pad = ownerContext.getEl('getTargetEl').getPaddingInfo(); + padOnContainer = true; + } + ownerContext.outerPad = pad; + ownerContext.padOnContainer = padOnContainer; + + for (i = 0, length = items.length; i < length; ++i) { + item = items[i]; + collapseTarget = me.getSplitterTarget(item); + if (collapseTarget) { + doShow = undefined; + hidden = !!item.hidden; + if (!collapseTarget.split) { + if (collapseTarget.isCollapsingOrExpanding) { + doShow = !!collapseTarget.collapsed; + } + } else if (hidden !== collapseTarget.hidden) { + doShow = !collapseTarget.hidden; + } + + if (doShow === true) { + item.show(); + } else if (doShow === false) { + item.hide(); + } + } + } + + + + + me.callParent(arguments); + + items = ownerContext.childItems; + length = items.length; + regions = {}; + + ownerContext.borderAxisHorz = me.beginAxis(ownerContext, regions, 'horz'); + ownerContext.borderAxisVert = me.beginAxis(ownerContext, regions, 'vert'); + + + + + for (i = 0; i < length; ++i) { + childContext = items[i]; + collapseTarget = me.getSplitterTarget(childContext.target); + + if (collapseTarget) { + region = regions[collapseTarget.id] + if (!region) { + + + + region = ownerContext.getEl(collapseTarget.el, me); + region.region = collapseTarget.region; + } + childContext.collapseTarget = collapseTarget = region; + childContext.weight = collapseTarget.weight; + childContext.reverseWeighting = collapseTarget.reverseWeighting; + collapseTarget.splitter = childContext; + childContext.isHorz = collapseTarget.isHorz; + childContext.isVert = collapseTarget.isVert; + } + } + + + me.sortWeightedItems(items, 'reverseWeighting'); + me.setupSplitterNeighbors(items); + }, + + calculate: function (ownerContext) { + var me = this, + containerSize = me.getContainerSize(ownerContext), + childItems = ownerContext.childItems, + length = childItems.length, + horz = ownerContext.borderAxisHorz, + vert = ownerContext.borderAxisVert, + pad = ownerContext.outerPad, + padOnContainer = ownerContext.padOnContainer, + i, childContext, childMargins, size, horzPercentTotal, vertPercentTotal; + + horz.begin = pad.left; + vert.begin = pad.top; + + + horzPercentTotal = horz.end = horz.flexSpace = containerSize.width + (padOnContainer ? pad.left : -pad.right); + vertPercentTotal = vert.end = vert.flexSpace = containerSize.height + (padOnContainer ? pad.top : -pad.bottom); + + + + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + childMargins = childContext.getMarginInfo(); + + + if (childContext.isHorz || childContext.isCenter) { + horz.addUnflexed(childMargins.width); + horzPercentTotal -= childMargins.width; + } + + if (childContext.isVert || childContext.isCenter) { + vert.addUnflexed(childMargins.height); + vertPercentTotal -= childMargins.height; + } + + + if (!childContext.flex && !childContext.percentage) { + if (childContext.isHorz || (childContext.isCenter && childContext.collapseAxis === 'horz')) { + size = childContext.getProp('width'); + + horz.addUnflexed(size); + + + if (childContext.collapseTarget) { + horzPercentTotal -= size; + } + } else if (childContext.isVert || (childContext.isCenter && childContext.collapseAxis === 'vert')) { + size = childContext.getProp('height'); + + vert.addUnflexed(size); + + + if (childContext.collapseTarget) { + vertPercentTotal -= size; + } + } + + } + } + + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + childMargins = childContext.getMarginInfo(); + + + if (childContext.percentage) { + if (childContext.isHorz) { + size = Math.ceil(horzPercentTotal * childContext.percentage / 100); + size = childContext.setWidth(size); + horz.addUnflexed(size); + } else if (childContext.isVert) { + size = Math.ceil(vertPercentTotal * childContext.percentage / 100); + size = childContext.setHeight(size); + vert.addUnflexed(size); + } + + } + } + + + + + + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + + if (!childContext.isCenter) { + me.calculateChildAxis(childContext, horz); + me.calculateChildAxis(childContext, vert); + } + } + + + + + if (me.finishAxis(ownerContext, vert) + me.finishAxis(ownerContext, horz) < 2) { + me.done = false; + } else { + + + + me.finishPositions(childItems); + } + }, + + + calculateChildAxis: function (childContext, axis) { + var collapseTarget = childContext.collapseTarget, + setSizeMethod = 'set' + axis.sizePropCap, + sizeProp = axis.sizeProp, + childMarginSize = childContext.getMarginInfo()[sizeProp], + region, isBegin, flex, pos, size; + + if (collapseTarget) { + region = collapseTarget.region; + } else { + region = childContext.region; + flex = childContext.flex; + } + + isBegin = region == axis.borderBegin; + + if (!isBegin && region != axis.borderEnd) { + + + childContext[setSizeMethod](axis.end - axis.begin - childMarginSize); + pos = axis.begin; + } else { + if (flex) { + size = Math.ceil(axis.flexSpace * (flex / axis.totalFlex)); + size = childContext[setSizeMethod](size); + } else if (childContext.percentage) { + + size = childContext.peek(sizeProp); + } else { + size = childContext.getProp(sizeProp); + } + + size += childMarginSize; + + if (isBegin) { + pos = axis.begin; + axis.begin += size; + } else { + axis.end = pos = axis.end - size; + } + } + + childContext.layoutPos[axis.posProp] = pos; + }, + + + finishAxis: function (ownerContext, axis) { + var size = axis.end - axis.begin, + center = ownerContext.centerRegion; + + if (center) { + center['set' + axis.sizePropCap](size - center.getMarginInfo()[axis.sizeProp]); + center.layoutPos[axis.posProp] = axis.begin; + } + + return Ext.isNumber(size) ? 1 : 0; + }, + + + finishPositions: function (childItems) { + var length = childItems.length, + index, childContext; + + for (index = 0; index < length; ++index) { + childContext = childItems[index]; + + childContext.setProp('x', childContext.layoutPos.x + childContext.marginInfo.left); + childContext.setProp('y', childContext.layoutPos.y + childContext.marginInfo.top); + } + }, + + getLayoutItems: function() { + var owner = this.owner, + ownerItems = (owner && owner.items && owner.items.items) || [], + length = ownerItems.length, + items = [], + i = 0, + ownerItem, placeholderFor; + + for (; i < length; i++) { + ownerItem = ownerItems[i]; + placeholderFor = ownerItem.placeholderFor; + + + + + + + + + + + + + + + + + + + + + + if (ownerItem.hidden || ((!ownerItem.floated || ownerItem.isCollapsingOrExpanding === 2) && + !(placeholderFor && placeholderFor.isCollapsingOrExpanding === 2))) { + items.push(ownerItem); + } + } + + return items; + }, + + getPlaceholder: function (comp) { + return comp.getPlaceholder && comp.getPlaceholder(); + }, + + getSplitterTarget: function (splitter) { + var collapseTarget = splitter.collapseTarget; + + if (collapseTarget && collapseTarget.collapsed) { + return collapseTarget.placeholder || collapseTarget; + } + + return collapseTarget; + }, + + isItemBoxParent: function (itemContext) { + return true; + }, + + isItemShrinkWrap: function (item) { + return true; + }, + + + + + + insertSplitter: function (item, index, hidden) { + var region = item.region, + splitter = { + xtype: 'bordersplitter', + collapseTarget: item, + id: item.id + '-splitter', + hidden: hidden, + canResize: item.splitterResize !== false + }, + at = index + ((region == 'south' || region == 'east') ? 0 : 1); + + + if (item.isHorz) { + splitter.height = null; + } else { + splitter.width = null; + } + + if (item.collapseMode == 'mini') { + splitter.collapsedCls = item.collapsedCls; + } + + item.splitter = this.owner.add(at, splitter); + }, + + + onAdd: function (item, index) { + var me = this, + placeholderFor = item.placeholderFor, + region = item.region, + split, + hidden; + + me.callParent(arguments); + + if (region) { + Ext.apply(item, me.regionFlags[region]); + + if (region == 'center') { + me.centerRegion = item; + } else { + item.collapseDirection = this.collapseDirections[region]; + split = item.split; + hidden = !!item.hidden; + if ((item.isHorz || item.isVert) && (split || item.collapseMode == 'mini')) { + me.insertSplitter(item, index, hidden || !split); + } + } + + if (!item.hasOwnProperty('collapseMode')) { + item.collapseMode = me.panelCollapseMode; + } + + if (!item.hasOwnProperty('animCollapse')) { + if (item.collapseMode != 'placeholder') { + + + item.animCollapse = false; + } else { + item.animCollapse = me.panelCollapseAnimate; + } + } + } else if (placeholderFor) { + Ext.apply(item, me.regionFlags[placeholderFor.region]); + item.region = placeholderFor.region; + item.weight = placeholderFor.weight; + } + }, + + onDestroy: function() { + this.centerRegion = null; + this.callParent(); + }, + + onRemove: function (item) { + var me = this, + region = item.region, + splitter = item.splitter; + + if (region) { + if (item.isCenter) { + me.centerRegion = null; + } + + delete item.isCenter; + delete item.isHorz; + delete item.isVert; + + if (splitter) { + me.owner.doRemove(splitter, true); + delete item.splitter; + } + } + + me.callParent(arguments); + }, + + + + + regionFlags: { + center: { isCenter: true, isHorz: false, isVert: false }, + + north: { isCenter: false, isHorz: false, isVert: true }, + south: { isCenter: false, isHorz: false, isVert: true }, + + west: { isCenter: false, isHorz: true, isVert: false }, + east: { isCenter: false, isHorz: true, isVert: false } + }, + + setupSplitterNeighbors: function (items) { + var edgeRegions = { + + + + + }, + length = items.length, + touchedRegions = this.touchedRegions, + i, j, center, count, edge, comp, region, splitter, touched; + + for (i = 0; i < length; ++i) { + comp = items[i].target; + region = comp.region; + + if (comp.isCenter) { + center = comp; + } else if (region) { + touched = touchedRegions[region]; + + for (j = 0, count = touched.length; j < count; ++j) { + edge = edgeRegions[touched[j]]; + if (edge) { + edge.neighbors.push(comp); + } + } + + if (comp.placeholderFor) { + + splitter = comp.placeholderFor.splitter; + } else { + splitter = comp.splitter; + } + if (splitter) { + splitter.neighbors = []; + } + + edgeRegions[region] = splitter; + } + } + + if (center) { + touched = touchedRegions.center; + + for (j = 0, count = touched.length; j < count; ++j) { + edge = edgeRegions[touched[j]]; + if (edge) { + edge.neighbors.push(center); + } + } + } + }, + + + touchedRegions: { + center: [ 'north', 'south', 'east', 'west' ], + + north: [ 'north', 'east', 'west' ], + south: [ 'south', 'east', 'west' ], + east: [ 'east', 'north', 'south' ], + west: [ 'west', 'north', 'south' ] + }, + + sizePolicies: { + vert: { + readsWidth: 0, + readsHeight: 1, + setsWidth: 1, + setsHeight: 0 + }, + horz: { + readsWidth: 1, + readsHeight: 0, + setsWidth: 0, + setsHeight: 1 + }, + flexAll: { + readsWidth: 0, + readsHeight: 0, + setsWidth: 1, + setsHeight: 1 + } + }, + + getItemSizePolicy: function (item) { + var me = this, + policies = this.sizePolicies, + collapseTarget, size, policy, placeholderFor; + + if (item.isCenter) { + placeholderFor = item.placeholderFor; + + if (placeholderFor) { + if (placeholderFor.collapsedVertical()) { + return policies.vert; + } + return policies.horz; + } + if (item.collapsed) { + if (item.collapsedVertical()) { + return policies.vert; + } + return policies.horz; + } + return policies.flexAll; + } + + collapseTarget = item.collapseTarget; + + if (collapseTarget) { + return collapseTarget.isVert ? policies.vert : policies.horz; + } + + if (item.region) { + if (item.isVert) { + size = item.height; + policy = policies.vert; + } else { + size = item.width; + policy = policies.horz; + } + + if (item.flex || (typeof size == 'string' && me.percentageRe.test(size))) { + return policies.flexAll; + } + + return policy; + } + + return me.autoSizePolicy; + } +}, function () { + var methods = { + addUnflexed: function (px) { + this.flexSpace = Math.max(this.flexSpace - px, 0); + } + }, + props = this.prototype.axisProps; + + Ext.apply(props.horz, methods); + Ext.apply(props.vert, methods); +}); + + +Ext.define('Ext.layout.container.Card', { + + + + extend: Ext.layout.container.Fit , + + alternateClassName: 'Ext.layout.CardLayout', + + alias: 'layout.card', + + + + type: 'card', + + hideInactive: true, + + + deferredRender : false, + + getRenderTree: function () { + var me = this, + activeItem = me.getActiveItem(); + + if (activeItem) { + + + if (activeItem.hasListeners.beforeactivate && activeItem.fireEvent('beforeactivate', activeItem) === false) { + + + + + activeItem = me.activeItem = me.owner.activeItem = null; + } + + + else if (activeItem.hasListeners.activate) { + activeItem.on({ + boxready: function() { + activeItem.fireEvent('activate', activeItem); + }, + single: true + }); + } + + if (me.deferredRender) { + if (activeItem) { + return me.getItemsRenderTree([activeItem]); + } + } else { + return me.callParent(arguments); + } + } + }, + + renderChildren: function () { + var me = this, + active = me.getActiveItem(); + + if (!me.deferredRender) { + me.callParent(); + } else if (active) { + + me.renderItems([active], me.getRenderTarget()); + } + }, + + isValidParent : function(item, target, position) { + + + var itemEl = item.el ? item.el.dom : Ext.getDom(item); + return (itemEl && itemEl.parentNode === (target.dom || target)) || false; + }, + + + getActiveItem: function() { + var me = this, + + result = me.parseActiveItem(me.activeItem || (me.owner && me.owner.activeItem)); + + + if (result && me.owner.items.indexOf(result) != -1) { + me.activeItem = result; + } else { + me.activeItem = null; + } + + return me.activeItem; + }, + + + parseActiveItem: function(item) { + if (item && item.isComponent) { + return item; + } else if (typeof item == 'number' || item === undefined) { + return this.getLayoutItems()[item || 0]; + } else { + return this.owner.getComponent(item); + } + }, + + + + configureItem: function(item) { + if (item === this.getActiveItem()) { + item.hidden = false; + } else { + item.hidden = true; + } + this.callParent(arguments); + }, + + onRemove: function(component) { + var me = this; + + if (component === me.activeItem) { + me.activeItem = null; + } + }, + + + getAnimation: function(newCard, owner) { + var newAnim = (newCard || {}).cardSwitchAnimation; + if (newAnim === false) { + return false; + } + return newAnim || owner.cardSwitchAnimation; + }, + + + getNext: function() { + var wrap = arguments[0], + items = this.getLayoutItems(), + index = Ext.Array.indexOf(items, this.activeItem); + + return items[index + 1] || (wrap ? items[0] : false); + }, + + + next: function() { + var anim = arguments[0], + wrap = arguments[1]; + return this.setActiveItem(this.getNext(wrap), anim); + }, + + + getPrev: function() { + var wrap = arguments[0], + items = this.getLayoutItems(), + index = Ext.Array.indexOf(items, this.activeItem); + + return items[index - 1] || (wrap ? items[items.length - 1] : false); + }, + + + prev: function() { + var anim = arguments[0], + wrap = arguments[1]; + return this.setActiveItem(this.getPrev(wrap), anim); + }, + + + setActiveItem: function(newCard) { + var me = this, + owner = me.owner, + oldCard = me.activeItem, + rendered = owner.rendered, + newIndex; + + newCard = me.parseActiveItem(newCard); + newIndex = owner.items.indexOf(newCard); + + + + if (newIndex == -1) { + newIndex = owner.items.items.length; + Ext.suspendLayouts(); + newCard = owner.add(newCard); + Ext.resumeLayouts(); + } + + + if (newCard && oldCard != newCard) { + + if (newCard.fireEvent('beforeactivate', newCard, oldCard) === false) { + return false; + } + if (oldCard && oldCard.fireEvent('beforedeactivate', oldCard, newCard) === false) { + return false; + } + + if (rendered) { + Ext.suspendLayouts(); + + + if (!newCard.rendered) { + me.renderItem(newCard, me.getRenderTarget(), owner.items.length); + } + + if (oldCard) { + if (me.hideInactive) { + oldCard.hide(); + oldCard.hiddenByLayout = true; + } + oldCard.fireEvent('deactivate', oldCard, newCard); + } + + if (newCard.hidden) { + newCard.show(); + } + + + if (!newCard.hidden) { + me.activeItem = newCard; + } + Ext.resumeLayouts(true); + } else { + me.activeItem = newCard; + } + + newCard.fireEvent('activate', newCard, oldCard); + + return me.activeItem; + } + return false; + } +}); + + +Ext.define('Ext.layout.container.Column', { + + extend: Ext.layout.container.Auto , + alias: ['layout.column'], + alternateClassName: 'Ext.layout.ColumnLayout', + + type: 'column', + + itemCls: Ext.baseCSSPrefix + 'column', + + targetCls: Ext.baseCSSPrefix + 'column-layout-ct', + + + columnWidthSizePolicy: { + readsWidth: 0, + readsHeight: 1, + setsWidth: 1, + setsHeight: 0 + }, + + createsInnerCt: true, + + manageOverflow: true, + + isItemShrinkWrap: function(ownerContext){ + return true; + }, + + getItemSizePolicy: function (item, ownerSizeModel) { + if (item.columnWidth) { + if (!ownerSizeModel) { + ownerSizeModel = this.owner.getSizeModel(); + } + + if (!ownerSizeModel.width.shrinkWrap) { + return this.columnWidthSizePolicy; + } + } + return this.autoSizePolicy; + }, + + calculateItems: function (ownerContext, containerSize) { + var me = this, + targetContext = ownerContext.targetContext, + items = ownerContext.childItems, + len = items.length, + contentWidth = 0, + gotWidth = containerSize.gotWidth, + blocked, availableWidth, i, itemContext, itemMarginWidth, itemWidth; + + + if (gotWidth === false) { + + targetContext.domBlock(me, 'width'); + blocked = true; + } else if (gotWidth) { + availableWidth = containerSize.width; + } else { + + + return true; + } + + + + for (i = 0; i < len; ++i) { + itemContext = items[i]; + + + + + itemMarginWidth = itemContext.getMarginInfo().width; + + if (!itemContext.widthModel.calculated) { + itemWidth = itemContext.getProp('width'); + if (typeof itemWidth != 'number') { + itemContext.block(me, 'width'); + blocked = true; + } + + contentWidth += itemWidth + itemMarginWidth; + } + } + + if (!blocked) { + availableWidth = (availableWidth < contentWidth) ? 0 : availableWidth - contentWidth; + + for (i = 0; i < len; ++i) { + itemContext = items[i]; + if (itemContext.widthModel.calculated) { + itemMarginWidth = itemContext.marginInfo.width; + itemWidth = itemContext.target.columnWidth; + itemWidth = Math.floor(itemWidth * availableWidth) - itemMarginWidth; + itemWidth = itemContext.setWidth(itemWidth); + contentWidth += itemWidth + itemMarginWidth; + } + } + + ownerContext.setContentWidth(contentWidth + ownerContext.paddingContext.getPaddingInfo().width); + } + + + return !blocked; + }, + + setCtSizeIfNeeded: function(ownerContext, containerSize) { + var me = this, + padding = ownerContext.paddingContext.getPaddingInfo(); + + me.callParent(arguments); + + + + if ((Ext.isIEQuirks || Ext.isIE7m) && me.isShrinkWrapTpl && padding.right) { + ownerContext.outerCtContext.setProp('width', + containerSize.width + padding.left); + } + } + +}); + + +Ext.define('Ext.layout.container.Form', { + + + + alias: 'layout.form', + extend: Ext.layout.container.Container , + alternateClassName: 'Ext.layout.FormLayout', + + + + tableCls: Ext.baseCSSPrefix + 'form-layout-table', + + type: 'form', + + createsInnerCt: true, + + manageOverflow: true, + + + lastOverflowAdjust: { + width: 0, + height: 0 + }, + + childEls: ['formTable'], + + padRow: '', + + renderTpl: [ + '', + '{%this.renderBody(out,values)%}', + '
    ', + '{%this.renderPadder(out,values)%}' + ], + + getRenderData: function(){ + var data = this.callParent(); + data.tableCls = this.tableCls; + return data; + }, + + calculate : function (ownerContext) { + var me = this, + containerSize = me.getContainerSize(ownerContext, true), + tableWidth, + childItems, + i = 0, length, + shrinkwrapHeight = ownerContext.sizeModel.height.shrinkWrap; + + if (shrinkwrapHeight) { + if (ownerContext.hasDomProp('containerChildrenSizeDone')) { + ownerContext.setProp('contentHeight', me.formTable.dom.offsetHeight + ownerContext.targetContext.getPaddingInfo().height); + } else { + me.done = false; + } + } + + + if (containerSize.gotWidth) { + tableWidth = me.formTable.dom.offsetWidth; + childItems = ownerContext.childItems; + + for (length = childItems.length; i < length; ++i) { + childItems[i].setWidth(tableWidth, false); + } + } else { + me.done = false; + } + }, + + getRenderTarget: function() { + return this.formTable; + }, + + getRenderTree: function() { + var me = this, + result = me.callParent(arguments), + i, len; + + for (i = 0, len = result.length; i < len; i++) { + result[i] = me.transformItemRenderTree(result[i]); + } + return result; + }, + + transformItemRenderTree: function(item) { + + if (item.tag && item.tag == 'table') { + item.tag = 'tbody'; + delete item.cellspacing; + delete item.cellpadding; + + + + + + if (Ext.isIE6) { + item.cn = this.padRow; + } + + return item; + } + + return { + tag: 'tbody', + cn: { + tag: 'tr', + cn: { + tag: 'td', + colspan: 3, + style: 'width:100%', + cn: item + } + } + }; + + }, + + isValidParent: function(item, target, position) { + return true; + }, + + isItemShrinkWrap: function(item) { + return ((item.shrinkWrap === true) ? 3 : item.shrinkWrap||0) & 2; + }, + + getItemSizePolicy: function(item) { + return { + setsWidth: 1, + setsHeight: 0 + }; + }, + + + + + + beginLayoutCycle: function (ownerContext, firstCycle) { + var padEl = this.overflowPadderEl; + + if (padEl) { + padEl.setStyle('display', 'none'); + } + + + + if (!ownerContext.state.overflowAdjust) { + ownerContext.state.overflowAdjust = this.lastOverflowAdjust; + } + }, + + + calculateOverflow: function (ownerContext, containerSize, dimensions) { + var me = this, + targetContext = ownerContext.targetContext, + manageOverflow = me.manageOverflow, + state = ownerContext.state, + overflowAdjust = state.overflowAdjust, + padWidth, padHeight, padElContext, padding, scrollRangeFlags, + scrollbarSize, contentW, contentH, ownerW, ownerH, scrollbars, + xauto, yauto; + + if (manageOverflow && !state.secondPass && !me.reserveScrollbar) { + + + xauto = (me.getOverflowXStyle(ownerContext) === 'auto'); + yauto = (me.getOverflowYStyle(ownerContext) === 'auto'); + + + + + if (!containerSize.gotWidth) { + xauto = false; + } + if (!containerSize.gotHeight) { + yauto = false; + } + + if (xauto || yauto) { + scrollbarSize = Ext.getScrollbarSize(); + + + + contentW = ownerContext.peek('contentWidth'); + contentH = ownerContext.peek('contentHeight'); + + + + + padding = targetContext.getPaddingInfo(); + contentW -= padding.width; + contentH -= padding.height; + ownerW = containerSize.width; + ownerH = containerSize.height; + + scrollbars = me.getScrollbarsNeeded(ownerW, ownerH, contentW, contentH); + state.overflowState = scrollbars; + + if (typeof dimensions == 'number') { + scrollbars &= ~dimensions; + } + + overflowAdjust = { + width: (xauto && (scrollbars & 2)) ? scrollbarSize.width : 0, + height: (yauto && (scrollbars & 1)) ? scrollbarSize.height : 0 + }; + + + + if (overflowAdjust.width !== me.lastOverflowAdjust.width || overflowAdjust.height !== me.lastOverflowAdjust.height) { + me.done = false; + + + + ownerContext.invalidate({ + state: { + overflowAdjust: overflowAdjust, + overflowState: state.overflowState, + secondPass: true + } + }); + } + } + } + + if (!me.done) { + return; + } + + padElContext = ownerContext.padElContext || + (ownerContext.padElContext = ownerContext.getEl('overflowPadderEl', me)); + + + + if (padElContext) { + scrollbars = state.overflowState; + padWidth = ownerContext.peek('contentWidth'); + + + padHeight = 1; + + if (scrollbars) { + padding = targetContext.getPaddingInfo(); + scrollRangeFlags = me.scrollRangeFlags; + + if ((scrollbars & 2) && (scrollRangeFlags & 1)) { + padHeight += padding.bottom; + } + + if ((scrollbars & 1) && (scrollRangeFlags & 4)) { + padWidth += padding.right; + } + padElContext.setProp('display', ''); + padElContext.setSize(padWidth, padHeight); + } else { + padElContext.setProp('display', 'none'); + } + } + }, + + completeLayout: function (ownerContext) { + + this.lastOverflowAdjust = ownerContext.state.overflowAdjust; + }, + + + doRenderPadder: function (out, renderData) { + + + + var me = renderData.$layout, + owner = me.owner, + scrollRangeFlags = me.getScrollRangeFlags(); + + if (me.manageOverflow) { + if (scrollRangeFlags & 5) { + out.push('
    '); + + me.scrollRangeFlags = scrollRangeFlags; + } + } + }, + + + getContainerSize : function(ownerContext, inDom, ignoreOverflow) { + + + + + + + var targetContext = ownerContext.targetContext, + frameInfo = targetContext.getFrameInfo(), + + padding = targetContext.getPaddingInfo(), + got = 0, + needed = 0, + overflowAdjust = ignoreOverflow ? null : ownerContext.state.overflowAdjust, + gotWidth, gotHeight, width, height; + + + + + + + + + + if (!ownerContext.widthModel.shrinkWrap) { + ++needed; + width = inDom ? targetContext.getDomProp('width') : targetContext.getProp('width'); + gotWidth = (typeof width == 'number'); + if (gotWidth) { + ++got; + width -= frameInfo.width + padding.width; + if (overflowAdjust) { + width -= overflowAdjust.width; + } + } + } + + if (!ownerContext.heightModel.shrinkWrap) { + ++needed; + height = inDom ? targetContext.getDomProp('height') : targetContext.getProp('height'); + gotHeight = (typeof height == 'number'); + if (gotHeight) { + ++got; + height -= frameInfo.height + padding.height; + if (overflowAdjust) { + height -= overflowAdjust.height; + } + } + } + + return { + width: width, + height: height, + needed: needed, + got: got, + gotAll: got == needed, + gotWidth: gotWidth, + gotHeight: gotHeight + }; + }, + + + getOverflowXStyle: function(ownerContext) { + var me = this; + + return me.overflowXStyle || + (me.overflowXStyle = me.owner.scrollFlags.overflowX || ownerContext.targetContext.getStyle('overflow-x')); + }, + + + getOverflowYStyle: function(ownerContext) { + var me = this; + + return me.overflowYStyle || + (me.overflowYStyle = me.owner.scrollFlags.overflowY || ownerContext.targetContext.getStyle('overflow-y')); + }, + + + getScrollRangeFlags: (function () { + var flags = -1; + + return function () { + if (flags < 0) { + var div = Ext.getBody().createChild({ + + cls: Ext.baseCSSPrefix + 'border-box', + style: { + width: '100px', height: '100px', padding: '10px', + overflow: 'auto' + }, + children: [{ + style: { + border: '1px solid red', + width: '150px', height: '150px', + margin: '0 5px 5px 0' + } + }] + }), + scrollHeight = div.dom.scrollHeight, + scrollWidth = div.dom.scrollWidth, + heightFlags = { + + 175: 0, + + 165: 1, + + 170: 2, + + 160: 3 + }, + widthFlags = { + + 175: 0, + + 165: 4, + + 170: 8, + + 160: 12 + }; + + flags = (heightFlags[scrollHeight] || 0) | (widthFlags[scrollWidth] || 0); + + div.remove(); + } + + return flags; + }; + }()), + + initLayout: function() { + var me = this, + scrollbarWidth = Ext.getScrollbarSize().width; + + me.callParent(); + + + + + if (scrollbarWidth && me.manageOverflow && !me.hasOwnProperty('lastOverflowAdjust')) { + if (me.owner.scrollFlags.y || me.reserveScrollbar) { + me.lastOverflowAdjust = { + width: scrollbarWidth, + height: 0 + }; + } + } + }, + + setupRenderTpl: function (renderTpl) { + this.callParent(arguments); + + renderTpl.renderPadder = this.doRenderPadder; + } +}); + + +Ext.define('Ext.menu.Item', { + extend: Ext.Component , + alias: 'widget.menuitem', + alternateClassName: 'Ext.menu.TextItem', + + + + + + + activeCls: Ext.baseCSSPrefix + 'menu-item-active', + + + ariaRole: 'menuitem', + + + canActivate: true, + + + clickHideDelay: 1, + + + destroyMenu: true, + + + disabledCls: Ext.baseCSSPrefix + 'menu-item-disabled', + + + + + + + hideOnClick: true, + + + + + + + + isMenuItem: true, + + + + + + + menuAlign: 'tl-tr?', + + + menuExpandDelay: 200, + + + menuHideDelay: 200, + + + + + + + tooltipType: 'qtip', + + arrowCls: Ext.baseCSSPrefix + 'menu-item-arrow', + + childEls: [ + 'itemEl', 'iconEl', 'textEl', 'arrowEl' + ], + + renderTpl: [ + '', + '{text}', + '', + ' target="{hrefTarget}"', + ' hidefocus="true"', + + ' unselectable="on"', + '', + ' tabIndex="{tabIndex}"', + '', + '>', + '', + '{text}', + '', + '', + '' + ], + + maskOnDisable: false, + + + + + + activate: function() { + var me = this; + + if (!me.activated && me.canActivate && me.rendered && !me.isDisabled() && me.isVisible()) { + me.el.addCls(me.activeCls); + me.focus(); + me.activated = true; + me.fireEvent('activate', me); + } + }, + + getFocusEl: function() { + return this.itemEl; + }, + + deactivate: function() { + var me = this; + + if (me.activated) { + me.el.removeCls(me.activeCls); + me.blur(); + me.hideMenu(); + me.activated = false; + me.fireEvent('deactivate', me); + } + }, + + deferHideMenu: function() { + if (this.menu.isVisible()) { + this.menu.hide(); + } + }, + + cancelDeferHide: function(){ + clearTimeout(this.hideMenuTimer); + }, + + deferHideParentMenus: function() { + var ancestor; + Ext.menu.Manager.hideAll(); + + if (!Ext.Element.getActiveElement()) { + + ancestor = this.up(':not([hidden])'); + if (ancestor) { + ancestor.focus(); + } + } + }, + + expandMenu: function(delay) { + var me = this; + + if (me.menu) { + me.cancelDeferHide(); + if (delay === 0) { + me.doExpandMenu(); + } else { + clearTimeout(me.expandMenuTimer); + me.expandMenuTimer = Ext.defer(me.doExpandMenu, Ext.isNumber(delay) ? delay : me.menuExpandDelay, me); + } + } + }, + + doExpandMenu: function() { + var me = this, + menu = me.menu; + + if (me.activated && (!menu.rendered || !menu.isVisible())) { + me.parentMenu.activeChild = menu; + menu.parentItem = me; + menu.parentMenu = me.parentMenu; + menu.showBy(me, me.menuAlign); + } + }, + + getRefItems: function(deep) { + var menu = this.menu, + items; + + if (menu) { + items = menu.getRefItems(deep); + items.unshift(menu); + } + return items || []; + }, + + hideMenu: function(delay) { + var me = this; + + if (me.menu) { + clearTimeout(me.expandMenuTimer); + me.hideMenuTimer = Ext.defer(me.deferHideMenu, Ext.isNumber(delay) ? delay : me.menuHideDelay, me); + } + }, + + initComponent: function() { + var me = this, + prefix = Ext.baseCSSPrefix, + cls = [prefix + 'menu-item'], + menu; + + me.addEvents( + + 'activate', + + + 'click', + + + 'deactivate', + + + 'textchange', + + + 'iconchange' + ); + + if (me.plain) { + cls.push(prefix + 'menu-item-plain'); + } + + if (me.cls) { + cls.push(me.cls); + } + + me.cls = cls.join(' '); + + if (me.menu) { + menu = me.menu; + delete me.menu; + me.setMenu(menu); + } + + me.callParent(arguments); + }, + + onClick: function(e) { + var me = this; + + if (!me.href) { + e.stopEvent(); + } + + if (me.disabled) { + return; + } + + if (me.hideOnClick) { + me.deferHideParentMenusTimer = Ext.defer(me.deferHideParentMenus, me.clickHideDelay, me); + } + + Ext.callback(me.handler, me.scope || me, [me, e]); + me.fireEvent('click', me, e); + + if (!me.hideOnClick) { + me.focus(); + } + }, + + onRemoved: function() { + var me = this; + + + if (me.activated && me.parentMenu.activeItem === me) { + me.parentMenu.deactivateActiveItem(); + } + me.callParent(arguments); + me.parentMenu = me.ownerButton = null; + }, + + + beforeDestroy: function() { + var me = this; + if (me.rendered) { + me.clearTip(); + } + me.callParent(); + }, + + onDestroy: function() { + var me = this; + + clearTimeout(me.expandMenuTimer); + me.cancelDeferHide(); + clearTimeout(me.deferHideParentMenusTimer); + + me.setMenu(null); + me.callParent(arguments); + }, + + beforeRender: function() { + var me = this, + blank = Ext.BLANK_IMAGE_URL, + glyph = me.glyph, + glyphFontFamily = Ext._glyphFontFamily, + glyphParts, iconCls, arrowCls; + + me.callParent(); + + if (me.iconAlign === 'right') { + iconCls = me.checkChangeDisabled ? me.disabledCls : ''; + arrowCls = Ext.baseCSSPrefix + 'menu-item-icon-right ' + me.iconCls; + } else { + iconCls = (me.iconCls || '') + (me.checkChangeDisabled ? ' ' + me.disabledCls : ''); + arrowCls = me.menu ? me.arrowCls : ''; + } + + if (typeof glyph === 'string') { + glyphParts = glyph.split('@'); + glyph = glyphParts[0]; + glyphFontFamily = glyphParts[1]; + } + + Ext.applyIf(me.renderData, { + href: me.href || '#', + hrefTarget: me.hrefTarget, + icon: me.icon, + iconCls: iconCls, + glyph: glyph, + glyphCls: glyph ? Ext.baseCSSPrefix + 'menu-item-glyph' : undefined, + glyphFontFamily: glyphFontFamily, + hasIcon: !!(me.icon || me.iconCls || glyph), + iconAlign: me.iconAlign, + plain: me.plain, + text: me.text, + arrowCls: arrowCls, + blank: blank, + tabIndex: me.tabIndex + }); + }, + + onRender: function() { + var me = this; + + me.callParent(arguments); + + if (me.tooltip) { + me.setTooltip(me.tooltip, true); + } + }, + + + setMenu: function(menu, destroyMenu) { + var me = this, + oldMenu = me.menu, + arrowEl = me.arrowEl; + + if (oldMenu) { + delete oldMenu.parentItem; + delete oldMenu.parentMenu; + delete oldMenu.ownerItem; + + if (destroyMenu === true || (destroyMenu !== false && me.destroyMenu)) { + Ext.destroy(oldMenu); + } + } + if (menu) { + me.menu = Ext.menu.Manager.get(menu); + me.menu.ownerItem = me; + } else { + me.menu = null; + } + + if (me.rendered && !me.destroying && arrowEl) { + arrowEl[me.menu ? 'addCls' : 'removeCls'](me.arrowCls); + } + }, + + + setHandler: function(fn, scope) { + this.handler = fn || null; + this.scope = scope; + }, + + + setIcon: function(icon){ + var iconEl = this.iconEl, + oldIcon = this.icon; + if (iconEl) { + iconEl.src = icon || Ext.BLANK_IMAGE_URL; + } + this.icon = icon; + this.fireEvent('iconchange', this, oldIcon, icon); + }, + + + setIconCls: function(iconCls) { + var me = this, + iconEl = me.iconEl, + oldCls = me.iconCls; + + if (iconEl) { + if (me.iconCls) { + iconEl.removeCls(me.iconCls); + } + + if (iconCls) { + iconEl.addCls(iconCls); + } + } + + me.iconCls = iconCls; + me.fireEvent('iconchange', me, oldCls, iconCls); + }, + + + setText: function(text) { + var me = this, + el = me.textEl || me.el, + oldText = me.text; + + me.text = text; + + if (me.rendered) { + el.update(text || ''); + + me.ownerCt.updateLayout(); + } + me.fireEvent('textchange', me, oldText, text); + }, + + getTipAttr: function(){ + return this.tooltipType == 'qtip' ? 'data-qtip' : 'title'; + }, + + + clearTip: function() { + if (Ext.quickTipsActive && Ext.isObject(this.tooltip)) { + Ext.tip.QuickTipManager.unregister(this.itemEl); + } + }, + + + setTooltip: function(tooltip, initial) { + var me = this; + + if (me.rendered) { + if (!initial) { + me.clearTip(); + } + + if (Ext.quickTipsActive && Ext.isObject(tooltip)) { + Ext.tip.QuickTipManager.register(Ext.apply({ + target: me.itemEl.id + }, + tooltip)); + me.tooltip = tooltip; + } else { + me.itemEl.dom.setAttribute(me.getTipAttr(), tooltip); + } + } else { + me.tooltip = tooltip; + } + + return me; + } +}); + + +Ext.define('Ext.menu.CheckItem', { + extend: Ext.menu.Item , + alias: 'widget.menucheckitem', + + + + + + + + + + + checkedCls: Ext.baseCSSPrefix + 'menu-item-checked', + + uncheckedCls: Ext.baseCSSPrefix + 'menu-item-unchecked', + + groupCls: Ext.baseCSSPrefix + 'menu-group-icon', + + + hideOnClick: false, + + + checkChangeDisabled: false, + + childEls: [ + 'itemEl', 'iconEl', 'textEl', 'checkEl' + ], + + showCheckbox: true, + + renderTpl: [ + '', + '{text}', + '', + '{%var showCheckbox = values.showCheckbox,', + ' rightCheckbox = showCheckbox && values.hasIcon && (values.iconAlign !== "left"), textCls = rightCheckbox ? "' + Ext.baseCSSPrefix + 'right-check-item-text" : "";%}', + 'target="{hrefTarget}" hidefocus="true" unselectable="on"', + '', + ' tabIndex="{tabIndex}"', + '', + '>', + '{%if (values.hasIcon && (values.iconAlign !== "left")) {%}', + '', + '{%} else if (showCheckbox){%}', + '', + '{%}%}', + 'style="margin-right: 17px;" >{text}', + + + '{%if (rightCheckbox) {%}', + '', + '{%} else if (values.arrowCls) {%}', + '', + '{%}%}', + '', + '
    ' + ], + + initComponent: function() { + var me = this; + + + me.checked = !!me.checked; + me.addEvents( + + 'beforecheckchange', + + + 'checkchange' + ); + + me.callParent(arguments); + + Ext.menu.Manager.registerCheckable(me); + + if (me.group) { + if (!(me.iconCls || me.icon || me.glyph)) { + me.iconCls = me.groupCls; + } + if (me.initialConfig.hideOnClick !== false) { + me.hideOnClick = true; + } + } + }, + + beforeRender: function() { + this.callParent(); + this.renderData.showCheckbox = this.showCheckbox; + }, + + afterRender: function() { + var me = this; + me.callParent(); + me.checked = !me.checked; + me.setChecked(!me.checked, true); + if (me.checkChangeDisabled) { + me.disableCheckChange(); + } + }, + + + disableCheckChange: function() { + var me = this, + checkEl = me.checkEl; + + if (checkEl) { + checkEl.addCls(me.disabledCls); + } + + + if (!(Ext.isIE10p || (Ext.isIE9 && Ext.isStrict)) && me.rendered) { + me.el.repaint(); + } + me.checkChangeDisabled = true; + }, + + + enableCheckChange: function() { + var me = this, + checkEl = me.checkEl; + + if (checkEl) { + checkEl.removeCls(me.disabledCls); + } + me.checkChangeDisabled = false; + }, + + onClick: function(e) { + var me = this; + if(!me.disabled && !me.checkChangeDisabled && !(me.checked && me.group)) { + me.setChecked(!me.checked); + } + this.callParent([e]); + }, + + onDestroy: function() { + Ext.menu.Manager.unregisterCheckable(this); + this.callParent(arguments); + }, + + + setChecked: function(checked, suppressEvents) { + var me = this; + if (me.checked !== checked && (suppressEvents || me.fireEvent('beforecheckchange', me, checked) !== false)) { + if (me.el) { + me.el[checked ? 'addCls' : 'removeCls'](me.checkedCls)[!checked ? 'addCls' : 'removeCls'](me.uncheckedCls); + } + me.checked = checked; + Ext.menu.Manager.onCheckChange(me, checked); + if (!suppressEvents) { + Ext.callback(me.checkHandler, me.scope, [me, checked]); + me.fireEvent('checkchange', me, checked); + } + } + } +}); + + +Ext.define('Ext.menu.KeyNav', { + extend: Ext.util.KeyNav , + + + + constructor: function(config) { + var me = this; + + me.menu = config.target; + me.callParent([Ext.apply({ + down: me.down, + enter: me.enter, + esc: me.escape, + left: me.left, + right: me.right, + space: me.enter, + tab: me.tab, + up: me.up + }, config)]); + }, + + down: function(e) { + var me = this, + fi = me.menu.focusedItem; + + if (fi && e.getKey() == Ext.EventObject.DOWN && me.isWhitelisted(fi)) { + return true; + } + me.focusNextItem(1); + }, + + enter: function(e) { + var menu = this.menu, + focused = menu.focusedItem; + + if (menu.activeItem) { + menu.onClick(e); + } else if (focused && focused.isFormField) { + + return true; + } + }, + + escape: function(e) { + Ext.menu.Manager.hideAll(); + }, + + focusNextItem: function(step) { + var menu = this.menu, + items = menu.items, + focusedItem = menu.focusedItem, + startIdx = focusedItem ? items.indexOf(focusedItem) : -1, + idx = startIdx + step, + len = items.length, + count = 0, + item; + + + while (count < len && idx !== startIdx) { + if (idx < 0) { + idx = len - 1; + } else if (idx >= len) { + idx = 0; + } + + item = items.getAt(idx); + if (menu.canActivateItem(item)) { + menu.setActiveItem(item); + break; + } + idx += step; + ++count; + } + }, + + isWhitelisted: function(item) { + return Ext.FocusManager.isWhitelisted(item); + }, + + left: function(e) { + var menu = this.menu, + fi = menu.focusedItem; + + if (fi && this.isWhitelisted(fi)) { + return true; + } + + menu.hide(); + if (menu.parentMenu) { + menu.parentMenu.focus(); + } + }, + + right: function(e) { + var menu = this.menu, + fi = menu.focusedItem, + ai = menu.activeItem, + am; + + if (fi && this.isWhitelisted(fi)) { + return true; + } + + if (ai) { + am = menu.activeItem.menu; + if (am) { + ai.expandMenu(0); + am.setActiveItem(am.child(':focusable')); + } + } + }, + + tab: function(e) { + var me = this; + + if (e.shiftKey) { + me.up(e); + } else { + me.down(e); + } + }, + + up: function(e) { + var me = this, + fi = me.menu.focusedItem; + + if (fi && e.getKey() == Ext.EventObject.UP && me.isWhitelisted(fi)) { + return true; + } + me.focusNextItem(-1); + } +}); + + +Ext.define('Ext.menu.Separator', { + extend: Ext.menu.Item , + alias: 'widget.menuseparator', + + + + + canActivate: false, + + + + + + + + focusable: false, + + + + + + + hideOnClick: false, + + + + + + + + + + + + + + + plain: true, + + + separatorCls: Ext.baseCSSPrefix + 'menu-item-separator', + + + text: ' ', + + beforeRender: function(ct, pos) { + var me = this; + + me.callParent(); + + me.addCls(me.separatorCls); + } +}); + + +Ext.define('Ext.menu.Menu', { + extend: Ext.panel.Panel , + alias: 'widget.menu', + + + + + + + + + + + + + + enableKeyNav: true, + + + allowOtherMenus: false, + + + ariaRole: 'menu', + + + + + floating: true, + + + constrain: true, + + + hidden: true, + + hideMode: 'visibility', + + + ignoreParentClicks: false, + + + isMenu: true, + + + + + showSeparator : true, + + + minWidth: undefined, + + defaultMinWidth: 120, + + + + initComponent: function() { + var me = this, + prefix = Ext.baseCSSPrefix, + cls = [prefix + 'menu'], + bodyCls = me.bodyCls ? [me.bodyCls] : [], + isFloating = me.floating !== false; + + me.addEvents( + + 'click', + + + 'mouseenter', + + + 'mouseleave', + + + 'mouseover' + ); + + Ext.menu.Manager.register(me); + + + if (me.plain) { + cls.push(prefix + 'menu-plain'); + } + me.cls = cls.join(' '); + + + bodyCls.push(prefix + 'menu-body', Ext.dom.Element.unselectableCls); + me.bodyCls = bodyCls.join(' '); + + + + + + if (!me.layout) { + me.layout = { + type: 'vbox', + align: 'stretchmax', + overflowHandler: 'Scroller' + }; + } + + if (isFloating) { + + if (me.minWidth === undefined) { + me.minWidth = me.defaultMinWidth; + } + } + + + else { + me.hidden = !!me.initialConfig.hidden; + } + + me.callParent(arguments); + }, + + + + registerWithOwnerCt: function() { + if (this.floating) { + this.ownerCt = null; + Ext.WindowManager.register(this); + } + }, + + + + initHierarchyEvents: Ext.emptyFn, + + + isVisible: function() { + return this.callParent(); + }, + + + + getHierarchyState: function() { + var result = this.callParent(); + result.hidden = this.hidden; + return result; + }, + + beforeRender: function() { + this.callParent(arguments); + + + + if (!this.getSizeModel().width.shrinkWrap) { + this.layout.align = 'stretch'; + } + }, + + onBoxReady: function() { + var me = this; + + me.callParent(arguments); + + + if (me.showSeparator) { + me.iconSepEl = me.layout.getElementTarget().insertFirst({ + cls: Ext.baseCSSPrefix + 'menu-icon-separator', + html: ' ' + }); + } + + me.mon(me.el, { + click: me.onClick, + mouseover: me.onMouseOver, + scope: me + }); + me.mouseMonitor = me.el.monitorMouseLeave(100, me.onMouseLeave, me); + + + if (me.enableKeyNav) { + me.keyNav = new Ext.menu.KeyNav({ + target: me, + keyMap: me.getKeyMap() + }); + } + }, + + getRefOwner: function() { + + + + return this.parentMenu || this.ownerButton || this.callParent(arguments); + }, + + + canActivateItem: function(item) { + return item && !item.isDisabled() && item.isVisible() && (item.canActivate || item.getXTypes().indexOf('menuitem') < 0); + }, + + + deactivateActiveItem: function(andBlurFocusedItem) { + var me = this, + activeItem = me.activeItem, + focusedItem = me.focusedItem; + + if (activeItem) { + activeItem.deactivate(); + if (!activeItem.activated) { + delete me.activeItem; + } + } + + + + if (focusedItem && andBlurFocusedItem) { + focusedItem.blur(); + delete me.focusedItem; + } + }, + + + getFocusEl: function() { + return this.focusedItem || this.el; + }, + + + hide: function() { + this.deactivateActiveItem(true); + this.callParent(arguments); + }, + + + getItemFromEvent: function(e) { + return this.getChildByElement(e.getTarget()); + }, + + lookupComponent: function(cmp) { + var me = this; + + if (typeof cmp == 'string') { + cmp = me.lookupItemFromString(cmp); + } else if (Ext.isObject(cmp)) { + cmp = me.lookupItemFromObject(cmp); + } + + + + cmp.minWidth = cmp.minWidth || me.minWidth; + + return cmp; + }, + + + lookupItemFromObject: function(cmp) { + var me = this, + prefix = Ext.baseCSSPrefix, + cls; + + if (!cmp.isComponent) { + if (!cmp.xtype) { + cmp = Ext.create('Ext.menu.' + (Ext.isBoolean(cmp.checked) ? 'Check': '') + 'Item', cmp); + } else { + cmp = Ext.ComponentManager.create(cmp, cmp.xtype); + } + } + + if (cmp.isMenuItem) { + cmp.parentMenu = me; + } + + if (!cmp.isMenuItem && !cmp.dock) { + cls = [prefix + 'menu-item-cmp']; + + + + + if (!me.plain && (cmp.indent !== false || cmp.iconCls === 'no-icon')) { + cls.push(prefix + 'menu-item-indent'); + } + + if (cmp.rendered) { + cmp.el.addCls(cls); + } else { + cmp.cls = (cmp.cls || '') + ' ' + cls.join(' '); + } + } + return cmp; + }, + + + lookupItemFromString: function(cmp) { + return (cmp == 'separator' || cmp == '-') ? + new Ext.menu.Separator() + : new Ext.menu.Item({ + canActivate: false, + hideOnClick: false, + plain: true, + text: cmp + }); + }, + + onClick: function(e) { + var me = this, + item; + + if (me.disabled) { + e.stopEvent(); + return; + } + + item = (e.type === 'click') ? me.getItemFromEvent(e) : me.activeItem; + if (item && item.isMenuItem) { + if (!item.menu || !me.ignoreParentClicks) { + item.onClick(e); + } else { + e.stopEvent(); + } + } + + if (!item || item.disabled) { + item = undefined; + } + me.fireEvent('click', me, item, e); + }, + + onDestroy: function() { + var me = this; + + Ext.menu.Manager.unregister(me); + me.parentMenu = me.ownerButton = null; + if (me.rendered) { + me.el.un(me.mouseMonitor); + Ext.destroy(me.keyNav); + me.keyNav = null; + } + me.callParent(arguments); + }, + + onMouseLeave: function(e) { + var me = this; + + me.deactivateActiveItem(); + + if (me.disabled) { + return; + } + + me.fireEvent('mouseleave', me, e); + }, + + onMouseOver: function(e) { + var me = this, + fromEl = e.getRelatedTarget(), + mouseEnter = !me.el.contains(fromEl), + item = me.getItemFromEvent(e), + parentMenu = me.parentMenu, + parentItem = me.parentItem; + + if (mouseEnter && parentMenu) { + parentMenu.setActiveItem(parentItem); + parentItem.cancelDeferHide(); + parentMenu.mouseMonitor.mouseenter(); + } + + if (me.disabled) { + return; + } + + + if (item && !item.activated) { + me.setActiveItem(item); + if (item.activated && item.expandMenu) { + item.expandMenu(); + } + } + if (mouseEnter) { + me.fireEvent('mouseenter', me, e); + } + me.fireEvent('mouseover', me, item, e); + }, + + setActiveItem: function(item) { + var me = this; + + if (item && (item != me.activeItem)) { + me.deactivateActiveItem(); + if (me.canActivateItem(item)) { + if (item.activate) { + item.activate(); + if (item.activated) { + me.activeItem = item; + me.focusedItem = item; + me.focus(); + } + } else { + item.focus(); + me.focusedItem = item; + } + } + item.el.scrollIntoView(me.layout.getRenderTarget()); + } + }, + + showBy: function(cmp, pos, off) { + var me = this; + + me.callParent(arguments); + if (!me.hidden) { + + me.setVerticalPosition(); + } + return me; + }, + + show: function() { + var me = this, + parentEl, viewHeight, + maxWas = me.maxHeight; + + + if (!me.rendered){ + me.doAutoRender(); + } + + + if (me.floating) { + + parentEl = me.el.parent(); + viewHeight = parentEl.getViewSize().height; + me.maxHeight = Math.min(maxWas || viewHeight, viewHeight); + } + + me.callParent(arguments); + me.maxHeight = maxWas; + return me; + }, + + + + + setVerticalPosition: function() { + var me = this, + max, + y = me.getY(), + returnY = y, + height = me.getHeight(), + viewportHeight = Ext.Element.getViewportHeight().height, + parentEl = me.el.parent(), + viewHeight = parentEl.getViewSize().height, + normalY = y - parentEl.getScroll().top; + + parentEl = null; + + if (me.floating) { + max = me.maxHeight ? me.maxHeight : viewHeight - normalY; + if (height > viewHeight) { + returnY = y - normalY; + } else if (max < height) { + returnY = y - (height - max); + } else if((y + height) > viewportHeight){ + returnY = viewportHeight - height; + } + } + me.setY(returnY); + } +}); + + + Ext.define('Ext.menu.ColorPicker', { + extend: Ext.menu.Menu , + + alias: 'widget.colormenu', + + + + + + + hideOnClick : true, + + + pickerId : null, + + + + + + + + initComponent : function(){ + var me = this, + cfg = Ext.apply({}, me.initialConfig); + + + delete cfg.listeners; + Ext.apply(me, { + plain: true, + showSeparator: false, + items: Ext.applyIf({ + cls: Ext.baseCSSPrefix + 'menu-color-item', + id: me.pickerId, + xtype: 'colorpicker' + }, cfg) + }); + + me.callParent(arguments); + + me.picker = me.down('colorpicker'); + + + me.relayEvents(me.picker, ['select']); + + if (me.hideOnClick) { + me.on('select', me.hidePickerOnSelect, me); + } + }, + + + hidePickerOnSelect: function() { + Ext.menu.Manager.hideAll(); + } + }); + + + Ext.define('Ext.menu.DatePicker', { + extend: Ext.menu.Menu , + + alias: 'widget.datemenu', + + + + + + + hideOnClick : true, + + + pickerId : null, + + + + + + initComponent : function(){ + var me = this, + cfg = Ext.apply({}, me.initialConfig); + + + delete cfg.listeners; + + Ext.apply(me, { + showSeparator: false, + plain: true, + border: false, + bodyPadding: 0, + items: Ext.applyIf({ + cls: Ext.baseCSSPrefix + 'menu-date-item', + id: me.pickerId, + xtype: 'datepicker' + }, cfg) + }); + + me.callParent(arguments); + + me.picker = me.down('datepicker'); + + me.relayEvents(me.picker, ['select']); + + if (me.hideOnClick) { + me.on('select', me.hidePickerOnSelect, me); + } + }, + + hidePickerOnSelect: function() { + Ext.menu.Manager.hideAll(); + } + }); + + +Ext.define('Ext.panel.Tool', { + extend: Ext.Component , + + alias: 'widget.tool', + + + isTool: true, + + baseCls: Ext.baseCSSPrefix + 'tool', + disabledCls: Ext.baseCSSPrefix + 'tool-disabled', + + + toolPressedCls: Ext.baseCSSPrefix + 'tool-pressed', + + toolOverCls: Ext.baseCSSPrefix + 'tool-over', + + ariaRole: 'button', + + childEls: [ + 'toolEl' + ], + + renderTpl: [ + '' + ], + + + + + + + + + + + tooltipType: 'qtip', + + + stopEvent: true, + + + height: 15, + width: 15, + + + initComponent: function() { + var me = this; + me.addEvents( + + 'click' + ); + + + me.type = me.type || me.id; + + Ext.applyIf(me.renderData, { + baseCls: me.baseCls, + blank: Ext.BLANK_IMAGE_URL, + type: me.type + }); + + + me.tooltip = me.tooltip || me.qtip; + me.callParent(); + }, + + + afterRender: function() { + var me = this, + attr; + + me.callParent(arguments); + + me.el.on({ + click: me.onClick, + mousedown: me.onMouseDown, + mouseover: me.onMouseOver, + mouseout: me.onMouseOut, + scope: me + }); + + if (me.tooltip) { + if (Ext.quickTipsActive && Ext.isObject(me.tooltip)) { + Ext.tip.QuickTipManager.register(Ext.apply({ + target: me.id + }, me.tooltip)); + } + else { + attr = me.tooltipType == 'qtip' ? 'data-qtip' : 'title'; + me.el.dom.setAttribute(attr, me.tooltip); + } + } + }, + + getFocusEl: function() { + return this.el; + }, + + + setType: function(type) { + var me = this, + oldType = me.type; + + me.type = type; + if (me.rendered) { + if (oldType) { + me.toolEl.removeCls(me.baseCls + '-' + oldType); + } + me.toolEl.addCls(me.baseCls + '-' + type); + } else { + me.renderData.type = type; + } + return me; + }, + + + onClick: function(e, target) { + var me = this; + + if (me.disabled) { + return false; + } + + + me.el.removeCls(me.toolPressedCls); + me.el.removeCls(me.toolOverCls); + + if (me.stopEvent !== false) { + e.stopEvent(); + } + + Ext.callback(me.handler, me.scope || me, [e, target, me.ownerCt, me]); + me.fireEvent('click', me, e); + return true; + }, + + + onDestroy: function(){ + if (Ext.quickTipsActive && Ext.isObject(this.tooltip)) { + Ext.tip.QuickTipManager.unregister(this.id); + } + this.callParent(); + }, + + + onMouseDown: function() { + if (this.disabled) { + return false; + } + + this.el.addCls(this.toolPressedCls); + }, + + + onMouseOver: function() { + if (this.disabled) { + return false; + } + this.el.addCls(this.toolOverCls); + }, + + + onMouseOut: function() { + this.el.removeCls(this.toolOverCls); + } +}); + + +Ext.define('Ext.resizer.SplitterTracker', { + extend: Ext.dd.DragTracker , + + enabled: true, + + overlayCls: Ext.baseCSSPrefix + 'resizable-overlay', + + createDragOverlay: function () { + var overlay; + + overlay = this.overlay = Ext.getBody().createChild({ + cls: this.overlayCls, + html: ' ' + }); + + overlay.unselectable(); + overlay.setSize(Ext.Element.getViewWidth(true), Ext.Element.getViewHeight(true)); + overlay.show(); + }, + + getPrevCmp: function() { + var splitter = this.getSplitter(); + return splitter.previousSibling(':not([hidden])'); + }, + + getNextCmp: function() { + var splitter = this.getSplitter(); + return splitter.nextSibling(':not([hidden])'); + }, + + + + onBeforeStart: function(e) { + var me = this, + prevCmp = me.getPrevCmp(), + nextCmp = me.getNextCmp(), + collapseEl = me.getSplitter().collapseEl, + target = e.getTarget(), + box; + + if (!prevCmp || !nextCmp) { + return false; + } + + if (collapseEl && target === me.getSplitter().collapseEl.dom) { + return false; + } + + + if (nextCmp.collapsed || prevCmp.collapsed) { + return false; + } + + + me.prevBox = prevCmp.getEl().getBox(); + me.nextBox = nextCmp.getEl().getBox(); + me.constrainTo = box = me.calculateConstrainRegion(); + + if (!box) { + return false; + } + + return box; + }, + + + onStart: function(e) { + var splitter = this.getSplitter(); + this.createDragOverlay(); + splitter.addCls(splitter.baseCls + '-active'); + }, + + + calculateConstrainRegion: function() { + var me = this, + splitter = me.getSplitter(), + splitWidth = splitter.getWidth(), + defaultMin = splitter.defaultSplitMin, + orient = splitter.orientation, + prevBox = me.prevBox, + prevCmp = me.getPrevCmp(), + nextBox = me.nextBox, + nextCmp = me.getNextCmp(), + + + + prevConstrainRegion, nextConstrainRegion, constrainOptions; + + + if (orient === 'vertical') { + constrainOptions = { + prevCmp: prevCmp, + nextCmp: nextCmp, + prevBox: prevBox, + nextBox: nextBox, + defaultMin: defaultMin, + splitWidth: splitWidth + }; + + + prevConstrainRegion = new Ext.util.Region( + prevBox.y, + me.getVertPrevConstrainRight(constrainOptions), + prevBox.bottom, + me.getVertPrevConstrainLeft(constrainOptions) + ); + + nextConstrainRegion = new Ext.util.Region( + nextBox.y, + me.getVertNextConstrainRight(constrainOptions), + nextBox.bottom, + me.getVertNextConstrainLeft(constrainOptions) + ); + } else { + + prevConstrainRegion = new Ext.util.Region( + prevBox.y + (prevCmp.minHeight || defaultMin), + prevBox.right, + + + (prevCmp.maxHeight ? prevBox.y + prevCmp.maxHeight : nextBox.bottom - (nextCmp.minHeight || defaultMin)) + splitWidth, + prevBox.x + ); + + nextConstrainRegion = new Ext.util.Region( + + + (nextCmp.maxHeight ? nextBox.bottom - nextCmp.maxHeight : prevBox.y + (prevCmp.minHeight || defaultMin)) - splitWidth, + nextBox.right, + nextBox.bottom - (nextCmp.minHeight || defaultMin), + nextBox.x + ); + } + + + return prevConstrainRegion.intersect(nextConstrainRegion); + }, + + + performResize: function(e, offset) { + var me = this, + splitter = me.getSplitter(), + orient = splitter.orientation, + prevCmp = me.getPrevCmp(), + nextCmp = me.getNextCmp(), + owner = splitter.ownerCt, + flexedSiblings = owner.query('>[flex]'), + len = flexedSiblings.length, + vertical = orient === 'vertical', + i = 0, + dimension = vertical ? 'width' : 'height', + totalFlex = 0, + item, size; + + + for (; i < len; i++) { + item = flexedSiblings[i]; + size = vertical ? item.getWidth() : item.getHeight(); + totalFlex += size; + item.flex = size; + } + + offset = vertical ? offset[0] : offset[1]; + + if (prevCmp) { + size = me.prevBox[dimension] + offset; + if (prevCmp.flex) { + prevCmp.flex = size; + } else { + prevCmp[dimension] = size; + } + } + if (nextCmp) { + size = me.nextBox[dimension] - offset; + if (nextCmp.flex) { + nextCmp.flex = size; + } else { + nextCmp[dimension] = size; + } + } + + owner.updateLayout(); + }, + + + + + endDrag: function () { + var me = this; + + if (me.overlay) { + me.overlay.remove(); + delete me.overlay; + } + + me.callParent(arguments); + }, + + + onEnd: function(e) { + var me = this, + splitter = me.getSplitter(); + + splitter.removeCls(splitter.baseCls + '-active'); + me.performResize(e, me.getResizeOffset()); + }, + + + + onDrag: function(e) { + var me = this, + offset = me.getOffset('dragTarget'), + splitter = me.getSplitter(), + splitEl = splitter.getEl(), + orient = splitter.orientation; + + if (orient === "vertical") { + splitEl.setX(me.startRegion.left + offset[0]); + } else { + splitEl.setY(me.startRegion.top + offset[1]); + } + }, + + getSplitter: function() { + return this.splitter; + }, + + getVertPrevConstrainRight: function(o) { + + + return (o.prevCmp.maxWidth ? o.prevBox.x + o.prevCmp.maxWidth : + o.nextBox.right - (o.nextCmp.minWidth || o.defaultMin)) + o.splitWidth; + }, + + getVertPrevConstrainLeft: function(o) { + return o.prevBox.x + (o.prevCmp.minWidth || o.defaultMin); + }, + + + getVertNextConstrainRight: function(o) { + return o.nextBox.right - (o.nextCmp.minWidth || o.defaultMin); + }, + + getVertNextConstrainLeft: function(o) { + + + return (o.nextCmp.maxWidth ? o.nextBox.right - o.nextCmp.maxWidth : + o.prevBox.x + (o.prevBox.minWidth || o.defaultMin)) - o.splitWidth; + }, + + getResizeOffset: function() { + return this.getOffset('dragTarget'); + } +}); + + +Ext.define('Ext.resizer.BorderSplitterTracker', { + extend: Ext.resizer.SplitterTracker , + + + getPrevCmp: null, + getNextCmp: null, + + + calculateConstrainRegion: function() { + var me = this, + splitter = me.splitter, + collapseTarget = splitter.collapseTarget, + defaultSplitMin = splitter.defaultSplitMin, + sizePropCap = splitter.vertical ? 'Width' : 'Height', + minSizeProp = 'min' + sizePropCap, + maxSizeProp = 'max' + sizePropCap, + getSizeMethod = 'get' + sizePropCap, + neighbors = splitter.neighbors, + length = neighbors.length, + box = collapseTarget.el.getBox(), + left = box.x, + top = box.y, + right = box.right, + bottom = box.bottom, + size = splitter.vertical ? (right - left) : (bottom - top), + + i, neighbor, minRange, maxRange, maxGrowth, maxShrink, targetSize; + + + minRange = (collapseTarget[minSizeProp] || Math.min(size,defaultSplitMin)) - size; + + + maxRange = collapseTarget[maxSizeProp]; + if (!maxRange) { + maxRange = 1e9; + } else { + maxRange -= size; + } + targetSize = size; + + for (i = 0; i < length; ++i) { + neighbor = neighbors[i]; + size = neighbor[getSizeMethod](); + + + maxGrowth = size - neighbor[maxSizeProp]; + maxShrink = size - (neighbor[minSizeProp] || Math.min(size,defaultSplitMin)); + + if (!isNaN(maxGrowth)) { + + + if (minRange < maxGrowth) { + minRange = maxGrowth; + } + } + + + + if (maxRange > maxShrink) { + maxRange = maxShrink; + } + } + + if (maxRange - minRange < 2) { + return null; + } + + box = new Ext.util.Region(top, right, bottom, left); + + me.constraintAdjusters[me.getCollapseDirection()](box, minRange, maxRange, splitter); + + me.dragInfo = { + minRange: minRange, + maxRange: maxRange, + + targetSize: targetSize + }; + + return box; + }, + + constraintAdjusters: { + + left: function (box, minRange, maxRange, splitter) { + box[0] = box.x = box.left = box.right + minRange; + box.right += maxRange + splitter.getWidth(); + }, + + + top: function (box, minRange, maxRange, splitter) { + box[1] = box.y = box.top = box.bottom + minRange; + box.bottom += maxRange + splitter.getHeight(); + }, + + + bottom: function (box, minRange, maxRange, splitter) { + box.bottom = box.top - minRange; + box.top -= maxRange + splitter.getHeight(); + }, + + + right: function (box, minRange, maxRange, splitter) { + box.right = box.left - minRange; + box[0] = box.x = box.left = box.x - maxRange + splitter.getWidth(); + } + }, + + onBeforeStart: function(e) { + var me = this, + splitter = me.splitter, + collapseTarget = splitter.collapseTarget, + neighbors = splitter.neighbors, + collapseEl = me.getSplitter().collapseEl, + target = e.getTarget(), + length = neighbors.length, + i, neighbor; + + if (collapseEl && target === splitter.collapseEl.dom) { + return false; + } + + if (collapseTarget.collapsed) { + return false; + } + + + for (i = 0; i < length; ++i) { + neighbor = neighbors[i]; + + if (neighbor.collapsed && neighbor.isHorz === collapseTarget.isHorz) { + return false; + } + } + + if (!(me.constrainTo = me.calculateConstrainRegion())) { + return false; + } + + return true; + }, + + performResize: function(e, offset) { + var me = this, + splitter = me.splitter, + collapseDirection = splitter.collapseDirection, + collapseTarget = splitter.collapseTarget, + + adjusters = me.splitAdjusters[splitter.vertical ? 'horz' : 'vert'], + delta = offset[adjusters.index], + dragInfo = me.dragInfo, + + + + + + owner; + + if (collapseDirection == 'right' || collapseDirection == 'bottom') { + + delta = -delta; + } + + + delta = Math.min(Math.max(dragInfo.minRange, delta), dragInfo.maxRange); + + if (delta) { + (owner = splitter.ownerCt).suspendLayouts(); + + adjusters.adjustTarget(collapseTarget, dragInfo.targetSize, delta); + + + + + + + + + + owner.resumeLayouts(true); + } + }, + + splitAdjusters: { + horz: { + index: 0, + + + + adjustTarget: function (target, size, delta) { + target.flex = null; + target.setSize(size + delta); + } + }, + vert: { + index: 1, + + + + adjustTarget: function (target, targetSize, delta) { + target.flex = null; + target.setSize(undefined, targetSize + delta); + } + } + }, + + getCollapseDirection: function() { + return this.splitter.collapseDirection; + } +}); + + +Ext.define('Ext.resizer.Handle', { + extend: Ext.Component , + handleCls: '', + baseHandleCls: Ext.baseCSSPrefix + 'resizable-handle', + + + region: '', + + beforeRender: function() { + var me = this; + + me.callParent(); + + me.protoEl.unselectable(); + + me.addCls( + me.baseHandleCls, + me.baseHandleCls + '-' + me.region, + me.handleCls + ); + } +}); + + +Ext.define('Ext.resizer.ResizeTracker', { + extend: Ext.dd.DragTracker , + dynamic: true, + preserveRatio: false, + + + constrainTo: null, + + proxyCls: Ext.baseCSSPrefix + 'resizable-proxy', + + constructor: function(config) { + var me = this, + widthRatio, heightRatio, + throttledResizeFn; + + if (!config.el) { + if (config.target.isComponent) { + me.el = config.target.getEl(); + } else { + me.el = config.target; + } + } + this.callParent(arguments); + + + if (me.preserveRatio && me.minWidth && me.minHeight) { + widthRatio = me.minWidth / me.el.getWidth(); + heightRatio = me.minHeight / me.el.getHeight(); + + + + + if (heightRatio > widthRatio) { + me.minWidth = me.el.getWidth() * heightRatio; + } else { + me.minHeight = me.el.getHeight() * widthRatio; + } + } + + + + if (me.throttle) { + throttledResizeFn = Ext.Function.createThrottled(function() { + Ext.resizer.ResizeTracker.prototype.resize.apply(me, arguments); + }, me.throttle); + + me.resize = function(box, direction, atEnd) { + if (atEnd) { + Ext.resizer.ResizeTracker.prototype.resize.apply(me, arguments); + } else { + throttledResizeFn.apply(null, arguments); + } + }; + } + }, + + onBeforeStart: function(e) { + + this.startBox = this.target.getBox(); + }, + + + getDynamicTarget: function() { + var me = this, + target = me.target; + + if (me.dynamic) { + return target; + } else if (!me.proxy) { + me.proxy = me.createProxy(target); + } + me.proxy.show(); + return me.proxy; + }, + + + createProxy: function(target){ + var proxy, + cls = this.proxyCls; + + if (target.isComponent) { + proxy = target.getProxy().addCls(cls); + } else { + proxy = target.createProxy({ + tag: 'div', + cls: cls, + id: target.id + '-rzproxy' + }, Ext.getBody()); + } + proxy.removeCls(Ext.baseCSSPrefix + 'proxy-el'); + return proxy; + }, + + onStart: function(e) { + + this.activeResizeHandle = Ext.get(this.getDragTarget().id); + + + if (!this.dynamic) { + this.resize(this.startBox, { + horizontal: 'none', + vertical: 'none' + }); + } + }, + + onDrag: function(e) { + + if (this.dynamic || this.proxy) { + this.updateDimensions(e); + } + }, + + updateDimensions: function(e, atEnd) { + var me = this, + region = me.activeResizeHandle.region, + offset = me.getOffset(me.constrainTo ? 'dragTarget' : null), + box = me.startBox, + ratio, + widthAdjust = 0, + heightAdjust = 0, + snappedWidth, + snappedHeight, + adjustX = 0, + adjustY = 0, + dragRatio, + horizDir = offset[0] < 0 ? 'right' : 'left', + vertDir = offset[1] < 0 ? 'down' : 'up', + oppositeCorner, + axis, + newBox, + newHeight, newWidth; + + region = me.convertRegionName(region); + + switch (region) { + case 'south': + heightAdjust = offset[1]; + axis = 2; + break; + case 'north': + heightAdjust = -offset[1]; + adjustY = -heightAdjust; + axis = 2; + break; + case 'east': + widthAdjust = offset[0]; + axis = 1; + break; + case 'west': + widthAdjust = -offset[0]; + adjustX = -widthAdjust; + axis = 1; + break; + case 'northeast': + heightAdjust = -offset[1]; + adjustY = -heightAdjust; + widthAdjust = offset[0]; + oppositeCorner = [box.x, box.y + box.height]; + axis = 3; + break; + case 'southeast': + heightAdjust = offset[1]; + widthAdjust = offset[0]; + oppositeCorner = [box.x, box.y]; + axis = 3; + break; + case 'southwest': + widthAdjust = -offset[0]; + adjustX = -widthAdjust; + heightAdjust = offset[1]; + oppositeCorner = [box.x + box.width, box.y]; + axis = 3; + break; + case 'northwest': + heightAdjust = -offset[1]; + adjustY = -heightAdjust; + widthAdjust = -offset[0]; + adjustX = -widthAdjust; + oppositeCorner = [box.x + box.width, box.y + box.height]; + axis = 3; + break; + } + + newBox = { + width: box.width + widthAdjust, + height: box.height + heightAdjust, + x: box.x + adjustX, + y: box.y + adjustY + }; + + + snappedWidth = Ext.Number.snap(newBox.width, me.widthIncrement); + snappedHeight = Ext.Number.snap(newBox.height, me.heightIncrement); + if (snappedWidth != newBox.width || snappedHeight != newBox.height){ + switch (region) { + case 'northeast': + newBox.y -= snappedHeight - newBox.height; + break; + case 'north': + newBox.y -= snappedHeight - newBox.height; + break; + case 'southwest': + newBox.x -= snappedWidth - newBox.width; + break; + case 'west': + newBox.x -= snappedWidth - newBox.width; + break; + case 'northwest': + newBox.x -= snappedWidth - newBox.width; + newBox.y -= snappedHeight - newBox.height; + } + newBox.width = snappedWidth; + newBox.height = snappedHeight; + } + + + if (newBox.width < me.minWidth || newBox.width > me.maxWidth) { + newBox.width = Ext.Number.constrain(newBox.width, me.minWidth, me.maxWidth); + + + if (adjustX) { + newBox.x = box.x + (box.width - newBox.width); + } + } else { + me.lastX = newBox.x; + } + if (newBox.height < me.minHeight || newBox.height > me.maxHeight) { + newBox.height = Ext.Number.constrain(newBox.height, me.minHeight, me.maxHeight); + + + if (adjustY) { + newBox.y = box.y + (box.height - newBox.height); + } + } else { + me.lastY = newBox.y; + } + + + if (me.preserveRatio || e.shiftKey) { + ratio = me.startBox.width / me.startBox.height; + + + newHeight = Math.min(Math.max(me.minHeight, newBox.width / ratio), me.maxHeight); + newWidth = Math.min(Math.max(me.minWidth, newBox.height * ratio), me.maxWidth); + + + if (axis == 1) { + newBox.height = newHeight; + } + + + else if (axis == 2) { + newBox.width = newWidth; + } + + + else { + + + dragRatio = Math.abs(oppositeCorner[0] - this.lastXY[0]) / Math.abs(oppositeCorner[1] - this.lastXY[1]); + + + if (dragRatio > ratio) { + newBox.height = newHeight; + } else { + newBox.width = newWidth; + } + + + if (region == 'northeast') { + newBox.y = box.y - (newBox.height - box.height); + } else if (region == 'northwest') { + newBox.y = box.y - (newBox.height - box.height); + newBox.x = box.x - (newBox.width - box.width); + } else if (region == 'southwest') { + newBox.x = box.x - (newBox.width - box.width); + } + } + } + + if (heightAdjust === 0) { + vertDir = 'none'; + } + if (widthAdjust === 0) { + horizDir = 'none'; + } + me.resize(newBox, { + horizontal: horizDir, + vertical: vertDir + }, atEnd); + }, + + getResizeTarget: function(atEnd) { + return atEnd ? this.target : this.getDynamicTarget(); + }, + + resize: function(box, direction, atEnd) { + var me = this, + target = me.getResizeTarget(atEnd); + + target.setBox(box); + + + if (me.originalTarget && (me.dynamic || atEnd)) { + me.originalTarget.setBox(box); + } + }, + + onEnd: function(e) { + this.updateDimensions(e, true); + if (this.proxy) { + this.proxy.hide(); + } + }, + + convertRegionName: function(name) { + return name; + } +}); + + +Ext.define('Ext.resizer.Resizer', { + mixins: { + observable: Ext.util.Observable + }, + + + alternateClassName: 'Ext.Resizable', + + handleCls: Ext.baseCSSPrefix + 'resizable-handle', + pinnedCls: Ext.baseCSSPrefix + 'resizable-pinned', + overCls: Ext.baseCSSPrefix + 'resizable-over', + wrapCls: Ext.baseCSSPrefix + 'resizable-wrap', + delimiterRe: /(?:\s*[,;]\s*)|\s+/, + + + dynamic: true, + + + handles: 's e se', + + + height : null, + + + width : null, + + + heightIncrement : 0, + + + widthIncrement : 0, + + + minHeight : 20, + + + minWidth : 20, + + + maxHeight : 10000, + + + maxWidth : 10000, + + + pinned: false, + + + preserveRatio: false, + + + transparent: false, + + + + possiblePositions: { + n: 'north', + s: 'south', + e: 'east', + w: 'west', + se: 'southeast', + sw: 'southwest', + nw: 'northwest', + ne: 'northeast' + }, + + + + + + constructor: function(config) { + var me = this, + target, + targetEl, + tag, + handles = me.handles, + handleCls, + possibles, + len, + i = 0, + pos, + handleEls = [], + eastWestStyle, style, + box, targetBaseCls, + unselectableCls = Ext.dom.Element.unselectableCls; + + me.addEvents( + + 'beforeresize', + + 'resizedrag', + + 'resize' + ); + + if (Ext.isString(config) || Ext.isElement(config) || config.dom) { + target = config; + config = arguments[1] || {}; + config.target = target; + } + + me.mixins.observable.constructor.call(me, config); + + + + target = me.target; + if (target) { + if (target.isComponent) { + + + + + target.addClsWithUI('resizable'); + + me.el = target.getEl(); + if (target.minWidth) { + me.minWidth = target.minWidth; + } + if (target.minHeight) { + me.minHeight = target.minHeight; + } + if (target.maxWidth) { + me.maxWidth = target.maxWidth; + } + if (target.maxHeight) { + me.maxHeight = target.maxHeight; + } + if (target.floating) { + if (!me.hasOwnProperty('handles')) { + me.handles = 'n ne e se s sw w nw'; + } + } + } else { + me.el = me.target = Ext.get(target); + } + } + + else { + me.target = me.el = Ext.get(me.el); + } + + + + + tag = me.el.dom.tagName.toUpperCase(); + if (tag == 'TEXTAREA' || tag == 'IMG' || tag == 'TABLE') { + + me.originalTarget = me.target; + targetEl = me.el; + box = targetEl.getBox(); + me.target = me.el = me.el.wrap({ + cls: me.wrapCls, + id: me.el.id + '-rzwrap', + style: targetEl.getStyles('margin-top', 'margin-bottom') + }); + + + me.el.setPositioning(targetEl.getPositioning()); + targetEl.clearPositioning(); + me.el.setBox(box); + + + targetEl.setStyle('position', 'absolute'); + } + + + + me.el.position(); + if (me.pinned) { + me.el.addCls(me.pinnedCls); + } + + + me.resizeTracker = new Ext.resizer.ResizeTracker({ + disabled: me.disabled, + target: me.target, + constrainTo: me.constrainTo, + overCls: me.overCls, + throttle: me.throttle, + originalTarget: me.originalTarget, + delegate: '.' + me.handleCls, + dynamic: me.dynamic, + preserveRatio: me.preserveRatio, + heightIncrement: me.heightIncrement, + widthIncrement: me.widthIncrement, + minHeight: me.minHeight, + maxHeight: me.maxHeight, + minWidth: me.minWidth, + maxWidth: me.maxWidth + }); + + + me.resizeTracker.on({ + mousedown: me.onBeforeResize, + drag: me.onResize, + dragend: me.onResizeEnd, + scope: me + }); + + if (me.handles == 'all') { + me.handles = 'n s e w ne nw se sw'; + } + + handles = me.handles = me.handles.split(me.delimiterRe); + possibles = me.possiblePositions; + len = handles.length; + + handleCls = me.handleCls + ' ' + me.handleCls + '-{0}'; + if (me.target.isComponent) { + targetBaseCls = me.target.baseCls + handleCls += ' ' + targetBaseCls + '-handle ' + targetBaseCls + '-handle-{0}'; + if (Ext.supports.CSS3BorderRadius) { + handleCls += ' ' + targetBaseCls + '-handle-{0}-br'; + } + } + + + eastWestStyle = Ext.isIE6 ? ' style="height:' + me.el.getHeight() + 'px"' : ''; + + for (; i < len; i++){ + + if (handles[i] && possibles[handles[i]]) { + pos = possibles[handles[i]]; + if (pos === 'east' || pos === 'west') { + style = eastWestStyle; + } else { + style = ''; + } + + handleEls.push( + '
    ' + ); + } + } + Ext.DomHelper.append(me.el, handleEls.join('')); + + + for (i = 0; i < len; i++){ + + if (handles[i] && possibles[handles[i]]) { + pos = possibles[handles[i]]; + me[pos] = me.el.getById(me.el.id + '-' + pos + '-handle'); + me[pos].region = pos; + + if (me.transparent) { + me[pos].setOpacity(0); + } + } + } + + + if (Ext.isNumber(me.width)) { + me.width = Ext.Number.constrain(me.width, me.minWidth, me.maxWidth); + } + if (Ext.isNumber(me.height)) { + me.height = Ext.Number.constrain(me.height, me.minHeight, me.maxHeight); + } + + + if (me.width !== null || me.height !== null) { + if (me.originalTarget) { + me.originalTarget.setWidth(me.width); + me.originalTarget.setHeight(me.height); + } + me.resizeTo(me.width, me.height); + } + + me.forceHandlesHeight(); + }, + + disable: function() { + this.resizeTracker.disable(); + }, + + enable: function() { + this.resizeTracker.enable(); + }, + + + onBeforeResize: function(tracker, e) { + var box = this.el.getBox(); + return this.fireEvent('beforeresize', this, box.width, box.height, e); + }, + + + onResize: function(tracker, e) { + var me = this, + box = me.el.getBox(); + + me.forceHandlesHeight(); + return me.fireEvent('resizedrag', me, box.width, box.height, e); + }, + + + onResizeEnd: function(tracker, e) { + var me = this, + box = me.el.getBox(); + + me.forceHandlesHeight(); + return me.fireEvent('resize', me, box.width, box.height, e); + }, + + + resizeTo : function(width, height) { + var me = this; + me.target.setSize(width, height); + me.fireEvent('resize', me, width, height, null); + }, + + + getEl : function() { + return this.el; + }, + + + getTarget: function() { + return this.target; + }, + + destroy: function() { + var me = this, + i, + handles = me.handles, + len = handles.length, + positions = me.possiblePositions, + handle; + + me.resizeTracker.destroy(); + for (i = 0; i < len; i++) { + if (handle = me[positions[handles[i]]]) { + handle.remove(); + } + } + }, + + + forceHandlesHeight : function() { + var me = this, + handle; + if (Ext.isIE6) { + handle = me.east; + if (handle) { + handle.setHeight(me.el.getHeight()); + } + handle = me.west; + if (handle) { + handle.setHeight(me.el.getHeight()); + } + me.el.repaint(); + } + } +}); + + +Ext.define('Ext.slider.Thumb', { + + + topZIndex: 10000, + + + + + constructor: function(config) { + var me = this; + + + Ext.apply(me, config || {}, { + cls: Ext.baseCSSPrefix + 'slider-thumb', + + + constrain: false + }); + me.callParent([config]); + }, + + + render: function() { + var me = this; + me.el = me.slider.innerEl.insertFirst(me.getElConfig()); + me.onRender(); + }, + + onRender: function() { + if (this.disabled) { + this.disable(); + } + this.initEvents(); + }, + + getElConfig: function() { + var me = this, + slider = me.slider, + style = {}; + + style[slider.vertical ? 'bottom' : slider.horizontalProp] = slider.calculateThumbPosition(slider.normalizeValue(me.value)) + '%'; + return { + style: style, + id : this.id, + cls : this.cls + }; + }, + + + move: function(v, animate) { + var me = this, + el = me.el, + slider = me.slider, + styleProp = slider.vertical ? 'bottom' : slider.horizontalProp, + to, + from; + + v += '%'; + + if (!animate) { + el.dom.style[styleProp] = v; + } else { + to = {}; + to[styleProp] = v; + + if (!Ext.supports.GetPositionPercentage) { + from = {}; + from[styleProp] = el.dom.style[styleProp]; + } + + new Ext.fx.Anim({ + target: el, + duration: 350, + from: from, + to: to + }); + } + }, + + + bringToFront: function() { + this.el.setStyle('zIndex', this.topZIndex); + }, + + + sendToBack: function() { + this.el.setStyle('zIndex', ''); + }, + + + enable: function() { + var me = this; + + me.disabled = false; + if (me.el) { + me.el.removeCls(me.slider.disabledCls); + } + }, + + + disable: function() { + var me = this; + + me.disabled = true; + if (me.el) { + me.el.addCls(me.slider.disabledCls); + } + }, + + + initEvents: function() { + var me = this, + el = me.el; + + me.tracker = new Ext.dd.DragTracker({ + onBeforeStart: Ext.Function.bind(me.onBeforeDragStart, me), + onStart : Ext.Function.bind(me.onDragStart, me), + onDrag : Ext.Function.bind(me.onDrag, me), + onEnd : Ext.Function.bind(me.onDragEnd, me), + tolerance : 3, + autoStart : 300, + overCls : Ext.baseCSSPrefix + 'slider-thumb-over' + }); + + me.tracker.initEl(el); + }, + + + onBeforeDragStart : function(e) { + if (this.disabled) { + return false; + } else { + this.slider.promoteThumb(this); + return true; + } + }, + + + onDragStart: function(e){ + var me = this, + slider = me.slider; + + slider.onDragStart(me, e); + me.el.addCls(Ext.baseCSSPrefix + 'slider-thumb-drag'); + me.dragging = me.slider.dragging = true; + me.dragStartValue = me.value; + + slider.fireEvent('dragstart', slider, e, me); + }, + + + onDrag: function(e) { + var me = this, + slider = me.slider, + index = me.index, + newValue = me.getValueFromTracker(), + above, + below; + + + if (newValue !== undefined) { + if (me.constrain) { + above = slider.thumbs[index + 1]; + below = slider.thumbs[index - 1]; + + if (below !== undefined && newValue <= below.value) { + newValue = below.value; + } + + if (above !== undefined && newValue >= above.value) { + newValue = above.value; + } + } + slider.setValue(index, newValue, false); + slider.fireEvent('drag', slider, e, me); + } + }, + + getValueFromTracker: function() { + var slider = this.slider, + trackPoint = slider.getTrackpoint(this.tracker.getXY()); + + + if (trackPoint !== undefined) { + return slider.reversePixelValue(trackPoint); + } + }, + + + onDragEnd: function(e) { + var me = this, + slider = me.slider, + value = me.value; + + slider.onDragEnd(me, e); + me.el.removeCls(Ext.baseCSSPrefix + 'slider-thumb-drag'); + + me.dragging = slider.dragging = false; + slider.fireEvent('dragend', slider, e); + + if (me.dragStartValue != value) { + slider.fireEvent('changecomplete', slider, value, me); + } + }, + + destroy: function() { + Ext.destroy(this.tracker); + } +}); + + +Ext.define('Ext.slider.Tip', { + extend: Ext.tip.Tip , + minWidth: 10, + alias: 'widget.slidertip', + + + offsets : null, + + + align: null, + + + position: '', + + defaultVerticalPosition: 'left', + + defaultHorizontalPosition: 'top', + + isSliderTip: true, + + init: function(slider) { + var me = this, + align, + offsets; + + if (!me.position) { + me.position = slider.vertical ? me.defaultVerticalPosition : me.defaultHorizontalPosition; + } + + switch (me.position) { + case 'top': + offsets = [0, -10]; + align = 'b-t?'; + break; + case 'bottom': + offsets = [0, 10]; + align = 't-b?'; + break; + case 'left': + offsets = [-10, 0]; + align = 'r-l?'; + break; + case 'right': + offsets = [10, 0]; + align = 'l-r?'; + } + + if (!me.align) { + me.align = align; + } + + if (!me.offsets) { + me.offsets = offsets; + } + + slider.on({ + scope : me, + dragstart: me.onSlide, + drag : me.onSlide, + dragend : me.hide, + destroy : me.destroy + }); + }, + + onSlide : function(slider, e, thumb) { + var me = this; + me.show(); + me.update(me.getText(thumb)); + me.el.alignTo(thumb.el, me.align, me.offsets); + }, + + + getText : function(thumb) { + return String(thumb.value); + } +}); + + +Ext.define('Ext.slider.Multi', { + extend: Ext.form.field.Base , + alias: 'widget.multislider', + alternateClassName: 'Ext.slider.MultiSlider', + + + + + + + + + + + childEls: [ + 'endEl', 'innerEl' + ], + + + fieldSubTpl: [ + '
    ', + '', + '
    ', + { + renderThumbs: function(out, values) { + var me = values.$comp, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + thumb, + thumbConfig; + + for (; i < len; i++) { + thumb = thumbs[i]; + thumbConfig = thumb.getElConfig(); + thumbConfig.id = me.id + '-thumb-' + i; + Ext.DomHelper.generateMarkup(thumbConfig, out); + } + }, + disableFormats: true + } + ], + + horizontalProp: 'left', + + + + + + + vertical: false, + + + minValue: 0, + + + maxValue: 100, + + + decimalPrecision: 0, + + + keyIncrement: 1, + + + increment: 0, + + + + + clickRange: [5,15], + + + clickToChange : true, + + + animate: true, + + + dragging: false, + + + constrainThumbs: true, + + componentLayout: 'sliderfield', + + + useTips : true, + + + tipText : null, + + ariaRole: 'slider', + + + initValue: function() { + var me = this, + extValue = Ext.value, + + values = extValue(me.values, [extValue(me.value, extValue(me.minValue, 0))]), + i = 0, + len = values.length; + + + me.originalValue = values; + + + for (; i < len; i++) { + me.addThumb(values[i]); + } + }, + + + initComponent : function() { + var me = this, + tipPlug, + hasTip, + p, pLen, plugins; + + + me.thumbs = []; + + me.keyIncrement = Math.max(me.increment, me.keyIncrement); + + me.addEvents( + + 'beforechange', + + + 'change', + + + 'changecomplete', + + + 'dragstart', + + + 'drag', + + + 'dragend' + ); + + + if (me.increment) { + me.maxValue = Ext.Number.snapInRange(me.maxValue, me.increment, me.minValue); + me.value = me.normalizeValue(me.value); + } + + me.callParent(); + + + if (me.useTips) { + if (Ext.isObject(me.useTips)) { + tipPlug = Ext.apply({}, me.useTips); + } else { + tipPlug = me.tipText ? {getText: me.tipText} : {}; + } + + plugins = me.plugins = me.plugins || []; + pLen = plugins.length; + + for (p = 0; p < pLen; p++) { + if (plugins[p].isSliderTip) { + hasTip = true; + break; + } + } + + if (!hasTip) { + me.plugins.push(new Ext.slider.Tip(tipPlug)); + } + } + }, + + + addThumb: function(value) { + var me = this, + thumb = new Ext.slider.Thumb({ + ownerCt : me, + ownerLayout : me.getComponentLayout(), + value : value, + slider : me, + index : me.thumbs.length, + constrain : me.constrainThumbs, + disabled : !!me.readOnly + }); + + me.thumbs.push(thumb); + + + if (me.rendered) { + thumb.render(); + } + + return thumb; + }, + + + promoteThumb: function(topThumb) { + var thumbs = this.thumbs, + ln = thumbs.length, + zIndex, thumb, i; + + for (i = 0; i < ln; i++) { + thumb = thumbs[i]; + + if (thumb == topThumb) { + thumb.bringToFront(); + } else { + thumb.sendToBack(); + } + } + }, + + + getSubTplData : function() { + var me = this; + + return Ext.apply(me.callParent(), { + $comp: me, + vertical: me.vertical ? Ext.baseCSSPrefix + 'slider-vert' : Ext.baseCSSPrefix + 'slider-horz', + minValue: me.minValue, + maxValue: me.maxValue, + value: me.value, + childElCls: '' + }); + }, + + onRender : function() { + var me = this, + thumbs = me.thumbs, + len = thumbs.length, + i = 0, + thumb; + + me.callParent(arguments); + + for (i = 0; i < len; i++) { + thumb = thumbs[i]; + thumb.el = me.el.getById(me.id + '-thumb-' + i); + thumb.onRender(); + } + }, + + + initEvents : function() { + var me = this; + me.mon(me.el, { + scope : me, + mousedown: me.onMouseDown, + keydown : me.onKeyDown + }); + }, + + onDragStart: Ext.emptyFn, + onDragEnd: Ext.emptyFn, + + + getTrackpoint : function(xy) { + var me = this, + vertical = me.vertical, + sliderTrack = me.innerEl, + trackLength, result, + positionProperty; + + if (vertical) { + positionProperty = 'top'; + trackLength = sliderTrack.getHeight(); + } else { + positionProperty = me.horizontalProp; + trackLength = sliderTrack.getWidth(); + } + xy = me.transformTrackPoints(sliderTrack.translatePoints(xy)); + result = Ext.Number.constrain(xy[positionProperty], 0, trackLength); + return vertical ? trackLength - result : result; + }, + + transformTrackPoints: Ext.identityFn, + + + onMouseDown : function(e) { + var me = this, + thumbClicked = false, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + trackPoint; + + if (me.disabled) { + return; + } + + + for (; i < len; i++) { + thumbClicked = thumbClicked || e.target == thumbs[i].el.dom; + } + + if (me.clickToChange && !thumbClicked) { + trackPoint = me.getTrackpoint(e.getXY()); + if (trackPoint !== undefined) { + me.onClickChange(trackPoint); + } + } + me.focus(); + }, + + + onClickChange : function(trackPoint) { + var me = this, + thumb, index; + + + + + + thumb = me.getNearest(trackPoint); + if (!thumb.disabled) { + index = thumb.index; + me.setValue(index, Ext.util.Format.round(me.reversePixelValue(trackPoint), me.decimalPrecision), undefined, true); + } + }, + + + getNearest: function(trackPoint) { + var me = this, + clickValue = me.reversePixelValue(trackPoint), + nearestDistance = me.getRange() + 5, + nearest = null, + thumbs = me.thumbs, + i = 0, + len = thumbs.length, + thumb, + value, + dist; + + for (; i < len; i++) { + thumb = me.thumbs[i]; + value = thumb.value; + dist = Math.abs(value - clickValue); + + if (Math.abs(dist <= nearestDistance)) { + nearest = thumb; + nearestDistance = dist; + } + } + return nearest; + }, + + + onKeyDown : function(e) { + + var me = this, + k, + val; + + if(me.disabled || me.thumbs.length !== 1) { + e.preventDefault(); + return; + } + k = e.getKey(); + + switch(k) { + case e.UP: + case e.RIGHT: + e.stopEvent(); + val = e.ctrlKey ? me.maxValue : me.getValue(0) + me.keyIncrement; + me.setValue(0, val, undefined, true); + break; + case e.DOWN: + case e.LEFT: + e.stopEvent(); + val = e.ctrlKey ? me.minValue : me.getValue(0) - me.keyIncrement; + me.setValue(0, val, undefined, true); + break; + default: + e.preventDefault(); + } + }, + + + normalizeValue : function(v) { + var me = this, + Num = Ext.Number, + snapFn = Num[me.zeroBasedSnapping ? 'snap' : 'snapInRange']; + + v = snapFn.call(Num, v, me.increment, me.minValue, me.maxValue); + v = Ext.util.Format.round(v, me.decimalPrecision); + v = Ext.Number.constrain(v, me.minValue, me.maxValue); + return v; + }, + + + setMinValue : function(val) { + var me = this, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + t; + + me.minValue = val; + if (me.rendered) { + me.inputEl.dom.setAttribute('aria-valuemin', val); + } + + for (; i < len; ++i) { + t = thumbs[i]; + t.value = t.value < val ? val : t.value; + } + me.syncThumbs(); + }, + + + setMaxValue : function(val) { + var me = this, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + t; + + me.maxValue = val; + if (me.rendered) { + me.inputEl.dom.setAttribute('aria-valuemax', val); + } + + for (; i < len; ++i) { + t = thumbs[i]; + t.value = t.value > val ? val : t.value; + } + me.syncThumbs(); + }, + + + setValue : function(index, value, animate, changeComplete) { + var me = this, + thumbs = me.thumbs, + thumb, len, i, values; + + if (Ext.isArray(index)) { + values = index; + animate = value; + + for (i = 0, len = values.length; i < len; ++i) { + thumb = thumbs[i]; + if (thumb) { + me.setValue(i, values[i], animate); + } + } + return me; + } + + thumb = me.thumbs[index]; + + value = me.normalizeValue(value); + + if (value !== thumb.value && me.fireEvent('beforechange', me, value, thumb.value, thumb) !== false) { + thumb.value = value; + if (me.rendered) { + + + me.inputEl.set({ + 'aria-valuenow': value, + 'aria-valuetext': value + }); + + thumb.move(me.calculateThumbPosition(value), Ext.isDefined(animate) ? animate !== false : me.animate); + + me.fireEvent('change', me, value, thumb); + me.checkDirty(); + if (changeComplete) { + me.fireEvent('changecomplete', me, value, thumb); + } + } + } + return me; + }, + + + calculateThumbPosition : function(v) { + var me = this, + minValue = me.minValue, + pos = (v - minValue) / me.getRange() * 100; + + + if (isNaN(pos)) { + pos = minValue; + } + + return pos; + }, + + + getRatio : function() { + var me = this, + innerEl = me.innerEl, + trackLength = me.vertical ? innerEl.getHeight() : innerEl.getWidth(), + valueRange = me.getRange(); + + return valueRange === 0 ? trackLength : (trackLength / valueRange); + }, + + getRange: function(){ + return this.maxValue - this.minValue; + }, + + + reversePixelValue : function(pos) { + return this.minValue + (pos / this.getRatio()); + }, + + + reversePercentageValue : function(pos) { + return this.minValue + this.getRange() * (pos / 100); + }, + + + onDisable: function() { + var me = this, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + thumb, + el, + xy; + + me.callParent(); + + for (; i < len; i++) { + thumb = thumbs[i]; + el = thumb.el; + + thumb.disable(); + + if(Ext.isIE) { + + + xy = el.getXY(); + el.hide(); + + me.innerEl.addCls(me.disabledCls).dom.disabled = true; + + if (!me.thumbHolder) { + me.thumbHolder = me.endEl.createChild({cls: Ext.baseCSSPrefix + 'slider-thumb ' + me.disabledCls}); + } + + me.thumbHolder.show().setXY(xy); + } + } + }, + + + onEnable: function() { + var me = this, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + thumb, + el; + + this.callParent(); + + for (; i < len; i++) { + thumb = thumbs[i]; + el = thumb.el; + + thumb.enable(); + + if (Ext.isIE) { + me.innerEl.removeCls(me.disabledCls).dom.disabled = false; + + if (me.thumbHolder) { + me.thumbHolder.hide(); + } + + el.show(); + me.syncThumbs(); + } + } + }, + + + syncThumbs : function() { + if (this.rendered) { + var thumbs = this.thumbs, + length = thumbs.length, + i = 0; + + for (; i < length; i++) { + thumbs[i].move(this.calculateThumbPosition(thumbs[i].value)); + } + } + }, + + + getValue : function(index) { + return Ext.isNumber(index) ? this.thumbs[index].value : this.getValues(); + }, + + + getValues: function() { + var values = [], + i = 0, + thumbs = this.thumbs, + len = thumbs.length; + + for (; i < len; i++) { + values.push(thumbs[i].value); + } + + return values; + }, + + getSubmitValue: function() { + var me = this; + return (me.disabled || !me.submitValue) ? null : me.getValue(); + }, + + reset: function() { + var me = this, + arr = [].concat(me.originalValue), + a = 0, + aLen = arr.length, + val; + + for (; a < aLen; a++) { + val = arr[a]; + + me.setValue(a, val); + } + + me.clearInvalid(); + + delete me.wasValid; + }, + + setReadOnly: function(readOnly){ + var me = this, + thumbs = me.thumbs, + len = thumbs.length, + i = 0; + + me.callParent(arguments); + readOnly = me.readOnly; + + for (; i < len; ++i) { + if (readOnly) { + thumbs[i].disable(); + } else { + thumbs[i].enable(); + } + + } + + }, + + + beforeDestroy : function() { + var me = this, + thumbs = me.thumbs, + t = 0, + tLen = thumbs.length, + thumb; + + Ext.destroy(me.innerEl, me.endEl, me.focusEl); + + for (; t < tLen; t++) { + thumb = thumbs[t]; + + Ext.destroy(thumb); + } + + me.callParent(); + } +}); + + +Ext.define('Ext.tab.Tab', { + extend: Ext.button.Button , + alias: 'widget.tab', + + + + + + + isTab: true, + + baseCls: Ext.baseCSSPrefix + 'tab', + + + activeCls: 'active', + + + + + closableCls: 'closable', + + + closable: true, + + + + closeText: 'Close Tab', + + + + active: false, + + + + childEls: [ + 'closeEl' + ], + + scale: false, + + position: 'top', + + initComponent: function() { + var me = this; + + me.addEvents( + + 'activate', + + + 'deactivate', + + + 'beforeclose', + + + 'close' + ); + + me.callParent(arguments); + + if (me.card) { + me.setCard(me.card); + } + + me.overCls = ['over', me.position + '-over']; + }, + + getTemplateArgs: function() { + var me = this, + result = me.callParent(); + + result.closable = me.closable; + result.closeText = me.closeText; + + return result; + }, + + beforeRender: function() { + var me = this, + tabBar = me.up('tabbar'), + tabPanel = me.up('tabpanel'); + + me.callParent(); + + me.addClsWithUI(me.position); + + if (me.active) { + me.addClsWithUI([me.activeCls, me.position + '-' + me.activeCls]); + } + + + + + me.syncClosableUI(); + + + if (!me.minWidth) { + me.minWidth = (tabBar) ? tabBar.minTabWidth : me.minWidth; + if (!me.minWidth && tabPanel) { + me.minWidth = tabPanel.minTabWidth; + } + if (me.minWidth && me.iconCls) { + me.minWidth += 25; + } + } + if (!me.maxWidth) { + me.maxWidth = (tabBar) ? tabBar.maxTabWidth : me.maxWidth; + if (!me.maxWidth && tabPanel) { + me.maxWidth = tabPanel.maxTabWidth; + } + } + }, + + onRender: function() { + var me = this; + + me.setElOrientation(); + + me.callParent(arguments); + + me.keyNav = new Ext.util.KeyNav(me.el, { + enter: me.onEnterKey, + del: me.onDeleteKey, + scope: me + }); + }, + + setElOrientation: function() { + var position = this.position; + + if (position === 'left' || position === 'right') { + this.el.setVertical(position === 'right' ? 90 : 270); + } + }, + + + enable : function(silent) { + var me = this; + + me.callParent(arguments); + + me.removeClsWithUI(me.position + '-disabled'); + + return me; + }, + + + disable : function(silent) { + var me = this; + + me.callParent(arguments); + + me.addClsWithUI(me.position + '-disabled'); + + return me; + }, + + onDestroy: function() { + var me = this; + + Ext.destroy(me.keyNav); + delete me.keyNav; + + me.callParent(arguments); + }, + + + setClosable: function(closable) { + var me = this; + + + closable = (!arguments.length || !!closable); + + if (me.closable != closable) { + me.closable = closable; + + + if (me.card) { + me.card.closable = closable; + } + + me.syncClosableUI(); + + if (me.rendered) { + me.syncClosableElements(); + + + me.updateLayout(); + } + } + }, + + + syncClosableElements: function () { + var me = this, + closeEl = me.closeEl; + + if (me.closable) { + if (!closeEl) { + me.closeEl = me.btnWrap.insertSibling({ + tag: 'a', + cls: me.baseCls + '-close-btn', + href: '#', + title: me.closeText + }, 'after'); + } + } else if (closeEl) { + closeEl.remove(); + delete me.closeEl; + } + }, + + + syncClosableUI: function () { + var me = this, + classes = [me.closableCls, me.closableCls + '-' + me.position]; + + if (me.closable) { + me.addClsWithUI(classes); + } else { + me.removeClsWithUI(classes); + } + }, + + + setCard: function(card) { + var me = this; + + me.card = card; + me.setText(me.title || card.title); + me.setIconCls(me.iconCls || card.iconCls); + me.setIcon(me.icon || card.icon); + me.setGlyph(me.glyph || card.glyph); + }, + + + onCloseClick: function() { + var me = this; + + if (me.fireEvent('beforeclose', me) !== false) { + if (me.tabBar) { + if (me.tabBar.closeTab(me) === false) { + + return; + } + } else { + + me.fireClose(); + } + } + }, + + + fireClose: function(){ + this.fireEvent('close', this); + }, + + + onEnterKey: function(e) { + var me = this; + + if (me.tabBar) { + me.tabBar.onClick(e, me.el); + } + }, + + + onDeleteKey: function(e) { + if (this.closable) { + this.onCloseClick(); + } + }, + + + activate : function(supressEvent) { + var me = this; + + me.active = true; + me.addClsWithUI([me.activeCls, me.position + '-' + me.activeCls]); + + if (supressEvent !== true) { + me.fireEvent('activate', me); + } + }, + + + deactivate : function(supressEvent) { + var me = this; + + me.active = false; + me.removeClsWithUI([me.activeCls, me.position + '-' + me.activeCls]); + + if (supressEvent !== true) { + me.fireEvent('deactivate', me); + } + } +}); + + +Ext.define('Ext.util.Point', { + + + extend: Ext.util.Region , + + statics: { + + + fromEvent: function(e) { + e = e.browserEvent || e; + e = (e.changedTouches && e.changedTouches.length > 0) ? e.changedTouches[0] : e; + return new this(e.pageX, e.pageY); + } + }, + + + + + constructor: function(x, y) { + this.callParent([y, x, y, x]); + }, + + + toString: function() { + return "Point[" + this.x + "," + this.y + "]"; + }, + + + equals: function(p) { + return (this.x == p.x && this.y == p.y); + }, + + + isWithin: function(p, threshold) { + if (!Ext.isObject(threshold)) { + threshold = { + x: threshold, + y: threshold + }; + } + + return (this.x <= p.x + threshold.x && this.x >= p.x - threshold.x && + this.y <= p.y + threshold.y && this.y >= p.y - threshold.y); + }, + + + isContainedBy: function(region) { + if (!(region instanceof Ext.util.Region)) { + region = Ext.get(region.el || region).getRegion(); + } + return region.contains(this); + }, + + + roundedEquals: function(p) { + return (Math.round(this.x) == Math.round(p.x) && Math.round(this.y) == Math.round(p.y)); + } +}, function() { + + this.prototype.translate = Ext.util.Region.prototype.translateBy; +}); + + +Ext.define('Ext.tab.Bar', { + extend: Ext.panel.Header , + alias: 'widget.tabbar', + baseCls: Ext.baseCSSPrefix + 'tab-bar', + + + + + + + + isTabBar: true, + + + + + + + defaultType: 'tab', + + + plain: false, + + childEls: [ + 'body', 'strip' + ], + + + renderTpl: [ + '
    {baseCls}-body-{ui} {parent.baseCls}-body-{parent.ui}-{.}" style="{bodyStyle}">', + '{%this.renderContainer(out,values)%}', + '
    ', + '
    {baseCls}-strip-{ui}', + ' {parent.baseCls}-strip-{parent.ui}-{.}', + '">', + '
    ' + ], + + + + + + _reverseDockNames: { + left: 'right', + right: 'left' + }, + + + initComponent: function() { + var me = this; + + if (me.plain) { + me.addCls(me.baseCls + '-plain'); + } + + me.addClsWithUI(me.orientation); + + me.addEvents( + + 'change' + ); + + + me.callParent(arguments); + Ext.merge(me.layout, me.initialConfig.layout); + + + me.layout.align = (me.orientation == 'vertical') ? 'left' : 'top'; + me.layout.overflowHandler = new Ext.layout.container.boxOverflow.Scroller(me.layout); + + me.remove(me.titleCmp); + delete me.titleCmp; + + Ext.apply(me.renderData, { + bodyCls: me.bodyCls, + dock: me.dock + }); + }, + + onRender: function() { + var me = this; + + me.callParent(); + + if (me.orientation === 'vertical' && (Ext.isIE8 || Ext.isIE9) && Ext.isStrict) { + me.el.on({ + mousemove: me.onMouseMove, + scope: me + }); + } + }, + + afterRender: function() { + var layout = this.layout; + + this.callParent(); + if (Ext.isIE9 && Ext.isStrict && this.orientation === 'vertical') { + + + layout.innerCt.on('scroll', function() { + layout.innerCt.dom.scrollLeft = 0; + }); + } + }, + + afterLayout: function() { + this.adjustTabPositions(); + this.callParent(arguments); + }, + + adjustTabPositions: function() { + var items = this.items.items, + i = items.length, + tab; + + + + + + + if (!Ext.isIE9m) { + if (this.dock === 'right') { + + + while (i--) { + tab = items[i]; + tab.el.setStyle('left', tab.lastBox.width + 'px'); + } + } else if (this.dock === 'left') { + + + while (i--) { + tab = items[i]; + tab.el.setStyle('left', -tab.lastBox.height + 'px'); + } + } + } + }, + + getLayout: function() { + var me = this; + me.layout.type = (me.orientation === 'horizontal') ? 'hbox' : 'vbox'; + return me.callParent(arguments); + }, + + + onAdd: function(tab) { + tab.position = this.dock; + this.callParent(arguments); + }, + + onRemove: function(tab) { + var me = this; + + if (tab === me.previousTab) { + me.previousTab = null; + } + me.callParent(arguments); + }, + + afterComponentLayout : function(width) { + var me = this, + needsScroll = me.needsScroll; + + me.callParent(arguments); + + if (needsScroll) { + me.layout.overflowHandler.scrollToItem(me.activeTab); + } + delete me.needsScroll; + }, + + + onClick: function(e, target) { + var me = this, + tabPanel = me.tabPanel, + tabEl, tab, isCloseClick, tabInfo; + + if (e.getTarget('.' + Ext.baseCSSPrefix + 'box-scroller')) { + return; + } + + if (me.orientation === 'vertical' && (Ext.isIE8 || Ext.isIE9) && Ext.isStrict) { + tabInfo = me.getTabInfoFromPoint(e.getXY()); + tab = tabInfo.tab; + isCloseClick = tabInfo.close; + } else { + + tabEl = e.getTarget('.' + Ext.tab.Tab.prototype.baseCls); + tab = tabEl && Ext.getCmp(tabEl.id); + isCloseClick = tab && tab.closeEl && (target === tab.closeEl.dom); + } + + if (isCloseClick) { + e.preventDefault(); + } + if (tab && tab.isDisabled && !tab.isDisabled()) { + if (tab.closable && isCloseClick) { + tab.onCloseClick(); + } else { + if (tabPanel) { + + tabPanel.setActiveTab(tab.card); + } else { + me.setActiveTab(tab); + } + tab.focus(); + } + } + }, + + + onMouseMove: function(e) { + var me = this, + overTab = me._overTab, + tabInfo, tab; + + if (e.getTarget('.' + Ext.baseCSSPrefix + 'box-scroller')) { + return; + } + + tabInfo = me.getTabInfoFromPoint(e.getXY()); + tab = tabInfo.tab; + + if (tab !== overTab) { + if (overTab && overTab.rendered) { + overTab.onMouseLeave(e); + me._overTab = null; + } + if (tab) { + tab.onMouseEnter(e); + me._overTab = tab; + if (!tab.disabled) { + me.el.setStyle('cursor', 'pointer'); + } + } else { + me.el.setStyle('cursor', 'default'); + } + } + }, + + onMouseLeave: function(e) { + var overTab = this._overTab; + + if (overTab && overTab.rendered) { + overTab.onMouseLeave(e); + } + }, + + + + + + + + getTabInfoFromPoint: function(xy) { + var me = this, + tabs = me.items.items, + length = tabs.length, + innerCt = me.layout.innerCt, + innerCtXY = innerCt.getXY(), + point = new Ext.util.Point(xy[0], xy[1]), + i = 0, + lastBox, tabRegion, closeEl, close, closeXY, closeX, closeY, closeWidth, + closeHeight, tabX, tabY, tabWidth, tabHeight, closeRegion, isTabReversed, + direction, tab; + + for (; i < length; i++) { + lastBox = tabs[i].lastBox; + tabX = innerCtXY[0] + lastBox.x; + tabY = innerCtXY[1] - innerCt.dom.scrollTop + lastBox.y; + tabWidth = lastBox.width; + tabHeight = lastBox.height; + tabRegion = new Ext.util.Region( + tabY, + tabX + tabWidth, + tabY + tabHeight, + tabX + ); + if (tabRegion.contains(point)) { + tab = tabs[i]; + closeEl = tab.closeEl; + if (closeEl) { + closeXY = closeEl.getXY(); + closeWidth = closeEl.getWidth(); + closeHeight = closeEl.getHeight(); + + + + if (me._isTabReversed === undefined) { + me._isTabReversed = isTabReversed = + + + (tab.btnWrap.dom.currentStyle.filter.indexOf('rotation=2') !== -1); + } + + direction = isTabReversed ? this._reverseDockNames[me.dock] : me.dock; + + if (direction === 'right') { + closeX = tabX + tabWidth - ((closeXY[1] - tabY) + closeEl.getHeight()); + closeY = tabY + (closeXY[0] - tabX); + } else { + closeX = tabX + (closeXY[1] - tabY); + closeY = tabY + tabX + tabHeight - closeXY[0] - closeEl.getWidth(); + } + + closeRegion = new Ext.util.Region( + closeY, + closeX + closeWidth, + closeY + closeHeight, + closeX + ); + + close = closeRegion.contains(point); + } + break; + } + } + + return { + tab: tab, + close: close + }; + }, + + + closeTab: function(toClose) { + var me = this, + card = toClose.card, + tabPanel = me.tabPanel, + toActivate; + + if (card && card.fireEvent('beforeclose', card) === false) { + return false; + } + + + + + toActivate = me.findNextActivatable(toClose); + + + + Ext.suspendLayouts(); + + if (tabPanel && card) { + + + delete toClose.ownerCt; + + + + card.fireEvent('close', card); + tabPanel.remove(card); + + + if (!tabPanel.getComponent(card)) { + + toClose.fireClose(); + me.remove(toClose); + } else { + + toClose.ownerCt = me; + Ext.resumeLayouts(true); + return false; + } + } + + + if (toActivate) { + + + if (tabPanel) { + tabPanel.setActiveTab(toActivate.card); + } else { + me.setActiveTab(toActivate); + } + toActivate.focus(); + } + Ext.resumeLayouts(true); + }, + + + + findNextActivatable: function(toClose) { + var me = this; + if (toClose.active && me.items.getCount() > 1) { + return (me.previousTab && me.previousTab !== toClose && !me.previousTab.disabled) ? me.previousTab : (toClose.next('tab[disabled=false]') || toClose.prev('tab[disabled=false]')); + } + }, + + + setActiveTab: function(tab, initial) { + var me = this; + + if (!tab.disabled && tab !== me.activeTab) { + if (me.activeTab) { + if (me.activeTab.isDestroyed) { + me.previousTab = null; + } else { + me.previousTab = me.activeTab; + me.activeTab.deactivate(); + } + } + tab.activate(); + + me.activeTab = tab; + me.needsScroll = true; + + + + if (!initial) { + me.fireEvent('change', me, tab, tab.card); + + + me.updateLayout(); + } + } + } +}); + + +Ext.define('Ext.tree.Column', { + extend: Ext.grid.column.Column , + alias: 'widget.treecolumn', + + tdCls: Ext.baseCSSPrefix + 'grid-cell-treecolumn', + + autoLock: true, + lockable: false, + draggable: false, + hideable: false, + + treePrefix: Ext.baseCSSPrefix + 'tree-', + elbowPrefix: Ext.baseCSSPrefix + 'tree-elbow-', + expanderCls: Ext.baseCSSPrefix + 'tree-expander', + imgText: '', + checkboxText: '', + + initComponent: function() { + var me = this; + + me.origRenderer = me.renderer || me.defaultRenderer; + me.origScope = me.scope || window; + + me.renderer = me.treeRenderer; + me.scope = me; + + me.callParent(); + }, + + treeRenderer: function(value, metaData, record, rowIdx, colIdx, store, view){ + var me = this, + buf = [], + format = Ext.String.format, + depth = record.getDepth(), + treePrefix = me.treePrefix, + elbowPrefix = me.elbowPrefix, + expanderCls = me.expanderCls, + imgText = me.imgText, + checkboxText= me.checkboxText, + formattedValue = me.origRenderer.apply(me.origScope, arguments), + blank = Ext.BLANK_IMAGE_URL, + href = record.get('href'), + target = record.get('hrefTarget'), + cls = record.get('cls'), + + + + + childCls = me.getChildCls ? me.getChildCls() + ' ' : ''; + + while (record) { + if (!record.isRoot() || (record.isRoot() && view.rootVisible)) { + if (record.getDepth() === depth) { + buf.unshift(format(imgText, + childCls + + treePrefix + 'icon ' + + treePrefix + 'icon' + (record.get('icon') ? '-inline ' : (record.isLeaf() ? '-leaf ' : '-parent ')) + + (record.get('iconCls') || ''), + record.get('icon') || blank + )); + if (record.get('checked') !== null) { + buf.unshift(format( + checkboxText, + childCls + (treePrefix + 'checkbox') + (record.get('checked') ? ' ' + treePrefix + 'checkbox-checked' : ''), + record.get('checked') ? 'aria-checked="true"' : '' + )); + if (record.get('checked')) { + metaData.tdCls += (' ' + treePrefix + 'checked'); + } + } + if (record.isLast()) { + if (record.isExpandable()) { + buf.unshift(format(imgText, (childCls + elbowPrefix + 'end-plus ' + expanderCls), blank)); + } else { + buf.unshift(format(imgText, (childCls + elbowPrefix + 'end'), blank)); + } + + } else { + if (record.isExpandable()) { + buf.unshift(format(imgText, (childCls + elbowPrefix + 'plus ' + expanderCls), blank)); + } else { + buf.unshift(format(imgText, (childCls + treePrefix + 'elbow'), blank)); + } + } + } else { + if (record.isLast() || record.getDepth() === 0) { + buf.unshift(format(imgText, (childCls + elbowPrefix + 'empty'), blank)); + } else if (record.getDepth() !== 0) { + buf.unshift(format(imgText, (childCls + elbowPrefix + 'line'), blank)); + } + } + } + record = record.parentNode; + } + if (href) { + buf.push(''); + } else { + buf.push(''); + } + buf.push(formattedValue); + if (href) { + buf.push(''); + } else { + buf.push(''); + } + if (cls) { + metaData.tdCls += ' ' + cls; + } + return buf.join(''); + }, + + defaultRenderer: Ext.identityFn +}); + + +Ext.define('Ext.selection.CellModel', { + extend: Ext.selection.Model , + alias: 'selection.cellmodel', + + + + + + isCellModel: true, + + + enableKeyNav: true, + + + preventWrap: false, + + + noSelection: { + row: -1, + column: -1 + }, + + constructor: function() { + this.addEvents( + + 'deselect', + + + 'select' + ); + this.callParent(arguments); + }, + + bindComponent: function(view) { + var me = this, + grid = view.ownerCt; + me.primaryView = view; + me.views = me.views || []; + me.views.push(view); + me.bindStore(view.getStore(), true); + + view.on({ + cellmousedown: me.onMouseDown, + refresh: me.onViewRefresh, + scope: me + }); + if (grid.optimizedColumnMove !== false) { + grid.on('columnmove', me.onColumnMove, me); + } + + if (me.enableKeyNav) { + me.initKeyNav(view); + } + }, + + initKeyNav: function(view) { + var me = this; + + if (!view.rendered) { + view.on('render', Ext.Function.bind(me.initKeyNav, me, [view], 0), me, {single: true}); + return; + } + + view.el.set({ + tabIndex: -1 + }); + + + + me.keyNav = new Ext.util.KeyNav({ + target: view.el, + ignoreInputFields: true, + up: me.onKeyUp, + down: me.onKeyDown, + right: me.onKeyRight, + left: me.onKeyLeft, + tab: me.onKeyTab, + scope: me + }); + }, + + getHeaderCt: function() { + var selection = this.getCurrentPosition(), + view = selection ? selection.view : this.primaryView; + + return view.headerCt; + }, + + onKeyUp: function(e, t) { + this.doMove('up', e); + }, + + onKeyDown: function(e, t) { + this.doMove('down', e); + }, + + onKeyLeft: function(e, t) { + this.doMove('left', e); + }, + + onKeyRight: function(e, t) { + this.doMove('right', e); + }, + + doMove: function(direction, e){ + this.keyNavigation = true; + this.move(direction, e); + this.keyNavigation = false; + }, + + move: function(dir, e) { + var me = this, + pos = me.getCurrentPosition(), + newPos; + + if (pos) { + + newPos = pos.view.walkCells(pos, dir, e, me.preventWrap); + + if (newPos) { + newPos.view = pos.view; + return me.setCurrentPosition(newPos); + } + } + }, + + + getCurrentPosition: function() { + + + return this.selecting ? this.nextSelection : this.selection; + }, + + + setCurrentPosition: function(pos) { + var me = this, + last = me.selection; + + + me.lastSelection = last; + if (last) { + + if (pos && (pos.row === last.row && pos.column === last.column && pos.view === last.view)) { + pos = null; + } else { + me.onCellDeselect(me.selection); + } + } + + if (pos) { + me.nextSelection = new me.Selection(me); + me.nextSelection.setPosition(pos); + + + me.selecting = true; + me.onCellSelect(me.nextSelection); + me.selecting = false; + + return (me.selection = me.nextSelection); + } + }, + + isCellSelected: function(view, row, column) { + var me = this, + testPos, + pos = me.getCurrentPosition(); + + if (pos && pos.view === view) { + testPos = new this.Selection(me); + testPos.setPosition({ + view: view, + row: row, + column: column + }); + return (testPos.record === pos.record) && (testPos.columnHeader === pos.columnHeader); + } + }, + + + onStoreRemove: function(store, records, indexes) { + var me = this, + pos = me.getCurrentPosition(), + i, length = records.length, + index, shuffleCount = 0; + + me.callParent(arguments); + if (pos) { + + if (indexes[0] > pos.row) { + return; + } + + for (i = 0; i < length; i++) { + index = indexes[i]; + + + if (index < pos.row) { + shuffleCount++; + } + + else { + break; + } + } + + + if (shuffleCount) { + pos.setRow(pos.row - shuffleCount); + } + } + }, + + + onMouseDown: function(view, cell, cellIndex, record, row, recordIndex, e) { + + + if (recordIndex !== -1) { + this.setCurrentPosition({ + view: view, + row: row, + column: cellIndex + }); + } + }, + + + + onCellSelect: function(position, supressEvent) { + if (position && position.row !== undefined && position.row > -1) { + this.doSelect(position.record, false, supressEvent); + } + }, + + + + onCellDeselect: function(position, supressEvent) { + if (position && position.row !== undefined) { + this.doDeselect(position.record, supressEvent); + } + }, + + onSelectChange: function(record, isSelected, suppressEvent, commitFn) { + var me = this, + pos, + eventName, + view; + + if (isSelected) { + pos = me.nextSelection; + eventName = 'select'; + } else { + pos = me.lastSelection || me.noSelection; + eventName = 'deselect'; + } + + + + + view = pos.view || me.primaryView; + + if ((suppressEvent || me.fireEvent('before' + eventName, me, record, pos.row, pos.column)) !== false && + commitFn() !== false) { + + if (isSelected) { + view.onCellSelect(pos); + view.onCellFocus(pos); + } else { + view.onCellDeselect(pos); + delete me.selection; + } + + if (!suppressEvent) { + me.fireEvent(eventName, me, record, pos.row, pos.column); + } + } + }, + + + onKeyTab: function(e, t) { + var me = this, + pos = me.getCurrentPosition(), + editingPlugin; + + if (pos) { + editingPlugin = pos.view.editingPlugin; + + if (editingPlugin && me.wasEditing) { + me.onEditorTab(editingPlugin, e) + } else { + me.move(e.shiftKey ? 'left' : 'right', e); + } + } + }, + + onEditorTab: function(editingPlugin, e) { + var me = this, + direction = e.shiftKey ? 'left' : 'right', + position = me.move(direction, e); + + + if (position) { + + if (editingPlugin.startEdit(position.row, position.column)) { + me.wasEditing = false; + } + + + else { + me.wasEditing = true; + if (!position.columnHeader.dataIndex) { + me.onEditorTab(editingPlugin, e); + } + } + } + }, + + refresh: function() { + var pos = this.getCurrentPosition(), + selRowIdx; + + + if (pos && (selRowIdx = this.store.indexOf(this.selected.last())) !== -1) { + pos.row = selRowIdx; + } + }, + + + onColumnMove: function(headerCt, header, fromIdx, toIdx) { + var grid = headerCt.up('tablepanel'); + if (grid) { + this.onViewRefresh(grid.view); + } + }, + + onUpdate: function(record) { + var me = this, + pos; + + if (me.isSelected(record)) { + pos = me.selecting ? me.nextSelection : me.selection; + me.view.onCellSelect(pos); + } + }, + + onViewRefresh: function(view) { + var me = this, + pos = me.getCurrentPosition(), + headerCt = view.headerCt, + record, columnHeader; + + + + if (pos && pos.view === view) { + record = pos.record; + columnHeader = pos.columnHeader; + + + if (!columnHeader.isDescendantOf(headerCt)) { + + + + columnHeader = headerCt.queryById(columnHeader.id) || + headerCt.down('[text="' + columnHeader.text + '"]') || + headerCt.down('[dataIndex="' + columnHeader.dataIndex + '"]'); + } + + + + + + if (columnHeader && (view.store.indexOfId(record.getId()) !== -1)) { + me.setCurrentPosition({ + row: record, + column: columnHeader, + view: view + }); + } + } + }, + + selectByPosition: function(position) { + this.setCurrentPosition(position); + } +}, function() { + + + + var Selection = this.prototype.Selection = function(model) { + this.model = model; + this.view = model.primaryView; + }; + + Selection.prototype.setPosition = function(row, col) { + var me = this; + + + if (arguments.length === 1) { + + + + if (row.view) { + me.view = row.view; + } + col = row.column; + row = row.row; + } + + me.setRow(row); + me.setColumn(col); + return me; + }; + + Selection.prototype.setRow = function(row) { + var me = this; + if (row !== undefined) { + + if (typeof row === 'number') { + me.row = Math.max(Math.min(row, me.view.store.getCount() - 1), 0); + me.record = me.view.store.getAt(row); + } + + else if (row.isModel) { + me.record = row; + me.row = me.view.indexOf(row); + } + + else if (row.tagName) { + me.record = me.view.getRecord(row); + me.row = me.view.indexOf(me.record); + } + } + }; + + Selection.prototype.setColumn = function(col) { + var me = this; + if (col !== undefined) { + + if (typeof col === 'number') { + me.column = col; + me.columnHeader = me.view.getHeaderAtIndex(col); + } + + else if (col.isHeader) { + me.columnHeader = col; + me.column = col.getIndex(); + } + } + }; +}); + + +Ext.define('Ext.selection.RowModel', { + extend: Ext.selection.Model , + alias: 'selection.rowmodel', + + + + deltaScroll: 5, + + + enableKeyNav: true, + + + ignoreRightMouseSelection: false, + + constructor: function() { + this.addEvents( + + 'beforedeselect', + + + 'beforeselect', + + + 'deselect', + + + 'select' + ); + this.views = []; + this.callParent(arguments); + }, + + bindComponent: function(view) { + var me = this; + + me.views = me.views || []; + me.views.push(view); + me.bindStore(view.getStore(), true); + + view.on({ + itemmousedown: me.onRowMouseDown, + itemclick: me.onRowClick, + scope: me + }); + + if (me.enableKeyNav) { + me.initKeyNav(view); + } + }, + + initKeyNav: function(view) { + var me = this; + + if (!view.rendered) { + view.on('render', Ext.Function.bind(me.initKeyNav, me, [view], 0), me, {single: true}); + return; + } + + + + view.el.set({ + tabIndex: -1 + }); + + + me.keyNav = new Ext.util.KeyNav({ + target: view, + ignoreInputFields: true, + eventName: 'itemkeydown', + processEvent: function(view, record, node, index, event) { + event.record = record; + event.recordIndex = index; + return event; + }, + up: me.onKeyUp, + down: me.onKeyDown, + right: me.onKeyRight, + left: me.onKeyLeft, + pageDown: me.onKeyPageDown, + pageUp: me.onKeyPageUp, + home: me.onKeyHome, + end: me.onKeyEnd, + space: me.onKeySpace, + enter: me.onKeyEnter, + scope: me + }); + }, + + onUpdate: function(record) { + var me = this, + view = me.view, + index; + + if (view && me.isSelected(record)) { + index = view.indexOf(record); + view.onRowSelect(index); + if (record === me.lastFocused) { + view.onRowFocus(index, true); + } + } + }, + + + + + getRowsVisible: function() { + var rowsVisible = false, + view = this.views[0], + firstRow = view.all.first(), + rowHeight, gridViewHeight; + + if (firstRow) { + rowHeight = firstRow.getHeight(); + gridViewHeight = view.el.getHeight(); + rowsVisible = Math.floor(gridViewHeight / rowHeight); + } + + return rowsVisible; + }, + + + onKeyEnd: function(e) { + var me = this, + view = me.views[0]; + + if (view.bufferedRenderer) { + + + + view.bufferedRenderer.scrollTo(me.store.getCount() - 1, false, function(newIdx, newRecord) { + me.afterKeyNavigate(e, newRecord) + }); + } else { + me.afterKeyNavigate(e, view.getRecord(view.all.getCount() - 1)) + } + }, + + + onKeyHome: function(e) { + var me = this, + view = me.views[0]; + + if (view.bufferedRenderer) { + + + + view.bufferedRenderer.scrollTo(0, false, function(newIdx, newRecord) { + me.afterKeyNavigate(e, newRecord) + }); + } else { + me.afterKeyNavigate(e, view.getRecord(0)); + } + }, + + + onKeyPageUp: function(e) { + var me = this, + view = me.views[0], + rowsVisible = me.getRowsVisible(), + newIdx, + newRecord; + + if (rowsVisible) { + + + + if (view.bufferedRenderer) { + newIdx = Math.max(e.recordIndex - rowsVisible, 0); + (me.lastKeyEvent || (me.lastKeyEvent = new Ext.EventObjectImpl())).setEvent(e.browserEvent); + view.bufferedRenderer.scrollTo(newIdx, false, me.afterBufferedScrollTo, me); + } else { + newRecord = view.walkRecs(e.record, -rowsVisible); + me.afterKeyNavigate(e, newRecord); + } + } + }, + + + onKeyPageDown: function(e) { + var me = this, + view = me.views[0], + rowsVisible = me.getRowsVisible(), + newIdx, + newRecord; + + if (rowsVisible) { + + + + if (view.bufferedRenderer) { + newIdx = Math.min(e.recordIndex + rowsVisible, me.store.getCount() - 1); + (me.lastKeyEvent || (me.lastKeyEvent = new Ext.EventObjectImpl())).setEvent(e.browserEvent); + view.bufferedRenderer.scrollTo(newIdx, false, me.afterBufferedScrollTo, me); + } else { + newRecord = view.walkRecs(e.record, rowsVisible); + me.afterKeyNavigate(e, newRecord); + } + } + }, + + + onKeySpace: function(e) { + var record = this.lastFocused; + + if (record) { + this.afterKeyNavigate(e, record); + } + }, + + onKeyEnter: Ext.emptyFn, + + + + + onKeyUp: function(e) { + var newRecord = this.views[0].walkRecs(e.record, -1); + + if (newRecord) { + this.afterKeyNavigate(e, newRecord); + } + }, + + + + + onKeyDown: function(e) { + var newRecord = this.views[0].walkRecs(e.record, 1); + + if (newRecord) { + this.afterKeyNavigate(e, newRecord); + } + }, + + afterBufferedScrollTo: function(newIdx, newRecord) { + this.afterKeyNavigate(this.lastKeyEvent, newRecord) + }, + + scrollByDeltaX: function(delta) { + var view = this.views[0], + section = view.up(), + hScroll = section.horizontalScroller; + + if (hScroll) { + hScroll.scrollByDeltaX(delta); + } + }, + + onKeyLeft: function(e) { + this.scrollByDeltaX(-this.deltaScroll); + }, + + onKeyRight: function(e) { + this.scrollByDeltaX(this.deltaScroll); + }, + + + + onRowMouseDown: function(view, record, item, index, e) { + var me = this; + + + if (index !== -1) { + if (!me.allowRightMouseSelection(e)) { + return; + } + + if (!me.isSelected(record)) { + me.mousedownAction = true; + me.processSelection(view, record, item, index, e); + } else { + me.mousedownAction = false; + } + } + }, + + processSelection: function(view, record, item, index, e) { + this.selectWithEvent(record, e); + }, + + onRowClick: function(view, record, item, index, e) { + if (this.mousedownAction) { + this.mousedownAction = false; + } else { + this.processSelection(view, record, item, index, e); + } + }, + + + allowRightMouseSelection: function(e) { + var disallow = this.ignoreRightMouseSelection && e.button !== 0; + if (disallow) { + disallow = this.hasSelection(); + } + return !disallow; + }, + + + + onSelectChange: function(record, isSelected, suppressEvent, commitFn) { + var me = this, + views = me.views, + viewsLn = views.length, + rowIdx = views[0].indexOf(record), + eventName = isSelected ? 'select' : 'deselect', + i = 0; + + if ((suppressEvent || me.fireEvent('before' + eventName, me, record, rowIdx)) !== false && + commitFn() !== false) { + + for (; i < viewsLn; i++) { + if (isSelected) { + views[i].onRowSelect(rowIdx, suppressEvent); + } else { + views[i].onRowDeselect(rowIdx, suppressEvent); + } + } + + if (!suppressEvent) { + me.fireEvent(eventName, me, record, rowIdx); + } + } + }, + + + + onLastFocusChanged: function(oldFocused, newFocused, supressFocus) { + var views = this.views, + viewsLn = views.length, + rowIdx, + i = 0; + + if (oldFocused) { + rowIdx = views[0].indexOf(oldFocused); + if (rowIdx != -1) { + for (; i < viewsLn; i++) { + views[i].onRowFocus(rowIdx, false); + } + } + } + + if (newFocused) { + rowIdx = views[0].indexOf(newFocused); + if (rowIdx != -1) { + for (i = 0; i < viewsLn; i++) { + views[i].onRowFocus(rowIdx, true, supressFocus); + } + } + } + this.callParent(arguments); + }, + + onEditorTab: function(editingPlugin, e) { + var me = this, + view = me.views[0], + record = editingPlugin.getActiveRecord(), + header = editingPlugin.getActiveColumn(), + position = view.getPosition(record, header), + direction = e.shiftKey ? 'left' : 'right'; + + + + + + + do { + position = view.walkCells(position, direction, e, me.preventWrap); + } while(position && (!view.headerCt.getHeaderAtIndex(position.column).getEditor(record) || !editingPlugin.startEditByPosition(position))); + }, + + + getCurrentPosition: function() { + var firstSelection = this.selected.items[0]; + if (firstSelection) { + return { + row: this.store.indexOf(firstSelection), + column: 0 + }; + } + }, + + selectByPosition: function(position) { + var record = this.store.getAt(position.row); + this.select(record); + }, + + + selectNext: function(keepExisting, suppressEvent) { + var me = this, + store = me.store, + selection = me.getSelection(), + record = selection[selection.length - 1], + index = me.views[0].indexOf(record) + 1, + success; + + if(index === store.getCount() || index === 0) { + success = false; + } else { + me.doSelect(index, keepExisting, suppressEvent); + success = true; + } + return success; + }, + + + selectPrevious: function(keepExisting, suppressEvent) { + var me = this, + selection = me.getSelection(), + record = selection[0], + index = me.views[0].indexOf(record) - 1, + success; + + if (index < 0) { + success = false; + } else { + me.doSelect(index, keepExisting, suppressEvent); + success = true; + } + return success; + }, + + isRowSelected: function(record, index) { + return this.isSelected(record); + } +}); + + +Ext.define('Ext.selection.CheckboxModel', { + alias: 'selection.checkboxmodel', + extend: Ext.selection.RowModel , + + + mode: 'MULTI', + + + injectCheckbox: 0, + + + checkOnly: false, + + + showHeaderCheckbox: undefined, + + + checkSelector: '.' + Ext.baseCSSPrefix + 'grid-row-checker', + + headerWidth: 24, + + + checkerOnCls: Ext.baseCSSPrefix + 'grid-hd-checker-on', + + constructor: function(){ + var me = this; + me.callParent(arguments); + + + + if (me.mode === 'SINGLE' && me.showHeaderCheckbox !== true) { + me.showHeaderCheckbox = false; + } + }, + + beforeViewRender: function(view) { + var me = this, + views = me.views, + owner; + + me.callParent(arguments); + + if (Ext.Array.indexOf(views, view) === -1) { + views.push(view); + } + + + if (!me.hasLockedHeader() || view.headerCt.lockedCt) { + if (me.showHeaderCheckbox !== false) { + view.headerCt.on('headerclick', me.onHeaderClick, me); + } + me.addCheckbox(view, true); + owner = view.ownerCt; + + if (view.headerCt.lockedCt) { + owner = owner.ownerCt; + } + me.mon(owner, 'reconfigure', me.onReconfigure, me); + } + }, + + bindComponent: function(view) { + var me = this; + me.sortable = false; + me.callParent(arguments); + }, + + hasLockedHeader: function(){ + var views = this.views, + vLen = views.length, + v; + + for (v = 0; v < vLen; v++) { + if (views[v].headerCt.lockedCt) { + return true; + } + } + return false; + }, + + + addCheckbox: function(view, initial){ + var me = this, + checkbox = me.injectCheckbox, + headerCt = view.headerCt; + + + if (checkbox !== false) { + if (checkbox == 'first') { + checkbox = 0; + } else if (checkbox == 'last') { + checkbox = headerCt.getColumnCount(); + } + Ext.suspendLayouts(); + if (view.getStore().buffered) { + me.showHeaderCheckbox = false; + } + headerCt.add(checkbox, me.getHeaderConfig()); + Ext.resumeLayouts(); + } + + if (initial !== true) { + view.refresh(); + } + }, + + + onReconfigure: function(grid, store, columns) { + if(columns) { + this.addCheckbox(this.views[0]); + } + }, + + + toggleUiHeader: function(isChecked) { + var view = this.views[0], + headerCt = view.headerCt, + checkHd = headerCt.child('gridcolumn[isCheckerHd]'), + cls = this.checkerOnCls; + + if (checkHd) { + if (isChecked) { + checkHd.addCls(cls); + } else { + checkHd.removeCls(cls); + } + } + }, + + + onHeaderClick: function(headerCt, header, e) { + if (header.isCheckerHd) { + e.stopEvent(); + var me = this, + isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on'); + + + me.preventFocus = true; + if (isChecked) { + me.deselectAll(); + } else { + me.selectAll(); + } + delete me.preventFocus; + } + }, + + + getHeaderConfig: function() { + var me = this, + showCheck = me.showHeaderCheckbox !== false; + + return { + isCheckerHd: showCheck, + text : ' ', + width: me.headerWidth, + sortable: false, + draggable: false, + resizable: false, + hideable: false, + menuDisabled: true, + dataIndex: '', + cls: showCheck ? Ext.baseCSSPrefix + 'column-header-checkbox ' : '', + renderer: Ext.Function.bind(me.renderer, me), + editRenderer: me.editRenderer || me.renderEmpty, + locked: me.hasLockedHeader() + }; + }, + + renderEmpty: function() { + return ' '; + }, + + + refresh: function() { + this.callParent(arguments); + this.updateHeaderState(); + }, + + + renderer: function(value, metaData, record, rowIndex, colIndex, store, view) { + var baseCSSPrefix = Ext.baseCSSPrefix; + metaData.tdCls = baseCSSPrefix + 'grid-cell-special ' + baseCSSPrefix + 'grid-cell-row-checker'; + return '
     
    '; + }, + + processSelection: function(view, record, item, index, e){ + var me = this, + checker = e.getTarget(me.checkSelector), + mode; + + + if (me.checkOnly && !checker) { + return; + } + + if (checker) { + mode = me.getSelectionMode(); + + + if (mode !== 'SINGLE') { + me.setSelectionMode('SIMPLE'); + } + me.selectWithEvent(record, e); + me.setSelectionMode(mode); + } else { + me.selectWithEvent(record, e); + } + }, + + + onSelectChange: function() { + this.callParent(arguments); + if (!this.bulkChange) { + this.updateHeaderState(); + } + }, + + + onStoreLoad: function() { + this.callParent(arguments); + this.updateHeaderState(); + }, + + onStoreAdd: function() { + this.callParent(arguments); + this.updateHeaderState(); + }, + + onStoreRemove: function() { + this.callParent(arguments); + this.updateHeaderState(); + }, + + onStoreRefresh: function(){ + this.callParent(arguments); + this.updateHeaderState(); + }, + + maybeFireSelectionChange: function(fireEvent) { + if (fireEvent && !this.bulkChange) { + this.updateHeaderState(); + } + this.callParent(arguments); + }, + + + updateHeaderState: function() { + + var me = this, + store = me.store, + storeCount = store.getCount(), + views = me.views, + hdSelectStatus = false, + selectedCount = 0, + selected, len, i; + + if (!store.buffered && storeCount > 0) { + selected = me.selected; + hdSelectStatus = true; + for (i = 0, len = selected.getCount(); i < len; ++i) { + if (!me.storeHasSelected(selected.getAt(i))) { + break; + } + ++selectedCount; + } + hdSelectStatus = storeCount === selectedCount; + } + + if (views && views.length) { + me.toggleUiHeader(hdSelectStatus); + } + } +}); + + +Ext.define('Ext.selection.TreeModel', { + extend: Ext.selection.RowModel , + alias: 'selection.treemodel', + + + + constructor: function(config) { + this.callParent(arguments); + + + + if (this.pruneRemoved) { + this.pruneRemoved = false; + this.pruneRemovedNodes = true; + } + }, + + + bindStore: function(store, initial) { + var me = this; + me.callParent(arguments); + + + + if (me.pruneRemovedNodes) { + me.view.mon(me.treeStore, { + remove: me.onNodeRemove, + scope: me + }); + } + }, + + onNodeRemove: function(parent, node, isMove) { + + if (!isMove) { + this.deselectDeletedRecords([node]); + } + }, + + onKeyRight: function(e, t) { + var focused = this.getLastFocused(), + view = this.view; + + if (focused) { + + + + if (focused.isExpanded()) { + this.onKeyDown(e, t); + + } else if (focused.isExpandable()) { + + if (!view.isTreeView) { + view = view.lockingPartner; + } + + view.expand(focused); + } + } + }, + + onKeyLeft: function(e, t) { + var me = this, + focused = this.getLastFocused(), + view = this.view, + parentNode; + + if (focused) { + parentNode = focused.parentNode; + + if (focused.isExpanded()) { + + if (!view.isTreeView) { + view = view.lockingPartner; + } + + view.collapse(focused); + + + } else if (parentNode && !parentNode.isRoot()) { + + if (e.shiftKey) { + me.selectRange(parentNode, focused, e.ctrlKey, 'up'); + me.setLastFocused(parentNode); + + } else if (e.ctrlKey) { + me.setLastFocused(parentNode); + + } else { + me.select(parentNode); + } + } + } + }, + + onKeySpace: function(e, t) { + if (e.record.data.checked != null) { + this.toggleCheck(e); + } else { + this.callParent(arguments); + } + }, + + onKeyEnter: function(e, t) { + if (e.record.data.checked != null) { + this.toggleCheck(e); + } else { + this.callParent(arguments); + } + }, + + toggleCheck: function(e) { + var view = this.view, + selected = this.getLastSelected(); + + e.stopEvent(); + if (selected) { + + if (!view.isTreeView) { + view = view.lockingPartner; + } + + view.onCheckChange(selected); + } + } +}); + + +Ext.define('Ext.slider.Single', { + extend: Ext.slider.Multi , + alias: ['widget.slider', 'widget.sliderfield'], + alternateClassName: ['Ext.Slider', 'Ext.form.SliderField', 'Ext.slider.SingleSlider', 'Ext.slider.Slider'], + + + getValue: function() { + + return this.callParent([0]); + }, + + + setValue: function(value, animate) { + var args = arguments, + len = args.length; + + + + + if (len == 1 || (len <= 3 && typeof args[1] != 'number')) { + args = Ext.toArray(args); + args.unshift(0); + } + return this.callParent(args); + }, + + + getNearest : function(){ + + return this.thumbs[0]; + } +}); + + +Ext.define('Ext.state.CookieProvider', { + extend: Ext.state.Provider , + + + + + + + + + + + constructor : function(config){ + var me = this; + me.path = "/"; + me.expires = new Date(new Date().getTime()+(1000*60*60*24*7)); + me.domain = null; + me.secure = false; + me.callParent(arguments); + me.state = me.readCookies(); + }, + + + set : function(name, value){ + var me = this; + + if(typeof value == "undefined" || value === null){ + me.clear(name); + return; + } + me.setCookie(name, value); + me.callParent(arguments); + }, + + + clear : function(name){ + this.clearCookie(name); + this.callParent(arguments); + }, + + + readCookies : function(){ + var cookies = {}, + c = document.cookie + ";", + re = /\s?(.*?)=(.*?);/g, + prefix = this.prefix, + len = prefix.length, + matches, + name, + value; + + while((matches = re.exec(c)) != null){ + name = matches[1]; + value = matches[2]; + if (name && name.substring(0, len) == prefix){ + cookies[name.substr(len)] = this.decodeValue(value); + } + } + return cookies; + }, + + + setCookie : function(name, value){ + var me = this; + + document.cookie = me.prefix + name + "=" + me.encodeValue(value) + + ((me.expires == null) ? "" : ("; expires=" + me.expires.toGMTString())) + + ((me.path == null) ? "" : ("; path=" + me.path)) + + ((me.domain == null) ? "" : ("; domain=" + me.domain)) + + ((me.secure == true) ? "; secure" : ""); + }, + + + clearCookie : function(name){ + var me = this; + + document.cookie = me.prefix + name + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" + + ((me.path == null) ? "" : ("; path=" + me.path)) + + ((me.domain == null) ? "" : ("; domain=" + me.domain)) + + ((me.secure == true) ? "; secure" : ""); + } +}); + + + +Ext.define('Ext.state.LocalStorageProvider', { + + + extend: Ext.state.Provider , + + alias: 'state.localstorage', + + + + constructor: function(){ + var me = this; + me.callParent(arguments); + me.store = me.getStorageObject(); + if (me.store) { + me.state = me.readLocalStorage(); + } else { + me.state = {}; + } + }, + + readLocalStorage: function(){ + var store = this.store, + i = 0, + len = store.length, + prefix = this.prefix, + prefixLen = prefix.length, + data = {}, + key; + + for (; i < len; ++i) { + key = store.key(i); + if (key.substring(0, prefixLen) == prefix) { + data[key.substr(prefixLen)] = this.decodeValue(store.getItem(key)); + } + } + return data; + }, + + set : function(name, value){ + var me = this; + + me.clear(name); + if (typeof value == "undefined" || value === null) { + return; + } + me.store.setItem(me.prefix + name, me.encodeValue(value)); + me.callParent(arguments); + }, + + + clear : function(name){ + this.store.removeItem(this.prefix + name); + this.callParent(arguments); + }, + + getStorageObject: function(){ + if (Ext.supports.LocalStorage) { + return window.localStorage; + } + return false; + } +}); + + +Ext.define('Ext.tab.Panel', { + extend: Ext.panel.Panel , + alias: 'widget.tabpanel', + alternateClassName: ['Ext.TabPanel'], + + + + + tabPosition : 'top', + + + + + + + + + + + removePanelHeader: true, + + + plain: false, + + + itemCls: Ext.baseCSSPrefix + 'tabpanel-child', + + + minTabWidth: undefined, + + + maxTabWidth: undefined, + + + deferredRender : true, + + + initComponent: function() { + var me = this, + dockedItems = [].concat(me.dockedItems || []), + activeTab = me.activeTab || (me.activeTab = 0), + tabPosition = me.tabPosition; + + + me.layout = new Ext.layout.container.Card(Ext.apply({ + owner: me, + deferredRender: me.deferredRender, + itemCls: me.itemCls, + activeItem: activeTab + }, me.layout)); + + + me.tabBar = new Ext.tab.Bar(Ext.apply({ + dock: me.tabPosition, + orientation: (tabPosition == 'top' || tabPosition == 'bottom') ? 'horizontal' : 'vertical', + plain: me.plain, + cardLayout: me.layout, + tabPanel: me + }, me.tabBar)); + + dockedItems.push(me.tabBar); + me.dockedItems = dockedItems; + + me.addEvents( + + 'beforetabchange', + + + 'tabchange' + ); + + me.callParent(arguments); + + + activeTab = me.activeTab = me.getComponent(activeTab); + + + if (activeTab) { + me.tabBar.setActiveTab(activeTab.tab, true); + } + }, + + + setActiveTab: function(card) { + var me = this, + previous; + + card = me.getComponent(card); + if (card) { + previous = me.getActiveTab(); + + if (previous !== card && me.fireEvent('beforetabchange', me, card, previous) === false) { + return false; + } + + + + if (!card.isComponent) { + Ext.suspendLayouts(); + card = me.add(card); + Ext.resumeLayouts(); + } + + + + me.activeTab = card; + + + + + Ext.suspendLayouts(); + me.layout.setActiveItem(card); + + + card = me.activeTab = me.layout.getActiveItem(); + + + if (card && card !== previous) { + + + me.tabBar.setActiveTab(card.tab); + Ext.resumeLayouts(true); + + + if (previous !== card) { + me.fireEvent('tabchange', me, card, previous); + } + } + + else { + Ext.resumeLayouts(true); + } + return card; + } + }, + + + getActiveTab: function() { + var me = this, + + result = me.getComponent(me.activeTab); + + + if (result && me.items.indexOf(result) != -1) { + me.activeTab = result; + } else { + me.activeTab = null; + } + + return me.activeTab; + }, + + + getTabBar: function() { + return this.tabBar; + }, + + + onAdd: function(item, index) { + var me = this, + cfg = item.tabConfig || {}, + defaultConfig = { + xtype: 'tab', + card: item, + disabled: item.disabled, + closable: item.closable, + hidden: item.hidden && !item.hiddenByLayout, + tooltip: item.tooltip, + tabBar: me.tabBar, + position: me.tabPosition, + closeText: item.closeText + }; + + cfg = Ext.applyIf(cfg, defaultConfig); + + + item.tab = me.tabBar.insert(index, cfg); + + item.on({ + scope : me, + enable: me.onItemEnable, + disable: me.onItemDisable, + beforeshow: me.onItemBeforeShow, + iconchange: me.onItemIconChange, + iconclschange: me.onItemIconClsChange, + titlechange: me.onItemTitleChange + }); + + if (item.isPanel) { + if (me.removePanelHeader) { + if (item.rendered) { + if (item.header) { + item.header.hide(); + } + } else { + item.header = false; + } + } + if (item.isPanel && me.border) { + item.setBorder(false); + } + } + }, + + + onItemEnable: function(item){ + item.tab.enable(); + }, + + + onItemDisable: function(item){ + item.tab.disable(); + }, + + + onItemBeforeShow: function(item) { + if (item !== this.activeTab) { + this.setActiveTab(item); + return false; + } + }, + + + onItemIconChange: function(item, newIcon) { + item.tab.setIcon(newIcon); + }, + + + onItemIconClsChange: function(item, newIconCls) { + item.tab.setIconCls(newIconCls); + }, + + + onItemTitleChange: function(item, newTitle) { + item.tab.setText(newTitle); + }, + + + doRemove: function(item, autoDestroy) { + var me = this, + toActivate; + + + if (me.destroying || me.items.getCount() == 1) { + me.activeTab = null; + } + + + + else if ((toActivate = me.tabBar.items.indexOf(me.tabBar.findNextActivatable(item.tab))) !== -1) { + me.setActiveTab(toActivate); + } + this.callParent(arguments); + + + delete item.tab.card; + delete item.tab; + }, + + + onRemove: function(item, destroying) { + var me = this; + + item.un({ + scope : me, + enable: me.onItemEnable, + disable: me.onItemDisable, + beforeshow: me.onItemBeforeShow + }); + if (!me.destroying && item.tab.ownerCt === me.tabBar) { + me.tabBar.remove(item.tab); + } + } +}); + + +Ext.define('Ext.toolbar.Spacer', { + extend: Ext.Component , + alias: 'widget.tbspacer', + alternateClassName: 'Ext.Toolbar.Spacer', + baseCls: Ext.baseCSSPrefix + 'toolbar-spacer', + focusable: false +}); + + +Ext.define('Ext.tree.Panel', { + extend: Ext.panel.Table , + alias: 'widget.treepanel', + alternateClassName: ['Ext.tree.TreePanel', 'Ext.TreePanel'], + + viewType: 'treeview', + selType: 'treemodel', + + treeCls: Ext.baseCSSPrefix + 'tree-panel', + + deferRowRender: false, + + + rowLines: false, + + + lines: true, + + + useArrows: false, + + + singleExpand: false, + + ddConfig: { + enableDrag: true, + enableDrop: true + }, + + + + + rootVisible: true, + + + displayField: 'text', + + + root: null, + + + + normalCfgCopy: ['displayField', 'root', 'singleExpand', 'useArrows', 'lines', 'rootVisible', 'scroll'], + lockedCfgCopy: ['displayField', 'root', 'singleExpand', 'useArrows', 'lines', 'rootVisible'], + + isTree: true, + + + + + + + + arrowCls: Ext.baseCSSPrefix + 'tree-arrows', + linesCls: Ext.baseCSSPrefix + 'tree-lines', + noLinesCls: Ext.baseCSSPrefix + 'tree-no-lines', + autoWidthCls: Ext.baseCSSPrefix + 'autowidth-table', + + constructor: function(config) { + config = config || {}; + if (config.animate === undefined) { + config.animate = Ext.isDefined(this.animate) ? this.animate : Ext.enableFx; + } + this.enableAnimations = config.animate; + delete config.animate; + + this.callParent([config]); + }, + + initComponent: function() { + var me = this, + cls = [me.treeCls], + store = me.store, + view; + + if (me.useArrows) { + cls.push(me.arrowCls); + me.lines = false; + } + + if (me.lines) { + cls.push(me.linesCls); + } else if (!me.useArrows) { + cls.push(me.noLinesCls); + } + + if (Ext.isString(store)) { + store = me.store = Ext.StoreMgr.lookup(store); + } else if (!store || Ext.isObject(store) && !store.isStore) { + store = me.store = new Ext.data.TreeStore(Ext.apply({ + root: me.root, + fields: me.fields, + model: me.model, + folderSort: me.folderSort + }, store)); + } else if (me.root) { + store = me.store = Ext.data.StoreManager.lookup(store); + store.setRootNode(me.root); + if (me.folderSort !== undefined) { + store.folderSort = me.folderSort; + store.sort(); + } + } + + + + + + + me.viewConfig = Ext.apply({ + rootVisible: me.rootVisible, + animate: me.enableAnimations, + singleExpand: me.singleExpand, + node: store.getRootNode(), + hideHeaders: me.hideHeaders + }, me.viewConfig); + + + if (!me.columns) { + if (me.initialConfig.hideHeaders === undefined) { + me.hideHeaders = true; + } + me.addCls(me.autoWidthCls); + me.columns = [{ + xtype : 'treecolumn', + text : 'Name', + width : Ext.isIE6 ? '100%' : 10000, + dataIndex: me.displayField + }]; + } + + if (me.cls) { + cls.push(me.cls); + } + me.cls = cls.join(' '); + + me.callParent(); + + + + me.selModel.treeStore = me.store; + + view = me.getView(); + + + + me.relayEvents(view, [ + + 'checkchange', + + 'afteritemexpand', + + 'afteritemcollapse' + ]); + + + if (!view.isLockingView) { + + if (!view.rootVisible && !me.getRootNode()) { + me.setRootNode({ + expanded: true + }); + } + } + }, + + + + + + bindStore: function(store) { + var me = this; + + me.store = store; + + + me.storeListeners = me.mon(store, { + destroyable: true, + load: me.onStoreLoad, + rootchange: me.onRootChange, + clear: me.onClear, + scope: me + }); + + + me.storeRelayers = me.relayEvents(store, [ + + 'beforeload', + + + 'load' + ]); + + + me.storeRelayers1 = me.mon(store, { + destroyable: true, + + + append: me.createRelayer('itemappend'), + + + remove: me.createRelayer('itemremove'), + + + move: me.createRelayer('itemmove', [0, 4]), + + + insert: me.createRelayer('iteminsert'), + + + beforeappend: me.createRelayer('beforeitemappend'), + + + beforeremove: me.createRelayer('beforeitemremove'), + + + beforemove: me.createRelayer('beforeitemmove'), + + + beforeinsert: me.createRelayer('beforeiteminsert'), + + + expand: me.createRelayer('itemexpand', [0, 1]), + + + collapse: me.createRelayer('itemcollapse', [0, 1]), + + + beforeexpand: me.createRelayer('beforeitemexpand', [0, 1]), + + + beforecollapse: me.createRelayer('beforeitemcollapse', [0, 1]) + }); + + + store.ownerTree = me; + }, + + + + unbindStore: function() { + var me = this, + store = me.store; + + if (store) { + Ext.destroy(me.storeListeners, me.storeRelayers, me.storeRelayers1); + delete store.ownerTree; + } + }, + + onClear: function(){ + this.view.onClear(); + }, + + + setRootNode: function() { + return this.store.setRootNode.apply(this.store, arguments); + }, + + + getRootNode: function() { + return this.store.getRootNode(); + }, + + onRootChange: function(root) { + this.view.setRootNode(root); + }, + + + getChecked: function() { + return this.getView().getChecked(); + }, + + isItemChecked: function(rec) { + return rec.get('checked'); + }, + + + expandNode: function(record, deep, callback, scope) { + return this.getView().expand(record, deep, callback, scope || this); + }, + + + collapseNode: function(record, deep, callback, scope) { + return this.getView().collapse(record, deep, callback, scope || this); + }, + + + expandAll : function(callback, scope) { + var me = this, + root = me.getRootNode(), + animate = me.enableAnimations; + if (root) { + if (!animate) { + Ext.suspendLayouts(); + } + root.expand(true, callback, scope || me); + if (!animate) { + Ext.resumeLayouts(true); + } + } + }, + + + collapseAll : function(callback, scope) { + var me = this, + root = me.getRootNode(), + animate = me.enableAnimations, + view = me.getView(); + + if (root) { + if (!animate) { + Ext.suspendLayouts(); + } + scope = scope || me; + if (view.rootVisible) { + root.collapse(true, callback, scope); + } else { + root.collapseChildren(true, callback, scope); + } + if (!animate) { + Ext.resumeLayouts(true); + } + } + }, + + + expandPath: function(path, field, separator, callback, scope) { + var me = this, + current = me.getRootNode(), + index = 1, + view = me.getView(), + keys, + expander; + + field = field || me.getRootNode().idProperty; + separator = separator || '/'; + + if (Ext.isEmpty(path)) { + Ext.callback(callback, scope || me, [false, null]); + return; + } + + keys = path.split(separator); + if (current.get(field) != keys[1]) { + + Ext.callback(callback, scope || me, [false, current]); + return; + } + + expander = function(){ + if (++index === keys.length) { + Ext.callback(callback, scope || me, [true, current]); + return; + } + var node = current.findChild(field, keys[index]); + if (!node) { + Ext.callback(callback, scope || me, [false, current]); + return; + } + current = node; + current.expand(false, expander); + }; + current.expand(false, expander); + }, + + + selectPath: function(path, field, separator, callback, scope) { + var me = this, + root, + keys, + last; + + field = field || me.getRootNode().idProperty; + separator = separator || '/'; + + keys = path.split(separator); + last = keys.pop(); + if (keys.length > 1) { + me.expandPath(keys.join(separator), field, separator, function(success, node){ + var lastNode = node; + if (success && node) { + node = node.findChild(field, last); + if (node) { + me.getSelectionModel().select(node); + Ext.callback(callback, scope || me, [true, node]); + return; + } + } + Ext.callback(callback, scope || me, [false, lastNode]); + }, me); + } else { + root = me.getRootNode(); + if (root.getId() === last) { + me.getSelectionModel().select(root); + Ext.callback(callback, scope || me, [true, root]); + } else { + Ext.callback(callback, scope || me, [false, null]); + } + } + } +}); + + +Ext.define('Ext.view.DragZone', { + extend: Ext.dd.DragZone , + containerScroll: false, + + constructor: function(config) { + var me = this, + view, + ownerCt, + el; + + Ext.apply(me, config); + + + + + + + if (!me.ddGroup) { + me.ddGroup = 'view-dd-zone-' + me.view.id; + } + + + + + + + + + view = me.view; + ownerCt = view.ownerCt; + + + if (ownerCt) { + el = ownerCt.getTargetEl().dom; + } else { + el = view.el.dom.parentNode; + } + me.callParent([el]); + + me.ddel = Ext.get(document.createElement('div')); + me.ddel.addCls(Ext.baseCSSPrefix + 'grid-dd-wrap'); + }, + + init: function(id, sGroup, config) { + this.initTarget(id, sGroup, config); + this.view.mon(this.view, { + itemmousedown: this.onItemMouseDown, + scope: this + }); + }, + + onValidDrop: function(target, e, id) { + this.callParent(); + + target.el.focus(); + }, + + onItemMouseDown: function(view, record, item, index, e) { + if (!this.isPreventDrag(e, record, item, index)) { + + + + this.view.focus(); + this.handleMouseDown(e); + } + }, + + + isPreventDrag: function(e) { + return false; + }, + + getDragData: function(e) { + var view = this.view, + item = e.getTarget(view.getItemSelector()); + + if (item) { + return { + copy: view.copy || (view.allowCopy && e.ctrlKey), + event: new Ext.EventObjectImpl(e), + view: view, + ddel: this.ddel, + item: item, + records: view.getSelectionModel().getSelection(), + fromPosition: Ext.fly(item).getXY() + }; + } + }, + + onInitDrag: function(x, y) { + var me = this, + data = me.dragData, + view = data.view, + selectionModel = view.getSelectionModel(), + record = view.getRecord(data.item); + + + + if (!selectionModel.isSelected(record)) { + selectionModel.select(record, true); + } + data.records = selectionModel.getSelection(); + + me.ddel.update(me.getDragText()); + me.proxy.update(me.ddel.dom); + me.onStartDrag(x, y); + return true; + }, + + getDragText: function() { + var count = this.dragData.records.length; + return Ext.String.format(this.dragText, count, count == 1 ? '' : 's'); + }, + + getRepairXY : function(e, data){ + return data ? data.fromPosition : false; + } +}); + + +Ext.define('Ext.tree.ViewDragZone', { + extend: Ext.view.DragZone , + + isPreventDrag: function(e, record) { + return (record.get('allowDrag') === false) || !!e.getTarget(this.view.expanderSelector); + }, + + getDragText: function() { + var records = this.dragData.records, + count = records.length, + text = records[0].get(this.displayField), + suffix = 's'; + + if (count === 1 && text) { + return text; + } else if (!text) { + suffix = ''; + } + return Ext.String.format(this.dragText, count, suffix); + }, + + afterRepair: function() { + var me = this, + view = me.view, + selectedRowCls = view.selectedItemCls, + records = me.dragData.records, + r, + rLen = records.length, + fly = Ext.fly, + item; + + if (Ext.enableFx && me.repairHighlight) { + + for (r = 0; r < rLen; r++) { + + + item = view.getNode(records[r]); + + + + fly(item.firstChild).highlight(me.repairHighlightColor, { + listeners: { + beforeanimate: function() { + if (view.isSelected(item)) { + fly(item).removeCls(selectedRowCls); + } + }, + afteranimate: function() { + if (view.isSelected(item)) { + fly(item).addCls(selectedRowCls); + } + } + } + }); + } + + } + me.dragging = false; + } +}); + + +Ext.define('Ext.tree.ViewDropZone', { + extend: Ext.view.DropZone , + + + allowParentInserts: false, + + + allowContainerDrops: false, + + + appendOnly: false, + + + expandDelay : 500, + + indicatorCls: Ext.baseCSSPrefix + 'tree-ddindicator', + + + expandNode : function(node) { + var view = this.view; + this.expandProcId = false; + if (!node.isLeaf() && !node.isExpanded()) { + view.expand(node); + this.expandProcId = false; + } + }, + + + queueExpand : function(node) { + this.expandProcId = Ext.Function.defer(this.expandNode, this.expandDelay, this, [node]); + }, + + + cancelExpand : function() { + if (this.expandProcId) { + clearTimeout(this.expandProcId); + this.expandProcId = false; + } + }, + + getPosition: function(e, node) { + var view = this.view, + record = view.getRecord(node), + y = e.getPageY(), + noAppend = record.isLeaf(), + noBelow = false, + region = Ext.fly(node).getRegion(), + fragment; + + + if (record.isRoot()) { + return 'append'; + } + + + if (this.appendOnly) { + return noAppend ? false : 'append'; + } + + if (!this.allowParentInserts) { + noBelow = record.hasChildNodes() && record.isExpanded(); + } + + fragment = (region.bottom - region.top) / (noAppend ? 2 : 3); + if (y >= region.top && y < (region.top + fragment)) { + return 'before'; + } + else if (!noBelow && (noAppend || (y >= (region.bottom - fragment) && y <= region.bottom))) { + return 'after'; + } + else { + return 'append'; + } + }, + + isValidDropPoint : function(node, position, dragZone, e, data) { + if (!node || !data.item) { + return false; + } + + var view = this.view, + targetNode = view.getRecord(node), + draggedRecords = data.records, + dataLength = draggedRecords.length, + ln = draggedRecords.length, + i, record; + + + if (!(targetNode && position && dataLength)) { + return false; + } + + + for (i = 0; i < ln; i++) { + record = draggedRecords[i]; + if (record.isNode && record.contains(targetNode)) { + return false; + } + } + + + if (position === 'append' && targetNode.get('allowDrop') === false) { + return false; + } + else if (position != 'append' && targetNode.parentNode.get('allowDrop') === false) { + return false; + } + + + if (Ext.Array.contains(draggedRecords, targetNode)) { + return false; + } + return view.fireEvent('nodedragover', targetNode, position, data, e) !== false; + }, + + onNodeOver : function(node, dragZone, e, data) { + var position = this.getPosition(e, node), + returnCls = this.dropNotAllowed, + view = this.view, + targetNode = view.getRecord(node), + indicator = this.getIndicator(), + indicatorY = 0; + + + this.cancelExpand(); + if (position == 'append' && !this.expandProcId && !Ext.Array.contains(data.records, targetNode) && !targetNode.isLeaf() && !targetNode.isExpanded()) { + this.queueExpand(targetNode); + } + + + if (this.isValidDropPoint(node, position, dragZone, e, data)) { + this.valid = true; + this.currentPosition = position; + this.overRecord = targetNode; + + indicator.setWidth(Ext.fly(node).getWidth()); + indicatorY = Ext.fly(node).getY() - Ext.fly(view.el).getY() - 1; + + + if (position == 'before') { + returnCls = targetNode.isFirst() ? Ext.baseCSSPrefix + 'tree-drop-ok-above' : Ext.baseCSSPrefix + 'tree-drop-ok-between'; + indicator.showAt(0, indicatorY); + dragZone.proxy.show(); + } else if (position == 'after') { + returnCls = targetNode.isLast() ? Ext.baseCSSPrefix + 'tree-drop-ok-below' : Ext.baseCSSPrefix + 'tree-drop-ok-between'; + indicatorY += Ext.fly(node).getHeight(); + indicator.showAt(0, indicatorY); + dragZone.proxy.show(); + } else { + returnCls = Ext.baseCSSPrefix + 'tree-drop-ok-append'; + + indicator.hide(); + } + } else { + this.valid = false; + } + + this.currentCls = returnCls; + return returnCls; + }, + + + onNodeOut : function(n, dd, e, data){ + this.valid = false; + this.getIndicator().hide(); + }, + + onContainerOver : function(dd, e, data) { + return e.getTarget('.' + this.indicatorCls) ? this.currentCls : this.dropNotAllowed; + }, + + notifyOut: function() { + this.callParent(arguments); + this.cancelExpand(); + }, + + handleNodeDrop : function(data, targetNode, position) { + var me = this, + targetView = me.view, + parentNode = targetNode ? targetNode.parentNode : targetView.panel.getRootNode(), + Model = targetView.getStore().treeStore.model, + records, i, len, record, + insertionMethod, argList, + needTargetExpand, + transferData; + + + if (data.copy) { + records = data.records; + data.records = []; + for (i = 0, len = records.length; i < len; i++) { + record = records[i]; + if (record.isNode) { + data.records.push(record.copy(undefined, true)); + } else { + + data.records.push(new Model(record[record.persistenceProperty], record.getId())); + } + } + } + + + me.cancelExpand(); + + + + + + if (position == 'before') { + insertionMethod = parentNode.insertBefore; + argList = [null, targetNode]; + targetNode = parentNode; + } + else if (position == 'after') { + if (targetNode.nextSibling) { + insertionMethod = parentNode.insertBefore; + argList = [null, targetNode.nextSibling]; + } + else { + insertionMethod = parentNode.appendChild; + argList = [null]; + } + targetNode = parentNode; + } + else { + if (!(targetNode.isExpanded() || targetNode.isLoading())) { + needTargetExpand = true; + } + insertionMethod = targetNode.appendChild; + argList = [null]; + } + + + transferData = function() { + var color, + n; + + + Ext.suspendLayouts(); + + targetView.getSelectionModel().clearSelections(); + + + for (i = 0, len = data.records.length; i < len; i++) { + argList[0] = data.records[i]; + insertionMethod.apply(targetNode, argList); + } + + + if (me.sortOnDrop) { + targetNode.sort(targetNode.getOwnerTree().store.generateComparator()); + } + + Ext.resumeLayouts(true); + + + + + if (Ext.enableFx && me.dropHighlight) { + color = me.dropHighlightColor; + + for (i = 0; i < len; i++) { + n = targetView.getNode(data.records[i]); + if (n) { + Ext.fly(n).highlight(color); + } + } + } + }; + + + if (needTargetExpand) { + targetNode.expand(false, transferData); + } + + + + + + else if (targetNode.isLoading()) { + targetNode.on({ + expand: transferData, + delay: 1, + single: true + }); + } + + else { + transferData(); + } + } +}); + + +Ext.define('Ext.tree.plugin.TreeViewDragDrop', { + extend: Ext.AbstractPlugin , + alias: 'plugin.treeviewdragdrop', + + + + + + + + + + + + + dragText : '{0} selected node{1}', + + + + allowParentInserts: false, + + + allowContainerDrops: false, + + + appendOnly: false, + + + ddGroup : "TreeDD", + + + containerScroll: false, + + + + + + + + + expandDelay : 1000, + + + enableDrop: true, + + + enableDrag: true, + + + nodeHighlightColor: 'c3daf9', + + + nodeHighlightOnDrop: Ext.enableFx, + + + nodeHighlightOnRepair: Ext.enableFx, + + + displayField: 'text', + + init : function(view) { + view.on('render', this.onViewRender, this, {single: true}); + }, + + + destroy: function() { + Ext.destroy(this.dragZone, this.dropZone); + }, + + onViewRender : function(view) { + var me = this, + scrollEl; + + if (me.enableDrag) { + if (me.containerScroll) { + scrollEl = view.getEl(); + } + me.dragZone = new Ext.tree.ViewDragZone({ + view: view, + ddGroup: me.dragGroup || me.ddGroup, + dragText: me.dragText, + displayField: me.displayField, + repairHighlightColor: me.nodeHighlightColor, + repairHighlight: me.nodeHighlightOnRepair, + scrollEl: scrollEl + }); + } + + if (me.enableDrop) { + me.dropZone = new Ext.tree.ViewDropZone({ + view: view, + ddGroup: me.dropGroup || me.ddGroup, + allowContainerDrops: me.allowContainerDrops, + appendOnly: me.appendOnly, + allowParentInserts: me.allowParentInserts, + expandDelay: me.expandDelay, + dropHighlightColor: me.nodeHighlightColor, + dropHighlight: me.nodeHighlightOnDrop, + sortOnDrop: me.sortOnDrop, + containerScroll: me.containerScroll + }); + } + } +}, function(){ + var proto = this.prototype; + proto.nodeHighlightOnDrop = proto.nodeHighlightOnRepair = Ext.enableFx; +}); + + +Ext.define('Ext.util.Cookies', { + singleton: true, + + + set : function(name, value){ + var argv = arguments, + argc = arguments.length, + expires = (argc > 2) ? argv[2] : null, + path = (argc > 3) ? argv[3] : '/', + domain = (argc > 4) ? argv[4] : null, + secure = (argc > 5) ? argv[5] : false; + + document.cookie = name + "=" + escape(value) + ((expires === null) ? "" : ("; expires=" + expires.toGMTString())) + ((path === null) ? "" : ("; path=" + path)) + ((domain === null) ? "" : ("; domain=" + domain)) + ((secure === true) ? "; secure" : ""); + }, + + + get : function(name){ + var arg = name + "=", + alen = arg.length, + clen = document.cookie.length, + i = 0, + j = 0; + + while(i < clen){ + j = i + alen; + if(document.cookie.substring(i, j) == arg){ + return this.getCookieVal(j); + } + i = document.cookie.indexOf(" ", i) + 1; + if(i === 0){ + break; + } + } + return null; + }, + + + clear : function(name, path){ + if(this.get(name)){ + path = path || '/'; + document.cookie = name + '=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT; path=' + path; + } + }, + + + getCookieVal : function(offset){ + var endstr = document.cookie.indexOf(";", offset); + if(endstr == -1){ + endstr = document.cookie.length; + } + return unescape(document.cookie.substring(offset, endstr)); + } +}); + + + +Ext.define('Ext.util.Grouper', { + + + + extend: Ext.util.Sorter , + + + + isGrouper: true, + + + getGroupString: function(instance) { + return instance.get(this.property); + } +}); + + +Ext.define('Ext.util.History', { + singleton: true, + alternateClassName: 'Ext.History', + mixins: { + observable: Ext.util.Observable + }, + + + useTopWindow: true, + + + fieldId: Ext.baseCSSPrefix + 'history-field', + + iframeId: Ext.baseCSSPrefix + 'history-frame', + + constructor: function() { + var me = this; + me.oldIEMode = Ext.isIE7m || !Ext.isStrict && Ext.isIE8; + me.iframe = null; + me.hiddenField = null; + me.ready = false; + me.currentToken = null; + me.mixins.observable.constructor.call(me); + }, + + getHash: function() { + var href = window.location.href, + i = href.indexOf("#"); + + return i >= 0 ? href.substr(i + 1) : null; + }, + + setHash: function (hash) { + var me = this, + win = me.useTopWindow ? window.top : window; + try { + win.location.hash = hash; + } catch (e) { + + } + }, + + doSave: function() { + this.hiddenField.value = this.currentToken; + }, + + + handleStateChange: function(token) { + this.currentToken = token; + this.fireEvent('change', token); + }, + + updateIFrame: function(token) { + var html = '
    ' + + Ext.util.Format.htmlEncode(token) + + '
    ', + doc; + + try { + doc = this.iframe.contentWindow.document; + doc.open(); + doc.write(html); + doc.close(); + return true; + } catch (e) { + return false; + } + }, + + checkIFrame: function () { + var me = this, + contentWindow = me.iframe.contentWindow, + doc, elem, oldToken, oldHash; + + if (!contentWindow || !contentWindow.document) { + Ext.Function.defer(this.checkIFrame, 10, this); + return; + } + + doc = contentWindow.document; + elem = doc.getElementById("state"); + oldToken = elem ? elem.innerText : null; + oldHash = me.getHash(); + + Ext.TaskManager.start({ + run: function () { + var doc = contentWindow.document, + elem = doc.getElementById("state"), + newToken = elem ? elem.innerText : null, + newHash = me.getHash(); + + if (newToken !== oldToken) { + oldToken = newToken; + me.handleStateChange(newToken); + me.setHash(newToken); + oldHash = newToken; + me.doSave(); + } else if (newHash !== oldHash) { + oldHash = newHash; + me.updateIFrame(newHash); + } + }, + interval: 50, + scope: me + }); + me.ready = true; + me.fireEvent('ready', me); + }, + + startUp: function () { + var me = this, + hash; + + me.currentToken = me.hiddenField.value || this.getHash(); + + if (me.oldIEMode) { + me.checkIFrame(); + } else { + hash = me.getHash(); + Ext.TaskManager.start({ + run: function () { + var newHash = me.getHash(); + if (newHash !== hash) { + hash = newHash; + me.handleStateChange(hash); + me.doSave(); + } + }, + interval: 50, + scope: me + }); + me.ready = true; + me.fireEvent('ready', me); + } + + }, + + + init: function (onReady, scope) { + var me = this, + DomHelper = Ext.DomHelper; + + if (me.ready) { + Ext.callback(onReady, scope, [me]); + return; + } + + if (!Ext.isReady) { + Ext.onReady(function() { + me.init(onReady, scope); + }); + return; + } + + + me.hiddenField = Ext.getDom(me.fieldId); + if (!me.hiddenField) { + me.hiddenField = Ext.getBody().createChild({ + id: Ext.id(), + tag: 'form', + cls: Ext.baseCSSPrefix + 'hide-display', + children: [{ + tag: 'input', + type: 'hidden', + id: me.fieldId + }] + }, false, true).firstChild; + } + + if (me.oldIEMode) { + me.iframe = Ext.getDom(me.iframeId); + if (!me.iframe) { + me.iframe = DomHelper.append(me.hiddenField.parentNode, { + tag: 'iframe', + id: me.iframeId, + src: Ext.SSL_SECURE_URL + }); + } + } + + me.addEvents( + + 'ready', + + 'change' + ); + + if (onReady) { + me.on('ready', onReady, scope, {single: true}); + } + me.startUp(); + }, + + + add: function (token, preventDup) { + var me = this; + + if (preventDup !== false) { + if (me.getToken() === token) { + return true; + } + } + + if (me.oldIEMode) { + return me.updateIFrame(token); + } else { + me.setHash(token); + return true; + } + }, + + + back: function() { + window.history.go(-1); + }, + + + forward: function(){ + window.history.go(1); + }, + + + getToken: function() { + return this.ready ? this.currentToken : this.getHash(); + } +}); diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/ext-all.js b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/ext-all.js new file mode 100644 index 000000000..7398a6973 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/ext-all.js @@ -0,0 +1,21 @@ +/* +This file is part of Ext JS 4.2 + +Copyright (c) 2011-2013 Sencha Inc + +Contact: http://www.sencha.com/contact + +GNU General Public License Usage +This file may be used under the terms of the GNU General Public License version 3.0 as +published by the Free Software Foundation and appearing in the file LICENSE included in the +packaging of this file. + +Please review the following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you are unsure which license is appropriate for your use, please contact the sales department +at http://www.sencha.com/contact. + +Build date: 2013-03-11 22:33:40 (aed16176e68b5e8aa1433452b12805c0ad913836) +*/ +var Ext=Ext||{};if(!Ext.Direct){Ext.Direct={}}if(!Ext.Toolbar){Ext.Toolbar={}}if(!Ext.app){Ext.app={}}if(!Ext.app.domain){Ext.app.domain={}}if(!Ext.button){Ext.button={}}if(!Ext.chart){Ext.chart={}}if(!Ext.chart.axis){Ext.chart.axis={}}if(!Ext.chart.series){Ext.chart.series={}}if(!Ext.chart.theme){Ext.chart.theme={}}if(!Ext.container){Ext.container={}}if(!Ext.core){Ext.core={}}if(!Ext.data){Ext.data={}}if(!Ext.data.association){Ext.data.association={}}if(!Ext.data.flash){Ext.data.flash={}}if(!Ext.data.proxy){Ext.data.proxy={}}if(!Ext.data.reader){Ext.data.reader={}}if(!Ext.data.writer){Ext.data.writer={}}if(!Ext.dd){Ext.dd={}}if(!Ext.direct){Ext.direct={}}if(!Ext.dom){Ext.dom={}}if(!Ext.draw){Ext.draw={}}if(!Ext.draw.engine){Ext.draw.engine={}}if(!Ext.flash){Ext.flash={}}if(!Ext.form){Ext.form={}}if(!Ext.form.Action){Ext.form.Action={}}if(!Ext.form.action){Ext.form.action={}}if(!Ext.form.field){Ext.form.field={}}if(!Ext.fx){Ext.fx={}}if(!Ext.fx.target){Ext.fx.target={}}if(!Ext.grid){Ext.grid={}}if(!Ext.grid.column){Ext.grid.column={}}if(!Ext.grid.feature){Ext.grid.feature={}}if(!Ext.grid.header){Ext.grid.header={}}if(!Ext.grid.locking){Ext.grid.locking={}}if(!Ext.grid.plugin){Ext.grid.plugin={}}if(!Ext.grid.property){Ext.grid.property={}}if(!Ext.layout){Ext.layout={}}if(!Ext.layout.boxOverflow){Ext.layout.boxOverflow={}}if(!Ext.layout.component){Ext.layout.component={}}if(!Ext.layout.component.field){Ext.layout.component.field={}}if(!Ext.layout.container){Ext.layout.container={}}if(!Ext.layout.container.boxOverflow){Ext.layout.container.boxOverflow={}}if(!Ext.list){Ext.list={}}if(!Ext.menu){Ext.menu={}}if(!Ext.panel){Ext.panel={}}if(!Ext.perf){Ext.perf={}}if(!Ext.picker){Ext.picker={}}if(!Ext.resizer){Ext.resizer={}}if(!Ext.rtl){Ext.rtl={}}if(!Ext.rtl.button){Ext.rtl.button={}}if(!Ext.rtl.dd){Ext.rtl.dd={}}if(!Ext.rtl.dom){Ext.rtl.dom={}}if(!Ext.rtl.form){Ext.rtl.form={}}if(!Ext.rtl.form.field){Ext.rtl.form.field={}}if(!Ext.rtl.grid){Ext.rtl.grid={}}if(!Ext.rtl.grid.column){Ext.rtl.grid.column={}}if(!Ext.rtl.grid.plugin){Ext.rtl.grid.plugin={}}if(!Ext.rtl.layout){Ext.rtl.layout={}}if(!Ext.rtl.layout.component){Ext.rtl.layout.component={}}if(!Ext.rtl.layout.component.field){Ext.rtl.layout.component.field={}}if(!Ext.rtl.layout.container){Ext.rtl.layout.container={}}if(!Ext.rtl.layout.container.boxOverflow){Ext.rtl.layout.container.boxOverflow={}}if(!Ext.rtl.panel){Ext.rtl.panel={}}if(!Ext.rtl.resizer){Ext.rtl.resizer={}}if(!Ext.rtl.slider){Ext.rtl.slider={}}if(!Ext.rtl.tab){Ext.rtl.tab={}}if(!Ext.rtl.tree){Ext.rtl.tree={}}if(!Ext.rtl.util){Ext.rtl.util={}}if(!Ext.rtl.view){Ext.rtl.view={}}if(!Ext.selection){Ext.selection={}}if(!Ext.slider){Ext.slider={}}if(!Ext.state){Ext.state={}}if(!Ext.tab){Ext.tab={}}if(!Ext.tip){Ext.tip={}}if(!Ext.toolbar){Ext.toolbar={}}if(!Ext.tree){Ext.tree={}}if(!Ext.tree.plugin){Ext.tree.plugin={}}if(!Ext.util){Ext.util={}}if(!Ext.ux){Ext.ux={}}if(!Ext.ux.form){Ext.ux.form={}}if(!Ext.view){Ext.view={}}if(!Ext.window){Ext.window={}}(function(i){var k=[],l=["constructor","toString","valueOf","toLocaleString"],j={},o={},b=0,h,c,n,g,a=function(){var q,p;c=Ext.Base;n=Ext.ClassManager;for(q=l.length;q-->0;){p=(1<0;){q=k[r];p[q]=c[q]}return p},d=function(u,x,Q,p,w,E,v,N,s,G,A){var q=function z(){return this.constructor.apply(this,arguments)||null},P=q,r={enumerableMembers:p&b,onCreated:A,onBeforeCreated:e,aliases:N},D=Q.alternateClassName||[],L=Ext.global,H,K,M,C,J,T,S,t,I,y,O,F,B,R;for(M=k.length;M-->0;){S=k[M];q[S]=c[S]}if(Q.$isFunction){Q=Q(q)}r.data=Q;y=Q.statics,Q.$className=u;if(Q.$className){q.$className=Q.$className}q.extend(x);I=q.prototype;q.xtype=Q.xtype=w[0];if(w){I.xtypes=w}I.xtypesChain=E;I.xtypesMap=v;Q.alias=N;P.triggerExtended(q,Q,r);if(Q.onClassExtended){q.onExtended(Q.onClassExtended,q);delete Q.onClassExtended}if(y){for(O in y){if(y.hasOwnProperty(O)){R=y[O];if(R&&R.$isFunction&&!R.$isClass&&R!==Ext.emptyFn&&R!==Ext.identityFn){q[O]=B=R;B.$owner=q;B.$name=O}q[O]=R}}}delete Q.statics;if(Q.inheritableStatics){q.addInheritableStatics(Q.inheritableStatics)}if(I.onClassExtended){P.onExtended(I.onClassExtended,P);delete I.onClassExtended}if(Q.config){g(q,Q)}r.onBeforeCreated(q,r.data,r);for(M=0,J=s&&s.length;M0){p--;n[p]="var Ext=window."+Ext.name+";"+n[p]}}i=n.join("");o=m[i];if(!o){o=Function.prototype.constructor.apply(Function.prototype,n);m[i]=o}return o},functionFactory:function(){var n=this,i=Array.prototype.slice.call(arguments),m;if(Ext.isSandboxed){m=i.length;if(m>0){m--;i[m]="var Ext=window."+Ext.name+";"+i[m]}}return Function.prototype.constructor.apply(Function.prototype,i)},Logger:{verbose:e,log:e,info:e,warn:e,error:function(i){throw new Error(i)},deprecate:e}});Ext.type=Ext.typeOf;g=Ext.app;if(!g){g=Ext.app={}}Ext.apply(g,{namespaces:{},collectNamespaces:function(n){var i=Ext.app.namespaces,m;for(m in n){if(n.hasOwnProperty(m)){i[m]=true}}},addNamespaces:function(o){var p=Ext.app.namespaces,n,m;if(!Ext.isArray(o)){o=[o]}for(n=0,m=o.length;ni.length&&(n+"."===m.substring(0,n.length+1))){i=n}}return i===""?undefined:i}})}());Ext.globalEval=Ext.global.execScript?function(a){execScript(a)}:function($$code){(function(){var Ext=this.Ext;eval($$code)}())};(function(){var a="4.2.0.663",b;Ext.Version=b=Ext.extend(Object,{constructor:function(c){var e,d;if(c instanceof b){return c}this.version=this.shortVersion=String(c).toLowerCase().replace(/_/g,".").replace(/[\-+]/g,"");d=this.version.search(/([^\d\.])/);if(d!==-1){this.release=this.version.substr(d,c.length);this.shortVersion=this.version.substr(0,d)}this.shortVersion=this.shortVersion.replace(/[^\d]/g,"");e=this.version.split(".");this.major=parseInt(e.shift()||0,10);this.minor=parseInt(e.shift()||0,10);this.patch=parseInt(e.shift()||0,10);this.build=parseInt(e.shift()||0,10);return this},toString:function(){return this.version},valueOf:function(){return this.version},getMajor:function(){return this.major||0},getMinor:function(){return this.minor||0},getPatch:function(){return this.patch||0},getBuild:function(){return this.build||0},getRelease:function(){return this.release||""},isGreaterThan:function(c){return b.compare(this.version,c)===1},isGreaterThanOrEqual:function(c){return b.compare(this.version,c)>=0},isLessThan:function(c){return b.compare(this.version,c)===-1},isLessThanOrEqual:function(c){return b.compare(this.version,c)<=0},equals:function(c){return b.compare(this.version,c)===0},match:function(c){c=String(c);return this.version.substr(0,c.length)===c},toArray:function(){return[this.getMajor(),this.getMinor(),this.getPatch(),this.getBuild(),this.getRelease()]},getShortVersion:function(){return this.shortVersion},gt:function(){return this.isGreaterThan.apply(this,arguments)},lt:function(){return this.isLessThan.apply(this,arguments)},gtEq:function(){return this.isGreaterThanOrEqual.apply(this,arguments)},ltEq:function(){return this.isLessThanOrEqual.apply(this,arguments)}});Ext.apply(b,{releaseValueMap:{dev:-6,alpha:-5,a:-5,beta:-4,b:-4,rc:-3,"#":-2,p:-1,pl:-1},getComponentValue:function(c){return !c?0:(isNaN(c)?this.releaseValueMap[c]||c:parseInt(c,10))},compare:function(h,g){var d,e,c;h=new b(h).toArray();g=new b(g).toArray();for(c=0;ce){return 1}}}return 0}});Ext.apply(Ext,{versions:{},lastRegisteredVersion:null,setVersion:function(d,c){Ext.versions[d]=new b(c);Ext.lastRegisteredVersion=Ext.versions[d];return this},getVersion:function(c){if(c===undefined){return Ext.lastRegisteredVersion}return Ext.versions[c]},deprecate:function(c,e,g,d){if(b.compare(Ext.getVersion(c),e)<1){g.call(d)}}});Ext.setVersion("core",a)}());Ext.String=(function(){var j=/^[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+|[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+$/g,n=/('|\\)/g,i=/\{(\d+)\}/g,b=/([-.*+?\^${}()|\[\]\/\\])/g,o=/^\s+|\s+$/g,k=/\s+/,m=/(^[^a-z]*|[^\w])/gi,e,a,h,d,g=function(q,p){return e[p]},l=function(q,p){return(p in a)?a[p]:String.fromCharCode(parseInt(p.substr(2),10))},c=function(q,p){if(q===null||q===undefined||p===null||p===undefined){return false}return p.length<=q.length};return{insert:function(r,t,q){if(!r){return t}if(!t){return r}var p=r.length;if(!q&&q!==0){q=p}if(q<0){q*=-1;if(q>=p){q=0}else{q=p-q}}if(q===0){r=t+r}else{if(q>=r.length){r+=t}else{r=r.substr(0,q)+t+r.substr(q)}}return r},startsWith:function(r,t,q){var p=c(r,t);if(p){if(q){r=r.toLowerCase();t=t.toLowerCase()}p=r.lastIndexOf(t,0)===0}return p},endsWith:function(t,q,r){var p=c(t,q);if(p){if(r){t=t.toLowerCase();q=q.toLowerCase()}p=t.indexOf(q,t.length-q.length)!==-1}return p},createVarName:function(p){return p.replace(m,"")},htmlEncode:function(p){return(!p)?p:String(p).replace(h,g)},htmlDecode:function(p){return(!p)?p:String(p).replace(d,l)},addCharacterEntities:function(q){var p=[],t=[],r,s;for(r in q){s=q[r];a[r]=s;e[s]=r;p.push(s);t.push(r)}h=new RegExp("("+p.join("|")+")","g");d=new RegExp("("+t.join("|")+"|&#[0-9]{1,5};)","g")},resetCharacterEntities:function(){e={};a={};this.addCharacterEntities({"&":"&",">":">","<":"<",""":'"',"'":"'"})},urlAppend:function(q,p){if(!Ext.isEmpty(p)){return q+(q.indexOf("?")===-1?"?":"&")+p}return q},trim:function(p){return p.replace(j,"")},capitalize:function(p){return p.charAt(0).toUpperCase()+p.substr(1)},uncapitalize:function(p){return p.charAt(0).toLowerCase()+p.substr(1)},ellipsis:function(r,p,s){if(r&&r.length>p){if(s){var t=r.substr(0,p-2),q=Math.max(t.lastIndexOf(" "),t.lastIndexOf("."),t.lastIndexOf("!"),t.lastIndexOf("?"));if(q!==-1&&q>=(p-15)){return t.substr(0,q)+"..."}}return r.substr(0,p-3)+"..."}return r},escapeRegex:function(p){return p.replace(b,"\\$1")},escape:function(p){return p.replace(n,"\\$1")},toggle:function(q,r,p){return q===r?p:r},leftPad:function(q,r,s){var p=String(q);s=s||" ";while(p.lengthe)?e:d)},snap:function(h,e,g,i){var d;if(h===undefined||h=e){h+=e}else{if(d*2<-e){h-=e}}}}return b.constrain(h,g,i)},snapInRange:function(h,d,g,i){var e;g=(g||0);if(h===undefined||h=d){h+=d}}if(i!==undefined){if(h>(i=b.snapInRange(i,d,g))){h=i}}return h},toFixed:c?function(g,d){d=d||0;var e=a.pow(10,d);return(a.round(g*e)/e).toFixed(d)}:function(e,d){return e.toFixed(d)},from:function(e,d){if(isFinite(e)){e=parseFloat(e)}return !isNaN(e)?e:d},randomInt:function(e,d){return a.floor(a.random()*(d-e+1)+e)},correctFloat:function(d){return parseFloat(d.toPrecision(14))}});Ext.num=function(){return b.from.apply(this,arguments)}};(function(){var g=Array.prototype,o=g.slice,q=(function(){var A=[],e,z=20;if(!A.splice){return false}while(z--){A.push("A")}A.splice(15,0,"F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F");e=A.length;A.splice(13,0,"XXX");if(e+1!=A.length){return false}return true}()),j="forEach" in g,u="map" in g,p="indexOf" in g,y="every" in g,c="some" in g,d="filter" in g,n=(function(){var e=[1,2,3,4,5].sort(function(){return 0});return e[0]===1&&e[1]===2&&e[2]===3&&e[3]===4&&e[4]===5}()),k=true,a,w,t,v;try{if(typeof document!=="undefined"){o.call(document.getElementsByTagName("body"))}}catch(s){k=false}function m(z,e){return(e<0)?Math.max(0,z.length+e):Math.min(z.length,e)}function x(G,F,z,J){var K=J?J.length:0,B=G.length,H=m(G,F),E,I,A,e,C,D;if(H===B){if(K){G.push.apply(G,J)}}else{E=Math.min(z,B-H);I=H+E;A=I+K-E;e=B-I;C=B-E;if(AI){for(D=e;D--;){G[A+D]=G[I+D]}}}if(K&&H===C){G.length=C;G.push.apply(G,J)}else{G.length=C+K;for(D=0;D-1;z--){if(B.call(A||D[z],D[z],z,D)===false){return z}}}return true},forEach:j?function(A,z,e){A.forEach(z,e)}:function(C,A,z){var e=0,B=C.length;for(;ee){e=A}}}return e},mean:function(e){return e.length>0?a.sum(e)/e.length:undefined},sum:function(C){var z=0,e,B,A;for(e=0,B=C.length;e0){return setTimeout(Ext.supports.TimeoutActualLateness?function(){e()}:e,c)}e();return 0},createSequence:function(b,c,a){if(!c){return b}else{return function(){var d=b.apply(this,arguments);c.apply(a||this,arguments);return d}}},createBuffered:function(e,b,d,c){var a;return function(){var h=c||Array.prototype.slice.call(arguments,0),g=d||this;if(a){clearTimeout(a)}a=setTimeout(function(){e.apply(g,h)},b)}},createThrottled:function(e,b,d){var g,a,c,i,h=function(){e.apply(d||this,c);g=new Date().getTime()};return function(){a=new Date().getTime()-g;c=arguments;clearTimeout(i);if(!g||(a>=b)){h()}else{i=setTimeout(h,b-a)}}},interceptBefore:function(b,a,d,c){var e=b[a]||Ext.emptyFn;return(b[a]=function(){var g=d.apply(c||this,arguments);e.apply(this,arguments);return g})},interceptAfter:function(b,a,d,c){var e=b[a]||Ext.emptyFn;return(b[a]=function(){e.apply(this,arguments);return d.apply(c||this,arguments)})}};Ext.defer=Ext.Function.alias(Ext.Function,"defer");Ext.pass=Ext.Function.alias(Ext.Function,"pass");Ext.bind=Ext.Function.alias(Ext.Function,"bind");(function(){var a=function(){},b=Ext.Object={chain:Object.create||function(d){a.prototype=d;var c=new a();a.prototype=null;return c},toQueryObjects:function(e,k,d){var c=b.toQueryObjects,j=[],g,h;if(Ext.isArray(k)){for(g=0,h=k.length;g0){k=o.split("=");w=decodeURIComponent(k[0]);n=(k[1]!==undefined)?decodeURIComponent(k[1]):"";if(!r){if(u.hasOwnProperty(w)){if(!Ext.isArray(u[w])){u[w]=[u[w]]}u[w].push(n)}else{u[w]=n}}else{h=w.match(/(\[):?([^\]]*)\]/g);t=w.match(/^([^\[]+)/);w=t[0];l=[];if(h===null){u[w]=n;continue}for(p=0,c=h.length;p= 0 && y >= 0){","v = me.add(new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);","v = !strict? v : (strict === true && (z <= 364 || (me.isLeapYear(v) && z <= 365))? me.add(v, me.DAY, z) : null);","}else if(strict === true && !me.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","if (W) {","year = y || (new Date()).getFullYear(),","jan4 = new Date(year, 0, 4, 0, 0, 0),","week1monday = new Date(jan4.getTime() - ((jan4.getDay() - 1) * 86400000));","v = Ext.Date.clearTime(new Date(week1monday.getTime() + ((W - 1) * 604800000)));","} else {","v = me.add(new Date(y < 100 ? 100 : y, m, d, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);","}","}","}","}","if(v){","if(zz != null){","v = me.add(v, me.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = me.add(v, me.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join("\n");function h(l){var k=Array.prototype.slice.call(arguments,1);return l.replace(c,function(n,o){return k[o]})}Ext.apply(d,{now:Date.now||function(){return +new Date()},toString:function(k){var l=Ext.String.leftPad;return k.getFullYear()+"-"+l(k.getMonth()+1,2,"0")+"-"+l(k.getDate(),2,"0")+"T"+l(k.getHours(),2,"0")+":"+l(k.getMinutes(),2,"0")+":"+l(k.getSeconds(),2,"0")},getElapsed:function(l,k){return Math.abs(l-(k||new Date()))},useStrict:false,formatCodeToRegex:function(l,k){var m=d.parseCodes[l];if(m){m=typeof m=="function"?m():m;d.parseCodes[l]=m}return m?Ext.applyIf({c:m.c?h(m.c,k||"{0}"):m.c},m):{g:0,c:null,s:Ext.String.escapeRegex(l)}},parseFunctions:{MS:function(l,k){var m=(l||"").match(g);return m?new Date(((m[1]||"")+m[2])*1):null},time:function(l,k){var m=parseInt(l,10);if(m||m===0){return new Date(m)}return null},timestamp:function(l,k){var m=parseInt(l,10);if(m||m===0){return new Date(m*1000)}return null}},parseRegexes:[],formatFunctions:{MS:function(){return"\\/Date("+this.getTime()+")\\/"},time:function(){return this.getTime().toString()},timestamp:function(){return d.format(this,"U")}},y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",defaults:{},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{January:0,Jan:0,February:1,Feb:1,March:2,Mar:2,April:3,Apr:3,May:4,June:5,Jun:5,July:6,Jul:6,August:7,Aug:7,September:8,Sep:8,October:9,Oct:9,November:10,Nov:10,December:11,Dec:11},defaultFormat:"m/d/Y",getShortMonthName:function(k){return Ext.Date.monthNames[k].substring(0,3)},getShortDayName:function(k){return Ext.Date.dayNames[k].substring(0,3)},getMonthNumber:function(k){return Ext.Date.monthNumbers[k.substring(0,1).toUpperCase()+k.substring(1,3).toLowerCase()]},formatContainsHourInfo:function(k){return a.test(k.replace(j,""))},formatContainsDateInfo:function(k){return e.test(k.replace(j,""))},unescapeFormat:function(k){return k.replace(i,"")},formatCodes:{d:"Ext.String.leftPad(this.getDate(), 2, '0')",D:"Ext.Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Ext.Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"Ext.Date.getSuffix(this)",w:"this.getDay()",z:"Ext.Date.getDayOfYear(this)",W:"Ext.String.leftPad(Ext.Date.getWeekOfYear(this), 2, '0')",F:"Ext.Date.monthNames[this.getMonth()]",m:"Ext.String.leftPad(this.getMonth() + 1, 2, '0')",M:"Ext.Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"Ext.Date.getDaysInMonth(this)",L:"(Ext.Date.isLeapYear(this) ? 1 : 0)",o:"(this.getFullYear() + (Ext.Date.getWeekOfYear(this) == 1 && this.getMonth() > 0 ? +1 : (Ext.Date.getWeekOfYear(this) >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"Ext.String.leftPad(this.getFullYear(), 4, '0')",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"Ext.String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"Ext.String.leftPad(this.getHours(), 2, '0')",i:"Ext.String.leftPad(this.getMinutes(), 2, '0')",s:"Ext.String.leftPad(this.getSeconds(), 2, '0')",u:"Ext.String.leftPad(this.getMilliseconds(), 3, '0')",O:"Ext.Date.getGMTOffset(this)",P:"Ext.Date.getGMTOffset(this, true)",T:"Ext.Date.getTimezone(this)",Z:"(this.getTimezoneOffset() * -60)",c:function(){var p,n,m,k,o;for(p="Y-m-dTH:i:sP",n=[],m=0,k=p.length;m me.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:{g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(am|pm|AM|PM)",calcAtEnd:true},A:{g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(AM|PM|am|pm)",calcAtEnd:true},g:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(1[0-2]|[0-9])"},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(2[0-3]|1[0-9]|[0-9])"},h:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(1[0-2]|0[1-9])"},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(2[0-3]|[0-1][0-9])"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"([0-5][0-9])"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"([0-5][0-9])"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,5}"},Z:{g:1,c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n",s:"([+-]?\\d{1,5})"},c:function(){var n=[],k=[d.formatCodeToRegex("Y",1),d.formatCodeToRegex("m",2),d.formatCodeToRegex("d",3),d.formatCodeToRegex("H",4),d.formatCodeToRegex("i",5),d.formatCodeToRegex("s",6),{c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",d.formatCodeToRegex("P",8).c,"}else{",d.formatCodeToRegex("O",8).c,"}","}"].join("\n")}],o,m;for(o=0,m=k.length;o0?"-":"+")+Ext.String.leftPad(Math.floor(Math.abs(m)/60),2,"0")+(l?":":"")+Ext.String.leftPad(Math.abs(m%60),2,"0")},getDayOfYear:function(n){var l=0,p=Ext.Date.clone(n),k=n.getMonth(),o;for(o=0,p.setDate(1),p.setMonth(0);o28){l=Math.min(l,Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(n),Ext.Date.MONTH,q)).getDate())}r.setDate(l);r.setMonth(n.getMonth()+q);break;case Ext.Date.YEAR:l=n.getDate();if(l>28){l=Math.min(l,Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(n),Ext.Date.YEAR,q)).getDate())}r.setDate(l);r.setFullYear(n.getFullYear()+q);break}}if(p){switch(m.toLowerCase()){case Ext.Date.MILLI:o=1;break;case Ext.Date.SECOND:o=1000;break;case Ext.Date.MINUTE:o=1000*60;break;case Ext.Date.HOUR:o=1000*60*60;break;case Ext.Date.DAY:o=1000*60*60*24;break;case Ext.Date.MONTH:l=d.getDaysInMonth(r);o=1000*60*60*24*l;break;case Ext.Date.YEAR:l=(d.isLeapYear(r)?366:365);o=1000*60*60*24*l;break}if(o){r.setTime(r.getTime()+o*p)}}return r},subtract:function(l,k,m){return d.add(l,k,-m)},between:function(l,n,k){var m=l.getTime();return n.getTime()<=m&&m<=k.getTime()},compat:function(){var l=window.Date,k,r=["useStrict","formatCodeToRegex","parseFunctions","parseRegexes","formatFunctions","y2kYear","MILLI","SECOND","MINUTE","HOUR","DAY","MONTH","YEAR","defaults","dayNames","monthNames","monthNumbers","getShortMonthName","getShortDayName","getMonthNumber","formatCodes","isValid","parseDate","getFormatCode","createFormat","createParser","parseCodes"],o=["dateFormat","format","getTimezone","getGMTOffset","getDayOfYear","getWeekOfYear","isLeapYear","getFirstDayOfMonth","getLastDayOfMonth","getDaysInMonth","getSuffix","clone","isDST","clearTime","add","between"],q=r.length,m=o.length,n,t,u;for(u=0;u0){for(e=0;e0){if(z===y){return B[z]}A=B[z];y=y.substring(z.length+1)}if(A.length>0){A+="/"}return A.replace(c,"/")+y.replace(g,"/")+".js"},getPrefix:function(z){var B=k.config.paths,A,y="";if(B.hasOwnProperty(z)){return z}for(A in B){if(B.hasOwnProperty(A)&&A+"."===z.substring(0,A.length+1)){if(A.length>y.length){y=A}}}return y},isAClassNameWithAKnownPrefix:function(y){var z=k.getPrefix(y);return z!==""&&z!==y},require:function(A,z,y,B){if(z){z.call(y)}},syncRequire:function(){},exclude:function(y){return{require:function(B,A,z){return k.require(B,A,z,y)},syncRequire:function(B,A,z){return k.syncRequire(B,A,z,y)}}},onReady:function(B,A,C,y){var z;if(C!==false&&Ext.onDocumentReady){z=B;B=function(){Ext.onDocumentReady(z,A,y)}}B.call(A)}});var q=[],r={},u={},s={},p={},w=[],x=[],i={},l=function(y,z){return z.priority-y.priority};Ext.apply(k,{documentHead:typeof document!="undefined"&&(document.head||document.getElementsByTagName("head")[0]),isLoading:false,queue:q,isClassFileLoaded:r,isFileLoaded:u,readyListeners:w,optionalRequires:x,requiresMap:i,numPendingFiles:0,numLoadedFiles:0,hasFileLoadError:false,classNameToFilePathMap:s,scriptsLoading:0,syncModeEnabled:false,scriptElements:p,refreshQueue:function(){var C=q.length,z,B,y,A;if(!C&&!k.scriptsLoading){return k.triggerReady()}for(z=0;zk.numLoadedFiles){continue}for(y=0;y=200&&C<300)||(C===304)){if(!Ext.isIE){D="\n//@ sourceURL="+z}Ext.globalEval(I.responseText+D);G.call(J)}else{}}I=null}},syncRequire:function(){var y=k.syncModeEnabled;if(!y){k.syncModeEnabled=true}k.require.apply(k,arguments);if(!y){k.syncModeEnabled=false}k.refreshQueue()},require:function(Q,H,B,D){var J={},A={},G=[],S=[],P=[],z=[],F,R,L,K,y,E,O,N,M,I,C;if(D){D=(typeof D==="string")?[D]:D;for(N=0,I=D.length;N0){G=b.getNamesByExpression(y);for(M=0,C=G.length;M0){F=function(){var U=[],T,V;for(T=0,V=z.length;T0){S=b.getNamesByExpression(K);C=S.length;for(M=0;M0){if(!k.config.enabled){throw new Error("Ext.Loader is not enabled, so dependencies cannot be resolved dynamically. Missing required class"+((P.length>1)?"es":"")+": "+P.join(", "))}}else{F.call(B);return k}R=k.syncModeEnabled;if(!R){q.push({requires:P.slice(),callback:F,scope:B})}I=P.length;for(N=0;Nwindow.innerWidth?"portrait":"landscape"},destroy:function(){var c=arguments.length,b,a;for(b=0;b]+>/gi,c=/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,b=/\r?\n/g,d=/[^\d\.]/g,a;Ext.apply(g,{thousandSeparator:",",decimalSeparator:".",currencyPrecision:2,currencySign:"$",currencyAtEnd:false,undef:function(h){return h!==undefined?h:""},defaultValue:function(i,h){return i!==undefined&&i!==""?i:h},substr:"ab".substr(-1)!="b"?function(i,k,h){var j=String(i);return(k<0)?j.substr(Math.max(j.length+k,0),h):j.substr(k,h)}:function(i,j,h){return String(i).substr(j,h)},lowercase:function(h){return String(h).toLowerCase()},uppercase:function(h){return String(h).toUpperCase()},usMoney:function(h){return g.currency(h,"$",2)},currency:function(k,m,j,h){var o="",n=",0",l=0;k=k-0;if(k<0){k=-k;o="-"}j=Ext.isDefined(j)?j:g.currencyPrecision;n+=n+(j>0?".":"");for(;l2){}else{if(h.length>1){y=Ext.Number.toFixed(y,h[1].length)}else{y=Ext.Number.toFixed(y,0)}}x=y.toString();h=x.split(".");if(k){w=h[0];p=[];t=w.length;o=Math.floor(t/3);l=w.length%3||3;for(u=0;u")},capitalize:Ext.String.capitalize,ellipsis:Ext.String.ellipsis,format:Ext.String.format,htmlDecode:Ext.String.htmlDecode,htmlEncode:Ext.String.htmlEncode,leftPad:Ext.String.leftPad,trim:Ext.String.trim,parseBox:function(i){i=i||0;if(typeof i==="number"){return{top:i,right:i,bottom:i,left:i}}var j=i.split(" "),h=j.length;if(h==1){j[1]=j[2]=j[3]=j[0]}else{if(h==2){j[2]=j[0];j[3]=j[1]}else{if(h==3){j[3]=j[1]}}}return{top:parseInt(j[0],10)||0,right:parseInt(j[1],10)||0,bottom:parseInt(j[2],10)||0,left:parseInt(j[3],10)||0}},escapeRegex:function(h){return h.replace(/([\-.*+?\^${}()|\[\]\/\\])/g,"\\$1")}})}());Ext.define("Ext.util.TaskRunner",{interval:10,timerId:null,constructor:function(a){var b=this;if(typeof a=="number"){b.interval=a}else{if(a){Ext.apply(b,a)}}b.tasks=[];b.timerFn=Ext.Function.bind(b.onTick,b)},newTask:function(b){var a=new Ext.util.TaskRunner.Task(b);a.manager=this;return a},start:function(a){var c=this,b=new Date().getTime();if(!a.pending){c.tasks.push(a);a.pending=true}a.stopped=false;a.taskStartTime=b;a.taskRunTime=a.fireOnStart!==false?0:a.taskStartTime;a.taskRunCount=0;if(!c.firing){if(a.fireOnStart!==false){c.startTimer(0,b)}else{c.startTimer(a.interval,b)}}return a},stop:function(a){if(!a.stopped){a.stopped=true;if(a.onStop){a.onStop.call(a.scope||a,a)}}return a},stopAll:function(){Ext.each(this.tasks,this.stop,this)},firing:false,nextExpires:1e+99,onTick:function(){var m=this,e=m.tasks,a=new Date().getTime(),n=1e+99,k=e.length,c,o,h,b,d,g;m.timerId=null;m.firing=true;for(h=0;hc){n=c}}}if(o){m.tasks=o}m.firing=false;if(m.tasks.length){m.startTimer(n-a,new Date().getTime())}if(m.fireIdleEvent!==false){Ext.EventManager.idleEvent.fire()}},startTimer:function(e,c){var d=this,b=c+e,a=d.timerId;if(a&&d.nextExpires-b>d.interval){clearTimeout(a);a=null}if(!a){if(e',''," ({childCount} children)","",''," ({depth} deep)","",'',", {type}: {[this.time(values.sum)]} msec (","avg={[this.time(values.sum / parent.count)]}",")","","
    "].join(""),{time:function(n){return Math.round(n*100)/100}})}var m=this.getData(l);m.name=this.name;m.pure.type="Pure";m.total.type="Total";m.times=[m.pure,m.total];return d.apply(m)},getData:function(l){var m=this;return{count:m.count,childCount:m.childCount,depth:m.maxDepth,pure:g(m.count,m.childCount,l,m.pure),total:g(m.count,m.childCount,l,m.total)}},enter:function(){var l=this,m={accum:l,leave:e,childTime:0,parent:c};++l.depth;if(l.maxDepth','
    ',"",'
    ','
    ',"
    ",'
    ','
    '].join("");o.body.appendChild(d)}g=c[l];while(h--){j=i[h];m=g&&g[h];if(m!==undefined){k[j.identity]=m}else{if(d||j.early){k[j.identity]=j.fn.call(k,o,d)}else{e.push(j)}}}if(d){o.body.removeChild(d)}k.toRun=e},PointerEvents:"pointerEvents" in document.documentElement.style,LocalStorage:(function(){try{return"localStorage" in window&&window.localStorage!==null}catch(d){return false}})(),CSS3BoxShadow:"boxShadow" in document.documentElement.style||"WebkitBoxShadow" in document.documentElement.style||"MozBoxShadow" in document.documentElement.style,ClassList:!!document.documentElement.classList,OrientationChange:((typeof window.orientation!="undefined")&&("onorientationchange" in window)),DeviceMotion:("ondevicemotion" in window),Touch:("ontouchstart" in window)&&(!Ext.is.Desktop),TimeoutActualLateness:(function(){setTimeout(function(){Ext.supports.TimeoutActualLateness=arguments.length!==0},0)}()),tests:[{identity:"Transitions",fn:function(k,m){var j=["webkit","Moz","o","ms","khtml"],l="TransitionEnd",d=[j[0]+l,"transitionend",j[2]+l,j[3]+l,j[4]+l],h=j.length,g=0,e=false;for(;g

    ";return(g.childNodes.length==2)}},{identity:"Float",fn:function(d,e){return !!e.lastChild.style.cssFloat}},{identity:"AudioTag",fn:function(d){return !!d.createElement("audio").canPlayType}},{identity:"History",fn:function(){var d=window.history;return !!(d&&d.pushState)}},{identity:"CSS3DTransform",fn:function(){return(typeof WebKitCSSMatrix!="undefined"&&new WebKitCSSMatrix().hasOwnProperty("m41"))}},{identity:"CSS3LinearGradient",fn:function(j,d){var l="background-image:",k="-webkit-gradient(linear, left top, right bottom, from(black), to(white))",i="linear-gradient(left top, black, white)",h="-moz-"+i,e="-ms-"+i,g="-o-"+i,m=[l+k,l+i,l+h,l+e,l+g];d.style.cssText=m.join(";");return((""+d.style.backgroundImage).indexOf("gradient")!==-1)&&!Ext.isIE9}},{identity:"CSS3BorderRadius",fn:function(h,j){var e=["borderRadius","BorderRadius","MozBorderRadius","WebkitBorderRadius","OBorderRadius","KhtmlBorderRadius"],g=false,d;for(d=0;d=534.16}},{identity:"TextAreaMaxLength",fn:function(){var d=document.createElement("textarea");return("maxlength" in d)}},{identity:"GetPositionPercentage",fn:function(d,e){return a(e.childNodes[2],"left")=="10%"}},{identity:"PercentageHeightOverflowBug",fn:function(h){var d=false,g,e;if(Ext.getScrollbarSize().height){e=h.createElement("div");g=e.style;g.height="50px";g.width="50px";g.overflow="auto";g.position="absolute";e.innerHTML=['
    ','
    ',"
    "].join("");h.body.appendChild(e);if(e.firstChild.offsetHeight===50){d=true}h.body.removeChild(e)}return d}},{identity:"xOriginBug",fn:function(h,i){i.innerHTML='
    ';var g=document.getElementById("b1").getBoundingClientRect(),e=document.getElementById("b2").getBoundingClientRect(),d=document.getElementById("b3").getBoundingClientRect();return(e.left!==g.left&&d.right!==g.right)}}]}}());Ext.supports.init();Ext.util.DelayedTask=function(e,d,b,h){var g=this,i,a,c=function(){clearInterval(i);i=null;e.apply(d,b||[]);Ext.EventManager.idleEvent.fire()};h=typeof h==="boolean"?h:true;g.delay=function(k,m,l,j){if(h){g.cancel()}a=k||a,e=m||e;d=l||d;b=j||b;if(!i){i=setInterval(c,a)}};g.cancel=function(){if(i){clearInterval(i);i=null}}};Ext.define("Ext.util.Event",function(){var d=Array.prototype.slice,a=Ext.Array.insert,b=Ext.Array.toArray,c=Ext.util.DelayedTask;return{isEvent:true,suspended:0,noOptions:{},constructor:function(g,e){this.name=e;this.observable=g;this.listeners=[]},addListener:function(p,r,t){var n=this,o,j,q,e,s,m,h,l,k,g;r=r||n.observable;if(!n.isListening(p,r)){j=n.createListener(p,r,t);if(n.firing){n.listeners=n.listeners.slice(0)}o=n.listeners;l=h=o.length;q=t&&t.priority;s=n._highestNegativePriorityIndex;m=(s!==undefined);if(q){e=(q<0);if(!e||m){for(k=(e?s:0);k0){l.firing=true;g=arguments.length?d.call(arguments,0):[];e=g.length;for(h=0;h111&&i.keyCode<124){i.keyCode=-1}}catch(j){}}},getRelatedTarget:function(i){i=i.browserEvent||i;var j=i.relatedTarget;if(!j){if(a.mouseLeaveRe.test(i.type)){j=i.toElement}else{if(a.mouseEnterRe.test(i.type)){j=i.fromElement}}}return a.resolveTextNode(j)},getPageX:function(i){return a.getPageXY(i)[0]},getPageY:function(i){return a.getPageXY(i)[1]},getPageXY:function(k){k=k.browserEvent||k;var j=k.pageX,m=k.pageY,l=g.documentElement,i=g.body;if(!j&&j!==0){j=k.clientX+(l&&l.scrollLeft||i&&i.scrollLeft||0)-(l&&l.clientLeft||i&&i.clientLeft||0);m=k.clientY+(l&&l.scrollTop||i&&i.scrollTop||0)-(l&&l.clientTop||i&&i.clientTop||0)}return[j,m]},getTarget:function(i){i=i.browserEvent||i;return a.resolveTextNode(i.target||i.srcElement)},resolveTextNode:Ext.isGecko?function(j){if(j){var i=HTMLElement.prototype.toString.call(j);if(i!=="[xpconnect wrapped native prototype]"&&i!=="[object XULElement]"){return j.nodeType==3?j.parentNode:j}}}:function(i){return i&&i.nodeType==3?i.parentNode:i},curWidth:0,curHeight:0,onWindowResize:function(l,k,j){var i=a.resizeEvent;if(!i){a.resizeEvent=i=new Ext.util.Event();a.on(e,"resize",a.fireResize,null,{buffer:100})}i.addListener(l,k,j)},fireResize:function(){var i=Ext.Element.getViewWidth(),j=Ext.Element.getViewHeight();if(a.curHeight!=j||a.curWidth!=i){a.curHeight=j;a.curWidth=i;a.resizeEvent.fire(i,j)}},removeResizeListener:function(k,j){var i=a.resizeEvent;if(i){i.removeListener(k,j)}},onWindowUnload:function(l,k,j){var i=a.unloadEvent;if(!i){a.unloadEvent=i=new Ext.util.Event();a.addListener(e,"unload",a.fireUnload)}if(l){i.addListener(l,k,j)}},fireUnload:function(){try{g=e=undefined;var o,k,m,l,j;a.unloadEvent.fire();if(Ext.isGecko3){o=Ext.ComponentQuery.query("gridview");k=0;m=o.length;for(;k=525:!((Ext.isGecko&&!Ext.isWindows)||Ext.isOpera),getKeyEvent:function(){return a.useKeyDown?"keydown":"keypress"}});if(!("addEventListener" in document)&&document.attachEvent){Ext.apply(a,{pollScroll:function(){var i=true;try{document.documentElement.doScroll("left")}catch(j){i=false}if(i&&document.body){a.onReadyEvent({type:"doScroll"})}else{a.scrollTimeout=setTimeout(a.pollScroll,20)}return i},scrollTimeout:null,readyStatesRe:/complete/i,checkReadyState:function(){var i=document.readyState;if(a.readyStatesRe.test(i)){a.onReadyEvent({type:i})}},bindReadyEvent:function(){var i=true;if(a.hasBoundOnReady){return}try{i=window.frameElement===undefined}catch(j){i=false}if(!i||!g.documentElement.doScroll){a.pollScroll=Ext.emptyFn}if(a.pollScroll()===true){return}if(g.readyState=="complete"){a.onReadyEvent({type:"already "+(g.readyState||"body")})}else{g.attachEvent("onreadystatechange",a.checkReadyState);window.attachEvent("onload",a.onReadyEvent);a.hasBoundOnReady=true}},onReadyEvent:function(i){if(i&&i.type){a.onReadyChain.push(i.type)}if(a.hasBoundOnReady){document.detachEvent("onreadystatechange",a.checkReadyState);window.detachEvent("onload",a.onReadyEvent)}if(Ext.isNumber(a.scrollTimeout)){clearTimeout(a.scrollTimeout);delete a.scrollTimeout}if(!Ext.isReady){a.fireDocReady()}},onReadyChain:[]})}Ext.onReady=function(k,j,i){Ext.Loader.onReady(k,j,true,i)};Ext.onDocumentReady=a.onDocumentReady;a.on=a.addListener;a.un=a.removeListener;Ext.onReady(c)};Ext.define("Ext.util.Observable",function(a){var d=[],e=Array.prototype,g=e.slice,c=Ext.util.Event,b=function(h){if(h instanceof b){return h}this.observable=h;if(arguments[1].isObservable){this.managedListeners=true}this.args=g.call(arguments,1)};b.prototype.destroy=function(){this.observable[this.managedListeners?"mun":"un"].apply(this.observable,this.args)};return{statics:{releaseCapture:function(h){h.fireEvent=this.prototype.fireEvent},capture:function(j,i,h){j.fireEvent=Ext.Function.createInterceptor(j.fireEvent,i,h)},observe:function(h,i){if(h){if(!h.isObservable){Ext.applyIf(h,new this());this.capture(h.prototype,h.fireEvent,h)}if(Ext.isObject(i)){h.on(i)}}return h},prepareClass:function(j,i){if(!j.HasListeners){var k=function(){},h=j.superclass.HasListeners||(i&&i.HasListeners)||a.HasListeners;j.prototype.HasListeners=j.HasListeners=k;k.prototype=j.hasListeners=new h()}}},isObservable:true,eventsSuspended:0,constructor:function(h){var i=this;Ext.apply(i,h);if(!i.hasListeners){i.hasListeners=new i.HasListeners()}i.events=i.events||{};if(i.listeners){i.on(i.listeners);i.listeners=null}if(i.bubbleEvents){i.enableBubble(i.bubbleEvents)}},onClassExtended:function(h){if(!h.HasListeners){a.prepareClass(h)}},eventOptionsRe:/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate|element|destroyable|vertical|horizontal|freezeEvent|priority)$/,addManagedListener:function(o,k,m,p,q,j){var l=this,n=l.managedListeners=l.managedListeners||[],i,h;if(typeof k!=="string"){h=arguments.length>4?q:k;q=k;for(k in q){if(q.hasOwnProperty(k)){i=q[k];if(!l.eventOptionsRe.test(k)){l.addManagedListener(o,k,i.fn||i,i.scope||q.scope||p,i.fn?i:h,true)}}}if(q&&q.destroyable){return new b(l,o,q)}}else{if(typeof m==="string"){p=p||l;m=p[m]}n.push({item:o,ename:k,fn:m,scope:p,options:q});o.on(k,m,p,q);if(!j&&q&&q.destroyable){return new b(l,o,k,m,p)}}},removeManagedListener:function(p,k,n,q){var m=this,r,j,o,h,l;if(typeof k!=="string"){r=k;for(k in r){if(r.hasOwnProperty(k)){j=r[k];if(!m.eventOptionsRe.test(k)){m.removeManagedListener(p,k,j.fn||j,j.scope||r.scope||q)}}}}else{o=m.managedListeners?m.managedListeners.slice():[];for(l=0,h=o.length;l=532){a=120}else{a=12}a*=3}else{a=120}}return a}()),clickRe:/(dbl)?click/,safariKeys:{3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35},btnMap:Ext.isIE?{1:0,4:1,2:2}:{0:0,1:1,2:2},constructor:function(a,b){if(a){this.setEvent(a.browserEvent||a,b)}},setEvent:function(d,e){var c=this,b,a;if(d===c||(d&&d.browserEvent)){return d}c.browserEvent=d;if(d){b=d.button?c.btnMap[d.button]:(d.which?d.which-1:-1);if(c.clickRe.test(d.type)&&b==-1){b=0}a={type:d.type,button:b,shiftKey:d.shiftKey,ctrlKey:d.ctrlKey||d.metaKey||false,altKey:d.altKey,keyCode:d.keyCode,charCode:d.charCode,target:Ext.EventManager.getTarget(d),relatedTarget:Ext.EventManager.getRelatedTarget(d),currentTarget:d.currentTarget,xy:(e?c.getXY():null)}}else{a={button:-1,shiftKey:false,ctrlKey:false,altKey:false,keyCode:0,charCode:0,target:null,xy:[0,0]}}Ext.apply(c,a);return c},stopEvent:function(){this.stopPropagation();this.preventDefault()},preventDefault:function(){if(this.browserEvent){Ext.EventManager.preventDefault(this.browserEvent)}},stopPropagation:function(){var a=this.browserEvent;if(a){if(a.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(this)}Ext.EventManager.stopPropagation(a)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){return this.normalizeKey(this.keyCode||this.charCode)},normalizeKey:function(a){return Ext.isWebKit?(this.safariKeys[a]||a):a},getPageX:function(){return this.getX()},getPageY:function(){return this.getY()},getX:function(){return this.getXY()[0]},getY:function(){return this.getXY()[1]},getXY:function(){if(!this.xy){this.xy=Ext.EventManager.getPageXY(this.browserEvent)}return this.xy},getTarget:function(b,c,a){if(b){return Ext.fly(this.target).findParent(b,c,a)}return a?Ext.get(this.target):this.target},getRelatedTarget:function(b,c,a){if(b&&this.relatedTarget){return Ext.fly(this.relatedTarget).findParent(b,c,a)}return a?Ext.get(this.relatedTarget):this.relatedTarget},correctWheelDelta:function(c){var b=this.WHEEL_SCALE,a=Math.round(c/b);if(!a&&c){a=(c<0)?-1:1}return a},getWheelDeltas:function(){var d=this,c=d.browserEvent,b=0,a=0;if(Ext.isDefined(c.wheelDeltaX)){b=c.wheelDeltaX;a=c.wheelDeltaY}else{if(c.wheelDelta){a=c.wheelDelta}else{if(c.detail){a=-c.detail;if(a>100){a=3}else{if(a<-100){a=-3}}if(Ext.isDefined(c.axis)&&c.axis===c.HORIZONTAL_AXIS){b=a;a=0}}}}return{x:d.correctWheelDelta(b),y:d.correctWheelDelta(a)}},getWheelDelta:function(){var a=this.getWheelDeltas();return a.y},within:function(d,e,b){if(d){var c=e?this.getRelatedTarget():this.getTarget(),a;if(c){a=Ext.fly(d).contains(c);if(!a&&b){a=c==Ext.getDom(d)}return a}}return false},isNavKeyPress:function(){var b=this,a=this.normalizeKey(b.keyCode);return(a>=33&&a<=40)||a==b.RETURN||a==b.TAB||a==b.ESC},isSpecialKey:function(){var a=this.normalizeKey(this.keyCode);return(this.type=="keypress"&&this.ctrlKey)||this.isNavKeyPress()||(a==this.BACKSPACE)||(a>=16&&a<=20)||(a>=44&&a<=46)},getPoint:function(){var a=this.getXY();return new Ext.util.Point(a[0],a[1])},hasModifier:function(){return this.ctrlKey||this.altKey||this.shiftKey||this.metaKey},injectEvent:(function(){var d,e={},c;if(!Ext.isIE&&document.createEvent){d={createHtmlEvent:function(k,i,h,g){var j=k.createEvent("HTMLEvents");j.initEvent(i,h,g);return j},createMouseEvent:function(u,s,m,l,o,k,i,j,g,r,q,n,p){var h=u.createEvent("MouseEvents"),t=u.defaultView||window;if(h.initMouseEvent){h.initMouseEvent(s,m,l,t,o,k,i,k,i,j,g,r,q,n,p)}else{h=u.createEvent("UIEvents");h.initEvent(s,m,l);h.view=t;h.detail=o;h.screenX=k;h.screenY=i;h.clientX=k;h.clientY=i;h.ctrlKey=j;h.altKey=g;h.metaKey=q;h.shiftKey=r;h.button=n;h.relatedTarget=p}return h},createUIEvent:function(m,k,i,h,j){var l=m.createEvent("UIEvents"),g=m.defaultView||window;l.initUIEvent(k,i,h,g,j);return l},fireEvent:function(i,g,h){i.dispatchEvent(h)},fixTarget:function(g){if(g==window&&!g.dispatchEvent){return document}return g}}}else{if(document.createEventObject){c={0:1,1:4,2:2};d={createHtmlEvent:function(k,i,h,g){var j=k.createEventObject();j.bubbles=h;j.cancelable=g;return j},createMouseEvent:function(t,s,m,l,o,k,i,j,g,r,q,n,p){var h=t.createEventObject();h.bubbles=m;h.cancelable=l;h.detail=o;h.screenX=k;h.screenY=i;h.clientX=k;h.clientY=i;h.ctrlKey=j;h.altKey=g;h.shiftKey=r;h.metaKey=q;h.button=c[n]||n;h.relatedTarget=p;return h},createUIEvent:function(l,j,h,g,i){var k=l.createEventObject();k.bubbles=h;k.cancelable=g;return k},fireEvent:function(i,g,h){i.fireEvent("on"+g,h)},fixTarget:function(g){if(g==document){return document.documentElement}return g}}}}Ext.Object.each({load:[false,false],unload:[false,false],select:[true,false],change:[true,false],submit:[true,true],reset:[true,false],resize:[true,false],scroll:[true,false]},function(i,j){var h=j[0],g=j[1];e[i]=function(m,k){var l=d.createHtmlEvent(i,h,g);d.fireEvent(m,i,l)}});function b(i,h){var g=(i!="mousemove");return function(m,j){var l=j.getXY(),k=d.createMouseEvent(m.ownerDocument,i,true,g,h,l[0],l[1],j.ctrlKey,j.altKey,j.shiftKey,j.metaKey,j.button,j.relatedTarget);d.fireEvent(m,i,k)}}Ext.each(["click","dblclick","mousedown","mouseup","mouseover","mousemove","mouseout"],function(g){e[g]=b(g,1)});Ext.Object.each({focusin:[true,false],focusout:[true,false],activate:[true,true],focus:[false,false],blur:[false,false]},function(i,j){var h=j[0],g=j[1];e[i]=function(m,k){var l=d.createUIEvent(m.ownerDocument,i,h,g,1);d.fireEvent(m,i,l)}});if(!d){e={};d={fixTarget:Ext.identityFn}}function a(h,g){}return function(j){var i=this,h=e[i.type]||a,g=j?(j.dom||j):i.getTarget();g=d.fixTarget(g);h(g,i)}}())},function(){Ext.EventObject=new Ext.EventObjectImpl()});Ext.define("Ext.dom.AbstractQuery",{select:function(k,b){var h=[],d,g,e,c,a;b=b||document;if(typeof b=="string"){b=document.getElementById(b)}k=k.split(",");for(g=0,c=k.length;g")}else{b.push(">");if((a=j.tpl)){a.applyOut(j.tplData,b)}if((a=j.html)){b.push(a)}if((a=j.cn||j.children)){h.generateMarkup(a,b)}c=h.closeTags;b.push(c[k]||(c[k]=""))}}}return b},generateStyles:function(e,c){var b=c||[],d;for(d in e){if(e.hasOwnProperty(d)){b.push(this.decamelizeName(d),":",e[d],";")}}return c||b.join("")},markup:function(a){if(typeof a=="string"){return a}var b=this.generateMarkup(a,[]);return b.join("")},applyStyles:function(c,d){if(d){var b=0,a;c=Ext.fly(c,"_applyStyles");if(typeof d=="function"){d=d.call()}if(typeof d=="string"){d=Ext.util.Format.trim(d).split(this.styleSepRe);for(a=d.length;b "'+c+'"'},insertBefore:function(a,c,b){return this.doInsert(a,c,b,"beforebegin")},insertAfter:function(a,c,b){return this.doInsert(a,c,b,"afterend","nextSibling")},insertFirst:function(a,c,b){return this.doInsert(a,c,b,"afterbegin","firstChild")},append:function(a,c,b){return this.doInsert(a,c,b,"beforeend","",true)},overwrite:function(a,c,b){a=Ext.getDom(a);a.innerHTML=this.markup(c);return b?Ext.get(a.firstChild):a.firstChild},doInsert:function(d,g,e,h,c,a){var b=this.insertHtml(h,Ext.getDom(d),this.markup(g));return e?Ext.get(b,true):b}});Ext.define("Ext.dom.AbstractElement_static",{override:"Ext.dom.AbstractElement",inheritableStatics:{unitRe:/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i,camelRe:/(-[a-z])/gi,msRe:/^-ms-/,cssRe:/([a-z0-9\-]+)\s*:\s*([^;\s]+(?:\s*[^;\s]+)*)?;?/gi,opacityRe:/alpha\(opacity=(.*)\)/i,propertyCache:{},defaultUnit:"px",borders:{l:"border-left-width",r:"border-right-width",t:"border-top-width",b:"border-bottom-width"},paddings:{l:"padding-left",r:"padding-right",t:"padding-top",b:"padding-bottom"},margins:{l:"margin-left",r:"margin-right",t:"margin-top",b:"margin-bottom"},addUnits:function(b,a){if(typeof b=="number"){return b+(a||this.defaultUnit||"px")}if(b===""||b=="auto"||b===undefined||b===null){return b||""}if(!this.unitRe.test(b)){return b||""}return b},isAncestor:function(b,d){var a=false;b=Ext.getDom(b);d=Ext.getDom(d);if(b&&d){if(b.contains){return b.contains(d)}else{if(b.compareDocumentPosition){return !!(b.compareDocumentPosition(d)&16)}else{while((d=d.parentNode)){a=d==b||a}}}}return a},parseBox:function(c){c=c||0;var a=typeof c,d,b;if(a==="number"){return{top:c,right:c,bottom:c,left:c}}else{if(a!=="string"){return c}}d=c.split(" ");b=d.length;if(b==1){d[1]=d[2]=d[3]=d[0]}else{if(b==2){d[2]=d[0];d[3]=d[1]}else{if(b==3){d[3]=d[1]}}}return{top:parseFloat(d[0])||0,right:parseFloat(d[1])||0,bottom:parseFloat(d[2])||0,left:parseFloat(d[3])||0}},unitizeBox:function(g,e){var d=this.addUnits,c=this.parseBox(g);return d(c.top,e)+" "+d(c.right,e)+" "+d(c.bottom,e)+" "+d(c.left,e)},camelReplaceFn:function(b,c){return c.charAt(1).toUpperCase()},normalize:function(a){if(a=="float"){a=Ext.supports.Float?"cssFloat":"styleFloat"}return this.propertyCache[a]||(this.propertyCache[a]=a.replace(this.msRe,"ms-").replace(this.camelRe,this.camelReplaceFn))},getDocumentHeight:function(){return Math.max(!Ext.isStrict?document.body.scrollHeight:document.documentElement.scrollHeight,this.getViewportHeight())},getDocumentWidth:function(){return Math.max(!Ext.isStrict?document.body.scrollWidth:document.documentElement.scrollWidth,this.getViewportWidth())},getViewportHeight:function(){return window.innerHeight},getViewportWidth:function(){return window.innerWidth},getViewSize:function(){return{width:window.innerWidth,height:window.innerHeight}},getOrientation:function(){if(Ext.supports.OrientationChange){return(window.orientation==0)?"portrait":"landscape"}return(window.innerHeight>window.innerWidth)?"portrait":"landscape"},fromPoint:function(a,b){return Ext.get(document.elementFromPoint(a,b))},parseStyles:function(c){var a={},b=this.cssRe,d;if(c){b.lastIndex=0;while((d=b.exec(c))){a[d[1]]=d[2]||""}}return a}}},function(){var c=document,b=null,a=c.compatMode=="CSS1Compat";if(!("activeElement" in c)&&c.addEventListener){c.addEventListener("focus",function(e){if(e&&e.target){b=(e.target==c)?null:e.target}},true)}function d(g,h,e){return function(){g.selectionStart=h;g.selectionEnd=e}}this.addInheritableStatics({getActiveElement:function(){var h;try{h=c.activeElement}catch(g){}h=h||b;if(!h){h=b=document.body}return h},getRightMarginFixCleaner:function(k){var h=Ext.supports,i=h.DisplayChangeInputSelectionBug,j=h.DisplayChangeTextAreaSelectionBug,l,e,m,g;if(i||j){l=c.activeElement||b;e=l&&l.tagName;if((j&&e=="TEXTAREA")||(i&&e=="INPUT"&&l.type=="text")){if(Ext.dom.Element.isAncestor(k,l)){m=l.selectionStart;g=l.selectionEnd;if(Ext.isNumber(m)&&Ext.isNumber(g)){return d(l,m,g)}}}}return Ext.emptyFn},getViewWidth:function(e){return e?Ext.dom.Element.getDocumentWidth():Ext.dom.Element.getViewportWidth()},getViewHeight:function(e){return e?Ext.dom.Element.getDocumentHeight():Ext.dom.Element.getViewportHeight()},getDocumentHeight:function(){return Math.max(!a?c.body.scrollHeight:c.documentElement.scrollHeight,Ext.dom.Element.getViewportHeight())},getDocumentWidth:function(){return Math.max(!a?c.body.scrollWidth:c.documentElement.scrollWidth,Ext.dom.Element.getViewportWidth())},getViewportHeight:function(){return Ext.isIE9m?(Ext.isStrict?c.documentElement.clientHeight:c.body.clientHeight):self.innerHeight},getViewportWidth:function(){return(!Ext.isStrict&&!Ext.isOpera)?c.body.clientWidth:Ext.isIE9m?c.documentElement.clientWidth:self.innerWidth},serializeForm:function(i){var j=i.elements||(document.forms[i]||Ext.getDom(i)).elements,t=false,s=encodeURIComponent,m="",l=j.length,n,g,r,v,u,p,k,q,h;for(p=0;p0?s:0},getWidth:function(s){var u=this.dom,t=s?(u.clientWidth-this.getPadding("lr")):u.offsetWidth;return t>0?t:0},setWidth:function(s){var t=this;t.dom.style.width=d.addUnits(s);return t},setHeight:function(s){var t=this;t.dom.style.height=d.addUnits(s);return t},getBorderWidth:function(s){return this.addStyles(s,l)},getPadding:function(s){return this.addStyles(s,g)},margins:n,applyStyles:function(u){if(u){var t,s,v=this.dom;if(typeof u=="function"){u=u.call()}if(typeof u=="string"){u=Ext.util.Format.trim(u).split(/\s*(?::|;)\s*/);for(t=0,s=u.length;t'+t+""):""});A=y.getSize();v.mask=C;if(u===document.body){A.height=window.innerHeight;if(y.orientationHandler){Ext.EventManager.unOrientationChange(y.orientationHandler,y)}y.orientationHandler=function(){A=y.getSize();A.height=window.innerHeight;C.setSize(A)};Ext.EventManager.onOrientationChange(y.orientationHandler,y)}C.setSize(A);if(Ext.is.iPad){Ext.repaint()}},unmask:function(){var t=this,v=(t.$cache||t.getCache()).data,s=v.mask,u=Ext.baseCSSPrefix;if(s){s.remove();delete v.mask}t.removeCls([u+"masked",u+"masked-relative"]);if(t.dom===document.body){Ext.EventManager.unOrientationChange(t.orientationHandler,t);delete t.orientationHandler}}});Ext.onReady(function(){var A=Ext.supports,s,y,w,t,z;function x(F,C,E,B){var D=B[this.name]||"";return c.test(D)?"transparent":D}function v(H,E,G,D){var B=D.marginRight,C,F;if(B!="0px"){C=H.style;F=C.display;C.display="inline-block";B=(G?D:H.ownerDocument.defaultView.getComputedStyle(H,null)).marginRight;C.display=F}return B}function u(I,F,H,E){var B=E.marginRight,D,C,G;if(B!="0px"){D=I.style;C=d.getRightMarginFixCleaner(I);G=D.display;D.display="inline-block";B=(H?E:I.ownerDocument.defaultView.getComputedStyle(I,"")).marginRight;D.display=G;C()}return B}s=d.prototype.styleHooks;if(A.init){A.init()}if(!A.RightMargin){s.marginRight=s["margin-right"]={name:"marginRight",get:(A.DisplayChangeInputSelectionBug||A.DisplayChangeTextAreaSelectionBug)?u:v}}if(!A.TransparentColor){y=["background-color","border-color","color","outline-color"];for(w=y.length;w--;){t=y[w];z=d.normalize(t);s[t]=s[z]={name:z,get:x}}}})});Ext.define("Ext.dom.AbstractElement_traversal",{override:"Ext.dom.AbstractElement",findParent:function(h,b,a){var e=this.dom,c=document.documentElement,g=0,d;b=b||50;if(isNaN(b)){d=Ext.getDom(b);b=Number.MAX_VALUE}while(e&&e.nodeType==1&&g "+a,c.dom);return b?d:Ext.get(d)},parent:function(a,b){return this.matchNode("parentNode","parentNode",a,b)},next:function(a,b){return this.matchNode("nextSibling","nextSibling",a,b)},prev:function(a,b){return this.matchNode("previousSibling","previousSibling",a,b)},first:function(a,b){return this.matchNode("nextSibling","firstChild",a,b)},last:function(a,b){return this.matchNode("previousSibling","lastChild",a,b)},matchNode:function(b,e,a,c){if(!this.dom){return null}var d=this.dom[e];while(d){if(d.nodeType==1&&(!a||Ext.DomQuery.is(d,a))){return !c?Ext.get(d):d}d=d[b]}return null},isAncestor:function(a){return this.self.isAncestor.call(this.self,this.dom,a)}});Ext.define("Ext.dom.AbstractElement",{trimRe:/^\s+|\s+$/g,whitespaceRe:/\s/,inheritableStatics:{trimRe:/^\s+|\s+$/g,whitespaceRe:/\s/,get:function(c){var i=this,j=window.document,d=Ext.dom.Element,h,b,g,e,a;if(!c){return null}if(c.isFly){c=c.dom}if(typeof c=="string"){if(c==Ext.windowId){return d.get(window)}else{if(c==Ext.documentId){return d.get(j)}}h=Ext.cache[c];if(h&&h.skipGarbageCollection){g=h.el;return g}if(!(e=j.getElementById(c))){return null}if(h&&h.el){g=Ext.updateCacheEntry(h,e).el}else{g=new d(e,!!h)}return g}else{if(c.tagName){if(!(a=c.id)){a=Ext.id(c)}h=Ext.cache[a];if(h&&h.el){g=Ext.updateCacheEntry(h,c).el}else{g=new d(c,!!h)}return g}else{if(c instanceof i){if(c!=i.docEl&&c!=i.winEl){a=c.id;h=Ext.cache[a];if(h){Ext.updateCacheEntry(h,j.getElementById(a)||c.dom)}}return c}else{if(c.isComposite){return c}else{if(Ext.isArray(c)){return i.select(c)}else{if(c===j){if(!i.docEl){b=i.docEl=Ext.Object.chain(d.prototype);b.dom=j;b.el=b;b.id=Ext.id(j);i.addToCache(b)}return i.docEl}else{if(c===window){if(!i.winEl){i.winEl=Ext.Object.chain(d.prototype);i.winEl.dom=window;i.winEl.id=Ext.id(window);i.addToCache(i.winEl)}return i.winEl}}}}}}}return null},addToCache:function(a,b){if(a){Ext.addCacheEntry(b,a)}return a},addMethods:function(){this.override.apply(this,arguments)},mergeClsList:function(){var m,k={},g,b,d,h,c,n=[],e=false,a=this.trimRe,l=this.whitespaceRe;for(g=0,b=arguments.length;g",n=""+h,k=c+"",e=""+n,p=document.createElement("div"),m=["BeforeBegin","previousSibling"],j=["AfterEnd","nextSibling"],d={beforebegin:m,afterend:j},g={beforebegin:m,afterend:j,afterbegin:["AfterBegin","firstChild"],beforeend:["BeforeEnd","lastChild"]};return{extend:Ext.dom.AbstractHelper,tableRe:/^(?:table|thead|tbody|tr|td)$/i,tableElRe:/td|tr|tbody|thead/i,useDom:false,createDom:function(q,w){var r,z=document,u,x,s,y,v,t;if(Ext.isArray(q)){r=z.createDocumentFragment();for(v=0,t=q.length;v1){for(;c]*)\>)|(?:<\/tpl>)/g,actionsRe:/\s*(elif|elseif|if|for|foreach|exec|switch|case|eval|between)\s*\=\s*(?:(?:"([^"]*)")|(?:'([^']*)'))\s*/g,propRe:/prop=(?:(?:"([^"]*)")|(?:'([^']*)'))/,defaultRe:/^\s*default\s*$/,elseRe:/^\s*else\s*$/});Ext.define("Ext.XTemplateCompiler",{extend:Ext.XTemplateParser,useEval:Ext.isGecko,useIndex:Ext.isIE8m,useFormat:true,propNameRe:/^[\w\d\$]*$/,compile:function(a){var c=this,b=c.generate(a);return c.useEval?c.evalTpl(b):(new Function("Ext",b))(Ext)},generate:function(a){var d=this,b="var fm=Ext.util.Format,ts=Object.prototype.toString;",c;d.maxLevel=0;d.body=["var c0=values, a0="+d.createArrayTest(0)+", p0=parent, n0=xcount, i0=xindex, k0, v;\n"];if(d.definitions){if(typeof d.definitions==="string"){d.definitions=[d.definitions,b]}else{d.definitions.push(b)}}else{d.definitions=[b]}d.switches=[];d.parse(a);d.definitions.push((d.useEval?"$=":"return")+" function ("+d.fnArgs+") {",d.body.join(""),"}");c=d.definitions.join("\n");d.definitions.length=d.body.length=d.switches.length=0;delete d.definitions;delete d.body;delete d.switches;return c},doText:function(c){var b=this,a=b.body;c=c.replace(b.aposRe,"\\'").replace(b.newLineRe,"\\n");if(b.useIndex){a.push("out[out.length]='",c,"'\n")}else{a.push("out.push('",c,"')\n")}},doExpr:function(b){var a=this.body;a.push("if ((v="+b+") != null) out");if(this.useIndex){a.push("[out.length]=v+''\n")}else{a.push(".push(v+'')\n")}},doTag:function(a){var b=this.parseTag(a);if(b){this.doExpr(b)}else{this.doText("{"+a+"}")}},doElse:function(){this.body.push("} else {\n")},doEval:function(a){this.body.push(a,"\n")},doIf:function(b,c){var a=this;if(b==="."){a.body.push("if (values) {\n")}else{if(a.propNameRe.test(b)){a.body.push("if (",a.parseTag(b),") {\n")}else{a.body.push("if (",a.addFn(b),a.callFn,") {\n")}}if(c.exec){a.doExec(c.exec)}},doElseIf:function(b,c){var a=this;if(b==="."){a.body.push("else if (values) {\n")}else{if(a.propNameRe.test(b)){a.body.push("} else if (",a.parseTag(b),") {\n")}else{a.body.push("} else if (",a.addFn(b),a.callFn,") {\n")}}if(c.exec){a.doExec(c.exec)}},doSwitch:function(b){var a=this;if(b==="."){a.body.push("switch (values) {\n")}else{if(a.propNameRe.test(b)){a.body.push("switch (",a.parseTag(b),") {\n")}else{a.body.push("switch (",a.addFn(b),a.callFn,") {\n")}}a.switches.push(0)},doCase:function(e){var d=this,c=Ext.isArray(e)?e:[e],g=d.switches.length-1,a,b;if(d.switches[g]){d.body.push("break;\n")}else{d.switches[g]++}for(b=0,g=c.length;b1){ out.push("',h.between,'"); } \n')}},doForEach:function(e,h){var d=this,c,b=d.level,a=b-1,g;if(e==="."){c="values"}else{if(d.propNameRe.test(e)){c=d.parseTag(e)}else{c=d.addFn(e)+d.callFn}}if(d.maxLevel1){ out.push("',h.between,'"); } \n')}},createArrayTest:("isArray" in Array)?function(a){return"Array.isArray(c"+a+")"}:function(a){return"ts.call(c"+a+')==="[object Array]"'},doExec:function(c,d){var b=this,a="f"+b.definitions.length;b.definitions.push("function "+a+"("+b.fnArgs+") {"," try { with(values) {"," "+c," }} catch(e) {","}","}");b.body.push(a+b.callFn+"\n")},addFn:function(a){var c=this,b="f"+c.definitions.length;if(a==="."){c.definitions.push("function "+b+"("+c.fnArgs+") {"," return values","}")}else{if(a===".."){c.definitions.push("function "+b+"("+c.fnArgs+") {"," return parent","}")}else{c.definitions.push("function "+b+"("+c.fnArgs+") {"," try { with(values) {"," return("+a+")"," }} catch(e) {","}","}")}}return b},parseTag:function(b){var h=this,a=h.tagRe.exec(b),e,i,d,g,c;if(!a){return null}e=a[1];i=a[2];d=a[3];g=a[4];if(e=="."){if(!h.validTypes){h.definitions.push("var validTypes={string:1,number:1,boolean:1};");h.validTypes=true}c='validTypes[typeof values] || ts.call(values) === "[object Date]" ? values : ""'}else{if(e=="#"){c="xindex"}else{if(e=="$"){c="xkey"}else{if(e.substr(0,7)=="parent."){c=e}else{if(isNaN(e)&&e.indexOf("-")==-1&&e.indexOf(".")!=-1){c="values."+e}else{c="values['"+e+"']"}}}}}if(g){c="("+c+g+")"}if(i&&h.useFormat){d=d?","+d:"";if(i.substr(0,5)!="this."){i="fm."+i+"("}else{i+="("}}else{return c}return i+c+d+")"},evalTpl:function($){eval($);return $},newLineRe:/\r\n|\r|\n/g,aposRe:/[']/g,intRe:/^\s*(\d+)\s*$/,tagRe:/^([\w-\.\#\$]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\/]\s?[\d\.\+\-\*\/\(\)]+)?$/},function(){var a=this.prototype;a.fnArgs="out,values,parent,xindex,xcount,xkey";a.callFn=".call(this,"+a.fnArgs+")"});Ext.define("Ext.XTemplate",{extend:Ext.Template,emptyObj:{},apply:function(a,b){return this.applyOut(a,[],b).join("")},applyOut:function(a,b,d){var g=this,c;if(!g.fn){c=new Ext.XTemplateCompiler({useFormat:g.disableFormats!==true,definitions:g.definitions});g.fn=c.compile(g.html)}try{g.fn(b,a,d||g.emptyObj,1,1)}catch(h){}return b},compile:function(){return this},statics:{getTpl:function(b,d){var c=b[d],a;if(c&&!c.isTemplate){c=Ext.ClassManager.dynInstantiate("Ext.XTemplate",c);if(b.hasOwnProperty(d)){a=b}else{for(a=b.self.prototype;a&&!a.hasOwnProperty(d);a=a.superclass){}}a[d]=c;c.owner=a}return c||null}}});Ext.ns("Ext.core");Ext.dom.Query=Ext.core.DomQuery=Ext.DomQuery=(function(){var DQ,doc=document,cache={},simpleCache={},valueCache={},useClassList=!!doc.documentElement.classList,useElementPointer=!!doc.documentElement.firstElementChild,useChildrenCollection=(function(){var d=doc.createElement("div");d.innerHTML="text";return d.children&&(d.children.length===0)})(),nonSpace=/\S/,trimRe=/^\s+|\s+$/g,tplRe=/\{(\d+)\}/g,modeRe=/^(\s?[\/>+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w\-\*\|\\]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,startIdRe=/^\s*#/,isIE=window.ActiveXObject?true:false,key=30803,longHex=/\\([0-9a-fA-F]{6})/g,shortHex=/\\([0-9a-fA-F]{1,6})\s{0,1}/g,nonHex=/\\([^0-9a-fA-F]{1})/g,escapes=/\\/g,num,hasEscapes,supportsColonNsSeparator=(function(){var xmlDoc,xmlString='';if(window.DOMParser){xmlDoc=(new DOMParser()).parseFromString(xmlString,"application/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.loadXML(xmlString)}return !!xmlDoc.getElementsByTagName("a:b").length})(),longHexToChar=function($0,$1){return String.fromCharCode(parseInt($1,16))},shortToLongHex=function($0,$1){while($1.length<6){$1="0"+$1}return"\\"+$1},charToLongHex=function($0,$1){num=$1.charCodeAt(0).toString(16);if(num.length===1){num="0"+num}return"\\0000"+num},unescapeCssSelector=function(selector){return(hasEscapes)?selector.replace(longHex,longHexToChar):selector},setupEscapes=function(path){hasEscapes=(path.indexOf("\\")>-1);if(hasEscapes){path=path.replace(shortHex,shortToLongHex).replace(nonHex,charToLongHex).replace(escapes,"\\\\")}return path};eval("var batch = 30803, child, next, prev, byClassName;");child=useChildrenCollection?function child(parent,index){return parent.children[index]}:function child(parent,index){var i=0,n=parent.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null};next=useElementPointer?function(n){return n.nextElementSibling}:function(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n};prev=useElementPointer?function(n){return n.previousElementSibling}:function(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n};function children(parent){var n=parent.firstChild,nodeIndex=-1,nextNode;while(n){nextNode=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){parent.removeChild(n)}else{n.nodeIndex=++nodeIndex}n=nextNode}return this}byClassName=useClassList?function(nodeSet,cls){cls=unescapeCssSelector(cls);if(!cls){return nodeSet}var result=[],ri=-1,i,ci,classList;for(i=0;ci=nodeSet[i];i++){classList=ci.classList;if(classList){if(classList.contains(cls)){result[++ri]=ci}}else{if((" "+ci.className+" ").indexOf(cls)!==-1){result[++ri]=ci}}}return result}:function(nodeSet,cls){cls=unescapeCssSelector(cls);if(!cls){return nodeSet}var result=[],ri=-1,i,ci;for(i=0;ci=nodeSet[i];i++){if((" "+ci.className+" ").indexOf(cls)!==-1){result[++ri]=ci}}return result};function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs,i,ni,j,ci,cn,utag,n,cj;if(!ns){return result}tagName=tagName.replace("|",":")||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){tagName=unescapeCssSelector(tagName);if(!supportsColonNsSeparator&&DQ.isXml(ns[0])&&tagName.indexOf(":")!==-1){for(i=0;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName.split(":").pop());for(j=0;ci=cs[j];j++){if(ci.tagName===tagName){result[++ri]=ci}}}}else{for(i=0;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(j=0;ci=cs[j];j++){result[++ri]=ci}}}}else{if(mode=="/"||mode==">"){utag=tagName.toUpperCase();for(i=0;ni=ns[i];i++){cn=ni.childNodes;for(j=0;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){utag=tagName.toUpperCase();for(i=0;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){utag=tagName.toUpperCase();for(i=0;n=ns[i];i++){while((n=n.nextSibling)){if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){result[++ri]=n}}}}}}}return result}function concat(a,b){a.push.apply(a,b);return a}function byTag(cs,tagName){if(cs.tagName||cs===doc){cs=[cs]}if(!tagName){return cs}var result=[],ri=-1,i,ci;tagName=tagName.toLowerCase();for(i=0;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==tagName){result[++ri]=ci}}return result}function byId(cs,id){id=unescapeCssSelector(id);if(cs.tagName||cs===doc){cs=[cs]}if(!id){return cs}var result=[],ri=-1,i,ci;for(i=0;ci=cs[i];i++){if(ci&&ci.id==id){result[++ri]=ci;return result}}return result}function byAttribute(cs,attr,value,op,custom){var result=[],ri=-1,useGetStyle=custom=="{",fn=DQ.operators[op],a,xml,hasXml,i,ci;value=unescapeCssSelector(value);for(i=0;ci=cs[i];i++){if(ci.nodeType===1){if(!hasXml){xml=DQ.isXml(ci);hasXml=true}if(!xml){if(useGetStyle){a=DQ.getStyle(ci,attr)}else{if(attr=="class"||attr=="className"){a=ci.className}else{if(attr=="for"){a=ci.htmlFor}else{if(attr=="href"){a=ci.getAttribute("href",2)}else{a=ci.getAttribute(attr)}}}}}else{a=ci.getAttribute(attr)}if((fn&&fn(a,value))||(!fn&&a)){result[++ri]=ci}}}return result}function byPseudo(cs,name,value){value=unescapeCssSelector(value);return DQ.pseudos[name](cs,value)}function nodupIEXml(cs){var d=++key,r,i,len,c;cs[0].setAttribute("_nodup",d);r=[cs[0]];for(i=1,len=cs.length;i1){return nodup(results)}return results},isXml:function(el){var docEl=(el?el.ownerDocument||el:0).documentElement;return docEl?docEl.nodeName!=="HTML":false},select:doc.querySelectorAll?function(path,root,type,single){root=root||doc;if(!DQ.isXml(root)){try{if(root.parentNode&&(root.nodeType!==9)&&path.indexOf(",")===-1&&!startIdRe.test(path)){path="#"+Ext.escapeId(Ext.id(root))+" "+path;root=root.parentNode}return single?[root.querySelector(path)]:Ext.Array.toArray(root.querySelectorAll(path))}catch(e){}}return DQ.jsSelect.call(this,path,root,type)}:function(path,root,type){return DQ.jsSelect.call(this,path,root,type)},selectNode:function(path,root){return Ext.DomQuery.select(path,root,null,true)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=DQ.compile(path,"select")}else{setupEscapes(path)}var n=valueCache[path](root),v;n=n[0]?n[0]:n;if(typeof n.normalize=="function"){n.normalize()}v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=DQ.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=doc.getElementById(el)}var isArray=Ext.isArray(el),result=DQ.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=DQ.compile(ss,"simple")}else{setupEscapes(ss)}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w\-\\]+)/,select:useClassList?'n = byClassName(n, "{1}");':'n = byClassName(n, " {1} ");'},{re:/^\:([\w\-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w\-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w\-\\]+)/,select:'n = byId(n, "{1}");'},{re:/^@([\w\-\.]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n,i,ci;for(i=0;(ci=n=c[i]);i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n,i,ci;for(i=0;(ci=n=c[i]);i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0,i,n,j,cn,pn;for(i=0;n=c[i];i++){pn=n.parentNode;if(batch!=pn._batch){j=0;for(cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},empty:function(c){var r=[],ri=-1,i,ci,cns,j,cn,empty;for(i=0;ci=c[i];i++){cns=ci.childNodes;j=0;empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},contains:function(c,v){var r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if((ci.textContent||ci.innerText||ci.text||"").indexOf(v)!=-1){r[++ri]=ci}}return r},nodeValue:function(c,v){var r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},checked:function(c){var r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},not:function(c,ss){return DQ.filter(c,ss,true)},any:function(c,selectors){var ss=selectors.split("|"),r=[],ri=-1,s,i,ci,j;for(i=0;ci=c[i];i++){for(j=0;s=ss[j];j++){if(DQ.is(ci,s)){r[++ri]=ci;break}}}return r},odd:function(c){return this["nth-child"](c,"odd")},even:function(c){return this["nth-child"](c,"even")},nth:function(c,a){return c[a-1]||[]},first:function(c){return c[0]||[]},last:function(c){return c[c.length-1]||[]},has:function(c,ss){var s=DQ.select,r=[],ri=-1,i,ci;for(i=0;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},next:function(c,ss){var is=DQ.is,r=[],ri=-1,i,ci,n;for(i=0;ci=c[i];i++){n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},prev:function(c,ss){var is=DQ.is,r=[],ri=-1,i,ci,n;for(i=0;ci=c[i];i++){n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},focusable:function(candidates){var len=candidates.length,results=[],i=0,c;for(;ia.clientHeight||a.scrollWidth>a.clientWidth},getScroll:function(){var c=this,h=c.dom,g=document,a=g.body,b=g.documentElement,e,d;if(h===g||h===a){e=b.scrollLeft||(a?a.scrollLeft:0);d=b.scrollTop||(a?a.scrollTop:0)}else{e=h.scrollLeft;d=h.scrollTop}return{left:e,top:d}},getScrollLeft:function(){var b=this.dom,a=document;if(b===a||b===a.body){return this.getScroll().left}else{return b.scrollLeft}},getScrollTop:function(){var b=this.dom,a=document;if(b===a||b===a.body){return this.getScroll().top}else{return b.scrollTop}},setScrollLeft:function(a){this.dom.scrollLeft=this.normalizeScrollLeft(a);return this},normalizeScrollLeft:Ext.identityFn,setScrollTop:function(a){this.dom.scrollTop=a;return this},scrollBy:function(b,a,c){var d=this,e=d.dom;if(b.length){c=a;a=b[1];b=b[0]}else{if(typeof b!="number"){c=a;a=b.y;b=b.x}}if(b){d.scrollTo("left",Math.max(Math.min(d.getScrollLeft()+b,e.scrollWidth-e.clientWidth),0),c)}if(a){d.scrollTo("top",Math.max(Math.min(e.scrollTop+a,e.scrollHeight-e.clientHeight),0),c)}return d},scrollTo:function(c,e,a){var g=/top/i.test(c),i="scroll"+(g?"Top":"Left"),d=this,h=d.dom,b,i;if(!g){e=d.normalizeScrollLeft(e)}if(!a||!d.anim){h[i]=e;h[i]=e}else{b={to:{}};b.to[i]=e;if(Ext.isObject(a)){Ext.applyIf(b,a)}d.animate(b)}return d},scrollIntoView:function(b,e,c){var l=this,j=l.dom,h=l.getOffsetsTo(b=Ext.getDom(b)||Ext.getBody().dom),g=h[0]+b.scrollLeft,m=h[1]+b.scrollTop,a=m+j.offsetHeight,n=g+j.offsetWidth,q=b.clientHeight,p=parseInt(b.scrollTop,10),d=parseInt(b.scrollLeft,10),i=p+q,o=d+b.clientWidth,k;if(c){c=Ext.apply({listeners:{afteranimate:function(){l.scrollChildFly.attach(j).highlight()}}},c)}if(j.offsetHeight>q||mi){k=a-q}}if(k!=null){l.scrollChildFly.attach(b).scrollTo("top",k,c)}if(e!==false){k=null;if(j.offsetWidth>b.clientWidth||go){k=n-b.clientWidth}}if(k!=null){l.scrollChildFly.attach(b).scrollTo("left",k,c)}}return l},scrollChildIntoView:function(b,a){this.scrollChildFly.attach(Ext.getDom(b)).scrollIntoView(this,a)},scroll:function(m,b,d){if(!this.isScrollable()){return false}var e=this.dom,g=e.scrollLeft,p=e.scrollTop,n=e.scrollWidth,k=e.scrollHeight,i=e.clientWidth,a=e.clientHeight,c=false,o,j={l:Math.min(g+b,n-i),r:o=Math.max(g-b,0),t:Math.max(p-b,0),b:Math.min(p+b,k-a)};j.d=j.b;j.u=j.t;m=m.substr(0,1);if((o=j[m])>-1){c=true;this.scrollTo(m=="l"||m=="r"?"left":"top",o,this.anim(d))}return c}},function(){this.prototype.scrollChildFly=new this.Fly();this.prototype.scrolltoFly=new this.Fly()});Ext.define("Ext.dom.Element_style",{override:"Ext.dom.Element"},function(){var r=this,n=document.defaultView,p=/table-row|table-.*-group/,a="_internal",t="hidden",q="height",h="width",e="isClipped",j="overflow",m="overflow-x",l="overflow-y",u="originalClip",b=/#document|body/i,v,g,o,d,s,i,w;if(!n||!n.getComputedStyle){r.prototype.getStyle=function(B,A){var N=this,I=N.dom,L=typeof B!="string",k=N.styleHooks,y=B,z=y,H=1,D=A,M,E,x,C,G,J,F;if(L){x={};y=z[0];F=0;if(!(H=z.length)){return x}}if(!I||I.documentElement){return x||""}E=I.style;if(A){J=E}else{J=I.currentStyle;if(!J){D=true;J=E}}do{C=k[y];if(!C){k[y]=C={name:r.normalize(y)}}if(C.get){G=C.get(I,N,D,J)}else{M=C.name;if(C.canThrow){try{G=J[M]}catch(K){G=""}}else{G=J?J[M]:""}}if(!L){return G}x[y]=G;y=z[++F]}while(F0&&B<0.5){k++}}}if(z){k-=y.getBorderWidth("tb")+y.getPadding("tb")}return(k<0)?0:k},getWidth:function(k,B){var z=this,C=z.dom,A=z.isStyle("display","none"),y,x,D;if(A){return 0}if(B&&Ext.supports.BoundingClientRect){y=C.getBoundingClientRect();x=(z.vertical&&!Ext.isIE9&&!Ext.supports.RotatedBoundingClientRect)?(y.bottom-y.top):(y.right-y.left)}else{x=C.offsetWidth}if(Ext.supports.Direct2DBug&&!z.vertical){D=z.adjustDirect2DDimension(h);if(B){x+=D}else{if(D>0&&D<0.5){x++}}}if(k){x-=z.getBorderWidth("lr")+z.getPadding("lr")}return(x<0)?0:x},setWidth:function(x,k){var y=this;x=y.adjustWidth(x);if(!k||!y.anim){y.dom.style.width=y.addUnits(x)}else{if(!Ext.isObject(k)){k={}}y.animate(Ext.applyIf({to:{width:x}},k))}return y},setHeight:function(k,x){var y=this;k=y.adjustHeight(k);if(!x||!y.anim){y.dom.style.height=y.addUnits(k)}else{if(!Ext.isObject(x)){x={}}y.animate(Ext.applyIf({to:{height:k}},x))}return y},applyStyles:function(k){Ext.DomHelper.applyStyles(this.dom,k);return this},setSize:function(y,k,x){var z=this;if(Ext.isObject(y)){x=k;k=y.height;y=y.width}y=z.adjustWidth(y);k=z.adjustHeight(k);if(!x||!z.anim){z.dom.style.width=z.addUnits(y);z.dom.style.height=z.addUnits(k)}else{if(x===true){x={}}z.animate(Ext.applyIf({to:{width:y,height:k}},x))}return z},getViewSize:function(){var y=this,z=y.dom,x=b.test(z.nodeName),k;if(x){k={width:r.getViewWidth(),height:r.getViewHeight()}}else{k={width:z.clientWidth,height:z.clientHeight}}return k},getSize:function(k){return{width:this.getWidth(k),height:this.getHeight(k)}},adjustWidth:function(k){var x=this,y=(typeof k=="number");if(y&&x.autoBoxAdjust&&!x.isBorderBox()){k-=(x.getBorderWidth("lr")+x.getPadding("lr"))}return(y&&k<0)?0:k},adjustHeight:function(k){var x=this,y=(typeof k=="number");if(y&&x.autoBoxAdjust&&!x.isBorderBox()){k-=(x.getBorderWidth("tb")+x.getPadding("tb"))}return(y&&k<0)?0:k},getColor:function(x,y,D){var A=this.getStyle(x),z=D||D===""?D:"#",C,k,B=0;if(!A||(/transparent|inherit/.test(A))){return y}if(/^r/.test(A)){A=A.slice(4,A.length-1).split(",");k=A.length;for(;B5?z.toLowerCase():y)},setOpacity:function(x,k){var y=this;if(!y.dom){return y}if(!k||!y.anim){y.setStyle("opacity",x)}else{if(typeof k!="object"){k={duration:350,easing:"ease-in"}}y.animate(Ext.applyIf({to:{opacity:x}},k))}return y},clearOpacity:function(){return this.setOpacity("")},adjustDirect2DDimension:function(y){var D=this,x=D.dom,B=D.getStyle("display"),A=x.style.display,E=x.style.position,C=y===h?0:1,k=x.currentStyle,z;if(B==="inline"){x.style.display="inline-block"}x.style.position=B.match(p)?"absolute":"static";z=(parseFloat(k[y])||parseFloat(k.msTransformOrigin.split(" ")[C])*2)%1;x.style.position=E;if(B==="inline"){x.style.display=A}return z},clip:function(){var x=this,y=(x.$cache||x.getCache()).data,k;if(!y[e]){y[e]=true;k=x.getStyle([j,m,l]);y[u]={o:k[j],x:k[m],y:k[l]};x.setStyle(j,t);x.setStyle(m,t);x.setStyle(l,t)}return x},unclip:function(){var x=this,y=(x.$cache||x.getCache()).data,k;if(y[e]){y[e]=false;k=y[u];if(k.o){x.setStyle(j,k.o)}if(k.x){x.setStyle(m,k.x)}if(k.y){x.setStyle(l,k.y)}}return x},boxWrap:function(k){k=k||Ext.baseCSSPrefix+"box";var x=Ext.get(this.insertHtml("beforeBegin","
    "+Ext.String.format(r.boxMarkup,k)+"
    "));Ext.DomQuery.selectNode("."+k+"-mc",x.dom).appendChild(this.dom);return x},getComputedHeight:function(){var x=this,k=Math.max(x.dom.offsetHeight,x.dom.clientHeight);if(!k){k=parseFloat(x.getStyle(q))||0;if(!x.isBorderBox()){k+=x.getFrameWidth("tb")}}return k},getComputedWidth:function(){var x=this,k=Math.max(x.dom.offsetWidth,x.dom.clientWidth);if(!k){k=parseFloat(x.getStyle(h))||0;if(!x.isBorderBox()){k+=x.getFrameWidth("lr")}}return k},getFrameWidth:function(x,k){return(k&&this.isBorderBox())?0:(this.getPadding(x)+this.getBorderWidth(x))},addClsOnOver:function(y,B,x){var z=this,A=z.dom,k=Ext.isFunction(B);z.hover(function(){if(k&&B.call(x||z,z)===false){return}Ext.fly(A,a).addCls(y)},function(){Ext.fly(A,a).removeCls(y)});return z},addClsOnFocus:function(y,B,x){var z=this,A=z.dom,k=Ext.isFunction(B);z.on("focus",function(){if(k&&B.call(x||z,z)===false){return false}Ext.fly(A,a).addCls(y)});z.on("blur",function(){Ext.fly(A,a).removeCls(y)});return z},addClsOnClick:function(y,B,x){var z=this,A=z.dom,k=Ext.isFunction(B);z.on("mousedown",function(){if(k&&B.call(x||z,z)===false){return false}Ext.fly(A,a).addCls(y);var D=Ext.getDoc(),C=function(){Ext.fly(A,a).removeCls(y);D.removeListener("mouseup",C)};D.on("mouseup",C)});return z},getStyleSize:function(){var A=this,B=this.dom,x=b.test(B.nodeName),z,k,y;if(x){return{width:r.getViewWidth(),height:r.getViewHeight()}}z=A.getStyle([q,h],true);if(z.width&&z.width!="auto"){k=parseFloat(z.width);if(A.isBorderBox()){k-=A.getFrameWidth("lr")}}if(z.height&&z.height!="auto"){y=parseFloat(z.height);if(A.isBorderBox()){y-=A.getFrameWidth("tb")}}return{width:k||A.getWidth(true),height:y||A.getHeight(true)}},statics:{selectableCls:Ext.baseCSSPrefix+"selectable",unselectableCls:Ext.baseCSSPrefix+"unselectable"},selectable:function(){var k=this;k.dom.unselectable="";k.removeCls(r.unselectableCls);k.addCls(r.selectableCls);return k},unselectable:function(){var k=this;if(Ext.isOpera){k.dom.unselectable="on"}k.removeCls(r.selectableCls);k.addCls(r.unselectableCls);return k},setVertical:function(A,x){var z=this,y=r.prototype,k;z.vertical=true;if(x){z.addCls(z.verticalCls=x)}z.setWidth=y.setHeight;z.setHeight=y.setWidth;if(!Ext.isIE9m){z.getWidth=y.getHeight;z.getHeight=y.getWidth}z.styleHooks=(A===270)?r.prototype.verticalStyleHooks270:r.prototype.verticalStyleHooks90},setHorizontal:function(){var x=this,k=x.verticalCls;delete x.vertical;if(k){delete x.verticalCls;x.removeCls(k)}delete x.setWidth;delete x.setHeight;if(!Ext.isIE9m){delete x.getWidth;delete x.getHeight}delete x.styleHooks}});r.prototype.styleHooks=v=Ext.dom.AbstractElement.prototype.styleHooks;r.prototype.verticalStyleHooks90=g=Ext.Object.chain(r.prototype.styleHooks);r.prototype.verticalStyleHooks270=o=Ext.Object.chain(r.prototype.styleHooks);g.width={name:"height"};g.height={name:"width"};g["margin-top"]={name:"marginLeft"};g["margin-right"]={name:"marginTop"};g["margin-bottom"]={name:"marginRight"};g["margin-left"]={name:"marginBottom"};g["padding-top"]={name:"paddingLeft"};g["padding-right"]={name:"paddingTop"};g["padding-bottom"]={name:"paddingRight"};g["padding-left"]={name:"paddingBottom"};g["border-top"]={name:"borderLeft"};g["border-right"]={name:"borderTop"};g["border-bottom"]={name:"borderRight"};g["border-left"]={name:"borderBottom"};o.width={name:"height"};o.height={name:"width"};o["margin-top"]={name:"marginRight"};o["margin-right"]={name:"marginBottom"};o["margin-bottom"]={name:"marginLeft"};o["margin-left"]={name:"marginTop"};o["padding-top"]={name:"paddingRight"};o["padding-right"]={name:"paddingBottom"};o["padding-bottom"]={name:"paddingLeft"};o["padding-left"]={name:"paddingTop"};o["border-top"]={name:"borderRight"};o["border-right"]={name:"borderBottom"};o["border-bottom"]={name:"borderLeft"};o["border-left"]={name:"borderTop"};if(Ext.isIE7m){v.fontSize=v["font-size"]={name:"fontSize",canThrow:true};v.fontStyle=v["font-style"]={name:"fontStyle",canThrow:true};v.fontFamily=v["font-family"]={name:"fontFamily",canThrow:true}}if(Ext.isIEQuirks||Ext.isIE&&Ext.ieVersion<=8){function c(z,x,y,k){if(k[this.styleName]=="none"){return"0px"}return k[this.name]}d=["Top","Right","Bottom","Left"];s=d.length;while(s--){i=d[s];w="border"+i+"Width";v["border-"+i.toLowerCase()+"-width"]=v[w]={name:w,styleName:"border"+i+"Style",get:c}}}Ext.getDoc().on("selectstart",function(A,C){var B=document.documentElement,z=r.selectableCls,y=r.unselectableCls,k=C&&C.tagName;k=k&&k.toLowerCase();if(k==="input"||k==="textarea"){return}while(C&&C.nodeType===1&&C!==B){var x=Ext.fly(C);if(x.hasCls(z)){return}if(x.hasCls(y)){A.stopEvent();return}C=C.parentNode}})});Ext.onReady(function(){var c=/alpha\(opacity=(.*)\)/i,b=/^\s+|\s+$/g,a=Ext.dom.Element.prototype.styleHooks;a.opacity={name:"opacity",afterSet:function(g,e,d){if(d.isLayer){d.onOpacitySet(e)}}};if(!Ext.supports.Opacity&&Ext.isIE){Ext.apply(a.opacity,{get:function(h){var g=h.style.filter,e,d;if(g.match){e=g.match(c);if(e){d=parseFloat(e[1]);if(!isNaN(d)){return d?d/100:0}}}return 1},set:function(h,e){var d=h.style,g=d.filter.replace(c,"").replace(b,"");d.zoom=1;if(typeof(e)=="number"&&e>=0&&e<1){e*=100;d.filter=g+(g.length?" ":"")+"alpha(opacity="+e+")"}else{d.filter=g}}})}});Ext.define("Ext.util.Positionable",{_positionTopLeft:["position","top","left"],_alignRe:/^([a-z]+)-([a-z]+)(\?)?$/,afterSetPosition:Ext.emptyFn,adjustForConstraints:function(c,b){var a=this.getConstrainVector(b,c);if(a){c[0]+=a[0];c[1]+=a[1]}return c},alignTo:function(c,a,g,b){var e=this,d=e.el;return e.setXY(e.getAlignToXY(c,a,g),d.anim&&!!b?d.anim(b):false)},anchorTo:function(h,e,b,a,j,k){var g=this,i=!Ext.isEmpty(j),c=function(){g.alignTo(h,e,b,a);Ext.callback(k,g)},d=g.getAnchor();g.removeAnchor();Ext.apply(d,{fn:c,scroll:i});Ext.EventManager.onWindowResize(c,null);if(i){Ext.EventManager.on(window,"scroll",c,null,{buffer:!isNaN(j)?j:50})}c();return g},calculateAnchorXY:function(g,i,h,d){var j=this,c=j.el,k=document,e=c.dom==k.body||c.dom==k,l=Math.round,m,b,a;g=(g||"tl").toLowerCase();d=d||{};b=d.width||e?Ext.Element.getViewWidth():j.getWidth();a=d.height||e?Ext.Element.getViewHeight():j.getHeight();switch(g){case"tl":m=[0,0];break;case"bl":m=[0,a];break;case"tr":m=[b,0];break;case"c":m=[l(b*0.5),l(a*0.5)];break;case"t":m=[l(b*0.5),0];break;case"l":m=[0,l(a*0.5)];break;case"r":m=[b,l(a*0.5)];break;case"b":m=[l(b*0.5),a];break;case"tc":m=[l(b*0.5),0];break;case"bc":m=[l(b*0.5),a];break;case"br":m=[b,a]}return[m[0]+i,m[1]+h]},convertPositionSpec:function(a){return a},getAlignToXY:function(j,C,e){var D=this,A=Ext.Element.getViewWidth()-10,d=Ext.Element.getViewHeight()-10,E=document,B=E.documentElement,o=E.body,z=(B.scrollLeft||o.scrollLeft||0),v=(B.scrollTop||o.scrollTop||0),a,h,s,g,t,u,q,r,w,p,n,b,c,i,l,m,k;j=Ext.get(j.el||j);if(!j||!j.dom){}e=e||[0,0];C=(!C||C=="?"?"tl-bl?":(!(/-/).test(C)&&C!==""?"tl-"+C:C||"tl-bl")).toLowerCase();C=D.convertPositionSpec(C);a=C.match(D._alignRe);p=a[1];n=a[2];w=!!a[3];h=D.getAnchorXY(p,true);s=D.getAnchorToXY(j,n,false);m=s[0]-h[0]+e[0];k=s[1]-h[1]+e[1];if(w){g=D.getWidth();t=D.getHeight();u=j.getRegion();b=p.charAt(0);c=p.charAt(p.length-1);i=n.charAt(0);l=n.charAt(n.length-1);q=((b=="t"&&i=="b")||(b=="b"&&i=="t"));r=((c=="r"&&l=="l")||(c=="l"&&l=="r"));if(m+g>A+z){m=r?u.left-g:A+z-g}if(md+v){k=q?u.top-t:d+v-t}if(ke.right){d=true;b[0]=(e.right-h.right)}if(h.left+b[0]e.bottom){d=true;b[1]=(e.bottom-h.bottom)}if(h.top+b[1]0||p.scrollLeft>0){s[++o]=p}}return s};return{extend:Ext.dom.AbstractElement,alternateClassName:["Ext.Element","Ext.core.Element"],tableTagRe:/^(?:tr|td|table|tbody)$/i,mixins:[Ext.util.Positionable],addUnits:function(){return a.addUnits.apply(a,arguments)},focus:function(r,q){var o=this;q=q||o.dom;try{if(Number(r)){Ext.defer(o.focus,r,o,[null,q])}else{q.focus()}}catch(p){}return o},blur:function(){var o=this,q=o.dom;if(q!==document.body){try{q.blur()}catch(p){}return o}else{return o.focus(undefined,q)}},isBorderBox:function(){var o=Ext.isBorderBox;if(o&&Ext.isIE7m){o=!((this.dom.tagName||"").toLowerCase() in d)}return o},hover:function(p,o,r,q){var s=this;s.on("mouseenter",p,r||s.dom,q);s.on("mouseleave",o,r||s.dom,q);return s},getAttributeNS:function(p,o){return this.getAttribute(o,p)},getAttribute:(Ext.isIE&&!(Ext.isIE9p&&g.documentMode>=9))?function(o,q){var r=this.dom,p;if(q){p=typeof r[q+":"+o];if(p!="undefined"&&p!="unknown"){return r[q+":"+o]||null}return null}if(o==="for"){o="htmlFor"}return r[o]||null}:function(o,p){var q=this.dom;if(p){return q.getAttributeNS(p,o)||q.getAttribute(p+":"+o)}return q.getAttribute(o)||q[o]||null},cacheScrollValues:function(){var s=this,r,q,p,t=[],o=function(){for(p=0;p]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig,replaceScriptTagRe=/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,srcRe=/\ssrc=([\'\"])(.*?)\1/i,typeRe=/\stype=([\'\"])(.*?)\1/i,useDocForId=!Ext.isIE8m,internalFly;Element.boxMarkup='
    ';function garbageCollect(){if(!Ext.enableGarbageCollector){clearInterval(Element.collectorThreadId)}else{var eid,d,o,t;for(eid in EC){if(!EC.hasOwnProperty(eid)){continue}o=EC[eid];if(o.skipGarbageCollection){continue}d=o.dom;if(!d.parentNode||(!d.offsetParent&&!Ext.getElementById(eid))){if(d&&Ext.enableListenerCollection){Ext.EventManager.removeAll(d)}delete EC[eid]}}if(Ext.isIE){t={};for(eid in EC){if(!EC.hasOwnProperty(eid)){continue}t[eid]=EC[eid]}EC=Ext.cache=t}}}Element.collectorThreadId=setInterval(garbageCollect,30000);Element.addMethods({monitorMouseLeave:function(delay,handler,scope){var me=this,timer,listeners={mouseleave:function(e){timer=setTimeout(Ext.Function.bind(handler,scope||me,[e]),delay)},mouseenter:function(){clearTimeout(timer)},freezeEvent:true};me.on(listeners);return listeners},swallowEvent:function(eventName,preventDefault){var me=this,e,eLen,fn=function(e){e.stopPropagation();if(preventDefault){e.preventDefault()}};if(Ext.isArray(eventName)){eLen=eventName.length;for(e=0;e';interval=setInterval(function(){var hd,match,attrs,srcMatch,typeMatch,el,s;if(!(el=DOC.getElementById(id))){return false}clearInterval(interval);Ext.removeNode(el);hd=Ext.getHead().dom;while((match=scriptTagRe.exec(html))){attrs=match[1];srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){s=DOC.createElement("script");s.src=srcMatch[2];typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2])}else{window.eval(match[2])}}}}Ext.callback(callback,me)},20);dom.innerHTML=html.replace(replaceScriptTagRe,"");return me},removeAllListeners:function(){this.removeAnchor();Ext.EventManager.removeAll(this.dom);return this},createProxy:function(config,renderTo,matchBox){config=(typeof config=="object")?config:{tag:"div",cls:config};var me=this,proxy=renderTo?Ext.DomHelper.append(renderTo,config,true):Ext.DomHelper.insertBefore(me.dom,config,true);proxy.setVisibilityMode(Element.DISPLAY);proxy.hide();if(matchBox&&me.setBox&&me.getBox){proxy.setBox(me.getBox())}return proxy},needsTabIndex:function(){if(this.dom){if((this.dom.nodeName==="a")&&(!this.dom.href)){return true}return !focusRe.test(this.dom.nodeName)}},isFocusable:function(asFocusEl){var dom=this.dom,tabIndexAttr=dom.getAttributeNode("tabIndex"),tabIndex,nodeName=dom.nodeName,canFocus=false;if(tabIndexAttr&&tabIndexAttr.specified){tabIndex=tabIndexAttr.value}if(dom&&!dom.disabled){if(tabIndex==-1){canFocus=Ext.FocusManager&&Ext.FocusManager.enabled&&asFocusEl}else{if(focusRe.test(nodeName)){if((nodeName!=="a")||dom.href){canFocus=true}}else{canFocus=tabIndex!=null&&tabIndex>=0}}canFocus=canFocus&&this.isVisible(true)}return canFocus}});if(Ext.isIE){Element.prototype.getById=function(id,asDom){var dom=this.dom,cacheItem,el,ret;if(dom){el=(useDocForId&&DOC.getElementById(id))||dom.all[id];if(el){if(asDom){ret=el}else{cacheItem=EC[id];if(cacheItem&&cacheItem.el){ret=Ext.updateCacheEntry(cacheItem,el).el}else{ret=new Element(el)}}return ret}}return asDom?Ext.getDom(id):Element.get(id)}}Element.createAlias({addListener:"on",removeListener:"un",clearListeners:"removeAllListeners",focusable:"isFocusable"});Element.Fly=AbstractElement.Fly=new Ext.Class({extend:Element,isFly:true,constructor:function(dom){this.dom=dom;this.el=this},attach:AbstractElement.Fly.prototype.attach});internalFly=new Element.Fly();if(Ext.isIE){Ext.getElementById=function(id){var el=DOC.getElementById(id),detachedBodyEl;if(!el&&(detachedBodyEl=AbstractElement.detachedBodyEl)){el=detachedBodyEl.dom.all[id]}return el}}else{if(!DOC.querySelector){Ext.getDetachedBody=Ext.getBody;Ext.getElementById=function(id){return DOC.getElementById(id)}}}});Ext.define("Ext.dom.CompositeElementLite",{alternateClassName:"Ext.CompositeElementLite",statics:{importElementMethods:function(){var b,c=Ext.dom.Element.prototype,a=this.prototype;for(b in c){if(typeof c[b]=="function"){(function(d){a[d]=a[d]||function(){return this.invoke(d,arguments)}}).call(a,b)}}}},constructor:function(b,a){this.elements=[];this.add(b,a);this.el=new Ext.dom.AbstractElement.Fly()},isComposite:true,getElement:function(a){return this.el.attach(a)},transformElement:function(a){return Ext.getDom(a)},getCount:function(){return this.elements.length},add:function(c,a){var e=this.elements,b,d;if(!c){return this}if(typeof c=="string"){c=Ext.dom.Element.selectorFunction(c,a)}else{if(c.isComposite){c=c.elements}else{if(!Ext.isIterable(c)){c=[c]}}}for(b=0,d=c.length;b-1){c=Ext.getDom(c);if(a){g=this.elements[b];g.parentNode.insertBefore(c,g);Ext.removeNode(g)}Ext.Array.splice(this.elements,b,1,c)}return this},clear:function(d){var c=this,b=c.elements,a=b.length-1;if(d){for(;a>=0;a--){Ext.removeNode(b[a])}}this.elements=[]},addElements:function(d,b){if(!d){return this}if(typeof d=="string"){d=Ext.dom.Element.selectorFunction(d,b)}var c=this.elements,a=d.length,g;for(g=0;g";for(;u\^])\s?|\s|$)/,d=/^(#)?([\w\-]+|\*)(?:\((true|false)\))?/,c=[{re:/^\.([\w\-]+)(?:\((true|false)\))?/,method:p},{re:/^(?:\[((?:@|\?)?[\w\-\$]*[^\^\$\*~%!])\s?(?:(=|.=)\s?['"]?(.*?)["']?)?\])/,method:q},{re:/^#([\w\-]+)/,method:e},{re:/^\:([\w\-]+)(?:\(((?:\{[^\}]+\})|(?:(?!\{)[^\s>\/]*?(?!\})))\))?/,method:n},{re:/^(?:\{([^\}]+)\})/,method:m}];i.Query=Ext.extend(Object,{constructor:function(r){r=r||{};Ext.apply(this,r)},execute:function(s){var u=this.operations,v=0,w=u.length,t,r;if(!s){r=Ext.ComponentManager.all.getArray()}else{if(Ext.isIterable(s)){r=s}else{if(s.isMixedCollection){r=s.items}}}for(;v1){for(u=0,v=w.length;u0){r.push(s[0])}return r},last:function(t){var r=t.length,s=[];if(r>0){s.push(t[r-1])}return s},focusable:function(s){var r=s.length,u=[],t=0,v;for(;t1){v=u.length;for(t=0;t=":function(a){return Ext.coerce(this.getRoot(a)[this.property],this.value)>=this.value},">":function(a){return Ext.coerce(this.getRoot(a)[this.property],this.value)>this.value},"!=":function(a){return Ext.coerce(this.getRoot(a)[this.property],this.value)!=this.value}},constructor:function(a){var b=this;b.initialConfig=a;Ext.apply(b,a);b.filter=b.filter||b.filterFn;if(b.filter===undefined){b.setValue(a.value)}},setValue:function(b){var a=this;a.value=b;if(a.property===undefined||a.value===undefined){}else{a.filter=a.createFilterFn()}a.filterFn=a.filter},setFilterFn:function(a){this.filterFn=this.filter=a},createFilterFn:function(){var a=this,c=a.createValueMatcher(),b=a.property;if(a.operator){return a.operatorFns[a.operator]}else{return function(d){var e=a.getRoot(d)[b];return c===null?e===null:c.test(e)}}},getRoot:function(b){var a=this.root;return a===undefined?b:b[a]},createValueMatcher:function(){var d=this,e=d.value,g=d.anyMatch,c=d.exactMatch,a=d.caseSensitive,b=Ext.String.escapeRegex;if(e===null){return e}if(!e.exec){e=String(e);if(g===true){e=b(e)}else{e="^"+b(e);if(c===true){e+="$"}}e=new RegExp(e,a?"":"i")}return e},serialize:function(){var b=this,a=Ext.apply({},b.initialConfig);a.value=b.value;return a}},function(){this.prototype.operatorFns["=="]=this.prototype.operatorFns["="]});Ext.define("Ext.util.AbstractMixedCollection",{mixins:{observable:Ext.util.Observable},isMixedCollection:true,generation:0,indexGeneration:0,constructor:function(b,a){var c=this;if(arguments.length===1&&Ext.isObject(b)){c.initialConfig=b;Ext.apply(c,b)}else{c.allowFunctions=b===true;if(a){c.getKey=a}c.initialConfig={allowFunctions:c.allowFunctions,getKey:c.getKey}}c.items=[];c.map={};c.keys=[];c.indexMap={};c.length=0;c.mixins.observable.constructor.call(c)},allowFunctions:false,add:function(a,b){return this.insert(this.length,a,b)},getKey:function(a){return a.id},replace:function(c,e){var d=this,a,b;if(arguments.length==1){e=arguments[0];c=d.getKey(e)}a=d.map[c];if(typeof c=="undefined"||c===null||typeof a=="undefined"){return d.add(c,e)}d.generation++;b=d.indexOfKey(c);d.items[b]=e;d.map[c]=e;if(d.hasListeners.replace){d.fireEvent("replace",c,a,e)}return e},updateKey:function(g,h){var d=this,e=d.map,c=d.indexMap,a=d.indexOfKey(g),b;if(a>-1){b=e[g];delete e[g];delete c[g];e[h]=b;c[h]=a;d.keys[a]=h;d.generation++}},addAll:function(c){var b=this,a;if(arguments.length>1||Ext.isArray(c)){b.insert(b.length,arguments.length>1?arguments:c)}else{for(a in c){if(c.hasOwnProperty(a)){if(b.allowFunctions||typeof c[a]!="function"){b.add(a,c[a])}}}}},each:function(e,d){var b=Ext.Array.push([],this.items),c=0,a=b.length,g;for(;c=0;--b){c.remove(a[b])}}else{while(c.length){c.removeAt(0)}}}else{c.length=c.items.length=c.keys.length=0;c.map={};c.indexMap={};c.generation++;c.indexGeneration=c.generation}},removeAt:function(a){var c=this,d,b;if(a=0){c.length--;d=c.items[a];Ext.Array.erase(c.items,a,1);b=c.keys[a];if(typeof b!="undefined"){delete c.map[b]}Ext.Array.erase(c.keys,a,1);if(c.hasListeners.remove){c.fireEvent("remove",d,b)}c.generation++;return d}return false},removeRange:function(h,a){var j=this,b,k,g,e,c,d;if(h=0){if(!a){a=1}e=Math.min(h+a,j.length);a=e-h;d=e===j.length;c=d&&j.indexGeneration===j.generation;for(g=h;g=0;a--){if(c[a]==null){d.removeAt(a)}}}else{return d.removeAt(d.indexOfKey(b))}},getCount:function(){return this.length},indexOf:function(c){var b=this,a;if(c!=null){if(!b.useLinearSearch&&(a=b.getKey(c))){return this.indexOfKey(a)}return Ext.Array.indexOf(b.items,c)}return -1},indexOfKey:function(a){if(this.map[a]==null){return -1}if(this.indexGeneration!==this.generation){this.rebuildIndexMap()}return this.indexMap[a]},rebuildIndexMap:function(){var e=this,d=e.indexMap={},c=this.keys,a=c.length,b;for(b=0;b=a;d--){b[b.length]=c[d]}}return b},filter:function(d,c,e,a){var b=[];if(Ext.isString(d)){b.push(new Ext.util.Filter({property:d,value:c,anyMatch:e,caseSensitive:a}))}else{if(Ext.isArray(d)||d instanceof Ext.util.Filter){b=b.concat(d)}}return this.filterBy(Ext.util.Filter.createFilterFn(b))},filterBy:function(e,d){var j=this,a=new j.self(j.initialConfig),h=j.keys,b=j.items,g=b.length,c;a.getKey=j.getKey;for(c=0;ce?1:(g>1;h=d(e,b[c]);if(h>=0){i=c+1}else{if(h<0){a=c-1}}}return i},reorder:function(d){var h=this,b=h.items,c=0,g=b.length,a=[],e=[],i;h.suspendEvents();for(i in d){a[d[i]]=b[i]}for(c=0;ce?1:(g=d.duration),e,h;e=this.collectTargetData(d,a,g,b);if(g){d.target.setAttr(e.anims[d.id].attributes,true);c.collectTargetData(d,d.duration,g,b);d.paused=true;e=d.target.target;if(d.target.isComposite){e=d.target.target.last()}h={};h[Ext.supports.CSS3TransitionEnd]=d.lastFrame;h.scope=d;h.single=true;e.on(h)}},collectTargetData:function(c,a,e,g){var b=c.target.getId(),d=this.targetArr[b];if(!d){d=this.targetArr[b]={id:b,el:c.target,anims:{}}}d.anims[c.id]={id:c.id,anim:c,elapsed:a,isLastFrame:g,attributes:[{duration:c.duration,easing:(e&&c.reverse)?c.easingFn.reverse().toCSS3():c.easing,attrs:c.runAnim(a)}]};return d},applyPendingAttrs:function(){var e=this.targetArr,g,c,b,d,a;for(c in e){if(e.hasOwnProperty(c)){g=e[c];for(a in g.anims){if(g.anims.hasOwnProperty(a)){b=g.anims[a];d=b.anim;if(b.attributes&&d.isRunning()){g.el.setAttr(b.attributes,false,b.isLastFrame);if(b.isLastFrame){d.lastFrame()}}}}}}}});Ext.define("Ext.fx.Animator",{mixins:{observable:Ext.util.Observable},isAnimator:true,duration:250,delay:0,delayStart:0,dynamic:false,easing:"ease",running:false,paused:false,damper:1,iterations:1,currentIteration:0,keyframeStep:0,animKeyFramesRE:/^(from|to|\d+%?)$/,constructor:function(a){var b=this;a=Ext.apply(b,a||{});b.config=a;b.id=Ext.id(null,"ext-animator-");b.addEvents("beforeanimate","keyframe","afteranimate");b.mixins.observable.constructor.call(b,a);b.timeline=[];b.createTimeline(b.keyframes);if(b.target){b.applyAnimator(b.target);Ext.fx.Manager.addAnim(b)}},sorter:function(d,c){return d.pct-c.pct},createTimeline:function(d){var h=this,l=[],j=h.to||{},b=h.duration,m,a,c,g,k,e;for(k in d){if(d.hasOwnProperty(k)&&h.animKeyFramesRE.test(k)){e={attrs:Ext.apply(d[k],j)};if(k=="from"){k=0}else{if(k=="to"){k=100}}e.pct=parseInt(k,10);l.push(e)}}Ext.Array.sort(l,h.sorter);g=l.length;for(c=0;c0},isRunning:function(){return false}});Ext.define("Ext.fx.CubicBezier",{singleton:true,cubicBezierAtTime:function(o,d,b,n,m,i){var j=3*d,l=3*(n-d)-j,a=1-j-l,h=3*b,k=3*(m-b)-h,p=1-h-k;function g(q){return((a*q+l)*q+j)*q}function c(q,s){var r=e(q,s);return((p*r+k)*r+h)*r}function e(q,y){var w,v,t,r,u,s;for(t=q,s=0;s<8;s++){r=g(t)-q;if(Math.abs(r)v){return v}while(wr){w=t}else{v=t}t=(v-w)/2+w}return t}return c(o,1/(200*i))},cubicBezier:function(b,e,a,c){var d=function(g){return Ext.fx.CubicBezier.cubicBezierAtTime(g,b,e,a,c,1)};d.toCSS3=function(){return"cubic-bezier("+[b,e,a,c].join(",")+")"};d.reverse=function(){return Ext.fx.CubicBezier.cubicBezier(1-a,1-c,1-b,1-e)};return d}});Ext.require("Ext.fx.CubicBezier",function(){var e=Math,h=e.PI,d=e.pow,b=e.sin,g=e.sqrt,a=e.abs,c=1.70158;Ext.define("Ext.fx.Easing",{singleton:true,linear:Ext.identityFn,ease:function(l){var i=0.07813-l/2,m=-0.25,o=g(0.0066+i*i),r=o-i,k=d(a(r),1/3)*(r<0?-1:1),p=-o-i,j=d(a(p),1/3)*(p<0?-1:1),s=k+j+0.25;return d(1-s,2)*3*s*0.1+(1-s)*3*s*s+s*s*s},easeIn:function(i){return d(i,1.7)},easeOut:function(i){return d(i,0.48)},easeInOut:function(r){var l=0.48-r/1.04,k=g(0.1734+l*l),i=k-l,p=d(a(i),1/3)*(i<0?-1:1),o=-k-l,m=d(a(o),1/3)*(o<0?-1:1),j=p+m+0.5;return(1-j)*3*j*j+j*j*j},backIn:function(i){return i*i*((c+1)*i-c)},backOut:function(i){i=i-1;return i*i*((c+1)*i+c)+1},elasticIn:function(k){if(k===0||k===1){return k}var j=0.3,i=j/4;return d(2,-10*k)*b((k-i)*(2*h)/j)+1},elasticOut:function(i){return 1-Ext.fx.Easing.elasticIn(1-i)},bounceIn:function(i){return 1-Ext.fx.Easing.bounceOut(1-i)},bounceOut:function(m){var j=7.5625,k=2.75,i;if(m<(1/k)){i=j*m*m}else{if(m<(2/k)){m-=(1.5/k);i=j*m*m+0.75}else{if(m<(2.5/k)){m-=(2.25/k);i=j*m*m+0.9375}else{m-=(2.625/k);i=j*m*m+0.984375}}}return i}},function(){var j=Ext.fx.Easing.self,i=j.prototype;j.implement({"back-in":i.backIn,"back-out":i.backOut,"ease-in":i.easeIn,"ease-out":i.easeOut,"elastic-in":i.elasticIn,"elastic-out":i.elasticOut,"bounce-in":i.bounceIn,"bounce-out":i.bounceOut,"ease-in-out":i.easeInOut})})});Ext.define("Ext.draw.Color",{colorToHexRe:/(.*?)rgb\((\d+),\s*(\d+),\s*(\d+)\)/,rgbRe:/\s*rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)\s*/,hexRe:/\s*#([0-9a-fA-F][0-9a-fA-F]?)([0-9a-fA-F][0-9a-fA-F]?)([0-9a-fA-F][0-9a-fA-F]?)\s*/,lightnessFactor:0.2,constructor:function(d,c,a){var b=this,e=Ext.Number.constrain;b.r=e(d,0,255);b.g=e(c,0,255);b.b=e(a,0,255)},getRed:function(){return this.r},getGreen:function(){return this.g},getBlue:function(){return this.b},getRGB:function(){var a=this;return[a.r,a.g,a.b]},getHSL:function(){var j=this,a=j.r/255,i=j.g/255,k=j.b/255,m=Math.max(a,i,k),d=Math.min(a,i,k),n=m-d,e,o=0,c=0.5*(m+d);if(d!=m){o=(c<0.5)?n/(m+d):n/(2-m-d);if(a==m){e=60*(i-k)/n}else{if(i==m){e=120+60*(k-a)/n}else{e=240+60*(a-i)/n}}if(e<0){e+=360}if(e>=360){e-=360}}return[e,o,c]},getLighter:function(b){var a=this.getHSL();b=b||this.lightnessFactor;a[2]=Ext.Number.constrain(a[2]+b,0,1);return this.fromHSL(a[0],a[1],a[2])},getDarker:function(a){a=a||this.lightnessFactor;return this.getLighter(-a)},toString:function(){var h=this,c=Math.round,e=c(h.r).toString(16),d=c(h.g).toString(16),a=c(h.b).toString(16);e=(e.length==1)?"0"+e:e;d=(d.length==1)?"0"+d:d;a=(a.length==1)?"0"+a:a;return["#",e,d,a].join("")},toHex:function(b){if(Ext.isArray(b)){b=b[0]}if(!Ext.isString(b)){return""}if(b.substr(0,1)==="#"){return b}var e=this.colorToHexRe.exec(b),g,d,a,c;if(Ext.isArray(e)){g=parseInt(e[2],10);d=parseInt(e[3],10);a=parseInt(e[4],10);c=a|(d<<8)|(g<<16);return e[1]+"#"+("000000"+c.toString(16)).slice(-6)}else{return b}},fromString:function(i){var c,e,d,a,h=parseInt;if((i.length==4||i.length==7)&&i.substr(0,1)==="#"){c=i.match(this.hexRe);if(c){e=h(c[1],16)>>0;d=h(c[2],16)>>0;a=h(c[3],16)>>0;if(i.length==4){e+=(e*16);d+=(d*16);a+=(a*16)}}}else{c=i.match(this.rgbRe);if(c){e=c[1];d=c[2];a=c[3]}}return(typeof e=="undefined")?undefined:new Ext.draw.Color(e,d,a)},getGrayscale:function(){return this.r*0.3+this.g*0.59+this.b*0.11},fromHSL:function(g,o,d){var a,b,c,e,k=[],n=Math.abs,j=Math.floor;if(o==0||g==null){k=[d,d,d]}else{g/=60;a=o*(1-n(2*d-1));b=a*(1-n(g-2*j(g/2)-1));c=d-a/2;switch(j(g)){case 0:k=[a,b,0];break;case 1:k=[b,a,0];break;case 2:k=[0,a,b];break;case 3:k=[0,b,a];break;case 4:k=[b,0,a];break;case 5:k=[a,0,b];break}k=[k[0]+c,k[1]+c,k[2]+c]}return new Ext.draw.Color(k[0]*255,k[1]*255,k[2]*255)}},function(){var a=this.prototype;this.addStatics({fromHSL:function(){return a.fromHSL.apply(a,arguments)},fromString:function(){return a.fromString.apply(a,arguments)},toHex:function(){return a.toHex.apply(a,arguments)}})});Ext.define("Ext.draw.Draw",{singleton:true,pathToStringRE:/,?([achlmqrstvxz]),?/gi,pathCommandRE:/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,pathValuesRE:/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,stopsRE:/^(\d+%?)$/,radian:Math.PI/180,availableAnimAttrs:{along:"along",blur:null,"clip-rect":"csv",cx:null,cy:null,fill:"color","fill-opacity":null,"font-size":null,height:null,opacity:null,path:"path",r:null,rotation:"csv",rx:null,ry:null,scale:"csv",stroke:"color","stroke-opacity":null,"stroke-width":null,translation:"csv",width:null,x:null,y:null},is:function(b,a){a=String(a).toLowerCase();return(a=="object"&&b===Object(b))||(a=="undefined"&&typeof b==a)||(a=="null"&&b===null)||(a=="array"&&Array.isArray&&Array.isArray(b))||(Object.prototype.toString.call(b).toLowerCase().slice(8,-1))==a},ellipsePath:function(b){var a=b.attr;return Ext.String.format("M{0},{1}A{2},{3},0,1,1,{0},{4}A{2},{3},0,1,1,{0},{1}z",a.x,a.y-a.ry,a.rx,a.ry,a.y+a.ry)},rectPath:function(b){var a=b.attr;if(a.radius){return Ext.String.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z",a.x+a.radius,a.y,a.width-a.radius*2,a.radius,-a.radius,a.height-a.radius*2,a.radius*2-a.width,a.radius*2-a.height)}else{return Ext.String.format("M{0},{1}L{2},{1},{2},{3},{0},{3}z",a.x,a.y,a.width+a.x,a.height+a.y)}},path2string:function(){return this.join(",").replace(Ext.draw.Draw.pathToStringRE,"$1")},pathToString:function(a){return a.join(",").replace(Ext.draw.Draw.pathToStringRE,"$1")},parsePathString:function(a){if(!a){return null}var d={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},c=[],b=this;if(b.is(a,"array")&&b.is(a[0],"array")){c=b.pathClone(a)}if(!c.length){String(a).replace(b.pathCommandRE,function(g,e,j){var i=[],h=e.toLowerCase();j.replace(b.pathValuesRE,function(l,k){k&&i.push(+k)});if(h=="m"&&i.length>2){c.push([e].concat(Ext.Array.splice(i,0,2)));h="l";e=(e=="m")?"l":"L"}while(i.length>=d[h]){c.push([e].concat(Ext.Array.splice(i,0,d[h])));if(!d[h]){break}}})}c.toString=b.path2string;return c},mapPath:function(l,g){if(!g){return l}var h,e,c,k,a,d,b;l=this.path2curve(l);for(c=0,k=l.length;c7){h[b].shift();e=h[b];while(e.length){Ext.Array.splice(h,b++,0,["C"].concat(Ext.Array.splice(e,0,6)))}Ext.Array.erase(h,b,1);c=h.length;b--}a=h[b];g=a.length;j.x=a[g-2];j.y=a[g-1];j.bx=parseFloat(a[g-4])||j.x;j.by=parseFloat(a[g-3])||j.y}return h},interpolatePaths:function(r,l){var j=this,d=j.pathToAbsolute(r),m=j.pathToAbsolute(l),n={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},b=function(p,s){if(p[s].length>7){p[s].shift();var t=p[s];while(t.length){Ext.Array.splice(p,s++,0,["C"].concat(Ext.Array.splice(t,0,6)))}Ext.Array.erase(p,s,1);o=Math.max(d.length,m.length||0)}},c=function(v,u,s,p,t){if(v&&u&&v[t][0]=="M"&&u[t][0]!="M"){Ext.Array.splice(u,t,0,["M",p.x,p.y]);s.bx=0;s.by=0;s.x=v[t][1];s.y=v[t][2];o=Math.max(d.length,m.length||0)}},h,o,g,q,e,k;for(h=0,o=Math.max(d.length,m.length||0);h1){aa=V(aa);H=aa*H;F=aa*F}c=H*H;R=F*F;U=(n==g?-1:1)*V(u((c*R-c*N*N-R*O*O)/(c*N*N+R*O*O)));C=U*H*N/F+(s+r)/2;B=U*-F*O/H+(af+ae)/2;m=o(((af-B)/F).toFixed(7));l=o(((ae-B)/F).toFixed(7));m=sl){m=m-d*2}if(!g&&l>m){l=l-d*2}}else{m=A[0];l=A[1];C=A[2];B=A[3]}q=l-m;if(u(q)>E){D=l;G=r;p=ae;l=m+E*(g&&l>m?1:-1);r=C+H*T(l);ae=B+F*a(l);M=v.arc2curve(r,ae,H,F,z,0,g,G,p,[l,D,C,B])}q=l-m;j=T(m);ad=a(m);e=T(l);ac=a(l);P=J.tan(q/4);S=4/3*H*P;Q=4/3*F*P;ab=[s,af];Z=[s+S*ad,af-Q*j];Y=[r+S*ac,ae-Q*e];W=[r,ae];Z[0]=2*ab[0]-Z[0];Z[1]=2*ab[1]-Z[1];if(A){return[Z,Y,W].concat(M)}else{M=[Z,Y,W].concat(M).join().split(",");L=[];K=M.length;for(X=0;X(a[1]-c[1])*(b[0]-c[0])},intersectIntersection:function(n,m,g,d){var c=[],b=g[0]-d[0],a=g[1]-d[1],k=n[0]-m[0],i=n[1]-m[1],l=g[0]*d[1]-g[1]*d[0],j=n[0]*m[1]-n[1]*m[0],h=1/(b*i-a*k);c[0]=(l*k-j*b)*h;c[1]=(l*i-j*a)*h;return c},intersect:function(o,c){var n=this,k=0,m=c.length,h=c[m-1],p=o,g,q,l,a,b,d;for(;k0){v.push(g)}}else{j=t-3*q+3*n-m;p=2*(t-q-q+n);h=t-q;u=p*p-4*j*h;e=j+j;if(u===0){g=p/e;if(g<1&&g>0){v.push(g)}}else{if(u>0){w=Math.sqrt(u);g=(w+p)/e;if(g<1&&g>0){v.push(g)}g=(p-w)/e;if(g<1&&g>0){v.push(g)}}}}k=Math.min(t,m);o=Math.max(t,m);for(l=0;l=d&&j>=u)||(j<=d&&j<=u)){h=l=r}else{h=g((k-e)/m(j-d));if(dr){c-=p}h+=c;l+=c;o=k-t*a(h);n=j+t*b(h);x=k+s*a(l);w=j+s*b(l);if((j>d&&nd)){o+=m(d-n)*(o-k)/(n-j);n=d}if((j>u&&wu)){x-=m(u-w)*(x-k)/(w-j);w=u}return{x1:o,y1:n,x2:x,y2:w}},smooth:function(a,p){var o=this.path2curve(a),c=[o[0]],g=o[0][1],e=o[0][2],q,s,t=1,h=o.length,d=1,l=g,k=e,w,v,u,m,r,n,b;for(;t0){q=Math.floor((o-(n/10))/n)*n}if(u){for(p=0;p=0){d=0;while(d>o){d-=e;a++}o=+d.toFixed(10);d=0;while(d=15){j=1;if(++e>11){i++}}else{j=15}break;case 1/3:if(j>=20){j=1;if(++e>11){i++}}else{if(j>=10){j=20}else{j=10}}break;case 1/4:if(j>=22){j=1;if(++e>11){i++}}else{if(j>=15){j=22}else{if(j>=8){j=15}else{j=8}}}break}p.setYear(i);p.setMonth(e);p.setDate(j);k.push(new Date(p))}else{p=Ext.Date.add(p,h,g);k++}}if(o){p=m}if(d){return{from:+c,to:+p,steps:k}}else{return{from:+c,to:+p,step:(p-c)/k,steps:k}}},sorter:function(d,c){return d.offset-c.offset},rad:function(a){return a%360*Math.PI/180},degrees:function(a){return a*180/Math.PI%360},withinBox:function(a,c,b){b=b||{};return(a>=b.x&&a<=(b.x+b.width)&&c>=b.y&&c<=(b.y+b.height))},parseGradient:function(k){var e=this,g=k.type||"linear",c=k.angle||0,i=e.radian,l=k.stops,a=[],j,b,h,d;if(g=="linear"){b=[0,0,Math.cos(c*i),Math.sin(c*i)];h=1/(Math.max(Math.abs(b[2]),Math.abs(b[3]))||1);b[2]*=h;b[3]*=h;if(b[2]<0){b[0]=-b[2];b[2]=0}if(b[3]<0){b[1]=-b[3];b[3]=0}}for(j in l){if(l.hasOwnProperty(j)&&e.stopsRE.test(j)){d={offset:parseInt(j,10),color:Ext.draw.Color.toHex(l[j].color)||"#ffffff",opacity:l[j].opacity||1};a.push(d)}}Ext.Array.sort(a,e.sorter);if(g=="linear"){return{id:k.id,type:g,vector:b,stops:a}}else{return{id:k.id,type:g,centerX:k.centerX,centerY:k.centerY,focalX:k.focalX,focalY:k.focalY,radius:k.radius,vector:b,stops:a}}}});Ext.define("Ext.fx.PropertyHandler",{statics:{defaultHandler:{pixelDefaultsRE:/width|height|top$|bottom$|left$|right$/i,unitRE:/^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/,scrollRE:/^scroll/i,computeDelta:function(j,c,a,g,i){a=(typeof a=="number")?a:1;var h=this.unitRE,d=h.exec(j),b,e;if(d){j=d[1];e=d[2];if(!this.scrollRE.test(i)&&!e&&this.pixelDefaultsRE.test(i)){e="px"}}j=+j||0;d=h.exec(c);if(d){c=d[1];e=d[2]||e}c=+c||0;b=(g!=null)?g:j;return{from:j,delta:(c-b)*a,units:e}},get:function(o,b,a,n,k){var m=o.length,d=[],e,h,l,c,g;for(e=0;e=d){l=d;a=true}if(i.reverse){l=d-l}for(e in k){if(k.hasOwnProperty(e)){j=k[e];h=a?1:c(l/d);g[e]=b[e].set(j,h)}}i.frameCount++;return g},lastFrame:function(){var c=this,a=c.iterations,b=c.currentIteration;b++;if(b0},isRunning:function(){return this.paused===false&&this.running===true&&this.isAnimator!==true}});Ext.enableFx=true;Ext.define("Ext.util.Animate",{isAnimate:true,animate:function(a){var b=this;if(Ext.fx.Manager.hasFxBlock(b.id)){return b}Ext.fx.Manager.queueFx(new Ext.fx.Anim(b.anim(a)));return this},anim:function(a){if(!Ext.isObject(a)){return(a)?{}:false}var b=this;if(a.stopAnimation){b.stopAnimation()}Ext.applyIf(a,Ext.fx.Manager.getFxDefaults(b.id));return Ext.apply({target:b,paused:true},a)},stopFx:Ext.Function.alias(Ext.util.Animate,"stopAnimation"),stopAnimation:function(){Ext.fx.Manager.stopAnimation(this.id);return this},syncFx:function(){Ext.fx.Manager.setFxDefaults(this.id,{concurrent:true});return this},sequenceFx:function(){Ext.fx.Manager.setFxDefaults(this.id,{concurrent:false});return this},hasActiveFx:Ext.Function.alias(Ext.util.Animate,"getActiveAnimation"),getActiveAnimation:function(){return Ext.fx.Manager.getActiveAnimation(this.id)}},function(){Ext.applyIf(Ext.Element.prototype,this.prototype);Ext.CompositeElementLite.importElementMethods()});Ext.define("Ext.util.ElementContainer",{childEls:[],constructor:function(){var b=this,a;if(b.hasOwnProperty("childEls")){a=b.childEls;delete b.childEls;b.addChildEls.apply(b,a)}},destroy:function(){var e=this,d=e.getChildEls(),g,a,c,b;for(c=d.length;c--;){a=d[c];if(typeof a!="string"){a=a.name}g=e[a];if(g){e[a]=null;g.remove()}}},addChildEls:function(){var b=this,a=arguments;if(b.hasOwnProperty("childEls")){b.childEls.push.apply(b.childEls,a)}else{b.childEls=b.getChildEls().concat(Array.prototype.slice.call(a))}b.prune(b.childEls,false)},applyChildEls:function(b,a){var e=this,g=e.getChildEls(),j,k,d,c,h;j=(a||e.id)+"-";for(d=g.length;d--;){k=g[d];if(typeof k=="string"){h=b.getById(j+k)}else{if((c=k.select)){h=Ext.select(c,true,b.dom)}else{if((c=k.selectNode)){h=Ext.get(Ext.DomQuery.selectNode(c,b.dom))}else{h=b.getById(k.id||(j+k.itemId))}}k=k.name}e[k]=h}},getChildEls:function(){var b=this,a;if(b.hasOwnProperty("childEls")){return b.childEls}a=b.self;return a.$childEls||b.getClassChildEls(a)},getClassChildEls:function(o){var k=this,p=o.$childEls,m,d,b,j,n,h,a,c,e,g,l;if(!p){g=o.superclass;if(g){g=g.self;c=[g.$childEls||k.getClassChildEls(g)];l=g.prototype.mixins||{}}else{c=[];l={}}e=o.prototype;h=e.mixins;for(a in h){if(h.hasOwnProperty(a)&&!l.hasOwnProperty(a)){n=h[a].self;c.push(n.$childEls||k.getClassChildEls(n))}}c.push(e.hasOwnProperty("childEls")&&e.childEls);for(d=0,b=c.length;d','
    {parent.baseCls}-{parent.ui}-{.}-tl{frameElCls}" role="presentation">','
    {parent.baseCls}-{parent.ui}-{.}-tr{frameElCls}" role="presentation">','
    {parent.baseCls}-{parent.ui}-{.}-tc{frameElCls}" role="presentation">
    ','
    ','
    ',"
    ",'
    {parent.baseCls}-{parent.ui}-{.}-ml{frameElCls}" role="presentation">','
    {parent.baseCls}-{parent.ui}-{.}-mr{frameElCls}" role="presentation">','
    {parent.baseCls}-{parent.ui}-{.}-mc{frameElCls}" role="presentation">',"{%this.applyRenderTpl(out, values)%}","
    ",'
    ','
    ','','
    {parent.baseCls}-{parent.ui}-{.}-bl{frameElCls}" role="presentation">','
    {parent.baseCls}-{parent.ui}-{.}-br{frameElCls}" role="presentation">','
    {parent.baseCls}-{parent.ui}-{.}-bc{frameElCls}" role="presentation">
    ','
    ','
    ',"
    ","{%this.renderDockedItems(out,values,1);%}"],frameTableTpl:["{%this.renderDockedItems(out,values,0);%}",'','',"",'','','',"","","",'','",'',"",'',"",'','','',"","","
    {parent.baseCls}-{parent.ui}-{.}-tl{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-tc{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-tr{frameElCls}" role="presentation">
    {parent.baseCls}-{parent.ui}-{.}-ml{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-mc{frameElCls}" role="presentation">',"{%this.applyRenderTpl(out, values)%}"," {parent.baseCls}-{parent.ui}-{.}-mr{frameElCls}" role="presentation">
    {parent.baseCls}-{parent.ui}-{.}-bl{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-bc{frameElCls}" role="presentation"> {parent.baseCls}-{parent.ui}-{.}-br{frameElCls}" role="presentation">
    ","{%this.renderDockedItems(out,values,1);%}"],afterRender:function(){var d=this,e={},i=d.protoEl,h=d.el,c,g,a,b;d.finishRenderChildren();if(d.contentEl){g=Ext.baseCSSPrefix;a=g+"hide-";b=Ext.get(d.contentEl);b.removeCls([g+"hidden",a+"display",a+"offsets",a+"nosize"]);d.getContentTarget().appendChild(b.dom)}i.writeTo(e);c=e.removed;if(c){h.removeCls(c)}c=e.cls;if(c.length){h.addCls(c)}c=e.style;if(e.style){h.setStyle(c)}d.protoEl=null;if(!d.ownerCt){d.updateLayout()}},afterFirstLayout:function(b,i){var d=this,h=d.x,e=d.y,c,a,g,j;if(!d.ownerLayout){c=Ext.isDefined(h);a=Ext.isDefined(e)}if(d.floating&&(!c||!a)){if(d.floatParent){g=d.floatParent.getTargetEl().getViewRegion();j=d.el.getAlignToXY(d.floatParent.getTargetEl(),"c-c");g.x=j[0]-g.x;g.y=j[1]-g.y}else{j=d.el.getAlignToXY(d.container,"c-c");g=d.container.translateXY(j[0],j[1])}h=c?h:g.x;e=a?e:g.y;c=a=true}if(c||a){d.setPosition(h,e)}d.onBoxReady(b,i)},applyRenderSelectors:function(){var d=this,b=d.renderSelectors,c=d.el,e=c.dom,a;d.applyChildEls(c);if(b){for(a in b){if(b.hasOwnProperty(a)&&b[a]){d[a]=Ext.get(Ext.DomQuery.selectNode(b[a],e))}}}},beforeRender:function(){var c=this,e=c.getTargetEl(),d=c.getOverflowEl(),b=c.getComponentLayout(),a=c.getOverflowStyle();c.frame=c.frame||c.alwaysFramed;if(!b.initialized){b.initLayout()}if(d){d.setStyle(a);c.overflowStyleSet=true}c.setUI(c.ui);if(c.disabled){c.disable(true)}},doApplyRenderTpl:function(c,a){var d=a.$comp,b;if(!d.rendered){b=d.initRenderTpl();b.applyOut(a.renderData,c)}},doAutoRender:function(){var a=this;if(!a.rendered){if(a.floating){a.render(document.body)}else{a.render(Ext.isBoolean(a.autoRender)?Ext.getBody():a.autoRender)}}},doRenderContent:function(a,c){var b=c.$comp;if(b.html){Ext.DomHelper.generateMarkup(b.html,a);delete b.html}if(b.tpl){if(!b.tpl.isTemplate){b.tpl=new Ext.XTemplate(b.tpl)}if(b.data){b.tpl.applyOut(b.data,a);delete b.data}}},doRenderFramingDockedItems:function(a,c,d){var b=c.$comp;if(!b.rendered&&b.doRenderDockedItems){c.renderData.$skipDockedItems=true;b.doRenderDockedItems.call(this,a,c,d)}},finishRender:function(a){var d=this,b,e,c;if(!d.el||d.$pid){if(d.container){c=d.container.getById(d.id,true)}else{c=Ext.getDom(d.id)}if(!d.el){d.wrapPrimaryEl(c)}else{delete d.$pid;if(!d.el.dom){d.wrapPrimaryEl(d.el)}c.parentNode.insertBefore(d.el.dom,c);Ext.removeNode(c)}}else{if(!d.rendering){b=d.initRenderTpl();if(b){e=d.initRenderData();b.insertFirst(d.getTargetEl(),e)}}}if(!d.container){d.container=Ext.get(d.el.dom.parentNode)}if(d.ctCls){d.container.addCls(d.ctCls)}d.onRender(d.container,a);if(!d.overflowStyleSet){d.getOverflowEl().setStyle(d.getOverflowStyle())}d.el.setVisibilityMode(Ext.Element[d.hideMode.toUpperCase()]);if(d.overCls){d.el.hover(d.addOverCls,d.removeOverCls,d)}if(d.hasListeners.render){d.fireEvent("render",d)}d.afterRender();if(d.hasListeners.afterrender){d.fireEvent("afterrender",d)}d.initEvents();if(d.hidden){d.el.hide()}},finishRenderChildren:function(){var a=this.getComponentLayout();a.finishRender()},getElConfig:function(){var j=this,l=j.autoEl,g=j.getFrameInfo(),b={tag:"div",tpl:g?j.initFramingTpl(g.table):j.initRenderTpl()},a=j.protoEl,c,e,h,m,d,k;j.initStyles(a);if(g){a.setStyle("background-image","none")}a.writeTo(b);a.flush();if(Ext.isString(l)){b.tag=l}else{Ext.apply(b,l)}b.id=j.id;if(b.tpl){if(g){e=j.frameElNames;h=e.length;b.tplData=k=j.getFrameRenderData();k.renderData=j.initRenderData();d=k.fgid;for(c=0;c table")[1].remove()}else{if(g){g.remove()}if(d){d.remove()}if(c){c.remove()}}}}else{if(e.frame){e.applyRenderSelectors()}}},getFrameInfo:function(){if(Ext.supports.CSS3BorderRadius||!this.frame){return false}var x=this,p=x.frameInfoCache,g=x.el||x.protoEl,e=g.dom?g.dom.className:g.classList.join(" "),y=p[e],q=Math.max,o,k,t,n,z,h,l,b,c,m,i,s,u,j,a,d,w,r,v;if(y==null){o=Ext.fly(x.getStyleProxy(e),"frame-style-el");t=o.getStyle("background-image");k=t.indexOf("about:blank#");if(k<0){y=false}else{t=t.substring(k+12).split("-");d=parseInt(t[1],10);w=parseInt(t[2],10);r=parseInt(t[3],10);v=parseInt(t[4],10);b=parseInt(t[5],10);c=parseInt(t[6],10);m=parseInt(t[7],10);i=parseInt(t[8],10);s=parseInt(t[9],10);u=parseInt(t[10],10);j=parseInt(t[11],10);a=parseInt(t[12],10);n=q(b,q(d,w));z=q(c,q(w,r));h=q(m,q(v,r));l=q(i,q(d,v));y={table:t[0].charAt(0)==="t",vertical:t[0].charAt(1)==="v",top:n,right:z,bottom:h,left:l,width:l+z,height:n+h,maxWidth:q(n,z,h,l),border:{top:b,right:c,bottom:m,left:i,width:i+c,height:b+m},padding:{top:s,right:u,bottom:j,left:a,width:a+u,height:s+j},radius:{tl:d,tr:w,br:r,bl:v}}}p[e]=y}x.frame=!!y;x.frameSize=y;return y},getStyleProxy:function(b){var a=this.styleProxyEl||(Ext.AbstractComponent.prototype.styleProxyEl=Ext.getBody().createChild({style:{position:"absolute",top:"-10000px"}},null,true));a.className=b;return a},getFrameTpl:function(a){return this.getTpl(a?"frameTableTpl":"frameTpl")},frameInfoCache:{}});Ext.define("Ext.state.Provider",{mixins:{observable:Ext.util.Observable},prefix:"ext-",constructor:function(a){a=a||{};var b=this;Ext.apply(b,a);b.addEvents("statechange");b.state={};b.mixins.observable.constructor.call(b)},get:function(b,a){return typeof this.state[b]=="undefined"?a:this.state[b]},clear:function(a){var b=this;delete b.state[a];b.fireEvent("statechange",b,a,null)},set:function(a,c){var b=this;b.state[a]=c;b.fireEvent("statechange",b,a,c)},decodeValue:function(g){var c=this,k=/^(a|n|d|b|s|o|e)\:(.*)$/,b=k.exec(unescape(g)),h,d,a,j,e,i;if(!b||!b[1]){return}d=b[1];g=b[2];switch(d){case"e":return null;case"n":return parseFloat(g);case"d":return new Date(Date.parse(g));case"b":return(g=="1");case"a":h=[];if(g!=""){j=g.split("^");e=j.length;for(i=0;ie){q=k;n=true}if(g&&a>p){m=a;n=true}if(l||g){j=t.el.getStyle("overtflow");if(j!=="hidden"){t.el.setStyle("overflow","hidden")}}if(n){b=!Ext.isNumber(t.width);s=!Ext.isNumber(t.height);t.setSize(m,q);t.el.setSize(p,e);if(b){delete t.width}if(s){delete t.height}}if(g){d.width=a}if(l){d.height=k}}i=t.constrain;o=t.constrainHeader;if(i||o){t.constrain=t.constrainHeader=false;r=c.callback;c.callback=function(){t.constrain=i;t.constrainHeader=o;if(r){r.call(c.scope||t,arguments)}if(j!=="hidden"){t.el.setStyle("overflow",j)}}}return t.mixins.animate.animate.apply(t,arguments)},onHide:function(){if(this.ownerLayout){this.updateLayout({isRoot:false})}},onShow:function(){this.updateLayout({isRoot:false})},constructPlugin:function(b){var a=this;if(typeof b=="string"){b=Ext.PluginManager.create({},b,a)}else{b=Ext.PluginManager.create(b,null,a)}return b},constructPlugins:function(){var e=this,c=e.plugins,b,d,a;if(c){b=[];if(!Ext.isArray(c)){c=[c]}for(d=0,a=c.length;d=0;a--){if((g=d.getAt(a)).is(b)){return g}}}else{if(a){return d.getAt(--a)}}}}return null},previousNode:function(b,d){var j=this,h=j.ownerCt,a,g,e,c;if(d&&j.is(b)){return j}if(h){for(g=h.items.items,e=Ext.Array.indexOf(g,j)-1;e>-1;e--){c=g[e];if(c.query){a=c.query(b);a=a[a.length-1];if(a){return a}}if(c.is(b)){return c}}return h.previousNode(b,true)}return null},nextNode:function(d,j){var b=this,c=b.ownerCt,k,e,h,g,a;if(j&&b.is(d)){return b}if(c){for(e=c.items.items,g=Ext.Array.indexOf(e,b)+1,h=e.length;g=8){a=new XDomainRequest()}else{Ext.Error.raise({msg:"Your browser does not support CORS"})}return a},getXhrInstance:(function(){var b=[function(){return new XMLHttpRequest()},function(){return new ActiveXObject("MSXML2.XMLHTTP.3.0")},function(){return new ActiveXObject("MSXML2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}],c=0,a=b.length,g;for(;c=200&&a<300)||a==304,b=false;if(!c){switch(a){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:b=true;break}}return{success:c,isException:b}},createResponse:function(e){var i=this,k=e.xhr,c=i.isXdr,b={},l=c?[]:k.getAllResponseHeaders().replace(/\r\n/g,"\n").split("\n"),h=l.length,m,g,j,d,a;while(h--){m=l[h];g=m.indexOf(":");if(g>=0){j=m.substr(0,g).toLowerCase();if(m.charAt(g+1)==" "){++g}b[j]=m.substr(g+1)}}e.xhr=null;delete e.xhr;d={request:e,requestId:e.id,status:k.status,statusText:k.statusText,getResponseHeader:function(n){return b[n.toLowerCase()]},getAllResponseHeaders:function(){return b}};if(c){i.processXdrResponse(d,k)}if(e.binary){d.responseBytes=i.getByteArray(k)}else{d.responseText=k.responseText;d.responseXML=k.responseXML}k=null;return d},createException:function(a){return{request:a,requestId:a.id,status:a.aborted?-1:0,statusText:a.aborted?"transaction aborted":"communication failure",aborted:a.aborted,timedout:a.timedout}},getByteArray:function(k){var c=k.response,j=k.responseBody,b,g,a,d;if(k instanceof Ext.data.flash.BinaryXhr){b=k.responseBytes}else{if(window.Uint8Array){b=c?new Uint8Array(c):[]}else{if(Ext.isIE9p){try{b=new VBArray(j).toArray()}catch(h){b=[]}}else{if(Ext.isIE){if(!this.self.vbScriptInjected){this.injectVBScript()}getIEByteArray(k.responseBody,b=[])}else{b=[];g=k.responseText;a=g.length;for(d=0;d1){c.overflowY=a||""}}if(c.rendered){c.getOverflowEl().setStyle(c.getOverflowStyle())}c.updateLayout();return c},beforeRender:function(){var b=this,c=b.floating,a;if(c){b.addCls(Ext.baseCSSPrefix+"layer");a=c.cls;if(a){b.addCls(a)}}return b.callParent()},afterComponentLayout:function(){this.callParent(arguments);if(this.floating){this.onAfterFloatLayout()}},makeFloating:function(a){this.mixins.floating.constructor.call(this,a)},wrapPrimaryEl:function(a){if(this.floating){this.makeFloating(a)}else{this.callParent(arguments)}},initResizable:function(a){var b=this;a=Ext.apply({target:b,dynamic:false,constrainTo:b.constrainTo||(b.floatParent?b.floatParent.getTargetEl():null),handles:b.resizeHandles},a);a.target=b;b.resizer=new Ext.resizer.Resizer(a)},getDragEl:function(){return this.el},initDraggable:function(){var c=this,a=(c.resizer&&c.resizer.el!==c.el)?c.resizerComponent=new Ext.Component({el:c.resizer.el,rendered:true,container:c.container}):c,b=Ext.applyIf({el:a.getDragEl(),constrainTo:(c.constrain||c.draggable.constrain)?(c.constrainTo||(c.floatParent?c.floatParent.getTargetEl():c.container)):undefined},c.draggable);if(c.constrain||c.constrainDelegate){b.constrain=c.constrain;b.constrainDelegate=c.constrainDelegate}c.dd=new Ext.util.ComponentDragger(a,b)},scrollBy:function(b,a,c){var d;if((d=this.getTargetEl())&&d.dom){d.scrollBy.apply(d,arguments)}},setLoading:function(c,d){var b=this,a={target:b};if(b.rendered){Ext.destroy(b.loadMask);b.loadMask=null;if(c!==false&&!b.collapsed){if(Ext.isObject(c)){Ext.apply(a,c)}else{if(Ext.isString(c)){a.msg=c}}if(d){Ext.applyIf(a,{useTargetEl:true})}b.loadMask=new Ext.LoadMask(a);b.loadMask.show()}}return b.loadMask},beforeSetPosition:function(){var b=this,c=b.callParent(arguments),a;if(c){a=b.adjustPosition(c.x,c.y);c.x=a.x;c.y=a.y}return c||null},afterSetPosition:function(b,a){this.onPosition(b,a);this.fireEvent("move",this,b,a)},showAt:function(a,d,b){var c=this;if(!c.rendered&&(c.autoRender||c.floating)){c.x=a;c.y=d;return c.show()}if(c.floating){c.setPosition(a,d,b)}else{c.setPagePosition(a,d,b)}c.show()},showBy:function(b,d,c){var a=this;if(a.floating&&b){a.show();if(a.rendered&&!a.hidden){a.alignTo(b,d||a.defaultAlign,c)}}return a},setPagePosition:function(a,g,b){var c=this,d,e;if(Ext.isArray(a)){g=a[1];a=a[0]}c.pageX=a;c.pageY=g;if(c.floating){if(c.isContainedFloater()){e=c.floatParent.getTargetEl().getViewRegion();if(Ext.isNumber(a)&&Ext.isNumber(e.left)){a-=e.left}if(Ext.isNumber(g)&&Ext.isNumber(e.top)){g-=e.top}}else{d=c.el.translateXY(a,g);a=d.x;g=d.y}c.setPosition(a,g,b)}else{d=c.el.translateXY(a,g);c.setPosition(d.x,d.y,b)}return c},isContainedFloater:function(){return(this.floating&&this.floatParent)},updateBox:function(a){this.setSize(a.width,a.height);this.setPagePosition(a.x,a.y);return this},getOuterSize:function(){var a=this.el;return{width:a.getWidth()+a.getMargin("lr"),height:a.getHeight()+a.getMargin("tb")}},adjustPosition:function(a,d){var b=this,c;if(b.isContainedFloater()){c=b.floatParent.getTargetEl().getViewRegion();a+=c.left;d+=c.top}return{x:a,y:d}},getPosition:function(a){var b=this,d,c=b.isContainedFloater(),e;if((a===true)&&!c){return[b.getLocalX(),b.getLocalY()]}d=b.getXY();if((a===true)&&c){e=b.floatParent.getTargetEl().getViewRegion();d[0]-=e.left;d[1]-=e.top}return d},getId:function(){var a=this,b;if(!a.id){b=a.getXType();if(b){b=b.replace(Ext.Component.INVALID_ID_CHARS_Re,"-")}else{b=Ext.name.toLowerCase()+"-comp"}a.id=b+"-"+a.getAutoId()}return a.id},show:function(d,a,b){var c=this,e=c.rendered;if(c.hierarchicallyHidden||(c.floating&&!e&&c.isHierarchicallyHidden())){if(!e){c.initHierarchyEvents()}if(arguments.length>1){arguments[0]=null;c.pendingShow=arguments}else{c.pendingShow=true}}else{if(e&&c.isVisible()){if(c.toFrontOnShow&&c.floating){c.toFront()}}else{if(c.fireEvent("beforeshow",c)!==false){c.hidden=false;delete this.getHierarchyState().hidden;if(!e&&(c.autoRender||c.floating)){c.doAutoRender();e=c.rendered}if(e){c.beforeShow();c.onShow.apply(c,arguments);c.afterShow.apply(c,arguments)}}else{c.onShowVeto()}}}return c},onShowVeto:Ext.emptyFn,beforeShow:Ext.emptyFn,onShow:function(){var a=this;a.el.show();a.callParent(arguments);if(a.floating){if(a.maximized){a.fitContainer()}else{if(a.constrain){a.doConstrain()}}}},getAnimateTarget:function(a){a=a||this.animateTarget;if(a){a=a.isComponent?a.getEl():Ext.get(a)}return a||null},afterShow:function(h,b,e){var g=this,i=g.el,a,c,d;h=g.getAnimateTarget(h);if(!g.ghost){h=null}if(h){c={x:i.getX(),y:i.getY(),width:i.dom.offsetWidth,height:i.dom.offsetHeight};a={x:h.getX(),y:h.getY(),width:h.dom.offsetWidth,height:h.dom.offsetHeight};i.addCls(g.offsetsCls);d=g.ghost();d.el.stopAnimation();d.setX(-10000);g.ghostBox=c;d.el.animate({from:a,to:c,listeners:{afteranimate:function(){delete d.componentLayout.lastComponentSize;g.unghost();delete g.ghostBox;i.removeCls(g.offsetsCls);g.onShowComplete(b,e)}}})}else{g.onShowComplete(b,e)}g.fireHierarchyEvent("show")},onShowComplete:function(a,b){var c=this;if(c.floating){c.toFront();c.onFloatShow()}Ext.callback(a,b||c);c.fireEvent("show",c);delete c.hiddenByLayout},hide:function(e,b,c){var d=this,a;if(d.pendingShow){delete d.pendingShow}if(!(d.rendered&&!d.isVisible())){a=(d.fireEvent("beforehide",d)!==false);if(d.hierarchicallyHidden||a){d.hidden=true;d.getHierarchyState().hidden=true;if(d.rendered){d.onHide.apply(d,arguments)}}}return d},onHide:function(i,a,e){var g=this,c,d,b,h=Ext.Element.getActiveElement();if(h===g.el||g.el.contains(h)){Ext.fly(h).blur()}i=g.getAnimateTarget(i);if(!g.ghost){i=null}if(i){b={x:i.getX(),y:i.getY(),width:i.dom.offsetWidth,height:i.dom.offsetHeight};c=g.ghost();c.el.stopAnimation();d=g.getSize();c.el.animate({to:b,listeners:{afteranimate:function(){delete c.componentLayout.lastComponentSize;c.el.hide();c.el.setSize(d);g.afterHide(a,e)}}})}g.el.hide();if(!i){g.afterHide(a,e)}},afterHide:function(a,b){var c=this;delete c.hiddenByLayout;Ext.AbstractComponent.prototype.onHide.call(c);Ext.callback(a,b||c);c.fireEvent("hide",c);c.fireHierarchyEvent("hide")},onDestroy:function(){var a=this;if(a.rendered){Ext.destroy(a.dd,a.resizer,a.proxy,a.proxyWrap,a.resizerComponent)}delete a.focusTask;a.callParent()},deleteMembers:function(){var b=arguments,a=b.length,c=0;for(;c','
    ',"{%this.renderBody(out,values)%}","
    ","","{% } else if (values.shrinkWrapWidth) { %}",'',"",'","","
    ',"{%this.renderBody(out,values)%}",'
    ',"
    ","{% } else { %}",'
    ','
    ',"{%this.renderBody(out,values)%}",'
    ',"
    ","
    ","{% values.$layout.isShrinkWrapTpl = false %}","{% } %}"],tableTpl:['',"",'","","
    ',"
    "],isShrinkWrapTpl:true,beginLayout:function(e){var d=this,a,b,c,g;d.callParent(arguments);d.initContextItems(e);if(!d.isShrinkWrapTpl){if(e.widthModel.shrinkWrap){g=true}if(Ext.isStrict&&Ext.isIE7){c=d.getOverflowXStyle(e);if((c==="auto"||c==="scroll")&&e.paddingContext.getPaddingInfo().right){g=true}}if(g){d.insertTableCt(e)}}if(!d.isShrinkWrapTpl&&Ext.isIE7&&Ext.isStrict&&!d.clearElHasPadding){a=e.paddingContext.getPaddingInfo().bottom;b=d.getOverflowYStyle(e);if(a&&(b==="auto"||b==="scroll")){d.clearEl.setStyle("height",a);d.clearElHasPadding=true}}},beforeLayoutCycle:function(c){var a=this.owner,d=a.hierarchyState,b=a.hierarchyStateInner;if(!d||d.invalid){d=a.getHierarchyState();b=a.hierarchyStateInner}if(c.widthModel.shrinkWrap&&this.isShrinkWrapTpl){b.inShrinkWrapTable=true}else{delete b.inShrinkWrapTable}},beginLayoutCycle:function(e){var k=this,b=k.outerCt,j=k.lastOuterCtWidth||"",i=k.lastOuterCtHeight||"",l=k.lastOuterCtTableLayout||"",m,g,h,n,c,a,d;k.callParent(arguments);h=n=c="";if(!e.widthModel.shrinkWrap&&k.isShrinkWrapTpl){if(Ext.isIE7m&&Ext.isStrict){g=k.getOverflowYStyle(e);if(g==="auto"||g==="scroll"){a=true}}if(!a){h="100%"}d=k.owner.hierarchyStateInner;m=k.getOverflowXStyle(e);c=(d.inShrinkWrapTable||m==="auto"||m==="scroll")?"":"fixed"}if(!e.heightModel.shrinkWrap&&!Ext.supports.PercentageHeightOverflowBug){n="100%"}if((h!==j)||k.hasOuterCtPxWidth){b.setStyle("width",h);k.lastOuterCtWidth=h;k.hasOuterCtPxWidth=false}if(c!==l){b.setStyle("table-layout",c);k.lastOuterCtTableLayout=c}if((n!==i)||k.hasOuterCtPxHeight){b.setStyle("height",n);k.lastOuterCtHeight=n;k.hasOuterCtPxHeight=false}if(k.hasInnerCtPxHeight){k.innerCt.setStyle("height","");k.hasInnerCtPxHeight=false}e.state.overflowAdjust=k.lastOverflowAdjust},calculate:function(c){var a=this,b=c.state,e=a.getContainerSize(c,true),d=b.calculatedItems||(b.calculatedItems=a.calculateItems?a.calculateItems(c,e):true);a.setCtSizeIfNeeded(c,e);if(d&&c.hasDomProp("containerChildrenSizeDone")){a.calculateContentSize(c);if(e.gotAll){if(a.manageOverflow&&!c.state.secondPass&&!a.reserveScrollbar){a.calculateOverflow(c,e)}return}}a.done=false},calculateContentSize:function(g){var e=this,a=((g.widthModel.shrinkWrap?1:0)|(g.heightModel.shrinkWrap?2:0)),c=(a&1)||undefined,h=(a&2)||undefined,d=0,b=g.props;if(c){if(isNaN(b.contentWidth)){++d}else{c=undefined}}if(h){if(isNaN(b.contentHeight)){++d}else{h=undefined}}if(d){if(c&&!g.setContentWidth(e.measureContentWidth(g))){e.done=false}if(h&&!g.setContentHeight(e.measureContentHeight(g))){e.done=false}}},calculateOverflow:function(c){var h=this,b,j,a,g,e,d,i;e=(h.getOverflowXStyle(c)==="auto");d=(h.getOverflowYStyle(c)==="auto");if(e||d){a=Ext.getScrollbarSize();i=c.overflowContext.el.dom;g=0;if(i.scrollWidth>i.clientWidth){g|=1}if(i.scrollHeight>i.clientHeight){g|=2}b=(d&&(g&2))?a.width:0;j=(e&&(g&1))?a.height:0;if(b!==h.lastOverflowAdjust.width||j!==h.lastOverflowAdjust.height){h.done=false;c.invalidate({state:{overflowAdjust:{width:b,height:j},overflowState:g,secondPass:true}})}}},completeLayout:function(a){this.lastOverflowAdjust=a.state.overflowAdjust},doRenderPadding:function(b,d){var c=d.$layout,a=d.$layout.owner,e=a[a.contentPaddingProperty];if(c.managePadding&&e){b.push("padding:",Ext.Element.unitizeBox(e))}},finishedLayout:function(b){var a=this.innerCt;this.callParent(arguments);if(Ext.isIEQuirks||Ext.isIE8m){a.repaint()}if(Ext.isOpera){a.setStyle("position","relative");a.dom.scrollWidth;a.setStyle("position","")}},getContainerSize:function(b,c){var a=this.callParent(arguments),d=b.state.overflowAdjust;if(d){a.width-=d.width;a.height-=d.height}return a},getRenderData:function(){var a=this.owner,b=this.callParent();if((Ext.isIEQuirks||Ext.isIE7m)&&((a.shrinkWrap&1)||(a.floating&&!a.width))){b.shrinkWrapWidth=true}return b},getRenderTarget:function(){return this.innerCt},getElementTarget:function(){return this.innerCt},getOverflowXStyle:function(a){return a.overflowXStyle||(a.overflowXStyle=this.owner.scrollFlags.overflowX||a.overflowContext.getStyle("overflow-x"))},getOverflowYStyle:function(a){return a.overflowYStyle||(a.overflowYStyle=this.owner.scrollFlags.overflowY||a.overflowContext.getStyle("overflow-y"))},initContextItems:function(c){var b=this,d=c.target,a=b.owner.customOverflowEl;c.outerCtContext=c.getEl("outerCt",b);c.innerCtContext=c.getEl("innerCt",b);if(a){c.overflowContext=c.getEl(a)}else{c.overflowContext=c.targetContext}if(d[d.contentPaddingProperty]!==undefined){c.paddingContext=b.isShrinkWrapTpl?c.innerCtContext:c.outerCtContext}},initLayout:function(){var c=this,b=Ext.getScrollbarSize().width,a=c.owner;c.callParent();if(b&&c.manageOverflow&&!c.hasOwnProperty("lastOverflowAdjust")){if(a.autoScroll||c.reserveScrollbar){c.lastOverflowAdjust={width:b,height:0}}}},insertTableCt:function(b){var h=this,a=h.owner,c=0,e,g,k,d,j;e=Ext.XTemplate.getTpl(this,"tableTpl");e.renderPadding=h.doRenderPadding;h.outerCt.dom.removeChild(h.innerCt.dom);g=document.createDocumentFragment();k=h.innerCt.dom.childNodes;d=k.length;for(;cj.dom.clientHeight)){l-=p.width}}d.outerCtContext.setProp("width",l+g.width);s.hasOuterCtPxWidth=true}if(i&&!d.heightModel.shrinkWrap){if(Ext.supports.PercentageHeightOverflowBug){r=true}if(((Ext.isIE8&&Ext.isStrict)||Ext.isIE7m&&Ext.isStrict&&q)){h=true;c=!Ext.isIE8}if((r||h)&&o&&(j.dom.scrollWidth>j.dom.clientWidth)){i-=p.height}if(r){d.outerCtContext.setProp("height",i+g.height);s.hasOuterCtPxHeight=true}if(h){if(c){i+=g.height}d.innerCtContext.setProp("height",i);s.hasInnerCtPxHeight=true}}if(Ext.isIE7&&Ext.isStrict&&!q&&(k==="auto")){a=(e==="auto")?"overflow-x":"overflow-y";j.setStyle(a,"hidden");j.setStyle(a,"auto")}},setupRenderTpl:function(a){this.callParent(arguments);a.renderPadding=this.doRenderPadding},getContentTarget:function(){return this.innerCt}});Ext.define("Ext.ZIndexManager",{alternateClassName:"Ext.WindowGroup",statics:{zBase:9000},constructor:function(a){var b=this;b.list={};b.zIndexStack=[];b.front=null;if(a){if(a.isContainer){a.on("resize",b._onContainerResize,b);b.zseed=Ext.Number.from(b.rendered?a.getEl().getStyle("zIndex"):undefined,b.getNextZSeed());b.targetEl=a.getTargetEl();b.container=a}else{Ext.EventManager.onWindowResize(b._onContainerResize,b);b.zseed=b.getNextZSeed();b.targetEl=Ext.get(a)}}else{Ext.EventManager.onWindowResize(b._onContainerResize,b);b.zseed=b.getNextZSeed();Ext.onDocumentReady(function(){b.targetEl=Ext.getBody()})}},getNextZSeed:function(){return(Ext.ZIndexManager.zBase+=10000)},setBase:function(b){this.zseed=b;var a=this.assignZIndices();this._activateLast();return a},assignZIndices:function(){var c=this.zIndexStack,b=c.length,e=0,h=this.zseed,d,g;for(;e=0&&a[c].hidden;--c){}if((b=a[c])){d._setActiveChild(b,d.front);if(b.modal){return}}else{if(d.front&&!d.front.destroying){d.front.setActive(false)}d.front=null}for(;c>=0;--c){b=a[c];if(b.isVisible()&&b.modal){d._showModalMask(b);return}}d._hideModalMask()},_showModalMask:function(b){var d=this,h=b.el.getStyle("zIndex")-4,c=b.floatParent?b.floatParent.getTargetEl():b.container,a=d.mask,g=d.maskShim,e;if(!a){if(Ext.isIE6){g=d.maskShim=Ext.getBody().createChild({tag:"iframe",cls:Ext.baseCSSPrefix+"shim "+Ext.baseCSSPrefix+"mask-shim"});g.setVisibilityMode(Ext.Element.DISPLAY)}a=d.mask=Ext.getBody().createChild({cls:Ext.baseCSSPrefix+"mask",style:"height:0;width:0"});a.setVisibilityMode(Ext.Element.DISPLAY);a.on("click",d._onMaskClick,d)}a.maskTarget=c;e=d.getMaskBox();if(g){g.setStyle("zIndex",h);g.show();g.setBox(e)}a.setStyle("zIndex",h);a.show();a.setBox(e)},_hideModalMask:function(){var b=this.mask,a=this.maskShim;if(b&&b.isVisible()){b.maskTarget=undefined;b.hide();if(a){a.hide()}}},_onMaskClick:function(){if(this.front){this.front.focus()}},getMaskBox:function(){var a=this.mask.maskTarget;if(a.dom===document.body){return{height:Math.max(document.body.scrollHeight,Ext.dom.Element.getDocumentHeight()),width:Math.max(document.body.scrollWidth,document.documentElement.clientWidth),x:0,y:0}}else{return a.getBox()}},_onContainerResize:function(){var c=this,b=c.mask,a=c.maskShim,d;if(b&&b.isVisible()){b.hide();if(a){a.hide()}d=c.getMaskBox();if(a){a.setSize(d);a.show()}b.setSize(d);b.show()}},register:function(b){var c=this,a=b.afterHide;if(b.zIndexManager){b.zIndexManager.unregister(b)}b.zIndexManager=c;c.list[b.id]=b;c.zIndexStack.push(b);b.afterHide=function(){a.apply(b,arguments);c.onComponentHide(b)}},unregister:function(a){var b=this,c=b.list;delete a.zIndexManager;if(c&&c[a.id]){delete c[a.id];delete a.afterHide;Ext.Array.remove(b.zIndexStack,a);b._activateLast()}},get:function(a){return a.isComponent?a:this.list[a]},bringToFront:function(b,d){var c=this,a=false,e=c.zIndexStack;b=c.get(b);if(b!==c.front){Ext.Array.remove(e,b);if(b.preventBringToFront){e.unshift(b)}else{e.push(b)}c.assignZIndices();if(!d){c._activateLast()}a=true;c.front=b;if(b.modal){c._showModalMask(b)}}return a},sendToBack:function(a){var b=this;a=b.get(a);Ext.Array.remove(b.zIndexStack,a);b.zIndexStack.unshift(a);b.assignZIndices();this._activateLast();return a},hideAll:function(){var b=this.list,a,c;for(c in b){if(b.hasOwnProperty(c)){a=b[c];if(a.isComponent&&a.isVisible()){a.hide()}}}},hide:function(){var d=0,b=this.zIndexStack,a=b.length,c;this.tempHidden=[];for(;d0;){b=a[c];if(b.isComponent&&e.call(d||b,b)===false){return}}},destroy:function(){var b=this,c=b.list,a,d;for(d in c){if(c.hasOwnProperty(d)){a=c[d];if(a.isComponent){a.destroy()}}}delete b.zIndexStack;delete b.list;delete b.container;delete b.targetEl}},function(){Ext.WindowManager=Ext.WindowMgr=new this()});Ext.define("Ext.layout.component.Component",{extend:Ext.layout.Layout,type:"component",isComponentLayout:true,nullBox:{},usesContentHeight:true,usesContentWidth:true,usesHeight:true,usesWidth:true,beginLayoutCycle:function(c,p){var k=this,b=k.owner,e=c.ownerCtContext,g=c.heightModel,h=c.widthModel,i=b.el.dom===document.body,d=b.lastBox||k.nullBox,n=b.el.lastBox||k.nullBox,a=!i,m,o,l,j;k.callParent(arguments);if(p){if(k.usesContentWidth){++c.consumersContentWidth}if(k.usesContentHeight){++c.consumersContentHeight}if(k.usesWidth){++c.consumersWidth}if(k.usesHeight){++c.consumersHeight}if(e&&!e.hasRawContent){m=b.ownerLayout;if(m.usesWidth){++c.consumersWidth}if(m.usesHeight){++c.consumersHeight}}}if(h.configured){l=h.names.width;if(!i){a=p?b[l]!==n.width:h.constrained}c.setWidth(b[l],a)}else{if(c.isTopLevel){if(h.calculated){o=d.width;c.setWidth(o,o!=n.width)}o=d.x;c.setProp("x",o,o!=n.x)}}if(g.configured){j=g.names.height;if(!i){a=p?b[j]!==n.height:g.constrained}c.setHeight(b[j],a)}else{if(c.isTopLevel){if(g.calculated){o=d.height;c.setHeight(o,o!=n.height)}o=d.y;c.setProp("y",o,o!=n.y)}}},finishedLayout:function(b){var h=this,l=b.children,a=h.owner,e,c,k,d,g,j;if(l){e=l.length;for(c=0;c "+a)[0]||null},contains:function(c,b){var a=false;if(b){this.cascade(function(d){if(d.contains&&d.contains(c)){a=true;return false}});return a}else{return this.items.contains(c)||this.floatingItems.contains(c)}},nextChild:function(e,b){var c=this,a,d=c.items.indexOf(e);if(d!==-1){a=b?Ext.ComponentQuery(b,c.items.items.slice(d+1)):c.items.getAt(d+1);if(!a&&c.ownerCt){a=c.ownerCt.nextChild(c,b)}}return a},prevChild:function(e,b){var c=this,a,d=c.items.indexOf(e);if(d!==-1){a=b?Ext.ComponentQuery(b,c.items.items.slice(d+1)):c.items.getAt(d+1);if(!a&&c.ownerCt){a=c.ownerCt.nextChild(c,b)}}return a},down:function(a){if(a&&a.isComponent){a="#"+Ext.escapeId(a.getItemId())}a=a||"";return this.query(a)[0]||null},enable:function(){this.callParent(arguments);var d=this.getChildItemsToDisable(),c=d.length,b,a;for(a=0;a=d){h=0}else{if(h<0){h=d-1}}if(h===e){return[]}if((k=g[h]).isFocusable()){return[k]}}return[]},prevFocus:function(e,d){return this.nextFocus(e,d,-1)},root:function(e){var d=e.length,h=[],g=0,j;for(;gd.el.getZIndex()});return c.concat(a)},initDOM:function(c){var g=this,b=g.focusFrameCls,e=Ext.ComponentQuery.query("{getFocusEl()}:not([focusListenerAdded])"),d=0,a=e.length;if(!Ext.isReady){return Ext.onReady(g.initDOM,g)}for(;d:focusable",a)[0]:a;if(d){d.focus()}else{if(Ext.isFunction(a.onClick)){g.button=0;a.onClick(g);if(a.isVisible(true)){a.focus()}else{c.navigateOut()}}}}},navigateOut:function(c){var b=this,a;if(!b.focusedCmp||!(a=b.focusedCmp.up(":focusable"))){b.focusEl.focus()}else{a.focus()}return true},navigateSiblings:function(i,b,o){var j=this,a=b||j,p=i.getKey(),g=Ext.EventObject,k=i.shiftKey||p==g.LEFT||p==g.UP,c=p==g.LEFT||p==g.RIGHT||p==g.UP||p==g.DOWN,h=k?"prev":"next",n,d,m,l;m=(a.focusedCmp&&a.focusedCmp.comp)||a.focusedCmp;if(!m&&!o){return true}if(c&&j.isWhitelisted(m)){return true}if(!m||m.is(":root")){l=j.getRootComponents()}else{o=o||m.up();if(o){l=o.getRefItems()}}if(l){n=m?Ext.Array.indexOf(l,m):-1;d=Ext.ComponentQuery.query(":"+h+"Focus("+n+")",l)[0];if(d&&m!==d){d.focus();return d}}},onComponentBlur:function(b,c){var a=this;if(a.focusedCmp===b){a.previousFocusedCmp=b;delete a.focusedCmp}if(a.focusFrame){a.focusFrame.hide()}},onComponentFocus:function(d,g){var c=this,a=c.focusChain,b;if(!d.isFocusable()){c.clearComponent(d);if(a[d.id]){return}b=d.up();if(b){a[d.id]=true;b.focus()}return}c.focusChain={};c.focusTask.delay(10,null,null,[d,d.getFocusEl()])},handleComponentFocus:function(l,h){var j=this,o,a,g,n,b,k,d,e,c,m,i;if(j.fireEvent("beforecomponentfocus",j,l,j.previousFocusedCmp)===false){j.clearComponent(l);return}j.focusedCmp=l;if(j.shouldShowFocusFrame(l)){o="."+j.focusFrameCls+"-";a=j.focusFrame;g=(h.dom?h:h.el).getBox();n=g.top;b=g.left;k=g.width;d=g.height;e=a.child(o+"top");c=a.child(o+"bottom");m=a.child(o+"left");i=a.child(o+"right");e.setWidth(k).setLocalXY(b,n);c.setWidth(k).setLocalXY(b,n+d-2);m.setHeight(d-2).setLocalXY(b,n+2);i.setHeight(d-2).setLocalXY(b+k-2,n+2);a.show()}j.fireEvent("componentfocus",j,l,j.previousFocusedCmp)},onComponentHide:function(e){var d=this,b=false,a=d.focusedCmp,c;if(a){b=e.hasFocus||(e.isContainer&&e.isAncestor(d.focusedCmp))}d.clearComponent(e);if(b&&(c=e.up(":focusable"))){c.focus()}else{d.focusEl.focus()}},onComponentDestroy:function(){},removeDOM:function(){var a=this;if(a.enabled||a.subscribers.length){return}Ext.destroy(a.focusFrame);delete a.focusEl;delete a.focusFrame},removeXTypeFromWhitelist:function(b){var a=this;if(Ext.isArray(b)){Ext.Array.forEach(b,a.removeXTypeFromWhitelist,a);return}Ext.Array.remove(a.whitelist,b)},setupSubscriberKeys:function(a,g){var e=this,d=a.getFocusEl(),c=g.scope,b={backspace:e.focusLast,enter:e.navigateIn,esc:e.navigateOut,scope:e},h=function(i){if(e.focusedCmp===a){return e.navigateSiblings(i,e,a)}else{return e.navigateSiblings(i)}};Ext.iterate(g,function(j,i){b[j]=function(l){var k=h(l);if(Ext.isFunction(i)&&i.call(c||a,l,k)===true){return true}return k}},e);return new Ext.util.KeyNav(d,b)},shouldShowFocusFrame:function(c){var b=this,a=b.options||{};if(!b.focusFrame||!c){return false}if(a.focusFrame){return true}if(b.focusData[c.id].focusFrame){return true}return false}});Ext.define("Ext.Img",{extend:Ext.Component,alias:["widget.image","widget.imagecomponent"],autoEl:"img",baseCls:Ext.baseCSSPrefix+"img",src:"",alt:"",title:"",imgCls:"",initComponent:function(){if(this.glyph){this.autoEl="div"}this.callParent()},getElConfig:function(){var e=this,b=e.callParent(),g=Ext._glyphFontFamily,d=e.glyph,a,c;if(e.autoEl=="img"){a=b}else{if(e.glyph){if(typeof d==="string"){c=d.split("@");d=c[0];g=c[1]}b.html="&#"+d+";";if(g){b.style="font-family:"+g}}else{b.cn=[a={tag:"img",id:e.id+"-img"}]}}if(a){if(e.imgCls){a.cls=(a.cls?a.cls+" ":"")+e.imgCls}a.src=e.src||Ext.BLANK_IMAGE_URL}if(e.alt){(a||b).alt=e.alt}if(e.title){(a||b).title=e.title}return b},onRender:function(){var b=this,a;b.callParent(arguments);a=b.el;b.imgEl=(b.autoEl=="img")?a:a.getById(b.id+"-img")},onDestroy:function(){Ext.destroy(this.imgEl);this.imgEl=null;this.callParent()},setSrc:function(c){var a=this,b=a.imgEl;a.src=c;if(b){b.dom.src=c||Ext.BLANK_IMAGE_URL}},setGlyph:function(c){var b=this,d=Ext._glyphFontFamily,a,e;if(c!=b.glyph){if(typeof c==="string"){a=c.split("@");c=a[0];d=a[1]}e=b.el.dom;e.innerHTML="&#"+c+";";if(d){e.style="font-family:"+d}}}});Ext.define("Ext.util.Bindable",{bindStore:function(b,c,a){a=a||"store";var d=this,e=d[a];if(!c&&e){d.onUnbindStore(e,c,a);if(b!==e&&e.autoDestroy){e.destroyStore()}else{d.unbindStoreListeners(e)}}if(b){b=Ext.data.StoreManager.lookup(b);d.bindStoreListeners(b);d.onBindStore(b,c,a)}d[a]=b||null;return d},getStore:function(){return this.store},unbindStoreListeners:function(a){var b=this.storeListeners;if(b){a.un(b)}},bindStoreListeners:function(a){var c=this,b=Ext.apply({},c.getStoreListeners(a));if(!b.scope){b.scope=c}c.storeListeners=b;a.on(b)},getStoreListeners:Ext.emptyFn,onUnbindStore:Ext.emptyFn,onBindStore:Ext.emptyFn});Ext.define("Ext.LoadMask",{extend:Ext.Component,alias:"widget.loadmask",mixins:{floating:Ext.util.Floating,bindable:Ext.util.Bindable},msg:"Loading...",msgCls:Ext.baseCSSPrefix+"mask-loading",maskCls:Ext.baseCSSPrefix+"mask",useMsg:true,useTargetEl:false,baseCls:Ext.baseCSSPrefix+"mask-msg",childEls:["msgEl","msgTextEl"],renderTpl:['
    ','
    ',"
    "],floating:{shadow:"frame"},focusOnToFront:false,bringParentToFront:false,constructor:function(b){var c=this,a;if(arguments.length===2){a=b;b=arguments[1]}else{a=b.target}if(!a.isComponent){a=Ext.get(a);this.isElement=true}c.ownerCt=a;if(!this.isElement){c.bindComponent(a)}c.callParent([b]);if(c.store){c.bindStore(c.store,true)}},bindComponent:function(a){var c=this,b={scope:this,resize:c.sizeMask,added:c.onComponentAdded,removed:c.onComponentRemoved};if(a.floating){b.move=c.sizeMask;c.activeOwner=a}else{if(a.ownerCt){c.onComponentAdded(a.ownerCt)}else{c.preventBringToFront=true}}c.mon(a,b);c.mon(c.hierarchyEventSource,{show:c.onContainerShow,hide:c.onContainerHide,expand:c.onContainerExpand,collapse:c.onContainerCollapse,scope:c})},onComponentAdded:function(a){var b=this;delete b.activeOwner;b.floatParent=a;if(!a.floating){a=a.up("[floating]")}if(a){b.activeOwner=a;b.mon(a,"move",b.sizeMask,b)}else{b.preventBringToFront=true}a=b.floatParent.ownerCt;if(b.rendered&&b.isVisible()&&a){b.floatOwner=a;b.mon(a,"afterlayout",b.sizeMask,b,{single:true})}},onComponentRemoved:function(a){var c=this,d=c.activeOwner,b=c.floatOwner;if(d){c.mun(d,"move",c.sizeMask,c)}if(b){c.mun(b,"afterlayout",c.sizeMask,c)}delete c.activeOwner;delete c.floatOwner},afterRender:function(){this.callParent(arguments);this.container=this.floatParent.getContentTarget()},onContainerShow:function(a){if(this.isActiveContainer(a)){this.onComponentShow()}},onContainerHide:function(a){if(this.isActiveContainer(a)){this.onComponentHide()}},onContainerExpand:function(a){if(this.isActiveContainer(a)){this.onComponentShow()}},onContainerCollapse:function(a){if(this.isActiveContainer(a)){this.onComponentHide()}},isActiveContainer:function(a){return this.isDescendantOf(a)},onComponentHide:function(){var a=this;if(a.rendered&&a.isVisible()){a.hide();a.showNext=true}},onComponentShow:function(){if(this.showNext){this.show()}delete this.showNext},sizeMask:function(){var a=this,b;if(a.rendered&&a.isVisible()){a.center();b=a.getMaskTarget();a.getMaskEl().show().setSize(b.getSize()).alignTo(b,"tl-tl")}},bindStore:function(a,b){var c=this;c.mixins.bindable.bindStore.apply(c,arguments);a=c.store;if(a&&a.isLoading()){c.onBeforeLoad()}},getStoreListeners:function(b){var d=this.onLoad,c=this.onBeforeLoad,a={cachemiss:c,cachefilled:d};if(!b.proxy.isSynchronous){a.beforeLoad=c;a.load=d;a.prefetch=d}return a},onDisable:function(){this.callParent(arguments);if(this.loading){this.onLoad()}},getOwner:function(){return this.ownerCt||this.floatParent},getMaskTarget:function(){var a=this.getOwner();return this.useTargetEl?a.getTargetEl():a.getEl()},onBeforeLoad:function(){var c=this,a=c.getOwner(),b;if(!c.disabled){c.loading=true;if(a.componentLayoutCounter){c.maybeShow()}else{b=a.afterComponentLayout;a.afterComponentLayout=function(){a.afterComponentLayout=b;b.apply(a,arguments);c.maybeShow()}}}},maybeShow:function(){var b=this,a=b.getOwner();if(!a.isVisible(true)){b.showNext=true}else{if(b.loading&&a.rendered){b.show()}}},getMaskEl:function(){var a=this;return a.maskEl||(a.maskEl=a.el.insertSibling({cls:a.maskCls,style:{zIndex:a.el.getStyle("zIndex")-2}},"before"))},onShow:function(){var b=this,a=b.msgEl;b.callParent(arguments);b.loading=true;if(b.useMsg){a.show();b.msgTextEl.update(b.msg)}else{a.parent().hide()}},hide:function(){if(this.isElement){this.ownerCt.unmask();this.fireEvent("hide",this);return}delete this.showNext;return this.callParent(arguments)},onHide:function(){this.callParent();this.getMaskEl().hide()},show:function(){if(this.isElement){this.ownerCt.mask(this.useMsg?this.msg:"",this.msgCls);this.fireEvent("show",this);return}return this.callParent(arguments)},afterShow:function(){this.callParent(arguments);this.sizeMask()},setZIndex:function(b){var c=this,a=c.activeOwner;if(a){b=parseInt(a.el.getStyle("zIndex"),10)+1}c.getMaskEl().setStyle("zIndex",b-1);return c.mixins.floating.setZIndex.apply(c,arguments)},onLoad:function(){this.loading=false;this.hide()},onDestroy:function(){var a=this;if(a.isElement){a.ownerCt.unmask()}Ext.destroy(a.maskEl);a.callParent()}});Ext.define("Ext.data.association.Association",{alternateClassName:"Ext.data.Association",primaryKey:"id",associationKeyFunction:null,defaultReaderType:"json",isAssociation:true,initialConfig:null,statics:{AUTO_ID:1000,create:function(a){if(Ext.isString(a)){a={type:a}}switch(a.type){case"belongsTo":return new Ext.data.association.BelongsTo(a);case"hasMany":return new Ext.data.association.HasMany(a);case"hasOne":return new Ext.data.association.HasOne(a);default:}return a}},constructor:function(d){Ext.apply(this,d);var h=this,g=Ext.ModelManager.types,j=d.ownerModel,a=d.associatedModel,e=g[j],i=g[a],b=d.associationKey,c;if(b){c=String(b).search(/[\[\.]/);if(c>=0){h.associationKeyFunction=Ext.functionFactory("obj","return obj"+(c>0?".":"")+b)}}h.initialConfig=d;h.ownerModel=e;h.associatedModel=i;Ext.applyIf(h,{ownerName:j,associatedName:a});h.associationId="association"+(++h.statics().AUTO_ID)},getReader:function(){var c=this,a=c.reader,b=c.associatedModel;if(a){if(Ext.isString(a)){a={type:a}}if(a.isReader){a.setModel(b)}else{Ext.applyIf(a,{model:b,type:c.defaultReaderType})}c.reader=Ext.createByAlias("reader."+a.type,a)}return c.reader||null}});Ext.define("Ext.ModelManager",{extend:Ext.AbstractManager,alternateClassName:"Ext.ModelMgr",singleton:true,typeName:"mtype",associationStack:[],registerType:function(c,b){var d=b.prototype,a;if(d&&d.isModel){a=b}else{if(!b.extend){b.extend="Ext.data.Model"}a=Ext.define(c,b)}this.types[c]=a;return a},onModelDefined:function(c){var a=this.associationStack,g=a.length,e=[],b,d,h;for(d=0;d','
    {text}
    ',"",'
    ','','
    ',"
    {text}
    ","
    ","
    ","
    "],componentLayout:"progressbar",initComponent:function(){this.callParent();this.addEvents("update")},initRenderData:function(){var a=this;return Ext.apply(a.callParent(),{internalText:!a.hasOwnProperty("textEl"),text:a.text||" ",percentage:a.value?a.value*100:0})},onRender:function(){var a=this;a.callParent(arguments);if(a.textEl){a.textEl=Ext.get(a.textEl);a.updateText(a.text)}else{a.textEl=a.el.select("."+a.baseCls+"-text")}},updateProgress:function(d,e,a){var c=this,b=c.value;c.value=d||0;if(e){c.updateText(e)}if(c.rendered&&!c.isDestroyed){if(a===true||(a!==false&&c.animate)){c.bar.stopAnimation();c.bar.animate(Ext.apply({from:{width:(b*100)+"%"},to:{width:(c.value*100)+"%"}},c.animate))}else{c.bar.setStyle("width",(c.value*100)+"%")}}c.fireEvent("update",c,c.value,e);return c},updateText:function(b){var a=this;a.text=b;if(a.rendered){a.textEl.update(a.text)}return a},applyText:function(a){this.updateText(a)},getText:function(){return this.text},wait:function(c){var b=this,a;if(!b.waitTimer){a=b;c=c||{};b.updateText(c.text);b.waitTimer=Ext.TaskManager.start({run:function(d){var e=c.increment||10;d-=1;b.updateProgress(((((d+e)%e)+1)*(100/e))*0.01,null,c.animate)},interval:c.interval||1000,duration:c.duration,onStop:function(){if(c.fn){c.fn.apply(c.scope||b)}b.reset()},scope:a})}return b},isWaiting:function(){return this.waitTimer!==null},reset:function(a){var b=this;b.updateProgress(0);b.clearTimer();if(a===true){b.hide()}return b},clearTimer:function(){var a=this;if(a.waitTimer){a.waitTimer.onStop=null;Ext.TaskManager.stop(a.waitTimer);a.waitTimer=null}},onDestroy:function(){var b=this,a=b.bar;b.clearTimer();if(b.rendered){if(b.textEl.isComposite){b.textEl.clear()}Ext.destroyMembers(b,"textEl","progressBar");if(a&&b.animate){a.stopAnimation()}}b.callParent()}});Ext.define("Ext.ShadowPool",{singleton:true,markup:(function(){return Ext.String.format('',Ext.baseCSSPrefix,Ext.isIE&&!Ext.supports.CSS3BoxShadow?"ie":"css")}()),shadows:[],pull:function(){var a=this.shadows.shift();if(!a){a=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,this.markup));a.autoBoxAdjust=false}return a},push:function(a){this.shadows.push(a)},reset:function(){var c=[].concat(this.shadows),b,a=c.length;for(b=0;b0;){p[d].hasListeners._incr_(m)}s=j[m]||(j[m]={});s=s[c]||(s[c]={});h=s[g.id]||(s[g.id]=[]);h.push(a)}}}}},match:function(c,a){var b=this.idProperty;if(b){return a==="*"||c[b]===a}return false},monitor:function(d){var b=this,a=d.isInstance?d:d.prototype,c=a.fireEventArgs;b.monitoredClasses.push(d);a.fireEventArgs=function(h,g){var e=c.apply(this,arguments);if(e!==false){e=b.dispatch(this,h,g)}return e}},unlisten:function(e){var b=this.bus,g,d,a,c;for(d in b){if(b.hasOwnProperty(d)&&(c=b[d])){for(a in c){g=c[a];delete g[e]}}}}});Ext.define("Ext.app.domain.Component",{extend:Ext.app.EventDomain,singleton:true,type:"component",constructor:function(){var a=this;a.callParent();a.monitor(Ext.Component)},match:function(b,a){return b.is(a)}});Ext.define("Ext.app.EventBus",{singleton:true,constructor:function(){var b=this,a=Ext.app.EventDomain.instances;b.callParent();b.domains=a;b.bus=a.component.bus},control:function(b,a){return this.domains.component.listen(b,a)},listen:function(d,b){var a=this.domains,c;for(c in d){if(d.hasOwnProperty(c)){a[c].listen(d[c],b)}}},unlisten:function(c){var a=Ext.app.EventDomain.instances,b;for(b in a){a[b].unlisten(c)}}});Ext.define("Ext.data.StoreManager",{extend:Ext.util.MixedCollection,alternateClassName:["Ext.StoreMgr","Ext.data.StoreMgr","Ext.StoreManager"],singleton:true,register:function(){for(var a=0,b;(b=arguments[a]);a++){this.add(b)}},unregister:function(){for(var a=0,b;(b=arguments[a]);a++){this.remove(this.lookup(b))}},lookup:function(c){if(Ext.isArray(c)){var b=["field1"],e=!Ext.isArray(c[0]),g=c,d,a;if(e){g=[];for(d=0,a=c.length;d',' ,__field{#} = fields.map["{name}"]\n',"",";\n","return function(dest, source, record) {\n",'','{% var fieldAccessExpression = this.createFieldAccessExpression(values, "__field" + xindex, "source");'," if (fieldAccessExpression) { %}",' value = {[ this.createFieldAccessExpression(values, "__field" + xindex, "source") ]};\n','',' dest["{name}"] = value === undefined ? __field{#}.convert(__field{#}.defaultValue, record) : __field{#}.convert(value, record);\n',''," if (value === undefined) {\n"," if (me.applyDefaults) {\n",'',' dest["{name}"] = __field{#}.convert(__field{#}.defaultValue, record);\n',"",' dest["{name}"] = __field{#}.defaultValue\n',""," };\n"," } else {\n",'',' dest["{name}"] = __field{#}.convert(value, record);\n',"",' dest["{name}"] = value;\n',""," };\n",""," if (value !== undefined) {\n",'',' dest["{name}"] = __field{#}.convert(value, record);\n',"",' dest["{name}"] = value;\n',""," }\n","","{% } else { %}",'','',' dest["{name}"] = __field{#}.convert(__field{#}.defaultValue, record);\n',"",' dest["{name}"] = __field{#}.defaultValue\n',"","","{% } %}","",'',' if (record && (internalId = {[ this.createFieldAccessExpression({mapping: values.clientIdProp}, null, "source") ]})) {\n',' record.{["internalId"]} = internalId;\n'," }\n","","};"],buildRecordDataExtractor:function(){var c=this,a=c.model.prototype,b={clientIdProp:a.clientIdProperty,fields:a.fields.items};c.recordDataExtractorTemplate.createFieldAccessExpression=c.accessExpressionFn;return Ext.functionFactory(c.recordDataExtractorTemplate.apply(b)).call(c)},destroyReader:function(){var a=this;delete a.proxy;delete a.model;delete a.convertRecordData;delete a.getId;delete a.getTotal;delete a.getSuccess;delete a.getMessage}},function(){var a=this.prototype;Ext.apply(a,{nullResultSet:new Ext.data.ResultSet({total:0,count:0,records:[],success:true,message:""}),recordDataExtractorTemplate:new Ext.XTemplate(a.recordDataExtractorTemplate)})});Ext.define("Ext.data.reader.Json",{extend:Ext.data.reader.Reader,alternateClassName:"Ext.data.JsonReader",alias:"reader.json",root:"",metaProperty:"metaData",useSimpleAccessors:false,readRecords:function(b){var a=this,c;if(a.getMeta){c=a.getMeta(b);if(c){a.onMetaChange(c)}}else{if(b.metaData){a.onMetaChange(b.metaData)}}a.jsonData=b;return a.callParent([b])},getResponseData:function(a){var d,b;try{d=Ext.decode(a.responseText);return this.readRecords(d)}catch(c){b=new Ext.data.ResultSet({total:0,count:0,records:[],success:false,message:c.message});this.fireEvent("exception",this,a,b);Ext.Logger.warn("Unable to parse the JSON returned by the server");return b}},buildExtractors:function(){var b=this,a=b.metaProperty;b.callParent(arguments);if(b.root){b.getRoot=b.createAccessor(b.root)}else{b.getRoot=Ext.identityFn}if(a){b.getMeta=b.createAccessor(a)}},extractData:function(a){var e=this.record,d=[],c,b;if(e){c=a.length;if(!c&&Ext.isObject(a)){c=1;a=[a]}for(b=0;b=0){return Ext.functionFactory("obj","return obj"+(b>0?".":"")+c)}}return function(d){return d[c]}}}()),createFieldAccessExpression:(function(){var a=/[\[\.]/;return function(o,d,e){var b=o.mapping,m=b||b===0,c=m?b:o.name,p,g;if(b===false){return}if(typeof c==="function"){p=d+".mapping("+e+", this)"}else{if(this.useSimpleAccessors===true||((g=String(c).search(a))<0)){if(!m||isNaN(c)){c='"'+c+'"'}p=e+"["+c+"]"}else{if(g===0){p=e+c}else{var j=c.split("."),l=j.length,k=1,n=e+"."+j[0],h=[n];for(;k1){c[k]=d.internalId}}else{if(this.writeRecordId){e=g.get(d.idProperty)[this.nameProperty]||d.idProperty;c[e]=d.getId()}}return c},writeValue:function(e,g,b){var c=g[this.nameProperty]||g.name,a=this.dateFormat||g.dateWriteFormat||g.dateFormat,d=b.get(g.name);if(g.serialize){e[c]=g.serialize(d,b)}else{if(g.type===Ext.data.Types.DATE&&a&&Ext.isDate(d)){e[c]=Ext.Date.format(d,a)}else{e[c]=d}}}});Ext.define("Ext.data.writer.Json",{extend:Ext.data.writer.Writer,alternateClassName:"Ext.data.JsonWriter",alias:"writer.json",root:undefined,encode:false,allowSingle:true,expandData:false,getExpandedData:function(d){var b=d.length,e=0,k,a,g,c,h,l=function(i,j){var m={};m[i]=j;return m};for(;e0){h=k[a];for(;c>0;c--){h=l(g[c],h)}k[g[0]]=k[g[0]]||{};Ext.Object.merge(k[g[0]],h);delete k[a]}}}}return d},writeRecords:function(b,c){var a=this.root;if(this.expandData){c=this.getExpandedData(c)}if(this.allowSingle&&c.length===1){c=c[0]}if(this.encode){if(a){b.params[a]=Ext.encode(c)}else{}}else{b.jsonData=b.jsonData||{};if(a){b.jsonData[a]=c}else{b.jsonData=c}}return b}});Ext.define("Ext.data.proxy.Proxy",{alias:"proxy.proxy",alternateClassName:["Ext.data.DataProxy","Ext.data.Proxy"],mixins:{observable:Ext.util.Observable},batchOrder:"create,update,destroy",batchActions:true,defaultReaderType:"json",defaultWriterType:"json",isProxy:true,constructor:function(a){var b=this;a=a||{};b.proxyConfig=a;b.mixins.observable.constructor.call(b,a);if(b.model!==undefined&&!(b.model instanceof Ext.data.Model)){b.setModel(b.model)}else{if(b.reader){b.setReader(b.reader)}if(b.writer){b.setWriter(b.writer)}}},setModel:function(a,b){var c=this;c.model=Ext.ModelManager.getModel(a);c.setReader(this.reader);c.setWriter(this.writer);if(b&&c.store){c.store.setModel(c.model)}},getModel:function(){return this.model},setReader:function(a){var c=this,b=true,d=c.reader;if(a===undefined||typeof a=="string"){a={type:a};b=false}if(a.isReader){a.setModel(c.model)}else{if(b){a=Ext.apply({},a)}Ext.applyIf(a,{proxy:c,model:c.model,type:c.defaultReaderType});a=Ext.createByAlias("reader."+a.type,a)}if(a!==d&&a.onMetaChange){a.onMetaChange=Ext.Function.createSequence(a.onMetaChange,this.onMetaChange,this)}c.reader=a;return c.reader},getReader:function(){return this.reader},onMetaChange:function(a){this.fireEvent("metachange",this,a)},setWriter:function(c){var b=this,a=true;if(c===undefined||typeof c=="string"){c={type:c};a=false}if(!c.isWriter){if(a){c=Ext.apply({},c)}Ext.applyIf(c,{model:b.model,type:b.defaultWriterType});c=Ext.createByAlias("writer."+c.type,c)}b.writer=c;return b.writer},getWriter:function(){return this.writer},create:Ext.emptyFn,read:Ext.emptyFn,update:Ext.emptyFn,destroy:Ext.emptyFn,batch:function(o,l){var k=this,j=k.batchActions,h,c,g,d,e,m,b,n,i;if(o.operations===undefined){o={operations:o,listeners:l}}if(o.batch){if(Ext.isDefined(o.batch.runOperation)){h=Ext.applyIf(o.batch,{proxy:k,listeners:{}})}}else{o.batch={proxy:k,listeners:o.listeners||{}}}if(!h){h=new Ext.data.Batch(o.batch)}h.on("complete",Ext.bind(k.onBatchComplete,k,[o],0));g=k.batchOrder.split(",");d=g.length;for(m=0;m1){if(j.action=="update"||a[0].clientIdProperty){l=new Ext.util.MixedCollection();l.addAll(n);for(h=a.length;h--;){b=a[h];e=l.findBy(j.matchClientRec,b);k=b.copyFrom(e);if(m){c.push(k)}}}else{for(d=0,g=a.length;d0){b.create=g;h=true}if(d.length>0){b.update=d;h=true}if(a.length>0){b.destroy=a;h=true}if(h&&e.fireEvent("beforesync",b)!==false){c=c||{};e.proxy.batch(Ext.apply(c,{operations:b,listeners:e.getBatchListeners()}))}return e},getBatchListeners:function(){var b=this,a={scope:b,exception:b.onBatchException};if(b.batchUpdateMode=="operation"){a.operationcomplete=b.onBatchOperationComplete}else{a.complete=b.onBatchComplete}return a},save:function(){return this.sync.apply(this,arguments)},load:function(b){var c=this,a;b=Ext.apply({action:"read",filters:c.filters.items,sorters:c.getSorters()},b);c.lastOptions=b;a=new Ext.data.Operation(b);if(c.fireEvent("beforeload",c,a)!==false){c.loading=true;c.proxy.read(a,c.onProxyLoad,c)}return c},reload:function(a){return this.load(Ext.apply(this.lastOptions,a))},afterEdit:function(a,e){var d=this,b,c;if(d.autoSync&&!d.autoSyncSuspended){for(b=e.length;b--;){if(a.fields.get(e[b]).persist){c=true;break}}if(c){d.sync()}}d.onUpdate(a,Ext.data.Model.EDIT,e);d.fireEvent("update",d,a,Ext.data.Model.EDIT,e)},afterReject:function(a){this.onUpdate(a,Ext.data.Model.REJECT,null);this.fireEvent("update",this,a,Ext.data.Model.REJECT,null)},afterCommit:function(a,b){if(!b){b=null}this.onUpdate(a,Ext.data.Model.COMMIT,b);this.fireEvent("update",this,a,Ext.data.Model.COMMIT,b)},onUpdate:Ext.emptyFn,onIdChanged:function(c,d,b,a){this.fireEvent("idchanged",this,c,d,b,a)},destroyStore:function(){var a=this;if(!a.isDestroyed){a.clearListeners();if(a.storeId){Ext.data.StoreManager.unregister(a)}a.clearData();a.data=a.tree=a.sorters=a.filters=a.groupers=null;if(a.reader){a.reader.destroyReader()}a.proxy=a.reader=a.writer=null;a.isDestroyed=true;if(a.implicitModel){Ext.destroy(a.model)}else{a.model=null}}},getState:function(){var e=this,c,a,b=!!e.groupers,g=[],h=[],d=[];if(b){e.groupers.each(function(i){g[g.length]=i.serialize();c=true})}if(e.sorters){e.sorters.each(function(i){if(b&&!e.groupers.contains(i)){h[h.length]=i.serialize();c=true}})}if(e.filters&&e.statefulFilters){e.filters.each(function(i){d[d.length]=i.serialize();c=true})}if(c){a={};if(g.length){a.groupers=g}if(h.length){a.sorters=h}if(d.length){a.filters=d}return a}},applyState:function(g){var e=this,c=!!e.sorters,b=!!e.groupers,a=!!e.filters,d;if(b&&g.groupers){e.groupers.clear();e.groupers.addAll(e.decodeGroupers(g.groupers))}if(c&&g.sorters){e.sorters.clear();e.sorters.addAll(e.decodeSorters(g.sorters))}if(a&&g.filters){e.filters.clear();e.filters.addAll(e.decodeFilters(g.filters))}if(c&&b){e.sorters.insert(0,e.groupers.getRange())}if(e.remoteSort||e.remoteGroup||e.remoteFilter){e.reload()}if(a&&e.filters.length&&!e.remoteFilter){e.filter();d=e.sortOnFilter}if(c&&e.sorters.length&&!e.remoteSort&&!d){e.sort()}},doSort:function(a){var b=this;if(b.remoteSort){b.load()}else{b.data.sortBy(a);b.fireEvent("datachanged",b);b.fireEvent("refresh",b)}b.fireEvent("sort",b,b.sorters.getRange())},clearData:Ext.emptyFn,getCount:Ext.emptyFn,getById:Ext.emptyFn,removeAll:Ext.emptyFn,isLoading:function(){return !!this.loading},suspendAutoSync:function(){this.autoSyncSuspended=true},resumeAutoSync:function(){this.autoSyncSuspended=false}});Ext.define("Ext.app.domain.Store",{extend:Ext.app.EventDomain,singleton:true,type:"store",idProperty:"storeId",constructor:function(){var a=this;a.callParent();a.monitor(Ext.data.AbstractStore)}});Ext.define("Ext.app.Controller",{mixins:{observable:Ext.util.Observable},statics:{strings:{model:{getter:"getModel",upper:"Model"},view:{getter:"getView",upper:"View"},controller:{getter:"getController",upper:"Controller"},store:{getter:"getStore",upper:"Store"}},controllerRegex:/^(.*)\.controller\./,createGetter:function(a,b){return function(){return this[a](b)}},getGetterName:function(c,a){var d="get",e=c.split("."),g=e.length,b;for(b=0;b0){a=c.substring(0,b);g=c.substring(b+1)+"."+a}else{if(c.indexOf(".")>0&&(Ext.ClassManager.isCreated(c)||Ext.Loader.isAClassNameWithAKnownPrefix(c))){g=c}else{if(d){g=d+"."+e+"."+c;a=c}else{g=c}}}return{absoluteName:g,shortName:a}}},application:null,onClassExtended:function(b,c,a){var d=a.onBeforeCreated;a.onBeforeCreated=function(m,h){var g=Ext.app.Controller,k=g.controllerRegex,n=[],l,e,n,j,i;j=m.prototype;l=Ext.getClassName(m);e=h.$namespace||Ext.app.getNamespace(l)||((i=k.exec(l))&&i[1]);if(e){j.$namespace=e}g.processDependencies(j,n,e,"model",h.models);g.processDependencies(j,n,e,"view",h.views);g.processDependencies(j,n,e,"store",h.stores);g.processDependencies(j,n,e,"controller",h.controllers);Ext.require(n,Ext.Function.pass(d,arguments,this))}},constructor:function(a){var b=this;b.mixins.observable.constructor.call(b,a);if(b.refs){b.ref(b.refs)}b.eventbus=Ext.app.EventBus;b.initAutoGetters()},initAutoGetters:function(){var b=this.self.prototype,c,a;for(c in b){a=b[c];if(a&&a["Ext.app.getter"]){a.call(this)}}},doInit:function(b){var a=this;if(!a._initialized){a.init(b);a._initialized=true}},init:Ext.emptyFn,onLaunch:Ext.emptyFn,ref:function(a){var g=this,b=0,e=a.length,h,d,c;a=Ext.Array.from(a);g.references=g.references||[];for(;b[hidden]");e=b.length;if(e!==c.lastHiddenCount){a.fireEvent("overflowchange",c.lastHiddenCount,e,b);c.lastHiddenCount=e}}},onRemove:Ext.emptyFn,getItem:function(a){return this.layout.owner.getComponent(a)},getOwnerType:function(a){var b;if(a.isToolbar){b="toolbar"}else{if(a.isTabBar){b="tabbar"}else{if(a.isMenu){b="menu"}else{b=a.getXType()}}}return b},getPrefixConfig:Ext.emptyFn,getSuffixConfig:Ext.emptyFn,getOverflowCls:function(){return""}});Ext.define("Ext.toolbar.Item",{extend:Ext.Component,alias:"widget.tbitem",alternateClassName:"Ext.Toolbar.Item",enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.define("Ext.toolbar.Separator",{extend:Ext.toolbar.Item,alias:"widget.tbseparator",alternateClassName:"Ext.Toolbar.Separator",baseCls:Ext.baseCSSPrefix+"toolbar-separator",focusable:false,border:true});Ext.define("Ext.button.Manager",{singleton:true,alternateClassName:"Ext.ButtonToggleManager",groups:{},buttonSelector:"."+Ext.baseCSSPrefix+"btn",init:function(){var a=this;if(a.initialized){return}Ext.getBody().on("keydown",a.onKeyDown,a);a.initialized=true},onKeyDown:function(c){var a=c.getKey(),b;if(a===c.SPACE||a===c.ENTER){b=c.getTarget(this.buttonSelector);if(b){Ext.getCmp(b.id).onClick(c)}}},toggleGroup:function(b,e){if(e){var d=this.groups[b.toggleGroup],c=d.length,a;for(a=0;a0){a.hideAll()}},a)},hideAll:function(){var c=this.active,e,b,a,d;if(c&&c.length>0){e=c.clone();b=e.items;d=b.length;for(a=0;a50&&d.length>0&&!g.getTarget(b.menuSelector)){if(Ext.isIE9m&&!Ext.getBody().contains(g.target)){c=false}if(c){b.hideAll()}}},register:function(b){var a=this;if(!a.active){a.init()}if(b.floating){a.menus[b.id]=b;b.on({beforehide:a.onBeforeHide,hide:a.onHide,beforeshow:a.onBeforeShow,show:a.onShow,scope:a})}},get:function(b){var a=this.menus;if(typeof b=="string"){if(!a){return null}return a[b]}else{if(b.isMenu){return b}else{if(Ext.isArray(b)){return new Ext.menu.Menu({items:b})}else{return Ext.ComponentManager.create(b,"menu")}}}},unregister:function(d){var a=this,b=a.menus,c=a.active;delete b[d.id];c.remove(d);d.un({beforehide:a.onBeforeHide,hide:a.onHide,beforeshow:a.onBeforeShow,show:a.onShow,scope:a})},registerCheckable:function(c){var a=this.groups,b=c.group;if(b){if(!a[b]){a[b]=[]}a[b].push(c)}},unregisterCheckable:function(c){var a=this.groups,b=c.group;if(b){Ext.Array.remove(a[b],c)}},onCheckChange:function(d,g){var a=this.groups,c=d.group,b=0,j,e,h;if(c&&g){j=a[c];e=j.length;for(;b/,beginLayout:function(c){var b=this,a=b.owner,d=a.text;b.callParent(arguments);c.btnWrapContext=c.getEl("btnWrap");c.btnElContext=c.getEl("btnEl");c.btnInnerElContext=c.getEl("btnInnerEl");c.btnIconElContext=c.getEl("btnIconEl");if(d&&b.htmlRE.test(d)){c.isHtmlText=true;a.btnInnerEl.setStyle("line-height","normal");a.btnInnerEl.setStyle("padding-top","")}},beginLayoutCycle:function(b){var a=this.owner,c=this.lastWidthModel;this.callParent(arguments);if(c&&!this.lastWidthModel.shrinkWrap&&b.widthModel.shrinkWrap){a.btnWrap.setStyle("height","");a.btnEl.setStyle("height","");a.btnInnerEl.setStyle("line-height","")}},calculate:function(d){var g=this,c=g.owner,h=d.btnElContext,e=d.btnInnerElContext,k=d.btnWrapContext,b,i,j,a;g.callParent(arguments);if(d.heightModel.shrinkWrap){j=c.btnEl.getHeight();if(d.isHtmlText){g.centerInnerEl(d,j);g.ieCenterIcon(d,j)}}else{b=d.getProp("height");if(b){i=b-d.getFrameInfo().height-d.getPaddingInfo().height;j=i;if((c.menu||c.split)&&c.arrowAlign==="bottom"){j-=k.getPaddingInfo().bottom}a=j;if((c.icon||c.iconCls||c.glyph)&&(c.iconAlign==="top"||c.iconAlign==="bottom")){a-=e.getPaddingInfo().height}k.setProp("height",i);h.setProp("height",j);if(d.isHtmlText){g.centerInnerEl(d,j)}else{e.setProp("line-height",a+"px")}g.ieCenterIcon(d,j)}else{g.done=false}}},centerInnerEl:function(e,d){var c=this,b=e.btnInnerElContext,a=c.owner.btnInnerEl.getHeight();if(e.heightModel.shrinkWrap&&(da){b.setProp("padding-top",Math.round((d-a)/2)+b.getPaddingInfo().top)}}},ieCenterIcon:function(c,b){var a=this.owner.iconAlign;if((Ext.isIEQuirks||Ext.isIE6)&&(a==="left"||a==="right")){c.btnIconElContext.setHeight(b)}},publishInnerWidth:function(b,a){if(this.owner.getFrameInfo().table){b.btnInnerElContext.setWidth(a-b.getFrameInfo().width-b.getPaddingInfo().width-b.btnWrapContext.getPaddingInfo().width)}}});Ext.define("Ext.util.TextMetrics",{statics:{shared:null,measure:function(a,d,e){var b=this,c=b.shared;if(!c){c=b.shared=new b(a,e)}c.bind(a);c.setFixedWidth(e||"auto");return c.getSize(d)},destroy:function(){var a=this;Ext.destroy(a.shared);a.shared=null}},constructor:function(a,c){var b=this.measure=Ext.getBody().createChild({cls:Ext.baseCSSPrefix+"textmetrics"});this.el=Ext.get(a);b.position("absolute");b.setLocalXY(-1000,-1000);b.hide();if(c){b.setWidth(c)}},getSize:function(c){var b=this.measure,a;b.update(c);a=b.getSize();b.update("");return a},bind:function(a){var b=this;b.el=Ext.get(a);b.measure.setStyle(b.el.getStyles("font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"))},setFixedWidth:function(a){this.measure.setWidth(a)},getWidth:function(a){this.measure.dom.style.width="auto";return this.getSize(a).width},getHeight:function(a){return this.getSize(a).height},destroy:function(){var a=this;a.measure.remove();delete a.el;delete a.measure}},function(){Ext.Element.addMethods({getTextWidth:function(c,b,a){return Ext.Number.constrain(Ext.util.TextMetrics.measure(this.dom,Ext.value(c,this.dom.innerHTML,true)).width,b||0,a||1000000)}})});Ext.define("Ext.button.Button",{alias:"widget.button",extend:Ext.Component,alternateClassName:"Ext.Button",isButton:true,componentLayout:"button",hidden:false,disabled:false,pressed:false,enableToggle:false,menuAlign:"tl-bl?",showEmptyMenu:false,textAlign:"center",type:"button",clickEvent:"click",preventDefault:true,handleMouseEvents:true,tooltipType:"qtip",baseCls:Ext.baseCSSPrefix+"btn",pressedCls:"pressed",overCls:"over",focusCls:"focus",menuActiveCls:"menu-active",hrefTarget:"_blank",border:true,childEls:["btnEl","btnWrap","btnInnerEl","btnIconEl"],renderTpl:['",'','',""],scale:"small",allowedScales:["small","medium","large"],iconAlign:"left",arrowAlign:"right",arrowCls:"arrow",maskOnDisable:false,shrinkWrap:3,frame:true,_triggerRegion:{},initComponent:function(){var a=this;a.addCls("x-unselectable");a.callParent(arguments);a.addEvents("click","toggle","mouseover","mouseout","menushow","menuhide","menutriggerover","menutriggerout","textchange","iconchange","glyphchange");if(a.menu){a.split=true;a.menu=Ext.menu.Manager.get(a.menu);a.menu.ownerButton=a}if(a.url){a.href=a.url}if(a.href&&!a.hasOwnProperty("preventDefault")){a.preventDefault=false}if(Ext.isString(a.toggleGroup)&&a.toggleGroup!==""){a.enableToggle=true}if(a.html&&!a.text){a.text=a.html;delete a.html}a.glyphCls=a.baseCls+"-glyph"},getActionEl:function(){return this.btnEl},getFocusEl:function(){return this.useElForFocus?this.el:this.btnEl},onFocus:function(b){var a=this;a.useElForFocus=true;a.callParent(arguments);a.useElForFocus=false},onBlur:function(a){this.useElForFocus=true;this.callParent(arguments);this.useElForFocus=false},onDisable:function(){this.useElForFocus=true;this.callParent(arguments);this.useElForFocus=false},setComponentCls:function(){var b=this,a=b.getComponentCls();if(!Ext.isEmpty(b.oldCls)){b.removeClsWithUI(b.oldCls);b.removeClsWithUI(b.pressedCls)}b.oldCls=a;b.addClsWithUI(a)},getComponentCls:function(){var b=this,a=[];if(b.iconCls||b.icon||b.glyph){if(b.text){a.push("icon-text-"+b.iconAlign)}else{a.push("icon")}}else{if(b.text){a.push("noicon")}}if(b.pressed){a.push(b.pressedCls)}return a},beforeRender:function(){var a=this;a.callParent();a.oldCls=a.getComponentCls();a.addClsWithUI(a.oldCls);Ext.applyIf(a.renderData,a.getTemplateArgs())},onRender:function(){var c=this,d,a,b;c.doc=Ext.getDoc();c.callParent(arguments);a=c.el;if(c.tooltip){c.setTooltip(c.tooltip,true)}if(c.handleMouseEvents){b={scope:c,mouseover:c.onMouseOver,mouseout:c.onMouseOut,mousedown:c.onMouseDown};if(c.split){b.mousemove=c.onMouseMove}}else{b={scope:c}}if(c.menu){c.mon(c.menu,{scope:c,show:c.onMenuShow,hide:c.onMenuHide});c.keyMap=new Ext.util.KeyMap({target:c.el,key:Ext.EventObject.DOWN,handler:c.onDownKey,scope:c})}if(c.repeat){c.mon(new Ext.util.ClickRepeater(a,Ext.isObject(c.repeat)?c.repeat:{}),"click",c.onRepeatClick,c)}else{if(b[c.clickEvent]){d=true}else{b[c.clickEvent]=c.onClick}}c.mon(a,b);if(d){c.mon(a,c.clickEvent,c.onClick,c)}Ext.button.Manager.register(c)},getTemplateArgs:function(){var c=this,b=c.glyph,d=Ext._glyphFontFamily,a;if(typeof b==="string"){a=b.split("@");b=a[0];d=a[1]}return{href:c.getHref(),hrefTarget:c.hrefTarget,type:c.type,innerCls:c.getInnerCls(),splitCls:c.getSplitCls(),iconUrl:c.icon,iconCls:c.iconCls,glyph:b,glyphCls:b?c.glyphCls:"",glyphFontFamily:d,text:c.text||" ",tabIndex:c.tabIndex==null?0:c.tabIndex}},setHref:function(a){this.href=a;this.btnEl.dom.href=this.getHref()},getHref:function(){var b=this,a=b.href;return a?Ext.urlAppend(a,Ext.Object.toQueryString(Ext.apply({},b.params,b.baseParams))):false},setParams:function(a){this.params=a;this.btnEl.dom.href=this.getHref()},getSplitCls:function(){var a=this;return a.split?(a.baseCls+"-"+a.arrowCls)+" "+(a.baseCls+"-"+a.arrowCls+"-"+a.arrowAlign):""},getInnerCls:function(){return this.textAlign?this.baseCls+"-inner-"+this.textAlign:""},setIcon:function(b){b=b||"";var c=this,a=c.btnIconEl,d=c.icon||"";c.icon=b;if(b!=d){if(a){a.setStyle("background-image",b?"url("+b+")":"");c.setComponentCls();if(c.didIconStateChange(d,b)){c.updateLayout()}}c.fireEvent("iconchange",c,d,b)}return c},setIconCls:function(b){b=b||"";var d=this,a=d.btnIconEl,c=d.iconCls||"";d.iconCls=b;if(c!=b){if(a){a.removeCls(c);a.addCls(b||"");d.setComponentCls();if(d.didIconStateChange(c,b)){d.updateLayout()}}d.fireEvent("iconchange",d,c,b)}return d},setGlyph:function(g){g=g||0;var e=this,b=e.btnIconEl,c=e.glyph,a,d;e.glyph=g;if(b){if(typeof g==="string"){d=g.split("@");g=d[0];a=d[1]||Ext._glyphFontFamily}if(!g){b.dom.innerHTML=""}else{if(c!=g){b.dom.innerHTML="&#"+g+";"}}if(a){b.setStyle("font-family",a)}}e.fireEvent("glyphchange",e,e.glyph,c);return e},setTooltip:function(c,a){var b=this;if(b.rendered){if(!a||!c){b.clearTip()}if(c){if(Ext.quickTipsActive&&Ext.isObject(c)){Ext.tip.QuickTipManager.register(Ext.apply({target:b.btnEl.id},c));b.tooltip=c}else{b.btnEl.dom.setAttribute(b.getTipAttr(),c)}}}else{b.tooltip=c}return b},setTextAlign:function(c){var b=this,a=b.btnEl;if(a){a.removeCls(b.baseCls+"-inner-"+b.textAlign);a.addCls(b.baseCls+"-inner-"+c)}b.textAlign=c;return b},getTipAttr:function(){return this.tooltipType=="qtip"?"data-qtip":"title"},getRefItems:function(a){var c=this.menu,b;if(c){b=c.getRefItems(a);b.unshift(c)}return b||[]},clearTip:function(){var b=this,a=b.btnEl;if(Ext.quickTipsActive&&Ext.isObject(b.tooltip)){Ext.tip.QuickTipManager.unregister(a)}else{a.dom.removeAttribute(b.getTipAttr())}},beforeDestroy:function(){var a=this;if(a.rendered){a.clearTip()}if(a.menu&&a.destroyMenu!==false){Ext.destroy(a.menu)}Ext.destroy(a.btnInnerEl,a.repeater);a.callParent()},onDestroy:function(){var a=this;if(a.rendered){a.doc.un("mouseover",a.monitorMouseOver,a);a.doc.un("mouseup",a.onMouseUp,a);delete a.doc;Ext.destroy(a.keyMap);delete a.keyMap}Ext.button.Manager.unregister(a);a.callParent()},setHandler:function(b,a){this.handler=b;this.scope=a;return this},setText:function(c){c=c||"";var b=this,a=b.text||"";if(c!=a){b.text=c;if(b.rendered){b.btnInnerEl.update(c||" ");b.setComponentCls();if(Ext.isStrict&&Ext.isIE8){b.el.repaint()}b.updateLayout()}b.fireEvent("textchange",b,a,c)}return b},didIconStateChange:function(a,c){var b=Ext.isEmpty(c);return Ext.isEmpty(a)?!b:b},getText:function(){return this.text},toggle:function(c,a){var b=this;c=c===undefined?!b.pressed:!!c;if(c!==b.pressed){if(b.rendered){b[c?"addClsWithUI":"removeClsWithUI"](b.pressedCls)}b.pressed=c;if(!a){b.fireEvent("toggle",b,c);Ext.callback(b.toggleHandler,b.scope||b,[b,c])}}return b},maybeShowMenu:function(){var a=this;if(a.menu&&!a.hasVisibleMenu()&&!a.ignoreNextClick){a.showMenu(true)}},showMenu:function(b){var a=this,c=a.menu;if(a.rendered){if(a.tooltip&&Ext.quickTipsActive&&a.getTipAttr()!="title"){Ext.tip.QuickTipManager.getQuickTip().cancelShow(a.btnEl)}if(c.isVisible()){c.hide()}if(!b||a.showEmptyMenu||c.items.getCount()>0){c.showBy(a.el,a.menuAlign,(Ext.isIEQuirks||Ext.isIE6)?[-2,-2]:undefined)}}return a},hideMenu:function(){if(this.hasVisibleMenu()){this.menu.hide()}return this},hasVisibleMenu:function(){var a=this.menu;return a&&a.rendered&&a.isVisible()},onRepeatClick:function(a,b){this.onClick(b)},onClick:function(b){var a=this;if(a.preventDefault||(a.disabled&&a.getHref())&&b){b.preventDefault()}if(b.type!=="keydown"&&b.button!==0){return}if(!a.disabled){a.doToggle();a.maybeShowMenu();a.fireHandler(b)}},fireHandler:function(c){var b=this,a=b.handler;if(b.fireEvent("click",b,c)!==false){if(a){a.call(b.scope||b,b,c)}b.blur()}},doToggle:function(){var a=this;if(a.enableToggle&&(a.allowDepress!==false||!a.pressed)){a.toggle()}},onMouseOver:function(b){var a=this;if(!a.disabled&&!b.within(a.el,true,true)){a.onMouseEnter(b)}},onMouseOut:function(b){var a=this;if(!b.within(a.el,true,true)){if(a.overMenuTrigger){a.onMenuTriggerOut(b)}a.onMouseLeave(b)}},onMouseMove:function(g){var c=this,b=c.el,d=c.overMenuTrigger,h,a;if(c.split){h=(c.arrowAlign==="right")?g.getX()-c.getX():g.getY()-b.getY();a=c.getTriggerRegion();if(h>a.begin&&h(None)',constructor:function(b){var a=this;a.callParent(arguments);a.triggerButtonCls=a.triggerButtonCls||Ext.baseCSSPrefix+"box-menu-after";a.menuItems=[]},beginLayout:function(a){this.callParent(arguments);this.clearOverflow(a)},beginLayoutCycle:function(b,a){this.callParent(arguments);if(!a){this.clearOverflow(b);this.layout.cacheChildItems(b)}},onRemove:function(a){Ext.Array.remove(this.menuItems,a)},getSuffixConfig:function(){var d=this,c=d.layout,a=c.owner,b=a.id;d.menu=new Ext.menu.Menu({listeners:{scope:d,beforeshow:d.beforeMenuShow}});d.menuTrigger=new Ext.button.Button({id:b+"-menu-trigger",cls:Ext.layout.container.Box.prototype.innerCls+" "+d.triggerButtonCls+" "+Ext.baseCSSPrefix+"toolbar-item",plain:a.usePlainButtons,ownerCt:a,ownerLayout:c,iconCls:Ext.baseCSSPrefix+d.getOwnerType(a)+"-more-icon",ui:a instanceof Ext.toolbar.Toolbar?"default-toolbar":"default",menu:d.menu,showEmptyMenu:true,getSplitCls:function(){return""}});return d.menuTrigger.getRenderTree()},getOverflowCls:function(){return Ext.baseCSSPrefix+this.layout.direction+"-box-overflow-body"},handleOverflow:function(d){var c=this,b=c.layout,g=b.names,e=d.state.boxPlan,a=[null,null];c.showTrigger(d);if(c.layout.direction!=="vertical"){a[g.heightIndex]=(e.maxSize-c.menuTrigger[g.getHeight]())/2;c.menuTrigger.setPosition.apply(c.menuTrigger,a)}return{reservedSpace:c.triggerTotalWidth}},captureChildElements:function(){var a=this,c=a.menuTrigger,b=a.layout.names;if(c.rendering){c.finishRender();a.triggerTotalWidth=c[b.getWidth]()+c.el.getMargin(b.parallelMargins)}},_asLayoutRoot:{isRoot:true},clearOverflow:function(h){var g=this,b=g.menuItems,e,c=0,d=b.length,a=g.layout.owner,j=g._asLayoutRoot;a.suspendLayouts();g.captureChildElements();g.hideTrigger();a.resumeLayouts();for(;cb){j=q.target;o.menuItems.push(j);j.hide()}}a.resumeLayouts()},hideTrigger:function(){var a=this.menuTrigger;if(a){a.hide()}},beforeMenuShow:function(j){var h=this,b=h.menuItems,d=0,a=b.length,g,e,c=function(k,i){return k.isXType("buttongroup")&&!(i instanceof Ext.toolbar.Separator)};j.suspendLayouts();h.clearMenu();j.removeAll();for(;d=this.getMaxScrollPosition()},scrollTo:function(a,b){var g=this,e=g.layout,d=g.getScrollPosition(),c=Ext.Number.constrain(a,0,g.getMaxScrollPosition());if(c!=d&&!g.scrolling){g.scrollPosition=NaN;if(b===undefined){b=g.animateScroll}e.innerCt.scrollTo(e.names.beforeX,c,b?g.getScrollAnim():false);if(b){g.scrolling=true}else{g.updateScrollButtons()}g.fireEvent("scroll",g,c,b?g.getScrollAnim():false)}},scrollToItem:function(j,b){var i=this,e=i.layout,c=e.owner,h=e.names,a,d,g;j=i.getItem(j);if(j!==undefined){if(j==c.items.first()){g=0}else{if(j===c.items.last()){g=i.getMaxScrollPosition()}else{a=i.getItemVisibility(j);if(!a.fullyVisible){d=j.getBox(false,true);g=d[h.x];if(a.hiddenEnd){g-=(i.layout.innerCt[h.getWidth]()-d[h.width])}}}}i.scrollTo(g,b)}},getItemVisibility:function(j){var h=this,b=h.getItem(j).getBox(true,true),c=h.layout,g=c.names,e=b[g.x],d=e+b[g.width],a=h.getScrollPosition(),i=a+c.innerCt[g.getWidth]();return{hiddenStart:ei,fullyVisible:e>a&&d=a.x&&b.right<=a.right&&b.y>=a.y&&b.bottom<=a.bottom)},intersect:function(h){var g=this,d=Math.max(g.y,h.y),e=Math.min(g.right,h.right),a=Math.min(g.bottom,h.bottom),c=Math.max(g.x,h.x);if(a>d&&e>c){return new this.self(d,e,a,c)}else{return false}},union:function(h){var g=this,d=Math.min(g.y,h.y),e=Math.max(g.right,h.right),a=Math.max(g.bottom,h.bottom),c=Math.min(g.x,h.x);return new this.self(d,e,a,c)},constrainTo:function(b){var a=this,c=Ext.Number.constrain;a.top=a.y=c(a.top,b.y,b.bottom);a.bottom=c(a.bottom,b.y,b.bottom);a.left=a.x=c(a.left,b.x,b.right);a.right=c(a.right,b.x,b.right);return a},adjust:function(d,g,a,c){var e=this;e.top=e.y+=d;e.left=e.x+=c;e.right+=g;e.bottom+=a;return e},getOutOfBoundOffset:function(a,b){if(!Ext.isObject(a)){if(a=="x"){return this.getOutOfBoundOffsetX(b)}else{return this.getOutOfBoundOffsetY(b)}}else{b=a;var c=new Ext.util.Offset();c.x=this.getOutOfBoundOffsetX(b.x);c.y=this.getOutOfBoundOffsetY(b.y);return c}},getOutOfBoundOffsetX:function(a){if(a<=this.x){return this.x-a}else{if(a>=this.right){return this.right-a}}return 0},getOutOfBoundOffsetY:function(a){if(a<=this.y){return this.y-a}else{if(a>=this.bottom){return this.bottom-a}}return 0},isOutOfBound:function(a,b){if(!Ext.isObject(a)){if(a=="x"){return this.isOutOfBoundX(b)}else{return this.isOutOfBoundY(b)}}else{b=a;return(this.isOutOfBoundX(b.x)||this.isOutOfBoundY(b.y))}},isOutOfBoundX:function(a){return(athis.right)},isOutOfBoundY:function(a){return(athis.bottom)},restrict:function(b,d,a){if(Ext.isObject(b)){var c;a=d;d=b;if(d.copy){c=d.copy()}else{c={x:d.x,y:d.y}}c.x=this.restrictX(d.x,a);c.y=this.restrictY(d.y,a);return c}else{if(b=="x"){return this.restrictX(d,a)}else{return this.restrictY(d,a)}}},restrictX:function(b,a){if(!a){a=1}if(b<=this.x){b-=(b-this.x)*a}else{if(b>=this.right){b-=(b-this.right)*a}}return b},restrictY:function(b,a){if(!a){a=1}if(b<=this.y){b-=(b-this.y)*a}else{if(b>=this.bottom){b-=(b-this.bottom)*a}}return b},getSize:function(){return{width:this.right-this.x,height:this.bottom-this.y}},copy:function(){return new this.self(this.y,this.right,this.bottom,this.x)},copyFrom:function(b){var a=this;a.top=a.y=a[1]=b.y;a.right=b.right;a.bottom=b.bottom;a.left=a.x=a[0]=b.x;return this},toString:function(){return"Region["+this.top+","+this.right+","+this.bottom+","+this.left+"]"},translateBy:function(a,c){if(arguments.length==1){c=a.y;a=a.x}var b=this;b.top=b.y+=c;b.right+=a;b.bottom+=c;b.left=b.x+=a;return b},round:function(){var a=this;a.top=a.y=Math.round(a.y);a.right=Math.round(a.right);a.bottom=Math.round(a.bottom);a.left=a.x=Math.round(a.x);return a},equals:function(a){return(this.top==a.top&&this.right==a.right&&this.bottom==a.bottom&&this.left==a.left)}});Ext.define("Ext.dd.DragDropManager",{singleton:true,alternateClassName:["Ext.dd.DragDropMgr","Ext.dd.DDM"],ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,init:function(){this.initialized=true},POINT:0,INTERSECT:1,mode:0,notifyOccluded:false,dragCls:Ext.baseCSSPrefix+"dd-drag-current",_execOnAll:function(c,b){var d,a,e;for(d in this.ids){for(a in this.ids[d]){e=this.ids[d][a];if(!this.isTypeOfDD(e)){continue}e[c].apply(e,b)}}},_onLoad:function(){this.init();var a=Ext.EventManager;a.on(document,"mouseup",this.handleMouseUp,this,true);a.on(document,"mousemove",this.handleMouseMove,this,true);a.on(window,"unload",this._onUnload,this,true);a.on(window,"resize",this._onResize,this,true)},_onResize:function(a){this._execOnAll("resetConstraints",[])},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(b,a){if(!this.initialized){this.init()}if(!this.ids[a]){this.ids[a]={}}this.ids[a][b.id]=b},removeDDFromGroup:function(c,a){if(!this.ids[a]){this.ids[a]={}}var b=this.ids[a];if(b&&b[c.id]){delete b[c.id]}},_remove:function(b){for(var a in b.groups){if(a&&this.ids[a]&&this.ids[a][b.id]){delete this.ids[a][b.id]}}delete this.handleIds[b.id]},regHandle:function(b,a){if(!this.handleIds[b]){this.handleIds[b]={}}this.handleIds[b][a]=a},isDragDrop:function(a){return(this.getDDById(a))?true:false},getRelated:function(g,b){var e=[],d,c,a;for(d in g.groups){for(c in this.ids[d]){a=this.ids[d][c];if(!this.isTypeOfDD(a)){continue}if(!b||a.isTarget){e[e.length]=a}}}return e},isLegalTarget:function(e,d){var b=this.getRelated(e,true),c,a;for(c=0,a=b.length;cc.clickPixelThresh||a>c.clickPixelThresh){c.startDrag(c.startX,c.startY)}}if(c.dragThreshMet){d.b4Drag(g);d.onDrag(g);if(!d.moveOnly){c.fireEvents(g,false)}}c.stopEvent(g);return true},fireEvents:function(u,m){var w=this,g=w.dragCurrent,c,o,s=u.getPoint(),d,l,n=[],h=[],k=[],a=[],v=[],t=[],j,b,q,r,p;if(!g||g.isLocked()){return}if(!w.notifyOccluded&&(!Ext.supports.PointerEvents||Ext.isIE10m||Ext.isOpera)&&!(g.deltaX<0||g.deltaY<0)){c=g.getDragEl();o=c.style.top;c.style.top="-10000px";j=u.getXY();u.target=document.elementFromPoint(j[0],j[1]);c.style.top=o}for(q in w.dragOvers){d=w.dragOvers[q];if(!w.isTypeOfDD(d)){continue}if(w.notifyOccluded){if(!this.isOverTarget(s,d,w.mode)){k.push(d)}}else{if(!u.within(d.getEl())){k.push(d)}}h[q]=true;delete w.dragOvers[q]}for(p in g.groups){if("string"!=typeof p){continue}for(q in w.ids[p]){d=w.ids[p][q];if(w.isTypeOfDD(d)&&(l=d.getEl())&&(d.isTarget)&&(!d.isLocked())&&(Ext.fly(l).isVisible(true))&&((d!=g)||(g.ignoreSelf===false))){if(w.notifyOccluded){if((d.zIndex=w.getZIndex(l))!==-1){b=true}n.push(d)}else{if(u.within(d.getEl())){n.push(d);break}}}}}if(b){Ext.Array.sort(n,w.byZIndex)}for(q=0,r=n.length;q','
    ',"{%this.renderBody(out, values)%}","
    ","","{%if (oh.getSuffixConfig!==Ext.emptyFn) {","if(oc=oh.getSuffixConfig())dh.generateMarkup(oc, out)","}%}",{disableFormats:true,definitions:"var dh=Ext.DomHelper;"}],constructor:function(a){var c=this,b;c.callParent(arguments);c.flexSortFn=Ext.Function.bind(c.flexSort,c);c.initOverflowHandler();b=typeof c.padding;if(b=="string"||b=="number"){c.padding=Ext.util.Format.parseBox(c.padding);c.padding.height=c.padding.top+c.padding.bottom;c.padding.width=c.padding.left+c.padding.right}},_percentageRe:/^\s*(\d+(?:\.\d*)?)\s*[%]\s*$/,getItemSizePolicy:function(o,p){var k=this,i=k.sizePolicy,h=k.align,g=o.flex,m=h,j=k.names,b=o[j.width],n=o[j.height],d=k._percentageRe,c=d.test(b),e=(h=="stretch"),a=(h=="stretchmax"),l=k.constrainAlign;if(!p&&(e||g||c||(l&&!a))){p=k.owner.getSizeModel()}if(e){if(!d.test(n)&&p[j.height].shrinkWrap){m="stretchmax"}}else{if(!a){if(d.test(n)){m="stretch"}else{if(l&&!p[j.height].shrinkWrap){m="stretchmax"}else{m=""}}}}if(g||c){if(!p[j.width].shrinkWrap){i=i.flex}}return i[m]},flexSort:function(m,l){var j=this.names.maxWidth,e=this.names.minWidth,k=Infinity,i=m.target,p=l.target,q=0,c,n,h,d,o,g;h=i[j]||k;d=p[j]||k;c=i[e]||0;n=p[e]||0;o=isFinite(c)||isFinite(n);g=isFinite(h)||isFinite(d);if(o||g){if(g){q=h-d}if(q===0&&o){q=n-c}}return q},isItemBoxParent:function(a){return true},isItemShrinkWrap:function(a){return true},roundFlex:function(a){return Math.ceil(a)},beginCollapse:function(b){var a=this;if(a.direction==="vertical"&&b.collapsedVertical()){b.collapseMemento.capture(["flex"]);delete b.flex}else{if(a.direction==="horizontal"&&b.collapsedHorizontal()){b.collapseMemento.capture(["flex"]);delete b.flex}}},beginExpand:function(a){a.collapseMemento.restore(["flex"])},beginLayout:function(d){var c=this,a=c.owner,g=a.stretchMaxPartner,b=c.innerCt.dom.style,e=c.names;d.boxNames=e;c.overflowHandler.beginLayout(d);if(typeof g==="string"){g=Ext.getCmp(g)||a.query(g)[0]}d.stretchMaxPartner=g&&d.context.getCmp(g);c.callParent(arguments);d.innerCtContext=d.getEl("innerCt",c);c.scrollParallel=a.scrollFlags[e.x];c.scrollPerpendicular=a.scrollFlags[e.y];if(c.scrollParallel){c.scrollPos=a.getTargetEl().dom[e.scrollLeft]}b.width="";b.height=""},beginLayoutCycle:function(e,a){var d=this,h=d.align,g=e.boxNames,b=d.pack,c=g.heightModel;d.overflowHandler.beginLayoutCycle(e,a);d.callParent(arguments);e.parallelSizeModel=e[g.widthModel];e.perpendicularSizeModel=e[c];e.boxOptions={align:h={stretch:h=="stretch",stretchmax:h=="stretchmax",center:h==g.center,bottom:h==g.afterY},pack:b={center:b=="center",end:b=="end"}};if(h.stretch&&e.perpendicularSizeModel.shrinkWrap){h.stretchmax=true;h.stretch=false}h.nostretch=!(h.stretch||h.stretchmax);if(e.parallelSizeModel.shrinkWrap){b.center=b.end=false}d.cacheFlexes(e);d.targetEl.setWidth(20000)},cacheFlexes:function(k){var u=this,l=k.boxNames,a=l.widthModel,d=l.heightModel,c=k.boxOptions.align.nostretch,o=0,b=k.childItems,q=b.length,s=[],m=0,j=l.minWidth,g=u._percentageRe,r=0,t=0,e,n,p,h;while(q--){n=b[q];e=n.target;if(n[a].calculated){n.flex=p=e.flex;if(p){o+=p;s.push(n);m+=e[j]||0}else{h=g.exec(e[l.width]);n.percentageParallel=parseFloat(h[1])/100;++r}}if(c&&n[d].calculated){h=g.exec(e[l.height]);n.percentagePerpendicular=parseFloat(h[1])/100;++t}}k.flexedItems=s;k.flexedMinSize=m;k.totalFlex=o;k.percentageWidths=r;k.percentageHeights=t;Ext.Array.sort(s,u.flexSortFn)},calculate:function(e){var c=this,b=c.getContainerSize(e),h=e.boxNames,d=e.state,g=d.boxPlan||(d.boxPlan={}),a=e.targetContext;g.targetSize=b;if(!e.parallelSizeModel.shrinkWrap&&!b[h.gotWidth]){c.done=false;return}if(!d.parallelDone){d.parallelDone=c.calculateParallel(e,h,g)}if(!d.perpendicularDone){d.perpendicularDone=c.calculatePerpendicular(e,h,g)}if(d.parallelDone&&d.perpendicularDone){if(c.owner.dock&&(Ext.isIE7m||Ext.isIEQuirks)&&!c.owner.width&&!c.horizontal){g.isIEVerticalDock=true;g.calculatedWidth=g.maxSize+e.getPaddingInfo().width+e.getFrameInfo().width;if(a!==e){g.calculatedWidth+=a.getPaddingInfo().width}}c.publishInnerCtSize(e,c.reserveOffset?c.availableSpaceOffset:0);if(c.done&&(e.childItems.length>1||e.stretchMaxPartner)&&e.boxOptions.align.stretchmax&&!d.stretchMaxDone){c.calculateStretchMax(e,h,g);d.stretchMaxDone=true}c.overflowHandler.calculate(e)}else{c.done=false}},calculateParallel:function(k,n,b){var F=this,z=n.width,a=k.childItems,s=n.beforeX,d=n.afterX,q=n.setWidth,A=a.length,x=k.flexedItems,r=x.length,v=k.boxOptions.pack,m=F.padding,h=b.targetSize[z],B=0,e=m[s],E=e+m[d]+F.scrollOffset+(F.reserveOffset?F.availableSpaceOffset:0),w=Ext.getScrollbarSize()[n.width],u,l,g,y,o,t,D,p,C,c,j;if(w&&F.scrollPerpendicular&&k.parallelSizeModel.shrinkWrap&&!k.boxOptions.align.stretch&&!k.perpendicularSizeModel.shrinkWrap){if(!k.state.perpendicularDone){return false}C=true}for(u=0;ub.targetSize[n.height])){p+=w;k[n.hasOverflowY]=true;k.target.componentLayout[n.setWidthInDom]=true;k[n.invalidateScrollY]=Ext.isStrict&&Ext.isIE8}k[n.setContentWidth](p);return true},calculatePerpendicular:function(u,K,z){var t=this,d=u.perpendicularSizeModel.shrinkWrap,b=z.targetSize,j=u.childItems,y=j.length,m=Math.max,l=K.height,n=K.setHeight,h=K.beforeY,s=K.y,H=t.padding,k=H[h],o=b[l]-k-H[K.afterY],E=u.boxOptions.align,p=E.stretch,q=E.stretchmax,N=E.center,M=E.bottom,G=t.constrainAlign,F=0,B=0,D=t.onBeforeConstrainInvalidateChild,A=t.onAfterConstrainInvalidateChild,a=Ext.getScrollbarSize().height,x,I,C,v,w,c,r,e,L,J,g;if(p||((N||M)&&!d)){if(isNaN(o)){return false}}if(t.scrollParallel&&z.tooNarrow){if(d){J=true}else{o-=a;z.targetSize[l]-=a}}if(p){c=o}else{for(I=0;Io){r.invalidate({before:D,after:A,layout:t,childHeight:o,names:K});u.state.parallelDone=false}if(isNaN(F=m(F,C+v,r.target[K.minHeight]||0))){return false}}if(J){F+=a;u[K.hasOverflowX]=true;u.target.componentLayout[K.setHeightInDom]=true;u[K.invalidateScrollX]=Ext.isStrict&&Ext.isIE8}e=u.stretchMaxPartner;if(e){u.setProp("maxChildHeight",F);L=e.childItems;if(L&&L.length){F=m(F,e.getProp("maxChildHeight"));if(isNaN(F)){return false}}}u[K.setContentHeight](F+t.padding[l]+u.targetContext.getPaddingInfo()[l]);if(J){F-=a}z.maxSize=F;if(q){c=F}else{if(N||M||B){if(G){c=d?F:o}else{c=d?F:m(o,F)}c-=u.innerCtContext.getBorderInfo()[l]}}}for(I=0;I0){x=k+Math[t.alignRoundingMethod](w/2)}}else{if(M){x=m(0,c-x-r.props[l])}}}r.setProp(s,x)}return true},onBeforeConstrainInvalidateChild:function(b,a){var c=a.names.heightModel;if(!b[c].constrainedMin){b[c]=Ext.layout.SizeModel.calculated}},onAfterConstrainInvalidateChild:function(b,a){var c=a.names;b.setProp(c.beforeY,0);if(b[c.heightModel].calculated){b[c.setHeight](a.childHeight)}},calculateStretchMax:function(c,k,m){var l=this,h=k.height,n=k.width,g=c.childItems,a=g.length,p=m.maxSize,o=l.onBeforeStretchMaxInvalidateChild,e=l.onAfterStretchMaxInvalidateChild,q,j,d,b;for(d=0;d":{xtype:"tbfill",height:0}},1:{"->":{xtype:"tbfill",width:0}}}},initComponent:function(){var a=this;if(!a.layout&&a.enableOverflow){a.layout={overflowHandler:"Menu"}}if(a.dock==="right"||a.dock==="left"){a.vertical=true}a.layout=Ext.applyIf(Ext.isString(a.layout)?{type:a.layout}:a.layout||{},{type:a.vertical?"vbox":"hbox",align:a.vertical?"stretchmax":"middle"});if(a.vertical){a.addClsWithUI("vertical")}if(a.ui==="footer"){a.ignoreBorderManagement=true}a.callParent();a.addEvents("overflowchange")},getRefItems:function(a){var e=this,b=e.callParent(arguments),d=e.layout,c;if(a&&e.enableOverflow){c=d.overflowHandler;if(c&&c.menu){b=b.concat(c.menu.getRefItems(a))}}return b},lookupComponent:function(e){var d=arguments;if(typeof e=="string"){var b=Ext.toolbar.Toolbar,a=b.shortcutsHV[this.vertical?1:0][e]||b.shortcuts[e];if(typeof a=="string"){e={xtype:a}}else{if(a){e=Ext.apply({},a)}else{e={xtype:"tbtext",text:e}}}this.applyDefaults(e);d=[e]}return this.callParent(d)},applyDefaults:function(a){if(!Ext.isString(a)){a=this.callParent(arguments)}return a},trackMenu:function(c,a){if(this.trackMenus&&c.menu){var d=a?"mun":"mon",b=this;b[d](c,"mouseover",b.onButtonOver,b);b[d](c,"menushow",b.onButtonMenuShow,b);b[d](c,"menuhide",b.onButtonMenuHide,b)}},onBeforeAdd:function(b){var c=this,a=b.isButton;if(a&&c.defaultButtonUI&&b.ui==="default"&&!b.hasOwnProperty("ui")){b.ui=c.defaultButtonUI}else{if((a||b.isFormField)&&c.ui!=="footer"){b.ui=b.ui+"-toolbar"}}if(b instanceof Ext.toolbar.Separator){b.setUI((c.vertical)?"vertical":"horizontal")}c.callParent(arguments)},onAdd:function(a){this.callParent(arguments);this.trackMenu(a)},onRemove:function(a){this.callParent(arguments);this.trackMenu(a,true)},getChildItemsToDisable:function(){return this.items.getRange()},onButtonOver:function(a){if(this.activeMenuBtn&&this.activeMenuBtn!=a){this.activeMenuBtn.hideMenu();a.showMenu();this.activeMenuBtn=a}},onButtonMenuShow:function(a){this.activeMenuBtn=a},onButtonMenuHide:function(a){delete this.activeMenuBtn}});Ext.define("Ext.layout.component.Dock",{extend:Ext.layout.component.Component,alias:"layout.dock",alternateClassName:"Ext.layout.component.AbstractDock",type:"dock",horzAxisProps:{name:"horz",oppositeName:"vert",dockBegin:"left",dockEnd:"right",horizontal:true,marginBegin:"margin-left",maxSize:"maxWidth",minSize:"minWidth",pos:"x",setSize:"setWidth",shrinkWrapDock:"shrinkWrapDockWidth",size:"width",sizeModel:"widthModel"},vertAxisProps:{name:"vert",oppositeName:"horz",dockBegin:"top",dockEnd:"bottom",horizontal:false,marginBegin:"margin-top",maxSize:"maxHeight",minSize:"minHeight",pos:"y",setSize:"setHeight",shrinkWrapDock:"shrinkWrapDockHeight",size:"height",sizeModel:"heightModel"},initializedBorders:-1,horizontalCollapsePolicy:{width:true,x:true},verticalCollapsePolicy:{height:true,y:true},finishRender:function(){var b=this,c,a;b.callParent();c=b.getRenderTarget();a=b.getDockedItems();b.finishRenderItems(c,a)},isItemBoxParent:function(a){return true},isItemShrinkWrap:function(a){return true},noBorderClasses:[Ext.baseCSSPrefix+"docked-noborder-top",Ext.baseCSSPrefix+"docked-noborder-right",Ext.baseCSSPrefix+"docked-noborder-bottom",Ext.baseCSSPrefix+"docked-noborder-left"],noBorderClassesSides:{top:Ext.baseCSSPrefix+"docked-noborder-top",right:Ext.baseCSSPrefix+"docked-noborder-right",bottom:Ext.baseCSSPrefix+"docked-noborder-bottom",left:Ext.baseCSSPrefix+"docked-noborder-left"},borderWidthProps:{top:"border-top-width",right:"border-right-width",bottom:"border-bottom-width",left:"border-left-width"},handleItemBorders:function(){var n=this,a=n.owner,m,r,j=n.lastDockedItems,h=n.borders,b=a.dockedItems.generation,c=n.noBorderClassesSides,o=n.borderWidthProps,g,l,q,p,k,d,e=n.collapsed;if(n.initializedBorders==b||(a.border&&!a.manageBodyBorders)){return}n.initializedBorders=b;n.collapsed=false;n.lastDockedItems=r=n.getLayoutItems();n.collapsed=e;m={top:[],right:[],bottom:[],left:[]};for(g=0,l=r.length;gd){h=r.constrainedMax;n=d}else{if(jd){g=r.constrainedMax;m=d}else{if(j':"",'
    {bodyCls}',' {baseCls}-body-{ui}',' {parent.baseCls}-body-{parent.ui}-{.}','{childElCls}"',' style="{bodyStyle}">',"{%this.renderContainer(out,values);%}","
    ","{% this.renderDockedItems(out,values,1); %}"],bodyPosProps:{x:"x",y:"y"},border:true,emptyArray:[],initComponent:function(){this.initBorderProps();this.callParent()},initBorderProps:function(){var a=this;if(a.frame&&a.border&&a.bodyBorder===undefined){a.bodyBorder=false}if(a.frame&&a.border&&(a.bodyBorder===false||a.bodyBorder===0)){a.manageBodyBorders=true}},beforeDestroy:function(){this.destroyDockedItems();this.callParent()},initItems:function(){this.callParent();this.initDockingItems()},initRenderData:function(){var a=this,b=a.callParent();a.initBodyStyles();a.protoBody.writeTo(b);delete a.protoBody;return b},getComponent:function(a){var b=this.callParent(arguments);if(b===undefined&&!Ext.isNumber(a)){b=this.getDockedComponent(a)}return b},getProtoBody:function(){var b=this,a=b.protoBody;if(!a){b.protoBody=a=new Ext.util.ProtoElement({cls:b.bodyCls,style:b.bodyStyle,clsProp:"bodyCls",styleProp:"bodyStyle",styleIsText:true})}return a},initBodyStyles:function(){var b=this,a=b.getProtoBody();if(b.bodyPadding!==undefined){if(b.layout.managePadding){a.setStyle("padding",0)}else{a.setStyle("padding",this.unitizeBox((b.bodyPadding===true)?5:b.bodyPadding))}}b.initBodyBorder()},initBodyBorder:function(){var a=this;if(a.frame&&a.bodyBorder){if(!Ext.isNumber(a.bodyBorder)){a.bodyBorder=1}a.getProtoBody().setStyle("border-width",this.unitizeBox(a.bodyBorder))}},getCollapsedDockedItems:function(){var a=this;return a.header===false||a.collapseMode=="placeholder"?a.emptyArray:[a.getReExpander()]},setBodyStyle:function(b,d){var c=this,a=c.rendered?c.body:c.getProtoBody();if(Ext.isFunction(b)){b=b()}if(arguments.length==1){if(Ext.isString(b)){b=Ext.Element.parseStyles(b)}a.setStyle(b)}else{a.setStyle(b,d)}return c},addBodyCls:function(b){var c=this,a=c.rendered?c.body:c.getProtoBody();a.addCls(b);return c},removeBodyCls:function(b){var c=this,a=c.rendered?c.body:c.getProtoBody();a.removeCls(b);return c},addUIClsToElement:function(b){var c=this,a=c.callParent(arguments);c.addBodyCls([Ext.baseCSSPrefix+b,c.baseCls+"-body-"+b,c.baseCls+"-body-"+c.ui+"-"+b]);return a},removeUIClsFromElement:function(b){var c=this,a=c.callParent(arguments);c.removeBodyCls([Ext.baseCSSPrefix+b,c.baseCls+"-body-"+b,c.baseCls+"-body-"+c.ui+"-"+b]);return a},addUIToElement:function(){var a=this;a.callParent(arguments);a.addBodyCls(a.baseCls+"-body-"+a.ui)},removeUIFromElement:function(){var a=this;a.callParent(arguments);a.removeBodyCls(a.baseCls+"-body-"+a.ui)},getTargetEl:function(){return this.body},applyTargetCls:function(a){this.getProtoBody().addCls(a)},getRefItems:function(a){var b=this.callParent(arguments);return this.getDockingRefItems(a,b)},setupRenderTpl:function(a){this.callParent(arguments);this.setupDockingRenderTpl(a)}});Ext.define("Ext.panel.Header",{extend:Ext.container.Container,alias:"widget.header",isHeader:true,defaultType:"tool",indicateDrag:false,weight:-1,componentLayout:"body",childEls:["body"],renderTpl:['
    {parent.baseCls}-body-{parent.ui}-{.}"',' style="{bodyStyle}">',"{%this.renderContainer(out,values)%}","
    "],headingTpl:['{title}'],shrinkWrap:3,titlePosition:0,headerCls:Ext.baseCSSPrefix+"header",initComponent:function(){var g=this,e=g.hasOwnProperty("titlePosition"),c=g.items,a=e?g.titlePosition:(c?c.length:0),b=[g.orientation,g.getDockName()],d=g.ownerCt;g.addEvents("click","dblclick");g.indicateDragCls=g.headerCls+"-draggable";g.title=g.title||" ";g.tools=g.tools||[];c=g.items=(c?Ext.Array.slice(c):[]);g.orientation=g.orientation||"horizontal";g.dock=(g.dock)?g.dock:(g.orientation=="horizontal")?"top":"left";if(d?(!d.border&&!d.frame):!g.border){b.push(g.orientation+"-noborder")}g.addClsWithUI(b);g.addCls([g.headerCls,g.headerCls+"-"+g.orientation]);if(g.indicateDrag){g.addCls(g.indicateDragCls)}if(g.iconCls||g.icon||g.glyph){g.initIconCmp();if(!e&&!c.length){++a}c.push(g.iconCmp)}g.titleCmp=new Ext.Component({ariaRole:"heading",focusable:false,noWrap:true,flex:1,rtl:g.rtl,id:g.id+"_hd",style:g.titleAlign?("text-align:"+g.titleAlign):"",cls:g.headerCls+"-text-container "+g.baseCls+"-text-container "+g.baseCls+"-text-container-"+g.ui,renderTpl:g.getTpl("headingTpl"),renderData:{title:g.title,cls:g.baseCls,headerCls:g.headerCls,ui:g.ui},childEls:["textEl"],autoEl:{unselectable:"on"},listeners:{render:g.onTitleRender,scope:g}});g.layout=(g.orientation=="vertical")?{type:"vbox",align:"center",alignRoundingMethod:"ceil"}:{type:"hbox",align:"middle",alignRoundingMethod:"floor"};Ext.Array.push(c,g.tools);g.tools.length=0;g.callParent();if(c.lengthb){if(k){l.removeCls(d)}l.addCls(m)}}}},onAdd:function(b,a){var c=this.tools;this.callParent(arguments);if(b.isTool){c.push(b);c[b.type]=b}},initRenderData:function(){return Ext.applyIf(this.callParent(),{bodyCls:this.bodyCls,bodyTargetCls:this.bodyTargetCls,headerCls:this.headerCls})},getDockName:function(){return this.dock}});Ext.define("Ext.dd.DragDrop",{constructor:function(c,a,b){if(c){this.init(c,a,b)}},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true},moveOnly:false,unlock:function(){this.locked=false},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(a,b){},startDrag:function(a,b){},b4Drag:function(a){},onDrag:function(a){},onDragEnter:function(a,b){},b4DragOver:function(a){},onDragOver:function(a,b){},b4DragOut:function(a){},onDragOut:function(a,b){},b4DragDrop:function(a){},onDragDrop:function(a,b){},onInvalidDrop:function(a){},b4EndDrag:function(a){},endDrag:function(a){},b4MouseDown:function(a){},onMouseDown:function(a){},onMouseUp:function(a){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(i,g,n){if(Ext.isNumber(g)){g={left:g,right:g,top:g,bottom:g}}g=g||this.defaultPadding;var k=Ext.get(this.getEl()).getBox(),a=Ext.get(i),m=a.getScroll(),j,d=a.dom,l,h,e;if(d==document.body){j={x:m.left,y:m.top,width:Ext.Element.getViewWidth(),height:Ext.Element.getViewHeight()}}else{l=a.getXY();j={x:l[0],y:l[1],width:d.clientWidth,height:d.clientHeight}}h=k.y-j.y;e=k.x-j.x;this.resetConstraints();this.setXConstraint(e-(g.left||0),j.width-e-k.width-(g.right||0),this.xTickSize);this.setYConstraint(h-(g.top||0),j.height-h-k.height-(g.bottom||0),this.yTickSize)},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id)}return this._domRef},getDragEl:function(){return Ext.getDom(this.dragElId)},init:function(c,a,b){this.initTarget(c,a,b);Ext.EventManager.on(this.id,"mousedown",this.handleMouseDown,this)},initTarget:function(c,a,b){this.config=b||{};this.DDMInstance=Ext.dd.DragDropManager;this.groups={};if(typeof c!=="string"){c=Ext.id(c)}this.id=c;this.addToGroup((a)?a:"default");this.handleElId=c;this.setDragElId(c);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable()},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false)},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable()},setPadding:function(c,a,d,b){if(!a&&0!==a){this.padding=[c,c,c,c]}else{if(!d&&0!==d){this.padding=[c,a,c,a]}else{this.padding=[c,a,d,b]}}},setInitPosition:function(d,c){var e=this.getEl(),b,a,g;if(!this.DDMInstance.verifyEl(e)){return}b=d||0;a=c||0;g=Ext.Element.getXY(e);this.initPageX=g[0]-b;this.initPageY=g[1]-a;this.lastPageX=g[0];this.lastPageY=g[1];this.setStartPosition(g)},setStartPosition:function(b){var a=b||Ext.Element.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=a[0];this.startPageY=a[1]},addToGroup:function(a){this.groups[a]=true;this.DDMInstance.regDragDrop(this,a)},removeFromGroup:function(a){if(this.groups[a]){delete this.groups[a]}this.DDMInstance.removeDDFromGroup(this,a)},setDragElId:function(a){this.dragElId=a},setHandleElId:function(a){if(typeof a!=="string"){a=Ext.id(a)}this.handleElId=a;this.DDMInstance.regHandle(this.id,a)},setOuterHandleElId:function(a){if(typeof a!=="string"){a=Ext.id(a)}Ext.EventManager.on(a,"mousedown",this.handleMouseDown,this);this.setHandleElId(a);this.hasOuterHandles=true},unreg:function(){Ext.EventManager.un(this.id,"mousedown",this.handleMouseDown,this);this._domRef=null;this.DDMInstance._remove(this)},destroy:function(){this.unreg()},isLocked:function(){return(this.DDMInstance.isLocked()||this.locked)},handleMouseDown:function(c,b){var a=this,d;if((a.primaryButtonOnly&&c.button!=0)||a.isLocked()){return}a.DDMInstance.refreshCache(a.groups);if(a.hasOuterHandles||a.DDMInstance.isOverTarget(c.getPoint(),a)){if(a.clickValidator(c)){d=Ext.Element.getActiveElement();a.setStartPosition();a.b4MouseDown(c);a.onMouseDown(c);a.DDMInstance.handleMouseDown(c,a);if(d){Ext.fly(d).blur()}a.DDMInstance.stopEvent(c)}}},clickValidator:function(b){var a=b.getTarget();return(this.isValidHandleChild(a)&&(this.id==this.handleElId||this.DDMInstance.handleWasClicked(a,this.id)))},addInvalidHandleType:function(a){var b=a.toUpperCase();this.invalidHandleTypes[b]=b},addInvalidHandleId:function(a){if(typeof a!=="string"){a=Ext.id(a)}this.invalidHandleIds[a]=a},addInvalidHandleClass:function(a){this.invalidHandleClasses.push(a)},removeInvalidHandleType:function(a){var b=a.toUpperCase();delete this.invalidHandleTypes[b]},removeInvalidHandleId:function(a){if(typeof a!=="string"){a=Ext.id(a)}delete this.invalidHandleIds[a]},removeInvalidHandleClass:function(b){for(var c=0,a=this.invalidHandleClasses.length;c=this.minX;b=b-a){if(!c[b]){this.xTicks[this.xTicks.length]=b;c[b]=true}}for(b=this.initPageX;b<=this.maxX;b=b+a){if(!c[b]){this.xTicks[this.xTicks.length]=b;c[b]=true}}Ext.Array.sort(this.xTicks,this.DDMInstance.numericSort)},setYTicks:function(d,a){this.yTicks=[];this.yTickSize=a;var c={},b;for(b=this.initPageY;b>=this.minY;b=b-a){if(!c[b]){this.yTicks[this.yTicks.length]=b;c[b]=true}}for(b=this.initPageY;b<=this.maxY;b=b+a){if(!c[b]){this.yTicks[this.yTicks.length]=b;c[b]=true}}Ext.Array.sort(this.yTicks,this.DDMInstance.numericSort)},setXConstraint:function(c,b,a){this.leftConstraint=c;this.rightConstraint=b;this.minX=this.initPageX-c;this.maxX=this.initPageX+b;if(a){this.setXTicks(this.initPageX,a)}this.constrainX=true},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks()},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0},setYConstraint:function(a,c,b){this.topConstraint=a;this.bottomConstraint=c;this.minY=this.initPageY-a;this.maxY=this.initPageY+c;if(b){this.setYTicks(this.initPageY,b)}this.constrainY=true},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var b=(this.maintainOffset)?this.lastPageX-this.initPageX:0,a=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(b,a)}else{this.setInitPosition()}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize)}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)}},getTick:function(h,d){if(!d){return h}else{if(d[0]>=h){return d[0]}else{var b,a,c,g,e;for(b=0,a=d.length;b=h){g=h-d[b];e=d[c]-h;return(e>g)?d[b]:d[c]}}return d[d.length-1]}}},toString:function(){return("DragDrop "+this.id)}});Ext.define("Ext.dd.DD",{extend:Ext.dd.DragDrop,constructor:function(c,a,b){if(c){this.init(c,a,b)}},scroll:true,autoOffset:function(c,b){var a=c-this.startPageX,d=b-this.startPageY;this.setDelta(a,d)},setDelta:function(b,a){this.deltaX=b;this.deltaY=a},setDragElPos:function(c,b){var a=this.getDragEl();this.alignElWithMouse(a,c,b)},alignElWithMouse:function(b,e,c){var g=this.getTargetCoord(e,c),d=b.dom?b:Ext.fly(b,"_dd"),l=d.getSize(),i=Ext.Element,j,a,k,h;if(!this.deltaSetXY){j=this.cachedViewportSize={width:i.getDocumentWidth(),height:i.getDocumentHeight()};a=[Math.max(0,Math.min(g.x,j.width-l.width)),Math.max(0,Math.min(g.y,j.height-l.height))];d.setXY(a);k=this.getLocalX(d);h=d.getLocalY();this.deltaSetXY=[k-g.x,h-g.y]}else{j=this.cachedViewportSize;this.setLocalXY(d,Math.max(0,Math.min(g.x+this.deltaSetXY[0],j.width-l.width)),Math.max(0,Math.min(g.y+this.deltaSetXY[1],j.height-l.height)))}this.cachePosition(g.x,g.y);this.autoScroll(g.x,g.y,b.offsetHeight,b.offsetWidth);return g},cachePosition:function(b,a){if(b){this.lastPageX=b;this.lastPageY=a}else{var c=Ext.Element.getXY(this.getEl());this.lastPageX=c[0];this.lastPageY=c[1]}},autoScroll:function(l,k,e,m){if(this.scroll){var n=Ext.Element.getViewHeight(),b=Ext.Element.getViewWidth(),p=this.DDMInstance.getScrollTop(),d=this.DDMInstance.getScrollLeft(),j=e+k,o=m+l,i=(n+p-k-this.deltaY),g=(b+d-l-this.deltaX),c=40,a=(document.all)?80:30;if(j>n&&i0&&k-pb&&g0&&l-dthis.maxX){a=this.maxX}}if(this.constrainY){if(dthis.maxY){d=this.maxY}}a=this.getTick(a,this.xTicks);d=this.getTick(d,this.yTicks);return{x:a,y:d}},applyConfig:function(){this.callParent();this.scroll=(this.config.scroll!==false)},b4MouseDown:function(a){this.autoOffset(a.getPageX(),a.getPageY())},b4Drag:function(a){this.setDragElPos(a.getPageX(),a.getPageY())},toString:function(){return("DD "+this.id)},getLocalX:function(a){return a.getLocalX()},setLocalXY:function(b,a,c){b.setLocalXY(a,c)}});Ext.define("Ext.dd.DDProxy",{extend:Ext.dd.DD,statics:{dragElId:"ygddfdiv"},constructor:function(c,a,b){if(c){this.init(c,a,b);this.initFrame()}},resizeFrame:true,centerFrame:false,createFrame:function(){var b=this,a=document.body,d,c;if(!a||!a.firstChild){setTimeout(function(){b.createFrame()},50);return}d=this.getDragEl();if(!d){d=document.createElement("div");d.id=this.dragElId;c=d.style;c.position="absolute";c.visibility="hidden";c.cursor="move";c.border="2px solid #aaa";c.zIndex=999;a.insertBefore(d,a.firstChild)}},initFrame:function(){this.createFrame()},applyConfig:function(){this.callParent();this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId)},showFrame:function(e,d){var c=this.getEl(),a=this.getDragEl(),b=a.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(b.width,10)/2),Math.round(parseInt(b.height,10)/2))}this.setDragElPos(e,d);Ext.fly(a).show()},_resizeProxy:function(){if(this.resizeFrame){var a=this.getEl();Ext.fly(this.getDragEl()).setSize(a.offsetWidth,a.offsetHeight)}},b4MouseDown:function(b){var a=b.getPageX(),c=b.getPageY();this.autoOffset(a,c);this.setDragElPos(a,c)},b4StartDrag:function(a,b){this.showFrame(a,b)},b4EndDrag:function(a){Ext.fly(this.getDragEl()).hide()},endDrag:function(c){var b=this.getEl(),a=this.getDragEl();a.style.visibility="";this.beforeMove();b.style.visibility="hidden";Ext.dd.DDM.moveToEl(b,a);a.style.visibility="hidden";b.style.visibility="";this.afterDrag()},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id)}});Ext.define("Ext.dd.StatusProxy",{extend:Ext.Component,animRepair:false,childEls:["ghost"],renderTpl:['
    '],repairCls:Ext.baseCSSPrefix+"dd-drag-repair",constructor:function(a){var b=this;a=a||{};Ext.apply(b,{hideMode:"visibility",hidden:true,floating:true,id:b.id||Ext.id(),cls:Ext.baseCSSPrefix+"dd-drag-proxy "+this.dropNotAllowed,shadow:a.shadow||false,renderTo:Ext.getDetachedBody()});b.callParent(arguments);this.dropStatus=this.dropNotAllowed},dropAllowed:Ext.baseCSSPrefix+"dd-drop-ok",dropNotAllowed:Ext.baseCSSPrefix+"dd-drop-nodrop",setStatus:function(a){a=a||this.dropNotAllowed;if(this.dropStatus!=a){this.el.replaceCls(this.dropStatus,a);this.dropStatus=a}},reset:function(b){var c=this,a=Ext.baseCSSPrefix+"dd-drag-proxy ";c.el.replaceCls(a+c.dropAllowed,a+c.dropNotAllowed);c.dropStatus=c.dropNotAllowed;if(b){c.ghost.update("")}},update:function(a){if(typeof a=="string"){this.ghost.update(a)}else{this.ghost.update("");a.style.margin="0";this.ghost.dom.appendChild(a)}var b=this.ghost.dom.firstChild;if(b){Ext.fly(b).setStyle("float","none")}},getGhost:function(){return this.ghost},hide:function(a){this.callParent();if(a){this.reset(true)}},stop:function(){if(this.anim&&this.anim.isAnimated&&this.anim.isAnimated()){this.anim.stop()}},sync:function(){this.el.sync()},repair:function(c,d,a){var b=this;b.callback=d;b.scope=a;if(c&&b.animRepair!==false){b.el.addCls(b.repairCls);b.el.hideUnders(true);b.anim=b.el.animate({duration:b.repairDuration||500,easing:"ease-out",to:{x:c[0],y:c[1]},stopAnimation:true,callback:b.afterRepair,scope:b})}else{b.afterRepair()}},afterRepair:function(){var a=this;a.hide(true);a.el.removeCls(a.repairCls);if(typeof a.callback=="function"){a.callback.call(a.scope||a)}delete a.callback;delete a.scope}});Ext.define("Ext.dd.DragSource",{extend:Ext.dd.DDProxy,dropAllowed:Ext.baseCSSPrefix+"dd-drop-ok",dropNotAllowed:Ext.baseCSSPrefix+"dd-drop-nodrop",animRepair:true,repairHighlightColor:"c3daf9",constructor:function(b,a){this.el=Ext.get(b);if(!this.dragData){this.dragData={}}Ext.apply(this,a);if(!this.proxy){this.proxy=new Ext.dd.StatusProxy({id:this.el.id+"-drag-status-proxy",animRepair:this.animRepair})}this.callParent([this.el.dom,this.ddGroup||this.group,{dragElId:this.proxy.id,resizeFrame:false,isTarget:false,scroll:this.scroll===true}]);this.dragging=false},getDragData:function(a){return this.dragData},onDragEnter:function(c,d){var b=Ext.dd.DragDropManager.getDDById(d),a;this.cachedTarget=b;if(this.beforeDragEnter(b,c,d)!==false){if(b.isNotifyTarget){a=b.notifyEnter(this,c,this.dragData);this.proxy.setStatus(a)}else{this.proxy.setStatus(this.dropAllowed)}if(this.afterDragEnter){this.afterDragEnter(b,c,d)}}},beforeDragEnter:function(b,a,c){return true},onDragOver:function(c,d){var b=this.cachedTarget||Ext.dd.DragDropManager.getDDById(d),a;if(this.beforeDragOver(b,c,d)!==false){if(b.isNotifyTarget){a=b.notifyOver(this,c,this.dragData);this.proxy.setStatus(a)}if(this.afterDragOver){this.afterDragOver(b,c,d)}}},beforeDragOver:function(b,a,c){return true},onDragOut:function(b,c){var a=this.cachedTarget||Ext.dd.DragDropManager.getDDById(c);if(this.beforeDragOut(a,b,c)!==false){if(a.isNotifyTarget){a.notifyOut(this,b,this.dragData)}this.proxy.reset();if(this.afterDragOut){this.afterDragOut(a,b,c)}}this.cachedTarget=null},beforeDragOut:function(b,a,c){return true},onDragDrop:function(b,c){var a=this.cachedTarget||Ext.dd.DragDropManager.getDDById(c);if(this.beforeDragDrop(a,b,c)!==false){if(a.isNotifyTarget){if(a.notifyDrop(this,b,this.dragData)!==false){this.onValidDrop(a,b,c)}else{this.onInvalidDrop(a,b,c)}}else{this.onValidDrop(a,b,c)}if(this.afterDragDrop){this.afterDragDrop(a,b,c)}}delete this.cachedTarget},beforeDragDrop:function(b,a,c){return true},onValidDrop:function(b,a,c){this.hideProxy();if(this.afterValidDrop){this.afterValidDrop(b,a,c)}},getRepairXY:function(b,a){return this.el.getXY()},onInvalidDrop:function(b,a,c){if(!a){a=b;b=null;c=a.getTarget().id}this.beforeInvalidDrop(b,a,c);if(this.cachedTarget){if(this.cachedTarget.isNotifyTarget){this.cachedTarget.notifyOut(this,a,this.dragData)}this.cacheTarget=null}this.proxy.repair(this.getRepairXY(a,this.dragData),this.afterRepair,this);if(this.afterInvalidDrop){this.afterInvalidDrop(a,c)}},afterRepair:function(){var a=this;if(Ext.enableFx){a.el.highlight(a.repairHighlightColor)}a.dragging=false},beforeInvalidDrop:function(b,a,c){return true},handleMouseDown:function(b){if(this.dragging){return}var a=this.getDragData(b);if(a&&this.onBeforeDrag(a,b)!==false){this.dragData=a;this.proxy.stop();this.callParent(arguments)}},onBeforeDrag:function(a,b){return true},onStartDrag:Ext.emptyFn,alignElWithMouse:function(){this.proxy.ensureAttachedToBody(true);return this.callParent(arguments)},startDrag:function(a,b){this.proxy.reset();this.proxy.hidden=false;this.dragging=true;this.proxy.update("");this.onInitDrag(a,b);this.proxy.show()},onInitDrag:function(a,c){var b=this.el.dom.cloneNode(true);b.id=Ext.id();this.proxy.update(b);this.onStartDrag(a,c);return true},getProxy:function(){return this.proxy},hideProxy:function(){this.proxy.hide();this.proxy.reset(true);this.dragging=false},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups)},b4EndDrag:function(a){},endDrag:function(a){this.onEndDrag(this.dragData,a)},onEndDrag:function(a,b){},autoOffset:function(a,b){this.setDelta(-12,-20)},destroy:function(){this.callParent();Ext.destroy(this.proxy)}});Ext.define("Ext.panel.Proxy",{alternateClassName:"Ext.dd.PanelProxy",moveOnDrag:true,constructor:function(a,b){var c=this;c.panel=a;c.id=c.panel.id+"-ddproxy";Ext.apply(c,b)},insertProxy:true,setStatus:Ext.emptyFn,reset:Ext.emptyFn,update:Ext.emptyFn,stop:Ext.emptyFn,sync:Ext.emptyFn,getEl:function(){return this.ghost.el},getGhost:function(){return this.ghost},getProxy:function(){return this.proxy},hide:function(){var a=this;if(a.ghost){if(a.proxy){a.proxy.remove();delete a.proxy}a.panel.unghost(null,a.moveOnDrag);delete a.ghost}},show:function(){var b=this,a;if(!b.ghost){a=b.panel.getSize();b.panel.el.setVisibilityMode(Ext.Element.DISPLAY);b.ghost=b.panel.ghost();if(b.insertProxy){b.proxy=b.panel.el.insertSibling({cls:Ext.baseCSSPrefix+"panel-dd-spacer"});b.proxy.setSize(a)}}},repair:function(b,c,a){this.hide();Ext.callback(c,a||this)},moveProxy:function(a,b){if(this.proxy){a.insertBefore(this.proxy.dom,b)}}});Ext.define("Ext.panel.DD",{extend:Ext.dd.DragSource,constructor:function(b,a){var c=this;c.panel=b;c.dragData={panel:b};c.panelProxy=new Ext.panel.Proxy(b,a);c.proxy=c.panelProxy.proxy;c.callParent([b.el,a]);c.setupEl(b)},setupEl:function(a){var c=this,d=a.header,b=a.body;if(d){c.setHandleElId(d.id);b=d.el}if(b){b.setStyle("cursor","move");c.scroll=false}else{a.on("boxready",c.setupEl,c,{single:true})}},showFrame:Ext.emptyFn,startDrag:Ext.emptyFn,b4StartDrag:function(a,b){this.panelProxy.show()},b4MouseDown:function(b){var a=b.getPageX(),c=b.getPageY();this.autoOffset(a,c)},onInitDrag:function(a,b){this.onStartDrag(a,b);return true},createFrame:Ext.emptyFn,getDragEl:function(b){var a=this.panelProxy.ghost;if(a){return a.el.dom}},endDrag:function(a){this.panelProxy.hide();this.panel.saveState()},autoOffset:function(a,b){a-=this.startPageX;b-=this.startPageY;this.setDelta(a,b)},onInvalidDrop:function(c,b,d){var a=this;a.beforeInvalidDrop(c,b,d);if(a.cachedTarget){if(a.cachedTarget.isNotifyTarget){a.cachedTarget.notifyOut(a,b,a.dragData)}a.cacheTarget=null}if(a.afterInvalidDrop){a.afterInvalidDrop(b,d)}}});Ext.define("Ext.util.Memento",(function(){function d(i,h,j,g){i[g?g+j:j]=h[j]}function c(h,g,i){delete h[i]}function e(k,j,l,i){var g=i?i+l:l,h=k[g];if(h||k.hasOwnProperty(g)){a(j,l,h)}}function a(h,i,g){if(Ext.isDefined(g)){h[i]=g}else{delete h[i]}}function b(h,m,l,i,j){if(m){if(Ext.isArray(i)){var k,g=i.length;for(k=0;ka){if(j.anchorToTarget){j.defaultAlign="r-l";if(j.mouseOffset){j.mouseOffset[0]*=-1}}j.anchor="right";return j.getTargetXY()}if(b[1]i){if(j.anchorToTarget){j.defaultAlign="b-t";if(j.mouseOffset){j.mouseOffset[1]*=-1}}j.anchor="bottom";return j.getTargetXY()}}j.anchorCls=Ext.baseCSSPrefix+"tip-anchor-"+j.getAnchorPosition();j.anchorEl.addCls(j.anchorCls);j.targetCounter=0;return b}else{d=j.getMouseOffset();return(j.targetXY)?[j.targetXY[0]+d[0],j.targetXY[1]+d[1]]:d}},getMouseOffset:function(){var a=this,b=a.anchor?[0,0]:[15,18];if(a.mouseOffset){b[0]+=a.mouseOffset[0];b[1]+=a.mouseOffset[1]}return b},getAnchorPosition:function(){var b=this,a;if(b.anchor){b.tipAnchor=b.anchor.charAt(0)}else{a=b.defaultAlign.match(/^([a-z]+)-([a-z]+)(\?)?$/);b.tipAnchor=a[1].charAt(0)}switch(b.tipAnchor){case"t":return"top";case"b":return"bottom";case"r":return"right"}return"left"},getAnchorAlign:function(){switch(this.anchor){case"top":return"tl-bl";case"left":return"tl-tr";case"right":return"tr-tl";default:return"bl-tl"}},getOffsets:function(){var c=this,d,b,a=c.getAnchorPosition().charAt(0);if(c.anchorToTarget&&!c.trackMouse){switch(a){case"t":b=[0,9];break;case"b":b=[0,-13];break;case"r":b=[-13,0];break;default:b=[9,0];break}}else{switch(a){case"t":b=[-15-c.anchorOffset,30];break;case"b":b=[-19-c.anchorOffset,-13-c.el.dom.offsetHeight];break;case"r":b=[-15-c.el.dom.offsetWidth,-13-c.anchorOffset];break;default:b=[25,-13-c.anchorOffset];break}}d=c.getMouseOffset();b[0]+=d[0];b[1]+=d[1];return b},onTargetOver:function(c){var b=this,a;if(b.disabled||c.within(b.target.dom,true)){return}a=c.getTarget(b.delegate);if(a){b.triggerElement=a;b.triggerEvent=c;b.clearTimer("hide");b.targetXY=c.getXY();b.delayShow()}},delayShow:function(){var a=this;if(a.hidden&&!a.showTimer){if(Ext.Date.getElapsed(a.lastActive)b){e=d[a];for(c in e){if(e[c]){e[c].hide(true)}}}}});Ext.define("Ext.draw.CompositeSprite",{extend:Ext.util.MixedCollection,mixins:{animate:Ext.util.Animate},autoDestroy:false,isCompositeSprite:true,constructor:function(a){var b=this;a=a||{};Ext.apply(b,a);b.addEvents("mousedown","mouseup","mouseover","mouseout","click");b.id=Ext.id(null,"ext-sprite-group-");b.callParent()},onClick:function(a){this.fireEvent("click",a)},onMouseUp:function(a){this.fireEvent("mouseup",a)},onMouseDown:function(a){this.fireEvent("mousedown",a)},onMouseOver:function(a){this.fireEvent("mouseover",a)},onMouseOut:function(a){this.fireEvent("mouseout",a)},attachEvents:function(b){var a=this;b.on({scope:a,mousedown:a.onMouseDown,mouseup:a.onMouseUp,mouseover:a.onMouseOver,mouseout:a.onMouseOut,click:a.onClick})},add:function(b,c){var a=this.callParent(arguments);this.attachEvents(a);return a},insert:function(a,b,c){return this.callParent(arguments)},remove:function(b){var a=this;b.un({scope:a,mousedown:a.onMouseDown,mouseup:a.onMouseUp,mouseover:a.onMouseOver,mouseout:a.onMouseOut,click:a.onClick});return a.callParent(arguments)},getBBox:function(){var e=0,n,j,k=this.items,g=this.length,h=Infinity,c=h,m=-h,b=h,l=-h,d,a;for(;e0){b=d.first();d.remove(b);a.remove(b,c)}}d.clearListeners()}});Ext.define("Ext.draw.Surface",{mixins:{observable:Ext.util.Observable},separatorRe:/[, ]+/,enginePriority:["Svg","Vml"],statics:{create:function(b,d){d=d||this.prototype.enginePriority;var c=0,a=d.length;for(;c1,a,d,c,h,g;if(j||Ext.isArray(b[0])){a=j?b:b[0];d=[];for(c=0,h=a.length;ch){b=i-1}else{if(a-1;b--){this.remove(a[b],d)}},onRemove:Ext.emptyFn,onDestroy:Ext.emptyFn,applyViewBox:function(){var d=this,l=d.viewBox,a=d.width||1,h=d.height||1,g,e,j,b,i,c,k;if(l&&(a||h)){g=l.x;e=l.y;j=l.width;b=l.height;i=h/b;c=a/j;k=Math.min(c,i);if(j*k0.85){e=e.getDarker(0.3)}else{if(h>0.7){e=e.getDarker(0.15)}}}}c.colors=[e.getDarker(0.3).toString(),e.getDarker(0.15).toString(),e.toString(),e.getLighter(0.15).toString(),e.getLighter(0.3).toString()];delete c.baseColor}if(c.colors){a=c.colors.slice();s=b.markerThemes;r=b.seriesThemes;j=a.length;b.colors=a;for(;m0?p:p+a)+h.el.getX(),y:(n>0?m:m+n)+h.el.getY(),width:r(a),height:r(n)};h.mask.updateBox(h.maskSelection);h.mask.show();h.maskSprite.setAttributes({hidden:true},true)}else{if(s=="horizontal"){q=["M",p,j,"L",p,n]}else{if(s=="vertical"){q=["M",l,m,"L",a,m]}else{q=["M",p,j,"L",p,n,"M",l,m,"L",a,m]}}h.maskSprite.setAttributes({path:q,"stroke-width":s===true?1:1,hidden:false},true)}}},onMouseLeave:function(b){var a=this;a.mouseMoved=false;a.mouseDown=false;a.maskMouseDown=false;a.mask.hide();a.maskSprite.hide(true)}});Ext.define("Ext.chart.Navigation",{setZoom:function(p){var t=this,o=t.axes.items,r,m,c,a=t.chartBBox,u=a.width,d=a.height,g={x:p.x-t.el.getX(),y:p.y-t.el.getY(),width:p.width,height:p.height},j,n,q,b,h,l,k,e,s;for(r=0,m=o.length;r0.5?0.2:0.8;K.setAttributes({fill:String(n.fromHSL.apply({},F))},true)}if(q.stacked&&d&&(y.totalPositiveValues||y.totalNegativeValues)){T=(y.totalPositiveValues||0);I=(y.totalNegativeValues||0);B=T+I;if(d=="total"){o=z(B)}else{if(d=="balances"){if(T==0&&I==0){o=z(0)}else{o=z(T);N=z(I)}}}if(o){K=s.getAt(c);if(!K){K=q.onCreateLabel(S,y,P,"over")}K.setAttributes({text:o});q.onPlaceLabel(K,S,y,P,"over",M,C);c++;F=n.fromString(K.attr.color||K.attr.fill).getHSL();K.setAttributes({fill:String(n.fromHSL.apply({},F))},true)}if(N){K=s.getAt(c);if(!K){K=q.onCreateLabel(S,y,P,"under")}K.setAttributes({text:N});q.onPlaceLabel(K,S,y,P,"under",M,C);c++;F=n.fromString(K.attr.color||K.attr.fill).getHSL();K.setAttributes({fill:String(n.fromHSL.apply({},F))},true)}}}J++;C++}}m=s.length;while(m>c){Q.push(c);c++}}q.hideLabels(Q)},hideLabels:function(b){var a=this.labelsGroup,c=!!b&&b.length;if(!a){return}if(c===false){c=a.getCount();while(c--){a.getAt(c).hide(true)}}else{while(c--){a.getAt(b[c]).hide(true)}}}});Ext.define("Ext.chart.TipSurface",{extend:Ext.draw.Component,spriteArray:false,renderFirst:true,constructor:function(a){this.callParent([a]);if(a.sprites){this.spriteArray=[].concat(a.sprites);delete a.sprites}},onRender:function(){var c=this,b=0,a=0,d,e;this.callParent(arguments);e=c.spriteArray;if(c.renderFirst&&e){c.renderFirst=false;for(a=e.length;br){t=r}if(x=0){u[v].positiveValue+=r;if(x0){t=0}}else{u[v].negativeValue+=r;if(t>u[v].negativeValue){t=u[v].negativeValue}if(x<0){x=0}}}}}}if(!isFinite(x)){x=C.prevMax||0}if(!isFinite(t)){t=C.prevMin||0}if(typeof t==="number"){t=Ext.Number.correctFloat(t)}if(typeof x==="number"){x=Ext.Number.correctFloat(x)}if(t!=x&&(x!=Math.floor(x)||t!=Math.floor(t))){t=Math.floor(t);x=Math.floor(x)+1}if(!isNaN(C.minimum)){t=C.minimum}if(!isNaN(C.maximum)){x=C.maximum}if(t>=x){t=Math.floor(t);x=t+1}return{min:t,max:x}},calcEnds:function(){var h=this,d=h.getRange(),g=d.min,a=d.max,c,i,e,b;c=(Ext.isNumber(h.majorTickSteps)?h.majorTickSteps+1:h.steps);i=!(Ext.isNumber(h.maximum)&&Ext.isNumber(h.minimum)&&Ext.isNumber(h.majorTickSteps)&&h.majorTickSteps>0);e=Ext.draw.Draw.snapEnds(g,a,c,i);if(Ext.isNumber(h.maximum)){e.to=h.maximum;b=true}if(Ext.isNumber(h.minimum)){e.from=h.minimum;b=true}if(h.adjustMaximumByMajorUnit){e.to=Math.ceil(e.to/e.step)*e.step;b=true}if(h.adjustMinimumByMajorUnit){e.from=Math.floor(e.from/e.step)*e.step;b=true}if(b){e.steps=Math.ceil((e.to-e.from)/e.step)}h.prevMin=(g==a?0:g);h.prevMax=a;return e},drawAxis:function(N){var m=this,P,H=m.x,G=m.y,T=m.dashSize,p=m.length,I=m.position,b=(I=="left"||I=="right"),k=[],j=(m.isNumericAxis),t=m.applyData(),z=t.step,D=t.steps,F=Ext.isArray(D),h=t.from,S=t.to,g=(S-h)||1,Q,w,v,L,B=m.minorTickSteps||0,A=m.minorTickSteps||0,o=Math.max(B+1,0),n=Math.max(A+1,0),J=(I=="left"||I=="top"?-1:1),d=T*J,c=m.chart.series.items,M=c[0],q=M?M.nullGutters:m.nullGutters,O,R,r,E=0,C=0,a,K,u,s,e,l;m.from=h;m.to=S;if(m.hidden||(h>S)){return}if((F&&(D.length==0))||(!F&&isNaN(z))){return}if(F){D=Ext.Array.filter(D,function(x,i,y){return(+x>+m.from&&+x<+m.to)},this);D=Ext.Array.union([m.from],D,[m.to])}else{D=new Array;for(s=+m.from;s<+m.to;s+=z){D.push(s)}D.push(+m.to)}C=D.length;for(P=0,u=c.length;P0){r=z/(R+1)}}if(q&&r){for(a=0;a=0){if(!this.sprites){for(e=0;e<=l;e++){n=a.add({type:"path",path:["M",d+(m-c)*o(e/l*g-g),b+(m-c)*k(e/l*g-g),"L",d+m*o(e/l*g-g),b+m*k(e/l*g-g),"Z"],stroke:"#ccc"});n.setAttributes({hidden:false},true);h.push(n)}}else{h=this.sprites;for(e=0;e<=l;e++){h[e].setAttributes({path:["M",d+(m-c)*o(e/l*g-g),b+(m-c)*k(e/l*g-g),"L",d+m*o(e/l*g-g),b+m*k(e/l*g-g),"Z"],stroke:"#ccc"},true)}}}this.sprites=h;this.drawLabel();if(this.title){this.drawTitle()}},drawTitle:function(){var e=this,d=e.chart,a=d.surface,g=d.chartBBox,c=e.titleSprite,b;if(!c){e.titleSprite=c=a.add(Ext.apply({type:"text",zIndex:2},e.axisTitleStyle,e.labelTitle))}c.setAttributes(Ext.apply({text:e.title},e.label||{}),true);b=c.getBBox();c.setAttributes({x:g.x+(g.width/2)-(b.width/2),y:g.y+g.height-(b.height/2)-4},true)},setTitle:function(a){this.title=a;this.drawTitle()},drawLabel:function(){var l=this.chart,p=l.surface,b=l.chartBBox,j=b.x+(b.width/2),h=b.y+b.height,m=this.margin||10,d=Math.min(b.width,2*b.height)/2+2*m,u=Math.round,n=[],g,s=this.maximum||0,k=this.minimum||0,r=this.steps,q=0,v,t=Math.PI,c=Math.cos,a=Math.sin,e=this.label,o=e.renderer||Ext.identityFn;if(!this.labelArray){for(q=0;q<=r;q++){v=(q===0||q===r)?7:0;g=p.add({type:"text",text:o(u(k+q/r*(s-k))),x:j+d*c(q/r*t-t),y:h+d*a(q/r*t-t)-v,"text-anchor":"middle","stroke-width":0.2,zIndex:10,stroke:"#333"});g.setAttributes({hidden:false},true);n.push(g)}}else{n=this.labelArray;for(q=0;q<=r;q++){v=(q===0||q===r)?7:0;n[q].setAttributes({text:o(u(k+q/r*(s-k))),x:j+d*c(q/r*t-t),y:h+d*a(q/r*t-t)-v},true)}}this.labelArray=n}});Ext.define("Ext.chart.axis.Numeric",{extend:Ext.chart.axis.Axis,alternateClassName:"Ext.chart.NumericAxis",type:"Numeric",isNumericAxis:true,alias:"axis.numeric",constructor:function(c){var d=this,a=!!(c.label&&c.label.renderer),b;d.callParent([c]);b=d.label;if(c.constrain==null){d.constrain=(c.minimum!=null&&c.maximum!=null)}if(!a){b.renderer=function(e){return d.roundToDecimal(e,d.decimals)}}},roundToDecimal:function(a,c){var b=Math.pow(10,c||0);return Math.round(a*b)/b},minimum:NaN,maximum:NaN,constrain:true,decimals:2,scale:"linear",doConstrain:function(){var u=this,h=u.chart,b=h.getChartStore(),j=b.data.items,t,w,a,e=h.series.items,k=u.fields,c=k.length,g=u.calcEnds(),n=g.from,q=g.to,r,o,s=false,m,v=[],p;for(t=0,w=j.length;t+q){p=false;break}}if(p){v.push(a)}}h.setSubStore(new Ext.data.Store({model:b.model,data:v}))},position:"left",adjustMaximumByMajorUnit:false,adjustMinimumByMajorUnit:false,processView:function(){var e=this,d=e.chart,c=d.series.items,b,a;for(b=0,a=c.length;b>0),e)}}}},processView:function(){var a=this;if(a.fromDate){a.minimum=+a.fromDate}if(a.toDate){a.maximum=+a.toDate}if(a.constrain){a.doConstrain()}},calcEnds:function(){var c=this,a,b=c.step;if(b){a=c.getRange();a=Ext.draw.Draw.snapEndsByDateAndStep(new Date(a.min),new Date(a.max),Ext.isNumber(b)?[Date.MILLI,b]:b);if(c.minimum){a.from=c.minimum}if(c.maximum){a.to=c.maximum}return a}else{return c.callParent(arguments)}}});Ext.define("Ext.chart.series.Series",{mixins:{observable:Ext.util.Observable,labels:Ext.chart.Label,highlights:Ext.chart.Highlight,tips:Ext.chart.Tip,callouts:Ext.chart.Callout},type:null,title:null,showInLegend:true,renderer:function(e,a,c,d,b){return c},shadowAttributes:null,animating:false,nullGutters:{lower:0,upper:0,verticalAxis:undefined},nullPadding:{left:0,right:0,width:0,bottom:0,top:0,height:0},constructor:function(a){var b=this;if(a){Ext.apply(b,a)}b.shadowGroups=[];b.mixins.labels.constructor.call(b,a);b.mixins.highlights.constructor.call(b,a);b.mixins.tips.constructor.call(b,a);b.mixins.callouts.constructor.call(b,a);b.addEvents({scope:b,itemclick:true,itemmouseover:true,itemmouseout:true,itemmousedown:true,itemmouseup:true,mouseleave:true,afterdraw:true,titlechange:true});b.mixins.observable.constructor.call(b,a);b.on({scope:b,itemmouseover:b.onItemMouseOver,itemmouseout:b.onItemMouseOut,mouseleave:b.onMouseLeave});if(b.style){Ext.apply(b.seriesStyle,b.style)}},onRedraw:Ext.emptyFn,eachRecord:function(c,b){var a=this.chart;a.getChartStore().each(c,b)},getRecordCount:function(){var b=this.chart,a=b.getChartStore();return a?a.getCount():0},isExcluded:function(a){var b=this.__excludes;return !!(b&&b[a])},setBBox:function(a){var d=this,c=d.chart,b=c.chartBBox,h=a?{left:0,right:0,bottom:0,top:0}:c.maxGutters,e,g;e={x:b.x,y:b.y,width:b.width,height:b.height};d.clipBox=e;g={x:(e.x+h.left)-(c.zoom.x*c.zoom.width),y:(e.y+h.bottom)-(c.zoom.y*c.zoom.height),width:(e.width-(h.left+h.right))*c.zoom.width,height:(e.height-(h.bottom+h.top))*c.zoom.height};d.bbox=g},onAnimate:function(b,a){var c=this;b.stopAnimation();if(c.animating){return b.animate(Ext.applyIf(a,c.chart.animate))}else{c.animating=true;return b.animate(Ext.apply(Ext.applyIf(a,c.chart.animate),{callback:function(){c.animating=false;c.fireEvent("afterrender")}}))}},getGutters:function(){return this.nullGutters},getPadding:function(){return this.nullPadding},onItemMouseOver:function(b){var a=this;if(b.series===a){if(a.highlight){a.highlightItem(b)}if(a.tooltip){a.showTip(b)}}},onItemMouseOut:function(b){var a=this;if(b.series===a){a.unHighlightItem();if(a.tooltip){a.hideTip(b)}}},onMouseLeave:function(){var a=this;a.unHighlightItem();if(a.tooltip){a.hideTip()}},getItemForPoint:function(a,j){if(!this.items||!this.items.length||this.seriesIsHidden){return null}var g=this,b=g.items,h=g.bbox,e,c,d;if(!Ext.draw.Draw.withinBox(a,j,h)){return null}for(c=0,d=b.length;c0){c=Infinity;m=-c;for(e=0,j=d.length;em){m=b}if(bm){m=s}if(s0){b=Infinity;m=-b;for(d=0,j=c.length;dm){m=o}if(n-1){b="top"}else{if(Ext.Array.indexOf(d,"bottom")>-1){b="bottom"}else{if(l.get("top")&&l.get("bottom")){for(h=0,k=o.length;h-1){a="left"}else{if(Ext.Array.indexOf(d,"right")>-1){a="right"}else{if(l.get("left")&&l.get("right")){for(h=0,k=e.length;h0&&r){E=M[0].get(j.xField);if(typeof E!="number"){E=+E;if(isNaN(E)){r=false}}}for(J=0;Jk.width)&&j.areas){I=j.shrink(z,D,k.width);z=I.x;D=I.y}return{bbox:k,minX:C,minY:B,xValues:z,yValues:D,xScale:h,yScale:F,areasLen:A}},getPaths:function(){var z=this,m=z.chart,c=m.getChartStore(),e=true,g=z.getBounds(),a=g.bbox,n=z.items=[],w=[],b,d=0,p=[],s,j,k,h,q,u,l,A,r,v,o,t;j=g.xValues.length;for(s=0;sa.x+a.width)?(j-(j+n-a.x-a.width)):j;h=h-ma.y+a.height)?(h-(h+m-a.y-a.height)):h;if(u.chart.animate&&!u.chart.resizing){g.show(true);u.onAnimate(g,{to:{x:j,y:h}})}else{g.setAttributes({x:j,y:h},true);if(r){u.animation.on("afteranimate",function(){g.show(true)})}else{g.show(true)}}},onPlaceCallout:function(m,r,J,G,F,d,k){var M=this,s=M.chart,D=s.surface,H=s.resizing,L=M.callouts,t=M.items,v=(G==0)?false:t[G-1].point,z=(G==t.length-1)?false:t[G+1].point,c=J.point,A,g,N,K,o,q,b=(m&&m.label?m.label.getBBox():{width:0,height:0}),I=30,C=10,B=3,h,e,j,w,u,E=M.clipRect,n,l;if(!b.width||!b.height){return}if(!v){v=c}if(!z){z=c}K=(z[1]-v[1])/(z[0]-v[0]);o=(c[1]-v[1])/(c[0]-v[0]);q=(z[1]-c[1])/(z[0]-c[0]);g=Math.sqrt(1+K*K);A=[1/g,K/g];N=[-A[1],A[0]];if(o>0&&q<0&&N[1]<0||o<0&&q>0&&N[1]>0){N[0]*=-1;N[1]*=-1}else{if(Math.abs(o)Math.abs(q)&&N[0]>0){N[0]*=-1;N[1]*=-1}}n=c[0]+N[0]*I;l=c[1]+N[1]*I;h=n+(N[0]>0?0:-(b.width+2*B));e=l-b.height/2-B;j=b.width+2*B;w=b.height+2*B;if(h(E[0]+E[2])){N[0]*=-1}if(e(E[1]+E[3])){N[1]*=-1}n=c[0]+N[0]*I;l=c[1]+N[1]*I;h=n+(N[0]>0?0:-(b.width+2*B));e=l-b.height/2-B;j=b.width+2*B;w=b.height+2*B;m.lines.setAttributes({path:["M",c[0],c[1],"L",n,l,"Z"]},true);m.box.setAttributes({x:h,y:e,width:j,height:w},true);m.label.setAttributes({x:n+(N[0]>0?B:-(b.width+B)),y:l},true);for(u in m){m[u].show(true)}},isItemInPoint:function(j,h,m,c){var g=this,b=m.pointsUp,d=m.pointsDown,q=Math.abs,o=false,l=false,e=Infinity,a,n,k;for(a=0,n=b.length;aq(j-k[0])){e=q(j-k[0]);o=true;if(l){++a}}if(!o||(o&&l)){k=b[a-1];if(h>=k[1]&&(!d.length||h<=(d[a-1][1]))){m.storeIndex=a-1;m.storeField=g.yField[c];m.storeItem=g.chart.getChartStore().getAt(a-1);m._points=d.length?[k,d[a-1]]:[k];return true}else{break}}}return false},highlightSeries:function(){var a,c,b;if(this._index!==undefined){a=this.areas[this._index];if(a.__highlightAnim){a.__highlightAnim.paused=true}a.__highlighted=true;a.__prevOpacity=a.__prevOpacity||a.attr.opacity||1;a.__prevFill=a.__prevFill||a.attr.fill;a.__prevLineWidth=a.__prevLineWidth||a.attr.lineWidth;b=Ext.draw.Color.fromString(a.__prevFill);c={lineWidth:(a.__prevLineWidth||0)+2};if(b){c.fill=b.getLighter(0.2).toString()}else{c.opacity=Math.max(a.__prevOpacity-0.3,0)}if(this.chart.animate){a.__highlightAnim=new Ext.fx.Anim(Ext.apply({target:a,to:c},this.chart.animate))}else{a.setAttributes(c,true)}}},unHighlightSeries:function(){var a;if(this._index!==undefined){a=this.areas[this._index];if(a.__highlightAnim){a.__highlightAnim.paused=true}if(a.__highlighted){a.__highlighted=false;a.__highlightAnim=new Ext.fx.Anim({target:a,to:{fill:a.__prevFill,opacity:a.__prevOpacity,lineWidth:a.__prevLineWidth}})}}},highlightItem:function(c){var b=this,a,d;if(!c){this.highlightSeries();return}a=c._points;d=a.length==2?["M",a[0][0],a[0][1],"L",a[1][0],a[1][1]]:["M",a[0][0],a[0][1],"L",a[0][0],b.bbox.y+b.bbox.height];b.highlightSprite.setAttributes({path:d,hidden:false},true)},unHighlightItem:function(a){if(!a){this.unHighlightSeries()}if(this.highlightSprite){this.highlightSprite.hide(true)}},hideAll:function(a){var b=this;a=(isNaN(b._index)?a:b._index)||0;b.__excludes[a]=true;b.areas[a].hide(true);b.redraw()},showAll:function(a){var b=this;a=(isNaN(b._index)?a:b._index)||0;b.__excludes[a]=false;b.areas[a].show(true);b.redraw()},redraw:function(){var a=this,b;b=a.chart.legend.rebuild;a.chart.legend.rebuild=false;a.chart.redraw();a.chart.legend.rebuild=b},hide:function(){if(this.areas){var h=this,b=h.areas,d,c,a,g,e;if(b&&b.length){for(d=0,g=b.length;d0)][R]+=n(L)}}y[+(r>0)].push(n(r));y[+(H>0)].push(n(H));g=k.apply(w,y[0]);d=k.apply(w,y[1]);B=(K?q.height-P.height:q.width-P.width)/(d+g);a=a+g*B*(K?-1:1)}else{if(H/r<0){a=a-H*B*(K?-1:1)}}if(o.boundColumn){u=T.axes.get(I.xAxis);if(u){Q=u.applyData();J=Q.from;t=Q.to}if(o.xField&&!Ext.isNumber(J)){G=o.getMinMaxYValues();J=G[0];t=G[1]}if(!Ext.isNumber(J)){J=0}if(!Ext.isNumber(t)){t=0}s=o.getGutters();M=(q.width-(s.lower+s.upper))/((t-J)||1);h=q.x+s.lower;l=[];for(R=0,z=S.length;R=0){ab+=aa}else{C+=aa}e=Math.round((aa-o(G.minY,0))*G.scale);X=h+(v>1?U:0);r={fill:O[X%k]};if(N){Ext.apply(r,{height:e,width:o(G.groupBarWidth,0),x:(u.boundColumn?G.barsLoc[W]:(x.x+V.left+(A-K)*0.5+W*A*(1+m)+g*G.groupBarWidth*(1+c)*!S)),y:a-e})}else{M=(E-1)-W;Ext.apply(r,{height:o(G.groupBarWidth,0),width:e+(a==G.zero),x:a+(a!=G.zero),y:(x.y+V.top+(A-K)*0.5+M*A*(1+m)+g*G.groupBarWidth*(1+c)*!S+1)})}if(e<0){if(N){r.y=l;r.height=t(e)}else{r.x=l+e;r.width=t(e)}}if(S){if(e<0){l+=e*(N?-1:1)}else{a+=e*(N?-1:1)}J+=t(e);if(e<0){D+=t(e)}}r.x=Math.floor(r.x)+1;H=Math.floor(r.y);if(Ext.isIE8m&&r.y>H){H--}r.y=H;r.width=Math.floor(r.width);r.height=Math.floor(r.height);y.push({series:u,yField:P[U],storeItem:L,value:[L.get(u.xField),aa],attr:r,point:N?[r.x+r.width/2,aa>=0?r.y:r.y+r.height]:[aa>=0?r.x+r.width:r.x,r.y+r.height/2]});if(T&&Z.resizing){p=N?{x:r.x,y:G.zero,width:r.width,height:0}:{x:G.zero,y:r.y,width:0,height:r.height};if(n&&(S&&!s||!S)){s=true;for(d=0;d=0?(l.y-v.y):(v.y+v.height-l.y-l.height));if(zl.height){q=k}}if(!C){C=l.y;if(R>=0){switch(q){case r:C+=l.height+(N?-F:-c/2);break;case P:C+=(N?c+H:c/2);break;case k:C+=(N?-F:-c/2);break}}else{switch(q){case r:C+=(N?c+F:c/2);break;case P:C+=(N?l.height-F:l.height-c/2);break;case k:C+=(N?l.height+c+F:l.height+c/2);break}}}}else{if(!a||!c||(K&&!l.width)){J.hide(true);return}C=l.y+(N?(d+c)/2:d/2);if(q==k){var z=(R>=0?(v.x+v.width-l.x-l.width):(l.x-v.x));if(zl.width){if(K){if(c>l.width){J.hide(true);return}E=l.x+l.width/2;C=l.y+l.height-(l.height-a)/2;N=true}else{q=k}}}if(!E){E=l.x;if(R>=0){switch(q){case r:E+=(N?a/2:H);break;case P:E+=l.width+(N?-a/2:-a-H);break;case k:E+=l.width+(N?a/2:H);break}}else{switch(q){case r:E+=l.width+(N?-a/2:-a-H);break;case P:E+=(N?a/2:H);break;case k:E+=(N?-a/2:-a-H);break}}}}}else{if(q==G||q==o){if(K&&h){s=J.attr.text;J.setAttributes({style:Ext.applyIf((J.attr&&J.attr.style)||{},{"font-weight":"bold","font-size":"14px"})});g=m.getLabelSize(s,J.attr.style);a=g.width;c=g.height;switch(q){case G:if(I){E=l.x+(N?d/2:(d-a)/2);C=b-(t.totalDim-t.totalNegDim)-c/2-F}else{E=b+(t.totalDim-t.totalNegDim)+H;C=l.y+(N?(d+c)/2:d/2)}break;case o:if(I){E=l.x+(N?d/2:(d-a)/2);C=b+t.totalNegDim+c/2}else{E=b-t.totalNegDim-a-H;C=l.y+(N?(d+c)/2:d/2)}break}}}}if(E==undefined||C==undefined){J.hide(true);return}J.isOutside=(q==k);J.setAttributes({text:s});A={x:E,y:C};if(N){A.rotate={x:E,y:C,degrees:270}}if(L&&D){if(I){E=l.x+l.width/2;C=b}else{E=b;C=l.y+l.height/2}J.setAttributes({x:E,y:C},true);if(N){J.setAttributes({rotate:{x:E,y:C,degrees:270}},true)}}if(L){m.onAnimate(J,{to:A})}else{J.setAttributes(Ext.apply(A,{hidden:false}),true)}},getLabelSize:function(i,g){var l=this.testerLabel,a=this.label,d=Ext.apply({},a,g,this.seriesLabelStyle||{}),b=a.orientation==="vertical",k,j,e,c;if(!l){l=this.testerLabel=this.chart.surface.add(Ext.apply({type:"text",opacity:0},d))}l.setAttributes({style:g,text:i},true);k=l.getBBox();j=k.width;e=k.height;return{width:b?e:j,height:b?j:e}},onAnimate:function(b,a){b.show();return this.callParent(arguments)},isItemInPoint:function(a,d,b){var c=b.sprite.getBBox();return c.x<=a&&c.y<=d&&(c.x+c.width)>=a&&(c.y+c.height)>=d},hideAll:function(a){var e=this.chart.axes,c=e.items,d=c.length,b=0;a=(isNaN(this._index)?a:this._index)||0;if(!this.__excludes){this.__excludes=[]}this.__excludes[a]=true;this.drawSeries();for(b;b0){d.yField.push(e[0].get(b.field))}},getSegment:function(b){var C=this,B=C.rad,d=Math.cos,a=Math.sin,n=Math.abs,k=C.centerX,i=C.centerY,w=0,v=0,u=0,s=0,h=0,g=0,e=0,c=0,z=0.01,m=b.endRho-b.startRho,q=b.startAngle,p=b.endAngle,j=(q+p)/2*B,l=b.margin||0,t=n(p-q)>180,D=Math.min(q,p)*B,A=Math.max(q,p)*B,o=false;k+=l*d(j);i+=l*a(j);w=k+b.startRho*d(D);h=i+b.startRho*a(D);v=k+b.endRho*d(D);g=i+b.endRho*a(D);u=k+b.startRho*d(A);e=i+b.startRho*a(A);s=k+b.endRho*d(A);c=i+b.endRho*a(A);if(n(w-u)<=z&&n(h-e)<=z){o=true}if(o){return{path:[["M",w,h],["L",v,g],["A",b.endRho,b.endRho,0,+t,1,s,c],["Z"]]}}else{return{path:[["M",w,h],["L",v,g],["A",b.endRho,b.endRho,0,+t,1,s,c],["L",u,e],["A",b.startRho,b.startRho,0,+t,0,w,h],["Z"]]}}},calcMiddle:function(p){var k=this,l=k.rad,o=p.slice,n=k.centerX,m=k.centerY,j=o.startAngle,e=o.endAngle,i=Math.max(("rho" in o)?o.rho:k.radius,k.label.minMargin),h=+k.donut,b=Math.min(j,e)*l,a=Math.max(j,e)*l,d=-(b+(a-b)/2),g=n+(p.endRho+p.startRho)/2*Math.cos(d),c=m-(p.endRho+p.startRho)/2*Math.sin(d);p.middle={x:g,y:c}},drawSeries:function(){var w=this,U=w.chart,b=U.getChartStore(),A=w.group,Q=w.chart.animate,D=w.chart.axes.get(0),E=D&&D.minimum||w.minimum||0,I=D&&D.maximum||w.maximum||0,n=w.angleField||w.field||w.xField,K=U.surface,H=U.chartBBox,h=w.rad,c=+w.donut,V={},B=[],m=w.seriesStyle,a=w.seriesLabelStyle,g=w.colorArrayStyle,z=g&&g.length||0,k=Math.cos,s=Math.sin,t,e,d,v,r,C,M,F,G,J,S,R,l,T,x,o,O,P,q,y,u,N,L;Ext.apply(m,w.style||{});w.setBBox();y=w.bbox;if(w.colorSet){g=w.colorSet;z=g.length}if(!b||!b.getCount()||w.seriesIsHidden){w.hide();w.items=[];return}e=w.centerX=H.x+(H.width/2);d=w.centerY=H.y+H.height;w.radius=Math.min(e-H.x,d-H.y);w.slices=r=[];w.items=B=[];if(!w.value){J=b.getAt(0);w.value=J.get(n)}M=w.value;if(w.needle){N={series:w,value:M,startAngle:-180,endAngle:0,rho:w.radius};u=-180*(1-(M-E)/(I-E));r.push(N)}else{u=-180*(1-(M-E)/(I-E));N={series:w,value:M,startAngle:-180,endAngle:u,rho:w.radius};L={series:w,value:w.maximum-M,startAngle:u,endAngle:0,rho:w.radius};r.push(N,L)}for(S=0,G=r.length;S=g&&b=n.startRho&&k<=n.endRho)},getLegendColor:function(b){var a=this.colorSet||this.colorArrayStyle;return a[b%a.length]}});Ext.define("Ext.chart.series.Line",{extend:Ext.chart.series.Cartesian,alternateClassName:["Ext.chart.LineSeries","Ext.chart.LineChart"],type:"line",alias:"series.line",selectionTolerance:20,showMarkers:true,markerConfig:{},style:{},smooth:false,defaultSmoothness:3,fill:false,constructor:function(c){this.callParent(arguments);var e=this,a=e.chart.surface,g=e.chart.shadow,d,b;c.highlightCfg=Ext.Object.merge({"stroke-width":3},c.highlightCfg);Ext.apply(e,c,{shadowAttributes:[{"stroke-width":6,"stroke-opacity":0.05,stroke:"rgb(0, 0, 0)",translate:{x:1,y:1}},{"stroke-width":4,"stroke-opacity":0.1,stroke:"rgb(0, 0, 0)",translate:{x:1,y:1}},{"stroke-width":2,"stroke-opacity":0.15,stroke:"rgb(0, 0, 0)",translate:{x:1,y:1}}]});e.group=a.getGroup(e.seriesId);if(e.showMarkers){e.markerGroup=a.getGroup(e.seriesId+"-markers")}if(g){for(d=0,b=e.shadowAttributes.length;daw.width){a=ap.shrink(aD,ag,aw.width);aD=a.x;ag=a.y}ap.items=[];m=0;aB=aD.length;for(R=0;Ra.x+a.width)?(k-(k+o-a.x-a.width)):k;j=(j-na.x+a.width)?(k-(k+o-a.x-a.width)):k;j=j-na.y+a.height)?(j-(j+n-a.y-a.height)):j}}if(v.chart.animate&&!v.chart.resizing){h.show(true);v.onAnimate(h,{to:{x:k,y:j}})}else{h.setAttributes({x:k,y:j},true);if(s&&v.animation){v.animation.on("afteranimate",function(){h.show(true)})}else{h.show(true)}}},highlightItem:function(){var b=this,a=b.line;b.callParent(arguments);if(a&&!b.highlighted){if(!("__strokeWidth" in a)){a.__strokeWidth=parseFloat(a.attr["stroke-width"])||0}if(a.__anim){a.__anim.paused=true}a.__anim=new Ext.fx.Anim({target:a,to:{"stroke-width":a.__strokeWidth+3}});b.highlighted=true}},unHighlightItem:function(){var c=this,a=c.line,b;c.callParent(arguments);if(a&&c.highlighted){b=a.__strokeWidth||parseFloat(a.attr["stroke-width"])||0;a.__anim=new Ext.fx.Anim({target:a,to:{"stroke-width":b}});c.highlighted=false}},onPlaceCallout:function(m,r,J,G,F,d,k){if(!F){return}var M=this,s=M.chart,D=s.surface,H=s.resizing,L=M.callouts,t=M.items,v=G==0?false:t[G-1].point,z=(G==t.length-1)?false:t[G+1].point,c=[+J.point[0],+J.point[1]],A,g,N,K,o,q,I=L.offsetFromViz||30,C=L.offsetToSide||10,B=L.offsetBox||3,h,e,j,w,u,E=M.clipRect,b={width:L.styles.width||10,height:L.styles.height||10},n,l;if(!v){v=c}if(!z){z=c}K=(z[1]-v[1])/(z[0]-v[0]);o=(c[1]-v[1])/(c[0]-v[0]);q=(z[1]-c[1])/(z[0]-c[0]);g=Math.sqrt(1+K*K);A=[1/g,K/g];N=[-A[1],A[0]];if(o>0&&q<0&&N[1]<0||o<0&&q>0&&N[1]>0){N[0]*=-1;N[1]*=-1}else{if(Math.abs(o)Math.abs(q)&&N[0]>0){N[0]*=-1;N[1]*=-1}}n=c[0]+N[0]*I;l=c[1]+N[1]*I;h=n+(N[0]>0?0:-(b.width+2*B));e=l-b.height/2-B;j=b.width+2*B;w=b.height+2*B;if(h(E[0]+E[2])){N[0]*=-1}if(e(E[1]+E[3])){N[1]*=-1}n=c[0]+N[0]*I;l=c[1]+N[1]*I;h=n+(N[0]>0?0:-(b.width+2*B));e=l-b.height/2-B;j=b.width+2*B;w=b.height+2*B;if(s.animate){M.onAnimate(m.lines,{to:{path:["M",c[0],c[1],"L",n,l,"Z"]}});if(m.panel){m.panel.setPosition(h,e,true)}}else{m.lines.setAttributes({path:["M",c[0],c[1],"L",n,l,"Z"]},true);if(m.panel){m.panel.setPosition(h,e)}}for(u in m){m[u].show(true)}},isItemInPoint:function(j,g,A,q){var C=this,n=C.items,s=C.selectionTolerance,k=null,z,c,p,v,h,w,b,t,a,l,B,e,d,o,u,r,D=Math.sqrt,m=Math.abs;c=n[q];z=q&&n[q-1];if(q>=h){z=n[h-1]}p=z&&z.point;v=c&&c.point;w=z?p[0]:v[0]-s;b=z?p[1]:v[1];t=c?v[0]:p[0]+s;a=c?v[1]:p[1];e=D((j-w)*(j-w)+(g-b)*(g-b));d=D((j-t)*(j-t)+(g-a)*(g-a));o=Math.min(e,d);if(o<=s){return o==e?z:c}return false},toggleAll:function(a){var e=this,b,d,g,c;if(!a){Ext.chart.series.Cartesian.prototype.hideAll.call(e)}else{Ext.chart.series.Cartesian.prototype.showAll.call(e)}if(e.line){e.line.setAttributes({hidden:!a},true);if(e.line.shadows){for(b=0,c=e.line.shadows,d=c.length;b1?T:U)%w]}||{}));D=Ext.apply({},o.segment,{slice:r,series:s,storeItem:r.storeItem,index:U});s.calcMiddle(D);if(g){D.shadows=r.shadowAttrs[T]}y[U]=D;if(!z){m=Ext.apply({type:"path",group:x,middle:D.middle},Ext.apply(h,e&&{fill:e[(K>1?T:U)%w]}||{}));z=J.add(Ext.apply(m,o))}r.sprite=r.sprite||[];D.sprite=z;r.sprite.push(z);r.point=[D.middle.x,D.middle.y];if(S){o=s.renderer(z,a.getAt(U),o,U,a);z._to=o;z._animating=true;s.onAnimate(z,{to:o,listeners:{afteranimate:{fn:function(){this._animating=false},scope:z}}})}else{o=s.renderer(z,a.getAt(U),Ext.apply(o,{hidden:false}),U,a);z.setAttributes(o,true)}B+=q}}F=x.getCount();for(U=0;U>0]&&x.getAt(U)){x.getAt(U).hide(true)}}if(g){aa=Q.length;for(E=0;E>0]){for(T=0;T90&&v<270)?v+180:v;h=k.attr.rotation.degrees;if(h!=null&&Math.abs(h-v)>180*0.5){if(v>h){v-=360}else{v+=360}v=v%360}else{v=a(v)}b.rotate={degrees:v,x:b.x,y:b.y};break;default:break}b.translate={x:0,y:0};if(e&&!w&&(s!="rotate"||h!=null)){B.onAnimate(k,{to:b})}else{k.setAttributes(b,true)}k._from=r},onPlaceCallout:function(l,o,z,v,u,d,e){var A=this,q=A.chart,j=A.centerX,h=A.centerY,B=z.middle,b={x:B.x,y:B.y},m=B.x-j,k=B.y-h,c=1,n,g=Math.atan2(k,m||1),a=(l&&l.label?l.label.getBBox():{width:0,height:0}),w=20,t=10,s=10,r;if(!a.width||!a.height){return}c=z.endRho+w;n=(z.endRho+z.startRho)/2+(z.endRho-z.startRho)/3;b.x=c*Math.cos(g)+j;b.y=c*Math.sin(g)+h;m=n*Math.cos(g);k=n*Math.sin(g);if(q.animate){A.onAnimate(l.lines,{to:{path:["M",m+j,k+h,"L",b.x,b.y,"Z","M",b.x,b.y,"l",m>0?t:-t,0,"z"]}});A.onAnimate(l.box,{to:{x:b.x+(m>0?t:-(t+a.width+2*s)),y:b.y+(k>0?(-a.height-s/2):(-a.height-s/2)),width:a.width+2*s,height:a.height+2*s}});A.onAnimate(l.label,{to:{x:b.x+(m>0?(t+s):-(t+a.width+s)),y:b.y+(k>0?-a.height/4:-a.height/4)}})}else{l.lines.setAttributes({path:["M",m+j,k+h,"L",b.x,b.y,"Z","M",b.x,b.y,"l",m>0?t:-t,0,"z"]},true);l.box.setAttributes({x:b.x+(m>0?t:-(t+a.width+2*s)),y:b.y+(k>0?(-a.height-s/2):(-a.height-s/2)),width:a.width+2*s,height:a.height+2*s},true);l.label.setAttributes({x:b.x+(m>0?(t+s):-(t+a.width+s)),y:b.y+(k>0?-a.height/4:-a.height/4)},true)}for(r in l){l[r].show(true)}},onAnimate:function(b,a){b.show();return this.callParent(arguments)},isItemInPoint:function(l,j,n,e){var h=this,d=h.centerX,c=h.centerY,p=Math.abs,o=p(l-d),m=p(j-c),g=n.startAngle,a=n.endAngle,k=Math.sqrt(o*o+m*m),b=Math.atan2(j-c,l-d)/h.rad;if(b>h.firstAngle){b-=h.accuracy}return(b<=g&&b>a&&k>=n.startRho&&k<=n.endRho)},hideAll:function(c){var g,b,j,h,e,a,d;c=(isNaN(this._index)?c:this._index)||0;this.__excludes=this.__excludes||[];this.__excludes[c]=true;d=this.slices[c].sprite;for(e=0,a=d.length;ea.x+a.width)?(k-(k+o-a.x-a.width)):k;j=(j-na.x+a.width)?(k-(k+o-a.x-a.width)):k;j=j-na.y+a.height)?(j-(j+n-a.y-a.height)):j}}if(!m.animate){h.setAttributes({x:k,y:j},true);h.show(true)}else{if(t){p=u.sprite.getActiveAnimation();if(p){p.on("afteranimate",function(){h.setAttributes({x:k,y:j},true);h.show(true)})}else{h.show(true)}}else{w.onAnimate(h,{to:{x:k,y:j}})}}},onPlaceCallout:function(k,m,B,z,w,c,h){var E=this,n=E.chart,u=n.surface,A=n.resizing,D=E.callouts,o=E.items,b=B.point,F,a=k.label.getBBox(),C=30,t=10,s=3,e,d,g,r,q,v=E.bbox,l,j;F=[Math.cos(Math.PI/4),-Math.sin(Math.PI/4)];l=b[0]+F[0]*C;j=b[1]+F[1]*C;e=l+(F[0]>0?0:-(a.width+2*s));d=j-a.height/2-s;g=a.width+2*s;r=a.height+2*s;if(e(v[0]+v[2])){F[0]*=-1}if(d(v[1]+v[3])){F[1]*=-1}l=b[0]+F[0]*C;j=b[1]+F[1]*C;e=l+(F[0]>0?0:-(a.width+2*s));d=j-a.height/2-s;g=a.width+2*s;r=a.height+2*s;if(n.animate){E.onAnimate(k.lines,{to:{path:["M",b[0],b[1],"L",l,j,"Z"]}},true);E.onAnimate(k.box,{to:{x:e,y:d,width:g,height:r}},true);E.onAnimate(k.label,{to:{x:l+(F[0]>0?s:-(a.width+s)),y:j}},true)}else{k.lines.setAttributes({path:["M",b[0],b[1],"L",l,j,"Z"]},true);k.box.setAttributes({x:e,y:d,width:g,height:r},true);k.label.setAttributes({x:l+(F[0]>0?s:-(a.width+s)),y:j},true)}for(q in k){k[q].show(true)}},onAnimate:function(b,a){b.show();return this.callParent(arguments)},isItemInPoint:function(c,h,e){var b,d=10,a=Math.abs;function g(i){var k=a(i[0]-c),j=a(i[1]-h);return Math.sqrt(k*k+j*j)}b=e.point;return(b[0]-d<=c&&b[0]+d>=c&&b[1]-d<=h&&b[1]+d>=h)}});Ext.define("Ext.layout.container.Table",{alias:["layout.table"],extend:Ext.layout.container.Container,alternateClassName:"Ext.layout.TableLayout",monitorResize:false,type:"table",createsInnerCt:true,targetCls:Ext.baseCSSPrefix+"table-layout-ct",tableCls:Ext.baseCSSPrefix+"table-layout",cellCls:Ext.baseCSSPrefix+"table-layout-cell",tableAttrs:null,getItemSizePolicy:function(a){return this.autoSizePolicy},initHierarchyState:function(a){a.inShrinkWrapTable=true},getLayoutItems:function(){var g=this,b=[],c=g.callParent(),e,a=c.length,d;for(d=0;d=h||n[d]>0){if(d>=h){d=0;a=0;b++;for(c=0;c0){n[c]--}}}else{d++}}m.push({rowIdx:b,cellIdx:a});for(c=l.colspan||1;c;--c){n[d]=l.rowspan||1;++d}++a}return m},getRenderTree:function(){var k=this,h=k.getLayoutItems(),o,p=[],q=Ext.apply({tag:"table",role:"presentation",cls:k.tableCls,cellspacing:0,cellpadding:0,cn:{tag:"tbody",cn:p}},k.tableAttrs),c=k.tdAttrs,d=k.needsDivWrap(),e,g=h.length,n,m,j,b,a,l;o=k.calculateCells(h);for(e=0;e0){--this.disabled}},handleAdd:function(b,a){if(!this.disabled){if(a.is(this.selector)){this.onItemAdd(a.ownerCt,a)}if(a.isContainer){this.onContainerAdd(a)}}},onItemAdd:function(c,b){var e=this,a=e.items,d=e.addHandler;if(!e.disabled){if(d){d.call(e.scope||b,b)}if(a){a.add(b)}}},onItemRemove:function(c,b){var e=this,a=e.items,d=e.removeHandler;if(!e.disabled){if(d){d.call(e.scope||b,b)}if(a){a.remove(b)}}},onContainerAdd:function(g,b){var k=this,j,h,c=k.handleAdd,a=k.handleRemove,d,e;g.on("add",c,k);g.on("dockedadd",c,k);g.on("remove",a,k);g.on("dockedremove",a,k);if(b!==true){j=g.query(k.selector);for(d=0,h=j.length;d]+>/gi,asText:function(a){return String(a).replace(this.stripTagsRE,"")},asUCText:function(a){return String(a).toUpperCase().replace(this.stripTagsRE,"")},asUCString:function(a){return String(a).toUpperCase()},asDate:function(a){if(!a){return 0}if(Ext.isDate(a)){return a.getTime()}return Date.parse(String(a))},asFloat:function(a){var b=parseFloat(String(a).replace(/,/g,""));return isNaN(b)?0:b},asInt:function(a){var b=parseInt(String(a).replace(/,/g,""),10);return isNaN(b)?0:b}});Ext.define("Ext.data.Types",{singleton:true},function(){var a=Ext.data.SortTypes;Ext.apply(Ext.data.Types,{stripRe:/[\$,%]/g,AUTO:{sortType:a.none,type:"auto"},STRING:{convert:function(c){var b=this.useNull?null:"";return(c===undefined||c===null)?b:String(c)},sortType:a.asUCString,type:"string"},INT:{convert:function(b){if(typeof b=="number"){return parseInt(b)}return b!==undefined&&b!==null&&b!==""?parseInt(String(b).replace(Ext.data.Types.stripRe,""),10):(this.useNull?null:0)},sortType:a.none,type:"int"},FLOAT:{convert:function(b){if(typeof b==="number"){return b}return b!==undefined&&b!==null&&b!==""?parseFloat(String(b).replace(Ext.data.Types.stripRe,""),10):(this.useNull?null:0)},sortType:a.none,type:"float"},BOOL:{convert:function(b){if(typeof b==="boolean"){return b}if(this.useNull&&(b===undefined||b===null||b==="")){return null}return b===true||b==="true"||b==1},sortType:a.none,type:"bool"},DATE:{convert:function(c){var d=this.dateReadFormat||this.dateFormat,b;if(!c){return null}if(c instanceof Date){return c}if(d){return Ext.Date.parse(c,d)}b=Date.parse(c);return b?new Date(b):null},sortType:a.asDate,type:"date"}});Ext.apply(Ext.data.Types,{BOOLEAN:this.BOOL,INTEGER:this.INT,NUMBER:this.FLOAT})});Ext.define("Ext.data.Field",{alias:"data.field",isField:true,constructor:function(b){var d=this,c=Ext.data.Types,a;if(Ext.isString(b)){b={name:b}}Ext.apply(d,b);a=d.sortType;if(d.type){if(Ext.isString(d.type)){d.type=c[d.type.toUpperCase()]||c.AUTO}}else{d.type=c.AUTO}if(Ext.isString(a)){d.sortType=Ext.data.SortTypes[a]}else{if(Ext.isEmpty(a)){d.sortType=d.type.sortType}}if(!b.hasOwnProperty("convert")){d.convert=d.type.convert}else{if(!d.convert&&d.type.convert&&!b.hasOwnProperty("defaultValue")){d.defaultValue=d.type.convert(d.defaultValue)}}if(b.convert){d.hasCustomConvert=true}},dateFormat:null,dateReadFormat:null,dateWriteFormat:null,useNull:false,defaultValue:"",mapping:null,sortType:null,sortDir:"ASC",allowBlank:true,persist:true});Ext.define("Ext.data.Errors",{extend:Ext.util.MixedCollection,isValid:function(){return this.length===0},getByField:function(d){var c=[],a,b;for(b=0;ba)){return false}else{return true}},email:function(b,a){return Ext.data.validations.emailRe.test(a)},format:function(a,b){return !!(a.matcher&&a.matcher.test(b))},inclusion:function(a,b){return a.list&&Ext.Array.indexOf(a.list,b)!=-1},exclusion:function(a,b){return a.list&&Ext.Array.indexOf(a.list,b)==-1}});Ext.define("Ext.data.Model",{alternateClassName:"Ext.data.Record",mixins:{observable:Ext.util.Observable},compareConvertFields:function(a,d){var c=a.convert&&a.type&&a.convert!==a.type.convert,b=d.convert&&d.type&&d.convert!==d.type.convert;if(c&&!b){return 1}if(!c&&b){return -1}return 0},itemNameFn:function(a){return a.name},onClassExtended:function(b,c,a){var d=a.onBeforeCreated;a.onBeforeCreated=function(g,F){var E=this,G=Ext.getClassName(g),t=g.prototype,z=g.prototype.superclass,j=F.validations||[],v=F.fields||[],h,o=F.associations||[],e=function(I,K){var J=0,H,L;if(I){I=Ext.Array.from(I);for(H=I.length;J0;if(e){c.afterEdit(d)}}}},getModifiedFieldNames:function(d){var c=this,e=c[c.persistenceProperty],a=[],b;d=d||c.dataSave;for(b in e){if(e.hasOwnProperty(b)){if(!c.isEqual(e[b],d[b])){a.push(b)}}}return a},getChanges:function(){var a=this.modified,b={},c;for(c in a){if(a.hasOwnProperty(c)){b[c]=this.get(c)}}return b},isModified:function(a){return this.modified.hasOwnProperty(a)},setDirty:function(){var c=this,a=c.fields.items,g=a.length,e,b,d;c.dirty=true;for(d=0;d0){b=p.data.items;h=b.length;for(r=0;r0;if(k){if(d){v[c]=t[0].property;v[m]=t[0].direction||"ASC"}else{v[c]=w.encodeSorters(t)}}if(e&&a&&a.length>0){if(l){j=0;if(a.length>1&&k){j=1}v[e]=a[j].property;v[o]=a[j].direction}else{v[e]=w.encodeSorters(a)}}if(q&&n&&n.length>0){v[q]=w.encodeFilters(n)}return v},buildUrl:function(c){var b=this,a=b.getUrl(c);if(b.noCache){a=Ext.urlAppend(a,Ext.String.format("{0}={1}",b.cacheString,Ext.Date.now()))}return a},getUrl:function(a){return a.url||this.api[a.action]||this.url},doRequest:function(a,c,b){},afterRequest:Ext.emptyFn,onDestroy:function(){Ext.destroy(this.reader,this.writer)}});Ext.define("Ext.data.proxy.Ajax",{extend:Ext.data.proxy.Server,alias:"proxy.ajax",alternateClassName:["Ext.data.HttpProxy","Ext.data.AjaxProxy"],actionMethods:{create:"POST",read:"GET",update:"POST",destroy:"POST"},binary:false,doRequest:function(a,e,b){var d=this.getWriter(),c=this.buildRequest(a);if(a.allowWrite()){c=d.write(c)}Ext.apply(c,{binary:this.binary,headers:this.headers,timeout:this.timeout,scope:this,callback:this.createRequestCallback(c,a,e,b),method:this.getMethod(c),disableCaching:false});Ext.Ajax.request(c);return c},getMethod:function(a){return this.actionMethods[a.action]},createRequestCallback:function(d,a,e,b){var c=this;return function(h,i,g){c.processResponse(i,a,d,g,e,b)}}},function(){Ext.data.HttpProxy=this});Ext.define("Ext.data.proxy.Client",{extend:Ext.data.proxy.Proxy,alternateClassName:"Ext.data.ClientProxy",isSynchronous:true,clear:function(){}});Ext.define("Ext.data.proxy.Memory",{extend:Ext.data.proxy.Client,alias:"proxy.memory",alternateClassName:"Ext.data.MemoryProxy",constructor:function(a){this.callParent([a]);this.setReader(this.reader)},updateOperation:function(b,g,d){var c=0,e=b.getRecords(),a=e.length;for(c;c=h.total){h.success=false;h.count=0;h.records=[]}else{h.records=Ext.Array.slice(h.records,c.start,c.start+c.limit);h.count=h.records.length}}}if(h.success){c.setSuccessful()}else{g.fireEvent("exception",g,null,c)}Ext.callback(i,j||g,[c])},clear:Ext.emptyFn});Ext.define("Ext.util.LruCache",{extend:Ext.util.HashMap,constructor:function(a){Ext.apply(this,a);this.callParent([a])},add:function(b,e){var d=this,a=d.findKey(e),c;if(a){d.unlinkEntry(c=d.map[a]);c.prev=d.last;c.next=null}else{c={prev:d.last,next:null,key:b,value:e}}if(d.last){d.last.next=c}else{d.first=c}d.last=c;d.callParent([b,c]);d.prune();return e},insertBefore:function(b,g,c){var e=this,a,d;if(c=this.map[this.findKey(c)]){a=e.findKey(g);if(a){e.unlinkEntry(d=e.map[a])}else{d={prev:c.prev,next:c,key:b,value:g}}if(c.prev){d.prev.next=d}else{e.first=d}d.next=c;c.prev=d;e.prune();return g}else{return e.add(b,g)}},get:function(a){var b=this.map[a];if(b){if(b.next){this.moveToEnd(b)}return b.value}},removeAtKey:function(a){this.unlinkEntry(this.map[a]);return this.callParent(arguments)},clear:function(a){this.first=this.last=null;return this.callParent(arguments)},unlinkEntry:function(a){if(a){if(a.next){a.next.prev=a.prev}else{this.last=a.prev}if(a.prev){a.prev.next=a.next}else{this.first=a.next}a.prev=a.next=null}},moveToEnd:function(a){this.unlinkEntry(a);if(a.prev=this.last){this.last.next=a}else{this.first=a}this.last=a},getArray:function(c){var a=[],b=this.first;while(b){a.push(c?b.key:b.value);b=b.next}return a},each:function(c,b,a){var g=this,e=a?g.last:g.first,d=g.length;b=b||g;while(e){if(c.call(b,e.key,e.value,d)===false){break}e=a?e.prev:e.next}return g},findKey:function(b){var a,c=this.map;for(a in c){if(c.hasOwnProperty(a)&&c[a].value===b){return a}}return undefined},clone:function(){var a=new this.self(this.initialConfig),c=this.map,b;a.suspendEvents();for(b in c){if(c.hasOwnProperty(b)){a.add(b,c[b].value)}}a.resumeEvents();return a},prune:function(){var a=this,b=a.maxSize?(a.length-a.maxSize):0;if(b>0){for(;a.first&&b;b--){a.removeAtKey(a.first.key)}}}});Ext.define("Ext.data.Group",{extend:Ext.util.Observable,key:undefined,dirty:true,constructor:function(){this.callParent(arguments);this.records=[]},contains:function(a){return Ext.Array.indexOf(this.records,a)},add:function(a){Ext.Array.push(this.records,a);this.dirty=true},remove:function(b){if(!Ext.isArray(b)){b=[b]}var a=b.length,c;for(c=0;c0){this.sort(a.items,"prepend",false)}},decodeGroupers:function(e){if(!Ext.isArray(e)){if(e===undefined){e=[]}else{e=[e]}}var d=e.length,g=Ext.util.Grouper,b,c,a=[];for(c=0;c0},fireGroupChange:function(){this.fireEvent("groupchange",this,this.groupers)},getGroups:function(b){var d=this.data.items,a=d.length,c=[],k={},g,h,j,e;for(e=0;e-1){q.push({record:b,index:g})}if(d){d.remove(b)}}q=Ext.Array.sort(q,function(v,i){var x=v.index,w=i.index;return x===i.index2?0:(xb-1)?b-1:d.prefetchEnd,c;a=Math.max(0,a);c=e.data.getRange(g,a);if(d.fireEvent!==false){e.fireEvent("guaranteedrange",c,g,a,d)}if(d.callback){d.callback.call(d.scope||e,c,g,a,d)}},guaranteeRange:function(e,a,d,c,b){b=Ext.apply({callback:d,scope:c},b);this.getRange(e,a,b)},prefetchRange:function(g,b){var d=this,c,a,e;if(!d.rangeCached(g,b)){c=d.getPageFromRecordIndex(g);a=d.getPageFromRecordIndex(b);d.data.maxSize=d.purgePageCount?(a-c+1)+d.purgePageCount:0;for(e=c;e<=a;e++){if(!d.pageCached(e)){d.prefetchPage(e)}}}},primeCache:function(d,a,c){var b=this;if(c===-1){d=Math.max(d-b.leadingBufferZone,0);a=Math.min(a+b.trailingBufferZone,b.totalCount-1)}else{if(c===1){d=Math.max(Math.min(d-b.trailingBufferZone,b.totalCount-b.pageSize),0);a=Math.min(a+b.leadingBufferZone,b.totalCount-1)}else{d=Math.min(Math.max(Math.floor(d-((b.leadingBufferZone+b.trailingBufferZone)/2)),0),b.totalCount-b.pageSize);a=Math.min(Math.max(Math.ceil(a+((b.leadingBufferZone+b.trailingBufferZone)/2)),0),b.totalCount-1)}}b.prefetchRange(d,a)},sort:function(){var a=this;if(a.buffered&&a.remoteSort){a.data.clear()}return a.callParent(arguments)},doSort:function(b){var e=this,a,d,c;if(e.remoteSort){if(e.buffered){e.data.clear();e.loadPage(1)}else{e.load()}}else{e.data.sortBy(b);if(!e.buffered){a=e.getRange();d=a.length;for(c=0;c=h.totalCount)?d:g;i=c===0?0:c-1;b=g===d?g:g+1;h.lastRequestStart=c;if(h.rangeCached(i,b)){h.onGuaranteedRange(k);j=h.data.getRange(c,g)}else{h.fireEvent("cachemiss",h,c,g);a=function(m,l){if(h.rangeCached(i,b)){h.fireEvent("cachefilled",h,c,g);h.data.un("pageAdded",a);h.onGuaranteedRange(k)}};h.data.on("pageAdded",a);h.prefetchRange(c,g)}h.primeCache(c,g,c0){c=b[0].get(g)}for(;d0){a=c[0].get(g)}for(;da){a=e}}return a},average:function(c,a){var b=this;if(a&&b.isGrouped()){return b.aggregate(b.getAverage,b,true,[c])}else{return b.getAverage(b.data.items,c)}},getAverage:function(b,e){var c=0,a=b.length,d=0;if(b.length>0){for(;c1){for(c=0,a=b.length;c0){g.timeout=setTimeout(Ext.bind(j.handleTimeout,j,[g]),m)}j.setupErrorHandling(g);j[l]=Ext.bind(j.handleResponse,j,[g],true);j.loadScript(g);return g},abort:function(c){var b=this,d=b.requests,a;if(c){if(!c.id){c=d[c]}b.handleAbort(c)}else{for(a in d){if(d.hasOwnProperty(a)){b.abort(d[a])}}}},setupErrorHandling:function(a){a.script.onerror=Ext.bind(this.handleError,this,[a])},handleAbort:function(a){a.errorType="abort";this.handleResponse(null,a)},handleError:function(a){a.errorType="error";this.handleResponse(null,a)},cleanupErrorHandling:function(a){a.script.onerror=null},handleTimeout:function(a){a.errorType="timeout";this.handleResponse(null,a)},handleResponse:function(a,b){var c=true;if(b.timeout){clearTimeout(b.timeout)}delete this[b.callbackName];delete this.requests[b.id];this.cleanupErrorHandling(b);Ext.fly(b.script).remove();if(b.errorType){c=false;Ext.callback(b.failure,b.scope,[b.errorType])}else{Ext.callback(b.success,b.scope,[a])}Ext.callback(b.callback,b.scope,[c,a,b.errorType]);Ext.EventManager.idleEvent.fire()},createScript:function(c,d,b){var a=document.createElement("script");a.setAttribute("src",Ext.urlAppend(c,Ext.Object.toQueryString(d)));a.setAttribute("async",true);a.setAttribute("type","text/javascript");return a},loadScript:function(a){Ext.getHead().appendChild(a.script)}});Ext.define("Ext.data.proxy.JsonP",{extend:Ext.data.proxy.Server,alternateClassName:"Ext.data.ScriptTagProxy",alias:["proxy.jsonp","proxy.scripttag"],defaultWriterType:"base",callbackKey:"callback",recordParam:"records",autoAppendParams:true,constructor:function(){this.addEvents("exception");this.callParent(arguments)},doRequest:function(a,g,b){var d=this,c=d.buildRequest(a),e=c.params;Ext.apply(c,{callbackKey:d.callbackKey,timeout:d.timeout,scope:d,disableCaching:false,callback:d.createRequestCallback(c,a,g,b)});if(d.autoAppendParams){c.params={}}c.jsonp=Ext.data.JsonP.request(c);c.params=e;a.setStarted();d.lastRequest=c;return c},createRequestCallback:function(d,a,e,b){var c=this;return function(i,g,h){delete c.lastRequest;c.processResponse(i,a,d,g,e,b)}},setException:function(b,a){b.setException(b.request.jsonp.errorType)},buildUrl:function(h){var k=this,a=k.callParent(arguments),d=h.records,e=k.getWriter(),g,c,b,j;if(e&&h.operation.allowWrite()){h=e.write(h)}g=h.params;c=g.filters,delete g.filters;if(c&&c.length){for(j=0;j0){g[k.recordParam]=k.encodeRecords(d)}if(k.autoAppendParams){a=Ext.urlAppend(a,Ext.Object.toQueryString(g))}return a},abort:function(){var a=this.lastRequest;if(a){Ext.data.JsonP.abort(a.jsonp)}},encodeRecords:function(b){var d=[],c=0,a=b.length;for(;c0},isExpandable:function(){var b=this;if(b.get("expandable")){return !(b.isLeaf()||(b.isLoaded()&&!b.hasChildNodes()))}return false},triggerUIUpdate:function(){this.afterEdit([])},appendChild:function(c,l,d){var j=this,e,h,g,k,b,m={isLast:true,parentId:j.getId(),depth:(j.data.depth||0)+1};if(Ext.isArray(c)){j.callStore("suspendAutoSync");for(e=0,h=c.length-1;e0){Ext.Array.sort(e,h);this.setFirstChild(e[0]);this.setLastChild(e[g-1]);for(d=0;d0){for(d=0;dj){i=i.substring(i.length-j)}else{if(i.length>>16)&4095)|(j.version<<12),4);k[3]=a(128|((j.clockSeq>>>8)&63),2)+a(j.clockSeq&255,2);k[4]=a(j.salt.hi,4)+a(j.salt.lo,8);if(j.version==4){j.init()}else{++i.lo;if(i.lo>=c){i.lo=0;++i.hi}}return k.join("-").toLowerCase()},getRecId:function(i){return i.getId()},init:function(){var j=this,i,k;if(j.version==4){j.clockSeq=d(0,h-1);i=j.salt||(j.salt={});k=j.timestamp||(j.timestamp={});i.lo=d(0,c-1);i.hi=d(0,g-1);k.lo=d(0,c-1);k.hi=d(0,e-1)}else{j.salt=b(j.salt);j.timestamp=b(j.timestamp);j.salt.hi|=256}},reconfigure:function(i){Ext.apply(this,i);this.init()}}}()));Ext.define("Ext.data.reader.Xml",{extend:Ext.data.reader.Reader,alternateClassName:"Ext.data.XmlReader",alias:"reader.xml",createAccessor:function(b){var a=this;if(Ext.isEmpty(b)){return Ext.emptyFn}if(Ext.isFunction(b)){return b}return function(c){return a.getNodeValue(Ext.DomQuery.selectNode(b,c))}},getNodeValue:function(a){if(a){if(typeof a.normalize==="function"){a.normalize()}a=a.firstChild;if(a){return a.nodeValue}}return undefined},getResponseData:function(a){var c=a.responseXML,b,d;if(!c){d="XML data not found in the response";b=new Ext.data.ResultSet({total:0,count:0,records:[],success:false,message:d});this.fireEvent("exception",this,a,b);Ext.Logger.warn(d);return b}return this.readRecords(c)},getData:function(a){return a.documentElement||a},getRoot:function(b){var c=b.nodeName,a=this.root;if(!a||(c&&c==a)){return b}else{if(Ext.DomQuery.isXml(b)){return Ext.DomQuery.selectNode(a,b)}}},extractData:function(a){var b=this.record;if(b!=a.nodeName){a=Ext.DomQuery.select(b,a)}else{a=[a]}return this.callParent([a])},getAssociatedDataRoot:function(b,a){return Ext.DomQuery.select(a,b)[0]},readRecords:function(a){if(Ext.isArray(a)){a=a[0]}this.xmlData=a;return this.callParent([a])},createFieldAccessExpression:function(g,d,c){var e=this.namespace,b,a;b=g.mapping||((e?e+"|":"")+g.name);if(typeof b==="function"){a=d+".mapping("+c+", this)"}else{a='me.getNodeValue(Ext.DomQuery.selectNode("'+b+'", '+c+"))"}return a}});Ext.define("Ext.data.writer.Xml",{extend:Ext.data.writer.Writer,alternateClassName:"Ext.data.XmlWriter",alias:"writer.xml",documentRoot:"xmlData",defaultDocumentRoot:"xmlData",header:"",record:"record",writeRecords:function(a,b){var h=this,d=[],c=0,g=b.length,j=h.documentRoot,e=h.record,m=b.length!==1,l,k;d.push(h.header||"");if(!j&&m){j=h.defaultDocumentRoot}if(j){d.push("<",j,">")}for(;c");for(k in l){if(l.hasOwnProperty(k)){d.push("<",k,">",l[k],"")}}d.push("")}if(j){d.push("")}a.xmlData=d.join("");return a}});Ext.define("Ext.data.XmlStore",{extend:Ext.data.Store,alias:"store.xml",constructor:function(a){a=Ext.apply({proxy:{type:"ajax",reader:"xml",writer:"xml"}},a);this.callParent([a])}});Ext.define("Ext.data.association.BelongsTo",{extend:Ext.data.association.Association,alternateClassName:"Ext.data.BelongsToAssociation",alias:"association.belongsto",constructor:function(c){this.callParent(arguments);var e=this,a=e.ownerModel.prototype,g=e.associatedName,d=e.getterName||"get"+g,b=e.setterName||"set"+g;Ext.applyIf(e,{name:g,foreignKey:g.toLowerCase()+"_id",instanceName:g+"BelongsToInstance",associationKey:g.toLowerCase()});a[d]=e.createGetter();a[b]=e.createSetter()},createSetter:function(){var c=this,b=c.foreignKey,a=c.instanceName;return function(h,e,g){var i=h&&h.isModel,d=i?h.getId():h;if(i){this[a]=h}else{if(this[a] instanceof Ext.data.Model&&!this.isEqual(this.get(b),d)){delete this[a]}}this.set(b,d);if(Ext.isFunction(e)){e={callback:e,scope:g||this}}if(Ext.isObject(e)){return this.save(e)}}},createGetter:function(){var d=this,e=d.associatedName,g=d.associatedModel,c=d.foreignKey,b=d.primaryKey,a=d.instanceName;return function(k,l){k=k||{};var j=this,m=j.get(c),n,h,i;if(k.reload===true||j[a]===undefined){h=Ext.ModelManager.create({},e);h.set(b,m);if(typeof k=="function"){k={callback:k,scope:l||j}}n=k.success;k.success=function(o){j[a]=o;if(n){n.apply(this,arguments)}};g.load(m,k);j[a]=h;return h}else{h=j[a];i=[h];l=l||k.scope||j;Ext.callback(k,l,i);Ext.callback(k.success,l,i);Ext.callback(k.failure,l,i);Ext.callback(k.callback,l,i);return h}}},read:function(b,a,c){b[this.instanceName]=a.read([c]).records[0]}});Ext.define("Ext.util.Inflector",{singleton:true,plurals:[[(/(quiz)$/i),"$1zes"],[(/^(ox)$/i),"$1en"],[(/([m|l])ouse$/i),"$1ice"],[(/(matr|vert|ind)ix|ex$/i),"$1ices"],[(/(x|ch|ss|sh)$/i),"$1es"],[(/([^aeiouy]|qu)y$/i),"$1ies"],[(/(hive)$/i),"$1s"],[(/(?:([^f])fe|([lr])f)$/i),"$1$2ves"],[(/sis$/i),"ses"],[(/([ti])um$/i),"$1a"],[(/(buffal|tomat|potat)o$/i),"$1oes"],[(/(bu)s$/i),"$1ses"],[(/(alias|status|sex)$/i),"$1es"],[(/(octop|vir)us$/i),"$1i"],[(/(ax|test)is$/i),"$1es"],[(/^person$/),"people"],[(/^man$/),"men"],[(/^(child)$/),"$1ren"],[(/s$/i),"s"],[(/$/),"s"]],singulars:[[(/(quiz)zes$/i),"$1"],[(/(matr)ices$/i),"$1ix"],[(/(vert|ind)ices$/i),"$1ex"],[(/^(ox)en/i),"$1"],[(/(alias|status)es$/i),"$1"],[(/(octop|vir)i$/i),"$1us"],[(/(cris|ax|test)es$/i),"$1is"],[(/(shoe)s$/i),"$1"],[(/(o)es$/i),"$1"],[(/(bus)es$/i),"$1"],[(/([m|l])ice$/i),"$1ouse"],[(/(x|ch|ss|sh)es$/i),"$1"],[(/(m)ovies$/i),"$1ovie"],[(/(s)eries$/i),"$1eries"],[(/([^aeiouy]|qu)ies$/i),"$1y"],[(/([lr])ves$/i),"$1f"],[(/(tive)s$/i),"$1"],[(/(hive)s$/i),"$1"],[(/([^f])ves$/i),"$1fe"],[(/(^analy)ses$/i),"$1sis"],[(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i),"$1$2sis"],[(/([ti])a$/i),"$1um"],[(/(n)ews$/i),"$1ews"],[(/people$/i),"person"],[(/s$/i),""]],uncountable:["sheep","fish","series","species","money","rice","information","equipment","grass","mud","offspring","deer","means"],singular:function(b,a){this.singulars.unshift([b,a])},plural:function(b,a){this.plurals.unshift([b,a])},clearSingulars:function(){this.singulars=[]},clearPlurals:function(){this.plurals=[]},isTransnumeral:function(a){return Ext.Array.indexOf(this.uncountable,a)!=-1},pluralize:function(g){if(this.isTransnumeral(g)){return g}var e=this.plurals,d=e.length,a,c,b;for(b=0;bb.tolerance){b.triggerStart(g)}else{return}}if(b.fireEvent("mousemove",b,g)===false){b.onMouseUp(g)}else{b.onDrag(g);b.fireEvent("drag",b,g)}},onMouseUp:function(b){var a=this;a.mouseIsDown=false;if(a.mouseIsOut){a.mouseIsOut=false;a.onMouseOut(b)}b.preventDefault();if(Ext.isIE&&document.releaseCapture){document.releaseCapture()}a.fireEvent("mouseup",a,b);a.endDrag(b)},endDrag:function(d){var b=this,c=Ext.getDoc(),a=b.active;c.un("mousemove",b.onMouseMove,b);c.un("mouseup",b.onMouseUp,b);c.un("selectstart",b.stopSelect,b);b.clearStart();b.active=false;if(a){b.onEnd(d);b.fireEvent("dragend",b,d)}delete b._constrainRegion;delete Ext.EventObject.dragTracked},triggerStart:function(b){var a=this;a.clearStart();a.active=true;a.onStart(b);a.fireEvent("dragstart",a,b)},clearStart:function(){var a=this.timer;if(a){clearTimeout(a);delete this.timer}},stopSelect:function(a){a.stopEvent();return false},onBeforeStart:function(a){},onStart:function(a){},onDrag:function(a){},onEnd:function(a){},getDragTarget:function(){return this.dragTarget},getDragCt:function(){return this.el},getConstrainRegion:function(){var a=this;if(a.constrainTo){if(a.constrainTo instanceof Ext.util.Region){return a.constrainTo}if(!a._constrainRegion){a._constrainRegion=Ext.fly(a.constrainTo).getViewRegion()}}else{if(!a._constrainRegion){a._constrainRegion=a.getDragCt().getViewRegion()}}return a._constrainRegion},getXY:function(a){return a?this.constrainModes[a](this,this.lastXY):this.lastXY},getOffset:function(c){var b=this.getXY(c),a=this.startXY;return[b[0]-a[0],b[1]-a[1]]},constrainModes:{point:function(b,d){var c=b.dragRegion,a=b.getConstrainRegion();if(!a){return d}c.x=c.left=c[0]=c.right=d[0];c.y=c.top=c[1]=c.bottom=d[1];c.constrainTo(a);return[c.left,c.top]},dragTarget:function(c,g){var b=c.startXY,e=c.startRegion.copy(),a=c.getConstrainRegion(),d;if(!a){return g}e.translateBy(g[0]-b[0],g[1]-b[1]);if(e.right>a.right){g[0]+=d=(a.right-e.right);e.left+=d}if(e.lefta.bottom){g[1]+=d=(a.bottom-e.bottom);e.top+=d}if(e.top0){if(b){for(d=0,a=b.length;d0){c.sendRequest(a==1?b[0]:b);c.callBuffer=[]}},configureFormRequest:function(e,a,b,i,j){var h=this,c,g,d;c=new Ext.direct.Transaction({provider:h,action:e,method:a.name,args:[b,i,j],callback:j&&Ext.isFunction(i)?Ext.Function.bind(i,j):i,isForm:true});if(h.fireEvent("beforecall",h,c,a)!==false){Ext.direct.Manager.addTransaction(c);g=String(b.getAttribute("enctype")).toLowerCase()=="multipart/form-data";d={extTID:c.id,extAction:e,extMethod:a.name,extType:"rpc",extUpload:String(g)};Ext.apply(c,{form:Ext.getDom(b),isUpload:g,params:i&&Ext.isObject(i.params)?Ext.apply(d,i.params):d});h.fireEvent("call",h,c,a);h.sendFormRequest(c)}},sendFormRequest:function(b){var a=this;Ext.Ajax.request({url:a.url,params:b.params,callback:a.onData,scope:a,form:b.form,isUpload:b.isUpload,transaction:b})}});Ext.define("Ext.dom.Layer",{extend:Ext.Element,alternateClassName:"Ext.Layer",statics:{shims:[]},isLayer:true,localXYNames:{get:"getLocalXY",set:"setLocalXY"},constructor:function(c,b){c=c||{};var d=this,e=Ext.DomHelper,h=c.parentEl,g=h?Ext.getDom(h):document.body,i=c.hideMode,a=Ext.baseCSSPrefix+(c.fixed&&!(Ext.isIE6||Ext.isIEQuirks)?"fixed-layer":"layer");d.el=d;if(b){d.dom=Ext.getDom(b)}if(!d.dom){d.dom=e.append(g,c.dh||{tag:"div",cls:a})}else{d.addCls(a);if(!d.dom.parentNode){g.appendChild(d.dom)}}if(c.id){d.id=d.dom.id=c.id}else{d.id=Ext.id(d.dom)}Ext.Element.addToCache(d);if(c.cls){d.addCls(c.cls)}d.constrain=c.constrain!==false;if(i){d.setVisibilityMode(Ext.Element[i.toUpperCase()]);if(d.visibilityMode==Ext.Element.ASCLASS){d.visibilityCls=c.visibilityCls}}else{if(c.useDisplay){d.setVisibilityMode(Ext.Element.DISPLAY)}else{d.setVisibilityMode(Ext.Element.VISIBILITY)}}if(c.shadow){d.shadowOffset=c.shadowOffset||4;d.shadow=new Ext.Shadow({offset:d.shadowOffset,mode:c.shadow,fixed:c.fixed});d.disableShadow()}else{d.shadowOffset=0}d.useShim=c.shim!==false&&Ext.useShims;if(c.hidden===true){d.hide()}else{d.show()}},getZIndex:function(){return parseInt((this.getShim()||this).getStyle("z-index"),10)},getShim:function(){var b=this,c,a;if(!b.useShim){return null}if(!b.shim){c=b.self.shims.shift();if(!c){c=b.createShim();c.enableDisplayMode("block");c.hide()}a=b.dom.parentNode;if(c.dom.parentNode!=a){a.insertBefore(c.dom,b.dom)}b.shim=c}return b.shim},hideShim:function(){var a=this;if(a.shim){a.shim.setDisplayed(false);a.self.shims.push(a.shim);delete a.shim}},disableShadow:function(){var a=this;if(a.shadow&&!a.shadowDisabled){a.shadowDisabled=true;a.shadow.hide();a.lastShadowOffset=a.shadowOffset;a.shadowOffset=0}},enableShadow:function(a){var b=this;if(b.shadow&&b.shadowDisabled){b.shadowDisabled=false;b.shadowOffset=b.lastShadowOffset;delete b.lastShadowOffset;if(a){b.sync(true)}}},sync:function(b){var i=this,n=i.shadow,g,d,a,c,o,k,j,m,e,l;if(!i.updating&&i.isVisible()&&(n||i.useShim)){c=i.getShim();o=i[i.localXYNames.get]();k=o[0];j=o[1];m=i.dom.offsetWidth;e=i.dom.offsetHeight;if(n&&!i.shadowDisabled){if(b&&!n.isVisible()){n.show(i)}else{n.realign(k,j,m,e)}if(c){l=c.getStyle("z-index");if(l>i.zindex){i.shim.setStyle("z-index",i.zindex-2)}c.show();if(n.isVisible()){g=n.el.getXY();d=c.dom.style;a=n.el.getSize();if(Ext.supports.CSS3BoxShadow){a.height+=6;a.width+=4;g[0]-=2;g[1]-=4}d.left=(g[0])+"px";d.top=(g[1])+"px";d.width=(a.width)+"px";d.height=(a.height)+"px"}else{c.setSize(m,e);c[i.localXYNames.set](k,j)}}}else{if(c){l=c.getStyle("z-index");if(l>i.zindex){i.shim.setStyle("z-index",i.zindex-2)}c.show();c.setSize(m,e);c[i.localXYNames.set](k,j)}}}return i},remove:function(){this.hideUnders();this.callParent()},beginUpdate:function(){this.updating=true},endUpdate:function(){this.updating=false;this.sync(true)},hideUnders:function(){if(this.shadow){this.shadow.hide()}this.hideShim()},constrainXY:function(){if(this.constrain){var g=Ext.Element.getViewWidth(),b=Ext.Element.getViewHeight(),l=Ext.getDoc().getScroll(),k=this.getXY(),i=k[0],e=k[1],a=this.shadowOffset,j=this.dom.offsetWidth+a,c=this.dom.offsetHeight+a,d=false;if((i+j)>g+l.left){i=g-j-a;d=true}if((e+c)>b+l.top){e=b-c-a;d=true}if(i-1)&&(p[o] in g)){p[o]=g[p[o]]}if(o=="hidden"&&r.type=="text"){continue}if(o in s){c.dom.setAttribute(o,s[o](p[o],r,m))}else{c.dom.setAttribute(o,p[o])}}}if(r.type=="text"){m.tuneText(r,p)}r.dirtyFont=false;b=j.style;if(b){c.setStyle(b)}r.dirty=false;if(Ext.isSafari3){m.webkitRect.show();setTimeout(function(){m.webkitRect.hide()})}},setClip:function(b,g){var e=this,d=g["clip-rect"],a,c;if(d){if(b.clip){b.clip.parentNode.parentNode.removeChild(b.clip.parentNode)}a=e.createSvgElement("clipPath");c=e.createSvgElement("rect");a.id=Ext.id(null,"ext-clip-");c.setAttribute("x",d.x);c.setAttribute("y",d.y);c.setAttribute("width",d.width);c.setAttribute("height",d.height);a.appendChild(c);e.getDefs().appendChild(a);b.el.dom.setAttribute("clip-path","url(#"+a.id+")");b.clip=c}},applyZIndex:function(d){var g=this,b=g.items,a=b.indexOf(d),e=d.el,c;if(g.el.dom.childNodes[a+2]!==e.dom){if(a>0){do{c=b.getAt(--a).el}while(!c&&a>0)}e.insertAfter(c||g.bgRect)}d.zIndexDirty=false},createItem:function(a){var b=new Ext.draw.Sprite(a);b.surface=this;return b},addGradient:function(h){h=Ext.draw.Draw.parseGradient(h);var e=this,d=h.stops.length,a=h.vector,l=Ext.isSafari&&!Ext.isStrict,j,g,k,c,b;b=e.gradientsMap||{};if(!l){if(h.type=="linear"){j=e.createSvgElement("linearGradient");j.setAttribute("x1",a[0]);j.setAttribute("y1",a[1]);j.setAttribute("x2",a[2]);j.setAttribute("y2",a[3])}else{j=e.createSvgElement("radialGradient");j.setAttribute("cx",h.centerX);j.setAttribute("cy",h.centerY);j.setAttribute("r",h.radius);if(Ext.isNumber(h.focalX)&&Ext.isNumber(h.focalY)){j.setAttribute("fx",h.focalX);j.setAttribute("fy",h.focalY)}}j.id=h.id;e.getDefs().appendChild(j);for(c=0;c"},text:function(u){var r=u.attr,q=c.exec(r.font),w=(q&&q[1])||"12",p=(q&&q[3])||"Arial",v=r.text,t=(Ext.isFF3_0||Ext.isFF3_5)?2:4,o="",s;u.getBBox();o+='';o+=Ext.htmlEncode(v)+"";s=d({x:r.x,y:r.y,"font-size":w,"font-family":p,"font-weight":r["font-weight"],"text-anchor":r["text-anchor"],fill:r.fill||"#000","fill-opacity":r.opacity,transform:u.matrix.toSvg()});return""+o+""},rect:function(p){var o=p.attr,q=d({x:o.x,y:o.y,rx:o.rx,ry:o.ry,width:o.width,height:o.height,fill:o.fill||"none","fill-opacity":o.opacity,stroke:o.stroke,"stroke-opacity":o["stroke-opacity"],"stroke-width":o["stroke-width"],transform:p.matrix&&p.matrix.toSvg()});return""},circle:function(p){var o=p.attr,q=d({cx:o.x,cy:o.y,r:o.radius,fill:o.translation.fill||o.fill||"none","fill-opacity":o.opacity,stroke:o.stroke,"stroke-opacity":o["stroke-opacity"],"stroke-width":o["stroke-width"],transform:p.matrix.toSvg()});return""},image:function(p){var o=p.attr,q=d({x:o.x-(o.width/2>>0),y:o.y-(o.height/2>>0),width:o.width,height:o.height,"xlink:href":o.src,transform:p.matrix.toSvg()});return""}},a=function(){var o='';o+='';return o},l=function(){var w='',p="",H,F,v,q,G,J,z,x,t,y,B,o,K,u,E,C,I,D,s,r;v=g.items.items;F=v.length;G=function(O){var V=O.childNodes,S=V.length,R=0,P,Q,L="",M,U,N,T;for(;R0){L+=G(M)}L+=""}return L};if(g.getDefs){p=G(g.getDefs())}else{x=g.gradientsColl;if(x){t=x.keys;y=x.items;B=0;o=t.length}for(;B';var A=q.colors.replace(j,"rgb($1|$2|$3)");A=A.replace(h,"rgba($1|$2|$3|$4)");J=A.split(",");for(E=0,I=J.length;E'}p+=""}}w+=""+p+"";w+=k.rect({attr:{width:"100%",height:"100%",fill:"#fff",stroke:"none",opacity:"0"}});D=new Array(F);for(E=0;E";return w},d=function(q){var p="",o;for(o in q){if(q.hasOwnProperty(o)&&q[o]!=null){p+=o+'="'+q[o]+'" '}}return p};return{singleton:true,generate:function(o,p){p=p||{};n(o);return a()+l()}}});Ext.define("Ext.draw.engine.Vml",{extend:Ext.draw.Surface,engine:"Vml",map:{M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},bitesRe:/([clmz]),?([^clmz]*)/gi,valRe:/-?[^,\s\-]+/g,fillUrlRe:/^url\(\s*['"]?([^\)]+?)['"]?\s*\)$/i,pathlike:/^(path|rect)$/,NonVmlPathRe:/[ahqstv]/ig,partialPathRe:/[clmz]/g,fontFamilyRe:/^['"]+|['"]+$/g,baseVmlCls:Ext.baseCSSPrefix+"vml-base",vmlGroupCls:Ext.baseCSSPrefix+"vml-group",spriteCls:Ext.baseCSSPrefix+"vml-sprite",measureSpanCls:Ext.baseCSSPrefix+"vml-measure-span",zoom:21600,coordsize:1000,coordorigin:"0 0",zIndexShift:0,orderSpritesByZIndex:false,path2vml:function(t){var n=this,u=n.NonVmlPathRe,b=n.map,e=n.valRe,s=n.zoom,d=n.bitesRe,g=Ext.Function.bind(Ext.draw.Draw.pathToAbsolute,Ext.draw.Draw),m,o,c,a,k,q,h,l;if(String(t).match(u)){g=Ext.Function.bind(Ext.draw.Draw.path2curve,Ext.draw.Draw)}else{if(!String(t).match(n.partialPathRe)){m=String(t).replace(d,function(r,w,j){var v=[],i=w.toLowerCase()=="m",p=b[w];j.replace(e,function(x){if(i&&v.length===2){p+=v+b[w=="m"?"l":"L"];v=[]}v.push(Math.round(x*s))});return p+v});return m}}o=g(t);m=[];for(k=0,q=o.length;k")}a.W=h.span.offsetWidth;a.H=h.span.offsetHeight+2;if(c["text-anchor"]=="middle"){e["v-text-align"]="center"}else{if(c["text-anchor"]=="end"){e["v-text-align"]="right";a.bbx=-Math.round(a.W/2)}else{e["v-text-align"]="left";a.bbx=Math.round(a.W/2)}}}a.X=c.x;a.Y=c.y;a.path.v=Ext.String.format("m{0},{1}l{2},{1}",Math.round(a.X*j),Math.round(a.Y*j),Math.round(a.X*j)+1);i.bbox.plain=null;i.bbox.transform=null;i.dirtyFont=false},setText:function(a,b){a.vml.textpath.string=Ext.htmlDecode(b)},hide:function(){this.el.hide()},show:function(){this.el.show()},hidePrim:function(a){a.el.addCls(Ext.baseCSSPrefix+"hide-visibility")},showPrim:function(a){a.el.removeCls(Ext.baseCSSPrefix+"hide-visibility")},setSize:function(b,a){var c=this;b=b||c.width;a=a||c.height;c.width=b;c.height=a;if(c.el){if(b!=undefined){c.el.setWidth(b)}if(a!=undefined){c.el.setHeight(a)}}c.callParent(arguments)},applyViewBox:function(){var g=this,h=g.viewBox,e=g.width,b=g.height,c,a,d;g.callParent();if(h&&(e||b)){c=g.items.items;a=c.length;for(d=0;d')}}catch(d){c.createNode=function(e){return g.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}}if(!c.el){b=g.createElement("div");c.el=Ext.get(b);c.el.addCls(c.baseVmlCls);c.span=g.createElement("span");Ext.get(c.span).addCls(c.measureSpanCls);b.appendChild(c.span);c.el.setSize(c.width||0,c.height||0);a.appendChild(b);c.el.on({scope:c,mouseup:c.onMouseUp,mousedown:c.onMouseDown,mouseover:c.onMouseOver,mouseout:c.onMouseOut,mousemove:c.onMouseMove,mouseenter:c.onMouseEnter,mouseleave:c.onMouseLeave,click:c.onClick,dblclick:c.onDblClick})}c.renderAll()},renderAll:function(){this.items.each(this.renderItem,this)},redraw:function(a){a.dirty=true;this.renderItem(a)},renderItem:function(a){if(!this.el){return}if(!a.el){this.createSpriteElement(a)}if(a.dirty){this.applyAttrs(a);if(a.dirtyTransform){this.applyTransformations(a)}}},rotationCompensation:function(d,c,a){var b=new Ext.draw.Matrix();b.rotate(-d,0.5,0.5);return{x:b.x(c,a),y:b.y(c,a)}},transform:function(x,I){var H=this,b=H.getBBox(x,true),j=b.x+b.width*0.5,h=b.y+b.height*0.5,B=new Ext.draw.Matrix(),q=x.transformations,v=q.length,C=0,o=0,d=1,c=1,n="",g=x.el,E=g.dom,z=E.style,a=H.zoom,k=x.skew,D=H.viewBoxShift,G,F,s,l,r,p,A,w,u,t,e,m;for(;C32767){m[0]=32767}else{if(m[0]<-32768){m[0]=-32768}}if(m[1]>32767){m[1]=32767}else{if(m[1]<-32768){m[1]=-32768}}k.offset=m}else{z.filter=B.toFilter();z.left=Math.min(B.x(b.x,b.y),B.x(b.x+b.width,b.y),B.x(b.x,b.y+b.height),B.x(b.x+b.width,b.y+b.height))+"px";z.top=Math.min(B.y(b.x,b.y),B.y(b.x+b.width,b.y),B.y(b.x,b.y+b.height),B.y(b.x+b.width,b.y+b.height))+"px"}},createItem:function(a){return Ext.create("Ext.draw.Sprite",a)},getRegion:function(){return this.el.getRegion()},addCls:function(a,b){if(a&&a.el){a.el.addCls(b)}},removeCls:function(a,b){if(a&&a.el){a.el.removeCls(b)}},addGradient:function(g){var d=this.gradientsColl||(this.gradientsColl=Ext.create("Ext.util.MixedCollection")),a=[],j=Ext.create("Ext.util.MixedCollection"),l,e,b,h,k,c;j.addAll(g.stops);j.sortByKey("ASC",function(m,i){m=parseInt(m,10);i=parseInt(i,10);return m>i?1:(m'],initComponent:function(){this.callParent();this.addEvents("success","failure")},beforeRender:function(){this.callParent();Ext.applyIf(this.renderData,{swfId:this.getSwfId()})},afterRender:function(){var b=this,a=Ext.apply({},b.flashParams),c=Ext.apply({},b.flashVars);b.callParent();a=Ext.apply({allowScriptAccess:"always",bgcolor:b.backgroundColor,wmode:b.wmode},a);c=Ext.apply({allowedDomain:document.location.hostname},c);new swfobject.embedSWF(b.url,b.getSwfId(),b.swfWidth,b.swfHeight,b.flashVersion,b.expressInstall?b.statics.EXPRESS_INSTALL_URL:undefined,c,a,b.flashAttributes,Ext.bind(b.swfCallback,b))},swfCallback:function(b){var a=this;if(b.success){a.swf=Ext.get(b.ref);a.onSuccess();a.fireEvent("success",a)}else{a.onFailure();a.fireEvent("failure",a)}},getSwfId:function(){return this.swfId||(this.swfId="extswf"+this.getAutoId())},onSuccess:function(){this.swf.setStyle("visibility","inherit")},onFailure:Ext.emptyFn,beforeDestroy:function(){var b=this,a=b.swf;if(a){swfobject.removeSWF(b.getSwfId());Ext.destroy(a);delete b.swf}b.callParent()},statics:{EXPRESS_INSTALL_URL:"http://swfobject.googlecode.com/svn/trunk/swfobject/expressInstall.swf"}});Ext.define("Ext.form.action.Action",{alternateClassName:"Ext.form.Action",submitEmptyText:true,constructor:function(a){if(a){Ext.apply(this,a)}var b=a.params;if(Ext.isString(b)){this.params=Ext.Object.fromQueryString(b)}},run:Ext.emptyFn,onFailure:function(a){this.response=a;this.failureType=Ext.form.action.Action.CONNECT_FAILURE;this.form.afterAction(this,false)},processResponse:function(a){this.response=a;if(!a.responseText&&!a.responseXML){return true}return(this.result=this.handleResponse(a))},getUrl:function(){return this.url||this.form.url},getMethod:function(){return(this.method||this.form.method||"POST").toUpperCase()},getParams:function(){return Ext.apply({},this.params,this.form.baseParams)},createCallback:function(){var c=this,a,b=c.form;return{success:c.onSuccess,failure:c.onFailure,scope:c,timeout:(this.timeout*1000)||(b.timeout*1000),upload:b.fileUpload?c.onSuccess:a}},statics:{CLIENT_INVALID:"client",SERVER_INVALID:"server",CONNECT_FAILURE:"connect",LOAD_FAILURE:"load"}});Ext.define("Ext.form.action.Load",{extend:Ext.form.action.Action,alternateClassName:"Ext.form.Action.Load",alias:"formaction.load",type:"load",run:function(){Ext.Ajax.request(Ext.apply(this.createCallback(),{method:this.getMethod(),url:this.getUrl(),headers:this.headers,params:this.getParams()}))},onSuccess:function(b){var a=this.processResponse(b),c=this.form;if(a===true||!a.success||!a.data){this.failureType=Ext.form.action.Action.LOAD_FAILURE;c.afterAction(this,false);return}c.clearInvalid();c.setValues(a.data);c.afterAction(this,true)},handleResponse:function(c){var a=this.form.reader,b,d;if(a){b=a.read(c);d=b.records&&b.records[0]?b.records[0].data:null;return{success:b.success,data:d}}return Ext.decode(c.responseText)}});Ext.define("Ext.form.action.Submit",{extend:Ext.form.action.Action,alternateClassName:"Ext.form.Action.Submit",alias:"formaction.submit",type:"submit",run:function(){var b=this,a=b.form;if(b.clientValidation===false||a.isValid()){b.doSubmit()}else{b.failureType=Ext.form.action.Action.CLIENT_INVALID;a.afterAction(b,false)}},doSubmit:function(){var e=this,b=Ext.apply(e.createCallback(),{url:e.getUrl(),method:e.getMethod(),headers:e.headers}),d=e.form,g=e.jsonSubmit||d.jsonSubmit,a=g?"jsonData":"params",c,h;if(d.hasUpload()){h=e.buildForm();b.form=h.formEl;b.isUpload=true}else{b[a]=e.getParams(g)}Ext.Ajax.request(b);if(h){e.cleanup(h)}},cleanup:function(h){var e=h.formEl,d=h.uploadEls,b=h.uploadFields,a=b.length,c,g;for(c=0;cid="{id}"
    >','','',"{beforeLabelTpl}",' class="{labelCls}"',' style="{labelStyle}"',' unselectable="on"',">","{beforeLabelTextTpl}",'{fieldLabel}{labelSeparator}',"{afterLabelTextTpl}","","{afterLabelTpl}","","
    ",'',"{beforeBodyEl}","","{beforeLabelTpl}",'
    ','","
    ","{afterLabelTpl}","
    ","{beforeSubTpl}","{[values.$comp.getSubTplMarkup(values)]}","{afterSubTpl}","","{afterBodyEl}","","",'',"","",'',"{afterBodyEl}","","","",{disableFormats:true}],activeErrorsTpl:undefined,htmlActiveErrorsTpl:['','
    • {.}
    ',"
    "],plaintextActiveErrorsTpl:['','\n{.}',""],isFieldLabelable:true,formItemCls:Ext.baseCSSPrefix+"form-item",labelCls:Ext.baseCSSPrefix+"form-item-label",errorMsgCls:Ext.baseCSSPrefix+"form-error-msg",baseBodyCls:Ext.baseCSSPrefix+"form-item-body",fieldBodyCls:"",clearCls:Ext.baseCSSPrefix+"clear",invalidCls:Ext.baseCSSPrefix+"form-invalid",fieldLabel:undefined,labelAlign:"left",labelWidth:100,labelPad:5,labelSeparator:":",hideLabel:false,hideEmptyLabel:true,preventMark:false,autoFitErrors:true,msgTarget:"qtip",noWrap:true,labelableInsertions:["beforeBodyEl","afterBodyEl","beforeLabelTpl","afterLabelTpl","beforeSubTpl","afterSubTpl","beforeLabelTextTpl","afterLabelTextTpl","labelAttrTpl"],labelableRenderProps:["allowBlank","id","labelAlign","fieldBodyCls","baseBodyCls","clearCls","labelSeparator","msgTarget"],initLabelable:function(){var a=this,b=a.padding;if(b){a.padding=undefined;a.extraMargins=Ext.Element.parseBox(b)}if(!a.activeErrorsTpl){if(a.msgTarget=="title"){a.activeErrorsTpl=a.plaintextActiveErrorsTpl}else{a.activeErrorsTpl=a.htmlActiveErrorsTpl}}a.addCls(Ext.plainTableCls);a.addCls(a.formItemCls);a.lastActiveError="";a.addEvents("errorchange");a.enableBubble("errorchange")},trimLabelSeparator:function(){var c=this,d=c.labelSeparator,a=c.fieldLabel||"",b=a.substr(a.length-1);return b===d?a.slice(0,-1):a},getFieldLabel:function(){return this.trimLabelSeparator()},setFieldLabel:function(b){b=b||"";var c=this,d=c.labelSeparator,a=c.labelEl;c.fieldLabel=b;if(c.rendered){if(Ext.isEmpty(b)&&c.hideEmptyLabel){a.parent().setDisplayed("none")}else{if(d){b=c.trimLabelSeparator()+d}a.update(b);a.parent().setDisplayed("")}c.updateLayout()}},getInsertionRenderData:function(d,e){var b=e.length,a,c;while(b--){a=e[b];c=this[a];if(c){if(typeof c!="string"){if(!c.isTemplate){c=Ext.XTemplate.getTpl(this,a)}c=c.apply(d)}}d[a]=c||""}return d},getLabelableRenderData:function(){var b=this,c,d,a=b.labelAlign==="top";if(!Ext.form.Labelable.errorIconWidth){d=Ext.getBody().createChild({style:"position:absolute",cls:Ext.baseCSSPrefix+"form-invalid-icon"});Ext.form.Labelable.errorIconWidth=d.getWidth()+d.getMargin("l");d.remove()}c=Ext.copyTo({inFormLayout:b.ownerLayout&&b.ownerLayout.type==="form",inputId:b.getInputId(),labelOnLeft:!a,hideLabel:!b.hasVisibleLabel(),fieldLabel:b.getFieldLabel(),labelCellStyle:b.getLabelCellStyle(),labelCellAttrs:b.getLabelCellAttrs(),labelCls:b.getLabelCls(),labelStyle:b.getLabelStyle(),bodyColspan:b.getBodyColspan(),externalError:!b.autoFitErrors,errorMsgCls:b.getErrorMsgCls(),errorIconWidth:Ext.form.Labelable.errorIconWidth},b,b.labelableRenderProps,true);b.getInsertionRenderData(c,b.labelableInsertions);return c},xhooks:{beforeRender:function(){var a=this;a.setFieldDefaults(a.getHierarchyState().fieldDefaults);if(a.ownerLayout){a.addCls(Ext.baseCSSPrefix+a.ownerLayout.type+"-form-item")}},onRender:function(){var c=this,d,a,b={};if(c.extraMargins){d=c.el.getMargin();for(a in d){if(d.hasOwnProperty(a)){b["margin-"+a]=(d[a]+c.extraMargins[a])+"px"}}c.el.setStyle(b)}}},hasVisibleLabel:function(){if(this.hideLabel){return false}return !(this.hideEmptyLabel&&!this.getFieldLabel())},getLabelWidth:function(){var a=this;if(!a.hasVisibleLabel()){return 0}return a.labelWidth+a.labelPad},getBodyColspan:function(){var b=this,a;if(b.msgTarget==="side"&&(!b.autoFitErrors||b.hasActiveError())){a=1}else{a=2}if(b.labelAlign!=="top"&&!b.hasVisibleLabel()){a++}return a},getLabelCls:function(){var b=this.labelCls+" "+Ext.dom.Element.unselectableCls,a=this.labelClsExtra;return a?b+" "+a:b},getLabelCellStyle:function(){var b=this,a=b.hideLabel||(!b.fieldLabel&&b.hideEmptyLabel);return a?"display:none;":""},getErrorMsgCls:function(){var b=this,a=(b.hideLabel||(!b.fieldLabel&&b.hideEmptyLabel));return b.errorMsgCls+(!a&&b.labelAlign==="top"?" "+Ext.baseCSSPrefix+"lbl-top-err-icon":"")},getLabelCellAttrs:function(){var c=this,b=c.labelAlign,a="";if(b!=="top"){a='valign="top" halign="'+b+'" width="'+(c.labelWidth+c.labelPad)+'"'}return a+' class="'+Ext.baseCSSPrefix+'field-label-cell"'},getLabelStyle:function(){var c=this,b=c.labelPad,a="";if(c.labelAlign!=="top"){if(c.labelWidth){a="width:"+c.labelWidth+"px;"}if(b){a+="margin-right:"+b+"px;"}}return a+(c.labelStyle||"")},getSubTplMarkup:function(){return""},getInputId:function(){return""},getActiveError:function(){return this.activeError||""},hasActiveError:function(){return !!this.getActiveError()},setActiveError:function(a){this.setActiveErrors(a)},getActiveErrors:function(){return this.activeErrors||[]},setActiveErrors:function(a){a=Ext.Array.from(a);this.activeError=a[0];this.activeErrors=a;this.activeError=this.getTpl("activeErrorsTpl").apply({errors:a,listCls:Ext.plainListCls});this.renderActiveError()},unsetActiveError:function(){delete this.activeError;delete this.activeErrors;this.renderActiveError()},renderActiveError:function(){var c=this,b=c.getActiveError(),a=!!b;if(b!==c.lastActiveError){c.fireEvent("errorchange",c,b);c.lastActiveError=b}if(c.rendered&&!c.isDestroyed&&!c.preventMark){c.el[a?"addCls":"removeCls"](c.invalidCls);c.getActionEl().dom.setAttribute("aria-invalid",a);if(c.errorEl){c.errorEl.dom.innerHTML=b}}},setFieldDefaults:function(b){var a;for(a in b){if(!this.hasOwnProperty(a)){this[a]=b[a]}}}});Ext.define("Ext.form.field.Field",{isFormField:true,disabled:false,submitValue:true,validateOnChange:true,suspendCheckChange:0,initField:function(){this.addEvents("change","validitychange","dirtychange");this.initValue()},initValue:function(){var a=this;a.value=a.transformOriginalValue(a.value);a.originalValue=a.lastValue=a.value;a.suspendCheckChange++;a.setValue(a.value);a.suspendCheckChange--},transformOriginalValue:Ext.identityFn,getName:function(){return this.name},getValue:function(){return this.value},setValue:function(b){var a=this;a.value=b;a.checkChange();return a},isEqual:function(b,a){return String(b)===String(a)},isEqualAsString:function(b,a){return String(Ext.value(b,""))===String(Ext.value(a,""))},getSubmitData:function(){var a=this,b=null;if(!a.disabled&&a.submitValue&&!a.isFileUpload()){b={};b[a.getName()]=""+a.getValue()}return b},getModelData:function(){var a=this,b=null;if(!a.disabled&&!a.isFileUpload()){b={};b[a.getName()]=a.getValue()}return b},reset:function(){var a=this;a.beforeReset();a.setValue(a.originalValue);a.clearInvalid();delete a.wasValid},beforeReset:Ext.emptyFn,resetOriginalValue:function(){this.originalValue=this.getValue();this.checkDirty()},checkChange:function(){if(!this.suspendCheckChange){var c=this,b=c.getValue(),a=c.lastValue;if(!c.isEqual(b,a)&&!c.isDestroyed){c.lastValue=b;c.fireEvent("change",c,b,a);c.onChange(b,a)}}},onChange:function(b,a){if(this.validateOnChange){this.validate()}this.checkDirty()},isDirty:function(){var a=this;return !a.disabled&&!a.isEqual(a.getValue(),a.originalValue)},checkDirty:function(){var a=this,b=a.isDirty();if(b!==a.wasDirty){a.fireEvent("dirtychange",a,b);a.onDirtyChange(b);a.wasDirty=b}},onDirtyChange:Ext.emptyFn,getErrors:function(a){return[]},isValid:function(){var a=this;return a.disabled||Ext.isEmpty(a.getErrors())},validate:function(){var a=this,b=a.isValid();if(b!==a.wasValid){a.wasValid=b;a.fireEvent("validitychange",a,b)}return b},batchChanges:function(a){try{this.suspendCheckChange++;a()}catch(b){throw b}finally{this.suspendCheckChange--}this.checkChange()},isFileUpload:function(){return false},extractFileInput:function(){return null},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.define("Ext.layout.component.field.Field",{extend:Ext.layout.component.Auto,alias:"layout.field",type:"field",naturalSizingProp:"size",beginLayout:function(c){var b=this,a=b.owner;b.callParent(arguments);c.labelStrategy=b.getLabelStrategy();c.errorStrategy=b.getErrorStrategy();c.labelContext=c.getEl("labelEl");c.bodyCellContext=c.getEl("bodyEl");c.inputContext=c.getEl("inputEl");c.errorContext=c.getEl("errorEl");if(Ext.isIE7m&&Ext.isStrict&&c.inputContext){b.ieInputWidthAdjustment=c.inputContext.getPaddingInfo().width+c.inputContext.getBorderInfo().width}c.labelStrategy.prepare(c,a);c.errorStrategy.prepare(c,a)},beginLayoutCycle:function(g){var e=this,a=e.owner,c=g.widthModel,b=a[e.naturalSizingProp],d;e.callParent(arguments);if(c.shrinkWrap){e.beginLayoutShrinkWrap(g)}else{if(c.natural){if(typeof b=="number"&&!a.inputWidth){e.beginLayoutFixed(g,(d=b*6.5+20),"px")}else{e.beginLayoutShrinkWrap(g)}g.setWidth(d,false)}else{e.beginLayoutFixed(g,"100","%")}}},beginLayoutFixed:function(c,b,e){var a=c.target,d=a.inputEl,g=a.inputWidth;a.el.setStyle("table-layout","fixed");a.bodyEl.setStyle("width",b+e);if(d){if(g){d.setStyle("width",g+"px")}else{d.setStyle("width",a.stretchInputElFixed?"100%":"")}}c.isFixed=true},beginLayoutShrinkWrap:function(b){var a=b.target,c=a.inputEl,d=a.inputWidth;if(c&&c.dom){c.dom.removeAttribute("size");if(d){c.setStyle("width",d+"px")}else{c.setStyle("width","")}}a.el.setStyle("table-layout","auto");a.bodyEl.setStyle("width","")},finishedLayout:function(b){var a=this.owner;this.callParent(arguments);b.labelStrategy.finishedLayout(b,a);b.errorStrategy.finishedLayout(b,a)},calculateOwnerHeightFromContentHeight:function(b,a){return a},measureContentHeight:function(a){return a.el.getHeight()},measureContentWidth:function(a){return a.el.getWidth()},measureLabelErrorHeight:function(a){return a.labelStrategy.getHeight(a)+a.errorStrategy.getHeight(a)},onFocus:function(){this.getErrorStrategy().onFocus(this.owner)},getLabelStrategy:function(){var b=this,c=b.labelStrategies,a=b.owner.labelAlign;return c[a]||c.base},getErrorStrategy:function(){var c=this,a=c.owner,d=c.errorStrategies,b=a.msgTarget;return !a.preventMark&&Ext.isString(b)?(d[b]||d.elementId):d.none},labelStrategies:(function(){var a={prepare:function(e,b){var c=b.labelCls+"-"+b.labelAlign,d=b.labelEl;if(d){d.addCls(c)}},getHeight:function(){return 0},finishedLayout:Ext.emptyFn};return{base:a,top:Ext.applyIf({getHeight:function(e){var c=e.labelContext,d=c.props,b=d.height;if(b===undefined){d.height=b=c.el.getHeight()}return b}},a),left:a,right:a}}()),errorStrategies:(function(){function d(h){var i=Ext.layout.component.field.Field.tip,j;if(i&&i.isVisible()){j=i.activeTarget;if(j&&j.el===h.getActionEl().dom){i.toFront(true)}}}var c=Ext.applyIf,b=Ext.emptyFn,a=Ext.baseCSSPrefix+"form-invalid-icon",g,e={prepare:function(j,h){var i=h.errorEl;if(i){i.setDisplayed(false)}},getHeight:function(){return 0},onFocus:b,finishedLayout:b};return{none:e,side:c({prepare:function(k,i){var m=i.errorEl,j=i.sideErrorCell,h=i.hasActiveError(),l;if(!g){g=(l=Ext.getBody().createChild({style:"position:absolute",cls:a})).getWidth();l.remove()}m.addCls(a);m.set({"data-errorqtip":i.getActiveError()||""});if(i.autoFitErrors){m.setDisplayed(h)}else{m.setVisible(h)}if(j&&i.autoFitErrors){j.setDisplayed(h)}i.bodyEl.dom.colSpan=i.getBodyColspan();Ext.layout.component.field.Field.initTip()},onFocus:d},e),under:c({prepare:function(j,h){var k=h.errorEl,i=Ext.baseCSSPrefix+"form-invalid-under";k.addCls(i);k.setDisplayed(h.hasActiveError())},getHeight:function(k){var h=0,i,j;if(k.target.hasActiveError()){i=k.errorContext;j=i.props;h=j.height;if(h===undefined){j.height=h=i.el.getHeight()}}return h}},e),qtip:c({prepare:function(i,h){Ext.layout.component.field.Field.initTip();h.getActionEl().dom.setAttribute("data-errorqtip",h.getActiveError()||"")},onFocus:d},e),title:c({prepare:function(i,h){h.getActionEl().dom.setAttribute("title",h.getActiveError()||"")}},e),elementId:c({prepare:function(i,h){var j=Ext.fly(h.msgTarget);if(j){j.dom.innerHTML=h.getActiveError()||"";j.setDisplayed(h.hasActiveError())}}},e)}}()),statics:{initTip:function(){var a=this.tip;if(!a){a=this.tip=Ext.create("Ext.tip.QuickTip",{ui:"form-invalid"});a.tagConfig=Ext.apply({},{attribute:"errorqtip"},a.tagConfig)}},destroyTip:function(){var a=this.tip;if(a){a.destroy();delete this.tip}}}});Ext.define("Ext.form.field.Base",{extend:Ext.Component,mixins:{labelable:Ext.form.Labelable,field:Ext.form.field.Field},alias:"widget.field",alternateClassName:["Ext.form.Field","Ext.form.BaseField"],fieldSubTpl:[' name="{name}"
    ',' value="{[Ext.util.Format.htmlEncode(values.value)]}"',' placeholder="{placeholder}"','{%if (values.maxLength !== undefined){%} maxlength="{maxLength}"{%}%}',' readonly="readonly"',' disabled="disabled"',' tabIndex="{tabIdx}"',' style="{fieldStyle}"',' class="{fieldCls} {typeCls} {editableCls} {inputCls}" autocomplete="off"/>',{disableFormats:true}],subTplInsertions:["inputAttrTpl"],inputType:"text",invalidText:"The value in this field is invalid",fieldCls:Ext.baseCSSPrefix+"form-field",focusCls:"form-focus",dirtyCls:Ext.baseCSSPrefix+"form-dirty",checkChangeEvents:Ext.isIE&&(!document.documentMode||document.documentMode<9)?["change","propertychange","keyup"]:["change","input","textInput","keyup","dragdrop"],checkChangeBuffer:50,componentLayout:"field",readOnly:false,readOnlyCls:Ext.baseCSSPrefix+"form-readonly",validateOnBlur:true,hasFocus:false,baseCls:Ext.baseCSSPrefix+"field",maskOnDisable:false,stretchInputElFixed:true,initComponent:function(){var a=this;a.callParent();a.subTplData=a.subTplData||{};a.addEvents("specialkey","writeablechange");a.initLabelable();a.initField();if(!a.name){a.name=a.getInputId()}if(a.readOnly){a.addCls(a.readOnlyCls)}},getInputId:function(){return this.inputId||(this.inputId=this.id+"-inputEl")},getSubTplData:function(){var c=this,b=c.inputType,a=c.getInputId(),d;d=Ext.apply({id:a,cmpId:c.id,name:c.name||a,disabled:c.disabled,readOnly:c.readOnly,value:c.getRawValue(),type:b,fieldCls:c.fieldCls,fieldStyle:c.getFieldStyle(),tabIdx:c.tabIndex,inputCls:c.inputCls,typeCls:Ext.baseCSSPrefix+"form-"+(b==="password"?"text":b)},c.subTplData);c.getInsertionRenderData(d,c.subTplInsertions);return d},applyRenderSelectors:function(){var a=this;a.callParent();a.addChildEls("inputEl");a.inputEl=a.el.getById(a.getInputId())},getSubTplMarkup:function(){return this.getTpl("fieldSubTpl").apply(this.getSubTplData())},initRenderTpl:function(){var a=this;if(!a.hasOwnProperty("renderTpl")){a.renderTpl=a.getTpl("labelableRenderTpl")}return a.callParent()},initRenderData:function(){return Ext.applyIf(this.callParent(),this.getLabelableRenderData())},setFieldStyle:function(a){var b=this,c=b.inputEl;if(c){c.applyStyles(a)}b.fieldStyle=a},getFieldStyle:function(){return Ext.isObject(this.fieldStyle)?Ext.DomHelper.generateStyles(this.fieldStyle):this.fieldStyle||""},onRender:function(){this.callParent(arguments);this.renderActiveError()},getFocusEl:function(){return this.inputEl},isFileUpload:function(){return this.inputType==="file"},getSubmitData:function(){var a=this,b=null,c;if(!a.disabled&&a.submitValue&&!a.isFileUpload()){c=a.getSubmitValue();if(c!==null){b={};b[a.getName()]=c}}return b},getSubmitValue:function(){return this.processRawValue(this.getRawValue())},getRawValue:function(){var b=this,a=(b.inputEl?b.inputEl.getValue():Ext.value(b.rawValue,""));b.rawValue=a;return a},setRawValue:function(b){var a=this;b=Ext.value(a.transformRawValue(b),"");a.rawValue=b;if(a.inputEl){a.inputEl.dom.value=b}return b},transformRawValue:Ext.identityFn,valueToRaw:function(a){return""+Ext.value(a,"")},rawToValue:Ext.identityFn,processRawValue:Ext.identityFn,getValue:function(){var a=this,b=a.rawToValue(a.processRawValue(a.getRawValue()));a.value=b;return b},setValue:function(b){var a=this;a.setRawValue(a.valueToRaw(b));return a.mixins.field.setValue.call(a,b)},onBoxReady:function(){var a=this;a.callParent();if(a.setReadOnlyOnBoxReady){a.setReadOnly(a.readOnly)}},onDisable:function(){var a=this,b=a.inputEl;a.callParent();if(b){b.dom.disabled=true;if(a.hasActiveError()){a.clearInvalid();a.needsValidateOnEnable=true}}},onEnable:function(){var a=this,b=a.inputEl;a.callParent();if(b){b.dom.disabled=false;if(a.needsValidateOnEnable){delete a.needsValidateOnEnable;a.forceValidation=true;a.isValid();delete a.forceValidation}}},setReadOnly:function(c){var a=this,b=a.inputEl;c=!!c;a[c?"addCls":"removeCls"](a.readOnlyCls);a.readOnly=c;if(b){b.dom.readOnly=c}else{if(a.rendering){a.setReadOnlyOnBoxReady=true}}a.fireEvent("writeablechange",a,c)},fireKey:function(a){if(a.isSpecialKey()){this.fireEvent("specialkey",this,new Ext.EventObjectImpl(a))}},initEvents:function(){var g=this,i=g.inputEl,b,j,c=g.checkChangeEvents,h,a=c.length,d;if(g.inEditor){g.onBlur=Ext.Function.createBuffered(g.onBlur,10)}if(i){g.mon(i,Ext.EventManager.getKeyEvent(),g.fireKey,g);b=new Ext.util.DelayedTask(g.checkChange,g);g.onChangeEvent=j=function(){b.delay(g.checkChangeBuffer)};for(h=0;hg.maxLength){j.push(k(g.maxLengthText,g.maxLength))}if(d){if(!h[d](l,g)){j.push(g.vtypeText||h[d+"Text"])}}if(i&&!i.test(l)){j.push(g.regexText||g.invalidText)}return j},selectText:function(i,a){var h=this,c=h.getRawValue(),d=true,g=h.inputEl.dom,e,b;if(c.length>0){i=i===e?0:i;a=a===e?c.length:a;if(g.setSelectionRange){g.setSelectionRange(i,a)}else{if(g.createTextRange){b=g.createTextRange();b.moveStart("character",i);b.moveEnd("character",a-c.length);b.select()}}d=Ext.isGecko||Ext.isOpera}if(d){h.focus()}},autoSize:function(){var a=this;if(a.grow&&a.rendered){a.autoSizing=true;a.updateLayout()}},afterComponentLayout:function(){var b=this,a;b.callParent(arguments);if(b.autoSizing){a=b.inputEl.getWidth();if(a!==b.lastInputWidth){b.fireEvent("autosize",b,a);b.lastInputWidth=a;delete b.autoSizing}}},onDestroy:function(){var a=this;a.callParent();if(a.inputFocusTask){a.inputFocusTask.cancel();a.inputFocusTask=null}}});Ext.define("Ext.layout.component.field.TextArea",{extend:Ext.layout.component.field.Text,alias:"layout.textareafield",type:"textareafield",canGrowWidth:false,naturalSizingProp:"cols",beginLayout:function(a){this.callParent(arguments);a.target.inputEl.setStyle("height","")},measureContentHeight:function(b){var e=this,a=e.owner,k=e.callParent(arguments),c,i,h,g,d,j;if(a.grow&&!b.state.growHandled){c=b.inputContext;i=a.inputEl;d=i.getWidth(true);h=Ext.util.Format.htmlEncode(i.dom.value)||" ";h+=a.growAppend;h=h.replace(/\n/g,"
    ");j=Ext.util.TextMetrics.measure(i,h,d).height+c.getBorderInfo().height+c.getPaddingInfo().height;j=Ext.Number.constrain(j,a.growMin,a.growMax);c.setHeight(j);b.state.growHandled=true;c.domBlock(e,"height");k=NaN}return k}});Ext.define("Ext.form.field.TextArea",{extend:Ext.form.field.Text,alias:["widget.textareafield","widget.textarea"],alternateClassName:"Ext.form.TextArea",fieldSubTpl:['",{disableFormats:true}],growMin:60,growMax:1000,growAppend:"\n-",cols:20,rows:4,enterIsSpecial:false,preventScrollbars:false,componentLayout:"textareafield",setGrowSizePolicy:Ext.emptyFn,returnRe:/\r/g,inputCls:Ext.baseCSSPrefix+"form-textarea",getSubTplData:function(){var c=this,b=c.getFieldStyle(),a=c.callParent();if(c.grow){if(c.preventScrollbars){a.fieldStyle=(b||"")+";overflow:hidden;height:"+c.growMin+"px"}}Ext.applyIf(a,{cols:c.cols,rows:c.rows});return a},afterRender:function(){var a=this;a.callParent(arguments);a.needsMaxCheck=a.enforceMaxLength&&a.maxLength!==Number.MAX_VALUE&&!Ext.supports.TextAreaMaxLength;if(a.needsMaxCheck){a.inputEl.on("paste",a.onPaste,a)}},transformRawValue:function(a){return this.stripReturns(a)},transformOriginalValue:function(a){return this.stripReturns(a)},getValue:function(){return this.stripReturns(this.callParent())},valueToRaw:function(a){a=this.stripReturns(a);return this.callParent([a])},stripReturns:function(a){if(a){a=a.replace(this.returnRe,"")}return a},onPaste:function(b){var a=this;if(!a.pasteTask){a.pasteTask=new Ext.util.DelayedTask(a.pasteCheck,a)}a.pasteTask.delay(1)},pasteCheck:function(){var b=this,c=b.getValue(),a=b.maxLength;if(c.length>a){c=c.substr(0,a);b.setValue(c)}},fireKey:function(d){var b=this,a=d.getKey(),c;if(d.isSpecialKey()&&(b.enterIsSpecial||(a!==d.ENTER||d.hasModifier()))){b.fireEvent("specialkey",b,d)}if(b.needsMaxCheck&&a!==d.BACKSPACE&&a!==d.DELETE&&!d.isNavKeyPress()&&!b.isCutCopyPasteSelectAll(d,a)){c=b.getValue();if(c.length>=b.maxLength){d.stopEvent()}}},isCutCopyPasteSelectAll:function(b,a){if(b.ctrlKey){return a===b.A||a===b.C||a===b.V||a===b.X}return false},autoSize:function(){var b=this,a;if(b.grow&&b.rendered){b.updateLayout();a=b.inputEl.getHeight();if(a!==b.lastInputHeight){b.fireEvent("autosize",b,a);b.lastInputHeight=a}}},initAria:function(){this.callParent(arguments);this.getActionEl().dom.setAttribute("aria-multiline",true)},beforeDestroy:function(){var a=this.pasteTask;if(a){a.cancel();this.pasteTask=null}this.callParent()}});Ext.define("Ext.form.field.Display",{extend:Ext.form.field.Base,alias:"widget.displayfield",alternateClassName:["Ext.form.DisplayField","Ext.form.Display"],fieldSubTpl:['
    style="{fieldStyle}"',' class="{fieldCls}">{value}
    ',{compiled:true,disableFormats:true}],fieldCls:Ext.baseCSSPrefix+"form-display-field",htmlEncode:false,validateOnChange:false,initEvents:Ext.emptyFn,submitValue:false,isDirty:function(){return false},isValid:function(){return true},validate:function(){return true},getRawValue:function(){return this.rawValue},setRawValue:function(b){var a=this,c;b=Ext.value(b,"");a.rawValue=b;if(a.rendered){a.inputEl.dom.innerHTML=a.getDisplayValue();a.updateLayout()}return b},getDisplayValue:function(){var a=this,b=this.getRawValue(),c;if(a.renderer){c=a.renderer.call(a.scope||a,b,a)}else{c=a.htmlEncode?Ext.util.Format.htmlEncode(b):b}return c},getSubTplData:function(){var a=this.callParent(arguments);a.value=this.getDisplayValue();return a}});Ext.define("Ext.layout.container.Anchor",{alias:"layout.anchor",extend:Ext.layout.container.Auto,alternateClassName:"Ext.layout.AnchorLayout",type:"anchor",defaultAnchor:"100%",parseAnchorRE:/^(r|right|b|bottom)$/i,manageOverflow:true,beginLayoutCycle:function(c){var j=this,a=0,g,k,e,d,b,h;j.callParent(arguments);e=c.childItems;b=e.length;for(d=0;d{%this.renderContainer(out,values)%}',initComponent:function(){var a=this;a.initLabelable();a.initFieldAncestor();a.callParent();a.initMonitor()},getOverflowEl:function(){return this.containerEl},onAdd:function(a){var b=this;if(Ext.isGecko&&b.layout.type==="absolute"&&!b.hideLabel&&b.labelAlign!=="top"){a.x+=(b.labelWidth+b.labelPad)}b.callParent(arguments);b.updateLabel()},onRemove:function(a,b){var c=this;c.callParent(arguments);if(!b){c.updateLabel()}},initRenderTpl:function(){var a=this;if(!a.hasOwnProperty("renderTpl")){a.renderTpl=a.getTpl("labelableRenderTpl")}return a.callParent()},initRenderData:function(){var a=this,b=a.callParent();b.containerElCls=a.containerElCls;return Ext.applyIf(b,a.getLabelableRenderData())},getFieldLabel:function(){var a=this.fieldLabel||"";if(!a&&this.combineLabels){a=Ext.Array.map(this.query("[isFieldLabelable]"),function(b){return b.getFieldLabel()}).join(this.labelConnector)}return a},getSubTplData:function(){var a=this.initRenderData();Ext.apply(a,this.subTplData);return a},getSubTplMarkup:function(){var c=this,a=c.getTpl("fieldSubTpl"),b;if(!a.renderContent){c.setupRenderTpl(a)}b=a.apply(c.getSubTplData());return b},updateLabel:function(){var b=this,a=b.labelEl;if(a){b.setFieldLabel(b.getFieldLabel())}},onFieldErrorChange:function(e,b){if(this.combineErrors){var d=this,g=d.getActiveError(),c=Ext.Array.filter(d.query("[isFormField]"),function(h){return h.hasActiveError()}),a=d.getCombinedErrors(c);if(a){d.setActiveErrors(a)}else{d.unsetActiveError()}if(g!==d.getActiveError()){d.doComponentLayout()}}},getCombinedErrors:function(e){var k=[],c,l=e.length,i,d,j,b,g,h;for(c=0;c','','',"{% this.renderColumn(out,parent,xindex-1) %}","","",""],lastOwnerItemsGeneration:null,beginLayout:function(b){var k=this,e,d,h,a,j,g=0,m=0,l=k.autoFlex,c=k.innerCt.dom.style;k.callParent(arguments);e=k.columnNodes;b.innerCtContext=b.getEl("innerCt",k);if(!b.widthModel.shrinkWrap){d=e.length;if(k.columnsArray){for(h=0;ha){d=b-a;g=e.rowEl;for(c=0;c style="{bodyStyle}"
    >',"{%this.renderContainer(out,values);%}",""],stateEvents:["collapse","expand"],maskOnDisable:false,beforeDestroy:function(){var b=this,a=b.legend;if(a){delete a.ownerCt;a.destroy();b.legend=null}b.callParent()},initComponent:function(){var b=this,a=b.baseCls;b.callParent();b.layout.managePadding=b.layout.manageOverflow=false;b.addEvents("beforeexpand","beforecollapse","expand","collapse");if(b.collapsed){b.addCls(a+"-collapsed");b.collapse()}if(b.title||b.checkboxToggle||b.collapsible){b.addTitleClasses();b.legend=Ext.widget(b.createLegendCt())}},initPadding:function(g){var d=this,c=Ext.Element,a=d.getProtoBody(),e=d.padding,b;if(e!==undefined){if(Ext.isIEQuirks||Ext.isIE8m){e=c.parseBox(e);b=c.parseBox(0);b.top=e.top;e.top=0;a.setStyle("padding",c.unitizeBox(b))}g.setStyle("padding",c.unitizeBox(e))}},getProtoBody:function(){var b=this,a=b.protoBody;if(!a){b.protoBody=a=new Ext.util.ProtoElement({styleProp:"bodyStyle",styleIsText:true})}return a},initRenderData:function(){var a=this,b=a.callParent();b.bodyTargetCls=a.bodyTargetCls;a.protoBody.writeTo(b);delete a.protoBody;return b},getState:function(){var a=this.callParent();a=this.addPropertyToState(a,"collapsed");return a},afterCollapse:Ext.emptyFn,afterExpand:Ext.emptyFn,collapsedHorizontal:function(){return true},collapsedVertical:function(){return true},createLegendCt:function(){var c=this,a=[],b={xtype:"container",baseCls:c.baseCls+"-header",id:c.id+"-legend",autoEl:"legend",items:a,ownerCt:c,shrinkWrap:true,ownerLayout:c.componentLayout};if(c.checkboxToggle){a.push(c.createCheckboxCmp())}else{if(c.collapsible){a.push(c.createToggleCmp())}}a.push(c.createTitleCmp());return b},createTitleCmp:function(){var b=this,a={xtype:"component",html:b.title,cls:b.baseCls+"-header-text",id:b.id+"-legendTitle"};if(b.collapsible&&b.toggleOnTitleClick){a.listeners={click:{element:"el",scope:b,fn:b.toggle}};a.cls+=" "+b.baseCls+"-header-text-collapsible"}return(b.titleCmp=Ext.widget(a))},createCheckboxCmp:function(){var a=this,b="-checkbox";a.checkboxCmp=Ext.widget({xtype:"checkbox",hideEmptyLabel:true,name:a.checkboxName||a.id+b,cls:a.baseCls+"-header"+b,id:a.id+"-legendChk",checked:!a.collapsed,listeners:{change:a.onCheckChange,scope:a}});return a.checkboxCmp},createToggleCmp:function(){var a=this;a.toggleCmp=Ext.widget({xtype:"tool",height:15,width:15,type:"toggle",handler:a.toggle,id:a.id+"-legendToggle",scope:a});return a.toggleCmp},doRenderLegend:function(b,e){var d=e.$comp,c=d.legend,a;if(c){c.ownerLayout.configureItem(c);a=c.getRenderTree();Ext.DomHelper.generateMarkup(a,b)}},finishRender:function(){var a=this.legend;this.callParent();if(a){a.finishRender()}},getCollapsed:function(){return this.collapsed?"top":false},getCollapsedDockedItems:function(){var a=this.legend;return a?[a]:[]},setTitle:function(d){var c=this,b=c.legend,a=c.baseCls;c.title=d;if(c.rendered){if(!b){c.legend=b=Ext.widget(c.createLegendCt());c.addTitleClasses();b.ownerLayout.configureItem(b);b.render(c.el,0)}c.titleCmp.update(d)}else{if(b){c.titleCmp.update(d)}else{c.addTitleClasses();c.legend=Ext.widget(c.createLegendCt())}}return c},addTitleClasses:function(){var b=this,c=b.title,a=b.baseCls;if(c){b.addCls(a+"-with-title")}if(c||b.checkboxToggle||b.collapsible){b.addCls(a+"-with-header")}},applyTargetCls:function(a){this.bodyTargetCls=a},getTargetEl:function(){return this.body||this.frameBody||this.el},getDefaultContentTarget:function(){return this.body},expand:function(){return this.setExpanded(true)},collapse:function(){return this.setExpanded(false)},setExpanded:function(b){var c=this,d=c.checkboxCmp,a=b?"expand":"collapse";if(!c.rendered||c.fireEvent("before"+a,c)!==false){b=!!b;if(d){d.setValue(b)}if(b){c.removeCls(c.baseCls+"-collapsed")}else{c.addCls(c.baseCls+"-collapsed")}c.collapsed=!b;if(c.rendered){c.updateLayout({isRoot:false});c.fireEvent(a,c)}}return c},getRefItems:function(a){var c=this.callParent(arguments),b=this.legend;if(b){c.unshift(b);if(a){c.unshift.apply(c,b.getRefItems(true))}}return c},toggle:function(){this.setExpanded(!!this.collapsed)},onCheckChange:function(b,a){this.setExpanded(a)},setupRenderTpl:function(a){this.callParent(arguments);a.renderLegend=this.doRenderLegend}});Ext.define("Ext.form.Label",{extend:Ext.Component,alias:"widget.label",autoEl:"label",maskOnDisable:false,getElConfig:function(){var a=this;a.html=a.text?Ext.util.Format.htmlEncode(a.text):(a.html||"");return Ext.apply(a.callParent(),{htmlFor:a.forId||""})},setText:function(c,b){var a=this;b=b!==false;if(b){a.text=c;delete a.html}else{a.html=c;delete a.text}if(a.rendered){a.el.dom.innerHTML=b!==false?Ext.util.Format.htmlEncode(c):c;a.updateLayout()}return a}});Ext.define("Ext.form.Panel",{extend:Ext.panel.Panel,mixins:{fieldAncestor:Ext.form.FieldAncestor},alias:"widget.form",alternateClassName:["Ext.FormPanel","Ext.form.FormPanel"],layout:"anchor",ariaRole:"form",basicFormConfigs:["api","baseParams","errorReader","jsonSubmit","method","paramOrder","paramsAsHash","reader","standardSubmit","timeout","trackResetOnLoad","url","waitMsgTarget","waitTitle"],initComponent:function(){var a=this;if(a.frame){a.border=false}a.initFieldAncestor();a.callParent();a.relayEvents(a.form,["beforeaction","actionfailed","actioncomplete","validitychange","dirtychange"]);if(a.pollForChanges){a.startPolling(a.pollInterval||500)}},initItems:function(){this.callParent();this.initMonitor();this.form=this.createForm()},afterFirstLayout:function(){this.callParent(arguments);this.form.initialize()},createForm:function(){var b={},d=this.basicFormConfigs,a=d.length,c=0,e;for(;c","{beforeBoxLabelTpl}",'","{afterBoxLabelTpl}","
    ",' tabIndex="{tabIdx}"
    ',' disabled="disabled"',' style="{fieldStyle}"',' class="{fieldCls} {typeCls} {inputCls}" autocomplete="off" hidefocus="true" />',"","{beforeBoxLabelTpl}",'","{afterBoxLabelTpl}","",{disableFormats:true,compiled:true}],subTplInsertions:["beforeBoxLabelTpl","afterBoxLabelTpl","beforeBoxLabelTextTpl","afterBoxLabelTextTpl","boxLabelAttrTpl","inputAttrTpl"],isCheckbox:true,focusCls:"form-checkbox-focus",fieldBodyCls:Ext.baseCSSPrefix+"form-cb-wrap",checked:false,checkedCls:Ext.baseCSSPrefix+"form-cb-checked",boxLabelCls:Ext.baseCSSPrefix+"form-cb-label",boxLabelAlign:"after",inputValue:"on",checkChangeEvents:[],inputType:"checkbox",onRe:/^on$/i,inputCls:Ext.baseCSSPrefix+"form-cb",initComponent:function(){this.callParent(arguments);this.getManager().add(this)},initValue:function(){var b=this,a=!!b.checked;b.originalValue=b.lastValue=a;b.setValue(a)},getElConfig:function(){var a=this;if(a.isChecked(a.rawValue,a.inputValue)){a.addCls(a.checkedCls)}return a.callParent()},getFieldStyle:function(){return Ext.isObject(this.fieldStyle)?Ext.DomHelper.generateStyles(this.fieldStyle):this.fieldStyle||""},getSubTplData:function(){var a=this;return Ext.apply(a.callParent(),{disabled:a.readOnly||a.disabled,boxLabel:a.boxLabel,boxLabelCls:a.boxLabelCls,boxLabelAlign:a.boxLabelAlign})},initEvents:function(){var a=this;a.callParent();a.mon(a.inputEl,"click",a.onBoxClick,a)},setBoxLabel:function(a){var b=this;b.boxLabel=a;if(b.rendered){b.boxLabelEl.update(a)}},onBoxClick:function(b){var a=this;if(!a.disabled&&!a.readOnly){this.setValue(!this.checked)}},getRawValue:function(){return this.checked},getValue:function(){return this.checked},getSubmitValue:function(){var a=this.uncheckedValue,b=Ext.isDefined(a)?a:null;return this.checked?this.inputValue:b},isChecked:function(b,a){return(b===true||b==="true"||b==="1"||b===1||(((Ext.isString(b)||Ext.isNumber(b))&&a)?b==a:this.onRe.test(b)))},setRawValue:function(c){var b=this,d=b.inputEl,a=b.isChecked(c,b.inputValue);if(d){b[a?"addCls":"removeCls"](b.checkedCls)}b.checked=b.rawValue=a;return a},setValue:function(g){var e=this,c,b,a,d;if(Ext.isArray(g)){c=e.getManager().getByName(e.name,e.getFormId()).items;a=c.length;for(b=0;b'+d+""+c.getTriggerMarkup()+""},getSubTplData:function(){var b=this,c=b.callParent(),d=b.readOnly===true,a=b.editable!==false;return Ext.apply(c,{editableCls:(d||!a)?" "+b.triggerNoEditCls:"",readOnly:!a||d})},getLabelableRenderData:function(){var b=this,c=b.triggerWrapCls,a=b.callParent(arguments);return Ext.applyIf(a,{triggerWrapCls:c,triggerMarkup:b.getTriggerMarkup()})},getTriggerMarkup:function(){var e=this,c=0,j=(e.readOnly||e.hideTrigger),a,g=e.triggerBaseCls,h=[],d=Ext.dom.Element.unselectableCls,b="width:"+e.triggerWidth+"px;"+(j?"display:none;":""),k=e.extraTriggerCls+" "+Ext.baseCSSPrefix+"trigger-cell "+d;if(!e.trigger1Cls){e.trigger1Cls=e.triggerCls}for(c=0;(a=e["trigger"+(c+1)+"Cls"])||c<1;c++){h.push({tag:"td",valign:"top",cls:k,style:b,cn:{cls:[Ext.baseCSSPrefix+"trigger-index-"+c,g,a].join(" "),role:"button"}})}h[0].cn.cls+=" "+g+"-first";return Ext.DomHelper.markup(h)},disableCheck:function(){return !this.disabled},beforeRender:function(){var a=this,b=a.triggerBaseCls,c;if(!a.triggerWidth){c=Ext.getBody().createChild({style:"position: absolute;",cls:Ext.baseCSSPrefix+"form-trigger"});Ext.form.field.Trigger.prototype.triggerWidth=c.getWidth();c.remove()}a.callParent();if(b!=Ext.baseCSSPrefix+"form-trigger"){a.addChildEls({name:"triggerEl",select:"."+b})}a.lastTriggerStateFlags=a.getTriggerStateFlags()},onRender:function(){var a=this;a.callParent(arguments);a.doc=Ext.getDoc();a.initTrigger()},getTriggerWidth:function(){var b=this,a=0;if(b.triggerWrap&&!b.hideTrigger&&!b.readOnly){a=b.triggerEl.getCount()*b.triggerWidth}return a},setHideTrigger:function(a){if(a!=this.hideTrigger){this.hideTrigger=a;this.updateLayout()}},setEditable:function(a){if(a!=this.editable){this.editable=a;this.updateLayout()}},setReadOnly:function(c){var b=this,a=b.readOnly;b.callParent(arguments);if(c!=a){b.updateLayout()}},initTrigger:function(){var h=this,i=h.triggerWrap,k=h.triggerEl,a=h.disableCheck,d,c,b,g,j;if(h.repeatTriggerClick){h.triggerRepeater=new Ext.util.ClickRepeater(i,{preventDefault:true,handler:h.onTriggerWrapClick,listeners:{mouseup:h.onTriggerWrapMouseup,scope:h},scope:h})}else{h.mon(i,{click:h.onTriggerWrapClick,mouseup:h.onTriggerWrapMouseup,scope:h})}k.setVisibilityMode(Ext.Element.DISPLAY);k.addClsOnOver(h.triggerBaseCls+"-over",a,h);d=k.elements;c=d.length;for(g=0;g1){c.doSelect(a,d,false)}else{if(!b){c.doSelect(a,false)}}}}}break;case"SIMPLE":if(b){c.doDeselect(a)}else{c.doSelect(a,true)}break;case"SINGLE":if(c.allowDeselect&&b){c.doDeselect(a)}else{c.doSelect(a,false)}break}if(!g.shiftKey){if(c.isSelected(a)){c.selectionStart=a}else{c.selectionStart=null}}},afterKeyNavigate:function(g,d){var h=this,c,a,b=h.isSelected(d),j=(h.selectionStart&&h.isSelected(h.lastFocused))?h.selectionStart:(h.selectionStart=h.lastFocused),k=g.getCharCode(),l=k===g.SPACE,i=k===g.UP||k===g.PAGE_UP?"up":(k===g.DOWN||k===g.DOWN?"down":null);switch(h.selectionMode){case"MULTI":if(l){if(g.shiftKey){h.selectRange(j,d,g.ctrlKey)}else{if(b){h.doDeselect(d,g.ctrlKey);h.setLastFocused(null);h.setLastFocused(d)}else{h.doSelect(d,g.ctrlKey)}}}else{if(g.shiftKey&&j){a=h.store.indexOf(j);c=h.store.indexOf(d);if(i==="up"&&a<=c){h.deselectRange(h.lastFocused,c+1)}else{if(i==="down"&&a>=c){h.deselectRange(h.lastFocused,c-1)}else{if(j!==d){h.selectRange(j,d,g.ctrlKey)}}}h.lastSelected=d;h.setLastFocused(d)}else{if(g.ctrlKey&&b){h.setLastFocused(d)}else{if(g.ctrlKey){h.setLastFocused(d)}else{h.doSelect(d,false)}}}}break;case"SIMPLE":if(b){h.doDeselect(d)}else{h.doSelect(d,true)}break;case"SINGLE":if(l){if(b){h.doDeselect(d);h.setLastFocused(d)}else{h.doSelect(d)}}else{if(g.ctrlKey){h.setLastFocused(d)}else{if(h.allowDeselect&&b){h.doDeselect(d)}else{h.doSelect(d,false)}}}break}if(!g.shiftKey){if(h.isSelected(d)){h.selectionStart=d}}},selectRange:function(c,b,h){var g=this,a=g.store,d,e=[];if(g.isLocked()){return}if(!h){g.deselectAll(true)}if(!Ext.isNumber(c)){c=a.indexOf(c)}if(!Ext.isNumber(b)){b=a.indexOf(b)}if(c>b){d=b;b=c;c=d}for(d=c;d<=b;d++){if(!g.isSelected(a.getAt(d))){e.push(a.getAt(d))}}g.doMultiSelect(e,true)},deselectRange:function(d,c){var h=this,b=h.store,g,e,a;if(h.isLocked()){return}if(!Ext.isNumber(d)){d=b.indexOf(d)}if(!Ext.isNumber(c)){c=b.indexOf(c)}if(d>c){e=c;c=d;d=e}for(g=d;g<=c;g++){a=b.getAt(g);if(h.isSelected(a)){h.deselect(a)}}},onModelIdChanged:function(a,d,e,c,b){this.selected.updateKey(b,c)},select:function(b,c,a){if(Ext.isDefined(b)){this.doSelect(b,c,a)}},deselect:function(b,a){this.doDeselect(b,a)},doSelect:function(c,e,b){var d=this,a;if(d.locked||!d.store){return}if(typeof c==="number"){a=d.store.getAt(c);if(!a){return}c=[a]}if(d.selectionMode=="SINGLE"&&c){a=c.length?c[0]:c;d.doSingleSelect(a,b)}else{d.doMultiSelect(c,e,b)}},doMultiSelect:function(a,l,k){var h=this,b=h.selected,j=false,d=0,g,e;if(h.locked){return}a=!Ext.isArray(a)?[a]:a;g=a.length;if(!l&&b.getCount()>0){if(h.doDeselect(h.getSelection(),k)===false){return}}function c(){b.add(e);j=true}for(;d0&&!k);return g===l},doSingleSelect:function(a,b){var d=this,g=false,c=d.selected;if(d.locked){return}if(d.isSelected(a)){return}function e(){d.bulkChange=true;if(c.getCount()>0&&d.doDeselect(d.lastSelected,b)===false){delete d.bulkChange;return false}delete d.bulkChange;c.add(a);d.lastSelected=a;g=true}d.onSelectChange(a,true,b,e);if(g){if(!b&&!d.preventFocus){d.setLastFocused(a)}d.maybeFireSelectionChange(!b)}},setLastFocused:function(c,b){var d=this,a=d.lastFocused;d.lastFocused=c;if(c!==a){d.onLastFocusChanged(a,c,b)}},isFocused:function(a){return a===this.getLastFocused()},maybeFireSelectionChange:function(a){var b=this;if(a&&!b.bulkChange){b.fireEvent("selectionchange",b,b.getSelection())}},getLastSelected:function(){return this.lastSelected},getLastFocused:function(){return this.lastFocused},getSelection:function(){return this.selected.getRange()},getSelectionMode:function(){return this.selectionMode},setSelectionMode:function(a){a=a?a.toUpperCase():"SINGLE";this.selectionMode=this.modes[a]?a:"SINGLE"},isLocked:function(){return this.locked},setLocked:function(a){this.locked=!!a},isRangeSelected:function(h,g){var e=this,a=e.store,d=a.indexOf(h),c=a.indexOf(g),b;if(c0},getSelectionId:function(a){return a.internalId},pruneIf:function(){var g=this,d=g.selected,c=[],a=d.length,b,e;if(g.pruneRemoved){for(b=0;b0){this.clearSelections();this.maybeFireSelectionChange(true)}},onStoreRemove:function(c,b,d,a){var e=this;if(e.selectionStart&&Ext.Array.contains(b,e.selectionStart)){e.selectionStart=null}if(a||e.locked||!e.pruneRemoved){return}e.deselectDeletedRecords(b)},deselectDeletedRecords:function(b){var g=this,d=g.selected,c,e=b.length,h=0,a;for(c=0;c=c){a=0}}e.select(a)},onSelectChange:function(b,e,d,h){var g=this,a=g.view,c=e?"select":"deselect";if((d||g.fireEvent("before"+c,g,b))!==false&&h()!==false){if(a){if(e){a.onItemSelect(b)}else{a.onItemDeselect(b)}}if(!d){g.fireEvent(c,g,b)}}},onLastFocusChanged:function(d,b,c){var a=this.view;if(a&&!c&&b){a.focusNode(b);this.fireEvent("focuschange",this,d,b)}},destroy:function(){Ext.destroy(this.keyNav);this.callParent()}});Ext.define("Ext.view.AbstractView",{extend:Ext.Component,mixins:{bindable:Ext.util.Bindable},inheritableStatics:{getRecord:function(a){return this.getBoundView(a).getRecord(a)},getBoundView:function(a){return Ext.getCmp(a.boundView)}},deferInitialRefresh:true,itemCls:Ext.baseCSSPrefix+"dataview-item",loadingText:"Loading...",loadMask:true,loadingUseMsg:true,selectedItemCls:Ext.baseCSSPrefix+"item-selected",emptyText:"",deferEmptyText:true,trackOver:false,blockRefresh:false,preserveScrollOnRefresh:false,last:false,triggerEvent:"itemclick",triggerCtEvent:"containerclick",addCmpEvents:function(){},initComponent:function(){var c=this,a=Ext.isDefined,d=c.itemTpl,b={};if(d){if(Ext.isArray(d)){d=d.join("")}else{if(Ext.isObject(d)){b=Ext.apply(b,d.initialConfig);d=d.html}}if(!c.itemSelector){c.itemSelector="."+c.itemCls}d=Ext.String.format('
    {1}
    ',c.itemCls,d);c.tpl=new Ext.XTemplate(d,b)}c.callParent();c.tpl=c.getTpl("tpl");if(c.overItemCls){c.trackOver=true}c.addEvents("beforerefresh","refresh","viewready","itemupdate","itemadd","itemremove");c.addCmpEvents();c.store=Ext.data.StoreManager.lookup(c.store||"ext-empty-store");if(!c.dataSource){c.dataSource=c.store}c.bindStore(c.dataSource,true,"dataSource");if(!c.all){c.all=new Ext.CompositeElementLite()}c.scrollState={top:0,left:0};c.on({scroll:c.onViewScroll,element:"el",scope:c})},onRender:function(){var c=this,b=c.loadMask,a={target:c,msg:c.loadingText,msgCls:c.loadingCls,useMsg:c.loadingUseMsg,store:c.getMaskStore()};c.callParent(arguments);if(b){if(Ext.isObject(b)){a=Ext.apply(a,b)}c.loadMask=new Ext.LoadMask(a);c.loadMask.on({scope:c,beforeshow:c.onMaskBeforeShow,hide:c.onMaskHide})}},finishRender:function(){var a=this;a.callParent(arguments);if(!a.up("[collapsed],[hidden]")){a.doFirstRefresh(a.dataSource)}},onBoxReady:function(){var a=this;a.callParent(arguments);if(!a.firstRefreshDone){a.doFirstRefresh(a.dataSource)}},getMaskStore:function(){return this.store},onMaskBeforeShow:function(){var b=this,a=b.loadingHeight;if(a&&a>b.getHeight()){b.hasLoadingHeight=true;b.oldMinHeight=b.minHeight;b.minHeight=a;b.updateLayout()}},onMaskHide:function(){var a=this;if(!a.destroying&&a.hasLoadingHeight){a.minHeight=a.oldMinHeight;a.updateLayout();delete a.hasLoadingHeight}},beforeRender:function(){this.callParent(arguments);this.getSelectionModel().beforeViewRender(this)},afterRender:function(){this.callParent(arguments);this.getSelectionModel().bindComponent(this)},getSelectionModel:function(){var a=this,b="SINGLE";if(a.simpleSelect){b="SIMPLE"}else{if(a.multiSelect){b="MULTI"}}if(!a.selModel||!a.selModel.events){a.selModel=new Ext.selection.DataViewModel(Ext.apply({allowDeselect:a.allowDeselect,mode:b},a.selModel))}if(!a.selModel.hasRelaySetup){a.relayEvents(a.selModel,["selectionchange","beforeselect","beforedeselect","select","deselect","focuschange"]);a.selModel.hasRelaySetup=true}if(a.disableSelection){a.selModel.locked=true}return a.selModel},refresh:function(){var c=this,h,b,e,d,g,a;if(!c.rendered||c.isDestroyed){return}if(!c.hasListeners.beforerefresh||c.fireEvent("beforerefresh",c)!==false){h=c.getTargetEl();a=c.getViewRange();g=h.dom;if(!c.preserveScrollOnRefresh){b=g.parentNode;e=g.style.display;g.style.display="none";d=g.nextSibling;b.removeChild(g)}if(c.refreshCounter){c.clearViewEl()}else{c.fixedNodes=h.dom.childNodes.length;c.refreshCounter=1}c.tpl.append(h,c.collectData(a,c.all.startIndex));if(a.length<1){if(!this.store.loading&&(!c.deferEmptyText||c.hasFirstRefresh)){Ext.core.DomHelper.insertHtml("beforeEnd",h.dom,c.emptyText)}c.all.clear()}else{c.collectNodes(h.dom);c.updateIndexes(0)}if(c.hasFirstRefresh){if(c.refreshSelmodelOnRefresh!==false){c.selModel.refresh()}else{c.selModel.pruneIf()}}c.hasFirstRefresh=true;if(!c.preserveScrollOnRefresh){b.insertBefore(g,d);g.style.display=e}this.refreshSize();c.fireEvent("refresh",c);if(!c.viewReady){c.viewReady=true;c.fireEvent("viewready",c)}}},collectNodes:function(a){this.all.fill(Ext.query(this.getItemSelector(),Ext.getDom(a)),this.all.startIndex)},getViewRange:function(){return this.dataSource.getRange()},refreshSize:function(){var a=this.getSizeModel();if(a.height.shrinkWrap||a.width.shrinkWrap){this.updateLayout()}},clearViewEl:function(){var b=this,a=b.getTargetEl();if(b.fixedNodes){while(a.dom.childNodes[b.fixedNodes]){a.dom.removeChild(a.dom.childNodes[b.fixedNodes])}}else{a.update("")}b.refreshCounter++},onViewScroll:Ext.emptyFn,onIdChanged:Ext.emptyFn,saveScrollState:function(){if(this.rendered){var b=this.el.dom,a=this.scrollState;a.left=b.scrollLeft;a.top=b.scrollTop}},restoreScrollState:function(){if(this.rendered){var b=this.el.dom,a=this.scrollState;b.scrollLeft=a.left;b.scrollTop=a.top}},prepareData:function(e,d,c){var b,a,g;if(c){b=c.getAssociatedData();for(a in b){if(b.hasOwnProperty(a)){if(!g){e=Ext.Object.chain(e);g=true}e[a]=b[a]}}}return e},collectData:function(c,g){var e=[],d=0,a=c.length,b;for(;d-1){c=d.bufferRender([a],b)[0];if(d.getNode(a)){d.all.replaceElement(b,c,true);d.updateIndexes(b,b);d.selModel.onUpdate(a);if(d.hasListeners.itemupdate){d.fireEvent("itemupdate",a,b,c)}return c}}}},onAdd:function(c,b,d){var e=this,a;if(e.rendered){if(e.all.getCount()===0){e.refresh();a=e.all.slice()}else{a=e.doAdd(b,d);if(e.refreshSelmodelOnRefresh!==false){e.selModel.refresh()}e.updateIndexes(d);e.refreshSize()}if(e.hasListeners.itemadd){e.fireEvent("itemadd",b,d,a)}}},doAdd:function(c,d){var j=this,b=j.bufferRender(c,d,true),g=j.all,h=g.getCount(),e,a;if(h===0){for(e=0,a=b.length;e=0;--e){g.fireEvent("itemremove",b[e],d[e])}}g.refresh()}else{for(e=d.length-1;e>=0;--e){a=b[e];c=d[e];g.doRemove(a,c);if(h){g.fireEvent("itemremove",a,c)}}g.updateIndexes(d[0])}this.refreshSize()}},doRemove:function(a,b){this.all.removeElement(b,true)},refreshNode:function(a){this.onUpdate(this.dataSource,this.dataSource.getAt(a))},updateIndexes:function(e,d){var b=this.all.elements,a=this.getViewRange(),c;e=e||0;d=d||((d===0)?0:(b.length-1));for(c=e;c<=d;c++){b[c].viewIndex=c;b[c].viewRecordId=a[c].internalId;if(!b[c].boundView){b[c].boundView=this.id}}},getStore:function(){return this.store},bindStore:function(a,b,d){var c=this;c.mixins.bindable.bindStore.apply(c,arguments);if(!b){c.getSelectionModel().bindStore(a)}if(c.componentLayoutCounter){c.doFirstRefresh(a)}},doFirstRefresh:function(a){var b=this;b.firstRefreshDone=true;if(a&&!a.loading){if(b.deferInitialRefresh){b.applyFirstRefresh()}else{b.refresh()}}},applyFirstRefresh:function(){var a=this;if(a.isDestroyed){return}if(a.up("[isCollapsingOrExpanding]")){Ext.Function.defer(a.applyFirstRefresh,100,a)}else{Ext.Function.defer(function(){if(!a.isDestroyed){a.refresh()}},1)}},onUnbindStore:function(a){this.setMaskBind(null)},onBindStore:function(a,b,c){this.setMaskBind(a);if(!b&&c==="store"){this.bindStore(a,false,"dataSource")}},setMaskBind:function(b){var a=this.loadMask;if(a&&a.bindStore){a.bindStore(b)}},getStoreListeners:function(){var a=this;return{idchanged:a.onIdChanged,refresh:a.onDataRefresh,add:a.onAdd,bulkremove:a.onRemove,update:a.onUpdate,clear:a.refresh}},onDataRefresh:function(){var a=this,b=!a.firstRefreshDone&&(!a.rendered||a.up("[collapsed],[isCollapsingOrExpanding],[hidden]"));if(b){a.deferInitialRefresh=false}else{if(a.blockRefresh!==true){a.firstRefreshDone=true;a.refresh.apply(a,arguments)}}},findItemByChild:function(a){return Ext.fly(a).findParent(this.getItemSelector(),this.getTargetEl())},findTargetByEvent:function(a){return a.getTarget(this.getItemSelector(),this.getTargetEl())},getSelectedNodes:function(){var b=[],a=this.selModel.getSelection(),d=a.length,c=0;for(;ch.bottom){a=c.bottom-h.bottom}}if(c.lefth.right){b=c.right-h.right}}if(b||a){g.scrollBy(b,a,false)}d.focus()}}});Ext.define("Ext.layout.component.BoundList",{extend:Ext.layout.component.Auto,alias:"layout.boundlist",type:"component",beginLayout:function(d){var c=this,a=c.owner,b=a.pagingToolbar;c.callParent(arguments);if(a.floating){d.savedXY=a.getXY();a.setXY([0,-9999])}if(b){d.toolbarContext=d.context.getCmp(b)}d.listContext=d.getEl("listEl")},beginLayoutCycle:function(b){var a=this.owner;this.callParent(arguments);if(b.heightModel.auto){a.el.setHeight("auto");a.listEl.setHeight("auto")}},getLayoutItems:function(){var a=this.owner.pagingToolbar;return a?[a]:[]},isValidParent:function(){return true},finishedLayout:function(a){var b=a.savedXY;this.callParent(arguments);if(b){this.owner.setXY(b)}},measureContentWidth:function(a){return this.owner.listEl.getWidth()},measureContentHeight:function(a){return this.owner.listEl.getHeight()},publishInnerHeight:function(c,a){var b=c.toolbarContext,d=0;if(b){d=b.getProp("height")}if(d===undefined){this.done=false}else{c.listContext.setHeight(a-c.getFrameInfo().height-d)}},calculateOwnerHeightFromContentHeight:function(c){var a=this.callParent(arguments),b=c.toolbarContext;if(b){a+=b.getProp("height")}return a}});Ext.define("Ext.toolbar.TextItem",{extend:Ext.toolbar.Item,alias:"widget.tbtext",alternateClassName:"Ext.Toolbar.TextItem",text:"",renderTpl:"{text}",baseCls:Ext.baseCSSPrefix+"toolbar-text",beforeRender:function(){var a=this;a.callParent();Ext.apply(a.renderData,{text:a.text})},setText:function(b){var a=this;a.text=b;if(a.rendered){a.el.update(b);a.updateLayout()}}});Ext.define("Ext.form.field.Spinner",{extend:Ext.form.field.Trigger,alias:"widget.spinnerfield",alternateClassName:"Ext.form.Spinner",trigger1Cls:Ext.baseCSSPrefix+"form-spinner-up",trigger2Cls:Ext.baseCSSPrefix+"form-spinner-down",spinUpEnabled:true,spinDownEnabled:true,keyNavEnabled:true,mouseWheelEnabled:true,repeatTriggerClick:true,onSpinUp:Ext.emptyFn,onSpinDown:Ext.emptyFn,triggerTpl:'
    ',initComponent:function(){this.callParent();this.addEvents("spin","spinup","spindown")},onRender:function(){var b=this,a;b.callParent(arguments);a=b.triggerEl;b.spinUpEl=a.item(0);b.spinDownEl=a.item(1);b.triggerCell=b.spinUpEl.parent();if(b.keyNavEnabled){b.spinnerKeyNav=new Ext.util.KeyNav(b.inputEl,{scope:b,up:b.spinUp,down:b.spinDown})}if(b.mouseWheelEnabled){b.mon(b.bodyEl,"mousewheel",b.onMouseWheel,b)}},getSubTplMarkup:function(b){var c=this,a=b.childElCls,d=Ext.form.field.Base.prototype.getSubTplMarkup.apply(c,arguments);return'"+c.getTriggerMarkup()+"
    '+d+"
    "},getTriggerMarkup:function(){return this.getTpl("triggerTpl").apply(this.getTriggerData())},getTriggerData:function(){var a=this,b=(a.readOnly||a.hideTrigger);return{triggerCls:Ext.baseCSSPrefix+"trigger-cell",triggerStyle:b?"display:none":"",spinnerUpCls:!a.spinUpEnabled?a.trigger1Cls+"-disabled":"",spinnerDownCls:!a.spinDownEnabled?a.trigger2Cls+"-disabled":""}},getTriggerWidth:function(){var b=this,a=0;if(b.triggerWrap&&!b.hideTrigger&&!b.readOnly){a=b.triggerWidth}return a},onTrigger1Click:function(){this.spinUp()},onTrigger2Click:function(){this.spinDown()},onTriggerWrapMouseup:function(){this.inputEl.focus()},spinUp:function(){var a=this;if(a.spinUpEnabled&&!a.disabled){a.fireEvent("spin",a,"up");a.fireEvent("spinup",a);a.onSpinUp()}},spinDown:function(){var a=this;if(a.spinDownEnabled&&!a.disabled){a.fireEvent("spin",a,"down");a.fireEvent("spindown",a);a.onSpinDown()}},setSpinUpEnabled:function(a){var b=this,c=b.spinUpEnabled;b.spinUpEnabled=a;if(c!==a&&b.rendered){b.spinUpEl[a?"removeCls":"addCls"](b.trigger1Cls+"-disabled")}},setSpinDownEnabled:function(a){var b=this,c=b.spinDownEnabled;b.spinDownEnabled=a;if(c!==a&&b.rendered){b.spinDownEl[a?"removeCls":"addCls"](b.trigger2Cls+"-disabled")}},onMouseWheel:function(b){var a=this,c;if(a.hasFocus){c=b.getWheelDelta();if(c>0){a.spinUp()}else{if(c<0){a.spinDown()}}b.stopEvent()}},onDestroy:function(){Ext.destroyMembers(this,"spinnerKeyNav","spinUpEl","spinDownEl");this.callParent()}});Ext.define("Ext.form.field.Number",{extend:Ext.form.field.Spinner,alias:"widget.numberfield",alternateClassName:["Ext.form.NumberField","Ext.form.Number"],allowDecimals:true,decimalSeparator:".",submitLocaleSeparator:true,decimalPrecision:2,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,step:1,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",negativeText:"The value cannot be negative",baseChars:"0123456789",autoStripChars:false,initComponent:function(){var a=this;a.callParent();a.setMinValue(a.minValue);a.setMaxValue(a.maxValue)},getErrors:function(c){var b=this,e=b.callParent(arguments),d=Ext.String.format,a;c=Ext.isDefined(c)?c:this.processRawValue(this.getRawValue());if(c.length<1){return e}c=String(c).replace(b.decimalSeparator,".");if(isNaN(c)){e.push(d(b.nanText,c))}a=b.parseValue(c);if(b.minValue===0&&a<0){e.push(this.negativeText)}else{if(ab.maxValue){e.push(d(b.maxText,b.maxValue))}return e},rawToValue:function(b){var a=this.fixPrecision(this.parseValue(b));if(a===null){a=b||null}return a},valueToRaw:function(c){var b=this,a=b.decimalSeparator;c=b.parseValue(c);c=b.fixPrecision(c);c=Ext.isNumber(c)?c:parseFloat(String(c).replace(a,"."));c=isNaN(c)?"":String(c).replace(".",a);return c},getSubmitValue:function(){var a=this,b=a.callParent();if(!a.submitLocaleSeparator){b=b.replace(a.decimalSeparator,".")}return b},onChange:function(){this.toggleSpinners();this.callParent(arguments)},toggleSpinners:function(){var c=this,d=c.getValue(),b=d===null,a;if(c.spinUpEnabled||c.spinUpDisabledByToggle){a=b||dc.minValue;c.setSpinDownEnabled(a,true)}},setMinValue:function(b){var a=this,c;a.minValue=Ext.Number.from(b,Number.NEGATIVE_INFINITY);a.toggleSpinners();if(a.disableKeyFilter!==true){c=a.baseChars+"";if(a.allowDecimals){c+=a.decimalSeparator}if(a.minValue<0){c+="-"}c=Ext.String.escapeRegex(c);a.maskRe=new RegExp("["+c+"]");if(a.autoStripChars){a.stripCharsRe=new RegExp("[^"+c+"]","gi")}}},setMaxValue:function(a){this.maxValue=Ext.Number.from(a,Number.MAX_VALUE);this.toggleSpinners()},parseValue:function(a){a=parseFloat(String(a).replace(this.decimalSeparator,"."));return isNaN(a)?null:a},fixPrecision:function(d){var c=this,b=isNaN(d),a=c.decimalPrecision;if(b||!d){return b?"":d}else{if(!c.allowDecimals||a<=0){a=0}}return parseFloat(Ext.Number.toFixed(parseFloat(d),a))},beforeBlur:function(){var b=this,a=b.parseValue(b.getRawValue());if(!Ext.isEmpty(a)){b.setValue(a)}},setSpinUpEnabled:function(b,a){this.callParent(arguments);if(!a){delete this.spinUpDisabledByToggle}else{this.spinUpDisabledByToggle=!b}},onSpinUp:function(){var a=this;if(!a.readOnly){a.setSpinValue(Ext.Number.constrain(a.getValue()+a.step,a.minValue,a.maxValue))}},setSpinDownEnabled:function(b,a){this.callParent(arguments);if(!a){delete this.spinDownDisabledByToggle}else{this.spinDownDisabledByToggle=!b}},onSpinDown:function(){var a=this;if(!a.readOnly){a.setSpinValue(Ext.Number.constrain(a.getValue()-a.step,a.minValue,a.maxValue))}},setSpinValue:function(c){var b=this,a;if(b.enforceMaxLength){if(b.fixPrecision(c).toString().length>b.maxLength){return}}b.setValue(c)}});Ext.define("Ext.toolbar.Paging",{extend:Ext.toolbar.Toolbar,alias:"widget.pagingtoolbar",alternateClassName:"Ext.PagingToolbar",mixins:{bindable:Ext.util.Bindable},displayInfo:false,prependButtons:false,displayMsg:"Displaying {0} - {1} of {2}",emptyMsg:"No data to display",beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",inputItemWidth:30,getPagingItems:function(){var a=this;return[{itemId:"first",tooltip:a.firstText,overflowText:a.firstText,iconCls:Ext.baseCSSPrefix+"tbar-page-first",disabled:true,handler:a.moveFirst,scope:a},{itemId:"prev",tooltip:a.prevText,overflowText:a.prevText,iconCls:Ext.baseCSSPrefix+"tbar-page-prev",disabled:true,handler:a.movePrevious,scope:a},"-",a.beforePageText,{xtype:"numberfield",itemId:"inputItem",name:"inputItem",cls:Ext.baseCSSPrefix+"tbar-page-number",allowDecimals:false,minValue:1,hideTrigger:true,enableKeyEvents:true,keyNavEnabled:false,selectOnFocus:true,submitValue:false,isFormField:false,width:a.inputItemWidth,margins:"-1 2 3 2",listeners:{scope:a,keydown:a.onPagingKeyDown,blur:a.onPagingBlur}},{xtype:"tbtext",itemId:"afterTextItem",text:Ext.String.format(a.afterPageText,1)},"-",{itemId:"next",tooltip:a.nextText,overflowText:a.nextText,iconCls:Ext.baseCSSPrefix+"tbar-page-next",disabled:true,handler:a.moveNext,scope:a},{itemId:"last",tooltip:a.lastText,overflowText:a.lastText,iconCls:Ext.baseCSSPrefix+"tbar-page-last",disabled:true,handler:a.moveLast,scope:a},"-",{itemId:"refresh",tooltip:a.refreshText,overflowText:a.refreshText,iconCls:Ext.baseCSSPrefix+"tbar-loading",handler:a.doRefresh,scope:a}]},initComponent:function(){var b=this,c=b.getPagingItems(),a=b.items||b.buttons||[];if(b.prependButtons){b.items=a.concat(c)}else{b.items=c.concat(a)}delete b.buttons;if(b.displayInfo){b.items.push("->");b.items.push({xtype:"tbtext",itemId:"displayItem"})}b.callParent();b.addEvents("change","beforechange");b.on("beforerender",b.onLoad,b,{single:true});b.bindStore(b.store||"ext-empty-store",true)},updateInfo:function(){var e=this,c=e.child("#displayItem"),a=e.store,b=e.getPageData(),d,g;if(c){d=a.getCount();if(d===0){g=e.emptyMsg}else{g=Ext.String.format(e.displayMsg,b.fromRecord,b.toRecord,b.total)}c.setText(g)}},onLoad:function(){var g=this,d,b,c,a,e,h;e=g.store.getCount();h=e===0;if(!h){d=g.getPageData();b=d.currentPage;c=d.pageCount;a=Ext.String.format(g.afterPageText,isNaN(c)?1:c)}else{b=0;c=0;a=Ext.String.format(g.afterPageText,0)}Ext.suspendLayouts();g.child("#afterTextItem").setText(a);g.child("#inputItem").setDisabled(h).setValue(b);g.child("#first").setDisabled(b===1||h);g.child("#prev").setDisabled(b===1||h);g.child("#next").setDisabled(b===c||h);g.child("#last").setDisabled(b===c||h);g.child("#refresh").enable();g.updateInfo();Ext.resumeLayouts(true);if(g.rendered){g.fireEvent("change",g,d)}},getPageData:function(){var b=this.store,a=b.getTotalCount();return{total:a,currentPage:b.currentPage,pageCount:Math.ceil(a/b.pageSize),fromRecord:((b.currentPage-1)*b.pageSize)+1,toRecord:Math.min(b.currentPage*b.pageSize,a)}},onLoadError:function(){if(!this.rendered){return}this.child("#refresh").enable()},readPageFromInput:function(b){var a=this.child("#inputItem").getValue(),c=parseInt(a,10);if(!a||isNaN(c)){this.child("#inputItem").setValue(b.currentPage);return false}return c},onPagingFocus:function(){this.child("#inputItem").select()},onPagingBlur:function(b){var a=this.getPageData().currentPage;this.child("#inputItem").setValue(a)},onPagingKeyDown:function(i,h){var d=this,b=h.getKey(),c=d.getPageData(),a=h.shiftKey?10:1,g;if(b==h.RETURN){h.stopEvent();g=d.readPageFromInput(c);if(g!==false){g=Math.min(Math.max(1,g),c.pageCount);if(d.fireEvent("beforechange",d,g)!==false){d.store.loadPage(g)}}}else{if(b==h.HOME||b==h.END){h.stopEvent();g=b==h.HOME?1:c.pageCount;i.setValue(g)}else{if(b==h.UP||b==h.PAGE_UP||b==h.DOWN||b==h.PAGE_DOWN){h.stopEvent();g=d.readPageFromInput(c);if(g){if(b==h.DOWN||b==h.PAGE_DOWN){a*=-1}g+=a;if(g>=1&&g<=c.pageCount){i.setValue(g)}}}}}},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable()}},moveFirst:function(){if(this.fireEvent("beforechange",this,1)!==false){this.store.loadPage(1)}},movePrevious:function(){var b=this,a=b.store.currentPage-1;if(a>0){if(b.fireEvent("beforechange",b,a)!==false){b.store.previousPage()}}},moveNext:function(){var c=this,b=c.getPageData().pageCount,a=c.store.currentPage+1;if(a<=b){if(c.fireEvent("beforechange",c,a)!==false){c.store.nextPage()}}},moveLast:function(){var b=this,a=b.getPageData().pageCount;if(b.fireEvent("beforechange",b,a)!==false){b.store.loadPage(a)}},doRefresh:function(){var a=this,b=a.store.currentPage;if(a.fireEvent("beforechange",a,b)!==false){a.store.loadPage(b)}},getStoreListeners:function(){return{beforeload:this.beforeLoad,load:this.onLoad,exception:this.onLoadError}},unbind:function(a){this.bindStore(null)},bind:function(a){this.bindStore(a)},onDestroy:function(){this.unbind();this.callParent()}});Ext.define("Ext.view.BoundList",{extend:Ext.view.View,alias:"widget.boundlist",alternateClassName:"Ext.BoundList",pageSize:0,baseCls:Ext.baseCSSPrefix+"boundlist",itemCls:Ext.baseCSSPrefix+"boundlist-item",listItemCls:"",shadow:false,trackOver:true,refreshed:0,deferInitialRefresh:false,componentLayout:"boundlist",childEls:["listEl"],renderTpl:['
    ',"{%","var me=values.$comp, pagingToolbar=me.pagingToolbar;","if (pagingToolbar) {","pagingToolbar.ownerLayout = me.componentLayout;","Ext.DomHelper.generateMarkup(pagingToolbar.getRenderTree(), out);","}","%}",{disableFormats:true}],initComponent:function(){var b=this,a=b.baseCls,c=b.itemCls;b.selectedItemCls=a+"-selected";b.overItemCls=a+"-item-over";b.itemSelector="."+c;if(b.floating){b.addCls(a+"-floating")}if(!b.tpl){b.tpl=new Ext.XTemplate('
      ','
    • '+b.getInnerTpl(b.displayField)+"
    • ","
    ")}else{if(Ext.isString(b.tpl)){b.tpl=new Ext.XTemplate(b.tpl)}}if(b.pageSize){b.pagingToolbar=b.createPagingToolbar()}b.callParent()},beforeRender:function(){var a=this;a.callParent(arguments);if(a.up("menu")){a.addCls(Ext.baseCSSPrefix+"menu")}},getRefOwner:function(){return this.pickerField},getRefItems:function(){return this.pagingToolbar?[this.pagingToolbar]:[]},createPagingToolbar:function(){return Ext.widget("pagingtoolbar",{id:this.id+"-paging-toolbar",pageSize:this.pageSize,store:this.dataSource,border:false,ownerCt:this,ownerLayout:this.getComponentLayout()})},finishRenderChildren:function(){var a=this.pagingToolbar;this.callParent(arguments);if(a){a.finishRender()}},refresh:function(){var b=this,a=b.pagingToolbar,c=b.rendered;b.callParent();if(c&&a&&a.rendered&&!b.preserveScrollOnRefresh){b.el.appendChild(a.el)}if(c&&Ext.isIE6&&Ext.isStrict){b.listEl.repaint()}},bindStore:function(a,b){var c=this.pagingToolbar;this.callParent(arguments);if(c){c.bindStore(a,b)}},getTargetEl:function(){return this.listEl||this.el},getInnerTpl:function(a){return"{"+a+"}"},onDestroy:function(){Ext.destroyMembers(this,"pagingToolbar","listEl");this.callParent()}});Ext.define("Ext.view.BoundListKeyNav",{extend:Ext.util.KeyNav,constructor:function(b,a){var c=this;c.boundList=a.boundList;c.callParent([b,Ext.apply({},a,c.defaultHandlers)])},defaultHandlers:{up:function(){var e=this,b=e.boundList,d=b.all,g=b.highlightedItem,c=g?b.indexOf(g):-1,a=c>0?c-1:d.getCount()-1;e.highlightAt(a)},down:function(){var e=this,b=e.boundList,d=b.all,g=b.highlightedItem,c=g?b.indexOf(g):-1,a=cc){c=g;k=m}}a=Math.max(h.callParent(arguments),b.inputEl.getTextWidth(k+b.growAppend));if(!h.startingWidth||b.removingRecords){h.startingWidth=a;if(a',' value="{[Ext.util.Format.htmlEncode(values.value)]}"
    ',' name="{name}"',' placeholder="{placeholder}"',' size="{size}"',' maxlength="{maxLength}"',' readonly="readonly"',' disabled="disabled"',' tabIndex="{tabIdx}"',' style="{fieldStyle}"',"/>",{compiled:true,disableFormats:true}],getSubTplData:function(){var a=this;Ext.applyIf(a.subTplData,{hiddenDataCls:a.hiddenDataCls});return a.callParent(arguments)},afterRender:function(){var a=this;a.callParent(arguments);a.setHiddenValue(a.value)},multiSelect:false,delimiter:", ",displayField:"text",triggerAction:"all",allQuery:"",queryParam:"query",queryMode:"remote",queryCaching:true,pageSize:0,autoSelect:true,typeAhead:false,typeAheadDelay:250,selectOnTab:true,forceSelection:false,growToLongestValue:true,defaultListConfig:{loadingHeight:70,minWidth:70,maxHeight:300,shadow:"sides"},ignoreSelection:0,removingRecords:null,resizeComboToGrow:function(){var a=this;return a.grow&&a.growToLongestValue},initComponent:function(){var e=this,c=Ext.isDefined,b=e.store,d=e.transform,a,g;Ext.applyIf(e.renderSelectors,{hiddenDataEl:"."+e.hiddenDataCls.split(" ").join(".")});this.addEvents("beforequery","select","beforeselect","beforedeselect");if(d){a=Ext.getDom(d);if(a){if(!e.store){b=Ext.Array.map(Ext.Array.from(a.options),function(h){return[h.value,h.text]})}if(!e.name){e.name=a.name}if(!("value" in e)){e.value=a.value}}}e.bindStore(b||"ext-empty-store",true);b=e.store;if(b.autoCreated){e.queryMode="local";e.valueField=e.displayField="field1";if(!b.expanded){e.displayField="field2"}}e.queryFilter=new Ext.util.Filter({id:e.id+"-query-filter",disabled:true,root:"data",property:e.displayField});b.filter(e.queryFilter);if(!c(e.valueField)){e.valueField=e.displayField}g=e.queryMode==="local";if(!c(e.queryDelay)){e.queryDelay=g?10:500}if(!c(e.minChars)){e.minChars=g?0:4}if(!e.displayTpl){e.displayTpl=new Ext.XTemplate('{[typeof values === "string" ? values : values["'+e.displayField+'"]]}'+e.delimiter+"")}else{if(Ext.isString(e.displayTpl)){e.displayTpl=new Ext.XTemplate(e.displayTpl)}}e.callParent();e.doQueryTask=new Ext.util.DelayedTask(e.doRawQuery,e);if(e.store.getCount()>0){e.setValue(e.value)}if(a){e.render(a.parentNode,a);Ext.removeNode(a);delete e.renderTo}},getStore:function(){return this.store},beforeBlur:function(){this.doQueryTask.cancel();this.assertValue()},assertValue:function(){var b=this,c=b.getRawValue(),d,a;if(b.forceSelection){if(b.multiSelect){if(c!==b.getDisplayValue()){b.setValue(b.lastSelection)}}else{d=b.findRecordByDisplay(c);if(d){a=b.value;if(!b.findRecordByValue(a)){b.select(d,true)}}else{b.setValue(b.lastSelection)}}}b.collapse()},onTypeAhead:function(){var e=this,d=e.displayField,b=e.store.findRecord(d,e.getRawValue()),c=e.getPicker(),g,a,h;if(b){g=b.get(d);a=g.length;h=e.getRawValue().length;c.highlightItem(c.getNode(b));if(h!==0&&h!==a){e.setRawValue(g);e.selectText(h,g.length)}}},resetToDefault:Ext.emptyFn,beforeReset:function(){this.callParent();if(!this.queryFilter.disabled){this.queryFilter.disabled=true;this.store.filter()}},onUnbindStore:function(a){var c=this,b=c.picker;c.store.removeFilter(c.queryFilter);if(!a&&b){b.bindStore(null)}},onBindStore:function(a,c){var b=this.picker;if(!c){this.resetToDefault();a.filter(this.queryFilter)}if(b){b.bindStore(a)}},getStoreListeners:function(){var a=this;return{beforeload:a.onBeforeLoad,clear:a.onClear,datachanged:a.onDataChanged,load:a.onLoad,exception:a.onException,remove:a.onRemove}},onBeforeLoad:function(){++this.ignoreSelection},onDataChanged:function(){var a=this;if(a.resizeComboToGrow()){a.updateLayout()}},onClear:function(){var a=this;if(a.resizeComboToGrow()){a.removingRecords=true;a.onDataChanged()}},onRemove:function(){var a=this;if(a.resizeComboToGrow()){a.removingRecords=true}},onException:function(){if(this.ignoreSelection>0){--this.ignoreSelection}this.collapse()},onLoad:function(){var a=this,b=a.value;if(a.ignoreSelection>0){--a.ignoreSelection}if(a.rawQuery){a.rawQuery=false;a.syncSelection();if(a.picker&&!a.picker.getSelectionModel().hasSelection()){a.doAutoSelect()}}else{if(a.value||a.value===0){a.setValue(a.value)}else{if(a.store.getCount()){a.doAutoSelect()}else{a.setValue(a.value)}}}},doRawQuery:function(){this.doQuery(this.getRawValue(),false,true)},doQuery:function(h,c,e){h=h||"";var d=this,b={query:h,forceAll:c,combo:d,cancel:false},a=d.store,g=d.queryMode==="local";if(d.fireEvent("beforequery",b)===false||b.cancel){return false}h=b.query;c=b.forceAll;if(c||(h.length>=d.minChars)){d.expand();if(!d.queryCaching||d.lastQuery!==h){d.lastQuery=h;if(g){if(h||!c){d.queryFilter.disabled=false;d.queryFilter.setValue(d.enableRegEx?new RegExp(h):h)}else{d.queryFilter.disabled=true}a.filter()}else{d.rawQuery=e;if(d.pageSize){d.loadPage(1)}else{a.load({params:d.getParams(h)})}}}if(d.getRawValue()!==d.getDisplayValue()){d.ignoreSelection++;d.picker.getSelectionModel().deselectAll();d.ignoreSelection--}if(g){d.doAutoSelect()}if(d.typeAhead){d.doTypeAhead()}}return true},loadPage:function(a){this.store.loadPage(a,{params:this.getParams(this.lastQuery)})},onPageChange:function(b,a){this.loadPage(a);return false},getParams:function(c){var b={},a=this.queryParam;if(a){b[a]=c}return b},doAutoSelect:function(){var b=this,a=b.picker,c,d;if(a&&b.autoSelect&&b.store.getCount()>0){c=a.getSelectionModel().lastSelected;d=a.getNode(c||0);if(d){a.highlightItem(d);a.listEl.scrollChildIntoView(d,false)}}},doTypeAhead:function(){if(!this.typeAheadTask){this.typeAheadTask=new Ext.util.DelayedTask(this.onTypeAhead,this)}if(this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.typeAheadTask.delay(this.typeAheadDelay)}},onTriggerClick:function(){var a=this;if(!a.readOnly&&!a.disabled){if(a.isExpanded){a.collapse()}else{a.onFocus({});if(a.triggerAction==="all"){a.doQuery(a.allQuery,true)}else{a.doQuery(a.getRawValue(),false,true)}}a.inputEl.focus()}},onPaste:function(){var a=this;if(!a.readOnly&&!a.disabled&&a.editable){a.doQueryTask.delay(a.queryDelay)}},onKeyUp:function(d,b){var c=this,a=d.getKey();if(!c.readOnly&&!c.disabled&&c.editable){c.lastKey=a;if(!d.isSpecialKey()||a==d.BACKSPACE||a==d.DELETE){c.doQueryTask.delay(c.queryDelay)}}if(c.enableKeyEvents){c.callParent(arguments)}},initEvents:function(){var a=this;a.callParent();if(!a.enableKeyEvents){a.mon(a.inputEl,"keyup",a.onKeyUp,a)}a.mon(a.inputEl,"paste",a.onPaste,a)},onDestroy:function(){this.bindStore(null);this.callParent()},onAdded:function(){var a=this;a.callParent(arguments);if(a.picker){a.picker.ownerCt=a.up("[floating]");a.picker.registerWithOwnerCt()}},createPicker:function(){var c=this,b,a=Ext.apply({xtype:"boundlist",pickerField:c,selModel:{mode:c.multiSelect?"SIMPLE":"SINGLE"},floating:true,hidden:true,store:c.store,displayField:c.displayField,focusOnToFront:false,pageSize:c.pageSize,tpl:c.tpl},c.listConfig,c.defaultListConfig);b=c.picker=Ext.widget(a);if(c.pageSize){b.pagingToolbar.on("beforechange",c.onPageChange,c)}c.mon(b,{itemclick:c.onItemClick,refresh:c.onListRefresh,scope:c});c.mon(b.getSelectionModel(),{beforeselect:c.onBeforeSelect,beforedeselect:c.onBeforeDeselect,selectionchange:c.onListSelectionChange,scope:c});return b},alignPicker:function(){var b=this,a=b.getPicker(),e=b.getPosition()[1]-Ext.getBody().getScroll().top,d=Ext.Element.getViewHeight()-e-b.getHeight(),c=Math.max(e,d);if(a.height){delete a.height;a.updateLayout()}if(a.getHeight()>c-5){a.setHeight(c-5)}b.callParent()},onListRefresh:function(){this.alignPicker();this.syncSelection()},onItemClick:function(c,a){var e=this,d=e.picker.getSelectionModel().getSelection(),b=e.valueField;if(!e.multiSelect&&d.length){if(a.get(b)===d[0].get(b)){e.displayTplData=[a.data];e.setRawValue(e.getDisplayValue());e.collapse()}}},onBeforeSelect:function(b,a){return this.fireEvent("beforeselect",this,a,a.index)},onBeforeDeselect:function(b,a){return this.fireEvent("beforedeselect",this,a,a.index)},onListSelectionChange:function(b,d){var a=this,e=a.multiSelect,c=d.length>0;if(!a.ignoreSelection&&a.isExpanded){if(!e){Ext.defer(a.collapse,1,a)}if(e||c){a.setValue(d,false)}if(c){a.fireEvent("select",a,d)}a.inputEl.focus()}},onExpand:function(){var d=this,a=d.listKeyNav,c=d.selectOnTab,b=d.getPicker();if(a){a.enable()}else{a=d.listKeyNav=new Ext.view.BoundListKeyNav(this.inputEl,{boundList:b,forceKeyDown:true,tab:function(g){if(c){this.selectHighlighted(g);d.triggerBlur()}return true},enter:function(i){var g=b.getSelectionModel(),h=g.getCount();this.selectHighlighted(i);if(!d.multiSelect&&h===g.getCount()){d.collapse()}}})}if(c){d.ignoreMonitorTab=true}Ext.defer(a.enable,1,a);d.inputEl.focus()},onCollapse:function(){var b=this,a=b.listKeyNav;if(a){a.disable();b.ignoreMonitorTab=false}},select:function(e,b){var d=this,c=d.picker,a=true;if(e&&e.isModel&&b===true){if(c){a=!c.getSelectionModel().isSelected(e)}if(a){d.fireEvent("select",d,e)}}d.setValue(e,true)},findRecord:function(d,c){var b=this.store,a=b.findExact(d,c);return a!==-1?b.getAt(a):false},findRecordByValue:function(a){return this.findRecord(this.valueField,a)},findRecordByDisplay:function(a){return this.findRecord(this.displayField,a)},setValue:function(m,e){var k=this,c=k.valueNotFoundText,n=k.inputEl,g,j,h,a,l=[],b=[],d=[];if(k.store.loading){k.value=m;k.setHiddenValue(k.value);return k}m=Ext.Array.from(m);for(g=0,j=m.length;g0){e.hiddenDataEl.update(Ext.DomHelper.markup({tag:"input",type:"hidden",name:a}));c=1;h=b.firstChild}while(c>g){b.removeChild(k[0]);--c}while(c=0){g.push(i)}}h.ignoreSelection++;c=d.getSelectionModel();c.deselectAll();if(g.length){c.select(g,undefined,true)}h.ignoreSelection--}},onEditorTab:function(b){var a=this.listKeyNav;if(this.selectOnTab&&a){a.selectHighlighted(b)}}});Ext.define("Ext.picker.Month",{extend:Ext.Component,alias:"widget.monthpicker",alternateClassName:"Ext.MonthPicker",childEls:["bodyEl","prevEl","nextEl","buttonsEl","monthEl","yearEl"],renderTpl:['
    ','
    ','','
    ','{.}',"
    ","
    ","
    ",'
    ','
    ','
    ','',"
    ",'
    ','',"
    ","
    ",'','
    ','{.}',"
    ","
    ","
    ",'
    ',"
    ",'','
    {%',"var me=values.$comp, okBtn=me.okBtn, cancelBtn=me.cancelBtn;","okBtn.ownerLayout = cancelBtn.ownerLayout = me.componentLayout;","okBtn.ownerCt = cancelBtn.ownerCt = me;","Ext.DomHelper.generateMarkup(okBtn.getRenderTree(), out);","Ext.DomHelper.generateMarkup(cancelBtn.getRenderTree(), out);","%}
    ","
    "],okText:"OK",cancelText:"Cancel",baseCls:Ext.baseCSSPrefix+"monthpicker",showButtons:true,measureWidth:35,measureMaxHeight:20,smallCls:Ext.baseCSSPrefix+"monthpicker-small",totalYears:10,yearOffset:5,monthOffset:6,initComponent:function(){var a=this;a.selectedCls=a.baseCls+"-selected";a.addEvents("cancelclick","monthclick","monthdblclick","okclick","select","yearclick","yeardblclick");if(a.small){a.addCls(a.smallCls)}a.setValue(a.value);a.activeYear=a.getYear(new Date().getFullYear()-4,-4);if(a.showButtons){a.okBtn=new Ext.button.Button({text:a.okText,handler:a.onOkClick,scope:a});a.cancelBtn=new Ext.button.Button({text:a.cancelText,handler:a.onCancelClick,scope:a})}this.callParent()},beforeRender:function(){var g=this,c=0,b=[],a=Ext.Date.getShortMonthName,e=g.monthOffset,h=g.monthMargin,d="";g.callParent();for(;cd.measureMaxHeight){--c;a.setStyle("margin","0 "+c+"px")}return c},getLargest:function(a){var b=0;this.months.each(function(d){var c=d.getHeight();if(c>b){b=c}});return b},setValue:function(d){var c=this,e=c.activeYear,g=c.monthOffset,b,a;if(!d){c.value=[null,null]}else{if(Ext.isDate(d)){c.value=[d.getMonth(),d.getFullYear()]}else{c.value=[d[0],d[1]]}}if(c.rendered){b=c.value[1];if(b!==null){if((be+c.yearOffset)){c.activeYear=b-c.yearOffset+1}}c.updateBody()}return c},getValue:function(){return this.value},hasSelection:function(){var a=this.value;return a[0]!==null&&a[1]!==null},getYears:function(){var d=this,e=d.yearOffset,g=d.activeYear,a=g+e,c=g,b=[];for(;c','",'','','','","","",'','',"{#:this.isEndOfWeek}",'","","","",'','',"","",{firstInitial:function(a){return Ext.picker.Date.prototype.getDayInitial(a)},isEndOfWeek:function(b){b--;var a=b%7===0&&b!==0;return a?'':""},renderTodayBtn:function(a,b){Ext.DomHelper.generateMarkup(a.$comp.todayBtn.getRenderTree(),b)},renderMonthBtn:function(a,b){Ext.DomHelper.generateMarkup(a.$comp.monthBtn.getRenderTree(),b)}}],todayText:"Today",ariaTitle:"Date Picker: {0}",ariaTitleDateFormat:"F d, Y",todayTip:"{0} (Spacebar)",minText:"This date is before the minimum date",maxText:"This date is after the maximum date",disabledDaysText:"Disabled",disabledDatesText:"Disabled",nextText:"Next Month (Control+Right)",prevText:"Previous Month (Control+Left)",monthYearText:"Choose a month (Control+Up/Down to move years)",monthYearFormat:"F Y",startDay:0,showToday:true,disableAnim:false,baseCls:Ext.baseCSSPrefix+"datepicker",longDayFormat:"F d, Y",focusOnShow:false,focusOnSelect:true,initHour:12,numDays:42,initComponent:function(){var b=this,a=Ext.Date.clearTime;b.selectedCls=b.baseCls+"-selected";b.disabledCellCls=b.baseCls+"-disabled";b.prevCls=b.baseCls+"-prevday";b.activeCls=b.baseCls+"-active";b.cellCls=b.baseCls+"-cell";b.nextCls=b.baseCls+"-prevday";b.todayCls=b.baseCls+"-today";b.dayNames=b.dayNames.slice(b.startDay).concat(b.dayNames.slice(0,b.startDay));b.callParent();b.value=b.value?a(b.value,true):a(new Date());b.addEvents("select");b.initDisabledDays()},beforeRender:function(){var b=this,c=new Array(b.numDays),a=Ext.Date.format(new Date(),b.format);if(b.up("menu")){b.addCls(Ext.baseCSSPrefix+"menu")}b.monthBtn=new Ext.button.Split({ownerCt:b,ownerLayout:b.getComponentLayout(),text:"",tooltip:b.monthYearText,listeners:{click:b.showMonthPicker,arrowclick:b.showMonthPicker,scope:b}});if(b.showToday){b.todayBtn=new Ext.button.Button({ownerCt:b,ownerLayout:b.getComponentLayout(),text:Ext.String.format(b.todayText,a),tooltip:Ext.String.format(b.todayTip,a),tooltipType:"title",handler:b.selectToday,scope:b})}b.callParent();Ext.applyIf(b,{renderData:{}});Ext.apply(b.renderData,{dayNames:b.dayNames,showToday:b.showToday,prevText:b.prevText,nextText:b.nextText,days:c});b.protoEl.unselectable()},finishRenderChildren:function(){var a=this;a.callParent();a.monthBtn.finishRender();if(a.showToday){a.todayBtn.finishRender()}},onRender:function(b,a){var c=this;c.callParent(arguments);c.cells=c.eventEl.select("tbody td");c.textNodes=c.eventEl.query("tbody td a");c.mon(c.eventEl,{scope:c,mousewheel:c.handleMouseWheel,click:{fn:c.handleDateClick,delegate:"a."+c.baseCls+"-date"}})},initEvents:function(){var c=this,a=Ext.Date,b=a.DAY;c.callParent();c.prevRepeater=new Ext.util.ClickRepeater(c.prevEl,{handler:c.showPrevMonth,scope:c,preventDefault:true,stopDefault:true});c.nextRepeater=new Ext.util.ClickRepeater(c.nextEl,{handler:c.showNextMonth,scope:c,preventDefault:true,stopDefault:true});c.keyNav=new Ext.util.KeyNav(c.eventEl,Ext.apply({scope:c,left:function(d){if(d.ctrlKey){c.showPrevMonth()}else{c.update(a.add(c.activeDate,b,-1))}},right:function(d){if(d.ctrlKey){c.showNextMonth()}else{c.update(a.add(c.activeDate,b,1))}},up:function(d){if(d.ctrlKey){c.showNextYear()}else{c.update(a.add(c.activeDate,b,-7))}},down:function(d){if(d.ctrlKey){c.showPrevYear()}else{c.update(a.add(c.activeDate,b,7))}},pageUp:c.showNextMonth,pageDown:c.showPrevMonth,enter:function(d){d.stopPropagation();return true}},c.keyNavConfig));if(c.showToday){c.todayKeyListener=c.eventEl.addKeyListener(Ext.EventObject.SPACE,c.selectToday,c)}c.update(c.value)},initDisabledDays:function(){var h=this,b=h.disabledDates,g="(?:",a,i,c,e;if(!h.disabledDatesRE&&b){a=b.length-1;c=b.length;for(i=0;i0){this.showPrevMonth()}else{if(b<0){this.showNextMonth()}}}},handleDateClick:function(d,a){var c=this,b=c.handler;d.stopEvent();if(!c.disabled&&a.dateValue&&!Ext.fly(a.parentNode).hasCls(c.disabledCellCls)){c.doCancelFocus=c.focusOnSelect===false;c.setValue(new Date(a.dateValue));delete c.doCancelFocus;c.fireEvent("select",c,c.value);if(b){b.call(c.scope||c,c,c.value)}c.onSelect()}},onSelect:function(){if(this.hideOnSelect){this.hide()}},selectToday:function(){var c=this,a=c.todayBtn,b=c.handler;if(a&&!a.disabled){c.setValue(Ext.Date.clearTime(new Date()));c.fireEvent("select",c,c.value);if(b){b.call(c.scope||c,c,c.value)}c.onSelect()}return c},selectedUpdate:function(a){var d=this,i=a.getTime(),j=d.cells,k=d.selectedCls,g=j.elements,b,e=g.length,h;j.removeCls(k);for(b=0;bw||(D&&y&&D.test(o.dateFormat(G,y)))||(I&&I.indexOf(G.getDay())!=-1));if(!F.disabled){F.todayBtn.setDisabled(a);F.todayKeyListener.setDisabled(a)}}n=function(i,J){h=false;s=+o.clearTime(r,true);i.title=o.format(r,b);i.firstChild.dateValue=s;if(s==A){J+=" "+F.todayCls;i.title=F.todayText}if(s==v){J+=" "+F.selectedCls;F.fireEvent("highlightitem",F,i);if(e&&F.floating){Ext.fly(i.firstChild).focus(50)}}if(sw){J+=" "+H;i.title=F.maxText;h=true}if(!h&&I){if(I.indexOf(r.getDay())!==-1){i.title=C;J+=" "+H;h=true}}if(!h&&D&&y){k=o.dateFormat(r,y);if(D.test(k)){i.title=t.replace("%0",k);J+=" "+H}}i.className=J+" "+F.cellCls};for(;x=m){p=(++E);c=F.nextCls}else{p=x-j+1;c=F.activeCls}}d[x].innerHTML=p;r.setDate(r.getDate()+1);n(g[x],c)}F.monthBtn.setText(Ext.Date.format(B,F.monthYearFormat))},update:function(a,d){var b=this,c=b.activeDate;if(b.rendered){b.activeDate=a;if(!d&&c&&b.el&&c.getMonth()==a.getMonth()&&c.getFullYear()==a.getFullYear()){b.selectedUpdate(a,c)}else{b.fullUpdate(a,c)}b.innerEl.dom.title=Ext.String.format(b.ariaTitle,Ext.Date.format(b.activeDate,b.ariaTitleDateFormat))}return b},beforeDestroy:function(){var a=this;if(a.rendered){Ext.destroy(a.todayKeyListener,a.keyNav,a.monthPicker,a.monthBtn,a.nextRepeater,a.prevRepeater,a.todayBtn);delete a.textNodes;delete a.cells.elements}a.callParent()},onShow:function(){this.callParent(arguments);if(this.focusOnShow){this.focus()}}},function(){var b=this.prototype,a=Ext.Date;b.monthNames=a.monthNames;b.dayNames=a.dayNames;b.format=a.defaultFormat});Ext.define("Ext.form.field.Date",{extend:Ext.form.field.Picker,alias:"widget.datefield",alternateClassName:["Ext.form.DateField","Ext.form.Date"],format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|n-j|n/j",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerCls:Ext.baseCSSPrefix+"form-date-trigger",showToday:true,useStrict:undefined,initTime:"12",initTimeFormat:"H",matchFieldWidth:false,startDay:0,initComponent:function(){var d=this,b=Ext.isString,c,a;c=d.minValue;a=d.maxValue;if(b(c)){d.minValue=d.parseDate(c)}if(b(a)){d.maxValue=d.parseDate(a)}d.disabledDatesRE=null;d.initDisabledDays();d.callParent()},initValue:function(){var a=this,b=a.value;if(Ext.isString(b)){a.value=a.rawToValue(b)}a.callParent()},initDisabledDays:function(){if(this.disabledDates){var b=this.disabledDates,a=b.length-1,g="(?:",h,e=b.length,c;for(h=0;hk(h).getTime()){o.push(p(j.maxText,j.formatDate(h)))}if(n){l=q.getDay();for(;e {splitCls}','{childElCls}" unselectable="on">','",">",'',"{text}","",'background-image:url({iconUrl});','font-family:{glyphFontFamily};">','&#{glyph}; ',"","","",''],getTemplateArgs:function(){var a=this.callParent();a.inputCls=this.inputCls;a.inputName=this.inputName;return a},afterRender:function(){var a=this;a.callParent(arguments);a.fileInputEl.on("change",a.fireChange,a)},fireChange:function(a){this.fireEvent("change",this,a,this.fileInputEl.dom.value)},createFileInput:function(a){var b=this;b.fileInputEl=b.el.createChild({name:b.inputName,id:!a?b.id+"-fileInputEl":undefined,cls:b.inputCls,tag:"input",type:"file",size:1});b.fileInputEl.on("change",b.fireChange,b)},reset:function(a){if(a){this.fileInputEl.remove()}this.createFileInput(!a)},restoreInput:function(a){this.fileInputEl.remove();a=Ext.get(a);this.el.appendChild(a);this.fileInputEl=a},onDisable:function(){this.callParent();this.fileInputEl.dom.disabled=true},onEnable:function(){this.callParent();this.fileInputEl.dom.disabled=false}});Ext.define("Ext.form.field.File",{extend:Ext.form.field.Trigger,alias:["widget.filefield","widget.fileuploadfield"],alternateClassName:["Ext.form.FileUploadField","Ext.ux.form.FileUploadField","Ext.form.File"],buttonText:"Browse...",buttonOnly:false,buttonMargin:3,clearOnSubmit:true,fieldBodyCls:Ext.baseCSSPrefix+"form-file-wrap",readOnly:true,triggerNoEditCls:"",componentLayout:"triggerfield",childEls:["browseButtonWrap"],onRender:function(){var a=this,c=a.id,b;a.callParent(arguments);b=a.inputEl;b.dom.name="";a.button=new Ext.form.field.FileButton(Ext.apply({renderTo:c+"-browseButtonWrap",ownerCt:a,ownerLayout:a.componentLayout,id:c+"-button",ui:a.ui,disabled:a.disabled,text:a.buttonText,style:a.buttonOnly?"":"margin-left:"+a.buttonMargin+"px",inputName:a.getName(),listeners:{scope:a,change:a.onFileChange}},a.buttonConfig));a.fileInputEl=a.button.fileInputEl;if(a.buttonOnly){a.inputCell.setDisplayed(false)}a.browseButtonWrap.dom.style.width=(a.browseButtonWrap.dom.lastChild.offsetWidth+a.button.getEl().getMargin("lr"))+"px";if(Ext.isIE){a.button.getEl().repaint()}},getTriggerMarkup:function(){return''},onFileChange:function(a,c,b){this.lastValue=null;Ext.form.field.File.superclass.setValue.call(this,b)},setValue:Ext.emptyFn,reset:function(){var b=this,a=b.clearOnSubmit;if(b.rendered){b.button.reset(a);b.fileInputEl=b.button.fileInputEl;if(a){b.inputEl.dom.value=""}}b.callParent()},onShow:function(){this.callParent();this.button.updateLayout()},onDisable:function(){this.callParent();this.button.disable()},onEnable:function(){this.callParent();this.button.enable()},isFileUpload:function(){return true},extractFileInput:function(){var a=this.button.fileInputEl.dom;this.reset();return a},restoreInput:function(b){var a=this.button;a.restoreInput(b);this.fileInputEl=a.fileInputEl},onDestroy:function(){Ext.destroyMembers(this,"button");delete this.fileInputEl;this.callParent()}});Ext.define("Ext.form.field.Hidden",{extend:Ext.form.field.Base,alias:["widget.hiddenfield","widget.hidden"],alternateClassName:"Ext.form.Hidden",inputType:"hidden",hideLabel:true,initComponent:function(){this.formItemCls+="-hidden";this.callParent()},isEqual:function(b,a){return this.isEqualAsString(b,a)},initEvents:Ext.emptyFn,setSize:Ext.emptyFn,setWidth:Ext.emptyFn,setHeight:Ext.emptyFn,setPosition:Ext.emptyFn,setPagePosition:Ext.emptyFn,markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.define("Ext.picker.Color",{extend:Ext.Component,alias:"widget.colorpicker",alternateClassName:"Ext.ColorPalette",componentCls:Ext.baseCSSPrefix+"color-picker",selectedCls:Ext.baseCSSPrefix+"color-picker-selected",itemCls:Ext.baseCSSPrefix+"color-picker-item",value:null,clickEvent:"click",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],colorRe:/(?:^|\s)color-(.{6})(?:\s|$)/,renderTpl:['','',' ',"",""],initComponent:function(){var a=this;a.callParent(arguments);a.addEvents("select");if(a.handler){a.on("select",a.handler,a.scope,true)}},initRenderData:function(){var a=this;return Ext.apply(a.callParent(),{itemCls:a.itemCls,colors:a.colors})},onRender:function(){var b=this,a=b.clickEvent;b.callParent(arguments);b.mon(b.el,a,b.handleClick,b,{delegate:"a"});if(a!="click"){b.mon(b.el,"click",Ext.emptyFn,b,{delegate:"a",stopEvent:true})}},afterRender:function(){var a=this,b;a.callParent(arguments);if(a.value){b=a.value;a.value=null;a.select(b,true)}},handleClick:function(c,d){var b=this,a;c.stopEvent();if(!b.disabled){a=d.className.match(b.colorRe)[1];b.select(a.toUpperCase())}},select:function(b,a){var d=this,g=d.selectedCls,e=d.value,c;b=b.replace("#","");if(!d.rendered){d.value=b;return}if(b!=e||d.allowReselect){c=d.el;if(d.value){c.down("a.color-"+e).removeCls(g)}c.down("a.color-"+b).addCls(g);d.value=b;if(a!==true){d.fireEvent("select",d,b)}}},getValue:function(){return this.value||null}});Ext.define("Ext.layout.component.field.HtmlEditor",{extend:Ext.layout.component.field.FieldContainer,alias:["layout.htmleditor"],type:"htmleditor",naturalHeight:150,naturalWidth:300,beginLayout:function(b){var a=this.owner;this.callParent(arguments);b.toolbarContext=b.context.getCmp(a.toolbar);b.inputCmpContext=b.context.getCmp(a.inputCmp);b.textAreaContext=b.getEl("textareaEl");b.iframeContext=b.getEl("iframeEl")},beginLayoutCycle:function(h){var g=this,c=h.widthModel,b=h.heightModel,a=g.owner,e=a.iframeEl,d=a.textareaEl;g.callParent(arguments);if(c.shrinkWrap){e.setStyle("width","");d.setStyle("width","")}else{if(c.natural){h.bodyCellContext.setWidth(g.naturalWidth)}}if(b.natural||b.shrinkWrap){e.setHeight(g.naturalHeight);d.setHeight(g.naturalHeight)}},finishedLayout:function(){this.callParent(arguments);if(Ext.isIE9m&&Ext.isIEQuirks){this.owner.el.repaint()}},publishOwnerWidth:function(b,a){this.callParent(arguments);a-=b.inputCmpContext.getBorderInfo().width;b.textAreaContext.setWidth(a);b.iframeContext.setWidth(a)},publishInnerWidth:function(e,c){var b=e.inputCmpContext.getBorderInfo().width,d=Ext.isStrict&&Ext.isIE8m,a=e.widthModel.natural;this.callParent(arguments);c=e.bodyCellContext.props.width-b;if(a){if(d){c-=2}e.textAreaContext.setWidth(c);e.iframeContext.setWidth(c)}else{if(d){e.textAreaContext.setWidth(c)}}},publishInnerHeight:function(c,a){var d=c.toolbarContext.getProp("height"),b=this.owner.sourceEditMode;this.callParent(arguments);a=c.bodyCellContext.props.height;if(d!==undefined){a-=d+c.inputCmpContext.getFrameInfo().height;if(Ext.isIE8&&Ext.isStrict){a-=2}else{if(Ext.isIEQuirks&&(Ext.isIE8||Ext.isIE9)){a-=4}}c.iframeContext.setHeight(a);c.textAreaContext.setHeight(a)}else{this.done=false}}});Ext.define("Ext.form.field.HtmlEditor",{extend:Ext.form.FieldContainer,mixins:{field:Ext.form.field.Field},alias:"widget.htmleditor",alternateClassName:"Ext.form.HtmlEditor",componentLayout:"htmleditor",componentTpl:["{beforeTextAreaTpl}",'","{afterTextAreaTpl}","{beforeIFrameTpl}",'',"{afterIFrameTpl}",{disableFormats:true}],stretchInputElFixed:true,subTplInsertions:["beforeTextAreaTpl","afterTextAreaTpl","beforeIFrameTpl","afterIFrameTpl","iframeAttrTpl","inputAttrTpl"],enableFormat:true,enableFontSize:true,enableColors:true,enableAlignments:true,enableLists:true,enableSourceEdit:true,enableLinks:true,enableFont:true,createLinkText:"Please enter the URL for the link:",defaultLinkValue:"http://",fontFamilies:["Arial","Courier New","Tahoma","Times New Roman","Verdana"],defaultValue:(Ext.isOpera||Ext.isIE6)?" ":"​",fieldBodyCls:Ext.baseCSSPrefix+"html-editor-wrap",initialized:false,activated:false,sourceEditMode:false,iframePad:3,hideMode:"offsets",maskOnDisable:true,containerElCls:Ext.baseCSSPrefix+"html-editor-container",initComponent:function(){var a=this;a.addEvents("initialize","activate","beforesync","beforepush","sync","push","editmodechange");a.items=[a.createToolbar(),a.createInputCmp()];a.layout={type:"vbox",align:"stretch"};a.callParent(arguments);a.initField()},createInputCmp:function(){this.inputCmp=Ext.widget(this.getInputCmpCfg());return this.inputCmp},getInputCmpCfg:function(){var a=this,c=a.id+"-inputCmp",b={id:c,name:a.name,textareaCls:Ext.baseCSSPrefix+"hidden",value:a.value,iframeName:Ext.id(),iframeSrc:Ext.SSL_SECURE_URL,iframeCls:Ext.baseCSSPrefix+"htmleditor-iframe"};a.getInsertionRenderData(b,a.subTplInsertions);return{flex:1,xtype:"component",tpl:a.getTpl("componentTpl"),childEls:["iframeEl","textareaEl"],id:c,cls:Ext.baseCSSPrefix+"html-editor-input",data:b}},createToolbar:function(){this.toolbar=Ext.widget(this.getToolbarCfg());return this.toolbar},getToolbarCfg:function(){var h=this,b=[],e,a=Ext.quickTipsActive&&Ext.tip.QuickTipManager.isEnabled(),d=Ext.baseCSSPrefix,j,g;function c(l,i,k){return{itemId:l,cls:d+"btn-icon",iconCls:d+"edit-"+l,enableToggle:i!==false,scope:h,handler:k||h.relayBtnCmd,clickEvent:"mousedown",tooltip:a?h.buttonTips[l]||g:g,overflowText:h.buttonTips[l].title||g,tabIndex:-1}}if(h.enableFont&&!Ext.isSafari2){j=Ext.widget("component",{itemId:"fontSelect",renderTpl:['"],childEls:["selectEl"],afterRender:function(){h.fontSelect=this.selectEl;Ext.Component.prototype.afterRender.apply(this,arguments)},onDisable:function(){var i=this.selectEl;if(i){i.dom.disabled=true}Ext.Component.prototype.onDisable.apply(this,arguments)},onEnable:function(){var i=this.selectEl;if(i){i.dom.disabled=false}Ext.Component.prototype.onEnable.apply(this,arguments)},listeners:{change:function(){h.win.focus();h.relayCmd("fontName",h.fontSelect.dom.value);h.deferFocus()},element:"selectEl"}});b.push(j,"-")}if(h.enableFormat){b.push(c("bold"),c("italic"),c("underline"))}if(h.enableFontSize){b.push("-",c("increasefontsize",false,h.adjustFont),c("decreasefontsize",false,h.adjustFont))}if(h.enableColors){b.push("-",{itemId:"forecolor",cls:d+"btn-icon",iconCls:d+"edit-forecolor",overflowText:h.buttonTips.forecolor.title,tooltip:a?h.buttonTips.forecolor||g:g,tabIndex:-1,menu:Ext.widget("menu",{plain:true,items:[{xtype:"colorpicker",allowReselect:true,focus:Ext.emptyFn,value:"000000",plain:true,clickEvent:"mousedown",handler:function(k,i){h.relayCmd("forecolor",Ext.isWebKit||Ext.isIE?"#"+i:i);this.up("menu").hide()}}]})},{itemId:"backcolor",cls:d+"btn-icon",iconCls:d+"edit-backcolor",overflowText:h.buttonTips.backcolor.title,tooltip:a?h.buttonTips.backcolor||g:g,tabIndex:-1,menu:Ext.widget("menu",{plain:true,items:[{xtype:"colorpicker",focus:Ext.emptyFn,value:"FFFFFF",plain:true,allowReselect:true,clickEvent:"mousedown",handler:function(k,i){if(Ext.isGecko){h.execCmd("useCSS",false);h.execCmd("hilitecolor","#"+i);h.execCmd("useCSS",true);h.deferFocus()}else{h.relayCmd(Ext.isOpera?"hilitecolor":"backcolor",Ext.isWebKit||Ext.isIE||Ext.isOpera?"#"+i:i)}this.up("menu").hide()}}]})})}if(h.enableAlignments){b.push("-",c("justifyleft"),c("justifycenter"),c("justifyright"))}if(!Ext.isSafari2){if(h.enableLinks){b.push("-",c("createlink",false,h.createLink))}if(h.enableLists){b.push("-",c("insertorderedlist"),c("insertunorderedlist"))}if(h.enableSourceEdit){b.push("-",c("sourceedit",true,function(i){h.toggleSourceEdit(!h.sourceEditMode)}))}}for(e=0;e")+'",b.iframePad,a,b.defaultFont)},getEditorBody:function(){var a=this.getDoc();return a.body||a.documentElement},getDoc:function(){return(!Ext.isIE&&this.iframeEl.dom.contentDocument)||this.getWin().document},getWin:function(){return Ext.isIE?this.iframeEl.dom.contentWindow:window.frames[this.iframeEl.dom.name]},initDefaultFont:function(){var h=this,a=0,j,b,k,e,d,g,c;if(!h.defaultFont){b=h.textareaEl.getStyle("font-family");b=Ext.String.capitalize(b.split(",")[0]);j=Ext.Array.clone(h.fontFamilies);Ext.Array.include(j,b);j.sort();h.defaultFont=b;k=h.down("#fontSelect").selectEl.dom;for(d=0,g=j.length;d'+d+""}}d=e.cleanHtml(d);if(e.fireEvent("beforesync",e,d)!==false){if(e.textareaEl.dom.value!=d){e.textareaEl.dom.value=d;g=true}e.fireEvent("sync",e,d);if(g){e.checkChange()}}}},getValue:function(){var a=this,b;if(!a.sourceEditMode){a.syncValue()}b=a.rendered?a.textareaEl.dom.value:a.value;a.value=b;return b},pushValue:function(){var b=this,a;if(b.initialized){a=b.textareaEl.dom.value||"";if(!b.activated&&a.length<1){a=b.defaultValue}if(b.fireEvent("beforepush",b,a)!==false){b.getEditorBody().innerHTML=a;if(Ext.isGecko){b.setDesignMode(false);b.setDesignMode(true)}b.fireEvent("push",b,a)}}},deferFocus:function(){this.focus(false,true)},getFocusEl:function(){var a=this,b=a.win;return b&&!a.sourceEditMode?b:a.textareaEl},focus:function(d,b){var c=this,e,a;if(b){if(!c.focusTask){c.focusTask=new Ext.util.DelayedTask(c.focus)}c.focusTask.delay(Ext.isNumber(b)?b:10,null,c,[d,false])}else{if(d){if(c.textareaEl&&c.textareaEl.dom){e=c.textareaEl.dom.value}if(e&&e.length){c.execCmd("selectall",true)}}a=c.getFocusEl();if(a&&(a.isComponent||a.dom)){a.focus()}}return c},initEditor:function(){try{var g=this,d=g.getEditorBody(),b=g.textareaEl.getStyles("font-size","font-family","background-image","background-repeat","background-color","color"),i,c;b["background-attachment"]="fixed";d.bgProperties="fixed";Ext.DomHelper.applyStyles(d,b);i=g.getDoc();if(i){try{Ext.EventManager.removeAll(i)}catch(h){}}c=Ext.Function.bind(g.onEditorEvent,g);Ext.EventManager.on(i,{mousedown:c,dblclick:c,click:c,keyup:c,buffer:100});c=g.onRelayedEvent;Ext.EventManager.on(i,{mousedown:c,mousemove:c,mouseup:c,click:c,dblclick:c,scope:g});if(Ext.isGecko){Ext.EventManager.on(i,"keypress",g.applyCommand,g)}if(g.fixKeys){Ext.EventManager.on(i,"keydown",g.fixKeys,g)}if(Ext.isIE8m||(Ext.isIE9&&!Ext.isStrict)){Ext.EventManager.on(i,"focusout",function(){g.savedSelection=i.selection.type!=="None"?i.selection.createRange():null},g);Ext.EventManager.on(i,"focusin",function(){if(g.savedSelection){g.savedSelection.select()}},g)}Ext.EventManager.onWindowUnload(g.beforeDestroy,g);i.editorInitialized=true;g.initialized=true;g.pushValue();g.setReadOnly(g.readOnly);g.fireEvent("initialize",g)}catch(a){}},beforeDestroy:function(){var a=this,d=a.monitorTask,c,g;if(d){Ext.TaskManager.stop(d)}if(a.rendered){Ext.EventManager.removeUnloadListener(a.beforeDestroy,a);try{c=a.getDoc();if(c){Ext.EventManager.removeAll(Ext.fly(c));for(g in c){if(c.hasOwnProperty&&c.hasOwnProperty(g)){delete c[g]}}}}catch(b){}delete a.iframeEl;delete a.textareaEl;delete a.toolbar;delete a.inputCmp}a.callParent()},onRelayedEvent:function(c){var b=this.iframeEl,d=Ext.Element.getTrueXY(b),e=c.getXY(),a=Ext.EventManager.getPageXY(c.browserEvent);c.xy=[d[0]+a[0],d[1]+a[1]];c.injectEvent(b);c.xy=e},onFirstFocus:function(){var c=this,b,a;c.activated=true;c.disableItems(c.readOnly);if(Ext.isGecko){c.win.focus();b=c.win.getSelection();if(!b.focusNode||b.focusNode.nodeType!==3){a=b.getRangeAt(0);a.selectNodeContents(c.getEditorBody());a.collapse(true);c.deferFocus()}try{c.execCmd("useCSS",true);c.execCmd("styleWithCSS",false)}catch(d){}}c.fireEvent("activate",c)},adjustFont:function(d){var e=d.getItemId()==="increasefontsize"?1:-1,c=this.getDoc().queryCommandValue("FontSize")||"2",a=Ext.isString(c)&&c.indexOf("px")!==-1,b;c=parseInt(c,10);if(a){if(c<=10){c=1+e}else{if(c<=13){c=2+e}else{if(c<=16){c=3+e}else{if(c<=18){c=4+e}else{if(c<=24){c=5+e}else{c=6+e}}}}}c=Ext.Number.constrain(c,1,6)}else{b=Ext.isSafari;if(b){e*=2}c=Math.max(1,c+e)+(b?"px":0)}this.relayCmd("FontSize",c)},onEditorEvent:function(a){this.updateToolbar()},updateToolbar:function(){var j=this,e,c,d,k,b,g,a,h;if(j.readOnly){return}if(!j.activated){j.onFirstFocus();return}d=j.getToolbar().items.map;k=j.getDoc();if(j.enableFont&&!Ext.isSafari2){g=k.queryCommandValue("fontName");b=(g?g.split(",")[0].replace(/^'/,"").replace(/'$/,""):j.defaultFont).toLowerCase();a=j.fontSelect.dom;if(b!==a.value||b!=g){a.value=b}}function m(){for(e=0,c=arguments.length,b;e0){g=String.fromCharCode(g);switch(g){case"b":b="bold";break;case"i":b="italic";break;case"u":b="underline";break}if(b){a.win.focus();a.execCmd(b);a.deferFocus();d.preventDefault()}}}},insertAtCursor:function(c){var b=this,a;if(b.activated){b.win.focus();if(Ext.isIE){a=b.getDoc().selection.createRange();if(a){a.pasteHTML(c);b.syncValue();b.deferFocus()}}else{b.execCmd("InsertHTML",c);b.deferFocus()}}},fixKeys:(function(){if(Ext.isIE){return function(h){var c=this,b=h.getKey(),g=c.getDoc(),i=c.readOnly,a,d;if(b===h.TAB){h.stopEvent();if(!i){a=g.selection.createRange();if(a){a.collapse(true);a.pasteHTML("    ");c.deferFocus()}}}else{if(b===h.ENTER){if(!i){a=g.selection.createRange();if(a){d=a.parentElement();if(!d||d.tagName.toLowerCase()!=="li"){h.stopEvent();a.pasteHTML("
    ");a.collapse(false);a.select()}}}}}}}if(Ext.isOpera){return function(c){var b=this,a=c.getKey(),d=b.readOnly;if(a===c.TAB){c.stopEvent();if(!d){b.win.focus();b.execCmd("InsertHTML","    ");b.deferFocus()}}}}return null}()),getToolbar:function(){return this.toolbar},buttonTips:{bold:{title:"Bold (Ctrl+B)",text:"Make the selected text bold.",cls:Ext.baseCSSPrefix+"html-editor-tip"},italic:{title:"Italic (Ctrl+I)",text:"Make the selected text italic.",cls:Ext.baseCSSPrefix+"html-editor-tip"},underline:{title:"Underline (Ctrl+U)",text:"Underline the selected text.",cls:Ext.baseCSSPrefix+"html-editor-tip"},increasefontsize:{title:"Grow Text",text:"Increase the font size.",cls:Ext.baseCSSPrefix+"html-editor-tip"},decreasefontsize:{title:"Shrink Text",text:"Decrease the font size.",cls:Ext.baseCSSPrefix+"html-editor-tip"},backcolor:{title:"Text Highlight Color",text:"Change the background color of the selected text.",cls:Ext.baseCSSPrefix+"html-editor-tip"},forecolor:{title:"Font Color",text:"Change the color of the selected text.",cls:Ext.baseCSSPrefix+"html-editor-tip"},justifyleft:{title:"Align Text Left",text:"Align text to the left.",cls:Ext.baseCSSPrefix+"html-editor-tip"},justifycenter:{title:"Center Text",text:"Center text in the editor.",cls:Ext.baseCSSPrefix+"html-editor-tip"},justifyright:{title:"Align Text Right",text:"Align text to the right.",cls:Ext.baseCSSPrefix+"html-editor-tip"},insertunorderedlist:{title:"Bullet List",text:"Start a bulleted list.",cls:Ext.baseCSSPrefix+"html-editor-tip"},insertorderedlist:{title:"Numbered List",text:"Start a numbered list.",cls:Ext.baseCSSPrefix+"html-editor-tip"},createlink:{title:"Hyperlink",text:"Make the selected text a hyperlink.",cls:Ext.baseCSSPrefix+"html-editor-tip"},sourceedit:{title:"Source Edit",text:"Switch to source editing mode.",cls:Ext.baseCSSPrefix+"html-editor-tip"}}});Ext.define("Ext.form.field.Radio",{extend:Ext.form.field.Checkbox,alias:["widget.radiofield","widget.radio"],alternateClassName:"Ext.form.Radio",isRadio:true,focusCls:"form-radio-focus",inputType:"radio",ariaRole:"radio",formId:null,getGroupValue:function(){var a=this.getManager().getChecked(this.name,this.getFormId());return a?a.inputValue:null},onBoxClick:function(b){var a=this;if(!a.disabled&&!a.readOnly){this.setValue(true)}},onRemoved:function(){this.callParent(arguments);this.formId=null},setValue:function(a){var b=this,c;if(Ext.isBoolean(a)){b.callParent(arguments)}else{c=b.getManager().getWithValue(b.name,a,b.getFormId()).getAt(0);if(c){c.setValue(true)}}return b},getSubmitValue:function(){return this.checked?this.inputValue:null},getModelData:function(){return this.getSubmitData()},onChange:function(c,a){var g=this,e,d,b,h;g.callParent(arguments);if(c){h=g.getManager().getByName(g.name,g.getFormId()).items;d=h.length;for(e=0;e=b&&e<=a});c.store.filter()},createStore:function(){var d=this,c=Ext.Date,e=[],b=d.absMin,a=d.absMax;while(b<=a){e.push({disp:c.dateFormat(b,d.format),date:b});b=c.add(b,"mi",d.increment)}return new Ext.data.Store({fields:["disp","date"],data:e})},focusNode:function(a){return false}});Ext.define("Ext.form.field.Time",{extend:Ext.form.field.ComboBox,alias:"widget.timefield",alternateClassName:["Ext.form.TimeField","Ext.form.Time"],triggerCls:Ext.baseCSSPrefix+"form-time-trigger",minText:"The time in this field must be equal to or after {0}",maxText:"The time in this field must be equal to or before {0}",invalidText:"{0} is not a valid time",format:"g:i A",altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|gi a|hi a|giA|hiA|gi A|hi A",increment:15,pickerMaxHeight:300,selectOnTab:true,snapToIncrement:false,initDate:"1/1/2008",initDateFormat:"j/n/Y",ignoreSelection:0,queryMode:"local",displayField:"disp",valueField:"date",initComponent:function(){var c=this,b=c.minValue,a=c.maxValue;if(b){c.setMinValue(b)}if(a){c.setMaxValue(a)}c.displayTpl=new Ext.XTemplate('{[typeof values === "string" ? values : this.formatDate(values["'+c.displayField+'"])]}'+c.delimiter+"",{formatDate:Ext.Function.bind(c.formatDate,c)});this.callParent()},transformOriginalValue:function(a){if(Ext.isString(a)){return this.rawToValue(a)}return a},isEqual:function(b,a){return Ext.Date.isEqual(b,a)},setMinValue:function(c){var b=this,a=b.picker;b.setLimit(c,true);if(a){a.setMinValue(b.minValue)}},setMaxValue:function(c){var b=this,a=b.picker;b.setLimit(c,false);if(a){a.setMaxValue(b.maxValue)}},setLimit:function(b,g){var a=this,e,c;if(Ext.isString(b)){e=a.parseDate(b)}else{if(Ext.isDate(b)){e=b}}if(e){c=Ext.Date.clearTime(new Date(a.initDate));c.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())}else{c=null}a[g?"minValue":"maxValue"]=c},rawToValue:function(a){return this.parseDate(a)||a||null},valueToRaw:function(a){return this.formatDate(this.parseDate(a))},getErrors:function(d){var b=this,g=Ext.String.format,h=b.callParent(arguments),c=b.minValue,e=b.maxValue,a;d=b.formatDate(d||b.processRawValue(b.getRawValue()));if(d===null||d.length<1){return h}a=b.parseDate(d);if(!a){h.push(g(b.invalidText,d,Ext.Date.unescapeFormat(b.format)));return h}if(c&&ae){h.push(g(b.maxText,b.formatDate(e)))}return h},formatDate:function(){return Ext.form.field.Date.prototype.formatDate.apply(this,arguments)},parseDate:function(e){var d=this,h=e,b=d.altFormats,g=d.altFormatsArray,c=0,a;if(e&&!Ext.isDate(e)){h=d.safeParse(e,d.format);if(!h&&b){g=g||b.split("|");a=g.length;for(;c0){c=c[0];if(c&&Ext.Date.isEqual(a.get("date"),c.get("date"))){d.collapse()}}},onListSelectionChange:function(b,d){if(d.length){var a=this,c=d[0].get("date");if(!a.ignoreSelection){a.skipSync=true;a.setValue(c);a.skipSync=false;a.fireEvent("select",a,c);a.picker.clearHighlight();a.collapse();a.inputEl.focus()}}},syncSelection:function(){var j=this,h=j.picker,c,g,k,b,i,e,a;if(h&&!j.skipSync){h.clearHighlight();k=j.getValue();g=h.getSelectionModel();j.ignoreSelection++;if(k===null){g.deselectAll()}else{if(Ext.isDate(k)){b=h.store.data.items;e=b.length;for(i=0;i1||(e===1&&b[0].nodeType!==3))){j=h.child("."+Ext.baseCSSPrefix+"tree-node-text");c[0]=j.getOffsetsTo(h)[0];a=h.getWidth()-c[0];i.addCls(Ext.baseCSSPrefix+"grid-cell-editor-on-text-node")}else{a=g.getWidth()-1}if(d===true){i.field.setWidth(a)}i.alignTo(g,i.alignment,c)},onEditorTab:function(b){var a=this.field;if(a.onEditorTab){a.onEditorTab(b)}},emptyText:"\u00a0",alignment:"tl-tl",hideEl:false,cls:Ext.baseCSSPrefix+"small-editor "+Ext.baseCSSPrefix+"grid-editor "+Ext.baseCSSPrefix+"grid-cell-editor",shim:false,shadow:false});Ext.define("Ext.grid.ColumnComponentLayout",{extend:Ext.layout.component.Auto,alias:"layout.columncomponent",type:"columncomponent",setWidthInDom:true,getContentHeight:function(a){return this.owner.isGroupHeader?a.getProp("contentHeight"):this.callParent(arguments)},calculateOwnerHeightFromContentHeight:function(c,b){var a=this.callParent(arguments);if(this.owner.isGroupHeader){a+=this.owner.titleEl.dom.offsetHeight}return a},getContentWidth:function(a){return this.owner.isGroupHeader?a.getProp("contentWidth"):this.callParent(arguments)},calculateOwnerWidthFromContentWidth:function(b,a){return a+b.getPaddingInfo().width}});Ext.define("Ext.grid.ColumnLayout",{extend:Ext.layout.container.HBox,alias:"layout.gridcolumn",type:"gridcolumn",reserveOffset:false,firstHeaderCls:Ext.baseCSSPrefix+"column-header-first",lastHeaderCls:Ext.baseCSSPrefix+"column-header-last",initLayout:function(){this.grid=this.owner.up("[scrollerOwner]");this.callParent()},beginLayout:function(c){var j=this,b=j.owner,a=j.grid,k=a.view,h=j.getVisibleItems(),g=h.length,d=j.firstHeaderCls,m=j.lastHeaderCls,e,l;if(a.lockable){if(b.up("tablepanel")===k.normalGrid){k=k.normalGrid.getView()}else{k=null}}for(e=0;eb){a.width-=Ext.getScrollbarSize().width;e.state.parallelDone=false;c.invalidate()}}}return a},publishInnerCtSize:function(e){var d=this,c=e.state.boxPlan.targetSize,b=e.peek("contentWidth"),a;d.owner.tooNarrow=e.state.boxPlan.tooNarrow;if((b!=null)&&!d.owner.isHeader){c.width=b;a=d.owner.ownerCt.view;if(a.scrollFlags.y){c.width+=Ext.getScrollbarSize().width}}return d.callParent(arguments)}});Ext.define("Ext.layout.container.Fit",{extend:Ext.layout.container.Container,alternateClassName:"Ext.layout.FitLayout",alias:"layout.fit",itemCls:Ext.baseCSSPrefix+"fit-item",targetCls:Ext.baseCSSPrefix+"layout-fit",type:"fit",defaultMargins:{top:0,right:0,bottom:0,left:0},manageMargins:true,sizePolicies:{0:{readsWidth:1,readsHeight:1,setsWidth:0,setsHeight:0},1:{readsWidth:0,readsHeight:1,setsWidth:1,setsHeight:0},2:{readsWidth:1,readsHeight:0,setsWidth:0,setsHeight:1},3:{readsWidth:0,readsHeight:0,setsWidth:1,setsHeight:1}},getItemSizePolicy:function(b,c){var a=c||this.owner.getSizeModel(),d=(a.width.shrinkWrap?0:1)|(a.height.shrinkWrap?0:2);return this.sizePolicies[d]},beginLayoutCycle:function(k,g){var t=this,u=t.lastHeightModel&&t.lastHeightModel.calculated,h=t.lastWidthModel&&t.lastWidthModel.calculated,o=h||u,l=0,m=0,s,b,p,r,e,a,j,n,q,d;t.callParent(arguments);if(o&&k.targetContext.el.dom.tagName.toUpperCase()!="TD"){o=h=u=false}b=k.childItems;e=b.length;for(p=0;p'+a.view.emptyText+""}a.view.getComponentLayout().headerCt=a.headerCt;a.mon(a.view,{uievent:a.processEvent,scope:a});b.view=a.view;a.headerCt.view=a.view}return a.view},setAutoScroll:Ext.emptyFn,processEvent:function(g,b,a,c,d,i){var h=this,j;if(d!==-1){j=h.headerCt.getGridColumns()[d];return j.processEvent.apply(j,arguments)}},determineScrollbars:function(){},invalidateScroller:function(){},scrollByDeltaY:function(b,a){this.getView().scrollBy(0,b,a)},scrollByDeltaX:function(b,a){this.getView().scrollBy(b,0,a)},afterCollapse:function(){var a=this;a.saveScrollPos();a.saveScrollPos();a.callParent(arguments)},afterExpand:function(){var a=this;a.callParent(arguments);a.restoreScrollPos();a.restoreScrollPos()},saveScrollPos:Ext.emptyFn,restoreScrollPos:Ext.emptyFn,onHeaderResize:function(){this.delayScroll()},onHeaderMove:function(e,g,a,b,d){var c=this;if(c.optimizedColumnMove===false){c.view.refresh()}else{c.view.moveColumn(b,d,a)}c.delayScroll()},onHeaderHide:function(a,b){this.delayScroll()},onHeaderShow:function(a,b){this.delayScroll()},delayScroll:function(){var a=this.getScrollTarget().el;if(a){this.scrollTask.delay(10,null,null,[a.dom.scrollLeft])}},onViewReady:function(){this.fireEvent("viewready",this)},onRestoreHorzScroll:function(){var a=this.scrollLeftPos;if(a){this.syncHorizontalScroll(a,true)}},getScrollerOwner:function(){var a=this;if(!this.scrollerOwner){a=this.up("[scrollerOwner]")}return a},getLhsMarker:function(){var a=this;return a.lhsMarker||(a.lhsMarker=Ext.DomHelper.append(a.el,{cls:a.resizeMarkerCls},true))},getRhsMarker:function(){var a=this;return a.rhsMarker||(a.rhsMarker=Ext.DomHelper.append(a.el,{cls:a.resizeMarkerCls},true))},getSelectionModel:function(){var c=this,a=c.selModel,e,d,b;if(!a){a={};e=true}if(!a.events){b=a.selType||c.selType;e=!a.mode;a=c.selModel=Ext.create("selection."+b,a)}if(c.simpleSelect){d="SIMPLE"}else{if(c.multiSelect){d="MULTI"}}Ext.applyIf(a,{allowDeselect:c.allowDeselect});if(d&&e){a.setSelectionMode(d)}if(!a.hasRelaySetup){c.relayEvents(a,["selectionchange","beforeselect","beforedeselect","select","deselect"]);a.hasRelaySetup=true}if(c.disableSelection){a.locked=true}return a},getScrollTarget:function(){var a=this.getScrollerOwner(),b=a.query("tableview");return b[1]||b[0]},onHorizontalScroll:function(a,b){this.syncHorizontalScroll(b.scrollLeft)},syncHorizontalScroll:function(d,b){var c=this,a;b=b===true;if(c.rendered&&(b||d!==c.scrollLeftPos)){if(b){a=c.getScrollTarget();a.el.dom.scrollLeft=d}c.headerCt.el.dom.scrollLeft=d;c.scrollLeftPos=d}},onStoreLoad:Ext.emptyFn,getEditorParent:function(){return this.body},bindStore:function(b,c){var d=this,a=d.getView(),e=b&&b.buffered,g;d.store=b;if(a.store!==b){if(c){a.bindStore(b,false,"dataSource")}else{a.bindStore(b,false)}}d.mon(b,{load:d.onStoreLoad,scope:d});d.storeRelayers=d.relayEvents(b,["filterchange"]);g=d.findPlugin("bufferedrenderer");if(g){d.verticalScroller=g;if(g.store){g.bindStore(b)}}else{if(e){d.verticalScroller=g=d.addPlugin(Ext.apply({ptype:"bufferedrenderer"},d.initialConfig.verticalScroller))}}if(g){d.invalidateScrollerOnRefresh=false}if(d.invalidateScrollerOnRefresh!==undefined){a.preserveScrollOnRefresh=!d.invalidateScrollerOnRefresh}},unbindStore:function(){var b=this,a=b.store;if(a){b.store=null;b.mun(a,{load:b.onStoreLoad,scope:b});Ext.destroy(b.storeRelayers)}},reconfigure:function(b,e){var g=this,a=g.getView(),d,i=g.store,h=g.headerCt,c=h?h.items.getRange():g.columns;if(e){e=Ext.Array.slice(e);delete a.tpl}g.fireEvent("beforereconfigure",g,b,e,i,c);if(g.lockable){g.reconfigureLockable(b,e)}else{Ext.suspendLayouts();if(e){delete g.scrollLeftPos;h.removeAll();h.add(e)}if(b&&b!==i){if(g.store){g.unbindStore()}b=Ext.StoreManager.lookup(b);d=a.deferInitialRefresh;a.deferInitialRefresh=false;g.bindStore(b);a.deferInitialRefresh=d}else{g.getView().refresh()}h.setSortState();Ext.resumeLayouts(true)}g.fireEvent("reconfigure",g,b,e,i,c)},beforeDestroy:function(){var a=this.scrollTask;if(a){a.cancel();this.scrollTask=null}this.callParent()},onDestroy:function(){if(this.lockable){this.destroyLockable()}this.callParent()}});Ext.define("Ext.util.CSS",function(){var c,e=null,d=document,b=/(-[a-z])/gi,a=function(g,h){return h.charAt(1).toUpperCase()};return{singleton:true,rules:e,initialized:false,constructor:function(){c=this},createStyleSheet:function(i,l){var h,g=d.getElementsByTagName("head")[0],k=d.createElement("style");k.setAttribute("type","text/css");if(l){k.setAttribute("id",l)}if(Ext.isIE){g.appendChild(k);h=k.styleSheet;h.cssText=i}else{try{k.appendChild(d.createTextNode(i))}catch(j){k.cssText=i}g.appendChild(k);h=k.styleSheet?k.styleSheet:(k.sheet||d.styleSheets[d.styleSheets.length-1])}c.cacheStyleSheet(h);return h},removeStyleSheet:function(h){var g=d.getElementById(h);if(g){g.parentNode.removeChild(g)}},swapStyleSheet:function(i,g){var h;c.removeStyleSheet(i);h=d.createElement("link");h.setAttribute("rel","stylesheet");h.setAttribute("type","text/css");h.setAttribute("id",i);h.setAttribute("href",g);d.getElementsByTagName("head")[0].appendChild(h)},refreshCache:function(){return c.getRules(true)},cacheStyleSheet:function(m){if(!e){e=c.rules={}}try{var p=m.cssRules||m.rules,l=p.length-1,h=m.imports,g=h?h.length:0,o,k;for(k=0;k=0;--l){o=p[l];if(o.styleSheet){c.cacheStyleSheet(o.styleSheet)}c.cacheRule(o,m)}}catch(n){}},cacheRule:function(h,l){if(h.styleSheet){return c.cacheStyleSheet(h.styleSheet)}var k=h.selectorText,i,g;if(k){k=k.split(",");i=k.length;for(g=0;g=g+a;c--){e[c]=e[c-a];e[c].setAttribute("data-recordIndex",c)}}d.endIndex=d.endIndex+a}else{d.startIndex=g;d.endIndex=g+a-1}for(c=0;c-1){c=Ext.getDom(c);if(a){d=e[b];d.parentNode.insertBefore(c,d);Ext.removeNode(d);c.setAttribute("data-recordIndex",b)}this.elements[b]=c}return this},indexOf:function(b){var c=this.elements,a;b=Ext.getDom(b);for(a=this.startIndex;a<=this.endIndex;a++){if(c[a]===b){return a}}return -1},removeRange:function(b,g,d){var j=this,a=j.elements,e,h,c,k;if(g===undefined){g=j.count}else{g=Math.min(j.endIndex+1,g+1)}if(!b){b=0}c=g-b;for(h=b,k=g;h=h.startIndex){d=a[g]=a[i];d.setAttribute("data-recordIndex",g)}else{delete a[g]}}h.endIndex-=e;h.count-=e},scroll:function(e,l,c){var k=this,a=k.elements,n=e.length,h,d,b,g,j=k.view.getNodeContainer(),m=document.createDocumentFragment();if(l==-1){for(h=(k.endIndex-c)+1;h<=k.endIndex;h++){d=a[h];delete a[h];d.parentNode.removeChild(d)}k.endIndex-=c;g=k.view.bufferRender(e,k.startIndex-=n);for(h=0;h',"{[values.view.renderColumnSizer(out)]}","{[values.view.renderTHead(values, out)]}","{[values.view.renderTFoot(values, out)]}",'',"{%","values.view.renderRows(values.rows, values.viewStartIndex, out);","%}","","",{priority:0}],rowTpl:["{%",'var dataRowCls = values.recordIndex === -1 ? "" : " '+Ext.baseCSSPrefix+'grid-data-row";',"%}",'','{%',"parent.view.renderCell(values, parent.record, parent.recordIndex, xindex - 1, out, parent)","%}","","",{priority:0}],cellTpl:['','
    {style}">{value}
    ',"",{priority:0}],refreshSelmodelOnRefresh:false,tableValues:{},rowValues:{itemClasses:[],rowClasses:[]},cellValues:{classes:[Ext.baseCSSPrefix+"grid-cell "+Ext.baseCSSPrefix+"grid-td"]},renderBuffer:document.createElement("div"),constructor:function(a){if(a.grid.isTree){a.baseCls=Ext.baseCSSPrefix+"tree-view"}this.callParent([a])},initComponent:function(){var b=this,a=b.scroll;this.addEvents("beforecellclick","cellclick","beforecelldblclick","celldblclick","beforecellcontextmenu","cellcontextmenu","beforecellmousedown","cellmousedown","beforecellmouseup","cellmouseup","beforecellkeydown","cellkeydown");b.body=new Ext.dom.Element.Fly();b.body.id=b.id+"gridBody";b.autoScroll=undefined;if(!b.trackOver){b.overItemCls=null}if(a===true||a==="both"){b.autoScroll=true}else{if(a==="horizontal"){b.overflowX="auto"}else{if(a==="vertical"){b.overflowY="auto"}}}b.selModel.view=b;b.headerCt.view=b;b.grid.view=b;b.initFeatures(b.grid);delete b.grid;b.tpl=b.getTpl("tpl");b.itemSelector=b.getItemSelector();b.all=new Ext.view.NodeCache(b);b.callParent()},moveColumn:function(a,o,d){var n=this,l=(d>1)?document.createDocumentFragment():undefined,c=o,p=n.getGridColumns().length,h=p-1,b=(n.firstCls||n.lastCls)&&(o===0||o==p||a===0||a==h),g,e,s,k,m,r,q;if(n.rendered&&o!==a){s=n.el.query(n.getDataRowSelector());if(o>a&&l){c-=d}for(g=0,k=s.length;g-1){return this.store.data.getAt(a)}}return this.dataSource.data.get(b.getAttribute("data-recordId"))}},indexOf:function(a){a=this.getNode(a,false);if(!a&&a!==0){return -1}return this.all.indexOf(a)},indexInStore:function(b){b=this.getNode(b,true);if(!b&&b!==0){return -1}var a=b.getAttribute("data-recordIndex");if(a){return parseInt(a,10)}return this.dataSource.indexOf(this.getRecord(b))},renderRows:function(e,d,b){var g=this.rowValues,a=e.length,h=this.getHeaderCt(),c;g.view=this;g.columns=h.getGridColumns();g.visibleColumns=h.getVisibleGridColumns();for(c=0;c')}},renderRow:function(g,a,e){var i=this,d=a===-1,h=i.selModel,l=i.rowValues,c=l.itemClasses,b=l.rowClasses,k,j=i.rowTpl;l.record=g;l.recordId=g.internalId;l.recordIndex=a;l.rowId=i.getRowId(g);l.itemCls=l.rowCls="";if(!l.columns){l.columns=i.headerCt.getGridColumns()}c.length=b.length=0;if(!d){c[0]=Ext.baseCSSPrefix+"grid-row";if(h&&h.isRowSelected&&h.isRowSelected(g,a)){c.push(i.selectedItemCls)}if(i.stripeRows&&a%2!==0){b.push(i.altRowCls)}if(i.getRowClass){k=i.getRowClass(g,a,null,i.dataSource);if(k){b.push(k)}}}if(e){j.applyOut(l,e)}else{return j.apply(l)}},renderCell:function(c,g,e,i,d){var k=this,h=k.selModel,j=k.cellValues,b=j.classes,a=g.data[c.dataIndex],m=k.cellTpl,n,l;j.record=g;j.column=c;j.recordIndex=e;j.columnIndex=i;j.cellIndex=i;j.align=c.align;j.tdCls=c.tdCls;j.style=j.tdAttr="";j.unselectableAttr=k.enableTextSelection?"":'unselectable="on"';if(c.renderer&&c.renderer.call){n=c.renderer.call(c.scope||k.ownerCt,a,j,g,e,i,k.dataSource,k);if(j.css){g.cssWarning=true;j.tdCls+=" "+j.css;delete j.css}}else{n=a}j.value=(n==null||n==="")?" ":n;b[1]=Ext.baseCSSPrefix+"grid-cell-"+c.getItemId();l=2;if(c.tdCls){b[l++]=c.tdCls}if(k.markDirty&&g.isModified(c.dataIndex)){b[l++]=k.dirtyCls}if(c.isFirstVisible){b[l++]=k.firstCls}if(c.isLastVisible){b[l++]=k.lastCls}if(!k.enableTextSelection){b[l++]=Ext.baseCSSPrefix+"unselectable"}b[l++]=j.tdCls;if(h&&h.isCellSelected&&h.isCellSelected(k,e,i)){b[l++]=(k.selectedCellCls)}b.length=l;j.tdCls=b.join(" ");m.applyOut(j,d);j.column=null},getNode:function(c,b){var d,a=this.callParent(arguments);if(a&&a.tagName){if(b){if(!(d=Ext.fly(a)).is(this.dataRowSelector)){return d.down(this.dataRowSelector,true)}}else{if(b===false){if(!(d=Ext.fly(a)).is(this.itemSelector)){return d.up(this.itemSelector,null,true)}}}}return a},getRowId:function(a){return this.id+"-record-"+a.internalId},constructRowId:function(a){return this.id+"-record-"+a},getNodeById:function(b,a){b=this.constructRowId(b);return this.retrieveNode(b,a)},getNodeByRecord:function(a,b){var c=this.getRowId(a);return this.retrieveNode(c,b)},retrieveNode:function(e,c){var a=this.el.getById(e,true),b=this.itemSelector,d;if(c===false&&a){if(!(d=Ext.fly(a)).is(b)){return d.up(b,null,true)}}return a},updateIndexes:Ext.emptyFn,bodySelector:"table",nodeContainerSelector:"tbody",itemSelector:"tr."+Ext.baseCSSPrefix+"grid-row",dataRowSelector:"tr."+Ext.baseCSSPrefix+"grid-data-row",cellSelector:"td."+Ext.baseCSSPrefix+"grid-cell",sizerSelector:"col."+Ext.baseCSSPrefix+"grid-cell",innerSelector:"div."+Ext.baseCSSPrefix+"grid-cell-inner",getNodeContainer:function(){return this.el.down(this.nodeContainerSelector,true)},getBodySelector:function(){return this.bodySelector+"."+Ext.baseCSSPrefix+this.id+"-table"},getNodeContainerSelector:function(){return this.nodeContainerSelector},getColumnSizerSelector:function(a){return this.sizerSelector+"-"+a.getItemId()},getItemSelector:function(){return this.itemSelector},getDataRowSelector:function(){return this.dataRowSelector},getCellSelector:function(b){var a=this.cellSelector;if(b){a+="-"+b.getItemId()}return a},getCellInnerSelector:function(a){return this.getCellSelector(a)+" "+this.innerSelector},addRowCls:function(b,a){var c=this.getNode(b,false);if(c){Ext.fly(c).addCls(a)}},removeRowCls:function(b,a){var c=this.getNode(b,false);if(c){Ext.fly(c).removeCls(a)}},onRowSelect:function(a){this.addRowCls(a,this.selectedItemCls)},onRowDeselect:function(b){var a=this;a.removeRowCls(b,a.selectedItemCls);a.removeRowCls(b,a.focusedItemCls)},onCellSelect:function(b){var a=this.getCellByPosition(b,true);if(a){Ext.fly(a).addCls(this.selectedCellCls)}},onCellDeselect:function(b){var a=this.getCellByPosition(b,true);if(a){Ext.fly(a).removeCls(this.selectedCellCls)}},onCellFocus:function(a){this.focusCell(a)},getCellByPosition:function(a,b){if(a){var c=this.getNode(a.row,true),d=this.headerCt.getHeaderAtIndex(a.column);if(d&&c){return Ext.fly(c).down(this.getCellSelector(d),b)}}return false},focus:function(){var a=this.getFocusEl();if(a){this.focusRow(a)}},getFocusEl:function(){var b=this,a;if(b.refreshCounter){a=b.focusedRow;if(!(a&&b.el.contains(a))){if(b.all.getCount()){b.focusRow(b.getFirstVisibleRowIndex());a=b.focusedRow}else{a=b.body}}}else{return b.el}return Ext.get(a)},onRowFocus:function(d,b,a){var c=this;if(b){c.addRowCls(d,c.focusedItemCls);if(!a){c.focusRow(d)}}else{c.removeRowCls(d,c.focusedItemCls)}},focusRow:function(c){var b=this,e,d=b.ownerCt&&b.ownerCt.collapsed,a;if(b.isVisible(true)&&!d&&(e=b.getNode(c,true))&&b.el){a=b.getRecord(e);c=b.indexInStore(e);b.selModel.setLastFocused(a);e.focus();b.focusedRow=e;b.fireEvent("rowfocus",a,e,c)}},focusCell:function(g){var i=this,j=i.getCellByPosition(g),e=i.getRecord(g.row),b=i.el,d=0,c=b.getRegion(),a=i.ownerCt,h;this.focusRow(e);if(j){c.right=c.left+b.dom.clientWidth;h=j.getRegion();if(h.leftc.right){d=h.right-c.right}}if(d){a.scrollByDeltaX(d)}i.fireEvent("cellfocus",e,j,g)}},scrollByDelta:function(c,b){b=b||"scrollTop";var a=this.el.dom;a[b]=(a[b]+=c)},isDataRow:function(a){return Ext.fly(a).hasCls(Ext.baseCSSPrefix+"grid-data-row")},syncRowHeights:function(g,a){g=Ext.get(g);a=Ext.get(a);g.dom.style.height=a.dom.style.height="";var d=this,e=d.rowTpl,b=g.dom.offsetHeight,c=a.dom.offsetHeight;if(b!==c){while(e){if(e.syncRowHeights){if(e.syncRowHeights(g,a)===false){break}}e=e.nextTpl}b=g.dom.offsetHeight;c=a.dom.offsetHeight;if(b!==c){g=g.down("[data-recordId]")||g;a=a.down("[data-recordId]")||a;if(g&&a){g.dom.style.height=a.dom.style.height="";b=g.dom.offsetHeight;c=a.dom.offsetHeight;if(b>c){g.setHeight(b);a.setHeight(b)}else{if(c>b){g.setHeight(c);a.setHeight(c)}}}}}},onIdChanged:function(a,h,g,c,b){var e=this,d;if(e.viewReady){d=e.getNodeById(b);if(d){d.setAttribute("data-recordId",h.internalId);d.id=e.getRowId(h)}}},onUpdate:function(q,g,e,n){var m=this,r=m.rowTpl,i,k,l,p,b,a,h,c,j,o,d;if(m.viewReady){l=m.getNodeByRecord(g,false);if(l){j=m.overItemCls;o=m.focusedItemCls;i=m.indexInStore(g);k=Ext.fly(l,"_internal");p=m.createRowElement(g,i);if(k.hasCls(j)){Ext.fly(p).addCls(j)}if(k.hasCls(o)){Ext.fly(p).addCls(o)}d=m.headerCt.getGridColumns();if(l.mergeAttributes){l.mergeAttributes(p,true)}else{b=p.attributes;a=b.length;for(c=0;c=c:j<=0){return k||c}j+=g;if((b=Ext.fly(d.getNode(j,true)))&&b.isVisible(true)){e+=g;k=j}}while(e!==a);return j},walkRecs:function(b,a){var h=this,i=0,l=b,c,k=(h.store.buffered?h.store.getTotalCount():h.store.getCount())-1,e=(a<0)?0:k,j=e?1:-1,g=h.store.indexOf(b),d;do{if(e?g>=e:g<=0){return l}g+=j;d=h.store.getAt(g);if((c=Ext.fly(h.getNodeByRecord(d,true)))&&c.isVisible(true)){i+=j;l=d}}while(i!==a);return l},getFirstVisibleRowIndex:function(){var c=this,b=(c.dataSource.buffered?c.dataSource.getTotalCount():c.dataSource.getCount()),a=c.indexOf(c.all.first())-1;do{a+=1;if(a===b){return}}while(!Ext.fly(c.getNode(a,true)).isVisible(true));return a},getLastVisibleRowIndex:function(){var b=this,a=b.indexOf(b.all.last());do{a-=1;if(a===-1){return}}while(!Ext.fly(b.getNode(a,true)).isVisible(true));return a},getFirstVisibleColumnIndex:function(){var a=this.getHeaderCt().getVisibleGridColumns()[0];return a?a.getIndex():-1},getLastVisibleColumnIndex:function(){var b=this.getHeaderCt().getVisibleGridColumns(),a=b[b.length-1];return a.getIndex()},getHeaderCt:function(){return this.headerCt},getPosition:function(a,b){return{row:this.dataSource.indexOf(a,true),column:Ext.Array.indexOf(this.headerCt.getGridColumns(),b)}},getRightGap:function(a){var g=this.getHeaderCt(),e=g.getGridColumns(),b=Ext.Array.indexOf(e,a),c=b+1,d;for(;c<=e.length;c++){if(!e[c].hidden){d=c;break}}return d-b},beforeDestroy:function(){var a=this;if(a.rendered){a.el.removeAllListeners()}a.callParent(arguments)},onDestroy:function(){var d=this,c=d.featuresMC,a,b;if(c){for(b=0,a=c.getCount();b=0;d--){if(!e[d].hidden){b=d;break}}return b-c},onAdd:function(c,a,b){this.callParent(arguments);this.doStripeRows(b)},onRemove:function(c,a,b){this.callParent(arguments);this.doStripeRows(b[0])},doStripeRows:function(b,a){var d=this,e,h,c,g;if(d.rendered&&d.stripeRows){e=d.getNodes(b,a);for(c=0,h=e.length;ce.viewSize){if(cd.startIndex){this.onDataRefresh()}else{e.stretchView(this,e.getScrollHeight())}}else{this.callParent([b,a,c])}},onRemove:function(b,a,c){if(this.bufferedRenderer){this.onDataRefresh()}else{this.callParent([b,a,c])}}});Ext.define("Ext.grid.RowEditorButtons",{extend:Ext.container.Container,alias:"widget.roweditorbuttons",frame:true,constructor:function(b){var a=b.rowEditor,d=Ext.baseCSSPrefix,c=a.editingPlugin;b=Ext.apply({floating:{shadow:false},baseCls:d+"grid-row-editor-buttons",layout:{type:"hbox",align:"middle"},defaults:{xtype:"button",ui:a.buttonUI,scope:c,flex:1,minWidth:Ext.panel.Panel.prototype.minButtonWidth},items:[{cls:d+"row-editor-update-button",itemId:"update",handler:c.completeEdit,text:a.saveBtnText,disabled:a.updateButtonDisabled},{cls:d+"row-editor-cancel-button",handler:c.cancelEdit,text:a.cancelBtnText}]},b);this.callParent([b])},getTargetEl:function(){return this.el},afterComponentLayout:function(){if(Ext.isIEQuirks&&!this.componentLayoutCounter){this.el.setWidth(this.width=this.layout.innerCt.getWidth()+this.getFrameInfo().width)}this.callParent(arguments)}});Ext.define("Ext.grid.RowEditor",{extend:Ext.form.Panel,alias:"widget.roweditor",saveBtnText:"Update",cancelBtnText:"Cancel",errorsText:"Errors",dirtyText:"You need to commit or cancel your changes",lastScrollLeft:0,lastScrollTop:0,border:false,buttonUI:"default",hideMode:"offsets",initComponent:function(){var b=this,a;b.cls=Ext.baseCSSPrefix+"grid-editor "+Ext.baseCSSPrefix+"grid-row-editor";b.layout={type:"hbox",align:"middle"};b.columns=new Ext.util.HashMap();b.columns.getKey=function(d){var c;if(d.getEditor){c=d.getEditor();if(c){return c.id}}return d.id};b.mon(b.columns,{add:b.doColumnAdd,remove:b.doColumnRemove,replace:b.onColumnReplace,scope:b});b.callParent(arguments);if(b.fields){b.setField(b.fields,true);delete b.fields}b.mon(b.hierarchyEventSource,{scope:b,show:b.repositionIfVisible});b.mon(b.view.headerCt,"afterlayout",b.correctWidth,b);a=b.getForm();a.trackResetOnLoad=true},onFieldRender:function(e){var c=this,d=c.getEditorMargins(e),b=c.columns.get(e.id),a;e.setMargin("0 "+d.right+" 0 "+d.left,true);if(b.isVisible()){c.setFieldWidth(b,e)}else{if(!b.rendered){a=Ext.Function.bind(c.setFieldWidth,c,[b,e]);c.mon(c.view.headerCt,"afterlayout",a,c,{single:true})}}},setFieldWidth:function(a,c){var b=this.getEditorMargins(c);c.setWidth(a.getWidth()-b.width)},setupMargin:function(h){var e=this,c=e.cellPadding,g=e.view,a=0,k=0,b=1,j,d,i;if(!c){i=g.el.down(g.cellSelector+" "+g.innerSelector);if(i){c={left:i.getPadding("l"),right:i.getPadding("r"),top:i.getPadding("t"),bottom:i.getPadding("b")}}else{c={left:0,right:0}}e.cellPadding=c}j=h.inputEl;if(j){a=j.getPadding("l");k=j.getPadding("r")}if(h.isXType("textfield")){b=1}d={left:Math.max(1,c.left-(a+b)),right:Math.max(1,c.right-(k+b)),top:c.top,bottom:c.bottom};d.width=d.left+d.right;h.editorMargin=d;return d},getEditorMargins:function(b){var a=b.editorMargin;if(!a){a=this.setupMargin(b)}return a},onFieldChange:function(){var c=this,b=c.getForm(),a=b.isValid();if(c.errorSummary&&c.isVisible()){c[a?"hideToolTip":"showToolTip"]()}c.updateButton(a);c.isValid=a},updateButton:function(b){var a=this.floatingButtons;if(a){a.child("#update").setDisabled(!b)}else{this.updateButtonDisabled=!b}},afterRender:function(){var c=this,b=c.editingPlugin,a=b.grid,e,d;c.callParent(arguments);c.mon(c.container,"scroll",c.onCtScroll,c,{buffer:10});if(a.lockable){a.normalGrid.view.mon(a.normalGrid.view.el,"scroll",c.onNormalViewScroll,c,{buffer:10})}c.mon(c.el,{click:Ext.emptyFn,stopPropagation:true});c.el.swallowEvent(["keypress","keydown"]);c.keyNav=new Ext.util.KeyNav(c.el,{enter:b.completeEdit,esc:b.onEscKey,scope:b});c.mon(b.view,{beforerefresh:c.onBeforeViewRefresh,refresh:c.onViewRefresh,itemremove:c.onViewItemRemove,scope:c});c.preventReposition=true;c.columns.each(function(g,h){e=h.getEditor();d=c.getEditorMargins(e);h.getEditor().setMargin("0 "+d.right+" 0 "+d.left,true);if(h.isVisible()){c.onColumnShow(h)}},c);delete c.preventReposition},onBeforeViewRefresh:function(b){var c=this,a=b.el.dom;if(c.el.dom.parentNode===a){a.removeChild(c.el.dom)}},onViewRefresh:function(b){var d=this,c=d.context,a;d.container.dom.appendChild(d.el.dom);if(c&&(a=c.store.indexOf(c.record))>=0){c.row=b.getNode(a);d.reposition();if(d.tooltip&&d.tooltip.isVisible()){d.tooltip.setTarget(c.row)}}else{d.editingPlugin.cancelEdit()}},onViewItemRemove:function(a,b){var c=this.context;if(c&&a===c.record){this.editingPlugin.cancelEdit()}},onCtScroll:function(d,c){var a=this,b=c.scrollTop,g=Ext.fly(c).getScrollLeft();if(b!==a.lastScrollTop){a.lastScrollTop=b;if((a.tooltip&&a.tooltip.isVisible())||a.hiddenTip){a.repositionTip()}}if(g!==a.lastScrollLeft){a.lastScrollLeft=g;a.reposition()}},onNormalViewScroll:function(d,c){if(this.ignoreScroll){this.ignoreScroll=false;return}var a=this,b=c.scrollTop;if(b!==a.lastScrollTop){a.lastScrollTop=b;if((a.tooltip&&a.tooltip.isVisible())||a.hiddenTip){a.repositionTip()}}this.reposition(null,true)},onColumnResize:function(b,a){var c;if(!b.isGroupHeader&&this.rendered){c=b.getEditor();c.setWidth(a-this.getEditorMargins(c).width);this.repositionIfVisible()}},onColumnHide:function(a){if(!a.isGroupHeader){a.getEditor().hide();this.repositionIfVisible()}},onColumnShow:function(a){var b=this,c;if(!a.isGroupHeader){c=a.getEditor();c.show();if(b.rendered){c.setWidth(a.getWidth()-b.getEditorMargins(c).width);if(!b.preventReposition){this.repositionIfVisible()}}}},onColumnMove:function(c,b,d){var a=this.editingPlugin.grid,g;if(a.lockable&&a.normalGrid.headerCt.contains(c,true)){g=a.lockedGrid.view.getGridColumns().length;b+=g;d+=g}if(!c.isGroupHeader){var e=c.getEditor();if(this.items.indexOf(e)!=d){this.move(b,d)}}},onColumnAdd:function(a){this.doColumnAdd(this.columns,a.getEditor().id,a);if(!a.isGroupHeader){this.setField(a)}},doColumnAdd:function(e,a,b){var c=this,g,d;if(!b.isGroupHeader){g=c.editingPlugin.grid.headerCt.getHeaderIndex(b);d=b.getEditor({xtype:"displayfield"});c.insert(g,d)}},onColumnRemove:function(a){this.doColumnRemove(this.columns,a.getEditor().id,a);this.columns.remove(a)},doColumnRemove:function(e,a,b){var c=this,d;if(!b.isGroupHeader){d=b.getEditor();c.remove(d,false)}},onColumnReplace:function(d,a,c,b){this.onColumnRemove(d,a,b)},clearFields:function(){var b=this.columns,a;for(a in b){if(b.hasOwnProperty(a)){b.removeAtKey(a)}}},getFloatingButtons:function(){var a=this;if(!a.floatingButtons){a.floatingButtons=new Ext.grid.RowEditorButtons({rowEditor:a,renderTo:a.el})}return a.floatingButtons},repositionIfVisible:function(d){var b=this,a=b.view;if(d&&(d==b||!d.el.isAncestor(a.el))){return}if(b.isVisible()&&a.isVisible(true)){b.reposition()}},getRefOwner:function(){return this.editingPlugin.grid},reposition:function(r,m){var s=this,d=s.context,g=d&&Ext.get(d.row),p=s.getFloatingButtons(),q=p.el,b=s.editingPlugin.grid,h=b.lockable?b.normalGrid.view.el:b.view.el,o=b.headerCt.getFullWidth(),t=b.getWidth(),l=Math.min(o,t),n=Ext.fly(b.view.el.dom).getScrollLeft(),i=p.getWidth(),e=(l-i)/2+n,a=s.getLocalX(),j,k=function(){if(!m){if((j=(q.getRegion().bottom-b.el.getRegion().bottom))>0){if(b.lockable){b.normalGrid.view.body.dom.style.marginBottom=b.lockedGrid.view.body.dom.style.marginBottom=q.getHeight()+"px"}s.ignoreScroll=true;h.dom.scrollTop+=j;if(b.lockable){s.setLocalY(s.getLocalY()-j)}}}if(r&&r.callback){r.callback.call(r.scope||s)}},c;if(b.lockable){b.normalGrid.view.body.dom.style.marginBottom=b.lockedGrid.view.body.dom.style.marginBottom="";a+=b.normalGrid.view.el.dom.scrollLeft*(s.rtl?1:-1)}if(g&&Ext.isElement(g.dom)){if(!m){g.scrollIntoView(h,false)}s.setLocalX(a);if(r){c={to:{y:g.getXY()[1]-s.body.getBorderPadding().beforeY},duration:r.duration||125,listeners:{afteranimate:function(){s.setButtonPosition(q,e);k()}}};s.animate(c)}else{s.setLocalY((b.lockable?g.getOffsetsTo(b.body)[1]:g.dom.offsetTop)-s.body.getBorderPadding().beforeY);s.setButtonPosition(q,e);k()}}s.correctWidth()},correctWidth:function(){var a=this,b;if(a.rendered&&a.isVisible()&&a.el.dom.parentNode){b=a.editingPlugin.grid.headerCt.getFullWidth();if(a.getWidth()!=b){a.setWidth(b)}}},getLocalX:function(){return 0},setButtonPosition:function(a,b){a.setLocalXY(b,this.el.dom.offsetHeight-1)},getEditor:function(a){var b=this;if(Ext.isNumber(a)){return b.query(">[isFormField]")[a]}else{if(a.isHeader&&!a.isGroupHeader){return a.getEditor()}}},removeField:function(b){var a=this;b=a.getEditor(b);a.mun(b,"validitychange",a.onValidityChange,a);a.columns.removeAtKey(b.id);Ext.destroy(b)},setField:function(c,a){var e=this,b,d,g;if(Ext.isArray(c)){d=c.length;for(b=0;bdisplayfield");b=g.length;for(c=0;cg&&a":"",g=[],a=d.query(">[isFormField]"),c=a.length,b;for(b=0;b'+g.join("")+""},createListItem:function(a){return"
  • "+a+"
  • "},beforeDestroy:function(){Ext.destroy(this.floatingButtons,this.tooltip);this.callParent()}});Ext.define("Ext.grid.plugin.HeaderResizer",{extend:Ext.AbstractPlugin,alias:"plugin.gridheaderresizer",disabled:false,config:{dynamic:false},colHeaderCls:Ext.baseCSSPrefix+"column-header",minColWidth:40,maxColWidth:1000,wResizeCursor:"col-resize",eResizeCursor:"col-resize",init:function(a){this.headerCt=a;a.on("render",this.afterHeaderRender,this,{single:true})},destroy:function(){if(this.tracker){this.tracker.destroy()}},afterHeaderRender:function(){var b=this.headerCt,a=b.el;b.mon(a,"mousemove",this.onHeaderCtMouseMove,this);this.tracker=new Ext.dd.DragTracker({disabled:this.disabled,onBeforeStart:Ext.Function.bind(this.onBeforeStart,this),onStart:Ext.Function.bind(this.onStart,this),onDrag:Ext.Function.bind(this.onDrag,this),onEnd:Ext.Function.bind(this.onEnd,this),tolerance:3,autoStart:300,el:a})},onHeaderCtMouseMove:function(b,k){var d=this,a,i,j,g,c,h;if(d.headerCt.dragging){if(d.activeHd){d.activeHd.el.dom.style.cursor="";delete d.activeHd}}else{i=b.getTarget("."+d.colHeaderCls,3,true);if(i){j=Ext.getCmp(i.id);if(j.isOnLeftEdge(b)){g=j.previousNode("gridcolumn:not([hidden]):not([isGroupHeader])");if(g){h=d.headerCt.up("tablepanel");c=g.up("tablepanel");if(!((c===h)||((h.ownerCt.isXType("tablepanel"))&&h.ownerCt.view.lockedGrid===c))){g=null}}}else{if(j.isOnRightEdge(b)){g=j}else{g=null}}if(g){if(g.isGroupHeader){a=g.getGridColumns();g=a[a.length-1]}if(g&&!(g.fixed||(g.resizable===false)||d.disabled)){d.activeHd=g;j.el.dom.style.cursor=d.eResizeCursor;if(j.triggerEl){j.triggerEl.dom.style.cursor=d.eResizeCursor}}}else{j.el.dom.style.cursor="";if(j.triggerEl){j.triggerEl.dom.style.cursor=""}d.activeHd=null}}}},onBeforeStart:function(a){this.dragHd=this.activeHd;if(!!this.dragHd&&!this.headerCt.dragging){this.tracker.constrainTo=this.getConstrainRegion();return true}else{this.headerCt.dragging=false;return false}},getConstrainRegion:function(){var c=this,a=c.dragHd.el,b;if(c.headerCt.forceFit){b=c.dragHd.nextNode("gridcolumn:not([hidden]):not([isGroupHeader])");if(!c.headerInSameGrid(b)){b=null}}return c.adjustConstrainRegion(Ext.util.Region.getRegion(a),0,c.headerCt.forceFit?(b?b.getWidth()-c.minColWidth:0):c.maxColWidth-a.getWidth(),0,c.minColWidth)},onStart:function(h){var i=this,g=i.dragHd,b=g.el.getWidth(),d=g.getOwnerHeaderCt(),l,k,m,c,a,j,n;i.headerCt.dragging=true;i.origWidth=b;if(!i.dynamic){m=c=d.up("tablepanel");if(m.ownerLockable){c=m.ownerLockable}l=i.getLeftMarkerX(c);a=c.getLhsMarker();j=c.getRhsMarker();n=m.body.getHeight()+d.getHeight();k=d.getOffsetsTo(c)[1];a.setLocalY(k);j.setLocalY(k);a.setHeight(n);j.setHeight(n);i.setMarkerX(a,l);i.setMarkerX(j,l+b)}},onDrag:function(b){var a=this,c;if(a.dynamic){a.doResize()}else{c=this.headerCt.up("tablepanel");if(c.ownerLockable){c=c.ownerLockable}this.setMarkerX(this.getMovingMarker(c),this.calculateDragX(c))}},getMovingMarker:function(a){return a.getRhsMarker()},onEnd:function(a){this.headerCt.dragging=false;if(this.dragHd){if(!this.dynamic){var b=this.headerCt.up("tablepanel");if(b.ownerLockable){b=b.ownerLockable}this.setMarkerX(b.getLhsMarker(),-9999);this.setMarkerX(b.getRhsMarker(),-9999)}this.doResize()}},doResize:function(){var c=this,b=c.dragHd,a,d;if(b){d=c.tracker.getOffset("point");if(b.flex){delete b.flex}Ext.suspendLayouts();c.adjustColumnWidth(d[0]);if(c.headerCt.forceFit){a=b.nextNode("gridcolumn:not([hidden]):not([isGroupHeader])");if(!c.headerInSameGrid(a)){a=null}if(a){delete a.flex;a.setWidth(a.getWidth()-d[0])}}Ext.resumeLayouts(true)}},headerInSameGrid:function(b){var a=this.dragHd.up("tablepanel");return !!b.up(a)},disable:function(){this.disabled=true;if(this.tracker){this.tracker.disable()}},enable:function(){this.disabled=false;if(this.tracker){this.tracker.enable()}},calculateDragX:function(a){return this.tracker.getXY("point")[0]-a.getX()-a.el.getBorderWidth("l")},getLeftMarkerX:function(a){return this.dragHd.getX()-a.getX()-a.el.getBorderWidth("l")-1},setMarkerX:function(b,a){b.setLocalX(a)},adjustConstrainRegion:function(g,d,e,a,c){return g.adjust(d,e,a,c)},adjustColumnWidth:function(a){this.dragHd.setWidth(this.origWidth+a)}});Ext.define("Ext.grid.header.DragZone",{extend:Ext.dd.DragZone,colHeaderCls:Ext.baseCSSPrefix+"column-header",maxProxyWidth:120,constructor:function(a){this.headerCt=a;this.ddGroup=this.getDDGroup();this.callParent([a.el]);this.proxy.el.addCls(Ext.baseCSSPrefix+"grid-col-dd")},getDDGroup:function(){return"header-dd-zone-"+this.headerCt.up("[scrollerOwner]").id},getDragData:function(b){var d=b.getTarget("."+this.colHeaderCls),a,c;if(d){a=Ext.getCmp(d.id);if(!this.headerCt.dragging&&a.draggable&&!(a.isOnLeftEdge(b)||a.isOnRightEdge(b))){c=document.createElement("div");c.innerHTML=Ext.getCmp(d.id).text;return{ddel:c,header:a}}}return false},onBeforeDrag:function(){return !(this.headerCt.dragging||this.disabled)},onInitDrag:function(){this.headerCt.dragging=true;this.callParent(arguments)},onDragDrop:function(){this.headerCt.dragging=false;this.callParent(arguments)},afterRepair:function(){this.callParent();this.headerCt.dragging=false},getRepairXY:function(){return this.dragData.header.el.getXY()},disable:function(){this.disabled=true},enable:function(){this.disabled=false}});Ext.define("Ext.grid.header.DropZone",{extend:Ext.dd.DropZone,colHeaderCls:Ext.baseCSSPrefix+"column-header",proxyOffsets:[-4,-9],constructor:function(a){this.headerCt=a;this.ddGroup=this.getDDGroup();this.callParent([a.el])},getDDGroup:function(){return"header-dd-zone-"+this.headerCt.up("[scrollerOwner]").id},getTargetFromEvent:function(a){return a.getTarget("."+this.colHeaderCls)},getTopIndicator:function(){if(!this.topIndicator){this.self.prototype.topIndicator=Ext.DomHelper.append(Ext.getBody(),{cls:"col-move-top",html:" "},true);this.self.prototype.indicatorXOffset=Math.floor((this.topIndicator.dom.offsetWidth+1)/2)}return this.topIndicator},getBottomIndicator:function(){if(!this.bottomIndicator){this.self.prototype.bottomIndicator=Ext.DomHelper.append(Ext.getBody(),{cls:"col-move-bottom",html:" "},true)}return this.bottomIndicator},getLocation:function(d,b){var a=d.getXY()[0],c=Ext.fly(b).getRegion(),g;if((c.right-a)<=(c.right-c.left)/2){g="after"}else{g="before"}return{pos:g,header:Ext.getCmp(b.id),node:b}},positionIndicator:function(B,r,x){var A=this,s=B.header,g=A.getLocation(x,r),l=g.header,d=g.pos,q,k,c,w,n,u,v,a,b,m,o,z,y,p,j,t,h;if(l===A.lastTargetHeader&&d===A.lastDropPos){return}q=s.up("headercontainer:not(gridcolumn)");k=l.up("headercontainer:not(gridcolumn)");c=s.nextSibling("gridcolumn:not([hidden])");w=s.previousSibling("gridcolumn:not([hidden])");A.lastTargetHeader=l;A.lastDropPos=d;if(!l.draggable&&d==="before"&&l.getIndex()===0){return false}B.isLock=B.isUnlock=false;if(q!==k&&q.lockableInjected&&k.lockableInjected&&k.lockedCt){B.isLock=true}else{if(q!==k&&q.lockableInjected&&k.lockableInjected&&q.lockedCt){B.isUnlock=true}}if((B.isUnlock&&s.lockable===false)||(B.isLock&&!s.isLockable())){return false}B.dropLocation=g;if((s!==l)&&((d==="before"&&c!==l)||(d==="after"&&w!==l))&&!l.isDescendantOf(s)){p=Ext.dd.DragDropManager.getRelated(A);j=p.length;t=0;for(;tl){o-=1}}Ext.suspendLayouts();if(j){a.move(l,o)}else{s.remove(p,false);a.insert(o,p)}if(a.isGroupHeader){if(!j){p.savedFlex=p.flex;delete p.flex;p.width=d}}else{if(p.savedFlex){p.flex=p.savedFlex;delete p.width}}i.purgeCache();Ext.resumeLayouts(true);i.onHeaderMoved(p,m,b,r)}}}}});Ext.define("Ext.grid.plugin.HeaderReorderer",{extend:Ext.AbstractPlugin,alias:"plugin.gridheaderreorderer",init:function(a){this.headerCt=a;a.on({render:this.onHeaderCtRender,single:true,scope:this})},destroy:function(){Ext.destroy(this.dragZone,this.dropZone)},onHeaderCtRender:function(){var a=this;a.dragZone=new Ext.grid.header.DragZone(a.headerCt);a.dropZone=new Ext.grid.header.DropZone(a.headerCt);if(a.disabled){a.dragZone.disable()}},enable:function(){this.disabled=false;if(this.dragZone){this.dragZone.enable()}},disable:function(){this.disabled=true;if(this.dragZone){this.dragZone.disable()}}});Ext.define("Ext.grid.header.Container",{extend:Ext.container.Container,border:true,alias:"widget.headercontainer",baseCls:Ext.baseCSSPrefix+"grid-header-ct",dock:"top",weight:100,defaultType:"gridcolumn",detachOnRemove:false,defaultWidth:100,sortAscText:"Sort Ascending",sortDescText:"Sort Descending",sortClearText:"Clear Sort",columnsText:"Columns",headerOpenCls:Ext.baseCSSPrefix+"column-header-open",menuSortAscCls:Ext.baseCSSPrefix+"hmenu-sort-asc",menuSortDescCls:Ext.baseCSSPrefix+"hmenu-sort-desc",menuColsIcon:Ext.baseCSSPrefix+"cols-icon",triStateSort:false,ddLock:false,dragging:false,sortable:true,enableColumnHide:true,initComponent:function(){var a=this;a.headerCounter=0;a.plugins=a.plugins||[];if(!a.isHeader){if(a.enableColumnResize){a.resizer=new Ext.grid.plugin.HeaderResizer();a.plugins.push(a.resizer)}if(a.enableColumnMove){a.reorderer=new Ext.grid.plugin.HeaderReorderer();a.plugins.push(a.reorderer)}}if(a.isHeader&&!a.items){a.layout=a.layout||"container"}else{a.layout=Ext.apply({type:"gridcolumn",align:"stretchmax"},a.initialConfig.layout)}a.defaults=a.defaults||{};Ext.applyIf(a.defaults,{triStateSort:a.triStateSort,sortable:a.sortable});a.menuTask=new Ext.util.DelayedTask(a.updateMenuDisabledState,a);a.callParent();a.addEvents("columnresize","headerclick","headercontextmenu","headertriggerclick","columnmove","columnhide","columnshow","columnschanged","sortchange","menucreate")},isLayoutRoot:function(){if(this.hiddenHeaders){return false}return this.callParent()},getOwnerHeaderCt:function(){var a=this;return a.isRootHeader?a:a.up("[isRootHeader]")},onDestroy:function(){var a=this;if(a.menu){a.menu.un("hide",a.onMenuHide,a)}a.menuTask.cancel();Ext.destroy(a.resizer,a.reorderer);a.callParent()},applyColumnsState:function(e){if(!e||!e.length){return}var m=this,k=m.items.items,j=k.length,g=0,b=e.length,l,d,a,h;for(l=0;lgridcolumn[hideable]"),h=a.length,d;for(;b{text}
    {%this.renderContainer(out,values)%}',dataIndex:null,text:" ",menuText:null,emptyCellText:" ",sortable:true,resizable:true,hideable:true,menuDisabled:false,renderer:false,editRenderer:false,align:"left",draggable:true,tooltipType:"qtip",initDraggable:Ext.emptyFn,tdCls:"",isHeader:true,ascSortCls:Ext.baseCSSPrefix+"column-header-sort-ASC",descSortCls:Ext.baseCSSPrefix+"column-header-sort-DESC",componentLayout:"columncomponent",groupSubHeaderCls:Ext.baseCSSPrefix+"group-sub-header",groupHeaderCls:Ext.baseCSSPrefix+"group-header",detachOnRemove:true,initResizable:Ext.emptyFn,initComponent:function(){var b=this,c,a;if(Ext.isDefined(b.header)){b.text=b.header;delete b.header}if(!b.triStateSort){b.possibleSortStates.length=2}if(Ext.isDefined(b.columns)){b.isGroupHeader=true;b.items=b.columns;delete b.columns;delete b.flex;delete b.width;b.cls=(b.cls||"")+" "+b.groupHeaderCls;b.sortable=false;b.resizable=false;b.align="center"}else{b.isContainer=false;if(b.flex){b.minWidth=b.minWidth||Ext.grid.plugin.HeaderResizer.prototype.minColWidth}}b.addCls(Ext.baseCSSPrefix+"column-header-align-"+b.align);c=b.renderer;if(c){if(typeof c=="string"){b.renderer=Ext.util.Format[c]}b.hasCustomRenderer=true}else{if(b.defaultRenderer){b.scope=b;b.renderer=b.defaultRenderer}}b.callParent(arguments);a={element:"el",click:b.onElClick,contextmenu:b.onElContextMenu,scope:b};if(b.resizable){a.dblclick=b.onElDblClick}b.on(a);b.on({element:"titleEl",mouseenter:b.onTitleMouseOver,mouseleave:b.onTitleMouseOut,scope:b})},onAdd:function(a){a.isSubHeader=true;if(this.hidden){a.hide()}a.addCls(this.groupSubHeaderCls);this.callParent(arguments)},onRemove:function(a){a.isSubHeader=false;a.removeCls(this.groupSubHeaderCls);this.callParent(arguments)},initRenderData:function(){var b=this,d="",c=b.tooltip,a=b.tooltipType=="qtip"?"data-qtip":"title";if(!Ext.isEmpty(c)){d=a+'="'+c+'" '}return Ext.applyIf(b.callParent(arguments),{text:b.text,menuDisabled:b.menuDisabled,tipMarkup:d})},applyColumnState:function(b){var a=this,c=Ext.isDefined;a.applyColumnsState(b.columns);if(c(b.hidden)){a.hidden=b.hidden}if(c(b.locked)){a.locked=b.locked}if(c(b.sortable)){a.sortable=b.sortable}if(c(b.width)){delete a.flex;a.width=b.width}else{if(c(b.flex)){delete a.width;a.flex=b.flex}}},getColumnState:function(){var e=this,b=e.items.items,a=b?b.length:0,d,c=[],g={id:e.getStateId()};e.savePropsToState(["hidden","sortable","locked","flex","width"],g);if(e.isGroupHeader){for(d=0;d:not([hidden]):not([menuDisabled])");c=b.length;if(Ext.Array.contains(b,a.hideCandidate)){c--}if(c){return false}a.hideCandidate=this},isLockable:function(){var a={result:this.lockable!==false};if(a.result){this.ownerCt.bubble(this.hasMultipleVisibleChildren,null,[a])}return a.result},hasMultipleVisibleChildren:function(a){if(!this.isXType("headercontainer")){a.result=false;return false}if(this.query(">:not([hidden])").length>1){return false}},hide:function(c){var j=this,e=j.getOwnerHeaderCt(),b=j.ownerCt,a,k,h,g,d;if(!e){j.callParent();return j}if(e.forceFit){j.visibleSiblingCount=e.getVisibleGridColumns().length-1;if(j.flex){j.savedWidth=j.getWidth();delete j.flex}}a=b.isGroupHeader;if(a&&!c){h=b.query(">:not([hidden])");if(h.length===1&&h[0]==j){j.ownerCt.hide();return}}Ext.suspendLayouts();if(j.isGroupHeader){h=j.items.items;for(d=0,g=h.length;dk.view.el.dom.clientHeight?Ext.getScrollbarSize().width:0);if(k.forceFit){m=Ext.ComponentQuery.query(":not([flex])",k.getVisibleGridColumns());if(m.length){n.width=n.savedWidth||n.width||Ext.grid.header.Container.prototype.defaultWidth}else{m=k.getVisibleGridColumns();l=m.length;c=n.visibleSiblingCount;b=(n.savedWidth||n.width||Ext.grid.header.Container.prototype.defaultWidth);b=Math.min(Math.max(b*(c/l),Ext.grid.header.Container.prototype.defaultWidth),a-(l*Ext.grid.header.Container.prototype.defaultWidth));delete n.width;n.flex=b;a-=b;e=0;for(j=0;j
    ',indicatorCls:Ext.baseCSSPrefix+"grid-drop-indicator",constructor:function(a){var b=this;Ext.apply(b,a);if(!b.ddGroup){b.ddGroup="view-dd-zone-"+b.view.id}b.callParent([b.view.el])},fireViewEvent:function(){var b=this,a;b.lock();a=b.view.fireEvent.apply(b.view,arguments);b.unlock();return a},getTargetFromEvent:function(k){var j=k.getTarget(this.view.getItemSelector()),d,c,b,g,a,h;if(!j){d=k.getPageY();for(g=0,c=this.view.getNodes(),a=c.length;g=(b.bottom-b.top)/2){d="before"}else{d="after"}return d},containsRecordAtOffset:function(d,b,g){if(!b){return false}var a=this.view,c=a.indexOf(b),e=a.getNode(c+g,true),h=e?a.getRecord(e):null;return h&&Ext.Array.contains(d,h)},positionIndicator:function(b,c,d){var g=this,i=g.view,h=g.getPosition(d,b),k=i.getRecord(b),a=c.records,j;if(!Ext.Array.contains(a,k)&&(h=="before"&&!g.containsRecordAtOffset(a,k,-1)||h=="after"&&!g.containsRecordAtOffset(a,k,1))){g.valid=true;if(g.overRecord!=k||g.currentPosition!=h){j=Ext.fly(b).getY()-i.el.getY()-1;if(h=="after"){j+=Ext.fly(b).getHeight()}g.getIndicator().setWidth(Ext.fly(i.el).getWidth()).showAt(0,j);g.overRecord=k;g.currentPosition=h}}else{g.invalidateDrop()}},invalidateDrop:function(){if(this.valid){this.valid=false;this.getIndicator().hide()}},onNodeOver:function(c,a,g,d){var b=this;if(!Ext.Array.contains(d.records,b.view.getRecord(c))){b.positionIndicator(c,d,g)}return b.valid?b.dropAllowed:b.dropNotAllowed},notifyOut:function(c,a,g,d){var b=this;b.callParent(arguments);b.overRecord=b.currentPosition=null;b.valid=false;if(b.indicator){b.indicator.hide()}},onContainerOver:function(a,h,g){var d=this,b=d.view,c=b.dataSource.getCount();if(c){d.positionIndicator(b.all.last(),g,h)}else{d.overRecord=d.currentPosition=null;d.getIndicator().setWidth(Ext.fly(b.el).getWidth()).showAt(0,0);d.valid=true}return d.dropAllowed},onContainerDrop:function(a,c,b){return this.onNodeDrop(a,null,c,b)},onNodeDrop:function(i,a,h,g){var d=this,c=false,b={wait:false,processDrop:function(){d.invalidateDrop();d.handleNodeDrop(g,d.overRecord,d.currentPosition);c=true;d.fireViewEvent("drop",i,g,d.overRecord,d.currentPosition)},cancelDrop:function(){d.invalidateDrop();c=true}},j=false;if(d.valid){j=d.fireViewEvent("beforedrop",i,g,d.overRecord,d.currentPosition,b);if(b.wait){return}if(j!==false){if(!c){b.processDrop()}}}return j},destroy:function(){Ext.destroy(this.indicator);delete this.indicator;this.callParent()}});Ext.define("Ext.grid.ViewDropZone",{extend:Ext.view.DropZone,indicatorHtml:'
    ',indicatorCls:Ext.baseCSSPrefix+"grid-drop-indicator",handleNodeDrop:function(b,d,e){var j=this.view,k=j.getStore(),h,a,c,g;if(b.copy){a=b.records;b.records=[];for(c=0,g=a.length;cActions",sortable:false,constructor:function(d){var g=this,b=Ext.apply({},d),c=b.items||g.items||[g],h,e,a;g.origRenderer=b.renderer||g.renderer;g.origScope=b.scope||g.scope;g.renderer=g.scope=b.renderer=b.scope=null;b.items=null;g.callParent([b]);g.items=c;for(e=0,a=c.length;e"}return j},enableAction:function(b,a){var c=this;if(!b){b=0}else{if(!Ext.isNumber(b)){b=Ext.Array.indexOf(c.items,b)}}c.items[b].disabled=false;c.up("tablepanel").el.select("."+Ext.baseCSSPrefix+"action-col-"+b).removeCls(c.disabledCls);if(!a){c.fireEvent("enable",c)}},disableAction:function(b,a){var c=this;if(!b){b=0}else{if(!Ext.isNumber(b)){b=Ext.Array.indexOf(c.items,b)}}c.items[b].disabled=true;c.up("tablepanel").el.select("."+Ext.baseCSSPrefix+"action-col-"+b).addCls(c.disabledCls);if(!a){c.fireEvent("disable",c)}},destroy:function(){delete this.items;delete this.renderer;return this.callParent(arguments)},processEvent:function(j,m,o,b,k,h,d,q){var i=this,g=h.getTarget(),c,p,l,n=j=="keydown"&&h.getKey(),a;if(n&&!Ext.fly(g).findParent(m.getCellSelector())){g=Ext.fly(o).down("."+Ext.baseCSSPrefix+"action-col-icon",true)}if(g&&(c=g.className.match(i.actionIdRe))){p=i.items[parseInt(c[1],10)];a=p.disabled||(p.isDisabled?p.isDisabled.call(p.scope||i.origScope||i,m,b,k,p,d):false);if(p&&!a){if(j=="click"||(n==h.ENTER||n==h.SPACE)){l=p.handler||i.handler;if(l){l.call(p.scope||i.origScope||i,m,b,k,p,h,d,q)}}else{if(j=="mousedown"&&p.stopSelection!==false){return false}}}}return i.callParent(arguments)},cascade:function(b,a){b.call(a||this,this)},getRefItems:function(){return[]}});Ext.define("Ext.grid.column.Boolean",{extend:Ext.grid.column.Column,alias:["widget.booleancolumn"],alternateClassName:"Ext.grid.BooleanColumn",trueText:"true",falseText:"false",undefinedText:" ",defaultRenderer:function(a){if(a===undefined){return this.undefinedText}if(!a||a==="false"){return this.falseText}return this.trueText}});Ext.define("Ext.grid.column.CheckColumn",{extend:Ext.grid.column.Column,alternateClassName:"Ext.ux.CheckColumn",alias:"widget.checkcolumn",align:"center",stopSelection:true,tdCls:Ext.baseCSSPrefix+"grid-cell-checkcolumn",constructor:function(){this.addEvents("beforecheckchange","checkchange");this.scope=this;this.callParent(arguments)},processEvent:function(h,j,n,b,i,d,c,o){var g=this,m=h==="keydown"&&d.getKey(),a=h=="mousedown";if(!g.disabled&&(a||(m==d.ENTER||m==d.SPACE))){var k=g.dataIndex,l=!c.get(k);if(g.fireEvent("beforecheckchange",g,b,l)!==false){c.set(k,l);g.fireEvent("checkchange",g,b,l);if(a){d.stopEvent()}if(!g.stopSelection){j.selModel.selectByPosition({row:b,column:i})}return false}else{return !g.stopSelection}}else{return g.callParent(arguments)}},onEnable:function(a){var b=this;b.callParent(arguments);b.up("tablepanel").el.select("."+Ext.baseCSSPrefix+"grid-cell-"+b.id).removeCls(b.disabledCls);if(!a){b.fireEvent("enable",b)}},onDisable:function(a){var b=this;b.callParent(arguments);b.up("tablepanel").el.select("."+Ext.baseCSSPrefix+"grid-cell-"+b.id).addCls(b.disabledCls);if(!a){b.fireEvent("disable",b)}},renderer:function(b,c){var d=Ext.baseCSSPrefix,a=[d+"grid-checkcolumn"];if(this.disabled){c.tdCls+=" "+this.disabledCls}if(b){a.push(d+"grid-checkcolumn-checked")}return''}});Ext.define("Ext.grid.column.Date",{extend:Ext.grid.column.Column,alias:["widget.datecolumn"],alternateClassName:"Ext.grid.DateColumn",initComponent:function(){if(!this.format){this.format=Ext.Date.defaultFormat}this.callParent(arguments)},defaultRenderer:function(a){return Ext.util.Format.date(a,this.format)}});Ext.define("Ext.grid.column.Number",{extend:Ext.grid.column.Column,alias:["widget.numbercolumn"],alternateClassName:"Ext.grid.NumberColumn",format:"0,000.00",defaultRenderer:function(a){return Ext.util.Format.number(a,this.format)}});Ext.define("Ext.grid.column.Template",{extend:Ext.grid.column.Column,alias:["widget.templatecolumn"],alternateClassName:"Ext.grid.TemplateColumn",initComponent:function(){var a=this;a.tpl=(!Ext.isPrimitive(a.tpl)&&a.tpl.compile)?a.tpl:new Ext.XTemplate(a.tpl);a.hasCustomRenderer=true;a.callParent(arguments)},defaultRenderer:function(c,d,a){var b=Ext.apply({},a.data,a.getAssociatedData());return this.tpl.apply(b)}});Ext.define("Ext.grid.feature.Feature",{extend:Ext.util.Observable,alias:"feature.feature",wrapsItem:false,isFeature:true,disabled:false,hasFeatureEvent:true,eventPrefix:null,eventSelector:null,view:null,grid:null,constructor:function(a){this.initialConfig=a;this.callParent(arguments)},clone:function(){return new this.self(this.initialConfig)},init:Ext.emptyFn,destroy:function(){this.clearListeners()},getFireEventArgs:function(b,a,c,d){return[b,a,c,d]},vetoEvent:Ext.emptyFn,enable:function(){this.disabled=false},disable:function(){this.disabled=true}});Ext.define("Ext.grid.feature.AbstractSummary",{extend:Ext.grid.feature.Feature,alias:"feature.abstractsummary",summaryRowCls:Ext.baseCSSPrefix+"grid-row-summary",summaryTableCls:Ext.baseCSSPrefix+"table-plain "+Ext.baseCSSPrefix+"grid-table",summaryRowSelector:"."+Ext.baseCSSPrefix+"grid-row-summary",summaryRowTpl:{before:function(a,b){if(a.record.isSummary){this.summaryFeature.outputSummaryRecord(a.record,a,b);return false}},priority:1000},showSummaryRow:true,init:function(){var a=this;a.view.summaryFeature=a;a.rowTpl=a.view.self.prototype.rowTpl;a.view.addRowTpl(a.summaryRowTpl).summaryFeature=a},toggleSummaryRow:function(a){this.showSummaryRow=!!a},outputSummaryRecord:function(g,l,d){var h=l.view,a=h.rowValues,c=l.columns||h.headerCt.getGridColumns(),k=c.length,e,b,j={view:h,record:g,rowStyle:"",rowClasses:[this.summaryRowCls],itemClasses:[],recordIndex:-1,rowId:h.getRowId(g),columns:c,visibleColumns:l.visibleColumns||h.headerCt.getVisibleGridColumns()};for(e=0;e','','','',"{%",'var groupTitleStyle = (!values.view.lockingPartner || (values.view.ownerCt === values.view.ownerCt.ownerLockable.lockedGrid) || (values.view.lockingPartner.headerCt.getVisibleGridColumns().length === 0)) ? "" : "visibility:hidden";',"%}",'
    ','
    ','{[values.groupHeaderTpl.apply(values.groupInfo, parent) || " "]}',"
    ","
    ","
    ",'','',"{[values.view.renderColumnSizer(out)]}",'',"{%","values.itemClasses.length = 0;","this.nextTpl.applyOut(values, out, parent);","%}","",'',"{%me.outputSummaryRecord(values.summaryRecord, values, out);%}","","
    ","
    ","","","{%","if (values.isCollapsedGroup) {","me.skippedRows += me.getRecordGroup(values.record).children.length - 1;","}","%}","","{%this.nextTpl.applyOut(values, out, parent);%}","",{priority:200,syncRowHeights:function(d,j){d=Ext.fly(d,"syncDest");j=Ext.fly(j,"sycSrc");var b=this.owner,e=d.down(b.eventSelector,true),g,h=d.down(b.summaryRowSelector,true),c,a,i;if(e&&(g=j.down(b.eventSelector,true))){e.style.height=g.style.height="";if((a=e.offsetHeight)>(i=g.offsetHeight)){Ext.fly(g).setHeight(a)}else{if(i>a){Ext.fly(e).setHeight(i)}}}if(h&&(c=j.down(b.summaryRowSelector,true))){h.style.height=c.style.height="";if((a=h.offsetHeight)>(i=c.offsetHeight)){Ext.fly(c).setHeight(a)}else{if(i>a){Ext.fly(h).setHeight(i)}}}},syncContent:function(b,h){b=Ext.fly(b,"syncDest");h=Ext.fly(h,"sycSrc");var a=this.owner,d=b.down(a.eventSelector,true),c=h.down(a.eventSelector,true),g=b.down(a.summaryRowSelector,true),e=h.down(a.summaryRowSelector,true);if(d&&c){Ext.fly(d).syncContent(c)}if(g&&e){Ext.fly(g).syncContent(e)}}}],constructor:function(){this.groupCache={};this.callParent(arguments)},init:function(b){var c=this,a=c.view;c.mixins.summary.init.call(c);c.callParent(arguments);a.headerCt.on({columnhide:c.onColumnHideShow,columnshow:c.onColumnHideShow,columnmove:c.onColumnMove,scope:c});a.addTableTpl(c.tableTpl).groupingFeature=c;a.addRowTpl(Ext.XTemplate.getTpl(c,"groupTpl")).groupingFeature=c;a.preserveScrollOnRefresh=true;if(a.store.buffered){c.collapsible=false}else{c.dataSource=a.dataSource=new Ext.grid.feature.GroupStore(c,a.store);c.startCollapsed=false}c.grid.on({reconfigure:c.onReconfigure});a.on({afterrender:c.afterViewRender,scope:c,single:true})},vetoEvent:function(a,c,d,b){if(b.type!=="mouseover"&&b.type!=="mouseout"&&b.type!=="mouseenter"&&b.type!=="mouseleave"&&b.getTarget(this.eventSelector)){return false}},enable:function(){var c=this,a=c.view,b=a.store,d;c.lastGroupField=c.getGroupField();if(c.lastGroupIndex){c.block();b.group(c.lastGroupIndex);c.unblock()}c.callParent();d=c.view.headerCt.getMenu().down("#groupToggleMenuItem");if(d){d.setChecked(true,true)}c.refreshIf()},disable:function(){var d=this,a=d.view,b=a.store,e,c;c=b.groupers.first();if(c){d.lastGroupIndex=c.property;d.block();b.clearGrouping();d.unblock()}d.callParent();e=d.view.headerCt.getMenu().down("#groupToggleMenuItem");if(e){e.setChecked(false,true)}d.refreshIf()},refreshIf:function(){var b=this.grid.ownerCt,a=this.view;if(!a.store.remoteGroup&&!this.blockRefresh){if(b&&b.lockable){b.view.refresh()}else{a.refresh()}}},afterViewRender:function(){var b=this,a=b.view;a.on({scope:b,groupclick:b.onGroupClick});if(b.enableGroupingMenu){b.injectGroupingMenu()}b.pruneGroupedHeader();b.lastGroupField=b.getGroupField();b.block();b.onGroupChange();b.unblock()},injectGroupingMenu:function(){var a=this,b=a.view.headerCt;b.showMenuBy=a.showMenuBy;b.getMenuItems=a.getMenuItems()},onColumnHideShow:function(c,g){var k=this.view,b=k.headerCt,a=b.getMenu(),e=a.down("#groupMenuItem"),l=b.getGridColumns().length,j,h,d;if(e){if(b.getVisibleGridColumns().length>1){e.enable()}else{e.disable()}}if(k.rendered){j=k.el.query("."+this.ctCls);for(d=0,h=j.length;d','','
    {rowBody}
    ',"","",{priority:100,syncRowHeights:function(g,c){var a=this.owner,b=Ext.fly(g).down(a.eventSelector,true),h,d,e;if(b&&(h=Ext.fly(c).down(a.eventSelector,true))){if((d=b.offsetHeight)>(e=h.offsetHeight)){Ext.fly(h).setHeight(d)}else{if(e>d){Ext.fly(b).setHeight(e)}}}},syncContent:function(b,e){var a=this.owner,c=Ext.fly(b).down(a.eventSelector,true),d;if(c&&(d=Ext.fly(e).down(a.eventSelector,true))){Ext.fly(c).syncContent(d)}}}],init:function(b){var c=this,a=c.view;a.rowBodyFeature=c;if(!a.findFeature("rowwrap")){b.mon(a,{element:"el",mousedown:c.onMouseDown,scope:c});c.mon(b.getStore(),"remove",c.onStoreRemove,c)}a.headerCt.on({columnschanged:c.onColumnsChanged,scope:c});a.addTableTpl(c.tableTpl).rowBody=c;a.addRowTpl(Ext.XTemplate.getTpl(this,"extraRowTpl"));c.callParent(arguments)},onStoreRemove:function(b,d,c){var a=this.view,e;if(a.rendered){e=a.getNode(c);if(e){e=Ext.fly(e).next(this.eventSelector);if(e){e.remove()}}}},onMouseDown:function(c){var b=this,a=c.getTarget(b.eventSelector);if(a&&Ext.fly(a=a.previousSibling).is(b.view.getItemSelector())){c.target=a;b.view.handleEvent(c)}},getSelectedRow:function(a,c){var b=a.getNode(c,false);if(b){return Ext.fly(b).down(this.eventSelector)}return null},onColumnsChanged:function(d){var b=this.view.el.query(this.rowBodyTdSelector),e=d.getGridColumns().length,a=b.length,c;for(c=0;c','','',"{[values.view.renderColumnSizer(out)]}","{%","values.itemClasses.length = 0;","this.nextTpl.applyOut(values, out, parent)","%}","
    ","","",{priority:200}],init:function(a){var b=this;b.view.addTableTpl(b.tableTpl);b.view.addRowTpl(Ext.XTemplate.getTpl(b,"wrapTpl"));b.view.headerCt.on({columnhide:b.onColumnHideShow,columnshow:b.onColumnHideShow,scope:b})},onColumnHideShow:function(){var b=this.view,c=b.el.query(this.rowWrapTd),e=b.headerCt.getGridColumns().length,a=c.length,d;for(d=0;d','','',"
    ",""],style:"overflow:hidden",itemId:"summaryBar",cls:[c.dockedSummaryCls,c.dockedSummaryCls+"-"+c.dock],xtype:"component",dock:c.dock,weight:10000000})[0]},afterrender:function(){b.body.addCls(c.panelBodyCls+c.dock);a.mon(a.el,{scroll:c.onViewScroll,scope:c});c.onStoreUpdate()},single:true});b.headerCt.afterComponentLayout=Ext.Function.createSequence(b.headerCt.afterComponentLayout,function(){c.summaryBar.innerCt.setWidth(this.getFullWidth()+Ext.getScrollbarSize().width)})}else{c.view.addFooterFn(c.renderTFoot)}b.on({columnmove:c.onStoreUpdate,scope:c});a.mon(a.store,{update:c.onStoreUpdate,datachanged:c.onStoreUpdate,scope:c})},renderTFoot:function(b,c){var a=b.view,d=a.findFeature("summary");if(d.showSummaryRow){c.push("");d.outputSummaryRecord(d.createSummaryRecord(a),b,c);c.push("")}},vetoEvent:function(a,c,d,b){return !b.getTarget(this.summaryRowSelector)},onViewScroll:function(){this.summaryBar.el.dom.scrollLeft=this.view.el.dom.scrollLeft},createSummaryRecord:function(a){var d=a.headerCt.getVisibleGridColumns(),h={records:a.store.getRange()},g=d.length,c,e,b=this.summaryRecord||(this.summaryRecord=new a.store.model(null,a.id+"-summary-record"));b.beginEdit();for(c=0;c>#normalHeaderCt"},normal:{items:d,itemId:"normalHeaderCt",stretchMaxPartner:"^^>>#lockedHeaderCt"}};this.fireEvent("processcolumns",this,a.lockedHeaders,a.normalHeaders);return a},getColumnWidth:function(e){var b=e.width||0,d,a,c;if(!b&&e.isGroupHeader){d=e.items.items;a=d.length;for(c=0;ca.clientWidth){d=0}b.el.dom.style.borderBottomWidth=d+"px";if(!Ext.isBorderBox){b.el.setHeight(b.lastBox.height)}},onLockedViewMouseWheel:function(i){var d=this,h=-d.scrollDelta,a=h*i.getWheelDeltas().y,b=d.lockedGrid.getView().el.dom,c,g;if(!d.ignoreMousewheel){if(b){c=b.scrollTop!==b.scrollHeight-b.clientHeight;g=b.scrollTop!==0}if((a<0&&g)||(a>0&&c)){i.stopEvent();b.scrollTop+=a;d.normalGrid.getView().el.dom.scrollTop=b.scrollTop;d.onNormalViewScroll()}}},onLockedViewScroll:function(){var e=this,d=e.lockedGrid.getView(),c=e.normalGrid.getView(),h=c.el.dom,g=d.el.dom,a,b;if(h.scrollTop!==g.scrollTop){h.scrollTop=g.scrollTop;if(e.store.buffered){b=d.el.child("table",true);a=c.el.child("table",true);a.style.position="absolute";a.style.top=b.style.top}}},onNormalViewScroll:function(){var e=this,d=e.lockedGrid.getView(),c=e.normalGrid.getView(),h=c.el.dom,g=d.el.dom,a,b;if(h.scrollTop!==g.scrollTop){g.scrollTop=h.scrollTop;if(e.store.buffered){b=d.el.child("table",true);a=c.el.child("table",true);b.style.position="absolute";b.style.top=a.style.top}}},syncRowHeights:function(){var e=this,a,d=e.lockedGrid.getView(),b=e.normalGrid.getView(),g=d.all.slice(),j=b.all.slice(),c=g.length,h;if(j.length===c){for(a=0;a','
    ','',h.join(""),"
    ","
    ",""].join("")},"after");return{record:a,node:e,el:d,expanding:false,collapsing:false,animating:false,animateEl:d.down("div"),targetEl:d.down("tbody")}},getAnimWrap:function(d,a){if(!this.animate){return null}var b=this.animWraps,c=b[d.internalId];if(a!==false){while(!c&&d){d=d.parentNode;if(d){c=b[d.internalId]}}}return c},doAdd:function(c,h){var i=this,a=i.bufferRender(c,h,true),e=c[0],j=e.parentNode,k=i.all,m,d=i.getAnimWrap(j),l,b,g;if(!d||!d.expanding){return i.callParent(arguments)}j=d.record;l=d.targetEl;b=l.dom.childNodes;g=b.length;m=h-i.indexInStore(j)-1;if(!g||m>=g){l.appendChild(a)}else{Ext.fly(b[m]).insertSibling(a,"before",true)}k.insert(h,a);if(d.isAnimating){i.onExpand(j)}},beginBulkUpdate:function(){if(this.rendered){Ext.suspendLayouts()}},endBulkUpdate:function(){if(this.rendered){this.refreshSize();Ext.resumeLayouts(true)}},onRemove:function(g,a,b){var d=this,e,c;if(d.viewReady){e=d.store.getCount()===0;if(e){d.refresh()}else{for(c=b.length-1;c>=0;--c){d.doRemove(a[c],b[c])}}if(d.hasListeners.itemremove){for(c=b.length-1;c>=0;--c){d.fireEvent("itemremove",a[c],b[c])}}}},doRemove:function(a,c){var h=this,d=h.all,b=h.getAnimWrap(a),g=d.item(c),e=g?g.dom:null;if(!e||!b||!b.collapsing){return h.callParent(arguments)}b.targetEl.dom.insertBefore(e,b.targetEl.dom.firstChild);d.removeElement(c)},onBeforeExpand:function(d,b,c){var e=this,a;if(e.rendered&&e.all.getCount()&&e.animate){if(e.getNode(d)){a=e.getAnimWrap(d,false);if(!a){a=e.animWraps[d.internalId]=e.createAnimWrap(d);a.animateEl.setHeight(0)}else{if(a.collapsing){a.targetEl.select(e.itemSelector).remove()}}a.expanding=true;a.collapsing=false}}},onExpand:function(j){var i=this,g=i.animQueue,a=j.getId(),c=i.getNode(j),h=c?i.indexOf(c):-1,e,b,k,d=Ext.isIEQuirks?1:0;if(i.singleExpand){i.ensureSingleExpand(j)}if(h===-1){return}e=i.getAnimWrap(j,false);if(!e){j.isExpandingOrCollapsing=false;i.fireEvent("afteritemexpand",j,h,c);i.refreshSize();return}b=e.animateEl;k=e.targetEl;b.stopAnimation();g[a]=true;b.dom.style.height=d+"px";b.animate({from:{height:d},to:{height:k.getHeight()},duration:i.expandDuration,listeners:{afteranimate:function(){var l=k.query(i.itemSelector);if(l.length){e.el.insertSibling(l,"before",true)}e.el.remove();i.refreshSize();delete i.animWraps[e.record.internalId];delete g[a]}},callback:function(){j.isExpandingOrCollapsing=false;i.fireEvent("afteritemexpand",j,h,c)}});e.isAnimating=true},onBeforeCollapse:function(e,b,c,h,d){var g=this,a;if(g.rendered&&g.all.getCount()){if(g.animate){if(Ext.Array.contains(e.stores,g.store)){a=g.getAnimWrap(e);if(!a){a=g.animWraps[e.internalId]=g.createAnimWrap(e,c)}else{if(a.expanding){a.targetEl.select(this.itemSelector).remove()}}a.expanding=false;a.collapsing=true;a.callback=h;a.scope=d}}else{g.onCollapseCallback=h;g.onCollapseScope=d}}},onCollapse:function(d){var g=this,a=g.animQueue,i=d.getId(),e=g.getNode(d),c=e?g.indexOf(e):-1,b=g.getAnimWrap(d),h;if(!g.all.getCount()||!Ext.Array.contains(d.stores,g.store)){return}if(!b){d.isExpandingOrCollapsing=false;g.fireEvent("afteritemcollapse",d,c,e);g.refreshSize();Ext.callback(g.onCollapseCallback,g.onCollapseScope);g.onCollapseCallback=g.onCollapseScope=null;return}h=b.animateEl;a[i]=true;h.stopAnimation();h.animate({to:{height:Ext.isIEQuirks?1:0},duration:g.collapseDuration,listeners:{afteranimate:function(){b.el.remove();g.refreshSize();delete g.animWraps[b.record.internalId];delete a[i]}},callback:function(){d.isExpandingOrCollapsing=false;g.fireEvent("afteritemcollapse",d,c,e);Ext.callback(b.callback,b.scope);b.callback=b.scope=null}});b.isAnimating=true},isAnimating:function(a){return !!this.animQueue[a.getId()]},expand:function(d,c,h,e){var g=this,b=!!g.animate,a;if(!b||!d.isExpandingOrCollapsing){if(!d.isLeaf()){d.isExpandingOrCollapsing=b}Ext.suspendLayouts();a=d.expand(c,h,e);Ext.resumeLayouts(true);return a}},collapse:function(c,b,g,d){var e=this,a=!!e.animate;if(!a||!c.isExpandingOrCollapsing){if(!c.isLeaf()){c.isExpandingOrCollapsing=a}return c.collapse(b,g,d)}},toggle:function(b,a,d,c){if(b.isExpanded()){this.collapse(b,a,d,c)}else{this.expand(b,a,d,c)}},onItemDblClick:function(a,e,c){var d=this,b=d.editingPlugin;d.callParent(arguments);if(d.toggleOnDblClick&&a.isExpandable()&&!(b&&b.clicksToEdit===2)){d.toggle(a)}},onBeforeItemMouseDown:function(a,c,b,d){if(d.getTarget(this.expanderSelector,c)){return false}return this.callParent(arguments)},onItemClick:function(a,c,b,d){if(d.getTarget(this.expanderSelector,c)&&a.isExpandable()){this.toggle(a,d.ctrlKey);return false}return this.callParent(arguments)},onExpanderMouseOver:function(b,a){b.getTarget(this.cellSelector,10,true).addCls(this.expanderIconOverCls)},onExpanderMouseOut:function(b,a){b.getTarget(this.cellSelector,10,true).removeCls(this.expanderIconOverCls)},getStoreListeners:function(){var b=this,a=b.callParent(arguments);return Ext.apply(a,{beforeexpand:b.onBeforeExpand,expand:b.onExpand,beforecollapse:b.onBeforeCollapse,collapse:b.onCollapse,write:b.onStoreWrite,datachanged:b.onStoreDataChanged})},onBindStore:function(){var a=this,b=a.getTreeStore();a.callParent(arguments);a.mon(b,{scope:a,beforefill:a.onBeforeFill,fillcomplete:a.onFillComplete,beforebulkremove:a.beginBulkUpdate,bulkremovecomplete:a.endBulkUpdate});if(!b.remoteSort){a.mon(b,{scope:a,beforesort:a.onBeforeSort,sort:a.onSort})}},onUnbindStore:function(){var a=this,b=a.getTreeStore();a.callParent(arguments);a.mun(b,{scope:a,beforefill:a.onBeforeFill,fillcomplete:a.onFillComplete,beforebulkremove:a.beginBulkUpdate,bulkremovecomplete:a.endBulkUpdate});if(!b.remoteSort){a.mun(b,{scope:a,beforesort:a.onBeforeSort,sort:a.onSort})}},getTreeStore:function(){return this.panel.store},ensureSingleExpand:function(b){var a=b.parentNode;if(a){a.eachChild(function(c){if(c!==b&&c.isExpanded()){c.collapse()}})}},shouldUpdateCell:function(b,e,d){if(d){var c=0,a=d.length;for(;c0?1:-1;c.scrollTop=d;if(Math.abs(b)>=20||(h!==c.lastScrollDirection)){c.position=d;c.lastScrollDirection=h;c.handleViewScroll(c.lastScrollDirection)}}},handleViewScroll:function(h){var e=this,g=e.view.all,b=e.store,i=e.viewSize,a=(b.buffered?b.getTotalCount():b.getCount()),d,c;if(a>=i){if(h==-1){if(g.startIndex){if((e.getFirstVisibleRowIndex()-g.startIndex)l.endIndex||dl.endIndex){b=Math.max(a-l.startIndex,0);if(h.variableRowHeight){k=l.item(l.startIndex+b,true).offsetTop}l.scroll(Ext.Array.slice(g,l.endIndex+1-a),1,b,a,d);if(h.variableRowHeight){i=h.bodyTop+k}else{i=e}}else{b=Math.max(l.endIndex-d,0);c=l.startIndex;l.scroll(Ext.Array.slice(g,0,l.startIndex-a),-1,b,a,d);if(h.variableRowHeight){i=h.bodyTop-l.item(c,true).offsetTop}else{i=e}}}if(j.positionBody){h.setBodyTop(i,e)}},setBodyTop:function(d,g){var e=this,b=e.view,c=e.store,a=b.body.dom,h;d=Math.floor(d);if(g!==undefined){h=d-g;d=g}a.style.position="absolute";a.style.top=(e.bodyTop=d)+"px";if(h){e.scrollTop=e.position=b.el.dom.scrollTop-=h}if(e.view.all.endIndex===(c.buffered?c.getTotalCount():c.getCount())-1){e.stretchView(b,e.bodyTop+a.offsetHeight)}},getFirstVisibleRowIndex:function(j,c,b,g){var h=this,i=h.view,l=i.all,a=l.elements,d=i.el.dom.clientHeight,e,k;if(l.getCount()&&h.variableRowHeight){if(!arguments.length){j=l.startIndex;c=l.endIndex;b=h.scrollTop;g=b+d;if(h.bodyTop>g||h.bodyTop+i.body.getHeight()g||i.bodyTop+j.body.getHeight()g){return i.getLastVisibleRowIndex(k,e-1,b,g)}h=l+a[e].offsetHeight;if(h>=g){return e}else{if(e!==c){return i.getLastVisibleRowIndex(e+1,c,b,g)}}}return i.getFirstVisibleRowIndex()+Math.ceil(d/i.rowHeight)},getScrollHeight:function(){var d=this,a=d.view,b=d.store,c=!d.hasOwnProperty("rowHeight"),e=d.store.getCount();if(!e){return 0}if(c){if(a.all.getCount()){d.rowHeight=Math.floor(a.body.getHeight()/a.all.getCount())}}return Math.floor((b.buffered?b.getTotalCount():b.getCount())*d.rowHeight)},attemptLoad:function(c,a){var b=this;if(b.scrollToLoadBuffer){if(!b.loadTask){b.loadTask=new Ext.util.DelayedTask(b.doAttemptLoad,b,[])}b.loadTask.delay(b.scrollToLoadBuffer,b.doAttemptLoad,b,[c,a])}else{b.store.getRange(c,a,{callback:b.onRangeFetched,scope:b,fireEvent:false})}},cancelLoad:function(){if(this.loadTask){this.loadTask.cancel()}},doAttemptLoad:function(b,a){this.store.getRange(b,a,{callback:this.onRangeFetched,scope:this,fireEvent:false})},destroy:function(){var b=this,a=b.view;if(a&&a.el){a.el.un("scroll",b.onViewScroll,b)}Ext.destroy(b.viewListeners,b.storeListeners,b.gridListeners)}});Ext.define("Ext.grid.plugin.Editing",{alias:"editing.editing",extend:Ext.AbstractPlugin,mixins:{observable:Ext.util.Observable},clicksToEdit:2,triggerEvent:undefined,relayedEvents:["beforeedit","edit","validateedit","canceledit"],defaultFieldXType:"textfield",editStyle:"",constructor:function(a){var b=this;b.addEvents("beforeedit","edit","validateedit","canceledit");b.callParent(arguments);b.mixins.observable.constructor.call(b);b.on("edit",function(c,d){b.fireEvent("afteredit",c,d)})},init:function(a){var b=this;b.grid=a;b.view=a.view;b.initEvents();b.mon(a,{reconfigure:b.onReconfigure,scope:b,beforerender:{fn:b.onReconfigure,single:true,scope:b}});a.relayEvents(b,b.relayedEvents);if(b.grid.ownerLockable){b.grid.ownerLockable.relayEvents(b,b.relayedEvents)}a.isEditable=true;a.editingPlugin=a.view.editingPlugin=b},onReconfigure:function(){var a=this.grid;a=a.ownerLockable?a.ownerLockable:a;this.initFieldAccessors(a.getView().getGridColumns())},destroy:function(){var b=this,a=b.grid;Ext.destroy(b.keyNav);b.clearListeners();if(a){b.removeFieldAccessors(a.getView().getGridColumns());a.editingPlugin=a.view.editingPlugin=b.grid=b.view=b.editor=b.keyNav=null}},getEditStyle:function(){return this.editStyle},initFieldAccessors:function(a){a=[].concat(a);var d=this,g,e=a.length,b;for(g=0;g',"{%","values.view.renderRows(values.rows, values.viewStartIndex, out);","%}","",{priority:0}],rowTpl:["{%",'var dataRowCls = values.recordIndex === -1 ? "" : " '+Ext.baseCSSPrefix+'grid-data-row";',"%}",'
    ",'{%',"parent.view.renderCell(values, parent.record, parent.recordIndex, xindex - 1, out, parent)","%}","","
    ",{priority:0}],cellTpl:['
    ','
    {style}">{value}
    ',"
    ",{priority:0}],selectors:{bodySelector:"div",nodeContainerSelector:"div",itemSelector:"dl."+Ext.baseCSSPrefix+"grid-row",dataRowSelector:"dl."+Ext.baseCSSPrefix+"grid-data-row",cellSelector:"dt."+Ext.baseCSSPrefix+"grid-cell",innerSelector:"div."+Ext.baseCSSPrefix+"grid-cell-inner",getNodeContainerSelector:function(){return this.getBodySelector()},getNodeContainer:function(){return this.el.getById(this.id+"-table",true)}},init:function(b){var a=b.getView();a.tableTpl=Ext.XTemplate.getTpl(this,"tableTpl");a.rowTpl=Ext.XTemplate.getTpl(this,"rowTpl");a.cellTpl=Ext.XTemplate.getTpl(this,"cellTpl");Ext.apply(a,this.selectors)}});Ext.define("Ext.grid.plugin.DragDrop",{extend:Ext.AbstractPlugin,alias:"plugin.gridviewdragdrop",dragText:"{0} selected row{1}",ddGroup:"GridDD",enableDrop:true,enableDrag:true,containerScroll:false,init:function(a){a.on("render",this.onViewRender,this,{single:true})},destroy:function(){Ext.destroy(this.dragZone,this.dropZone)},enable:function(){var a=this;if(a.dragZone){a.dragZone.unlock()}if(a.dropZone){a.dropZone.unlock()}a.callParent()},disable:function(){var a=this;if(a.dragZone){a.dragZone.lock()}if(a.dropZone){a.dropZone.lock()}a.callParent()},onViewRender:function(a){var b=this,c;if(b.enableDrag){if(b.containerScroll){c=a.getEl()}b.dragZone=new Ext.view.DragZone({view:a,ddGroup:b.dragGroup||b.ddGroup,dragText:b.dragText,containerScroll:b.containerScroll,scrollEl:c})}if(b.enableDrop){b.dropZone=new Ext.grid.ViewDropZone({view:a,ddGroup:b.dropGroup||b.ddGroup})}}});Ext.define("Ext.grid.plugin.RowEditing",{extend:Ext.grid.plugin.Editing,alias:"plugin.rowediting",lockableScope:"top",editStyle:"row",autoCancel:true,errorSummary:true,constructor:function(){var a=this;a.callParent(arguments);if(!a.clicksToMoveEditor){a.clicksToMoveEditor=a.clicksToEdit}a.autoCancel=!!a.autoCancel},destroy:function(){Ext.destroy(this.editor);this.callParent(arguments)},startEdit:function(a,e){var d=this,c=d.getEditor(),b;if(c.beforeEdit()!==false){b=d.callParent(arguments);if(b){d.context=b;if(d.lockingPartner){d.lockingPartner.cancelEdit()}c.startEdit(b.record,b.column,b);return true}}return false},cancelEdit:function(){var a=this;if(a.editing){a.getEditor().cancelEdit();a.callParent(arguments);return}return true},completeEdit:function(){var a=this;if(a.editing&&a.validateEdit()){a.editing=false;a.fireEvent("edit",a,a.context)}},validateEdit:function(){var k=this,h=k.editor,b=k.context,g=b.record,m={},d={},j=h.items.items,i,c=j.length,a,l;for(i=0;ic?1:0))}},setColumnField:function(b,d){var c=this,a=c.getEditor();a.removeField(b);c.callParent(arguments);c.getEditor().setField(b)}});Ext.define("Ext.grid.plugin.RowExpander",{extend:Ext.AbstractPlugin,lockableScope:"normal",alias:"plugin.rowexpander",rowBodyTpl:null,expandOnEnter:true,expandOnDblClick:true,selectRowOnExpand:false,rowBodyTrSelector:".x-grid-rowbody-tr",rowBodyHiddenCls:"x-grid-row-body-hidden",rowCollapsedCls:"x-grid-row-collapsed",addCollapsedCls:{before:function(a,b){var c=this.rowExpander;if(!c.recordsExpanded[a.record.internalId]){a.itemClasses.push(c.rowCollapsedCls)}},priority:500},setCmp:function(b){var d=this,a,c;d.callParent(arguments);d.recordsExpanded={};d.rowBodyTpl=Ext.XTemplate.getTpl(d,"rowBodyTpl");a=this.rowBodyTpl;c=[{ftype:"rowbody",lockableScope:"normal",recordsExpanded:d.recordsExpanded,rowBodyHiddenCls:d.rowBodyHiddenCls,rowCollapsedCls:d.rowCollapsedCls,setupRowData:d.getRowBodyFeatureData,getRowBodyContents:function(e){return a.applyTemplate(e.getData())}},{ftype:"rowwrap",lockableScope:"normal"}];if(b.features){b.features=Ext.Array.push(c,b.features)}else{b.features=c}},init:function(b){var d=this,a=b,c;d.callParent(arguments);d.grid=b;d.view=b.getView();d.addExpander();d.bindView(d.view);d.view.addRowTpl(d.addCollapsedCls).rowExpander=d;if(b.ownerLockable){a=b.ownerLockable;a.syncRowHeight=false;c=a.lockedGrid.getView();d.bindView(c);c.addRowTpl(d.addCollapsedCls).rowExpander=d;a.mon(a,"columnschanged",d.refreshRowHeights,d);a.mon(a.store,"datachanged",d.refreshRowHeights,d)}a.on("beforereconfigure",d.beforeReconfigure,d)},beforeReconfigure:function(d,a,c,e,b){var g=this.getHeaderConfig();g.locked=true;c.unshift(g)},addExpander:function(){var b=this,a=b.grid,c=b.getHeaderConfig();if(a.ownerLockable){a=a.ownerLockable.lockedGrid;a.width+=c.width}a.headerCt.insert(0,c)},getRowBodyFeatureData:function(b,a,d){var c=this;c.self.prototype.setupRowData.apply(c,arguments);if(!c.grid.ownerLockable){d.rowBodyColspan=d.rowBodyColspan-1}d.rowBody=c.getRowBodyContents(b);d.rowBodyCls=c.recordsExpanded[b.internalId]?"":c.rowBodyHiddenCls},bindView:function(a){if(this.expandOnEnter){a.on("itemkeydown",this.onKeyDown,this)}if(this.expandOnDblClick){a.on("itemdblclick",this.onDblClick,this)}},onKeyDown:function(k,g,l,a,h){if(h.getKey()==h.ENTER){var b=k.store,c=k.getSelectionModel().getSelection(),j=c.length,d=0;for(;dg){d.style.height=b+"px"}else{if(g>b){c.style.height=g+"px"}}}}},getHeaderConfig:function(){var a=this;return{width:24,lockable:false,sortable:false,resizable:false,draggable:false,hideable:false,menuDisabled:true,tdCls:Ext.baseCSSPrefix+"grid-cell-special",renderer:function(c,b){if(!a.grid.ownerLockable){b.tdAttr+=' rowspan="2"'}return'
     
    '},processEvent:function(h,d,b,j,g,i,c){if(h=="mousedown"&&i.getTarget(".x-grid-row-expander")){a.toggleRow(j,c);return a.selectRowOnExpand}}}}});Ext.define("Ext.grid.property.Grid",{extend:Ext.grid.Panel,alias:"widget.propertygrid",alternateClassName:"Ext.grid.PropertyGrid",valueField:"value",nameField:"name",inferTypes:true,enableColumnMove:false,columnLines:true,stripeRows:false,trackMouseOver:false,clicksToEdit:1,enableHdMenu:false,gridCls:Ext.baseCSSPrefix+"property-grid",initComponent:function(){var a=this;a.source=a.source||{};a.addCls(a.gridCls);a.plugins=a.plugins||[];a.plugins.push(new Ext.grid.plugin.CellEditing({clicksToEdit:a.clicksToEdit,startEdit:function(b,c){return this.self.prototype.startEdit.call(this,b,a.headerCt.child("#"+a.valueField))}}));a.selModel={selType:"cellmodel",onCellSelect:function(b){if(b.column!=1){b.column=1}return this.self.prototype.onCellSelect.call(this,b)}};a.sourceConfig=Ext.apply({},a.sourceConfig);if(!a.store){a.propStore=a.store=new Ext.grid.property.Store(a,a.source)}a.configure(a.sourceConfig);if(a.sortableColumns){a.store.sort("name","ASC")}a.columns=new Ext.grid.property.HeaderContainer(a,a.store);a.addEvents("beforepropertychange","propertychange");a.callParent();a.getView().walkCells=this.walkCells;a.editors={date:new Ext.grid.CellEditor({field:new Ext.form.field.Date({selectOnFocus:true})}),string:new Ext.grid.CellEditor({field:new Ext.form.field.Text({selectOnFocus:true})}),number:new Ext.grid.CellEditor({field:new Ext.form.field.Number({selectOnFocus:true})}),"boolean":new Ext.grid.CellEditor({field:new Ext.form.field.ComboBox({editable:false,store:[[true,a.headerCt.trueText],[false,a.headerCt.falseText]]})})};a.store.on("update",a.onUpdate,a)},configure:function(b){var h=this,k=h.store,d=0,e=h.store.getCount(),l=h.nameField,m=h.valueField,a,j,c,g;h.configureLegacy(b);if(h.inferTypes){for(;d0);if(j){s.widthModel=s.heightModel=null;b=u.getSizeModel(l&&l.widthModel.pairsByHeightOrdinal[l.heightModel.ordinal]);if(h){s.sizeModel=b}s.widthModel=b.width;s.heightModel=b.height;if(l&&!s.isComponentChild){l.remainingChildDimensions+=2}}else{if(a){s.recoverProp("x",a,d);s.recoverProp("y",a,d);if(s.widthModel.calculated){s.recoverProp("width",a,d)}if(s.heightModel.calculated){s.recoverProp("height",a,d)}if(l&&!s.isComponentChild){l.remainingChildDimensions+=("width" in a)+("height" in a)}}}if(a&&p&&p.manageMargins){s.recoverProp("margin-top",a,d);s.recoverProp("margin-right",a,d);s.recoverProp("margin-bottom",a,d);s.recoverProp("margin-left",a,d)}if(c){k=c.heightModel;r=c.widthModel;if(r&&k&&g&&v){if(g.shrinkWrap&&v.shrinkWrap){if(r.constrainedMax&&k.constrainedMin){k=null}}}if(r){s.widthModel=r}if(k){s.heightModel=k}if(c.state){Ext.apply(s.state,c.state)}}return t},initContinue:function(e){var g=this,d=g.ownerCtContext,a=g.target,c=g.widthModel,h=a.getHierarchyState(),b;if(c.fixed){h.inShrinkWrapTable=false}else{delete h.inShrinkWrapTable}if(e){if(d&&c.shrinkWrap){b=d.isBoxParent?d:d.boxParent;if(b){b.addBoxChild(g)}}else{if(c.natural){g.boxParent=d}}}return e},initDone:function(d){var b=this,a=b.props,c=b.state;if(b.remainingChildDimensions===0){a.containerChildrenSizeDone=true}if(d){a.containerLayoutDone=true}if(b.boxChildren&&b.boxChildren.length&&b.widthModel.shrinkWrap){b.el.setWidth(10000);c.blocks=(c.blocks||0)+1}},initAnimation:function(){var b=this,c=b.target,a=b.ownerCtContext;if(a&&a.isTopLevel){b.animatePolicy=c.ownerLayout.getAnimatePolicy(b)}else{if(!a&&c.isCollapsingOrExpanding&&c.animCollapse){b.animatePolicy=c.componentLayout.getAnimatePolicy(b)}}if(b.animatePolicy){b.context.queueAnimation(b)}},addCls:function(a){this.getClassList().addMany(a)},removeCls:function(a){this.getClassList().removeMany(a)},addBlock:function(b,d,e){var c=this,g=c[b]||(c[b]={}),a=g[e]||(g[e]={});if(!a[d.id]){a[d.id]=d;++d.blockCount;++c.context.blockCount}},addBoxChild:function(d){var c=this,b,a=d.widthModel;d.boxParent=this;d.measuresBox=a.shrinkWrap?d.hasRawContent:a.natural;if(d.measuresBox){b=c.boxChildren;if(b){b.push(d)}else{c.boxChildren=[d]}}},addPositionStyles:function(d,b){var a=b.x,e=b.y,c=0;if(a!==undefined){d.left=a+"px";++c}if(e!==undefined){d.top=e+"px";++c}return c},addTrigger:function(g,h){var e=this,a=h?"domTriggers":"triggers",i=e[a]||(e[a]={}),b=e.context,d=b.currentLayout,c=i[g]||(i[g]={});if(!c[d.id]){c[d.id]=d;++d.triggerCount;c=b.triggers[h?"dom":"data"];(c[d.id]||(c[d.id]=[])).push({item:this,prop:g});if(e.props[g]!==undefined){if(!h||!(e.dirty&&(g in e.dirty))){++d.firedTriggers}}}},boxChildMeasured:function(){var b=this,c=b.state,a=(c.boxesMeasured=(c.boxesMeasured||0)+1);if(a==b.boxChildren.length){c.clearBoxWidth=1;++b.context.progressCount;b.markDirty()}},borderNames:["border-top-width","border-right-width","border-bottom-width","border-left-width"],marginNames:["margin-top","margin-right","margin-bottom","margin-left"],paddingNames:["padding-top","padding-right","padding-bottom","padding-left"],trblNames:["top","right","bottom","left"],cacheMissHandlers:{borderInfo:function(a){var b=a.getStyles(a.borderNames,a.trblNames);b.width=b.left+b.right;b.height=b.top+b.bottom;return b},marginInfo:function(a){var b=a.getStyles(a.marginNames,a.trblNames);b.width=b.left+b.right;b.height=b.top+b.bottom;return b},paddingInfo:function(b){var a=b.frameBodyContext||b,c=a.getStyles(b.paddingNames,b.trblNames);c.width=c.left+c.right;c.height=c.top+c.bottom;return c}},checkCache:function(a){return this.cacheMissHandlers[a](this)},clearAllBlocks:function(a){var c=this[a],b;if(c){for(b in c){this.clearBlocks(a,b)}}},clearBlocks:function(c,g){var h=this[c],b=h&&h[g],d,e,a;if(b){delete h[g];d=this.context;for(a in b){e=b[a];--d.blockCount;if(!--e.blockCount&&!e.pending&&!e.done){d.queueLayout(e)}}}},block:function(a,b){this.addBlock("blocks",a,b)},domBlock:function(a,b){this.addBlock("domBlocks",a,b)},fireTriggers:function(b,g){var h=this[b],d=h&&h[g],c=this.context,e,a;if(d){for(a in d){e=d[a];++e.firedTriggers;if(!e.done&&!e.blockCount&&!e.pending){c.queueLayout(e)}}}},flush:function(){var b=this,a=b.dirty,c=b.state,d=b.el;b.dirtyCount=0;if(b.classList&&b.classList.dirty){b.classList.flush()}if("attributes" in b){d.set(b.attributes);delete b.attributes}if("innerHTML" in b){d.innerHTML=b.innerHTML;delete b.innerHTML}if(c&&c.clearBoxWidth){c.clearBoxWidth=0;b.el.setStyle("width",null);if(!--c.blocks){b.context.queueItemLayouts(b)}}if(a){delete b.dirty;b.writeProps(a,true)}},flushAnimations:function(){var o=this,c=o.previousSize,l,n,e,h,g,d,i,m,k,a,b;if(c){l=o.target;n=l.layout&&l.layout.animate;if(n){e=Ext.isNumber(n)?n:n.duration}h=Ext.Object.getKeys(o.animatePolicy);g=Ext.apply({},{from:{},to:{},duration:e||Ext.fx.Anim.prototype.duration},n);for(d=0,i=0,m=h.length;i0||l>0)){if(!w.frameBodyContext){t=w.paddingInfo.width;k=w.paddingInfo.height}if(p){p=r(parseInt(p,10)-(w.borderInfo.width+t),0);i.width=p+"px";++h}if(l){l=r(parseInt(l,10)-(w.borderInfo.height+k),0);i.height=l+"px";++h}}if(w.wrapsComponent&&Ext.isIE9&&Ext.isStrict){if((g=p!==undefined&&w.hasOverflowY)||(a=l!==undefined&&w.hasOverflowX)){o=w.isAbsolute;if(o===undefined){o=false;m=w.target.getTargetEl();s=m.getStyle("position");if(s=="absolute"){s=m.getStyle("box-sizing");o=(s=="border-box")}w.isAbsolute=o}if(o){q=Ext.getScrollbarSize();if(g){p=parseInt(p,10)+q.width;i.width=p+"px";++h}if(a){l=parseInt(l,10)+q.height;i.height=l+"px";++h}}}}if(h){c.setStyle(i)}}},function(){var c={dom:true,parseInt:true,suffix:"px"},b={dom:true},a={dom:false};this.prototype.styleInfo={containerChildrenSizeDone:a,containerLayoutDone:a,displayed:a,done:a,x:a,y:a,columnWidthsDone:a,left:c,top:c,right:c,bottom:c,width:c,height:c,"border-top-width":c,"border-right-width":c,"border-bottom-width":c,"border-left-width":c,"margin-top":c,"margin-right":c,"margin-bottom":c,"margin-left":c,"padding-top":c,"padding-right":c,"padding-bottom":c,"padding-left":c,"line-height":b,display:b}});Ext.define("Ext.layout.Context",{remainingLayouts:0,state:0,constructor:function(a){var b=this;Ext.apply(b,a);b.items={};b.layouts={};b.blockCount=0;b.cycleCount=0;b.flushCount=0;b.calcCount=0;b.animateQueue=b.newQueue();b.completionQueue=b.newQueue();b.finalizeQueue=b.newQueue();b.finishQueue=b.newQueue();b.flushQueue=b.newQueue();b.invalidateData={};b.layoutQueue=b.newQueue();b.invalidQueue=[];b.triggers={data:{},dom:{}}},callLayout:function(b,a){this.currentLayout=b;b[a](this.getCmp(b.owner))},cancelComponent:function(j,a,m){var p=this,h=j,l=!j.isComponent,b=l?h.length:1,d,c,o,n,g,s,q,r,t,e;for(d=0;d0},runLayout:function(b){var a=this,c=a.getCmp(b.owner);b.pending=false;if(c.state.blocks){return}b.done=true;++b.calcCount;++a.calcCount;b.calculate(c);if(b.done){a.layoutDone(b);if(b.completeLayout){a.queueCompletion(b)}if(b.finalizeLayout){a.queueFinalize(b)}}else{if(!b.pending&&!b.invalid&&!(b.blockCount+b.triggerCount-b.firedTriggers)){a.queueLayout(b)}}},setItemSize:function(h,g,b){var d=h,a=1,c,e;if(h.isComposite){d=h.elements;a=d.length;h=d[0]}else{if(!h.dom&&!h.el){a=d.length;h=d[0]}}for(e=0;e0){b.insert(0,l)}}}}},getItemsRenderTree:function(a){this.beforeRenderItems(a);return this.callParent(arguments)},renderItems:function(a,b){this.beforeRenderItems(a);this.callParent(arguments)},configureItem:function(a){this.callParent(arguments);a.animCollapse=a.border=false;if(this.fill){a.flex=1}},beginLayout:function(a){this.callParent(arguments);this.updatePanelClasses(a)},updatePanelClasses:function(e){var c=e.visibleItems,d=c.length,a=true,b,h,g;for(b=0;b','
     ',"
    ",""],baseCls:Ext.baseCSSPrefix+"splitter",collapsedClsInternal:Ext.baseCSSPrefix+"splitter-collapsed",canResize:true,collapsible:false,collapseOnDblClick:true,defaultSplitMin:40,defaultSplitMax:1000,collapseTarget:"next",horizontal:false,vertical:false,size:5,getTrackerConfig:function(){return{xclass:"Ext.resizer.SplitterTracker",el:this.el,splitter:this}},beforeRender:function(){var d=this,e=d.getCollapseTarget(),g=d.getCollapseDirection(),c=d.vertical,b=c?"width":"height",h=c?"height":"width",a;d.callParent();if(!d.hasOwnProperty(h)){d[h]="100%"}if(!d.hasOwnProperty(b)){d[b]=d.size}if(e.collapsed){d.addCls(d.collapsedClsInternal)}a=d.baseCls+"-"+d.orientation;d.addCls(a);if(!d.canResize){d.addCls(a+"-noresize")}Ext.applyIf(d.renderData,{collapseDir:g,collapsible:d.collapsible||e.collapsible});d.protoEl.unselectable()},onRender:function(){var a=this;a.callParent(arguments);if(a.performCollapse!==false){if(a.renderData.collapsible){a.mon(a.collapseEl,"click",a.toggleTargetCmp,a)}if(a.collapseOnDblClick){a.mon(a.el,"dblclick",a.toggleTargetCmp,a)}}a.mon(a.getCollapseTarget(),{collapse:a.onTargetCollapse,expand:a.onTargetExpand,beforeexpand:a.onBeforeTargetExpand,beforecollapse:a.onBeforeTargetCollapse,scope:a});if(a.canResize){a.tracker=Ext.create(a.getTrackerConfig());a.relayEvents(a.tracker,["beforedragstart","dragstart","dragend"])}},getCollapseDirection:function(){var g=this,c=g.collapseDirection,e,a,b,d;if(!c){e=g.collapseTarget;if(e.isComponent){c=e.collapseDirection}if(!c){d=g.ownerCt.layout.type;if(e.isComponent){b=g.ownerCt.items;a=Number(b.indexOf(e)==b.indexOf(g)-1)<<1|Number(d=="hbox")}else{a=Number(g.collapseTarget=="prev")<<1|Number(d=="hbox")}c=["bottom","right","top","left"][a]}g.collapseDirection=c}g.orientation=(c=="top"||c=="bottom")?"horizontal":"vertical";g[g.orientation]=true;return c},getCollapseTarget:function(){var a=this;return a.collapseTarget.isComponent?a.collapseTarget:a.collapseTarget=="prev"?a.previousSibling():a.nextSibling()},setCollapseEl:function(b){var a=this.collapseEl;if(a){a.setDisplayed(b)}},onBeforeTargetExpand:function(a){this.setCollapseEl("none")},onBeforeTargetCollapse:function(){this.setCollapseEl("none")},onTargetCollapse:function(a){this.el.addCls([this.collapsedClsInternal,this.collapsedCls]);this.setCollapseEl("")},onTargetExpand:function(a){this.el.removeCls([this.collapsedClsInternal,this.collapsedCls]);this.setCollapseEl("")},toggleTargetCmp:function(d,b){var c=this.getCollapseTarget(),g=c.placeholder,a;if(Ext.isFunction(c.expand)&&Ext.isFunction(c.collapse)){if(g&&!g.hidden){a=true}else{a=!c.hidden}if(a){if(c.collapsed){c.expand()}else{if(c.collapseDirection){c.collapse()}else{c.collapse(this.renderData.collapseDir)}}}}},setSize:function(){var a=this;a.callParent(arguments);if(Ext.isIE&&a.el){a.el.repaint()}},beforeDestroy:function(){Ext.destroy(this.tracker);this.callParent()}});Ext.define("Ext.resizer.BorderSplitter",{extend:Ext.resizer.Splitter,alias:"widget.bordersplitter",collapseTarget:null,getTrackerConfig:function(){var a=this.callParent();a.xclass="Ext.resizer.BorderSplitterTracker";return a}});Ext.define("Ext.layout.container.Border",{alias:"layout.border",extend:Ext.layout.container.Container,alternateClassName:"Ext.layout.BorderLayout",targetCls:Ext.baseCSSPrefix+"border-layout-ct",itemCls:[Ext.baseCSSPrefix+"border-item",Ext.baseCSSPrefix+"box-item"],type:"border",padding:undefined,percentageRe:/(\d+)%/,axisProps:{horz:{borderBegin:"west",borderEnd:"east",horizontal:true,posProp:"x",sizeProp:"width",sizePropCap:"Width"},vert:{borderBegin:"north",borderEnd:"south",horizontal:false,posProp:"y",sizeProp:"height",sizePropCap:"Height"}},centerRegion:null,collapseDirections:{north:"top",south:"bottom",east:"right",west:"left"},manageMargins:true,panelCollapseAnimate:true,panelCollapseMode:"placeholder",regionWeights:{north:20,south:10,center:0,west:-10,east:-20},beginAxis:function(m,b,w){var u=this,c=u.axisProps[w],r=!c.horizontal,l=c.sizeProp,p=0,a=m.childItems,g=a.length,t,q,o,h,s,e,k,n,d,v,j;for(q=0;q',renderTpl:['',"{%this.renderBody(out,values)%}","
    ","{%this.renderPadder(out,values)%}"],getRenderData:function(){var a=this.callParent();a.tableCls=this.tableCls;return a},calculate:function(g){var e=this,j=e.getContainerSize(g,true),a,h,b=0,d,c=g.sizeModel.height.shrinkWrap;if(c){if(g.hasDomProp("containerChildrenSizeDone")){g.setProp("contentHeight",e.formTable.dom.offsetHeight+g.targetContext.getPaddingInfo().height)}else{e.done=false}}if(j.gotWidth){a=e.formTable.dom.offsetWidth;h=g.childItems;for(d=h.length;b');c.scrollRangeFlags=e}}},getContainerSize:function(d,i,b){var e=d.targetContext,h=e.getFrameInfo(),l=e.getPaddingInfo(),k=0,m=0,a=b?null:d.state.overflowAdjust,g,j,c,n;if(!d.widthModel.shrinkWrap){++m;c=i?e.getDomProp("width"):e.getProp("width");g=(typeof c=="number");if(g){++k;c-=h.width+l.width;if(a){c-=a.width}}}if(!d.heightModel.shrinkWrap){++m;n=i?e.getDomProp("height"):e.getProp("height");j=(typeof n=="number");if(j){++k;n-=h.height+l.height;if(a){n-=a.height}}}return{width:c,height:n,needed:m,got:k,gotAll:k==m,gotWidth:g,gotHeight:j}},getOverflowXStyle:function(b){var a=this;return a.overflowXStyle||(a.overflowXStyle=a.owner.scrollFlags.overflowX||b.targetContext.getStyle("overflow-x"))},getOverflowYStyle:function(b){var a=this;return a.overflowYStyle||(a.overflowYStyle=a.owner.scrollFlags.overflowY||b.targetContext.getStyle("overflow-y"))},getScrollRangeFlags:(function(){var a=-1;return function(){if(a<0){var g=Ext.getBody().createChild({cls:Ext.baseCSSPrefix+"border-box",style:{width:"100px",height:"100px",padding:"10px",overflow:"auto"},children:[{style:{border:"1px solid red",width:"150px",height:"150px",margin:"0 5px 5px 0"}}]}),d=g.dom.scrollHeight,c=g.dom.scrollWidth,e={175:0,165:1,170:2,160:3},b={175:0,165:4,170:8,160:12};a=(e[d]||0)|(b[c]||0);g.remove()}return a}}()),initLayout:function(){var b=this,a=Ext.getScrollbarSize().width;b.callParent();if(a&&b.manageOverflow&&!b.hasOwnProperty("lastOverflowAdjust")){if(b.owner.scrollFlags.y||b.reserveScrollbar){b.lastOverflowAdjust={width:a,height:0}}}},setupRenderTpl:function(a){this.callParent(arguments);a.renderPadder=this.doRenderPadder}});Ext.define("Ext.menu.Item",{extend:Ext.Component,alias:"widget.menuitem",alternateClassName:"Ext.menu.TextItem",activeCls:Ext.baseCSSPrefix+"menu-item-active",ariaRole:"menuitem",canActivate:true,clickHideDelay:1,destroyMenu:true,disabledCls:Ext.baseCSSPrefix+"menu-item-disabled",hideOnClick:true,isMenuItem:true,menuAlign:"tl-tr?",menuExpandDelay:200,menuHideDelay:200,tooltipType:"qtip",arrowCls:Ext.baseCSSPrefix+"menu-item-arrow",childEls:["itemEl","iconEl","textEl","arrowEl"],renderTpl:['',"{text}","",' target="{hrefTarget}"',' hidefocus="true"',' unselectable="on"','',' tabIndex="{tabIndex}"',"",">",'",'{text}','',"",""],maskOnDisable:false,activate:function(){var a=this;if(!a.activated&&a.canActivate&&a.rendered&&!a.isDisabled()&&a.isVisible()){a.el.addCls(a.activeCls);a.focus();a.activated=true;a.fireEvent("activate",a)}},getFocusEl:function(){return this.itemEl},deactivate:function(){var a=this;if(a.activated){a.el.removeCls(a.activeCls);a.blur();a.hideMenu();a.activated=false;a.fireEvent("deactivate",a)}},deferHideMenu:function(){if(this.menu.isVisible()){this.menu.hide()}},cancelDeferHide:function(){clearTimeout(this.hideMenuTimer)},deferHideParentMenus:function(){var a;Ext.menu.Manager.hideAll();if(!Ext.Element.getActiveElement()){a=this.up(":not([hidden])");if(a){a.focus()}}},expandMenu:function(a){var b=this;if(b.menu){b.cancelDeferHide();if(a===0){b.doExpandMenu()}else{clearTimeout(b.expandMenuTimer);b.expandMenuTimer=Ext.defer(b.doExpandMenu,Ext.isNumber(a)?a:b.menuExpandDelay,b)}}},doExpandMenu:function(){var a=this,b=a.menu;if(a.activated&&(!b.rendered||!b.isVisible())){a.parentMenu.activeChild=b;b.parentItem=a;b.parentMenu=a.parentMenu;b.showBy(a,a.menuAlign)}},getRefItems:function(a){var c=this.menu,b;if(c){b=c.getRefItems(a);b.unshift(c)}return b||[]},hideMenu:function(a){var b=this;if(b.menu){clearTimeout(b.expandMenuTimer);b.hideMenuTimer=Ext.defer(b.deferHideMenu,Ext.isNumber(a)?a:b.menuHideDelay,b)}},initComponent:function(){var b=this,c=Ext.baseCSSPrefix,a=[c+"menu-item"],d;b.addEvents("activate","click","deactivate","textchange","iconchange");if(b.plain){a.push(c+"menu-item-plain")}if(b.cls){a.push(b.cls)}b.cls=a.join(" ");if(b.menu){d=b.menu;delete b.menu;b.setMenu(d)}b.callParent(arguments)},onClick:function(b){var a=this;if(!a.href){b.stopEvent()}if(a.disabled){return}if(a.hideOnClick){a.deferHideParentMenusTimer=Ext.defer(a.deferHideParentMenus,a.clickHideDelay,a)}Ext.callback(a.handler,a.scope||a,[a,b]);a.fireEvent("click",a,b);if(!a.hideOnClick){a.focus()}},onRemoved:function(){var a=this;if(a.activated&&a.parentMenu.activeItem===a){a.parentMenu.deactivateActiveItem()}a.callParent(arguments);a.parentMenu=a.ownerButton=null},beforeDestroy:function(){var a=this;if(a.rendered){a.clearTip()}a.callParent()},onDestroy:function(){var a=this;clearTimeout(a.expandMenuTimer);a.cancelDeferHide();clearTimeout(a.deferHideParentMenusTimer);a.setMenu(null);a.callParent(arguments)},beforeRender:function(){var d=this,h=Ext.BLANK_IMAGE_URL,c=d.glyph,g=Ext._glyphFontFamily,b,a,e;d.callParent();if(d.iconAlign==="right"){a=d.checkChangeDisabled?d.disabledCls:"";e=Ext.baseCSSPrefix+"menu-item-icon-right "+d.iconCls}else{a=(d.iconCls||"")+(d.checkChangeDisabled?" "+d.disabledCls:"");e=d.menu?d.arrowCls:""}if(typeof c==="string"){b=c.split("@");c=b[0];g=b[1]}Ext.applyIf(d.renderData,{href:d.href||"#",hrefTarget:d.hrefTarget,icon:d.icon,iconCls:a,glyph:c,glyphCls:c?Ext.baseCSSPrefix+"menu-item-glyph":undefined,glyphFontFamily:g,hasIcon:!!(d.icon||d.iconCls||c),iconAlign:d.iconAlign,plain:d.plain,text:d.text,arrowCls:e,blank:h,tabIndex:d.tabIndex})},onRender:function(){var a=this;a.callParent(arguments);if(a.tooltip){a.setTooltip(a.tooltip,true)}},setMenu:function(e,d){var c=this,b=c.menu,a=c.arrowEl;if(b){delete b.parentItem;delete b.parentMenu;delete b.ownerItem;if(d===true||(d!==false&&c.destroyMenu)){Ext.destroy(b)}}if(e){c.menu=Ext.menu.Manager.get(e);c.menu.ownerItem=c}else{c.menu=null}if(c.rendered&&!c.destroying&&a){a[c.menu?"addCls":"removeCls"](c.arrowCls)}},setHandler:function(b,a){this.handler=b||null;this.scope=a},setIcon:function(b){var a=this.iconEl,c=this.icon;if(a){a.src=b||Ext.BLANK_IMAGE_URL}this.icon=b;this.fireEvent("iconchange",this,c,b)},setIconCls:function(b){var d=this,a=d.iconEl,c=d.iconCls;if(a){if(d.iconCls){a.removeCls(d.iconCls)}if(b){a.addCls(b)}}d.iconCls=b;d.fireEvent("iconchange",d,c,b)},setText:function(d){var c=this,b=c.textEl||c.el,a=c.text;c.text=d;if(c.rendered){b.update(d||"");c.ownerCt.updateLayout()}c.fireEvent("textchange",c,a,d)},getTipAttr:function(){return this.tooltipType=="qtip"?"data-qtip":"title"},clearTip:function(){if(Ext.quickTipsActive&&Ext.isObject(this.tooltip)){Ext.tip.QuickTipManager.unregister(this.itemEl)}},setTooltip:function(c,a){var b=this;if(b.rendered){if(!a){b.clearTip()}if(Ext.quickTipsActive&&Ext.isObject(c)){Ext.tip.QuickTipManager.register(Ext.apply({target:b.itemEl.id},c));b.tooltip=c}else{b.itemEl.dom.setAttribute(b.getTipAttr(),c)}}else{b.tooltip=c}return b}});Ext.define("Ext.menu.CheckItem",{extend:Ext.menu.Item,alias:"widget.menucheckitem",checkedCls:Ext.baseCSSPrefix+"menu-item-checked",uncheckedCls:Ext.baseCSSPrefix+"menu-item-unchecked",groupCls:Ext.baseCSSPrefix+"menu-group-icon",hideOnClick:false,checkChangeDisabled:false,childEls:["itemEl","iconEl","textEl","checkEl"],showCheckbox:true,renderTpl:['',"{text}","","{%var showCheckbox = values.showCheckbox,",' rightCheckbox = showCheckbox && values.hasIcon && (values.iconAlign !== "left"), textCls = rightCheckbox ? "'+Ext.baseCSSPrefix+'right-check-item-text" : "";%}','target="{hrefTarget}" hidefocus="true" unselectable="on"','',' tabIndex="{tabIndex}"',"",">",'{%if (values.hasIcon && (values.iconAlign !== "left")) {%}','","{%} else if (showCheckbox){%}",'',"{%}%}",'style="margin-right: 17px;" >{text}',"{%if (rightCheckbox) {%}",'',"{%} else if (values.arrowCls) {%}",'',"{%}%}","",""],initComponent:function(){var a=this;a.checked=!!a.checked;a.addEvents("beforecheckchange","checkchange");a.callParent(arguments);Ext.menu.Manager.registerCheckable(a);if(a.group){if(!(a.iconCls||a.icon||a.glyph)){a.iconCls=a.groupCls}if(a.initialConfig.hideOnClick!==false){a.hideOnClick=true}}},beforeRender:function(){this.callParent();this.renderData.showCheckbox=this.showCheckbox},afterRender:function(){var a=this;a.callParent();a.checked=!a.checked;a.setChecked(!a.checked,true);if(a.checkChangeDisabled){a.disableCheckChange()}},disableCheckChange:function(){var b=this,a=b.checkEl;if(a){a.addCls(b.disabledCls)}if(!(Ext.isIE10p||(Ext.isIE9&&Ext.isStrict))&&b.rendered){b.el.repaint()}b.checkChangeDisabled=true},enableCheckChange:function(){var b=this,a=b.checkEl;if(a){a.removeCls(b.disabledCls)}b.checkChangeDisabled=false},onClick:function(b){var a=this;if(!a.disabled&&!a.checkChangeDisabled&&!(a.checked&&a.group)){a.setChecked(!a.checked)}this.callParent([b])},onDestroy:function(){Ext.menu.Manager.unregisterCheckable(this);this.callParent(arguments)},setChecked:function(c,a){var b=this;if(b.checked!==c&&(a||b.fireEvent("beforecheckchange",b,c)!==false)){if(b.el){b.el[c?"addCls":"removeCls"](b.checkedCls)[!c?"addCls":"removeCls"](b.uncheckedCls)}b.checked=c;Ext.menu.Manager.onCheckChange(b,c);if(!a){Ext.callback(b.checkHandler,b.scope,[b,c]);b.fireEvent("checkchange",b,c)}}}});Ext.define("Ext.menu.KeyNav",{extend:Ext.util.KeyNav,constructor:function(a){var b=this;b.menu=a.target;b.callParent([Ext.apply({down:b.down,enter:b.enter,esc:b.escape,left:b.left,right:b.right,space:b.enter,tab:b.tab,up:b.up},a)])},down:function(b){var a=this,c=a.menu.focusedItem;if(c&&b.getKey()==Ext.EventObject.DOWN&&a.isWhitelisted(c)){return true}a.focusNextItem(1)},enter:function(b){var c=this.menu,a=c.focusedItem;if(c.activeItem){c.onClick(b)}else{if(a&&a.isFormField){return true}}},escape:function(a){Ext.menu.Manager.hideAll()},focusNextItem:function(b){var a=this.menu,e=a.items,h=a.focusedItem,g=h?e.indexOf(h):-1,i=g+b,d=e.length,c=0,j;while(c=d){i=0}}j=e.getAt(i);if(a.canActivateItem(j)){a.setActiveItem(j);break}i+=b;++c}},isWhitelisted:function(a){return Ext.FocusManager.isWhitelisted(a)},left:function(a){var b=this.menu,c=b.focusedItem;if(c&&this.isWhitelisted(c)){return true}b.hide();if(b.parentMenu){b.parentMenu.focus()}},right:function(c){var d=this.menu,g=d.focusedItem,a=d.activeItem,b;if(g&&this.isWhitelisted(g)){return true}if(a){b=d.activeItem.menu;if(b){a.expandMenu(0);b.setActiveItem(b.child(":focusable"))}}},tab:function(b){var a=this;if(b.shiftKey){a.up(b)}else{a.down(b)}},up:function(b){var a=this,c=a.menu.focusedItem;if(c&&b.getKey()==Ext.EventObject.UP&&a.isWhitelisted(c)){return true}a.focusNextItem(-1)}});Ext.define("Ext.menu.Separator",{extend:Ext.menu.Item,alias:"widget.menuseparator",canActivate:false,focusable:false,hideOnClick:false,plain:true,separatorCls:Ext.baseCSSPrefix+"menu-item-separator",text:" ",beforeRender:function(a,c){var b=this;b.callParent();b.addCls(b.separatorCls)}});Ext.define("Ext.menu.Menu",{extend:Ext.panel.Panel,alias:"widget.menu",enableKeyNav:true,allowOtherMenus:false,ariaRole:"menu",floating:true,constrain:true,hidden:true,hideMode:"visibility",ignoreParentClicks:false,isMenu:true,showSeparator:true,minWidth:undefined,defaultMinWidth:120,initComponent:function(){var b=this,d=Ext.baseCSSPrefix,a=[d+"menu"],c=b.bodyCls?[b.bodyCls]:[],e=b.floating!==false;b.addEvents("click","mouseenter","mouseleave","mouseover");Ext.menu.Manager.register(b);if(b.plain){a.push(d+"menu-plain")}b.cls=a.join(" ");c.push(d+"menu-body",Ext.dom.Element.unselectableCls);b.bodyCls=c.join(" ");if(!b.layout){b.layout={type:"vbox",align:"stretchmax",overflowHandler:"Scroller"}}if(e){if(b.minWidth===undefined){b.minWidth=b.defaultMinWidth}}else{b.hidden=!!b.initialConfig.hidden}b.callParent(arguments)},registerWithOwnerCt:function(){if(this.floating){this.ownerCt=null;Ext.WindowManager.register(this)}},initHierarchyEvents:Ext.emptyFn,isVisible:function(){return this.callParent()},getHierarchyState:function(){var a=this.callParent();a.hidden=this.hidden;return a},beforeRender:function(){this.callParent(arguments);if(!this.getSizeModel().width.shrinkWrap){this.layout.align="stretch"}},onBoxReady:function(){var a=this;a.callParent(arguments);if(a.showSeparator){a.iconSepEl=a.layout.getElementTarget().insertFirst({cls:Ext.baseCSSPrefix+"menu-icon-separator",html:" "})}a.mon(a.el,{click:a.onClick,mouseover:a.onMouseOver,scope:a});a.mouseMonitor=a.el.monitorMouseLeave(100,a.onMouseLeave,a);if(a.enableKeyNav){a.keyNav=new Ext.menu.KeyNav({target:a,keyMap:a.getKeyMap()})}},getRefOwner:function(){return this.parentMenu||this.ownerButton||this.callParent(arguments)},canActivateItem:function(a){return a&&!a.isDisabled()&&a.isVisible()&&(a.canActivate||a.getXTypes().indexOf("menuitem")<0)},deactivateActiveItem:function(b){var c=this,d=c.activeItem,a=c.focusedItem;if(d){d.deactivate();if(!d.activated){delete c.activeItem}}if(a&&b){a.blur();delete c.focusedItem}},getFocusEl:function(){return this.focusedItem||this.el},hide:function(){this.deactivateActiveItem(true);this.callParent(arguments)},getItemFromEvent:function(a){return this.getChildByElement(a.getTarget())},lookupComponent:function(b){var a=this;if(typeof b=="string"){b=a.lookupItemFromString(b)}else{if(Ext.isObject(b)){b=a.lookupItemFromObject(b)}}b.minWidth=b.minWidth||a.minWidth;return b},lookupItemFromObject:function(c){var b=this,d=Ext.baseCSSPrefix,a;if(!c.isComponent){if(!c.xtype){c=Ext.create("Ext.menu."+(Ext.isBoolean(c.checked)?"Check":"")+"Item",c)}else{c=Ext.ComponentManager.create(c,c.xtype)}}if(c.isMenuItem){c.parentMenu=b}if(!c.isMenuItem&&!c.dock){a=[d+"menu-item-cmp"];if(!b.plain&&(c.indent!==false||c.iconCls==="no-icon")){a.push(d+"menu-item-indent")}if(c.rendered){c.el.addCls(a)}else{c.cls=(c.cls||"")+" "+a.join(" ")}}return c},lookupItemFromString:function(a){return(a=="separator"||a=="-")?new Ext.menu.Separator():new Ext.menu.Item({canActivate:false,hideOnClick:false,plain:true,text:a})},onClick:function(c){var b=this,a;if(b.disabled){c.stopEvent();return}a=(c.type==="click")?b.getItemFromEvent(c):b.activeItem;if(a&&a.isMenuItem){if(!a.menu||!b.ignoreParentClicks){a.onClick(c)}else{c.stopEvent()}}if(!a||a.disabled){a=undefined}b.fireEvent("click",b,a,c)},onDestroy:function(){var a=this;Ext.menu.Manager.unregister(a);a.parentMenu=a.ownerButton=null;if(a.rendered){a.el.un(a.mouseMonitor);Ext.destroy(a.keyNav);a.keyNav=null}a.callParent(arguments)},onMouseLeave:function(b){var a=this;a.deactivateActiveItem();if(a.disabled){return}a.fireEvent("mouseleave",a,b)},onMouseOver:function(h){var g=this,i=h.getRelatedTarget(),b=!g.el.contains(i),d=g.getItemFromEvent(h),c=g.parentMenu,a=g.parentItem;if(b&&c){c.setActiveItem(a);a.cancelDeferHide();c.mouseMonitor.mouseenter()}if(g.disabled){return}if(d&&!d.activated){g.setActiveItem(d);if(d.activated&&d.expandMenu){d.expandMenu()}}if(b){g.fireEvent("mouseenter",g,h)}g.fireEvent("mouseover",g,d,h)},setActiveItem:function(b){var a=this;if(b&&(b!=a.activeItem)){a.deactivateActiveItem();if(a.canActivateItem(b)){if(b.activate){b.activate();if(b.activated){a.activeItem=b;a.focusedItem=b;a.focus()}}else{b.focus();a.focusedItem=b}}b.el.scrollIntoView(a.layout.getRenderTarget())}},showBy:function(b,d,c){var a=this;a.callParent(arguments);if(!a.hidden){a.setVerticalPosition()}return a},show:function(){var c=this,b,a,d=c.maxHeight;if(!c.rendered){c.doAutoRender()}if(c.floating){b=c.el.parent();a=b.getViewSize().height;c.maxHeight=Math.min(d||a,a)}c.callParent(arguments);c.maxHeight=d;return c},setVerticalPosition:function(){var d=this,g,e=d.getY(),h=e,j=d.getHeight(),b=Ext.Element.getViewportHeight().height,c=d.el.parent(),a=c.getViewSize().height,i=e-c.getScroll().top;c=null;if(d.floating){g=d.maxHeight?d.maxHeight:a-i;if(j>a){h=e-i}else{if(gb){h=b-j}}}}d.setY(h)}});Ext.define("Ext.menu.ColorPicker",{extend:Ext.menu.Menu,alias:"widget.colormenu",hideOnClick:true,pickerId:null,initComponent:function(){var b=this,a=Ext.apply({},b.initialConfig);delete a.listeners;Ext.apply(b,{plain:true,showSeparator:false,items:Ext.applyIf({cls:Ext.baseCSSPrefix+"menu-color-item",id:b.pickerId,xtype:"colorpicker"},a)});b.callParent(arguments);b.picker=b.down("colorpicker");b.relayEvents(b.picker,["select"]);if(b.hideOnClick){b.on("select",b.hidePickerOnSelect,b)}},hidePickerOnSelect:function(){Ext.menu.Manager.hideAll()}});Ext.define("Ext.menu.DatePicker",{extend:Ext.menu.Menu,alias:"widget.datemenu",hideOnClick:true,pickerId:null,initComponent:function(){var b=this,a=Ext.apply({},b.initialConfig);delete a.listeners;Ext.apply(b,{showSeparator:false,plain:true,border:false,bodyPadding:0,items:Ext.applyIf({cls:Ext.baseCSSPrefix+"menu-date-item",id:b.pickerId,xtype:"datepicker"},a)});b.callParent(arguments);b.picker=b.down("datepicker");b.relayEvents(b.picker,["select"]);if(b.hideOnClick){b.on("select",b.hidePickerOnSelect,b)}},hidePickerOnSelect:function(){Ext.menu.Manager.hideAll()}});Ext.define("Ext.panel.Tool",{extend:Ext.Component,alias:"widget.tool",isTool:true,baseCls:Ext.baseCSSPrefix+"tool",disabledCls:Ext.baseCSSPrefix+"tool-disabled",toolPressedCls:Ext.baseCSSPrefix+"tool-pressed",toolOverCls:Ext.baseCSSPrefix+"tool-over",ariaRole:"button",childEls:["toolEl"],renderTpl:[''],tooltipType:"qtip",stopEvent:true,height:15,width:15,initComponent:function(){var a=this;a.addEvents("click");a.type=a.type||a.id;Ext.applyIf(a.renderData,{baseCls:a.baseCls,blank:Ext.BLANK_IMAGE_URL,type:a.type});a.tooltip=a.tooltip||a.qtip;a.callParent()},afterRender:function(){var b=this,a;b.callParent(arguments);b.el.on({click:b.onClick,mousedown:b.onMouseDown,mouseover:b.onMouseOver,mouseout:b.onMouseOut,scope:b});if(b.tooltip){if(Ext.quickTipsActive&&Ext.isObject(b.tooltip)){Ext.tip.QuickTipManager.register(Ext.apply({target:b.id},b.tooltip))}else{a=b.tooltipType=="qtip"?"data-qtip":"title";b.el.dom.setAttribute(a,b.tooltip)}}},getFocusEl:function(){return this.el},setType:function(a){var b=this,c=b.type;b.type=a;if(b.rendered){if(c){b.toolEl.removeCls(b.baseCls+"-"+c)}b.toolEl.addCls(b.baseCls+"-"+a)}else{b.renderData.type=a}return b},onClick:function(c,b){var a=this;if(a.disabled){return false}a.el.removeCls(a.toolPressedCls);a.el.removeCls(a.toolOverCls);if(a.stopEvent!==false){c.stopEvent()}Ext.callback(a.handler,a.scope||a,[c,b,a.ownerCt,a]);a.fireEvent("click",a,c);return true},onDestroy:function(){if(Ext.quickTipsActive&&Ext.isObject(this.tooltip)){Ext.tip.QuickTipManager.unregister(this.id)}this.callParent()},onMouseDown:function(){if(this.disabled){return false}this.el.addCls(this.toolPressedCls)},onMouseOver:function(){if(this.disabled){return false}this.el.addCls(this.toolOverCls)},onMouseOut:function(){this.el.removeCls(this.toolOverCls)}});Ext.define("Ext.resizer.SplitterTracker",{extend:Ext.dd.DragTracker,enabled:true,overlayCls:Ext.baseCSSPrefix+"resizable-overlay",createDragOverlay:function(){var a;a=this.overlay=Ext.getBody().createChild({cls:this.overlayCls,html:" "});a.unselectable();a.setSize(Ext.Element.getViewWidth(true),Ext.Element.getViewHeight(true));a.show()},getPrevCmp:function(){var a=this.getSplitter();return a.previousSibling(":not([hidden])")},getNextCmp:function(){var a=this.getSplitter();return a.nextSibling(":not([hidden])")},onBeforeStart:function(i){var d=this,g=d.getPrevCmp(),a=d.getNextCmp(),c=d.getSplitter().collapseEl,h=i.getTarget(),b;if(!g||!a){return false}if(c&&h===d.getSplitter().collapseEl.dom){return false}if(a.collapsed||g.collapsed){return false}d.prevBox=g.getEl().getBox();d.nextBox=a.getEl().getBox();d.constrainTo=b=d.calculateConstrainRegion();if(!b){return false}return b},onStart:function(b){var a=this.getSplitter();this.createDragOverlay();a.addCls(a.baseCls+"-active")},calculateConstrainRegion:function(){var h=this,a=h.getSplitter(),i=a.getWidth(),j=a.defaultSplitMin,b=a.orientation,e=h.prevBox,k=h.getPrevCmp(),c=h.nextBox,g=h.getNextCmp(),m,l,d;if(b==="vertical"){d={prevCmp:k,nextCmp:g,prevBox:e,nextBox:c,defaultMin:j,splitWidth:i};m=new Ext.util.Region(e.y,h.getVertPrevConstrainRight(d),e.bottom,h.getVertPrevConstrainLeft(d));l=new Ext.util.Region(c.y,h.getVertNextConstrainRight(d),c.bottom,h.getVertNextConstrainLeft(d))}else{m=new Ext.util.Region(e.y+(k.minHeight||j),e.right,(k.maxHeight?e.y+k.maxHeight:c.bottom-(g.minHeight||j))+i,e.x);l=new Ext.util.Region((g.maxHeight?c.bottom-g.maxHeight:e.y+(k.minHeight||j))-i,c.right,c.bottom-(g.minHeight||j),c.x)}return m.intersect(l)},performResize:function(n,h){var p=this,a=p.getSplitter(),j=a.orientation,q=p.getPrevCmp(),o=p.getNextCmp(),b=a.ownerCt,l=b.query(">[flex]"),m=l.length,c=j==="vertical",k=0,g=c?"width":"height",d=0,r,s;for(;kq){v=q}}if(v-m<2){return null}n=new Ext.util.Region(p,x,k,g);y.constraintAdjusters[y.getCollapseDirection()](n,m,v,a);y.dragInfo={minRange:m,maxRange:v,targetSize:b};return n},constraintAdjusters:{left:function(c,a,b,d){c[0]=c.x=c.left=c.right+a;c.right+=b+d.getWidth()},top:function(c,a,b,d){c[1]=c.y=c.top=c.bottom+a;c.bottom+=b+d.getHeight()},bottom:function(c,a,b,d){c.bottom=c.top-a;c.top-=b+d.getHeight()},right:function(c,a,b,d){c.right=c.left-a;c[0]=c.x=c.left=c.x-b+d.getWidth()}},onBeforeStart:function(h){var k=this,b=k.splitter,a=b.collapseTarget,m=b.neighbors,d=k.getSplitter().collapseEl,j=h.getTarget(),c=m.length,g,l;if(d&&j===b.collapseEl.dom){return false}if(a.collapsed){return false}for(g=0;gc){d.minWidth=d.el.getWidth()*a}else{d.minHeight=d.el.getHeight()*c}}if(d.throttle){e=Ext.Function.createThrottled(function(){Ext.resizer.ResizeTracker.prototype.resize.apply(d,arguments)},d.throttle);d.resize=function(h,i,g){if(g){Ext.resizer.ResizeTracker.prototype.resize.apply(d,arguments)}else{e.apply(null,arguments)}}}},onBeforeStart:function(a){this.startBox=this.target.getBox()},getDynamicTarget:function(){var a=this,b=a.target;if(a.dynamic){return b}else{if(!a.proxy){a.proxy=a.createProxy(b)}}a.proxy.show();return a.proxy},createProxy:function(c){var b,a=this.proxyCls;if(c.isComponent){b=c.getProxy().addCls(a)}else{b=c.createProxy({tag:"div",cls:a,id:c.id+"-rzproxy"},Ext.getBody())}b.removeCls(Ext.baseCSSPrefix+"proxy-el");return b},onStart:function(a){this.activeResizeHandle=Ext.get(this.getDragTarget().id);if(!this.dynamic){this.resize(this.startBox,{horizontal:"none",vertical:"none"})}},onDrag:function(a){if(this.dynamic||this.proxy){this.updateDimensions(a)}},updateDimensions:function(s,m){var t=this,c=t.activeResizeHandle.region,g=t.getOffset(t.constrainTo?"dragTarget":null),k=t.startBox,h,p=0,u=0,j,q,a=0,w=0,v,n=g[0]<0?"right":"left",r=g[1]<0?"down":"up",i,b,d,o,l;c=t.convertRegionName(c);switch(c){case"south":u=g[1];b=2;break;case"north":u=-g[1];w=-u;b=2;break;case"east":p=g[0];b=1;break;case"west":p=-g[0];a=-p;b=1;break;case"northeast":u=-g[1];w=-u;p=g[0];i=[k.x,k.y+k.height];b=3;break;case"southeast":u=g[1];p=g[0];i=[k.x,k.y];b=3;break;case"southwest":p=-g[0];a=-p;u=g[1];i=[k.x+k.width,k.y];b=3;break;case"northwest":u=-g[1];w=-u;p=-g[0];a=-p;i=[k.x+k.width,k.y+k.height];b=3;break}d={width:k.width+p,height:k.height+u,x:k.x+a,y:k.y+w};j=Ext.Number.snap(d.width,t.widthIncrement);q=Ext.Number.snap(d.height,t.heightIncrement);if(j!=d.width||q!=d.height){switch(c){case"northeast":d.y-=q-d.height;break;case"north":d.y-=q-d.height;break;case"southwest":d.x-=j-d.width;break;case"west":d.x-=j-d.width;break;case"northwest":d.x-=j-d.width;d.y-=q-d.height}d.width=j;d.height=q}if(d.widtht.maxWidth){d.width=Ext.Number.constrain(d.width,t.minWidth,t.maxWidth);if(a){d.x=k.x+(k.width-d.width)}}else{t.lastX=d.x}if(d.heightt.maxHeight){d.height=Ext.Number.constrain(d.height,t.minHeight,t.maxHeight);if(w){d.y=k.y+(k.height-d.height)}}else{t.lastY=d.y}if(t.preserveRatio||s.shiftKey){h=t.startBox.width/t.startBox.height;o=Math.min(Math.max(t.minHeight,d.width/h),t.maxHeight);l=Math.min(Math.max(t.minWidth,d.height*h),t.maxWidth);if(b==1){d.height=o}else{if(b==2){d.width=l}else{v=Math.abs(i[0]-this.lastXY[0])/Math.abs(i[1]-this.lastXY[1]);if(v>h){d.height=o}else{d.width=l}if(c=="northeast"){d.y=k.y-(d.height-k.height)}else{if(c=="northwest"){d.y=k.y-(d.height-k.height);d.x=k.x-(d.width-k.width)}else{if(c=="southwest"){d.x=k.x-(d.width-k.width)}}}}}}if(u===0){r="none"}if(p===0){n="none"}t.resize(d,{horizontal:n,vertical:r},m)},getResizeTarget:function(a){return a?this.target:this.getDynamicTarget()},resize:function(c,e,a){var b=this,d=b.getResizeTarget(a);d.setBox(c);if(b.originalTarget&&(b.dynamic||a)){b.originalTarget.setBox(c)}},onEnd:function(a){this.updateDimensions(a,true);if(this.proxy){this.proxy.hide()}},convertRegionName:function(a){return a}});Ext.define("Ext.resizer.Resizer",{mixins:{observable:Ext.util.Observable},alternateClassName:"Ext.Resizable",handleCls:Ext.baseCSSPrefix+"resizable-handle",pinnedCls:Ext.baseCSSPrefix+"resizable-pinned",overCls:Ext.baseCSSPrefix+"resizable-over",wrapCls:Ext.baseCSSPrefix+"resizable-wrap",delimiterRe:/(?:\s*[,;]\s*)|\s+/,dynamic:true,handles:"s e se",height:null,width:null,heightIncrement:0,widthIncrement:0,minHeight:20,minWidth:20,maxHeight:10000,maxWidth:10000,pinned:false,preserveRatio:false,transparent:false,possiblePositions:{n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"},constructor:function(b){var m=this,j,q,s,r=m.handles,c,p,g,d=0,o,n=[],h,a,e,l,k=Ext.dom.Element.unselectableCls;m.addEvents("beforeresize","resizedrag","resize");if(Ext.isString(b)||Ext.isElement(b)||b.dom){j=b;b=arguments[1]||{};b.target=j}m.mixins.observable.constructor.call(m,b);j=m.target;if(j){if(j.isComponent){j.addClsWithUI("resizable");m.el=j.getEl();if(j.minWidth){m.minWidth=j.minWidth}if(j.minHeight){m.minHeight=j.minHeight}if(j.maxWidth){m.maxWidth=j.maxWidth}if(j.maxHeight){m.maxHeight=j.maxHeight}if(j.floating){if(!m.hasOwnProperty("handles")){m.handles="n ne e se s sw w nw"}}}else{m.el=m.target=Ext.get(j)}}else{m.target=m.el=Ext.get(m.el)}s=m.el.dom.tagName.toUpperCase();if(s=="TEXTAREA"||s=="IMG"||s=="TABLE"){m.originalTarget=m.target;q=m.el;e=q.getBox();m.target=m.el=m.el.wrap({cls:m.wrapCls,id:m.el.id+"-rzwrap",style:q.getStyles("margin-top","margin-bottom")});m.el.setPositioning(q.getPositioning());q.clearPositioning();m.el.setBox(e);q.setStyle("position","absolute")}m.el.position();if(m.pinned){m.el.addCls(m.pinnedCls)}m.resizeTracker=new Ext.resizer.ResizeTracker({disabled:m.disabled,target:m.target,constrainTo:m.constrainTo,overCls:m.overCls,throttle:m.throttle,originalTarget:m.originalTarget,delegate:"."+m.handleCls,dynamic:m.dynamic,preserveRatio:m.preserveRatio,heightIncrement:m.heightIncrement,widthIncrement:m.widthIncrement,minHeight:m.minHeight,maxHeight:m.maxHeight,minWidth:m.minWidth,maxWidth:m.maxWidth});m.resizeTracker.on({mousedown:m.onBeforeResize,drag:m.onResize,dragend:m.onResizeEnd,scope:m});if(m.handles=="all"){m.handles="n s e w ne nw se sw"}r=m.handles=m.handles.split(m.delimiterRe);p=m.possiblePositions;g=r.length;c=m.handleCls+" "+m.handleCls+"-{0}";if(m.target.isComponent){l=m.target.baseCls;c+=" "+l+"-handle "+l+"-handle-{0}";if(Ext.supports.CSS3BorderRadius){c+=" "+l+"-handle-{0}-br"}}h=Ext.isIE6?' style="height:'+m.el.getHeight()+'px"':"";for(;d")}}Ext.DomHelper.append(m.el,n.join(""));for(d=0;d=a.value){g=a.value}}c.setValue(b,g,false);c.fireEvent("drag",c,h,d)}},getValueFromTracker:function(){var a=this.slider,b=a.getTrackpoint(this.tracker.getXY());if(b!==undefined){return a.reversePixelValue(b)}},onDragEnd:function(d){var b=this,a=b.slider,c=b.value;a.onDragEnd(b,d);b.el.removeCls(Ext.baseCSSPrefix+"slider-thumb-drag");b.dragging=a.dragging=false;a.fireEvent("dragend",a,d);if(b.dragStartValue!=c){a.fireEvent("changecomplete",a,c,b)}},destroy:function(){Ext.destroy(this.tracker)}});Ext.define("Ext.slider.Tip",{extend:Ext.tip.Tip,minWidth:10,alias:"widget.slidertip",offsets:null,align:null,position:"",defaultVerticalPosition:"left",defaultHorizontalPosition:"top",isSliderTip:true,init:function(c){var b=this,d,a;if(!b.position){b.position=c.vertical?b.defaultVerticalPosition:b.defaultHorizontalPosition}switch(b.position){case"top":a=[0,-10];d="b-t?";break;case"bottom":a=[0,10];d="t-b?";break;case"left":a=[-10,0];d="r-l?";break;case"right":a=[10,0];d="l-r?"}if(!b.align){b.align=d}if(!b.offsets){b.offsets=a}c.on({scope:b,dragstart:b.onSlide,drag:b.onSlide,dragend:b.hide,destroy:b.destroy})},onSlide:function(c,d,a){var b=this;b.show();b.update(b.getText(a));b.el.alignTo(a.el,b.align,b.offsets)},getText:function(a){return String(a.value)}});Ext.define("Ext.slider.Multi",{extend:Ext.form.field.Base,alias:"widget.multislider",alternateClassName:"Ext.slider.MultiSlider",childEls:["endEl","innerEl"],fieldSubTpl:['
    ','","
    ",{renderThumbs:function(g,e){var j=e.$comp,h=0,c=j.thumbs,b=c.length,d,a;for(;hg?g:c.value}e.syncThumbs()},setValue:function(e,k,b,d){var j=this,h=j.thumbs,a,g,c,l;if(Ext.isArray(e)){l=e;b=k;for(c=0,g=l.length;c0)?a.changedTouches[0]:a;return new this(a.pageX,a.pageY)}},constructor:function(a,b){this.callParent([b,a,b,a])},toString:function(){return"Point["+this.x+","+this.y+"]"},equals:function(a){return(this.x==a.x&&this.y==a.y)},isWithin:function(b,a){if(!Ext.isObject(a)){a={x:a,y:a}}return(this.x<=b.x+a.x&&this.x>=b.x-a.x&&this.y<=b.y+a.y&&this.y>=b.y-a.y)},isContainedBy:function(a){if(!(a instanceof Ext.util.Region)){a=Ext.get(a.el||a).getRegion()}return a.contains(this)},roundedEquals:function(a){return(Math.round(this.x)==Math.round(a.x)&&Math.round(this.y)==Math.round(a.y))}},function(){this.prototype.translate=Ext.util.Region.prototype.translateBy});Ext.define("Ext.tab.Bar",{extend:Ext.panel.Header,alias:"widget.tabbar",baseCls:Ext.baseCSSPrefix+"tab-bar",isTabBar:true,defaultType:"tab",plain:false,childEls:["body","strip"],renderTpl:['
    {baseCls}-body-{ui} {parent.baseCls}-body-{parent.ui}-{.}" style="{bodyStyle}">',"{%this.renderContainer(out,values)%}","
    ",'
    {baseCls}-strip-{ui}',' {parent.baseCls}-strip-{parent.ui}-{.}','">',"
    "],_reverseDockNames:{left:"right",right:"left"},initComponent:function(){var a=this;if(a.plain){a.addCls(a.baseCls+"-plain")}a.addClsWithUI(a.orientation);a.addEvents("change");a.callParent(arguments);Ext.merge(a.layout,a.initialConfig.layout);a.layout.align=(a.orientation=="vertical")?"left":"top";a.layout.overflowHandler=new Ext.layout.container.boxOverflow.Scroller(a.layout);a.remove(a.titleCmp);delete a.titleCmp;Ext.apply(a.renderData,{bodyCls:a.bodyCls,dock:a.dock})},onRender:function(){var a=this;a.callParent();if(a.orientation==="vertical"&&(Ext.isIE8||Ext.isIE9)&&Ext.isStrict){a.el.on({mousemove:a.onMouseMove,scope:a})}},afterRender:function(){var a=this.layout;this.callParent();if(Ext.isIE9&&Ext.isStrict&&this.orientation==="vertical"){a.innerCt.on("scroll",function(){a.innerCt.dom.scrollLeft=0})}},afterLayout:function(){this.adjustTabPositions();this.callParent(arguments)},adjustTabPositions:function(){var a=this.items.items,b=a.length,c;if(!Ext.isIE9m){if(this.dock==="right"){while(b--){c=a[b];c.el.setStyle("left",c.lastBox.width+"px")}}else{if(this.dock==="left"){while(b--){c=a[b];c.el.setStyle("left",-c.lastBox.height+"px")}}}}},getLayout:function(){var a=this;a.layout.type=(a.orientation==="horizontal")?"hbox":"vbox";return a.callParent(arguments)},onAdd:function(a){a.position=this.dock;this.callParent(arguments)},onRemove:function(a){var b=this;if(a===b.previousTab){b.previousTab=null}b.callParent(arguments)},afterComponentLayout:function(b){var c=this,a=c.needsScroll;c.callParent(arguments);if(a){c.layout.overflowHandler.scrollToItem(c.activeTab)}delete c.needsScroll},onClick:function(h,g){var d=this,j=d.tabPanel,i,c,b,a;if(h.getTarget("."+Ext.baseCSSPrefix+"box-scroller")){return}if(d.orientation==="vertical"&&(Ext.isIE8||Ext.isIE9)&&Ext.isStrict){a=d.getTabInfoFromPoint(h.getXY());c=a.tab;b=a.close}else{i=h.getTarget("."+Ext.tab.Tab.prototype.baseCls);c=i&&Ext.getCmp(i.id);b=c&&c.closeEl&&(g===c.closeEl.dom)}if(b){h.preventDefault()}if(c&&c.isDisabled&&!c.isDisabled()){if(c.closable&&b){c.onCloseClick()}else{if(j){j.setActiveTab(c.card)}else{d.setActiveTab(c)}c.focus()}}},onMouseMove:function(g){var d=this,b=d._overTab,a,c;if(g.getTarget("."+Ext.baseCSSPrefix+"box-scroller")){return}a=d.getTabInfoFromPoint(g.getXY());c=a.tab;if(c!==b){if(b&&b.rendered){b.onMouseLeave(g);d._overTab=null}if(c){c.onMouseEnter(g);d._overTab=c;if(!c.disabled){d.el.setStyle("cursor","pointer")}}else{d.el.setStyle("cursor","default")}}},onMouseLeave:function(b){var a=this._overTab;if(a&&a.rendered){a.onMouseLeave(b)}},getTabInfoFromPoint:function(g){var A=this,w=A.items.items,e=w.length,o=A.layout.innerCt,u=o.getXY(),t=new Ext.util.Point(g[0],g[1]),v=0,x,b,a,p,y,j,h,d,r,l,k,n,m,s,q,z,c;for(;v1){return(b.previousTab&&b.previousTab!==a&&!b.previousTab.disabled)?b.previousTab:(a.next("tab[disabled=false]")||a.prev("tab[disabled=false]"))}},setActiveTab:function(b,a){var c=this;if(!b.disabled&&b!==c.activeTab){if(c.activeTab){if(c.activeTab.isDestroyed){c.previousTab=null}else{c.previousTab=c.activeTab;c.activeTab.deactivate()}}b.activate();c.activeTab=b;c.needsScroll=true;if(!a){c.fireEvent("change",c,b,b.card);c.updateLayout()}}}});Ext.define("Ext.tree.Column",{extend:Ext.grid.column.Column,alias:"widget.treecolumn",tdCls:Ext.baseCSSPrefix+"grid-cell-treecolumn",autoLock:true,lockable:false,draggable:false,hideable:false,treePrefix:Ext.baseCSSPrefix+"tree-",elbowPrefix:Ext.baseCSSPrefix+"tree-elbow-",expanderCls:Ext.baseCSSPrefix+"tree-expander",imgText:'',checkboxText:'',initComponent:function(){var a=this;a.origRenderer=a.renderer||a.defaultRenderer;a.origScope=a.scope||window;a.renderer=a.treeRenderer;a.scope=a;a.callParent()},treeRenderer:function(m,o,c,b,l,e,k){var t=this,s=[],q=Ext.String.format,v=c.getDepth(),r=t.treePrefix,d=t.elbowPrefix,n=t.expanderCls,i=t.imgText,w=t.checkboxText,h=t.origRenderer.apply(t.origScope,arguments),g=Ext.BLANK_IMAGE_URL,p=c.get("href"),u=c.get("hrefTarget"),a=c.get("cls"),j=t.getChildCls?t.getChildCls()+" ":"";while(c){if(!c.isRoot()||(c.isRoot()&&k.rootVisible)){if(c.getDepth()===v){s.unshift(q(i,j+r+"icon "+r+"icon"+(c.get("icon")?"-inline ":(c.isLeaf()?"-leaf ":"-parent "))+(c.get("iconCls")||""),c.get("icon")||g));if(c.get("checked")!==null){s.unshift(q(w,j+(r+"checkbox")+(c.get("checked")?" "+r+"checkbox-checked":""),c.get("checked")?'aria-checked="true"':""));if(c.get("checked")){o.tdCls+=(" "+r+"checked")}}if(c.isLast()){if(c.isExpandable()){s.unshift(q(i,(j+d+"end-plus "+n),g))}else{s.unshift(q(i,(j+d+"end"),g))}}else{if(c.isExpandable()){s.unshift(q(i,(j+d+"plus "+n),g))}else{s.unshift(q(i,(j+r+"elbow"),g))}}}else{if(c.isLast()||c.getDepth()===0){s.unshift(q(i,(j+d+"empty"),g))}else{if(c.getDepth()!==0){s.unshift(q(i,(j+d+"line"),g))}}}}c=c.parentNode}if(p){s.push('')}else{s.push('')}s.push(h);if(p){s.push("")}else{s.push("")}if(a){o.tdCls+=" "+a}return s.join("")},defaultRenderer:Ext.identityFn});Ext.define("Ext.selection.CellModel",{extend:Ext.selection.Model,alias:"selection.cellmodel",isCellModel:true,enableKeyNav:true,preventWrap:false,noSelection:{row:-1,column:-1},constructor:function(){this.addEvents("deselect","select");this.callParent(arguments)},bindComponent:function(a){var c=this,b=a.ownerCt;c.primaryView=a;c.views=c.views||[];c.views.push(a);c.bindStore(a.getStore(),true);a.on({cellmousedown:c.onMouseDown,refresh:c.onViewRefresh,scope:c});if(b.optimizedColumnMove!==false){b.on("columnmove",c.onColumnMove,c)}if(c.enableKeyNav){c.initKeyNav(a)}},initKeyNav:function(a){var b=this;if(!a.rendered){a.on("render",Ext.Function.bind(b.initKeyNav,b,[a],0),b,{single:true});return}a.el.set({tabIndex:-1});b.keyNav=new Ext.util.KeyNav({target:a.el,ignoreInputFields:true,up:b.onKeyUp,down:b.onKeyDown,right:b.onKeyRight,left:b.onKeyLeft,tab:b.onKeyTab,scope:b})},getHeaderCt:function(){var b=this.getCurrentPosition(),a=b?b.view:this.primaryView;return a.headerCt},onKeyUp:function(b,a){this.doMove("up",b)},onKeyDown:function(b,a){this.doMove("down",b)},onKeyLeft:function(b,a){this.doMove("left",b)},onKeyRight:function(b,a){this.doMove("right",b)},doMove:function(b,a){this.keyNavigation=true;this.move(b,a);this.keyNavigation=false},move:function(a,d){var c=this,g=c.getCurrentPosition(),b;if(g){b=g.view.walkCells(g,a,d,c.preventWrap);if(b){b.view=g.view;return c.setCurrentPosition(b)}}},getCurrentPosition:function(){return this.selecting?this.nextSelection:this.selection},setCurrentPosition:function(c){var b=this,a=b.selection;b.lastSelection=a;if(a){if(c&&(c.row===a.row&&c.column===a.column&&c.view===a.view)){c=null}else{b.onCellDeselect(b.selection)}}if(c){b.nextSelection=new b.Selection(b);b.nextSelection.setPosition(c);b.selecting=true;b.onCellSelect(b.nextSelection);b.selecting=false;return(b.selection=b.nextSelection)}},isCellSelected:function(a,e,c){var d=this,b,g=d.getCurrentPosition();if(g&&g.view===a){b=new this.Selection(d);b.setPosition({view:a,row:e,column:c});return(b.record===g.record)&&(b.columnHeader===g.columnHeader)}},onStoreRemove:function(k,b,e){var h=this,j=h.getCurrentPosition(),c,a=b.length,g,d=0;h.callParent(arguments);if(j){if(e[0]>j.row){return}for(c=0;c-1){this.doSelect(a.record,false,b)}},onCellDeselect:function(a,b){if(a&&a.row!==undefined){this.doDeselect(a.record,b)}},onSelectChange:function(b,e,d,h){var g=this,i,c,a;if(e){i=g.nextSelection;c="select"}else{i=g.lastSelection||g.noSelection;c="deselect"}a=i.view||g.primaryView;if((d||g.fireEvent("before"+c,g,b,i.row,i.column))!==false&&h()!==false){if(e){a.onCellSelect(i);a.onCellFocus(i)}else{a.onCellDeselect(i);delete g.selection}if(!d){g.fireEvent(c,g,b,i.row,i.column)}}},onKeyTab:function(d,b){var c=this,g=c.getCurrentPosition(),a;if(g){a=g.view.editingPlugin;if(a&&c.wasEditing){c.onEditorTab(a,d)}else{c.move(d.shiftKey?"left":"right",d)}}},onEditorTab:function(b,g){var c=this,d=g.shiftKey?"left":"right",a=c.move(d,g);if(a){if(b.startEdit(a.row,a.column)){c.wasEditing=false}else{c.wasEditing=true;if(!a.columnHeader.dataIndex){c.onEditorTab(b,g)}}}},refresh:function(){var b=this.getCurrentPosition(),a;if(b&&(a=this.store.indexOf(this.selected.last()))!==-1){b.row=a}},onColumnMove:function(d,e,b,c){var a=d.up("tablepanel");if(a){this.onViewRefresh(a.view)}},onUpdate:function(a){var b=this,c;if(b.isSelected(a)){c=b.selecting?b.nextSelection:b.selection;b.view.onCellSelect(c)}},onViewRefresh:function(b){var c=this,g=c.getCurrentPosition(),e=b.headerCt,a,d;if(g&&g.view===b){a=g.record;d=g.columnHeader;if(!d.isDescendantOf(e)){d=e.queryById(d.id)||e.down('[text="'+d.text+'"]')||e.down('[dataIndex="'+d.dataIndex+'"]')}if(d&&(b.store.indexOfId(a.getId())!==-1)){c.setCurrentPosition({row:a,column:d,view:b})}}},selectByPosition:function(a){this.setCurrentPosition(a)}},function(){var a=this.prototype.Selection=function(b){this.model=b;this.view=b.primaryView};a.prototype.setPosition=function(d,b){var c=this;if(arguments.length===1){if(d.view){c.view=d.view}b=d.column;d=d.row}c.setRow(d);c.setColumn(b);return c};a.prototype.setRow=function(c){var b=this;if(c!==undefined){if(typeof c==="number"){b.row=Math.max(Math.min(c,b.view.store.getCount()-1),0);b.record=b.view.store.getAt(c)}else{if(c.isModel){b.record=c;b.row=b.view.indexOf(c)}else{if(c.tagName){b.record=b.view.getRecord(c);b.row=b.view.indexOf(b.record)}}}}};a.prototype.setColumn=function(b){var c=this;if(b!==undefined){if(typeof b==="number"){c.column=b;c.columnHeader=c.view.getHeaderAtIndex(b)}else{if(b.isHeader){c.columnHeader=b;c.column=b.getIndex()}}}}});Ext.define("Ext.selection.RowModel",{extend:Ext.selection.Model,alias:"selection.rowmodel",deltaScroll:5,enableKeyNav:true,ignoreRightMouseSelection:false,constructor:function(){this.addEvents("beforedeselect","beforeselect","deselect","select");this.views=[];this.callParent(arguments)},bindComponent:function(a){var b=this;b.views=b.views||[];b.views.push(a);b.bindStore(a.getStore(),true);a.on({itemmousedown:b.onRowMouseDown,itemclick:b.onRowClick,scope:b});if(b.enableKeyNav){b.initKeyNav(a)}},initKeyNav:function(a){var b=this;if(!a.rendered){a.on("render",Ext.Function.bind(b.initKeyNav,b,[a],0),b,{single:true});return}a.el.set({tabIndex:-1});b.keyNav=new Ext.util.KeyNav({target:a,ignoreInputFields:true,eventName:"itemkeydown",processEvent:function(d,c,h,e,g){g.record=c;g.recordIndex=e;return g},up:b.onKeyUp,down:b.onKeyDown,right:b.onKeyRight,left:b.onKeyLeft,pageDown:b.onKeyPageDown,pageUp:b.onKeyPageUp,home:b.onKeyHome,end:b.onKeyEnd,space:b.onKeySpace,enter:b.onKeyEnter,scope:b})},onUpdate:function(b){var d=this,a=d.view,c;if(a&&d.isSelected(b)){c=a.indexOf(b);a.onRowSelect(c);if(b===d.lastFocused){a.onRowFocus(c,true)}}},getRowsVisible:function(){var e=false,a=this.views[0],d=a.all.first(),b,c;if(d){b=d.getHeight();c=a.el.getHeight();e=Math.floor(c/b)}return e},onKeyEnd:function(c){var b=this,a=b.views[0];if(a.bufferedRenderer){a.bufferedRenderer.scrollTo(b.store.getCount()-1,false,function(e,d){b.afterKeyNavigate(c,d)})}else{b.afterKeyNavigate(c,a.getRecord(a.all.getCount()-1))}},onKeyHome:function(c){var b=this,a=b.views[0];if(a.bufferedRenderer){a.bufferedRenderer.scrollTo(0,false,function(e,d){b.afterKeyNavigate(c,d)})}else{b.afterKeyNavigate(c,a.getRecord(0))}},onKeyPageUp:function(g){var d=this,a=d.views[0],h=d.getRowsVisible(),c,b;if(h){if(a.bufferedRenderer){c=Math.max(g.recordIndex-h,0);(d.lastKeyEvent||(d.lastKeyEvent=new Ext.EventObjectImpl())).setEvent(g.browserEvent);a.bufferedRenderer.scrollTo(c,false,d.afterBufferedScrollTo,d)}else{b=a.walkRecs(g.record,-h);d.afterKeyNavigate(g,b)}}},onKeyPageDown:function(g){var d=this,a=d.views[0],h=d.getRowsVisible(),c,b;if(h){if(a.bufferedRenderer){c=Math.min(g.recordIndex+h,d.store.getCount()-1);(d.lastKeyEvent||(d.lastKeyEvent=new Ext.EventObjectImpl())).setEvent(g.browserEvent);a.bufferedRenderer.scrollTo(c,false,d.afterBufferedScrollTo,d)}else{b=a.walkRecs(g.record,h);d.afterKeyNavigate(g,b)}}},onKeySpace:function(b){var a=this.lastFocused;if(a){this.afterKeyNavigate(b,a)}},onKeyEnter:Ext.emptyFn,onKeyUp:function(b){var a=this.views[0].walkRecs(b.record,-1);if(a){this.afterKeyNavigate(b,a)}},onKeyDown:function(b){var a=this.views[0].walkRecs(b.record,1);if(a){this.afterKeyNavigate(b,a)}},afterBufferedScrollTo:function(b,a){this.afterKeyNavigate(this.lastKeyEvent,a)},scrollByDeltaX:function(d){var a=this.views[0],c=a.up(),b=c.horizontalScroller;if(b){b.scrollByDeltaX(d)}},onKeyLeft:function(a){this.scrollByDeltaX(-this.deltaScroll)},onKeyRight:function(a){this.scrollByDeltaX(this.deltaScroll)},onRowMouseDown:function(b,a,g,c,h){var d=this;if(c!==-1){if(!d.allowRightMouseSelection(h)){return}if(!d.isSelected(a)){d.mousedownAction=true;d.processSelection(b,a,g,c,h)}else{d.mousedownAction=false}}},processSelection:function(b,a,d,c,g){this.selectWithEvent(a,g)},onRowClick:function(b,a,d,c,g){if(this.mousedownAction){this.mousedownAction=false}else{this.processSelection(b,a,d,c,g)}},allowRightMouseSelection:function(a){var b=this.ignoreRightMouseSelection&&a.button!==0;if(b){b=this.hasSelection()}return !b},onSelectChange:function(g,c,k,a){var j=this,l=j.views,d=l.length,b=l[0].indexOf(g),h=c?"select":"deselect",e=0;if((k||j.fireEvent("before"+h,j,g,b))!==false&&a()!==false){for(;e '},processSelection:function(b,a,h,d,i){var g=this,c=i.getTarget(g.checkSelector),j;if(g.checkOnly&&!c){return}if(c){j=g.getSelectionMode();if(j!=="SINGLE"){g.setSelectionMode("SIMPLE")}g.selectWithEvent(a,i);g.setSelectionMode(j)}else{g.selectWithEvent(a,i)}},onSelectChange:function(){this.callParent(arguments);if(!this.bulkChange){this.updateHeaderState()}},onStoreLoad:function(){this.callParent(arguments);this.updateHeaderState()},onStoreAdd:function(){this.callParent(arguments);this.updateHeaderState()},onStoreRemove:function(){this.callParent(arguments);this.updateHeaderState()},onStoreRefresh:function(){this.callParent(arguments);this.updateHeaderState()},maybeFireSelectionChange:function(a){if(a&&!this.bulkChange){this.updateHeaderState()}this.callParent(arguments)},updateHeaderState:function(){var g=this,h=g.store,e=h.getCount(),j=g.views,k=false,a=0,b,d,c;if(!h.buffered&&e>0){b=g.selected;k=true;for(c=0,d=b.getCount();c1){b.expandPath(h.join(a),d,a,function(m,l){var k=l;if(m&&l){l=l.findChild(d,e);if(l){b.getSelectionModel().select(l);Ext.callback(g,i||b,[true,l]);return}}Ext.callback(g,i||b,[false,k])},b)}else{c=b.getRootNode();if(c.getId()===e){b.getSelectionModel().select(c);Ext.callback(g,i||b,[true,c])}else{Ext.callback(g,i||b,[false,null])}}}});Ext.define("Ext.view.DragZone",{extend:Ext.dd.DragZone,containerScroll:false,constructor:function(b){var e=this,a,d,c;Ext.apply(e,b);if(!e.ddGroup){e.ddGroup="view-dd-zone-"+e.view.id}a=e.view;d=a.ownerCt;if(d){c=d.getTargetEl().dom}else{c=a.el.dom.parentNode}e.callParent([c]);e.ddel=Ext.get(document.createElement("div"));e.ddel.addCls(Ext.baseCSSPrefix+"grid-dd-wrap")},init:function(c,a,b){this.initTarget(c,a,b);this.view.mon(this.view,{itemmousedown:this.onItemMouseDown,scope:this})},onValidDrop:function(b,a,c){this.callParent();b.el.focus()},onItemMouseDown:function(b,a,d,c,g){if(!this.isPreventDrag(g,a,d,c)){this.view.focus();this.handleMouseDown(g)}},isPreventDrag:function(a){return false},getDragData:function(c){var a=this.view,b=c.getTarget(a.getItemSelector());if(b){return{copy:a.copy||(a.allowCopy&&c.ctrlKey),event:new Ext.EventObjectImpl(c),view:a,ddel:this.ddel,item:b,records:a.getSelectionModel().getSelection(),fromPosition:Ext.fly(b).getXY()}}},onInitDrag:function(b,h){var e=this,g=e.dragData,d=g.view,a=d.getSelectionModel(),c=d.getRecord(g.item);if(!a.isSelected(c)){a.select(c,true)}g.records=a.getSelection();e.ddel.update(e.getDragText());e.proxy.update(e.ddel.dom);e.onStartDrag(b,h);return true},getDragText:function(){var a=this.dragData.records.length;return Ext.String.format(this.dragText,a,a==1?"":"s")},getRepairXY:function(b,a){return a?a.fromPosition:false}});Ext.define("Ext.tree.ViewDragZone",{extend:Ext.view.DragZone,isPreventDrag:function(b,a){return(a.get("allowDrag")===false)||!!b.getTarget(this.view.expanderSelector)},getDragText:function(){var a=this.dragData.records,b=a.length,d=a[0].get(this.displayField),c="s";if(b===1&&d){return d}else{if(!d){c=""}}return Ext.String.format(this.dragText,b,c)},afterRepair:function(){var h=this,a=h.view,i=a.selectedItemCls,b=h.dragData.records,g,e=b.length,c=Ext.fly,d;if(Ext.enableFx&&h.repairHighlight){for(g=0;g=i.top&&h<(i.top+d)){return"before"}else{if(!a&&(k||(h>=(i.bottom-d)&&h<=i.bottom))){return"after"}else{return"append"}}},isValidDropPoint:function(b,j,n,k,g){if(!b||!g.item){return false}var o=this.view,l=o.getRecord(b),d=g.records,a=d.length,m=d.length,c,h;if(!(l&&j&&a)){return false}for(c=0;c2)?a[2]:null,h=(i>3)?a[3]:"/",d=(i>4)?a[4]:null,g=(i>5)?a[5]:false;document.cookie=c+"="+escape(e)+((b===null)?"":("; expires="+b.toGMTString()))+((h===null)?"":("; path="+h))+((d===null)?"":("; domain="+d))+((g===true)?"; secure":"")},get:function(d){var b=d+"=",g=b.length,a=document.cookie.length,e=0,c=0;while(e=0?a.substr(b+1):null},setHash:function(d){var a=this,c=a.useTopWindow?window.top:window;try{c.location.hash=d}catch(b){}},doSave:function(){this.hiddenField.value=this.currentToken},handleStateChange:function(a){this.currentToken=a;this.fireEvent("change",a)},updateIFrame:function(b){var a='
    '+Ext.util.Format.htmlEncode(b)+"
    ",d;try{d=this.iframe.contentWindow.document;d.open();d.write(a);d.close();return true}catch(c){return false}},checkIFrame:function(){var d=this,b=d.iframe.contentWindow,e,c,a,g;if(!b||!b.document){Ext.Function.defer(this.checkIFrame,10,this);return}e=b.document;c=e.getElementById("state");a=c?c.innerText:null;g=d.getHash();Ext.TaskManager.start({run:function(){var k=b.document,j=k.getElementById("state"),h=j?j.innerText:null,i=d.getHash();if(h!==a){a=h;d.handleStateChange(h);d.setHash(h);g=h;d.doSave()}else{if(i!==g){g=i;d.updateIFrame(i)}}},interval:50,scope:d});d.ready=true;d.fireEvent("ready",d)},startUp:function(){var a=this,b;a.currentToken=a.hiddenField.value||this.getHash();if(a.oldIEMode){a.checkIFrame()}else{b=a.getHash();Ext.TaskManager.start({run:function(){var c=a.getHash();if(c!==b){b=c;a.handleStateChange(b);a.doSave()}},interval:50,scope:a});a.ready=true;a.fireEvent("ready",a)}},init:function(d,b){var c=this,a=Ext.DomHelper;if(c.ready){Ext.callback(d,b,[c]);return}if(!Ext.isReady){Ext.onReady(function(){c.init(d,b)});return}c.hiddenField=Ext.getDom(c.fieldId);if(!c.hiddenField){c.hiddenField=Ext.getBody().createChild({id:Ext.id(),tag:"form",cls:Ext.baseCSSPrefix+"hide-display",children:[{tag:"input",type:"hidden",id:c.fieldId}]},false,true).firstChild}if(c.oldIEMode){c.iframe=Ext.getDom(c.iframeId);if(!c.iframe){c.iframe=a.append(c.hiddenField.parentNode,{tag:"iframe",id:c.iframeId,src:Ext.SSL_SECURE_URL})}}c.addEvents("ready","change");if(d){c.on("ready",d,b,{single:true})}c.startUp()},add:function(a,c){var b=this;if(c!==false){if(b.getToken()===a){return true}}if(b.oldIEMode){return b.updateIFrame(a)}else{b.setHash(a);return true}},back:function(){window.history.go(-1)},forward:function(){window.history.go(1)},getToken:function(){return this.ready?this.currentToken:this.getHash()}}); \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/ext-dev.js b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/ext-dev.js new file mode 100644 index 000000000..f20600481 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/ext-dev.js @@ -0,0 +1,33269 @@ +/* +This file is part of Ext JS 4.2 + +Copyright (c) 2011-2013 Sencha Inc + +Contact: http://www.sencha.com/contact + +GNU General Public License Usage +This file may be used under the terms of the GNU General Public License version 3.0 as +published by the Free Software Foundation and appearing in the file LICENSE included in the +packaging of this file. + +Please review the following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you are unsure which license is appropriate for your use, please contact the sales department +at http://www.sencha.com/contact. + +Build date: 2013-03-11 22:33:40 (aed16176e68b5e8aa1433452b12805c0ad913836) +*/ +//@tag foundation,core +/** + * @class Ext + * @singleton + */ +var Ext = Ext || {}; +Ext._startTime = new Date().getTime(); +(function() { + var global = this, + objectPrototype = Object.prototype, + toString = objectPrototype.toString, + enumerables = true, + enumerablesTest = { toString: 1 }, + emptyFn = function () {}, + // This is the "$previous" method of a hook function on an instance. When called, it + // calls through the class prototype by the name of the called method. + callOverrideParent = function () { + var method = callOverrideParent.caller.caller; // skip callParent (our caller) + return method.$owner.prototype[method.$name].apply(this, arguments); + }, + i, + nonWhitespaceRe = /\S/, + ExtApp; + + Function.prototype.$extIsFunction = true; + + Ext.global = global; + + for (i in enumerablesTest) { + enumerables = null; + } + + if (enumerables) { + enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', + 'toLocaleString', 'toString', 'constructor']; + } + + /** + * An array containing extra enumerables for old browsers + * @property {String[]} + */ + Ext.enumerables = enumerables; + + /** + * Copies all the properties of config to the specified object. + * Note that if recursive merging and cloning without referencing the original objects / arrays is needed, use + * {@link Ext.Object#merge} instead. + * @param {Object} object The receiver of the properties + * @param {Object} config The source of the properties + * @param {Object} [defaults] A different object that will also be applied for default values + * @return {Object} returns obj + */ + Ext.apply = function(object, config, defaults) { + if (defaults) { + Ext.apply(object, defaults); + } + + if (object && config && typeof config === 'object') { + var i, j, k; + + for (i in config) { + object[i] = config[i]; + } + + if (enumerables) { + for (j = enumerables.length; j--;) { + k = enumerables[j]; + if (config.hasOwnProperty(k)) { + object[k] = config[k]; + } + } + } + } + + return object; + }; + + Ext.buildSettings = Ext.apply({ + baseCSSPrefix: 'x-' + }, Ext.buildSettings || {}); + + Ext.apply(Ext, { + + /** + * @property {String} [name='Ext'] + *

    The name of the property in the global namespace (The window in browser environments) which refers to the current instance of Ext.

    + *

    This is usually "Ext", but if a sandboxed build of ExtJS is being used, this will be an alternative name.

    + *

    If code is being generated for use by eval or to create a new Function, and the global instance + * of Ext must be referenced, this is the name that should be built into the code.

    + */ + name: Ext.sandboxName || 'Ext', + + /** + * @property {Function} + * A reusable empty function + */ + emptyFn: emptyFn, + + /** + * A reusable identity function. The function will always return the first argument, unchanged. + */ + identityFn: function(o) { + return o; + }, + + /** + * A zero length string which will pass a truth test. Useful for passing to methods + * which use a truth test to reject falsy values where a string value must be cleared. + */ + emptyString: new String(), + + baseCSSPrefix: Ext.buildSettings.baseCSSPrefix, + + /** + * Copies all the properties of config to object if they don't already exist. + * @param {Object} object The receiver of the properties + * @param {Object} config The source of the properties + * @return {Object} returns obj + */ + applyIf: function(object, config) { + var property; + + if (object) { + for (property in config) { + if (object[property] === undefined) { + object[property] = config[property]; + } + } + } + + return object; + }, + + /** + * Iterates either an array or an object. This method delegates to + * {@link Ext.Array#each Ext.Array.each} if the given value is iterable, and {@link Ext.Object#each Ext.Object.each} otherwise. + * + * @param {Object/Array} object The object or array to be iterated. + * @param {Function} fn The function to be called for each iteration. See and {@link Ext.Array#each Ext.Array.each} and + * {@link Ext.Object#each Ext.Object.each} for detailed lists of arguments passed to this function depending on the given object + * type that is being iterated. + * @param {Object} scope (Optional) The scope (`this` reference) in which the specified function is executed. + * Defaults to the object being iterated itself. + * @markdown + */ + iterate: function(object, fn, scope) { + if (Ext.isEmpty(object)) { + return; + } + + if (scope === undefined) { + scope = object; + } + + if (Ext.isIterable(object)) { + Ext.Array.each.call(Ext.Array, object, fn, scope); + } + else { + Ext.Object.each.call(Ext.Object, object, fn, scope); + } + } + }); + + Ext.apply(Ext, { + + /** + * This method deprecated. Use {@link Ext#define Ext.define} instead. + * @method + * @param {Function} superclass + * @param {Object} overrides + * @return {Function} The subclass constructor from the overrides parameter, or a generated one if not provided. + * @deprecated 4.0.0 Use {@link Ext#define Ext.define} instead + */ + extend: (function() { + // inline overrides + var objectConstructor = objectPrototype.constructor, + inlineOverrides = function(o) { + for (var m in o) { + if (!o.hasOwnProperty(m)) { + continue; + } + this[m] = o[m]; + } + }; + + return function(subclass, superclass, overrides) { + // First we check if the user passed in just the superClass with overrides + if (Ext.isObject(superclass)) { + overrides = superclass; + superclass = subclass; + subclass = overrides.constructor !== objectConstructor ? overrides.constructor : function() { + superclass.apply(this, arguments); + }; + } + + if (!superclass) { + Ext.Error.raise({ + sourceClass: 'Ext', + sourceMethod: 'extend', + msg: 'Attempting to extend from a class which has not been loaded on the page.' + }); + } + + // We create a new temporary class + var F = function() {}, + subclassProto, superclassProto = superclass.prototype; + + F.prototype = superclassProto; + subclassProto = subclass.prototype = new F(); + subclassProto.constructor = subclass; + subclass.superclass = superclassProto; + + if (superclassProto.constructor === objectConstructor) { + superclassProto.constructor = superclass; + } + + subclass.override = function(overrides) { + Ext.override(subclass, overrides); + }; + + subclassProto.override = inlineOverrides; + subclassProto.proto = subclassProto; + + subclass.override(overrides); + subclass.extend = function(o) { + return Ext.extend(subclass, o); + }; + + return subclass; + }; + }()), + + /** + * Overrides members of the specified `target` with the given values. + * + * If the `target` is a class declared using {@link Ext#define Ext.define}, the + * `override` method of that class is called (see {@link Ext.Base#override}) given + * the `overrides`. + * + * If the `target` is a function, it is assumed to be a constructor and the contents + * of `overrides` are applied to its `prototype` using {@link Ext#apply Ext.apply}. + * + * If the `target` is an instance of a class declared using {@link Ext#define Ext.define}, + * the `overrides` are applied to only that instance. In this case, methods are + * specially processed to allow them to use {@link Ext.Base#callParent}. + * + * var panel = new Ext.Panel({ ... }); + * + * Ext.override(panel, { + * initComponent: function () { + * // extra processing... + * + * this.callParent(); + * } + * }); + * + * If the `target` is none of these, the `overrides` are applied to the `target` + * using {@link Ext#apply Ext.apply}. + * + * Please refer to {@link Ext#define Ext.define} and {@link Ext.Base#override} for + * further details. + * + * @param {Object} target The target to override. + * @param {Object} overrides The properties to add or replace on `target`. + * @method override + */ + override: function (target, overrides) { + if (target.$isClass) { + target.override(overrides); + } else if (typeof target == 'function') { + Ext.apply(target.prototype, overrides); + } else { + var owner = target.self, + name, value; + + if (owner && owner.$isClass) { // if (instance of Ext.define'd class) + for (name in overrides) { + if (overrides.hasOwnProperty(name)) { + value = overrides[name]; + + if (typeof value == 'function') { + if (owner.$className) { + value.displayName = owner.$className + '#' + name; + } + + value.$name = name; + value.$owner = owner; + value.$previous = target.hasOwnProperty(name) + ? target[name] // already hooked, so call previous hook + : callOverrideParent; // calls by name on prototype + } + + target[name] = value; + } + } + } else { + Ext.apply(target, overrides); + } + } + + return target; + } + }); + + // A full set of static methods to do type checking + Ext.apply(Ext, { + + /** + * Returns the given value itself if it's not empty, as described in {@link Ext#isEmpty}; returns the default + * value (second argument) otherwise. + * + * @param {Object} value The value to test + * @param {Object} defaultValue The value to return if the original value is empty + * @param {Boolean} allowBlank (optional) true to allow zero length strings to qualify as non-empty (defaults to false) + * @return {Object} value, if non-empty, else defaultValue + */ + valueFrom: function(value, defaultValue, allowBlank){ + return Ext.isEmpty(value, allowBlank) ? defaultValue : value; + }, + + /** + * Returns the type of the given variable in string format. List of possible values are: + * + * - `undefined`: If the given value is `undefined` + * - `null`: If the given value is `null` + * - `string`: If the given value is a string + * - `number`: If the given value is a number + * - `boolean`: If the given value is a boolean value + * - `date`: If the given value is a `Date` object + * - `function`: If the given value is a function reference + * - `object`: If the given value is an object + * - `array`: If the given value is an array + * - `regexp`: If the given value is a regular expression + * - `element`: If the given value is a DOM Element + * - `textnode`: If the given value is a DOM text node and contains something other than whitespace + * - `whitespace`: If the given value is a DOM text node and contains only whitespace + * + * @param {Object} value + * @return {String} + * @markdown + */ + typeOf: function(value) { + var type, + typeToString; + + if (value === null) { + return 'null'; + } + + type = typeof value; + + if (type === 'undefined' || type === 'string' || type === 'number' || type === 'boolean') { + return type; + } + + typeToString = toString.call(value); + + switch(typeToString) { + case '[object Array]': + return 'array'; + case '[object Date]': + return 'date'; + case '[object Boolean]': + return 'boolean'; + case '[object Number]': + return 'number'; + case '[object RegExp]': + return 'regexp'; + } + + if (type === 'function') { + return 'function'; + } + + if (type === 'object') { + if (value.nodeType !== undefined) { + if (value.nodeType === 3) { + return (nonWhitespaceRe).test(value.nodeValue) ? 'textnode' : 'whitespace'; + } + else { + return 'element'; + } + } + + return 'object'; + } + + Ext.Error.raise({ + sourceClass: 'Ext', + sourceMethod: 'typeOf', + msg: 'Failed to determine the type of the specified value "' + value + '". This is most likely a bug.' + }); + }, + + /** + * Coerces the first value if possible so that it is comparable to the second value. + * + * Coercion only works between the basic atomic data types String, Boolean, Number, Date, null and undefined. + * + * Numbers and numeric strings are coerced to Dates using the value as the millisecond era value. + * + * Strings are coerced to Dates by parsing using the {@link Ext.Date#defaultFormat defaultFormat}. + * + * For example + * + * Ext.coerce('false', true); + * + * returns the boolean value `false` because the second parameter is of type `Boolean`. + * + * @param {Mixed} from The value to coerce + * @param {Mixed} to The value it must be compared against + * @return The coerced value. + */ + coerce: function(from, to) { + var fromType = Ext.typeOf(from), + toType = Ext.typeOf(to), + isString = typeof from === 'string'; + + if (fromType !== toType) { + switch (toType) { + case 'string': + return String(from); + case 'number': + return Number(from); + case 'boolean': + return isString && (!from || from === 'false') ? false : Boolean(from); + case 'null': + return isString && (!from || from === 'null') ? null : from; + case 'undefined': + return isString && (!from || from === 'undefined') ? undefined : from; + case 'date': + return isString && isNaN(from) ? Ext.Date.parse(from, Ext.Date.defaultFormat) : Date(Number(from)); + } + } + return from; + }, + + /** + * Returns true if the passed value is empty, false otherwise. The value is deemed to be empty if it is either: + * + * - `null` + * - `undefined` + * - a zero-length array + * - a zero-length string (Unless the `allowEmptyString` parameter is set to `true`) + * + * @param {Object} value The value to test + * @param {Boolean} allowEmptyString (optional) true to allow empty strings (defaults to false) + * @return {Boolean} + * @markdown + */ + isEmpty: function(value, allowEmptyString) { + return (value === null) || (value === undefined) || (!allowEmptyString ? value === '' : false) || (Ext.isArray(value) && value.length === 0); + }, + + /** + * Returns true if the passed value is a JavaScript Array, false otherwise. + * + * @param {Object} target The target to test + * @return {Boolean} + * @method + */ + isArray: ('isArray' in Array) ? Array.isArray : function(value) { + return toString.call(value) === '[object Array]'; + }, + + /** + * Returns true if the passed value is a JavaScript Date object, false otherwise. + * @param {Object} object The object to test + * @return {Boolean} + */ + isDate: function(value) { + return toString.call(value) === '[object Date]'; + }, + + /** + * Returns true if the passed value is a JavaScript Object, false otherwise. + * @param {Object} value The value to test + * @return {Boolean} + * @method + */ + isObject: (toString.call(null) === '[object Object]') ? + function(value) { + // check ownerDocument here as well to exclude DOM nodes + return value !== null && value !== undefined && toString.call(value) === '[object Object]' && value.ownerDocument === undefined; + } : + function(value) { + return toString.call(value) === '[object Object]'; + }, + + /** + * @private + */ + isSimpleObject: function(value) { + return value instanceof Object && value.constructor === Object; + }, + /** + * Returns true if the passed value is a JavaScript 'primitive', a string, number or boolean. + * @param {Object} value The value to test + * @return {Boolean} + */ + isPrimitive: function(value) { + var type = typeof value; + + return type === 'string' || type === 'number' || type === 'boolean'; + }, + + /** + * Returns true if the passed value is a JavaScript Function, false otherwise. + * @param {Object} value The value to test + * @return {Boolean} + * @method + */ + isFunction: function(value) { + return !!(value && value.$extIsFunction); + }, + + /** + * Returns true if the passed value is a number. Returns false for non-finite numbers. + * @param {Object} value The value to test + * @return {Boolean} + */ + isNumber: function(value) { + return typeof value === 'number' && isFinite(value); + }, + + /** + * Validates that a value is numeric. + * @param {Object} value Examples: 1, '1', '2.34' + * @return {Boolean} True if numeric, false otherwise + */ + isNumeric: function(value) { + return !isNaN(parseFloat(value)) && isFinite(value); + }, + + /** + * Returns true if the passed value is a string. + * @param {Object} value The value to test + * @return {Boolean} + */ + isString: function(value) { + return typeof value === 'string'; + }, + + /** + * Returns true if the passed value is a boolean. + * + * @param {Object} value The value to test + * @return {Boolean} + */ + isBoolean: function(value) { + return typeof value === 'boolean'; + }, + + /** + * Returns true if the passed value is an HTMLElement + * @param {Object} value The value to test + * @return {Boolean} + */ + isElement: function(value) { + return value ? value.nodeType === 1 : false; + }, + + /** + * Returns true if the passed value is a TextNode + * @param {Object} value The value to test + * @return {Boolean} + */ + isTextNode: function(value) { + return value ? value.nodeName === "#text" : false; + }, + + /** + * Returns true if the passed value is defined. + * @param {Object} value The value to test + * @return {Boolean} + */ + isDefined: function(value) { + return typeof value !== 'undefined'; + }, + + /** + * Returns true if the passed value is iterable, false otherwise + * @param {Object} value The value to test + * @return {Boolean} + */ + isIterable: function(value) { + var type = typeof value, + checkLength = false; + if (value && type != 'string') { + // Functions have a length property, so we need to filter them out + if (type == 'function') { + // In Safari, NodeList/HTMLCollection both return "function" when using typeof, so we need + // to explicitly check them here. + if (Ext.isSafari) { + checkLength = value instanceof NodeList || value instanceof HTMLCollection; + } + } else { + checkLength = true; + } + } + return checkLength ? value.length !== undefined : false; + } + }); + + Ext.apply(Ext, { + + /** + * Clone simple variables including array, {}-like objects, DOM nodes and Date without keeping the old reference. + * A reference for the object itself is returned if it's not a direct decendant of Object. For model cloning, + * see {@link Ext.data.Model#copy Model.copy}. + * + * @param {Object} item The variable to clone + * @return {Object} clone + */ + clone: function(item) { + var type, + i, + j, + k, + clone, + key; + + if (item === null || item === undefined) { + return item; + } + + // DOM nodes + // TODO proxy this to Ext.Element.clone to handle automatic id attribute changing + // recursively + if (item.nodeType && item.cloneNode) { + return item.cloneNode(true); + } + + type = toString.call(item); + + // Date + if (type === '[object Date]') { + return new Date(item.getTime()); + } + + + // Array + if (type === '[object Array]') { + i = item.length; + + clone = []; + + while (i--) { + clone[i] = Ext.clone(item[i]); + } + } + // Object + else if (type === '[object Object]' && item.constructor === Object) { + clone = {}; + + for (key in item) { + clone[key] = Ext.clone(item[key]); + } + + if (enumerables) { + for (j = enumerables.length; j--;) { + k = enumerables[j]; + clone[k] = item[k]; + } + } + } + + return clone || item; + }, + + /** + * @private + * Generate a unique reference of Ext in the global scope, useful for sandboxing + */ + getUniqueGlobalNamespace: function() { + var uniqueGlobalNamespace = this.uniqueGlobalNamespace, + i; + + if (uniqueGlobalNamespace === undefined) { + i = 0; + + do { + uniqueGlobalNamespace = 'ExtBox' + (++i); + } while (Ext.global[uniqueGlobalNamespace] !== undefined); + + Ext.global[uniqueGlobalNamespace] = Ext; + this.uniqueGlobalNamespace = uniqueGlobalNamespace; + } + + return uniqueGlobalNamespace; + }, + + /** + * @private + */ + functionFactoryCache: {}, + + cacheableFunctionFactory: function() { + var me = this, + args = Array.prototype.slice.call(arguments), + cache = me.functionFactoryCache, + idx, fn, ln; + + if (Ext.isSandboxed) { + ln = args.length; + if (ln > 0) { + ln--; + args[ln] = 'var Ext=window.' + Ext.name + ';' + args[ln]; + } + } + idx = args.join(''); + fn = cache[idx]; + if (!fn) { + fn = Function.prototype.constructor.apply(Function.prototype, args); + + cache[idx] = fn; + } + return fn; + }, + + functionFactory: function() { + var me = this, + args = Array.prototype.slice.call(arguments), + ln; + + if (Ext.isSandboxed) { + ln = args.length; + if (ln > 0) { + ln--; + args[ln] = 'var Ext=window.' + Ext.name + ';' + args[ln]; + } + } + + return Function.prototype.constructor.apply(Function.prototype, args); + }, + + /** + * @private + * @property + */ + Logger: { + verbose: emptyFn, + log: emptyFn, + info: emptyFn, + warn: emptyFn, + error: function(message) { + throw new Error(message); + }, + deprecate: emptyFn + } + }); + + /** + * Old alias to {@link Ext#typeOf} + * @deprecated 4.0.0 Use {@link Ext#typeOf} instead + * @method + * @inheritdoc Ext#typeOf + */ + Ext.type = Ext.typeOf; + + // When using Cmd optimizations, the namespace Ext.app may already be defined + // by this point since it's done up front by the tool. Check if app already + // exists before overwriting it. + ExtApp = Ext.app; + if (!ExtApp) { + ExtApp = Ext.app = {}; + } + Ext.apply(ExtApp, { + namespaces: {}, + + /** + * @private + */ + collectNamespaces: function(paths) { + var namespaces = Ext.app.namespaces, + path; + + for (path in paths) { + if (paths.hasOwnProperty(path)) { + namespaces[path] = true; + } + } + }, + + /** + * Adds namespace(s) to known list. + * + * @param {String/String[]} namespace + */ + addNamespaces: function(ns) { + var namespaces = Ext.app.namespaces, + i, l; + + if (!Ext.isArray(ns)) { + ns = [ns]; + } + + for (i = 0, l = ns.length; i < l; i++) { + namespaces[ns[i]] = true; + } + }, + + /** + * @private Clear all namespaces from known list. + */ + clearNamespaces: function() { + Ext.app.namespaces = {}; + }, + + /** + * Get namespace prefix for a class name. + * + * @param {String} className + * + * @return {String} Namespace prefix if it's known, otherwise undefined + */ + getNamespace: function(className) { + var namespaces = Ext.app.namespaces, + deepestPrefix = '', + prefix; + + for (prefix in namespaces) { + if (namespaces.hasOwnProperty(prefix) && + prefix.length > deepestPrefix.length && + (prefix + '.' === className.substring(0, prefix.length + 1))) { + deepestPrefix = prefix; + } + } + + return deepestPrefix === '' ? undefined : deepestPrefix; + } + }); +}()); + +/* + * This method evaluates the given code free of any local variable. In some browsers this + * will be at global scope, in others it will be in a function. + * @parma {String} code The code to evaluate. + * @private + * @method + */ +Ext.globalEval = Ext.global.execScript + ? function(code) { + execScript(code); + } + : function($$code) { + // IMPORTANT: because we use eval we cannot place this in the above function or it + // will break the compressor's ability to rename local variables... + (function(){ + // This var should not be replaced by the compressor. We need to do this so + // that Ext refers to the global Ext, if we're sandboxing it may + // refer to the local instance inside the closure + var Ext = this.Ext; + eval($$code); + }()); + }; + +//@tag foundation,core +//@require ../Ext.js + +/** + * @author Jacky Nguyen + * @docauthor Jacky Nguyen + * @class Ext.Version + * + * A utility class that wrap around a string version number and provide convenient + * method to perform comparison. See also: {@link Ext.Version#compare compare}. Example: + * + * var version = new Ext.Version('1.0.2beta'); + * console.log("Version is " + version); // Version is 1.0.2beta + * + * console.log(version.getMajor()); // 1 + * console.log(version.getMinor()); // 0 + * console.log(version.getPatch()); // 2 + * console.log(version.getBuild()); // 0 + * console.log(version.getRelease()); // beta + * + * console.log(version.isGreaterThan('1.0.1')); // True + * console.log(version.isGreaterThan('1.0.2alpha')); // True + * console.log(version.isGreaterThan('1.0.2RC')); // False + * console.log(version.isGreaterThan('1.0.2')); // False + * console.log(version.isLessThan('1.0.2')); // True + * + * console.log(version.match(1.0)); // True + * console.log(version.match('1.0.2')); // True + * + */ +(function() { + +// Current core version +// also fix Ext-more.js +var version = '4.2.0.663', Version; + Ext.Version = Version = Ext.extend(Object, { + + /** + * @param {String/Number} version The version number in the following standard format: + * + * major[.minor[.patch[.build[release]]]] + * + * Examples: + * + * 1.0 + * 1.2.3beta + * 1.2.3.4RC + * + * @return {Ext.Version} this + */ + constructor: function(version) { + var parts, releaseStartIndex; + + if (version instanceof Version) { + return version; + } + + this.version = this.shortVersion = String(version).toLowerCase().replace(/_/g, '.').replace(/[\-+]/g, ''); + + releaseStartIndex = this.version.search(/([^\d\.])/); + + if (releaseStartIndex !== -1) { + this.release = this.version.substr(releaseStartIndex, version.length); + this.shortVersion = this.version.substr(0, releaseStartIndex); + } + + this.shortVersion = this.shortVersion.replace(/[^\d]/g, ''); + + parts = this.version.split('.'); + + this.major = parseInt(parts.shift() || 0, 10); + this.minor = parseInt(parts.shift() || 0, 10); + this.patch = parseInt(parts.shift() || 0, 10); + this.build = parseInt(parts.shift() || 0, 10); + + return this; + }, + + /** + * Override the native toString method + * @private + * @return {String} version + */ + toString: function() { + return this.version; + }, + + /** + * Override the native valueOf method + * @private + * @return {String} version + */ + valueOf: function() { + return this.version; + }, + + /** + * Returns the major component value + * @return {Number} major + */ + getMajor: function() { + return this.major || 0; + }, + + /** + * Returns the minor component value + * @return {Number} minor + */ + getMinor: function() { + return this.minor || 0; + }, + + /** + * Returns the patch component value + * @return {Number} patch + */ + getPatch: function() { + return this.patch || 0; + }, + + /** + * Returns the build component value + * @return {Number} build + */ + getBuild: function() { + return this.build || 0; + }, + + /** + * Returns the release component value + * @return {Number} release + */ + getRelease: function() { + return this.release || ''; + }, + + /** + * Returns whether this version if greater than the supplied argument + * @param {String/Number} target The version to compare with + * @return {Boolean} True if this version if greater than the target, false otherwise + */ + isGreaterThan: function(target) { + return Version.compare(this.version, target) === 1; + }, + + /** + * Returns whether this version if greater than or equal to the supplied argument + * @param {String/Number} target The version to compare with + * @return {Boolean} True if this version if greater than or equal to the target, false otherwise + */ + isGreaterThanOrEqual: function(target) { + return Version.compare(this.version, target) >= 0; + }, + + /** + * Returns whether this version if smaller than the supplied argument + * @param {String/Number} target The version to compare with + * @return {Boolean} True if this version if smaller than the target, false otherwise + */ + isLessThan: function(target) { + return Version.compare(this.version, target) === -1; + }, + + /** + * Returns whether this version if less than or equal to the supplied argument + * @param {String/Number} target The version to compare with + * @return {Boolean} True if this version if less than or equal to the target, false otherwise + */ + isLessThanOrEqual: function(target) { + return Version.compare(this.version, target) <= 0; + }, + + /** + * Returns whether this version equals to the supplied argument + * @param {String/Number} target The version to compare with + * @return {Boolean} True if this version equals to the target, false otherwise + */ + equals: function(target) { + return Version.compare(this.version, target) === 0; + }, + + /** + * Returns whether this version matches the supplied argument. Example: + * + * var version = new Ext.Version('1.0.2beta'); + * console.log(version.match(1)); // True + * console.log(version.match(1.0)); // True + * console.log(version.match('1.0.2')); // True + * console.log(version.match('1.0.2RC')); // False + * + * @param {String/Number} target The version to compare with + * @return {Boolean} True if this version matches the target, false otherwise + */ + match: function(target) { + target = String(target); + return this.version.substr(0, target.length) === target; + }, + + /** + * Returns this format: [major, minor, patch, build, release]. Useful for comparison + * @return {Number[]} + */ + toArray: function() { + return [this.getMajor(), this.getMinor(), this.getPatch(), this.getBuild(), this.getRelease()]; + }, + + /** + * Returns shortVersion version without dots and release + * @return {String} + */ + getShortVersion: function() { + return this.shortVersion; + }, + + /** + * Convenient alias to {@link Ext.Version#isGreaterThan isGreaterThan} + * @param {String/Number} target + * @return {Boolean} + */ + gt: function() { + return this.isGreaterThan.apply(this, arguments); + }, + + /** + * Convenient alias to {@link Ext.Version#isLessThan isLessThan} + * @param {String/Number} target + * @return {Boolean} + */ + lt: function() { + return this.isLessThan.apply(this, arguments); + }, + + /** + * Convenient alias to {@link Ext.Version#isGreaterThanOrEqual isGreaterThanOrEqual} + * @param {String/Number} target + * @return {Boolean} + */ + gtEq: function() { + return this.isGreaterThanOrEqual.apply(this, arguments); + }, + + /** + * Convenient alias to {@link Ext.Version#isLessThanOrEqual isLessThanOrEqual} + * @param {String/Number} target + * @return {Boolean} + */ + ltEq: function() { + return this.isLessThanOrEqual.apply(this, arguments); + } + }); + + Ext.apply(Version, { + // @private + releaseValueMap: { + 'dev': -6, + 'alpha': -5, + 'a': -5, + 'beta': -4, + 'b': -4, + 'rc': -3, + '#': -2, + 'p': -1, + 'pl': -1 + }, + + /** + * Converts a version component to a comparable value + * + * @static + * @param {Object} value The value to convert + * @return {Object} + */ + getComponentValue: function(value) { + return !value ? 0 : (isNaN(value) ? this.releaseValueMap[value] || value : parseInt(value, 10)); + }, + + /** + * Compare 2 specified versions, starting from left to right. If a part contains special version strings, + * they are handled in the following order: + * 'dev' < 'alpha' = 'a' < 'beta' = 'b' < 'RC' = 'rc' < '#' < 'pl' = 'p' < 'anything else' + * + * @static + * @param {String} current The current version to compare to + * @param {String} target The target version to compare to + * @return {Number} Returns -1 if the current version is smaller than the target version, 1 if greater, and 0 if they're equivalent + */ + compare: function(current, target) { + var currentValue, targetValue, i; + + current = new Version(current).toArray(); + target = new Version(target).toArray(); + + for (i = 0; i < Math.max(current.length, target.length); i++) { + currentValue = this.getComponentValue(current[i]); + targetValue = this.getComponentValue(target[i]); + + if (currentValue < targetValue) { + return -1; + } else if (currentValue > targetValue) { + return 1; + } + } + + return 0; + } + }); + + /** + * @class Ext + */ + Ext.apply(Ext, { + /** + * @private + */ + versions: {}, + + /** + * @private + */ + lastRegisteredVersion: null, + + /** + * Set version number for the given package name. + * + * @param {String} packageName The package name, for example: 'core', 'touch', 'extjs' + * @param {String/Ext.Version} version The version, for example: '1.2.3alpha', '2.4.0-dev' + * @return {Ext} + */ + setVersion: function(packageName, version) { + Ext.versions[packageName] = new Version(version); + Ext.lastRegisteredVersion = Ext.versions[packageName]; + + return this; + }, + + /** + * Get the version number of the supplied package name; will return the last registered version + * (last Ext.setVersion call) if there's no package name given. + * + * @param {String} packageName (Optional) The package name, for example: 'core', 'touch', 'extjs' + * @return {Ext.Version} The version + */ + getVersion: function(packageName) { + if (packageName === undefined) { + return Ext.lastRegisteredVersion; + } + + return Ext.versions[packageName]; + }, + + /** + * Create a closure for deprecated code. + * + * // This means Ext.oldMethod is only supported in 4.0.0beta and older. + * // If Ext.getVersion('extjs') returns a version that is later than '4.0.0beta', for example '4.0.0RC', + * // the closure will not be invoked + * Ext.deprecate('extjs', '4.0.0beta', function() { + * Ext.oldMethod = Ext.newMethod; + * + * ... + * }); + * + * @param {String} packageName The package name + * @param {String} since The last version before it's deprecated + * @param {Function} closure The callback function to be executed with the specified version is less than the current version + * @param {Object} scope The execution scope (`this`) if the closure + */ + deprecate: function(packageName, since, closure, scope) { + if (Version.compare(Ext.getVersion(packageName), since) < 1) { + closure.call(scope); + } + } + }); // End Versioning + + Ext.setVersion('core', version); + +}()); + +//@tag foundation,core +//@require ../version/Version.js + +/** + * @class Ext.String + * + * A collection of useful static methods to deal with strings. + * @singleton + */ + +Ext.String = (function() { + var trimRegex = /^[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+|[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+$/g, + escapeRe = /('|\\)/g, + formatRe = /\{(\d+)\}/g, + escapeRegexRe = /([-.*+?\^${}()|\[\]\/\\])/g, + basicTrimRe = /^\s+|\s+$/g, + whitespaceRe = /\s+/, + varReplace = /(^[^a-z]*|[^\w])/gi, + charToEntity, + entityToChar, + charToEntityRegex, + entityToCharRegex, + htmlEncodeReplaceFn = function(match, capture) { + return charToEntity[capture]; + }, + htmlDecodeReplaceFn = function(match, capture) { + return (capture in entityToChar) ? entityToChar[capture] : String.fromCharCode(parseInt(capture.substr(2), 10)); + }, + boundsCheck = function(s, other){ + if (s === null || s === undefined || other === null || other === undefined) { + return false; + } + + return other.length <= s.length; + }; + + return { + + /** + * Inserts a substring into a string. + * @param {String} s The original string. + * @param {String} value The substring to insert. + * @param {Number} index The index to insert the substring. Negative indexes will insert from the end of + * the string. Example: + * + * Ext.String.insert("abcdefg", "h", -1); // abcdefhg + * + * @return {String} The value with the inserted substring + */ + insert: function(s, value, index) { + if (!s) { + return value; + } + + if (!value) { + return s; + } + + var len = s.length; + + if (!index && index !== 0) { + index = len; + } + + if (index < 0) { + index *= -1; + if (index >= len) { + // negative overflow, insert at start + index = 0; + } else { + index = len - index; + } + } + + if (index === 0) { + s = value + s; + } else if (index >= s.length) { + s += value; + } else { + s = s.substr(0, index) + value + s.substr(index); + } + return s; + }, + + /** + * Checks if a string starts with a substring + * @param {String} s The original string + * @param {String} start The substring to check + * @param {Boolean} [ignoreCase=false] True to ignore the case in the comparison + */ + startsWith: function(s, start, ignoreCase){ + var result = boundsCheck(s, start); + + if (result) { + if (ignoreCase) { + s = s.toLowerCase(); + start = start.toLowerCase(); + } + result = s.lastIndexOf(start, 0) === 0; + } + return result; + }, + + /** + * Checks if a string ends with a substring + * @param {String} s The original string + * @param {String} start The substring to check + * @param {Boolean} [ignoreCase=false] True to ignore the case in the comparison + */ + endsWith: function(s, end, ignoreCase){ + var result = boundsCheck(s, end); + + if (result) { + if (ignoreCase) { + s = s.toLowerCase(); + end = end.toLowerCase(); + } + result = s.indexOf(end, s.length - end.length) !== -1; + } + return result; + }, + + /** + * Converts a string of characters into a legal, parse-able JavaScript `var` name as long as the passed + * string contains at least one alphabetic character. Non alphanumeric characters, and *leading* non alphabetic + * characters will be removed. + * @param {String} s A string to be converted into a `var` name. + * @return {String} A legal JavaScript `var` name. + */ + createVarName: function(s) { + return s.replace(varReplace, ''); + }, + + /** + * Convert certain characters (&, <, >, ', and ") to their HTML character equivalents for literal display in web pages. + * @param {String} value The string to encode. + * @return {String} The encoded text. + * @method + */ + htmlEncode: function(value) { + return (!value) ? value : String(value).replace(charToEntityRegex, htmlEncodeReplaceFn); + }, + + /** + * Convert certain characters (&, <, >, ', and ") from their HTML character equivalents. + * @param {String} value The string to decode. + * @return {String} The decoded text. + * @method + */ + htmlDecode: function(value) { + return (!value) ? value : String(value).replace(entityToCharRegex, htmlDecodeReplaceFn); + }, + + /** + * Adds a set of character entity definitions to the set used by + * {@link Ext.String#htmlEncode} and {@link Ext.String#htmlDecode}. + * + * This object should be keyed by the entity name sequence, + * with the value being the textual representation of the entity. + * + * Ext.String.addCharacterEntities({ + * '&Uuml;':'Ü', + * '&ccedil;':'ç', + * '&ntilde;':'ñ', + * '&egrave;':'è' + * }); + * var s = Ext.String.htmlEncode("A string with entities: èÜçñ"); + * + * __Note:__ the values of the character entities defined on this object are expected + * to be single character values. As such, the actual values represented by the + * characters are sensitive to the character encoding of the JavaScript source + * file when defined in string literal form. Script tags referencing server + * resources with character entities must ensure that the 'charset' attribute + * of the script node is consistent with the actual character encoding of the + * server resource. + * + * The set of character entities may be reset back to the default state by using + * the {@link Ext.String#resetCharacterEntities} method + * + * @param {Object} entities The set of character entities to add to the current + * definitions. + */ + addCharacterEntities: function(newEntities) { + var charKeys = [], + entityKeys = [], + key, echar; + for (key in newEntities) { + echar = newEntities[key]; + entityToChar[key] = echar; + charToEntity[echar] = key; + charKeys.push(echar); + entityKeys.push(key); + } + charToEntityRegex = new RegExp('(' + charKeys.join('|') + ')', 'g'); + entityToCharRegex = new RegExp('(' + entityKeys.join('|') + '|&#[0-9]{1,5};' + ')', 'g'); + }, + + /** + * Resets the set of character entity definitions used by + * {@link Ext.String#htmlEncode} and {@link Ext.String#htmlDecode} back to the + * default state. + */ + resetCharacterEntities: function() { + charToEntity = {}; + entityToChar = {}; + // add the default set + this.addCharacterEntities({ + '&' : '&', + '>' : '>', + '<' : '<', + '"' : '"', + ''' : "'" + }); + }, + + /** + * Appends content to the query string of a URL, handling logic for whether to place + * a question mark or ampersand. + * @param {String} url The URL to append to. + * @param {String} string The content to append to the URL. + * @return {String} The resulting URL + */ + urlAppend : function(url, string) { + if (!Ext.isEmpty(string)) { + return url + (url.indexOf('?') === -1 ? '?' : '&') + string; + } + + return url; + }, + + /** + * Trims whitespace from either end of a string, leaving spaces within the string intact. Example: + * + * var s = ' foo bar '; + * alert('-' + s + '-'); //alerts "- foo bar -" + * alert('-' + Ext.String.trim(s) + '-'); //alerts "-foo bar-" + * + * @param {String} string The string to trim. + * @return {String} The trimmed string. + */ + trim: function(string) { + return string.replace(trimRegex, ""); + }, + + /** + * Capitalize the given string + * @param {String} string + * @return {String} + */ + capitalize: function(string) { + return string.charAt(0).toUpperCase() + string.substr(1); + }, + + /** + * Uncapitalize the given string. + * @param {String} string + * @return {String} + */ + uncapitalize: function(string) { + return string.charAt(0).toLowerCase() + string.substr(1); + }, + + /** + * Truncate a string and add an ellipsis ('...') to the end if it exceeds the specified length. + * @param {String} value The string to truncate. + * @param {Number} length The maximum length to allow before truncating. + * @param {Boolean} [word=false] `true` to try to find a common word break. + * @return {String} The converted text. + */ + ellipsis: function(value, len, word) { + if (value && value.length > len) { + if (word) { + var vs = value.substr(0, len - 2), + index = Math.max(vs.lastIndexOf(' '), vs.lastIndexOf('.'), vs.lastIndexOf('!'), vs.lastIndexOf('?')); + if (index !== -1 && index >= (len - 15)) { + return vs.substr(0, index) + "..."; + } + } + return value.substr(0, len - 3) + "..."; + } + return value; + }, + + /** + * Escapes the passed string for use in a regular expression. + * @param {String} string + * @return {String} + */ + escapeRegex: function(string) { + return string.replace(escapeRegexRe, "\\$1"); + }, + + /** + * Escapes the passed string for ' and \ + * @param {String} string The string to escape + * @return {String} The escaped string + */ + escape: function(string) { + return string.replace(escapeRe, "\\$1"); + }, + + /** + * Utility function that allows you to easily switch a string between two alternating values. The passed value + * is compared to the current string, and if they are equal, the other value that was passed in is returned. If + * they are already different, the first value passed in is returned. Note that this method returns the new value + * but does not change the current string. + * + * // alternate sort directions + * sort = Ext.String.toggle(sort, 'ASC', 'DESC'); + * + * // instead of conditional logic: + * sort = (sort === 'ASC' ? 'DESC' : 'ASC'); + * + * @param {String} string The current string. + * @param {String} value The value to compare to the current string. + * @param {String} other The new value to use if the string already equals the first value passed in. + * @return {String} The new value. + */ + toggle: function(string, value, other) { + return string === value ? other : value; + }, + + /** + * Pads the left side of a string with a specified character. This is especially useful + * for normalizing number and date strings. Example usage: + * + * var s = Ext.String.leftPad('123', 5, '0'); + * // s now contains the string: '00123' + * + * @param {String} string The original string. + * @param {Number} size The total length of the output string. + * @param {String} [character=' '] (optional) The character with which to pad the original string. + * @return {String} The padded string. + */ + leftPad: function(string, size, character) { + var result = String(string); + character = character || " "; + while (result.length < size) { + result = character + result; + } + return result; + }, + + /** + * Allows you to define a tokenized string and pass an arbitrary number of arguments to replace the tokens. Each + * token must be unique, and must increment in the format {0}, {1}, etc. Example usage: + * + * var cls = 'my-class', + * text = 'Some text'; + * var s = Ext.String.format('
    {1}
    ', cls, text); + * // s now contains the string: '
    Some text
    ' + * + * @param {String} string The tokenized string to be formatted. + * @param {Mixed...} values The values to replace tokens `{0}`, `{1}`, etc in order. + * @return {String} The formatted string. + */ + format: function(format) { + var args = Ext.Array.toArray(arguments, 1); + return format.replace(formatRe, function(m, i) { + return args[i]; + }); + }, + + /** + * Returns a string with a specified number of repetitions a given string pattern. + * The pattern be separated by a different string. + * + * var s = Ext.String.repeat('---', 4); // = '------------' + * var t = Ext.String.repeat('--', 3, '/'); // = '--/--/--' + * + * @param {String} pattern The pattern to repeat. + * @param {Number} count The number of times to repeat the pattern (may be 0). + * @param {String} sep An option string to separate each pattern. + */ + repeat: function(pattern, count, sep) { + if (count < 1) { + count = 0; + } + for (var buf = [], i = count; i--; ) { + buf.push(pattern); + } + return buf.join(sep || ''); + }, + + /** + * Splits a string of space separated words into an array, trimming as needed. If the + * words are already an array, it is returned. + * + * @param {String/Array} words + */ + splitWords: function (words) { + if (words && typeof words == 'string') { + return words.replace(basicTrimRe, '').split(whitespaceRe); + } + return words || []; + } + }; +}()); + +// initialize the default encode / decode entities +Ext.String.resetCharacterEntities(); + +/** + * Old alias to {@link Ext.String#htmlEncode} + * @deprecated Use {@link Ext.String#htmlEncode} instead + * @method + * @member Ext + * @inheritdoc Ext.String#htmlEncode + */ +Ext.htmlEncode = Ext.String.htmlEncode; + + +/** + * Old alias to {@link Ext.String#htmlDecode} + * @deprecated Use {@link Ext.String#htmlDecode} instead + * @method + * @member Ext + * @inheritdoc Ext.String#htmlDecode + */ +Ext.htmlDecode = Ext.String.htmlDecode; + +/** + * Old alias to {@link Ext.String#urlAppend} + * @deprecated Use {@link Ext.String#urlAppend} instead + * @method + * @member Ext + * @inheritdoc Ext.String#urlAppend + */ +Ext.urlAppend = Ext.String.urlAppend; + +//@tag foundation,core +//@require String.js +//@define Ext.Number + +/** + * @class Ext.Number + * + * A collection of useful static methods to deal with numbers + * @singleton + */ + +Ext.Number = new function() { + + var me = this, + isToFixedBroken = (0.9).toFixed() !== '1', + math = Math; + + Ext.apply(this, { + /** + * Checks whether or not the passed number is within a desired range. If the number is already within the + * range it is returned, otherwise the min or max value is returned depending on which side of the range is + * exceeded. Note that this method returns the constrained value but does not change the current number. + * @param {Number} number The number to check + * @param {Number} min The minimum number in the range + * @param {Number} max The maximum number in the range + * @return {Number} The constrained value if outside the range, otherwise the current value + */ + constrain: function(number, min, max) { + var x = parseFloat(number); + + // Watch out for NaN in Chrome 18 + // V8bug: http://code.google.com/p/v8/issues/detail?id=2056 + + // Operators are faster than Math.min/max. See http://jsperf.com/number-constrain + // ... and (x < Nan) || (x < undefined) == false + // ... same for (x > NaN) || (x > undefined) + // so if min or max are undefined or NaN, we never return them... sadly, this + // is not true of null (but even Math.max(-1,null)==0 and isNaN(null)==false) + return (x < min) ? min : ((x > max) ? max : x); + }, + + /** + * Snaps the passed number between stopping points based upon a passed increment value. + * + * The difference between this and {@link #snapInRange} is that {@link #snapInRange} uses the minValue + * when calculating snap points: + * + * r = Ext.Number.snap(56, 2, 55, 65); // Returns 56 - snap points are zero based + * + * r = Ext.Number.snapInRange(56, 2, 55, 65); // Returns 57 - snap points are based from minValue + * + * @param {Number} value The unsnapped value. + * @param {Number} increment The increment by which the value must move. + * @param {Number} minValue The minimum value to which the returned value must be constrained. Overrides the increment. + * @param {Number} maxValue The maximum value to which the returned value must be constrained. Overrides the increment. + * @return {Number} The value of the nearest snap target. + */ + snap : function(value, increment, minValue, maxValue) { + var m; + + // If no value passed, or minValue was passed and value is less than minValue (anything < undefined is false) + // Then use the minValue (or zero if the value was undefined) + if (value === undefined || value < minValue) { + return minValue || 0; + } + + if (increment) { + m = value % increment; + if (m !== 0) { + value -= m; + if (m * 2 >= increment) { + value += increment; + } else if (m * 2 < -increment) { + value -= increment; + } + } + } + return me.constrain(value, minValue, maxValue); + }, + + /** + * Snaps the passed number between stopping points based upon a passed increment value. + * + * The difference between this and {@link #snap} is that {@link #snap} does not use the minValue + * when calculating snap points: + * + * r = Ext.Number.snap(56, 2, 55, 65); // Returns 56 - snap points are zero based + * + * r = Ext.Number.snapInRange(56, 2, 55, 65); // Returns 57 - snap points are based from minValue + * + * @param {Number} value The unsnapped value. + * @param {Number} increment The increment by which the value must move. + * @param {Number} [minValue=0] The minimum value to which the returned value must be constrained. + * @param {Number} [maxValue=Infinity] The maximum value to which the returned value must be constrained. + * @return {Number} The value of the nearest snap target. + */ + snapInRange : function(value, increment, minValue, maxValue) { + var tween; + + // default minValue to zero + minValue = (minValue || 0); + + // If value is undefined, or less than minValue, use minValue + if (value === undefined || value < minValue) { + return minValue; + } + + // Calculate how many snap points from the minValue the passed value is. + if (increment && (tween = ((value - minValue) % increment))) { + value -= tween; + tween *= 2; + if (tween >= increment) { + value += increment; + } + } + + // If constraining within a maximum, ensure the maximum is on a snap point + if (maxValue !== undefined) { + if (value > (maxValue = me.snapInRange(maxValue, increment, minValue))) { + value = maxValue; + } + } + + return value; + }, + + /** + * Formats a number using fixed-point notation + * @param {Number} value The number to format + * @param {Number} precision The number of digits to show after the decimal point + */ + toFixed: isToFixedBroken ? function(value, precision) { + precision = precision || 0; + var pow = math.pow(10, precision); + return (math.round(value * pow) / pow).toFixed(precision); + } : function(value, precision) { + return value.toFixed(precision); + }, + + /** + * Validate that a value is numeric and convert it to a number if necessary. Returns the specified default value if + * it is not. + + Ext.Number.from('1.23', 1); // returns 1.23 + Ext.Number.from('abc', 1); // returns 1 + + * @param {Object} value + * @param {Number} defaultValue The value to return if the original value is non-numeric + * @return {Number} value, if numeric, defaultValue otherwise + */ + from: function(value, defaultValue) { + if (isFinite(value)) { + value = parseFloat(value); + } + + return !isNaN(value) ? value : defaultValue; + }, + + /** + * Returns a random integer between the specified range (inclusive) + * @param {Number} from Lowest value to return. + * @param {Number} to Highst value to return. + * @return {Number} A random integer within the specified range. + */ + randomInt: function (from, to) { + return math.floor(math.random() * (to - from + 1) + from); + }, + + /** + * Corrects floating point numbers that overflow to a non-precise + * value because of their floating nature, for example `0.1 + 0.2` + * @param {Number} The number + * @return {Number} The correctly rounded number + */ + correctFloat: function(n) { + // This is to correct the type of errors where 2 floats end with + // a long string of decimals, eg 0.1 + 0.2. When they overflow in this + // manner, they usually go to 15-16 decimals, so we cut it off at 14. + return parseFloat(n.toPrecision(14)); + } + }); + + /** + * @deprecated 4.0.0 Please use {@link Ext.Number#from} instead. + * @member Ext + * @method num + * @inheritdoc Ext.Number#from + */ + Ext.num = function() { + return me.from.apply(this, arguments); + }; +}; + +//@tag foundation,core +//@require Number.js + +/** + * @class Ext.Array + * @singleton + * @author Jacky Nguyen + * @docauthor Jacky Nguyen + * + * A set of useful static methods to deal with arrays; provide missing methods for older browsers. + */ +(function() { + + var arrayPrototype = Array.prototype, + slice = arrayPrototype.slice, + supportsSplice = (function () { + var array = [], + lengthBefore, + j = 20; + + if (!array.splice) { + return false; + } + + // This detects a bug in IE8 splice method: + // see http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/6e946d03-e09f-4b22-a4dd-cd5e276bf05a/ + + while (j--) { + array.push("A"); + } + + array.splice(15, 0, "F", "F", "F", "F", "F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F"); + + lengthBefore = array.length; //41 + array.splice(13, 0, "XXX"); // add one element + + if (lengthBefore+1 != array.length) { + return false; + } + // end IE8 bug + + return true; + }()), + supportsForEach = 'forEach' in arrayPrototype, + supportsMap = 'map' in arrayPrototype, + supportsIndexOf = 'indexOf' in arrayPrototype, + supportsEvery = 'every' in arrayPrototype, + supportsSome = 'some' in arrayPrototype, + supportsFilter = 'filter' in arrayPrototype, + supportsSort = (function() { + var a = [1,2,3,4,5].sort(function(){ return 0; }); + return a[0] === 1 && a[1] === 2 && a[2] === 3 && a[3] === 4 && a[4] === 5; + }()), + supportsSliceOnNodeList = true, + ExtArray, + erase, + replace, + splice; + + try { + // IE 6 - 8 will throw an error when using Array.prototype.slice on NodeList + if (typeof document !== 'undefined') { + slice.call(document.getElementsByTagName('body')); + } + } catch (e) { + supportsSliceOnNodeList = false; + } + + function fixArrayIndex (array, index) { + return (index < 0) ? Math.max(0, array.length + index) + : Math.min(array.length, index); + } + + /* + Does the same work as splice, but with a slightly more convenient signature. The splice + method has bugs in IE8, so this is the implementation we use on that platform. + + The rippling of items in the array can be tricky. Consider two use cases: + + index=2 + removeCount=2 + /=====\ + +---+---+---+---+---+---+---+---+ + | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | + +---+---+---+---+---+---+---+---+ + / \/ \/ \/ \ + / /\ /\ /\ \ + / / \/ \/ \ +--------------------------+ + / / /\ /\ +--------------------------+ \ + / / / \/ +--------------------------+ \ \ + / / / /+--------------------------+ \ \ \ + / / / / \ \ \ \ + v v v v v v v v + +---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+ + | 0 | 1 | 4 | 5 | 6 | 7 | | 0 | 1 | a | b | c | 4 | 5 | 6 | 7 | + +---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+ + A B \=========/ + insert=[a,b,c] + + In case A, it is obvious that copying of [4,5,6,7] must be left-to-right so + that we don't end up with [0,1,6,7,6,7]. In case B, we have the opposite; we + must go right-to-left or else we would end up with [0,1,a,b,c,4,4,4,4]. + */ + function replaceSim (array, index, removeCount, insert) { + var add = insert ? insert.length : 0, + length = array.length, + pos = fixArrayIndex(array, index), + remove, + tailOldPos, + tailNewPos, + tailCount, + lengthAfterRemove, + i; + + // we try to use Array.push when we can for efficiency... + if (pos === length) { + if (add) { + array.push.apply(array, insert); + } + } else { + remove = Math.min(removeCount, length - pos); + tailOldPos = pos + remove; + tailNewPos = tailOldPos + add - remove; + tailCount = length - tailOldPos; + lengthAfterRemove = length - remove; + + if (tailNewPos < tailOldPos) { // case A + for (i = 0; i < tailCount; ++i) { + array[tailNewPos+i] = array[tailOldPos+i]; + } + } else if (tailNewPos > tailOldPos) { // case B + for (i = tailCount; i--; ) { + array[tailNewPos+i] = array[tailOldPos+i]; + } + } // else, add == remove (nothing to do) + + if (add && pos === lengthAfterRemove) { + array.length = lengthAfterRemove; // truncate array + array.push.apply(array, insert); + } else { + array.length = lengthAfterRemove + add; // reserves space + for (i = 0; i < add; ++i) { + array[pos+i] = insert[i]; + } + } + } + + return array; + } + + function replaceNative (array, index, removeCount, insert) { + if (insert && insert.length) { + // Inserting at index zero with no removing: use unshift + if (index === 0 && !removeCount) { + array.unshift.apply(array, insert); + } + // Inserting/replacing in middle of array + else if (index < array.length) { + array.splice.apply(array, [index, removeCount].concat(insert)); + } + // Appending to array + else { + array.push.apply(array, insert); + } + } else { + array.splice(index, removeCount); + } + return array; + } + + function eraseSim (array, index, removeCount) { + return replaceSim(array, index, removeCount); + } + + function eraseNative (array, index, removeCount) { + array.splice(index, removeCount); + return array; + } + + function spliceSim (array, index, removeCount) { + var pos = fixArrayIndex(array, index), + removed = array.slice(index, fixArrayIndex(array, pos+removeCount)); + + if (arguments.length < 4) { + replaceSim(array, pos, removeCount); + } else { + replaceSim(array, pos, removeCount, slice.call(arguments, 3)); + } + + return removed; + } + + function spliceNative (array) { + return array.splice.apply(array, slice.call(arguments, 1)); + } + + erase = supportsSplice ? eraseNative : eraseSim; + replace = supportsSplice ? replaceNative : replaceSim; + splice = supportsSplice ? spliceNative : spliceSim; + + // NOTE: from here on, use erase, replace or splice (not native methods)... + + ExtArray = Ext.Array = { + /** + * Iterates an array or an iterable value and invoke the given callback function for each item. + * + * var countries = ['Vietnam', 'Singapore', 'United States', 'Russia']; + * + * Ext.Array.each(countries, function(name, index, countriesItSelf) { + * console.log(name); + * }); + * + * var sum = function() { + * var sum = 0; + * + * Ext.Array.each(arguments, function(value) { + * sum += value; + * }); + * + * return sum; + * }; + * + * sum(1, 2, 3); // returns 6 + * + * The iteration can be stopped by returning false in the function callback. + * + * Ext.Array.each(countries, function(name, index, countriesItSelf) { + * if (name === 'Singapore') { + * return false; // break here + * } + * }); + * + * {@link Ext#each Ext.each} is alias for {@link Ext.Array#each Ext.Array.each} + * + * @param {Array/NodeList/Object} iterable The value to be iterated. If this + * argument is not iterable, the callback function is called once. + * @param {Function} fn The callback function. If it returns false, the iteration stops and this method returns + * the current `index`. + * @param {Object} fn.item The item at the current `index` in the passed `array` + * @param {Number} fn.index The current `index` within the `array` + * @param {Array} fn.allItems The `array` itself which was passed as the first argument + * @param {Boolean} fn.return Return false to stop iteration. + * @param {Object} scope (Optional) The scope (`this` reference) in which the specified function is executed. + * @param {Boolean} reverse (Optional) Reverse the iteration order (loop from the end to the beginning) + * Defaults false + * @return {Boolean} See description for the `fn` parameter. + */ + each: function(array, fn, scope, reverse) { + array = ExtArray.from(array); + + var i, + ln = array.length; + + if (reverse !== true) { + for (i = 0; i < ln; i++) { + if (fn.call(scope || array[i], array[i], i, array) === false) { + return i; + } + } + } + else { + for (i = ln - 1; i > -1; i--) { + if (fn.call(scope || array[i], array[i], i, array) === false) { + return i; + } + } + } + + return true; + }, + + /** + * Iterates an array and invoke the given callback function for each item. Note that this will simply + * delegate to the native Array.prototype.forEach method if supported. It doesn't support stopping the + * iteration by returning false in the callback function like {@link Ext.Array#each}. However, performance + * could be much better in modern browsers comparing with {@link Ext.Array#each} + * + * @param {Array} array The array to iterate + * @param {Function} fn The callback function. + * @param {Object} fn.item The item at the current `index` in the passed `array` + * @param {Number} fn.index The current `index` within the `array` + * @param {Array} fn.allItems The `array` itself which was passed as the first argument + * @param {Object} scope (Optional) The execution scope (`this`) in which the specified function is executed. + */ + forEach: supportsForEach ? function(array, fn, scope) { + array.forEach(fn, scope); + } : function(array, fn, scope) { + var i = 0, + ln = array.length; + + for (; i < ln; i++) { + fn.call(scope, array[i], i, array); + } + }, + + /** + * Get the index of the provided `item` in the given `array`, a supplement for the + * missing arrayPrototype.indexOf in Internet Explorer. + * + * @param {Array} array The array to check + * @param {Object} item The item to look for + * @param {Number} from (Optional) The index at which to begin the search + * @return {Number} The index of item in the array (or -1 if it is not found) + */ + indexOf: supportsIndexOf ? function(array, item, from) { + return arrayPrototype.indexOf.call(array, item, from); + } : function(array, item, from) { + var i, length = array.length; + + for (i = (from < 0) ? Math.max(0, length + from) : from || 0; i < length; i++) { + if (array[i] === item) { + return i; + } + } + + return -1; + }, + + /** + * Checks whether or not the given `array` contains the specified `item` + * + * @param {Array} array The array to check + * @param {Object} item The item to look for + * @return {Boolean} True if the array contains the item, false otherwise + */ + contains: supportsIndexOf ? function(array, item) { + return arrayPrototype.indexOf.call(array, item) !== -1; + } : function(array, item) { + var i, ln; + + for (i = 0, ln = array.length; i < ln; i++) { + if (array[i] === item) { + return true; + } + } + + return false; + }, + + /** + * Converts any iterable (numeric indices and a length property) into a true array. + * + * function test() { + * var args = Ext.Array.toArray(arguments), + * fromSecondToLastArgs = Ext.Array.toArray(arguments, 1); + * + * alert(args.join(' ')); + * alert(fromSecondToLastArgs.join(' ')); + * } + * + * test('just', 'testing', 'here'); // alerts 'just testing here'; + * // alerts 'testing here'; + * + * Ext.Array.toArray(document.getElementsByTagName('div')); // will convert the NodeList into an array + * Ext.Array.toArray('splitted'); // returns ['s', 'p', 'l', 'i', 't', 't', 'e', 'd'] + * Ext.Array.toArray('splitted', 0, 3); // returns ['s', 'p', 'l'] + * + * {@link Ext#toArray Ext.toArray} is alias for {@link Ext.Array#toArray Ext.Array.toArray} + * + * @param {Object} iterable the iterable object to be turned into a true Array. + * @param {Number} start (Optional) a zero-based index that specifies the start of extraction. Defaults to 0 + * @param {Number} end (Optional) a 1-based index that specifies the end of extraction. Defaults to the last + * index of the iterable value + * @return {Array} array + */ + toArray: function(iterable, start, end){ + if (!iterable || !iterable.length) { + return []; + } + + if (typeof iterable === 'string') { + iterable = iterable.split(''); + } + + if (supportsSliceOnNodeList) { + return slice.call(iterable, start || 0, end || iterable.length); + } + + var array = [], + i; + + start = start || 0; + end = end ? ((end < 0) ? iterable.length + end : end) : iterable.length; + + for (i = start; i < end; i++) { + array.push(iterable[i]); + } + + return array; + }, + + /** + * Plucks the value of a property from each item in the Array. Example: + * + * Ext.Array.pluck(Ext.query("p"), "className"); // [el1.className, el2.className, ..., elN.className] + * + * @param {Array/NodeList} array The Array of items to pluck the value from. + * @param {String} propertyName The property name to pluck from each element. + * @return {Array} The value from each item in the Array. + */ + pluck: function(array, propertyName) { + var ret = [], + i, ln, item; + + for (i = 0, ln = array.length; i < ln; i++) { + item = array[i]; + + ret.push(item[propertyName]); + } + + return ret; + }, + + /** + * Creates a new array with the results of calling a provided function on every element in this array. + * + * @param {Array} array + * @param {Function} fn Callback function for each item + * @param {Mixed} fn.item Current item. + * @param {Number} fn.index Index of the item. + * @param {Array} fn.array The whole array that's being iterated. + * @param {Object} [scope] Callback function scope + * @return {Array} results + */ + map: supportsMap ? function(array, fn, scope) { + if (!fn) { + Ext.Error.raise('Ext.Array.map must have a callback function passed as second argument.'); + } + return array.map(fn, scope); + } : function(array, fn, scope) { + if (!fn) { + Ext.Error.raise('Ext.Array.map must have a callback function passed as second argument.'); + } + var results = [], + i = 0, + len = array.length; + + for (; i < len; i++) { + results[i] = fn.call(scope, array[i], i, array); + } + + return results; + }, + + /** + * Executes the specified function for each array element until the function returns a falsy value. + * If such an item is found, the function will return false immediately. + * Otherwise, it will return true. + * + * @param {Array} array + * @param {Function} fn Callback function for each item + * @param {Mixed} fn.item Current item. + * @param {Number} fn.index Index of the item. + * @param {Array} fn.array The whole array that's being iterated. + * @param {Object} scope Callback function scope + * @return {Boolean} True if no false value is returned by the callback function. + */ + every: supportsEvery ? function(array, fn, scope) { + if (!fn) { + Ext.Error.raise('Ext.Array.every must have a callback function passed as second argument.'); + } + return array.every(fn, scope); + } : function(array, fn, scope) { + if (!fn) { + Ext.Error.raise('Ext.Array.every must have a callback function passed as second argument.'); + } + var i = 0, + ln = array.length; + + for (; i < ln; ++i) { + if (!fn.call(scope, array[i], i, array)) { + return false; + } + } + + return true; + }, + + /** + * Executes the specified function for each array element until the function returns a truthy value. + * If such an item is found, the function will return true immediately. Otherwise, it will return false. + * + * @param {Array} array + * @param {Function} fn Callback function for each item + * @param {Mixed} fn.item Current item. + * @param {Number} fn.index Index of the item. + * @param {Array} fn.array The whole array that's being iterated. + * @param {Object} scope Callback function scope + * @return {Boolean} True if the callback function returns a truthy value. + */ + some: supportsSome ? function(array, fn, scope) { + if (!fn) { + Ext.Error.raise('Ext.Array.some must have a callback function passed as second argument.'); + } + return array.some(fn, scope); + } : function(array, fn, scope) { + if (!fn) { + Ext.Error.raise('Ext.Array.some must have a callback function passed as second argument.'); + } + var i = 0, + ln = array.length; + + for (; i < ln; ++i) { + if (fn.call(scope, array[i], i, array)) { + return true; + } + } + + return false; + }, + + /** + * Shallow compares the contents of 2 arrays using strict equality. + * @param {Array} array1 + * @param {Array} array2 + * @return {Boolean} `true` if the arrays are equal. + */ + equals: function(array1, array2) { + var len1 = array1.length, + len2 = array2.length, + i; + + // Short circuit if the same array is passed twice + if (array1 === array2) { + return true; + } + + if (len1 !== len2) { + return false; + } + + for (i = 0; i < len1; ++i) { + if (array1[i] !== array2[i]) { + return false; + } + } + + return true; + }, + + /** + * Filter through an array and remove empty item as defined in {@link Ext#isEmpty Ext.isEmpty} + * + * See {@link Ext.Array#filter} + * + * @param {Array} array + * @return {Array} results + */ + clean: function(array) { + var results = [], + i = 0, + ln = array.length, + item; + + for (; i < ln; i++) { + item = array[i]; + + if (!Ext.isEmpty(item)) { + results.push(item); + } + } + + return results; + }, + + /** + * Returns a new array with unique items + * + * @param {Array} array + * @return {Array} results + */ + unique: function(array) { + var clone = [], + i = 0, + ln = array.length, + item; + + for (; i < ln; i++) { + item = array[i]; + + if (ExtArray.indexOf(clone, item) === -1) { + clone.push(item); + } + } + + return clone; + }, + + /** + * Creates a new array with all of the elements of this array for which + * the provided filtering function returns true. + * + * @param {Array} array + * @param {Function} fn Callback function for each item + * @param {Mixed} fn.item Current item. + * @param {Number} fn.index Index of the item. + * @param {Array} fn.array The whole array that's being iterated. + * @param {Object} scope Callback function scope + * @return {Array} results + */ + filter: supportsFilter ? function(array, fn, scope) { + if (!fn) { + Ext.Error.raise('Ext.Array.filter must have a filter function passed as second argument.'); + } + return array.filter(fn, scope); + } : function(array, fn, scope) { + if (!fn) { + Ext.Error.raise('Ext.Array.filter must have a filter function passed as second argument.'); + } + var results = [], + i = 0, + ln = array.length; + + for (; i < ln; i++) { + if (fn.call(scope, array[i], i, array)) { + results.push(array[i]); + } + } + + return results; + }, + + /** + * Returns the first item in the array which elicits a true return value from the + * passed selection function. + * @param {Array} array The array to search + * @param {Function} fn The selection function to execute for each item. + * @param {Mixed} fn.item The array item. + * @param {String} fn.index The index of the array item. + * @param {Object} scope (optional) The scope (this reference) in which the + * function is executed. Defaults to the array + * @return {Object} The first item in the array which returned true from the selection + * function, or null if none was found. + */ + findBy : function(array, fn, scope) { + var i = 0, + len = array.length; + + for (; i < len; i++) { + if (fn.call(scope || array, array[i], i)) { + return array[i]; + } + } + return null; + }, + + /** + * Converts a value to an array if it's not already an array; returns: + * + * - An empty array if given value is `undefined` or `null` + * - Itself if given value is already an array + * - An array copy if given value is {@link Ext#isIterable iterable} (arguments, NodeList and alike) + * - An array with one item which is the given value, otherwise + * + * @param {Object} value The value to convert to an array if it's not already is an array + * @param {Boolean} newReference (Optional) True to clone the given array and return a new reference if necessary, + * defaults to false + * @return {Array} array + */ + from: function(value, newReference) { + if (value === undefined || value === null) { + return []; + } + + if (Ext.isArray(value)) { + return (newReference) ? slice.call(value) : value; + } + + var type = typeof value; + // Both strings and functions will have a length property. In phantomJS, NodeList + // instances report typeof=='function' but don't have an apply method... + if (value && value.length !== undefined && type !== 'string' && (type !== 'function' || !value.apply)) { + return ExtArray.toArray(value); + } + + return [value]; + }, + + /** + * Removes the specified item from the array if it exists + * + * @param {Array} array The array + * @param {Object} item The item to remove + * @return {Array} The passed array itself + */ + remove: function(array, item) { + var index = ExtArray.indexOf(array, item); + + if (index !== -1) { + erase(array, index, 1); + } + + return array; + }, + + /** + * Push an item into the array only if the array doesn't contain it yet + * + * @param {Array} array The array + * @param {Object} item The item to include + */ + include: function(array, item) { + if (!ExtArray.contains(array, item)) { + array.push(item); + } + }, + + /** + * Clone a flat array without referencing the previous one. Note that this is different + * from Ext.clone since it doesn't handle recursive cloning. It's simply a convenient, easy-to-remember method + * for Array.prototype.slice.call(array) + * + * @param {Array} array The array + * @return {Array} The clone array + */ + clone: function(array) { + return slice.call(array); + }, + + /** + * Merge multiple arrays into one with unique items. + * + * {@link Ext.Array#union} is alias for {@link Ext.Array#merge} + * + * @param {Array} array1 + * @param {Array} array2 + * @param {Array} etc + * @return {Array} merged + */ + merge: function() { + var args = slice.call(arguments), + array = [], + i, ln; + + for (i = 0, ln = args.length; i < ln; i++) { + array = array.concat(args[i]); + } + + return ExtArray.unique(array); + }, + + /** + * Merge multiple arrays into one with unique items that exist in all of the arrays. + * + * @param {Array} array1 + * @param {Array} array2 + * @param {Array} etc + * @return {Array} intersect + */ + intersect: function() { + var intersection = [], + arrays = slice.call(arguments), + arraysLength, + array, + arrayLength, + minArray, + minArrayIndex, + minArrayCandidate, + minArrayLength, + element, + elementCandidate, + elementCount, + i, j, k; + + if (!arrays.length) { + return intersection; + } + + // Find the smallest array + arraysLength = arrays.length; + for (i = minArrayIndex = 0; i < arraysLength; i++) { + minArrayCandidate = arrays[i]; + if (!minArray || minArrayCandidate.length < minArray.length) { + minArray = minArrayCandidate; + minArrayIndex = i; + } + } + + minArray = ExtArray.unique(minArray); + erase(arrays, minArrayIndex, 1); + + // Use the smallest unique'd array as the anchor loop. If the other array(s) do contain + // an item in the small array, we're likely to find it before reaching the end + // of the inner loop and can terminate the search early. + minArrayLength = minArray.length; + arraysLength = arrays.length; + for (i = 0; i < minArrayLength; i++) { + element = minArray[i]; + elementCount = 0; + + for (j = 0; j < arraysLength; j++) { + array = arrays[j]; + arrayLength = array.length; + for (k = 0; k < arrayLength; k++) { + elementCandidate = array[k]; + if (element === elementCandidate) { + elementCount++; + break; + } + } + } + + if (elementCount === arraysLength) { + intersection.push(element); + } + } + + return intersection; + }, + + /** + * Perform a set difference A-B by subtracting all items in array B from array A. + * + * @param {Array} arrayA + * @param {Array} arrayB + * @return {Array} difference + */ + difference: function(arrayA, arrayB) { + var clone = slice.call(arrayA), + ln = clone.length, + i, j, lnB; + + for (i = 0,lnB = arrayB.length; i < lnB; i++) { + for (j = 0; j < ln; j++) { + if (clone[j] === arrayB[i]) { + erase(clone, j, 1); + j--; + ln--; + } + } + } + + return clone; + }, + + /** + * Returns a shallow copy of a part of an array. This is equivalent to the native + * call "Array.prototype.slice.call(array, begin, end)". This is often used when "array" + * is "arguments" since the arguments object does not supply a slice method but can + * be the context object to Array.prototype.slice. + * + * @param {Array} array The array (or arguments object). + * @param {Number} begin The index at which to begin. Negative values are offsets from + * the end of the array. + * @param {Number} end The index at which to end. The copied items do not include + * end. Negative values are offsets from the end of the array. If end is omitted, + * all items up to the end of the array are copied. + * @return {Array} The copied piece of the array. + * @method slice + */ + // Note: IE6 will return [] on slice.call(x, undefined). + slice: ([1,2].slice(1, undefined).length ? + function (array, begin, end) { + return slice.call(array, begin, end); + } : + // at least IE6 uses arguments.length for variadic signature + function (array, begin, end) { + // After tested for IE 6, the one below is of the best performance + // see http://jsperf.com/slice-fix + if (typeof begin === 'undefined') { + return slice.call(array); + } + if (typeof end === 'undefined') { + return slice.call(array, begin); + } + return slice.call(array, begin, end); + } + ), + + /** + * Sorts the elements of an Array. + * By default, this method sorts the elements alphabetically and ascending. + * + * @param {Array} array The array to sort. + * @param {Function} sortFn (optional) The comparison function. + * @param {Mixed} sortFn.a An item to compare. + * @param {Mixed} sortFn.b Another item to compare. + * @return {Array} The sorted array. + */ + sort: supportsSort ? function(array, sortFn) { + if (sortFn) { + return array.sort(sortFn); + } else { + return array.sort(); + } + } : function(array, sortFn) { + var length = array.length, + i = 0, + comparison, + j, min, tmp; + + for (; i < length; i++) { + min = i; + for (j = i + 1; j < length; j++) { + if (sortFn) { + comparison = sortFn(array[j], array[min]); + if (comparison < 0) { + min = j; + } + } else if (array[j] < array[min]) { + min = j; + } + } + if (min !== i) { + tmp = array[i]; + array[i] = array[min]; + array[min] = tmp; + } + } + + return array; + }, + + /** + * Recursively flattens into 1-d Array. Injects Arrays inline. + * + * @param {Array} array The array to flatten + * @return {Array} The 1-d array. + */ + flatten: function(array) { + var worker = []; + + function rFlatten(a) { + var i, ln, v; + + for (i = 0, ln = a.length; i < ln; i++) { + v = a[i]; + + if (Ext.isArray(v)) { + rFlatten(v); + } else { + worker.push(v); + } + } + + return worker; + } + + return rFlatten(array); + }, + + /** + * Returns the minimum value in the Array. + * + * @param {Array/NodeList} array The Array from which to select the minimum value. + * @param {Function} comparisonFn (optional) a function to perform the comparision which determines minimization. + * If omitted the "<" operator will be used. Note: gt = 1; eq = 0; lt = -1 + * @param {Mixed} comparisonFn.min Current minimum value. + * @param {Mixed} comparisonFn.item The value to compare with the current minimum. + * @return {Object} minValue The minimum value + */ + min: function(array, comparisonFn) { + var min = array[0], + i, ln, item; + + for (i = 0, ln = array.length; i < ln; i++) { + item = array[i]; + + if (comparisonFn) { + if (comparisonFn(min, item) === 1) { + min = item; + } + } + else { + if (item < min) { + min = item; + } + } + } + + return min; + }, + + /** + * Returns the maximum value in the Array. + * + * @param {Array/NodeList} array The Array from which to select the maximum value. + * @param {Function} comparisonFn (optional) a function to perform the comparision which determines maximization. + * If omitted the ">" operator will be used. Note: gt = 1; eq = 0; lt = -1 + * @param {Mixed} comparisonFn.max Current maximum value. + * @param {Mixed} comparisonFn.item The value to compare with the current maximum. + * @return {Object} maxValue The maximum value + */ + max: function(array, comparisonFn) { + var max = array[0], + i, ln, item; + + for (i = 0, ln = array.length; i < ln; i++) { + item = array[i]; + + if (comparisonFn) { + if (comparisonFn(max, item) === -1) { + max = item; + } + } + else { + if (item > max) { + max = item; + } + } + } + + return max; + }, + + /** + * Calculates the mean of all items in the array. + * + * @param {Array} array The Array to calculate the mean value of. + * @return {Number} The mean. + */ + mean: function(array) { + return array.length > 0 ? ExtArray.sum(array) / array.length : undefined; + }, + + /** + * Calculates the sum of all items in the given array. + * + * @param {Array} array The Array to calculate the sum value of. + * @return {Number} The sum. + */ + sum: function(array) { + var sum = 0, + i, ln, item; + + for (i = 0,ln = array.length; i < ln; i++) { + item = array[i]; + + sum += item; + } + + return sum; + }, + + /** + * Creates a map (object) keyed by the elements of the given array. The values in + * the map are the index+1 of the array element. For example: + * + * var map = Ext.Array.toMap(['a','b','c']); + * + * // map = { a: 1, b: 2, c: 3 }; + * + * Or a key property can be specified: + * + * var map = Ext.Array.toMap([ + * { name: 'a' }, + * { name: 'b' }, + * { name: 'c' } + * ], 'name'); + * + * // map = { a: 1, b: 2, c: 3 }; + * + * Lastly, a key extractor can be provided: + * + * var map = Ext.Array.toMap([ + * { name: 'a' }, + * { name: 'b' }, + * { name: 'c' } + * ], function (obj) { return obj.name.toUpperCase(); }); + * + * // map = { A: 1, B: 2, C: 3 }; + * + * @param {Array} array The Array to create the map from. + * @param {String/Function} [getKey] Name of the object property to use + * as a key or a function to extract the key. + * @param {Object} [scope] Value of this inside callback. + * @return {Object} The resulting map. + */ + toMap: function(array, getKey, scope) { + var map = {}, + i = array.length; + + if (!getKey) { + while (i--) { + map[array[i]] = i+1; + } + } else if (typeof getKey == 'string') { + while (i--) { + map[array[i][getKey]] = i+1; + } + } else { + while (i--) { + map[getKey.call(scope, array[i])] = i+1; + } + } + + return map; + }, + + /** + * Creates a map (object) keyed by a property of elements of the given array. The values in + * the map are the array element. For example: + * + * var map = Ext.Array.toMap(['a','b','c']); + * + * // map = { a: 'a', b: 'b', c: 'c' }; + * + * Or a key property can be specified: + * + * var map = Ext.Array.toMap([ + * { name: 'a' }, + * { name: 'b' }, + * { name: 'c' } + * ], 'name'); + * + * // map = { a: {name: 'a'}, b: {name: 'b'}, c: {name: 'c'} }; + * + * Lastly, a key extractor can be provided: + * + * var map = Ext.Array.toMap([ + * { name: 'a' }, + * { name: 'b' }, + * { name: 'c' } + * ], function (obj) { return obj.name.toUpperCase(); }); + * + * // map = { A: {name: 'a'}, B: {name: 'b'}, C: {name: 'c'} }; + * + * @param {Array} array The Array to create the map from. + * @param {String/Function} [getKey] Name of the object property to use + * as a key or a function to extract the key. + * @param {Object} [scope] Value of this inside callback. + * @return {Object} The resulting map. + */ + toValueMap: function(array, getKey, scope) { + var map = {}, + i = array.length; + + if (!getKey) { + while (i--) { + map[array[i]] = array[i]; + } + } else if (typeof getKey == 'string') { + while (i--) { + map[array[i][getKey]] = array[i]; + } + } else { + while (i--) { + map[getKey.call(scope, array[i])] = array[i]; + } + } + + return map; + }, + + _replaceSim: replaceSim, // for unit testing + _spliceSim: spliceSim, + + /** + * Removes items from an array. This is functionally equivalent to the splice method + * of Array, but works around bugs in IE8's splice method and does not copy the + * removed elements in order to return them (because very often they are ignored). + * + * @param {Array} array The Array on which to replace. + * @param {Number} index The index in the array at which to operate. + * @param {Number} removeCount The number of items to remove at index. + * @return {Array} The array passed. + * @method + */ + erase: erase, + + /** + * Inserts items in to an array. + * + * @param {Array} array The Array in which to insert. + * @param {Number} index The index in the array at which to operate. + * @param {Array} items The array of items to insert at index. + * @return {Array} The array passed. + */ + insert: function (array, index, items) { + return replace(array, index, 0, items); + }, + + /** + * Replaces items in an array. This is functionally equivalent to the splice method + * of Array, but works around bugs in IE8's splice method and is often more convenient + * to call because it accepts an array of items to insert rather than use a variadic + * argument list. + * + * @param {Array} array The Array on which to replace. + * @param {Number} index The index in the array at which to operate. + * @param {Number} removeCount The number of items to remove at index (can be 0). + * @param {Array} insert (optional) An array of items to insert at index. + * @return {Array} The array passed. + * @method + */ + replace: replace, + + /** + * Replaces items in an array. This is equivalent to the splice method of Array, but + * works around bugs in IE8's splice method. The signature is exactly the same as the + * splice method except that the array is the first argument. All arguments following + * removeCount are inserted in the array at index. + * + * @param {Array} array The Array on which to replace. + * @param {Number} index The index in the array at which to operate. + * @param {Number} removeCount The number of items to remove at index (can be 0). + * @param {Object...} elements The elements to add to the array. If you don't specify + * any elements, splice simply removes elements from the array. + * @return {Array} An array containing the removed items. + * @method + */ + splice: splice, + + /** + * Pushes new items onto the end of an Array. + * + * Passed parameters may be single items, or arrays of items. If an Array is found in the argument list, all its + * elements are pushed into the end of the target Array. + * + * @param {Array} target The Array onto which to push new items + * @param {Object...} elements The elements to add to the array. Each parameter may + * be an Array, in which case all the elements of that Array will be pushed into the end of the + * destination Array. + * @return {Array} An array containing all the new items push onto the end. + * + */ + push: function(array) { + var len = arguments.length, + i = 1, + newItem; + + if (array === undefined) { + array = []; + } else if (!Ext.isArray(array)) { + array = [array]; + } + for (; i < len; i++) { + newItem = arguments[i]; + Array.prototype.push[Ext.isIterable(newItem) ? 'apply' : 'call'](array, newItem); + } + return array; + } + }; + + /** + * @method + * @member Ext + * @inheritdoc Ext.Array#each + */ + Ext.each = ExtArray.each; + + /** + * @method + * @member Ext.Array + * @inheritdoc Ext.Array#merge + */ + ExtArray.union = ExtArray.merge; + + /** + * Old alias to {@link Ext.Array#min} + * @deprecated 4.0.0 Use {@link Ext.Array#min} instead + * @method + * @member Ext + * @inheritdoc Ext.Array#min + */ + Ext.min = ExtArray.min; + + /** + * Old alias to {@link Ext.Array#max} + * @deprecated 4.0.0 Use {@link Ext.Array#max} instead + * @method + * @member Ext + * @inheritdoc Ext.Array#max + */ + Ext.max = ExtArray.max; + + /** + * Old alias to {@link Ext.Array#sum} + * @deprecated 4.0.0 Use {@link Ext.Array#sum} instead + * @method + * @member Ext + * @inheritdoc Ext.Array#sum + */ + Ext.sum = ExtArray.sum; + + /** + * Old alias to {@link Ext.Array#mean} + * @deprecated 4.0.0 Use {@link Ext.Array#mean} instead + * @method + * @member Ext + * @inheritdoc Ext.Array#mean + */ + Ext.mean = ExtArray.mean; + + /** + * Old alias to {@link Ext.Array#flatten} + * @deprecated 4.0.0 Use {@link Ext.Array#flatten} instead + * @method + * @member Ext + * @inheritdoc Ext.Array#flatten + */ + Ext.flatten = ExtArray.flatten; + + /** + * Old alias to {@link Ext.Array#clean} + * @deprecated 4.0.0 Use {@link Ext.Array#clean} instead + * @method + * @member Ext + * @inheritdoc Ext.Array#clean + */ + Ext.clean = ExtArray.clean; + + /** + * Old alias to {@link Ext.Array#unique} + * @deprecated 4.0.0 Use {@link Ext.Array#unique} instead + * @method + * @member Ext + * @inheritdoc Ext.Array#unique + */ + Ext.unique = ExtArray.unique; + + /** + * Old alias to {@link Ext.Array#pluck Ext.Array.pluck} + * @deprecated 4.0.0 Use {@link Ext.Array#pluck Ext.Array.pluck} instead + * @method + * @member Ext + * @inheritdoc Ext.Array#pluck + */ + Ext.pluck = ExtArray.pluck; + + /** + * @method + * @member Ext + * @inheritdoc Ext.Array#toArray + */ + Ext.toArray = function() { + return ExtArray.toArray.apply(ExtArray, arguments); + }; +}()); + +//@tag foundation,core +//@require Array.js + +/** + * @class Ext.Function + * + * A collection of useful static methods to deal with function callbacks + * @singleton + * @alternateClassName Ext.util.Functions + */ +Ext.Function = { + + /** + * A very commonly used method throughout the framework. It acts as a wrapper around another method + * which originally accepts 2 arguments for `name` and `value`. + * The wrapped function then allows "flexible" value setting of either: + * + * - `name` and `value` as 2 arguments + * - one single object argument with multiple key - value pairs + * + * For example: + * + * var setValue = Ext.Function.flexSetter(function(name, value) { + * this[name] = value; + * }); + * + * // Afterwards + * // Setting a single name - value + * setValue('name1', 'value1'); + * + * // Settings multiple name - value pairs + * setValue({ + * name1: 'value1', + * name2: 'value2', + * name3: 'value3' + * }); + * + * @param {Function} setter + * @returns {Function} flexSetter + */ + flexSetter: function(fn) { + return function(a, b) { + var k, i; + + if (a === null) { + return this; + } + + if (typeof a !== 'string') { + for (k in a) { + if (a.hasOwnProperty(k)) { + fn.call(this, k, a[k]); + } + } + + if (Ext.enumerables) { + for (i = Ext.enumerables.length; i--;) { + k = Ext.enumerables[i]; + if (a.hasOwnProperty(k)) { + fn.call(this, k, a[k]); + } + } + } + } else { + fn.call(this, a, b); + } + + return this; + }; + }, + + /** + * Create a new function from the provided `fn`, change `this` to the provided scope, optionally + * overrides arguments for the call. (Defaults to the arguments passed by the caller) + * + * {@link Ext#bind Ext.bind} is alias for {@link Ext.Function#bind Ext.Function.bind} + * + * @param {Function} fn The function to delegate. + * @param {Object} scope (optional) The scope (`this` reference) in which the function is executed. + * **If omitted, defaults to the default global environment object (usually the browser window).** + * @param {Array} args (optional) Overrides arguments for the call. (Defaults to the arguments passed by the caller) + * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding, + * if a number the args are inserted at the specified position + * @return {Function} The new function + */ + bind: function(fn, scope, args, appendArgs) { + if (arguments.length === 2) { + return function() { + return fn.apply(scope, arguments); + }; + } + + var method = fn, + slice = Array.prototype.slice; + + return function() { + var callArgs = args || arguments; + + if (appendArgs === true) { + callArgs = slice.call(arguments, 0); + callArgs = callArgs.concat(args); + } + else if (typeof appendArgs == 'number') { + callArgs = slice.call(arguments, 0); // copy arguments first + Ext.Array.insert(callArgs, appendArgs, args); + } + + return method.apply(scope || Ext.global, callArgs); + }; + }, + + /** + * Create a new function from the provided `fn`, the arguments of which are pre-set to `args`. + * New arguments passed to the newly created callback when it's invoked are appended after the pre-set ones. + * This is especially useful when creating callbacks. + * + * For example: + * + * var originalFunction = function(){ + * alert(Ext.Array.from(arguments).join(' ')); + * }; + * + * var callback = Ext.Function.pass(originalFunction, ['Hello', 'World']); + * + * callback(); // alerts 'Hello World' + * callback('by Me'); // alerts 'Hello World by Me' + * + * {@link Ext#pass Ext.pass} is alias for {@link Ext.Function#pass Ext.Function.pass} + * + * @param {Function} fn The original function + * @param {Array} args The arguments to pass to new callback + * @param {Object} scope (optional) The scope (`this` reference) in which the function is executed. + * @return {Function} The new callback function + */ + pass: function(fn, args, scope) { + if (!Ext.isArray(args)) { + if (Ext.isIterable(args)) { + args = Ext.Array.clone(args); + } else { + args = args !== undefined ? [args] : []; + } + } + + return function() { + var fnArgs = [].concat(args); + fnArgs.push.apply(fnArgs, arguments); + return fn.apply(scope || this, fnArgs); + }; + }, + + /** + * Create an alias to the provided method property with name `methodName` of `object`. + * Note that the execution scope will still be bound to the provided `object` itself. + * + * @param {Object/Function} object + * @param {String} methodName + * @return {Function} aliasFn + */ + alias: function(object, methodName) { + return function() { + return object[methodName].apply(object, arguments); + }; + }, + + /** + * Create a "clone" of the provided method. The returned method will call the given + * method passing along all arguments and the "this" pointer and return its result. + * + * @param {Function} method + * @return {Function} cloneFn + */ + clone: function(method) { + return function() { + return method.apply(this, arguments); + }; + }, + + /** + * Creates an interceptor function. The passed function is called before the original one. If it returns false, + * the original one is not called. The resulting function returns the results of the original function. + * The passed function is called with the parameters of the original function. Example usage: + * + * var sayHi = function(name){ + * alert('Hi, ' + name); + * } + * + * sayHi('Fred'); // alerts "Hi, Fred" + * + * // create a new function that validates input without + * // directly modifying the original function: + * var sayHiToFriend = Ext.Function.createInterceptor(sayHi, function(name){ + * return name == 'Brian'; + * }); + * + * sayHiToFriend('Fred'); // no alert + * sayHiToFriend('Brian'); // alerts "Hi, Brian" + * + * @param {Function} origFn The original function. + * @param {Function} newFn The function to call before the original + * @param {Object} [scope] The scope (`this` reference) in which the passed function is executed. + * **If omitted, defaults to the scope in which the original function is called or the browser window.** + * @param {Object} [returnValue=null] The value to return if the passed function return false. + * @return {Function} The new function + */ + createInterceptor: function(origFn, newFn, scope, returnValue) { + var method = origFn; + if (!Ext.isFunction(newFn)) { + return origFn; + } else { + returnValue = Ext.isDefined(returnValue) ? returnValue : null; + return function() { + var me = this, + args = arguments; + + newFn.target = me; + newFn.method = origFn; + return (newFn.apply(scope || me || Ext.global, args) !== false) ? origFn.apply(me || Ext.global, args) : returnValue; + }; + } + }, + + /** + * Creates a delegate (callback) which, when called, executes after a specific delay. + * + * @param {Function} fn The function which will be called on a delay when the returned function is called. + * Optionally, a replacement (or additional) argument list may be specified. + * @param {Number} delay The number of milliseconds to defer execution by whenever called. + * @param {Object} scope (optional) The scope (`this` reference) used by the function at execution time. + * @param {Array} args (optional) Override arguments for the call. (Defaults to the arguments passed by the caller) + * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding, + * if a number the args are inserted at the specified position. + * @return {Function} A function which, when called, executes the original function after the specified delay. + */ + createDelayed: function(fn, delay, scope, args, appendArgs) { + if (scope || args) { + fn = Ext.Function.bind(fn, scope, args, appendArgs); + } + + return function() { + var me = this, + args = Array.prototype.slice.call(arguments); + + setTimeout(function() { + fn.apply(me, args); + }, delay); + }; + }, + + /** + * Calls this function after the number of millseconds specified, optionally in a specific scope. Example usage: + * + * var sayHi = function(name){ + * alert('Hi, ' + name); + * } + * + * // executes immediately: + * sayHi('Fred'); + * + * // executes after 2 seconds: + * Ext.Function.defer(sayHi, 2000, this, ['Fred']); + * + * // this syntax is sometimes useful for deferring + * // execution of an anonymous function: + * Ext.Function.defer(function(){ + * alert('Anonymous'); + * }, 100); + * + * {@link Ext#defer Ext.defer} is alias for {@link Ext.Function#defer Ext.Function.defer} + * + * @param {Function} fn The function to defer. + * @param {Number} millis The number of milliseconds for the setTimeout call + * (if less than or equal to 0 the function is executed immediately) + * @param {Object} scope (optional) The scope (`this` reference) in which the function is executed. + * **If omitted, defaults to the browser window.** + * @param {Array} args (optional) Overrides arguments for the call. (Defaults to the arguments passed by the caller) + * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding, + * if a number the args are inserted at the specified position + * @return {Number} The timeout id that can be used with clearTimeout + */ + defer: function(fn, millis, scope, args, appendArgs) { + fn = Ext.Function.bind(fn, scope, args, appendArgs); + if (millis > 0) { + return setTimeout(Ext.supports.TimeoutActualLateness ? function () { + fn(); + } : fn, millis); + } + fn(); + return 0; + }, + + /** + * Create a combined function call sequence of the original function + the passed function. + * The resulting function returns the results of the original function. + * The passed function is called with the parameters of the original function. Example usage: + * + * var sayHi = function(name){ + * alert('Hi, ' + name); + * } + * + * sayHi('Fred'); // alerts "Hi, Fred" + * + * var sayGoodbye = Ext.Function.createSequence(sayHi, function(name){ + * alert('Bye, ' + name); + * }); + * + * sayGoodbye('Fred'); // both alerts show + * + * @param {Function} originalFn The original function. + * @param {Function} newFn The function to sequence + * @param {Object} scope (optional) The scope (`this` reference) in which the passed function is executed. + * If omitted, defaults to the scope in which the original function is called or the default global environment object (usually the browser window). + * @return {Function} The new function + */ + createSequence: function(originalFn, newFn, scope) { + if (!newFn) { + return originalFn; + } + else { + return function() { + var result = originalFn.apply(this, arguments); + newFn.apply(scope || this, arguments); + return result; + }; + } + }, + + /** + * Creates a delegate function, optionally with a bound scope which, when called, buffers + * the execution of the passed function for the configured number of milliseconds. + * If called again within that period, the impending invocation will be canceled, and the + * timeout period will begin again. + * + * @param {Function} fn The function to invoke on a buffered timer. + * @param {Number} buffer The number of milliseconds by which to buffer the invocation of the + * function. + * @param {Object} scope (optional) The scope (`this` reference) in which + * the passed function is executed. If omitted, defaults to the scope specified by the caller. + * @param {Array} args (optional) Override arguments for the call. Defaults to the arguments + * passed by the caller. + * @return {Function} A function which invokes the passed function after buffering for the specified time. + */ + createBuffered: function(fn, buffer, scope, args) { + var timerId; + + return function() { + var callArgs = args || Array.prototype.slice.call(arguments, 0), + me = scope || this; + + if (timerId) { + clearTimeout(timerId); + } + + timerId = setTimeout(function(){ + fn.apply(me, callArgs); + }, buffer); + }; + }, + + /** + * Creates a throttled version of the passed function which, when called repeatedly and + * rapidly, invokes the passed function only after a certain interval has elapsed since the + * previous invocation. + * + * This is useful for wrapping functions which may be called repeatedly, such as + * a handler of a mouse move event when the processing is expensive. + * + * @param {Function} fn The function to execute at a regular time interval. + * @param {Number} interval The interval **in milliseconds** on which the passed function is executed. + * @param {Object} scope (optional) The scope (`this` reference) in which + * the passed function is executed. If omitted, defaults to the scope specified by the caller. + * @returns {Function} A function which invokes the passed function at the specified interval. + */ + createThrottled: function(fn, interval, scope) { + var lastCallTime, elapsed, lastArgs, timer, execute = function() { + fn.apply(scope || this, lastArgs); + lastCallTime = new Date().getTime(); + }; + + return function() { + elapsed = new Date().getTime() - lastCallTime; + lastArgs = arguments; + + clearTimeout(timer); + if (!lastCallTime || (elapsed >= interval)) { + execute(); + } else { + timer = setTimeout(execute, interval - elapsed); + } + }; + }, + + + /** + * Adds behavior to an existing method that is executed before the + * original behavior of the function. For example: + * + * var soup = { + * contents: [], + * add: function(ingredient) { + * this.contents.push(ingredient); + * } + * }; + * Ext.Function.interceptBefore(soup, "add", function(ingredient){ + * if (!this.contents.length && ingredient !== "water") { + * // Always add water to start with + * this.contents.push("water"); + * } + * }); + * soup.add("onions"); + * soup.add("salt"); + * soup.contents; // will contain: water, onions, salt + * + * @param {Object} object The target object + * @param {String} methodName Name of the method to override + * @param {Function} fn Function with the new behavior. It will + * be called with the same arguments as the original method. The + * return value of this function will be the return value of the + * new method. + * @param {Object} [scope] The scope to execute the interceptor function. Defaults to the object. + * @return {Function} The new function just created. + */ + interceptBefore: function(object, methodName, fn, scope) { + var method = object[methodName] || Ext.emptyFn; + + return (object[methodName] = function() { + var ret = fn.apply(scope || this, arguments); + method.apply(this, arguments); + + return ret; + }); + }, + + /** + * Adds behavior to an existing method that is executed after the + * original behavior of the function. For example: + * + * var soup = { + * contents: [], + * add: function(ingredient) { + * this.contents.push(ingredient); + * } + * }; + * Ext.Function.interceptAfter(soup, "add", function(ingredient){ + * // Always add a bit of extra salt + * this.contents.push("salt"); + * }); + * soup.add("water"); + * soup.add("onions"); + * soup.contents; // will contain: water, salt, onions, salt + * + * @param {Object} object The target object + * @param {String} methodName Name of the method to override + * @param {Function} fn Function with the new behavior. It will + * be called with the same arguments as the original method. The + * return value of this function will be the return value of the + * new method. + * @param {Object} [scope] The scope to execute the interceptor function. Defaults to the object. + * @return {Function} The new function just created. + */ + interceptAfter: function(object, methodName, fn, scope) { + var method = object[methodName] || Ext.emptyFn; + + return (object[methodName] = function() { + method.apply(this, arguments); + return fn.apply(scope || this, arguments); + }); + } +}; + +/** + * @method + * @member Ext + * @inheritdoc Ext.Function#defer + */ +Ext.defer = Ext.Function.alias(Ext.Function, 'defer'); + +/** + * @method + * @member Ext + * @inheritdoc Ext.Function#pass + */ +Ext.pass = Ext.Function.alias(Ext.Function, 'pass'); + +/** + * @method + * @member Ext + * @inheritdoc Ext.Function#bind + */ +Ext.bind = Ext.Function.alias(Ext.Function, 'bind'); + +//@tag foundation,core +//@require Function.js + +/** + * @class Ext.Object + * + * A collection of useful static methods to deal with objects. + * + * @singleton + */ + +(function() { + +// The "constructor" for chain: +var TemplateClass = function(){}, + ExtObject = Ext.Object = { + + /** + * Returns a new object with the given object as the prototype chain. This method is + * designed to mimic the ECMA standard `Object.create` method and is assigned to that + * function when it is available. + * + * **NOTE** This method does not support the property definitions capability of the + * `Object.create` method. Only the first argument is supported. + * + * @param {Object} object The prototype chain for the new object. + */ + chain: Object.create || function (object) { + TemplateClass.prototype = object; + var result = new TemplateClass(); + TemplateClass.prototype = null; + return result; + }, + + /** + * Converts a `name` - `value` pair to an array of objects with support for nested structures. Useful to construct + * query strings. For example: + * + * var objects = Ext.Object.toQueryObjects('hobbies', ['reading', 'cooking', 'swimming']); + * + * // objects then equals: + * [ + * { name: 'hobbies', value: 'reading' }, + * { name: 'hobbies', value: 'cooking' }, + * { name: 'hobbies', value: 'swimming' }, + * ]; + * + * var objects = Ext.Object.toQueryObjects('dateOfBirth', { + * day: 3, + * month: 8, + * year: 1987, + * extra: { + * hour: 4 + * minute: 30 + * } + * }, true); // Recursive + * + * // objects then equals: + * [ + * { name: 'dateOfBirth[day]', value: 3 }, + * { name: 'dateOfBirth[month]', value: 8 }, + * { name: 'dateOfBirth[year]', value: 1987 }, + * { name: 'dateOfBirth[extra][hour]', value: 4 }, + * { name: 'dateOfBirth[extra][minute]', value: 30 }, + * ]; + * + * @param {String} name + * @param {Object/Array} value + * @param {Boolean} [recursive=false] True to traverse object recursively + * @return {Array} + */ + toQueryObjects: function(name, value, recursive) { + var self = ExtObject.toQueryObjects, + objects = [], + i, ln; + + if (Ext.isArray(value)) { + for (i = 0, ln = value.length; i < ln; i++) { + if (recursive) { + objects = objects.concat(self(name + '[' + i + ']', value[i], true)); + } + else { + objects.push({ + name: name, + value: value[i] + }); + } + } + } + else if (Ext.isObject(value)) { + for (i in value) { + if (value.hasOwnProperty(i)) { + if (recursive) { + objects = objects.concat(self(name + '[' + i + ']', value[i], true)); + } + else { + objects.push({ + name: name, + value: value[i] + }); + } + } + } + } + else { + objects.push({ + name: name, + value: value + }); + } + + return objects; + }, + + /** + * Takes an object and converts it to an encoded query string. + * + * Non-recursive: + * + * Ext.Object.toQueryString({foo: 1, bar: 2}); // returns "foo=1&bar=2" + * Ext.Object.toQueryString({foo: null, bar: 2}); // returns "foo=&bar=2" + * Ext.Object.toQueryString({'some price': '$300'}); // returns "some%20price=%24300" + * Ext.Object.toQueryString({date: new Date(2011, 0, 1)}); // returns "date=%222011-01-01T00%3A00%3A00%22" + * Ext.Object.toQueryString({colors: ['red', 'green', 'blue']}); // returns "colors=red&colors=green&colors=blue" + * + * Recursive: + * + * Ext.Object.toQueryString({ + * username: 'Jacky', + * dateOfBirth: { + * day: 1, + * month: 2, + * year: 1911 + * }, + * hobbies: ['coding', 'eating', 'sleeping', ['nested', 'stuff']] + * }, true); // returns the following string (broken down and url-decoded for ease of reading purpose): + * // username=Jacky + * // &dateOfBirth[day]=1&dateOfBirth[month]=2&dateOfBirth[year]=1911 + * // &hobbies[0]=coding&hobbies[1]=eating&hobbies[2]=sleeping&hobbies[3][0]=nested&hobbies[3][1]=stuff + * + * @param {Object} object The object to encode + * @param {Boolean} [recursive=false] Whether or not to interpret the object in recursive format. + * (PHP / Ruby on Rails servers and similar). + * @return {String} queryString + */ + toQueryString: function(object, recursive) { + var paramObjects = [], + params = [], + i, j, ln, paramObject, value; + + for (i in object) { + if (object.hasOwnProperty(i)) { + paramObjects = paramObjects.concat(ExtObject.toQueryObjects(i, object[i], recursive)); + } + } + + for (j = 0, ln = paramObjects.length; j < ln; j++) { + paramObject = paramObjects[j]; + value = paramObject.value; + + if (Ext.isEmpty(value)) { + value = ''; + } else if (Ext.isDate(value)) { + value = Ext.Date.toString(value); + } + + params.push(encodeURIComponent(paramObject.name) + '=' + encodeURIComponent(String(value))); + } + + return params.join('&'); + }, + + /** + * Converts a query string back into an object. + * + * Non-recursive: + * + * Ext.Object.fromQueryString("foo=1&bar=2"); // returns {foo: '1', bar: '2'} + * Ext.Object.fromQueryString("foo=&bar=2"); // returns {foo: null, bar: '2'} + * Ext.Object.fromQueryString("some%20price=%24300"); // returns {'some price': '$300'} + * Ext.Object.fromQueryString("colors=red&colors=green&colors=blue"); // returns {colors: ['red', 'green', 'blue']} + * + * Recursive: + * + * Ext.Object.fromQueryString( + * "username=Jacky&"+ + * "dateOfBirth[day]=1&dateOfBirth[month]=2&dateOfBirth[year]=1911&"+ + * "hobbies[0]=coding&hobbies[1]=eating&hobbies[2]=sleeping&"+ + * "hobbies[3][0]=nested&hobbies[3][1]=stuff", true); + * + * // returns + * { + * username: 'Jacky', + * dateOfBirth: { + * day: '1', + * month: '2', + * year: '1911' + * }, + * hobbies: ['coding', 'eating', 'sleeping', ['nested', 'stuff']] + * } + * + * @param {String} queryString The query string to decode + * @param {Boolean} [recursive=false] Whether or not to recursively decode the string. This format is supported by + * PHP / Ruby on Rails servers and similar. + * @return {Object} + */ + fromQueryString: function(queryString, recursive) { + var parts = queryString.replace(/^\?/, '').split('&'), + object = {}, + temp, components, name, value, i, ln, + part, j, subLn, matchedKeys, matchedName, + keys, key, nextKey; + + for (i = 0, ln = parts.length; i < ln; i++) { + part = parts[i]; + + if (part.length > 0) { + components = part.split('='); + name = decodeURIComponent(components[0]); + value = (components[1] !== undefined) ? decodeURIComponent(components[1]) : ''; + + if (!recursive) { + if (object.hasOwnProperty(name)) { + if (!Ext.isArray(object[name])) { + object[name] = [object[name]]; + } + + object[name].push(value); + } + else { + object[name] = value; + } + } + else { + matchedKeys = name.match(/(\[):?([^\]]*)\]/g); + matchedName = name.match(/^([^\[]+)/); + + if (!matchedName) { + throw new Error('[Ext.Object.fromQueryString] Malformed query string given, failed parsing name from "' + part + '"'); + } + + name = matchedName[0]; + keys = []; + + if (matchedKeys === null) { + object[name] = value; + continue; + } + + for (j = 0, subLn = matchedKeys.length; j < subLn; j++) { + key = matchedKeys[j]; + key = (key.length === 2) ? '' : key.substring(1, key.length - 1); + keys.push(key); + } + + keys.unshift(name); + + temp = object; + + for (j = 0, subLn = keys.length; j < subLn; j++) { + key = keys[j]; + + if (j === subLn - 1) { + if (Ext.isArray(temp) && key === '') { + temp.push(value); + } + else { + temp[key] = value; + } + } + else { + if (temp[key] === undefined || typeof temp[key] === 'string') { + nextKey = keys[j+1]; + + temp[key] = (Ext.isNumeric(nextKey) || nextKey === '') ? [] : {}; + } + + temp = temp[key]; + } + } + } + } + } + + return object; + }, + + /** + * Iterates through an object and invokes the given callback function for each iteration. + * The iteration can be stopped by returning `false` in the callback function. For example: + * + * var person = { + * name: 'Jacky' + * hairColor: 'black' + * loves: ['food', 'sleeping', 'wife'] + * }; + * + * Ext.Object.each(person, function(key, value, myself) { + * console.log(key + ":" + value); + * + * if (key === 'hairColor') { + * return false; // stop the iteration + * } + * }); + * + * @param {Object} object The object to iterate + * @param {Function} fn The callback function. + * @param {String} fn.key + * @param {Object} fn.value + * @param {Object} fn.object The object itself + * @param {Object} [scope] The execution scope (`this`) of the callback function + */ + each: function(object, fn, scope) { + for (var property in object) { + if (object.hasOwnProperty(property)) { + if (fn.call(scope || object, property, object[property], object) === false) { + return; + } + } + } + }, + + /** + * Merges any number of objects recursively without referencing them or their children. + * + * var extjs = { + * companyName: 'Ext JS', + * products: ['Ext JS', 'Ext GWT', 'Ext Designer'], + * isSuperCool: true, + * office: { + * size: 2000, + * location: 'Palo Alto', + * isFun: true + * } + * }; + * + * var newStuff = { + * companyName: 'Sencha Inc.', + * products: ['Ext JS', 'Ext GWT', 'Ext Designer', 'Sencha Touch', 'Sencha Animator'], + * office: { + * size: 40000, + * location: 'Redwood City' + * } + * }; + * + * var sencha = Ext.Object.merge(extjs, newStuff); + * + * // extjs and sencha then equals to + * { + * companyName: 'Sencha Inc.', + * products: ['Ext JS', 'Ext GWT', 'Ext Designer', 'Sencha Touch', 'Sencha Animator'], + * isSuperCool: true, + * office: { + * size: 40000, + * location: 'Redwood City', + * isFun: true + * } + * } + * + * @param {Object} destination The object into which all subsequent objects are merged. + * @param {Object...} object Any number of objects to merge into the destination. + * @return {Object} merged The destination object with all passed objects merged in. + */ + merge: function(destination) { + var i = 1, + ln = arguments.length, + mergeFn = ExtObject.merge, + cloneFn = Ext.clone, + object, key, value, sourceKey; + + for (; i < ln; i++) { + object = arguments[i]; + + for (key in object) { + value = object[key]; + if (value && value.constructor === Object) { + sourceKey = destination[key]; + if (sourceKey && sourceKey.constructor === Object) { + mergeFn(sourceKey, value); + } + else { + destination[key] = cloneFn(value); + } + } + else { + destination[key] = value; + } + } + } + + return destination; + }, + + /** + * @private + * @param destination + */ + mergeIf: function(destination) { + var i = 1, + ln = arguments.length, + cloneFn = Ext.clone, + object, key, value; + + for (; i < ln; i++) { + object = arguments[i]; + + for (key in object) { + if (!(key in destination)) { + value = object[key]; + + if (value && value.constructor === Object) { + destination[key] = cloneFn(value); + } + else { + destination[key] = value; + } + } + } + } + + return destination; + }, + + /** + * Returns the first matching key corresponding to the given value. + * If no matching value is found, null is returned. + * + * var person = { + * name: 'Jacky', + * loves: 'food' + * }; + * + * alert(Ext.Object.getKey(person, 'food')); // alerts 'loves' + * + * @param {Object} object + * @param {Object} value The value to find + */ + getKey: function(object, value) { + for (var property in object) { + if (object.hasOwnProperty(property) && object[property] === value) { + return property; + } + } + + return null; + }, + + /** + * Gets all values of the given object as an array. + * + * var values = Ext.Object.getValues({ + * name: 'Jacky', + * loves: 'food' + * }); // ['Jacky', 'food'] + * + * @param {Object} object + * @return {Array} An array of values from the object + */ + getValues: function(object) { + var values = [], + property; + + for (property in object) { + if (object.hasOwnProperty(property)) { + values.push(object[property]); + } + } + + return values; + }, + + /** + * Gets all keys of the given object as an array. + * + * var values = Ext.Object.getKeys({ + * name: 'Jacky', + * loves: 'food' + * }); // ['name', 'loves'] + * + * @param {Object} object + * @return {String[]} An array of keys from the object + * @method + */ + getKeys: (typeof Object.keys == 'function') + ? function(object){ + if (!object) { + return []; + } + return Object.keys(object); + } + : function(object) { + var keys = [], + property; + + for (property in object) { + if (object.hasOwnProperty(property)) { + keys.push(property); + } + } + + return keys; + }, + + /** + * Gets the total number of this object's own properties + * + * var size = Ext.Object.getSize({ + * name: 'Jacky', + * loves: 'food' + * }); // size equals 2 + * + * @param {Object} object + * @return {Number} size + */ + getSize: function(object) { + var size = 0, + property; + + for (property in object) { + if (object.hasOwnProperty(property)) { + size++; + } + } + + return size; + }, + + /** + * Checks if there are any properties on this object. + * @param {Object} object + * @return {Boolean} `true` if there no properties on the object. + */ + isEmpty: function(object){ + for (var key in object) { + if (object.hasOwnProperty(key)) { + return false; + } + } + return true; + }, + + /** + * Shallow compares the contents of 2 objects using strict equality. Objects are + * considered equal if they both have the same set of properties and the + * value for those properties equals the other in the corresponding object. + * + * // Returns true + * Ext.Object.equals({ + * foo: 1, + * bar: 2 + * }, { + * foo: 1, + * bar: 2 + * }); + * + * @param {Object} object1 + * @param {Object} object2 + * @return {Boolean} `true` if the objects are equal. + */ + equals: (function() { + var check = function(o1, o2) { + var key; + + for (key in o1) { + if (o1.hasOwnProperty(key)) { + if (o1[key] !== o2[key]) { + return false; + } + } + } + return true; + }; + + return function(object1, object2) { + + // Short circuit if the same object is passed twice + if (object1 === object2) { + return true; + } if (object1 && object2) { + // Do the second check because we could have extra keys in + // object2 that don't exist in object1. + return check(object1, object2) && check(object2, object1); + } else if (!object1 && !object2) { + return object1 === object2; + } else { + return false; + } + }; + })(), + + /** + * @private + */ + classify: function(object) { + var prototype = object, + objectProperties = [], + propertyClassesMap = {}, + objectClass = function() { + var i = 0, + ln = objectProperties.length, + property; + + for (; i < ln; i++) { + property = objectProperties[i]; + this[property] = new propertyClassesMap[property](); + } + }, + key, value; + + for (key in object) { + if (object.hasOwnProperty(key)) { + value = object[key]; + + if (value && value.constructor === Object) { + objectProperties.push(key); + propertyClassesMap[key] = ExtObject.classify(value); + } + } + } + + objectClass.prototype = prototype; + + return objectClass; + } +}; + +/** + * A convenient alias method for {@link Ext.Object#merge}. + * + * @member Ext + * @method merge + * @inheritdoc Ext.Object#merge + */ +Ext.merge = Ext.Object.merge; + +/** + * @private + * @member Ext + */ +Ext.mergeIf = Ext.Object.mergeIf; + +/** + * + * @member Ext + * @method urlEncode + * @inheritdoc Ext.Object#toQueryString + * @deprecated 4.0.0 Use {@link Ext.Object#toQueryString} instead + */ +Ext.urlEncode = function() { + var args = Ext.Array.from(arguments), + prefix = ''; + + // Support for the old `pre` argument + if ((typeof args[1] === 'string')) { + prefix = args[1] + '&'; + args[1] = false; + } + + return prefix + ExtObject.toQueryString.apply(ExtObject, args); +}; + +/** + * Alias for {@link Ext.Object#fromQueryString}. + * + * @member Ext + * @method urlDecode + * @inheritdoc Ext.Object#fromQueryString + * @deprecated 4.0.0 Use {@link Ext.Object#fromQueryString} instead + */ +Ext.urlDecode = function() { + return ExtObject.fromQueryString.apply(ExtObject, arguments); +}; + +}()); + +//@tag foundation,core +//@require Object.js +//@define Ext.Date + +/** + * @class Ext.Date + * A set of useful static methods to deal with date + * Note that if Ext.Date is required and loaded, it will copy all methods / properties to + * this object for convenience + * + * The date parsing and formatting syntax contains a subset of + * [PHP's `date()` function](http://www.php.net/date), and the formats that are + * supported will provide results equivalent to their PHP versions. + * + * The following is a list of all currently supported formats: + *
    +Format      Description                                                               Example returned values
    +------      -----------------------------------------------------------------------   -----------------------
    +  d         Day of the month, 2 digits with leading zeros                             01 to 31
    +  D         A short textual representation of the day of the week                     Mon to Sun
    +  j         Day of the month without leading zeros                                    1 to 31
    +  l         A full textual representation of the day of the week                      Sunday to Saturday
    +  N         ISO-8601 numeric representation of the day of the week                    1 (for Monday) through 7 (for Sunday)
    +  S         English ordinal suffix for the day of the month, 2 characters             st, nd, rd or th. Works well with j
    +  w         Numeric representation of the day of the week                             0 (for Sunday) to 6 (for Saturday)
    +  z         The day of the year (starting from 0)                                     0 to 364 (365 in leap years)
    +  W         ISO-8601 week number of year, weeks starting on Monday                    01 to 53
    +  F         A full textual representation of a month, such as January or March        January to December
    +  m         Numeric representation of a month, with leading zeros                     01 to 12
    +  M         A short textual representation of a month                                 Jan to Dec
    +  n         Numeric representation of a month, without leading zeros                  1 to 12
    +  t         Number of days in the given month                                         28 to 31
    +  L         Whether it's a leap year                                                  1 if it is a leap year, 0 otherwise.
    +  o         ISO-8601 year number (identical to (Y), but if the ISO week number (W)    Examples: 1998 or 2004
    +            belongs to the previous or next year, that year is used instead)
    +  Y         A full numeric representation of a year, 4 digits                         Examples: 1999 or 2003
    +  y         A two digit representation of a year                                      Examples: 99 or 03
    +  a         Lowercase Ante meridiem and Post meridiem                                 am or pm
    +  A         Uppercase Ante meridiem and Post meridiem                                 AM or PM
    +  g         12-hour format of an hour without leading zeros                           1 to 12
    +  G         24-hour format of an hour without leading zeros                           0 to 23
    +  h         12-hour format of an hour with leading zeros                              01 to 12
    +  H         24-hour format of an hour with leading zeros                              00 to 23
    +  i         Minutes, with leading zeros                                               00 to 59
    +  s         Seconds, with leading zeros                                               00 to 59
    +  u         Decimal fraction of a second                                              Examples:
    +            (minimum 1 digit, arbitrary number of digits allowed)                     001 (i.e. 0.001s) or
    +                                                                                      100 (i.e. 0.100s) or
    +                                                                                      999 (i.e. 0.999s) or
    +                                                                                      999876543210 (i.e. 0.999876543210s)
    +  O         Difference to Greenwich time (GMT) in hours and minutes                   Example: +1030
    +  P         Difference to Greenwich time (GMT) with colon between hours and minutes   Example: -08:00
    +  T         Timezone abbreviation of the machine running the code                     Examples: EST, MDT, PDT ...
    +  Z         Timezone offset in seconds (negative if west of UTC, positive if east)    -43200 to 50400
    +  c         ISO 8601 date
    +            Notes:                                                                    Examples:
    +            1) If unspecified, the month / day defaults to the current month / day,   1991 or
    +               the time defaults to midnight, while the timezone defaults to the      1992-10 or
    +               browser's timezone. If a time is specified, it must include both hours 1993-09-20 or
    +               and minutes. The "T" delimiter, seconds, milliseconds and timezone     1994-08-19T16:20+01:00 or
    +               are optional.                                                          1995-07-18T17:21:28-02:00 or
    +            2) The decimal fraction of a second, if specified, must contain at        1996-06-17T18:22:29.98765+03:00 or
    +               least 1 digit (there is no limit to the maximum number                 1997-05-16T19:23:30,12345-0400 or
    +               of digits allowed), and may be delimited by either a '.' or a ','      1998-04-15T20:24:31.2468Z or
    +            Refer to the examples on the right for the various levels of              1999-03-14T20:24:32Z or
    +            date-time granularity which are supported, or see                         2000-02-13T21:25:33
    +            http://www.w3.org/TR/NOTE-datetime for more info.                         2001-01-12 22:26:34
    +  U         Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)                1193432466 or -2138434463
    +  MS        Microsoft AJAX serialized dates                                           \/Date(1238606590509)\/ (i.e. UTC milliseconds since epoch) or
    +                                                                                      \/Date(1238606590509+0800)\/
    +  time      A javascript millisecond timestamp                                        1350024476440
    +  timestamp A UNIX timestamp (same as U)                                              1350024866            
    +
    + * + * Example usage (note that you must escape format specifiers with '\\' to render them as character literals): + * + * // Sample date: + * // 'Wed Jan 10 2007 15:05:01 GMT-0600 (Central Standard Time)' + * + * var dt = new Date('1/10/2007 03:05:01 PM GMT-0600'); + * console.log(Ext.Date.format(dt, 'Y-m-d')); // 2007-01-10 + * console.log(Ext.Date.format(dt, 'F j, Y, g:i a')); // January 10, 2007, 3:05 pm + * console.log(Ext.Date.format(dt, 'l, \\t\\he jS \\of F Y h:i:s A')); // Wednesday, the 10th of January 2007 03:05:01 PM + * + * Here are some standard date/time patterns that you might find helpful. They + * are not part of the source of Ext.Date, but to use them you can simply copy this + * block of code into any script that is included after Ext.Date and they will also become + * globally available on the Date object. Feel free to add or remove patterns as needed in your code. + * + * Ext.Date.patterns = { + * ISO8601Long:"Y-m-d H:i:s", + * ISO8601Short:"Y-m-d", + * ShortDate: "n/j/Y", + * LongDate: "l, F d, Y", + * FullDateTime: "l, F d, Y g:i:s A", + * MonthDay: "F d", + * ShortTime: "g:i A", + * LongTime: "g:i:s A", + * SortableDateTime: "Y-m-d\\TH:i:s", + * UniversalSortableDateTime: "Y-m-d H:i:sO", + * YearMonth: "F, Y" + * }; + * + * Example usage: + * + * var dt = new Date(); + * console.log(Ext.Date.format(dt, Ext.Date.patterns.ShortDate)); + * + * Developer-written, custom formats may be used by supplying both a formatting and a parsing function + * which perform to specialized requirements. The functions are stored in {@link #parseFunctions} and {@link #formatFunctions}. + * @singleton + */ + +/* + * Most of the date-formatting functions below are the excellent work of Baron Schwartz. + * (see http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/) + * They generate precompiled functions from format patterns instead of parsing and + * processing each pattern every time a date is formatted. These functions are available + * on every Date object. + */ + +Ext.Date = new function() { + var utilDate = this, + stripEscapeRe = /(\\.)/g, + hourInfoRe = /([gGhHisucUOPZ]|MS)/, + dateInfoRe = /([djzmnYycU]|MS)/, + slashRe = /\\/gi, + numberTokenRe = /\{(\d+)\}/g, + MSFormatRe = new RegExp('\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/'), + code = [ + // date calculations (note: the code below creates a dependency on Ext.Number.from()) + "var me = this, dt, y, m, d, h, i, s, ms, o, O, z, zz, u, v, W, year, jan4, week1monday,", + "def = me.defaults,", + "from = Ext.Number.from,", + "results = String(input).match(me.parseRegexes[{0}]);", // either null, or an array of matched strings + + "if(results){", + "{1}", + + "if(u != null){", // i.e. unix time is defined + "v = new Date(u * 1000);", // give top priority to UNIX time + "}else{", + // create Date object representing midnight of the current day; + // this will provide us with our date defaults + // (note: clearTime() handles Daylight Saving Time automatically) + "dt = me.clearTime(new Date);", + + "y = from(y, from(def.y, dt.getFullYear()));", + "m = from(m, from(def.m - 1, dt.getMonth()));", + "d = from(d, from(def.d, dt.getDate()));", + + "h = from(h, from(def.h, dt.getHours()));", + "i = from(i, from(def.i, dt.getMinutes()));", + "s = from(s, from(def.s, dt.getSeconds()));", + "ms = from(ms, from(def.ms, dt.getMilliseconds()));", + + "if(z >= 0 && y >= 0){", + // both the year and zero-based day of year are defined and >= 0. + // these 2 values alone provide sufficient info to create a full date object + + // create Date object representing January 1st for the given year + // handle years < 100 appropriately + "v = me.add(new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);", + + // then add day of year, checking for Date "rollover" if necessary + "v = !strict? v : (strict === true && (z <= 364 || (me.isLeapYear(v) && z <= 365))? me.add(v, me.DAY, z) : null);", + "}else if(strict === true && !me.isValid(y, m + 1, d, h, i, s, ms)){", // check for Date "rollover" + "v = null;", // invalid date, so return null + "}else{", + "if (W) {", // support ISO-8601 + // http://en.wikipedia.org/wiki/ISO_week_date + // + // Mutually equivalent definitions for week 01 are: + // a. the week starting with the Monday which is nearest in time to 1 January + // b. the week with 4 January in it + // ... there are many others ... + // + // We'll use letter b above to determine the first week of the year. + // + // So, first get a Date object for January 4th of whatever calendar year is desired. + // + // Then, the first Monday of the year can easily be determined by (operating on this Date): + // 1. Getting the day of the week. + // 2. Subtracting that by one. + // 3. Multiplying that by 86400000 (one day in ms). + // 4. Subtracting this number of days (in ms) from the January 4 date (represented in ms). + // + // Example #1 ... + // + // January 2012 + // Su Mo Tu We Th Fr Sa + // 1 2 3 4 5 6 7 + // 8 9 10 11 12 13 14 + // 15 16 17 18 19 20 21 + // 22 23 24 25 26 27 28 + // 29 30 31 + // + // 1. January 4th is a Wednesday. + // 2. Its day number is 3. + // 3. Simply substract 2 days from Wednesday. + // 4. The first week of the year begins on Monday, January 2. Simple! + // + // Example #2 ... + // January 1992 + // Su Mo Tu We Th Fr Sa + // 1 2 3 4 + // 5 6 7 8 9 10 11 + // 12 13 14 15 16 17 18 + // 19 20 21 22 23 24 25 + // 26 27 28 29 30 31 + // + // 1. January 4th is a Saturday. + // 2. Its day number is 6. + // 3. Simply subtract 5 days from Saturday. + // 4. The first week of the year begins on Monday, December 30. Simple! + // + // v = Ext.Date.clearTime(new Date(week1monday.getTime() + ((W - 1) * 604800000))); + // (This is essentially doing the same thing as above but for the week rather than the day) + "year = y || (new Date()).getFullYear(),", + "jan4 = new Date(year, 0, 4, 0, 0, 0),", + "week1monday = new Date(jan4.getTime() - ((jan4.getDay() - 1) * 86400000));", + "v = Ext.Date.clearTime(new Date(week1monday.getTime() + ((W - 1) * 604800000)));", + "} else {", + // plain old Date object + // handle years < 100 properly + "v = me.add(new Date(y < 100 ? 100 : y, m, d, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);", + "}", + "}", + "}", + "}", + + "if(v){", + // favor UTC offset over GMT offset + "if(zz != null){", + // reset to UTC, then add offset + "v = me.add(v, me.SECOND, -v.getTimezoneOffset() * 60 - zz);", + "}else if(o){", + // reset to GMT, then add offset + "v = me.add(v, me.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));", + "}", + "}", + + "return v;" + ].join('\n'); + + // create private copy of Ext JS's `Ext.util.Format.format()` method + // - to remove unnecessary dependency + // - to resolve namespace conflict with MS-Ajax's implementation + function xf(format) { + var args = Array.prototype.slice.call(arguments, 1); + return format.replace(numberTokenRe, function(m, i) { + return args[i]; + }); + } + + Ext.apply(utilDate, { + /** + * Returns the current timestamp. + * @return {Number} Milliseconds since UNIX epoch. + * @method + */ + now: Date.now || function() { + return +new Date(); + }, + + /** + * @private + * Private for now + */ + toString: function(date) { + var pad = Ext.String.leftPad; + + return date.getFullYear() + "-" + + pad(date.getMonth() + 1, 2, '0') + "-" + + pad(date.getDate(), 2, '0') + "T" + + pad(date.getHours(), 2, '0') + ":" + + pad(date.getMinutes(), 2, '0') + ":" + + pad(date.getSeconds(), 2, '0'); + }, + + /** + * Returns the number of milliseconds between two dates. + * @param {Date} dateA The first date. + * @param {Date} [dateB=new Date()] (optional) The second date. + * @return {Number} The difference in milliseconds + */ + getElapsed: function(dateA, dateB) { + return Math.abs(dateA - (dateB || new Date())); + }, + + /** + * Global flag which determines if strict date parsing should be used. + * Strict date parsing will not roll-over invalid dates, which is the + * default behavior of JavaScript Date objects. + * (see {@link #parse} for more information) + * @type Boolean + */ + useStrict: false, + + // private + formatCodeToRegex: function(character, currentGroup) { + // Note: currentGroup - position in regex result array (see notes for Ext.Date.parseCodes below) + var p = utilDate.parseCodes[character]; + + if (p) { + p = typeof p == 'function'? p() : p; + utilDate.parseCodes[character] = p; // reassign function result to prevent repeated execution + } + + return p ? Ext.applyIf({ + c: p.c ? xf(p.c, currentGroup || "{0}") : p.c + }, p) : { + g: 0, + c: null, + s: Ext.String.escapeRegex(character) // treat unrecognized characters as literals + }; + }, + + /** + * An object hash in which each property is a date parsing function. The property name is the + * format string which that function parses. + * + * This object is automatically populated with date parsing functions as + * date formats are requested for Ext standard formatting strings. + * + * Custom parsing functions may be inserted into this object, keyed by a name which from then on + * may be used as a format string to {@link #parse}. + * + * Example: + * + * Ext.Date.parseFunctions['x-date-format'] = myDateParser; + * + * A parsing function should return a Date object, and is passed the following parameters:
      + *
    • date : String
      The date string to parse.
    • + *
    • strict : Boolean
      True to validate date strings while parsing + * (i.e. prevent JavaScript Date "rollover") (The default must be `false`). + * Invalid date strings should return `null` when parsed.
    • + *
    + * + * To enable Dates to also be _formatted_ according to that format, a corresponding + * formatting function must be placed into the {@link #formatFunctions} property. + * @property parseFunctions + * @type Object + */ + parseFunctions: { + "MS": function(input, strict) { + // note: the timezone offset is ignored since the MS Ajax server sends + // a UTC milliseconds-since-Unix-epoch value (negative values are allowed) + var r = (input || '').match(MSFormatRe); + return r ? new Date(((r[1] || '') + r[2]) * 1) : null; + }, + "time": function(input, strict) { + var num = parseInt(input, 10); + if (num || num === 0) { + return new Date(num); + } + return null; + }, + "timestamp": function(input, strict) { + var num = parseInt(input, 10); + if (num || num === 0) { + return new Date(num * 1000); + } + return null; + } + }, + parseRegexes: [], + + /** + * An object hash in which each property is a date formatting function. The property name is the + * format string which corresponds to the produced formatted date string. + * + * This object is automatically populated with date formatting functions as + * date formats are requested for Ext standard formatting strings. + * + * Custom formatting functions may be inserted into this object, keyed by a name which from then on + * may be used as a format string to {@link #format}. + * + * Example: + * + * Ext.Date.formatFunctions['x-date-format'] = myDateFormatter; + * + * A formatting function should return a string representation of the passed Date object, and is passed the following parameters:
      + *
    • date : Date
      The Date to format.
    • + *
    + * + * To enable date strings to also be _parsed_ according to that format, a corresponding + * parsing function must be placed into the {@link #parseFunctions} property. + * @property formatFunctions + * @type Object + */ + formatFunctions: { + "MS": function() { + // UTC milliseconds since Unix epoch (MS-AJAX serialized date format (MRSF)) + return '\\/Date(' + this.getTime() + ')\\/'; + }, + "time": function(){ + return this.getTime().toString(); + }, + "timestamp": function(){ + return utilDate.format(this, 'U'); + } + }, + + y2kYear : 50, + + /** + * Date interval constant + * @type String + */ + MILLI : "ms", + + /** + * Date interval constant + * @type String + */ + SECOND : "s", + + /** + * Date interval constant + * @type String + */ + MINUTE : "mi", + + /** Date interval constant + * @type String + */ + HOUR : "h", + + /** + * Date interval constant + * @type String + */ + DAY : "d", + + /** + * Date interval constant + * @type String + */ + MONTH : "mo", + + /** + * Date interval constant + * @type String + */ + YEAR : "y", + + /** + * An object hash containing default date values used during date parsing. + * + * The following properties are available:
      + *
    • y : Number
      The default year value. (defaults to undefined)
    • + *
    • m : Number
      The default 1-based month value. (defaults to undefined)
    • + *
    • d : Number
      The default day value. (defaults to undefined)
    • + *
    • h : Number
      The default hour value. (defaults to undefined)
    • + *
    • i : Number
      The default minute value. (defaults to undefined)
    • + *
    • s : Number
      The default second value. (defaults to undefined)
    • + *
    • ms : Number
      The default millisecond value. (defaults to undefined)
    • + *
    + * + * Override these properties to customize the default date values used by the {@link #parse} method. + * + * __Note:__ In countries which experience Daylight Saving Time (i.e. DST), the `h`, `i`, `s` + * and `ms` properties may coincide with the exact time in which DST takes effect. + * It is the responsibility of the developer to account for this. + * + * Example Usage: + * + * // set default day value to the first day of the month + * Ext.Date.defaults.d = 1; + * + * // parse a February date string containing only year and month values. + * // setting the default day value to 1 prevents weird date rollover issues + * // when attempting to parse the following date string on, for example, March 31st 2009. + * Ext.Date.parse('2009-02', 'Y-m'); // returns a Date object representing February 1st 2009 + * + * @property defaults + * @type Object + */ + defaults: {}, + + // + /** + * @property {String[]} dayNames + * An array of textual day names. + * Override these values for international dates. + * + * Example: + * + * Ext.Date.dayNames = [ + * 'SundayInYourLang', + * 'MondayInYourLang' + * // ... + * ]; + */ + dayNames : [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + // + + // + /** + * @property {String[]} monthNames + * An array of textual month names. + * Override these values for international dates. + * + * Example: + * + * Ext.Date.monthNames = [ + * 'JanInYourLang', + * 'FebInYourLang' + * // ... + * ]; + */ + monthNames : [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + // + + // + /** + * @property {Object} monthNumbers + * An object hash of zero-based JavaScript month numbers (with short month names as keys. **Note:** keys are case-sensitive). + * Override these values for international dates. + * + * Example: + * + * Ext.Date.monthNumbers = { + * 'LongJanNameInYourLang': 0, + * 'ShortJanNameInYourLang':0, + * 'LongFebNameInYourLang':1, + * 'ShortFebNameInYourLang':1 + * // ... + * }; + */ + monthNumbers : { + January: 0, + Jan: 0, + February: 1, + Feb: 1, + March: 2, + Mar: 2, + April: 3, + Apr: 3, + May: 4, + June: 5, + Jun: 5, + July: 6, + Jul: 6, + August: 7, + Aug: 7, + September: 8, + Sep: 8, + October: 9, + Oct: 9, + November: 10, + Nov: 10, + December: 11, + Dec: 11 + }, + // + + // + /** + * @property {String} defaultFormat + * The date format string that the {@link Ext.util.Format#dateRenderer} + * and {@link Ext.util.Format#date} functions use. See {@link Ext.Date} for details. + * + * This may be overridden in a locale file. + */ + defaultFormat : "m/d/Y", + // + // + /** + * Get the short month name for the given month number. + * Override this function for international dates. + * @param {Number} month A zero-based JavaScript month number. + * @return {String} The short month name. + */ + getShortMonthName : function(month) { + return Ext.Date.monthNames[month].substring(0, 3); + }, + // + + // + /** + * Get the short day name for the given day number. + * Override this function for international dates. + * @param {Number} day A zero-based JavaScript day number. + * @return {String} The short day name. + */ + getShortDayName : function(day) { + return Ext.Date.dayNames[day].substring(0, 3); + }, + // + + // + /** + * Get the zero-based JavaScript month number for the given short/full month name. + * Override this function for international dates. + * @param {String} name The short/full month name. + * @return {Number} The zero-based JavaScript month number. + */ + getMonthNumber : function(name) { + // handle camel casing for English month names (since the keys for the Ext.Date.monthNumbers hash are case sensitive) + return Ext.Date.monthNumbers[name.substring(0, 1).toUpperCase() + name.substring(1, 3).toLowerCase()]; + }, + // + + /** + * Checks if the specified format contains hour information + * @param {String} format The format to check + * @return {Boolean} True if the format contains hour information + * @method + */ + formatContainsHourInfo : function(format){ + return hourInfoRe.test(format.replace(stripEscapeRe, '')); + }, + + /** + * Checks if the specified format contains information about + * anything other than the time. + * @param {String} format The format to check + * @return {Boolean} True if the format contains information about + * date/day information. + * @method + */ + formatContainsDateInfo : function(format){ + return dateInfoRe.test(format.replace(stripEscapeRe, '')); + }, + + /** + * Removes all escaping for a date format string. In date formats, + * using a '\' can be used to escape special characters. + * @param {String} format The format to unescape + * @return {String} The unescaped format + * @method + */ + unescapeFormat: function(format) { + // Escape the format, since \ can be used to escape special + // characters in a date format. For example, in a Spanish + // locale the format may be: 'd \\de F \\de Y' + return format.replace(slashRe, ''); + }, + + /** + * The base format-code to formatting-function hashmap used by the {@link #format} method. + * Formatting functions are strings (or functions which return strings) which + * will return the appropriate value when evaluated in the context of the Date object + * from which the {@link #format} method is called. + * Add to / override these mappings for custom date formatting. + * + * __Note:__ Ext.Date.format() treats characters as literals if an appropriate mapping cannot be found. + * + * Example: + * + * Ext.Date.formatCodes.x = "Ext.util.Format.leftPad(this.getDate(), 2, '0')"; + * console.log(Ext.Date.format(new Date(), 'X'); // returns the current day of the month + * @type Object + */ + formatCodes : { + d: "Ext.String.leftPad(this.getDate(), 2, '0')", + D: "Ext.Date.getShortDayName(this.getDay())", // get localized short day name + j: "this.getDate()", + l: "Ext.Date.dayNames[this.getDay()]", + N: "(this.getDay() ? this.getDay() : 7)", + S: "Ext.Date.getSuffix(this)", + w: "this.getDay()", + z: "Ext.Date.getDayOfYear(this)", + W: "Ext.String.leftPad(Ext.Date.getWeekOfYear(this), 2, '0')", + F: "Ext.Date.monthNames[this.getMonth()]", + m: "Ext.String.leftPad(this.getMonth() + 1, 2, '0')", + M: "Ext.Date.getShortMonthName(this.getMonth())", // get localized short month name + n: "(this.getMonth() + 1)", + t: "Ext.Date.getDaysInMonth(this)", + L: "(Ext.Date.isLeapYear(this) ? 1 : 0)", + o: "(this.getFullYear() + (Ext.Date.getWeekOfYear(this) == 1 && this.getMonth() > 0 ? +1 : (Ext.Date.getWeekOfYear(this) >= 52 && this.getMonth() < 11 ? -1 : 0)))", + Y: "Ext.String.leftPad(this.getFullYear(), 4, '0')", + y: "('' + this.getFullYear()).substring(2, 4)", + a: "(this.getHours() < 12 ? 'am' : 'pm')", + A: "(this.getHours() < 12 ? 'AM' : 'PM')", + g: "((this.getHours() % 12) ? this.getHours() % 12 : 12)", + G: "this.getHours()", + h: "Ext.String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')", + H: "Ext.String.leftPad(this.getHours(), 2, '0')", + i: "Ext.String.leftPad(this.getMinutes(), 2, '0')", + s: "Ext.String.leftPad(this.getSeconds(), 2, '0')", + u: "Ext.String.leftPad(this.getMilliseconds(), 3, '0')", + O: "Ext.Date.getGMTOffset(this)", + P: "Ext.Date.getGMTOffset(this, true)", + T: "Ext.Date.getTimezone(this)", + Z: "(this.getTimezoneOffset() * -60)", + + c: function() { // ISO-8601 -- GMT format + var c, code, i, l, e; + for (c = "Y-m-dTH:i:sP", code = [], i = 0, l = c.length; i < l; ++i) { + e = c.charAt(i); + code.push(e == "T" ? "'T'" : utilDate.getFormatCode(e)); // treat T as a character literal + } + return code.join(" + "); + }, + /* + c: function() { // ISO-8601 -- UTC format + return [ + "this.getUTCFullYear()", "'-'", + "Ext.util.Format.leftPad(this.getUTCMonth() + 1, 2, '0')", "'-'", + "Ext.util.Format.leftPad(this.getUTCDate(), 2, '0')", + "'T'", + "Ext.util.Format.leftPad(this.getUTCHours(), 2, '0')", "':'", + "Ext.util.Format.leftPad(this.getUTCMinutes(), 2, '0')", "':'", + "Ext.util.Format.leftPad(this.getUTCSeconds(), 2, '0')", + "'Z'" + ].join(" + "); + }, + */ + + U: "Math.round(this.getTime() / 1000)" + }, + + /** + * Checks if the passed Date parameters will cause a JavaScript Date "rollover". + * @param {Number} year 4-digit year + * @param {Number} month 1-based month-of-year + * @param {Number} day Day of month + * @param {Number} hour (optional) Hour + * @param {Number} minute (optional) Minute + * @param {Number} second (optional) Second + * @param {Number} millisecond (optional) Millisecond + * @return {Boolean} `true` if the passed parameters do not cause a Date "rollover", `false` otherwise. + */ + isValid : function(y, m, d, h, i, s, ms) { + // setup defaults + h = h || 0; + i = i || 0; + s = s || 0; + ms = ms || 0; + + // Special handling for year < 100 + var dt = utilDate.add(new Date(y < 100 ? 100 : y, m - 1, d, h, i, s, ms), utilDate.YEAR, y < 100 ? y - 100 : 0); + + return y == dt.getFullYear() && + m == dt.getMonth() + 1 && + d == dt.getDate() && + h == dt.getHours() && + i == dt.getMinutes() && + s == dt.getSeconds() && + ms == dt.getMilliseconds(); + }, + + /** + * Parses the passed string using the specified date format. + * Note that this function expects normal calendar dates, meaning that months are 1-based (i.e. 1 = January). + * The {@link #defaults} hash will be used for any date value (i.e. year, month, day, hour, minute, second or millisecond) + * which cannot be found in the passed string. If a corresponding default date value has not been specified in the {@link #defaults} hash, + * the current date's year, month, day or DST-adjusted zero-hour time value will be used instead. + * Keep in mind that the input date string must precisely match the specified format string + * in order for the parse operation to be successful (failed parse operations return a null value). + * + * Example: + * + * //dt = Fri May 25 2007 (current date) + * var dt = new Date(); + * + * //dt = Thu May 25 2006 (today's month/day in 2006) + * dt = Ext.Date.parse("2006", "Y"); + * + * //dt = Sun Jan 15 2006 (all date parts specified) + * dt = Ext.Date.parse("2006-01-15", "Y-m-d"); + * + * //dt = Sun Jan 15 2006 15:20:01 + * dt = Ext.Date.parse("2006-01-15 3:20:01 PM", "Y-m-d g:i:s A"); + * + * // attempt to parse Sun Feb 29 2006 03:20:01 in strict mode + * dt = Ext.Date.parse("2006-02-29 03:20:01", "Y-m-d H:i:s", true); // returns null + * + * @param {String} input The raw date string. + * @param {String} format The expected date string format. + * @param {Boolean} [strict=false] (optional) `true` to validate date strings while parsing (i.e. prevents JavaScript Date "rollover"). + * Invalid date strings will return `null` when parsed. + * @return {Date} The parsed Date. + */ + parse : function(input, format, strict) { + var p = utilDate.parseFunctions; + if (p[format] == null) { + utilDate.createParser(format); + } + return p[format].call(utilDate, input, Ext.isDefined(strict) ? strict : utilDate.useStrict); + }, + + // Backwards compat + parseDate: function(input, format, strict){ + return utilDate.parse(input, format, strict); + }, + + + // private + getFormatCode : function(character) { + var f = utilDate.formatCodes[character]; + + if (f) { + f = typeof f == 'function'? f() : f; + utilDate.formatCodes[character] = f; // reassign function result to prevent repeated execution + } + + // note: unknown characters are treated as literals + return f || ("'" + Ext.String.escape(character) + "'"); + }, + + // private + createFormat : function(format) { + var code = [], + special = false, + ch = '', + i; + + for (i = 0; i < format.length; ++i) { + ch = format.charAt(i); + if (!special && ch == "\\") { + special = true; + } else if (special) { + special = false; + code.push("'" + Ext.String.escape(ch) + "'"); + } else { + code.push(utilDate.getFormatCode(ch)); + } + } + utilDate.formatFunctions[format] = Ext.functionFactory("return " + code.join('+')); + }, + + // private + createParser : function(format) { + var regexNum = utilDate.parseRegexes.length, + currentGroup = 1, + calc = [], + regex = [], + special = false, + ch = "", + i = 0, + len = format.length, + atEnd = [], + obj; + + for (; i < len; ++i) { + ch = format.charAt(i); + if (!special && ch == "\\") { + special = true; + } else if (special) { + special = false; + regex.push(Ext.String.escape(ch)); + } else { + obj = utilDate.formatCodeToRegex(ch, currentGroup); + currentGroup += obj.g; + regex.push(obj.s); + if (obj.g && obj.c) { + if (obj.calcAtEnd) { + atEnd.push(obj.c); + } else { + calc.push(obj.c); + } + } + } + } + + calc = calc.concat(atEnd); + + utilDate.parseRegexes[regexNum] = new RegExp("^" + regex.join('') + "$", 'i'); + utilDate.parseFunctions[format] = Ext.functionFactory("input", "strict", xf(code, regexNum, calc.join(''))); + }, + + // private + parseCodes : { + /* + * Notes: + * g = {Number} calculation group (0 or 1. only group 1 contributes to date calculations.) + * c = {String} calculation method (required for group 1. null for group 0. {0} = currentGroup - position in regex result array) + * s = {String} regex pattern. all matches are stored in results[], and are accessible by the calculation mapped to 'c' + */ + d: { + g:1, + c:"d = parseInt(results[{0}], 10);\n", + s:"(3[0-1]|[1-2][0-9]|0[1-9])" // day of month with leading zeroes (01 - 31) + }, + j: { + g:1, + c:"d = parseInt(results[{0}], 10);\n", + s:"(3[0-1]|[1-2][0-9]|[1-9])" // day of month without leading zeroes (1 - 31) + }, + D: function() { + for (var a = [], i = 0; i < 7; a.push(utilDate.getShortDayName(i)), ++i); // get localised short day names + return { + g:0, + c:null, + s:"(?:" + a.join("|") +")" + }; + }, + l: function() { + return { + g:0, + c:null, + s:"(?:" + utilDate.dayNames.join("|") + ")" + }; + }, + N: { + g:0, + c:null, + s:"[1-7]" // ISO-8601 day number (1 (monday) - 7 (sunday)) + }, + // + S: { + g:0, + c:null, + s:"(?:st|nd|rd|th)" + }, + // + w: { + g:0, + c:null, + s:"[0-6]" // JavaScript day number (0 (sunday) - 6 (saturday)) + }, + z: { + g:1, + c:"z = parseInt(results[{0}], 10);\n", + s:"(\\d{1,3})" // day of the year (0 - 364 (365 in leap years)) + }, + W: { + g:1, + c:"W = parseInt(results[{0}], 10);\n", + s:"(\\d{2})" // ISO-8601 week number (with leading zero) + }, + F: function() { + return { + g:1, + c:"m = parseInt(me.getMonthNumber(results[{0}]), 10);\n", // get localised month number + s:"(" + utilDate.monthNames.join("|") + ")" + }; + }, + M: function() { + for (var a = [], i = 0; i < 12; a.push(utilDate.getShortMonthName(i)), ++i); // get localised short month names + return Ext.applyIf({ + s:"(" + a.join("|") + ")" + }, utilDate.formatCodeToRegex("F")); + }, + m: { + g:1, + c:"m = parseInt(results[{0}], 10) - 1;\n", + s:"(1[0-2]|0[1-9])" // month number with leading zeros (01 - 12) + }, + n: { + g:1, + c:"m = parseInt(results[{0}], 10) - 1;\n", + s:"(1[0-2]|[1-9])" // month number without leading zeros (1 - 12) + }, + t: { + g:0, + c:null, + s:"(?:\\d{2})" // no. of days in the month (28 - 31) + }, + L: { + g:0, + c:null, + s:"(?:1|0)" + }, + o: { + g: 1, + c: "y = parseInt(results[{0}], 10);\n", + s: "(\\d{4})" // ISO-8601 year number (with leading zero) + + }, + Y: { + g:1, + c:"y = parseInt(results[{0}], 10);\n", + s:"(\\d{4})" // 4-digit year + }, + y: { + g:1, + c:"var ty = parseInt(results[{0}], 10);\n" + + "y = ty > me.y2kYear ? 1900 + ty : 2000 + ty;\n", // 2-digit year + s:"(\\d{1,2})" + }, + /* + * In the am/pm parsing routines, we allow both upper and lower case + * even though it doesn't exactly match the spec. It gives much more flexibility + * in being able to specify case insensitive regexes. + */ + // + a: { + g:1, + c:"if (/(am)/i.test(results[{0}])) {\n" + + "if (!h || h == 12) { h = 0; }\n" + + "} else { if (!h || h < 12) { h = (h || 0) + 12; }}", + s:"(am|pm|AM|PM)", + calcAtEnd: true + }, + // + // + A: { + g:1, + c:"if (/(am)/i.test(results[{0}])) {\n" + + "if (!h || h == 12) { h = 0; }\n" + + "} else { if (!h || h < 12) { h = (h || 0) + 12; }}", + s:"(AM|PM|am|pm)", + calcAtEnd: true + }, + // + g: { + g:1, + c:"h = parseInt(results[{0}], 10);\n", + s:"(1[0-2]|[0-9])" // 12-hr format of an hour without leading zeroes (1 - 12) + }, + G: { + g:1, + c:"h = parseInt(results[{0}], 10);\n", + s:"(2[0-3]|1[0-9]|[0-9])" // 24-hr format of an hour without leading zeroes (0 - 23) + }, + h: { + g:1, + c:"h = parseInt(results[{0}], 10);\n", + s:"(1[0-2]|0[1-9])" // 12-hr format of an hour with leading zeroes (01 - 12) + }, + H: { + g:1, + c:"h = parseInt(results[{0}], 10);\n", + s:"(2[0-3]|[0-1][0-9])" // 24-hr format of an hour with leading zeroes (00 - 23) + }, + i: { + g:1, + c:"i = parseInt(results[{0}], 10);\n", + s:"([0-5][0-9])" // minutes with leading zeros (00 - 59) + }, + s: { + g:1, + c:"s = parseInt(results[{0}], 10);\n", + s:"([0-5][0-9])" // seconds with leading zeros (00 - 59) + }, + u: { + g:1, + c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n", + s:"(\\d+)" // decimal fraction of a second (minimum = 1 digit, maximum = unlimited) + }, + O: { + g:1, + c:[ + "o = results[{0}];", + "var sn = o.substring(0,1),", // get + / - sign + "hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),", // get hours (performs minutes-to-hour conversion also, just in case) + "mn = o.substring(3,5) % 60;", // get minutes + "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n" // -12hrs <= GMT offset <= 14hrs + ].join("\n"), + s: "([+-]\\d{4})" // GMT offset in hrs and mins + }, + P: { + g:1, + c:[ + "o = results[{0}];", + "var sn = o.substring(0,1),", // get + / - sign + "hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),", // get hours (performs minutes-to-hour conversion also, just in case) + "mn = o.substring(4,6) % 60;", // get minutes + "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n" // -12hrs <= GMT offset <= 14hrs + ].join("\n"), + s: "([+-]\\d{2}:\\d{2})" // GMT offset in hrs and mins (with colon separator) + }, + T: { + g:0, + c:null, + s:"[A-Z]{1,5}" // timezone abbrev. may be between 1 - 5 chars + }, + Z: { + g:1, + c:"zz = results[{0}] * 1;\n" // -43200 <= UTC offset <= 50400 + + "zz = (-43200 <= zz && zz <= 50400)? zz : null;\n", + s:"([+-]?\\d{1,5})" // leading '+' sign is optional for UTC offset + }, + c: function() { + var calc = [], + arr = [ + utilDate.formatCodeToRegex("Y", 1), // year + utilDate.formatCodeToRegex("m", 2), // month + utilDate.formatCodeToRegex("d", 3), // day + utilDate.formatCodeToRegex("H", 4), // hour + utilDate.formatCodeToRegex("i", 5), // minute + utilDate.formatCodeToRegex("s", 6), // second + {c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"}, // decimal fraction of a second (minimum = 1 digit, maximum = unlimited) + {c:[ // allow either "Z" (i.e. UTC) or "-0530" or "+08:00" (i.e. UTC offset) timezone delimiters. assumes local timezone if no timezone is specified + "if(results[8]) {", // timezone specified + "if(results[8] == 'Z'){", + "zz = 0;", // UTC + "}else if (results[8].indexOf(':') > -1){", + utilDate.formatCodeToRegex("P", 8).c, // timezone offset with colon separator + "}else{", + utilDate.formatCodeToRegex("O", 8).c, // timezone offset without colon separator + "}", + "}" + ].join('\n')} + ], + i, + l; + + for (i = 0, l = arr.length; i < l; ++i) { + calc.push(arr[i].c); + } + + return { + g:1, + c:calc.join(""), + s:[ + arr[0].s, // year (required) + "(?:", "-", arr[1].s, // month (optional) + "(?:", "-", arr[2].s, // day (optional) + "(?:", + "(?:T| )?", // time delimiter -- either a "T" or a single blank space + arr[3].s, ":", arr[4].s, // hour AND minute, delimited by a single colon (optional). MUST be preceded by either a "T" or a single blank space + "(?::", arr[5].s, ")?", // seconds (optional) + "(?:(?:\\.|,)(\\d+))?", // decimal fraction of a second (e.g. ",12345" or ".98765") (optional) + "(Z|(?:[-+]\\d{2}(?::)?\\d{2}))?", // "Z" (UTC) or "-0530" (UTC offset without colon delimiter) or "+08:00" (UTC offset with colon delimiter) (optional) + ")?", + ")?", + ")?" + ].join("") + }; + }, + U: { + g:1, + c:"u = parseInt(results[{0}], 10);\n", + s:"(-?\\d+)" // leading minus sign indicates seconds before UNIX epoch + } + }, + + //Old Ext.Date prototype methods. + // private + dateFormat: function(date, format) { + return utilDate.format(date, format); + }, + + /** + * Compares if two dates are equal by comparing their values. + * @param {Date} date1 + * @param {Date} date2 + * @return {Boolean} `true` if the date values are equal + */ + isEqual: function(date1, date2) { + // check we have 2 date objects + if (date1 && date2) { + return (date1.getTime() === date2.getTime()); + } + // one or both isn't a date, only equal if both are falsey + return !(date1 || date2); + }, + + /** + * Formats a date given the supplied format string. + * @param {Date} date The date to format + * @param {String} format The format string + * @return {String} The formatted date or an empty string if date parameter is not a JavaScript Date object + */ + format: function(date, format) { + var formatFunctions = utilDate.formatFunctions; + + if (!Ext.isDate(date)) { + return ''; + } + + if (formatFunctions[format] == null) { + utilDate.createFormat(format); + } + + return formatFunctions[format].call(date) + ''; + }, + + /** + * Get the timezone abbreviation of the current date (equivalent to the format specifier 'T'). + * + * __Note:__ The date string returned by the JavaScript Date object's `toString()` method varies + * between browsers (e.g. FF vs IE) and system region settings (e.g. IE in Asia vs IE in America). + * For a given date string e.g. "Thu Oct 25 2007 22:55:35 GMT+0800 (Malay Peninsula Standard Time)", + * getTimezone() first tries to get the timezone abbreviation from between a pair of parentheses + * (which may or may not be present), failing which it proceeds to get the timezone abbreviation + * from the GMT offset portion of the date string. + * @param {Date} date The date + * @return {String} The abbreviated timezone name (e.g. 'CST', 'PDT', 'EDT', 'MPST' ...). + */ + getTimezone : function(date) { + // the following list shows the differences between date strings from different browsers on a WinXP SP2 machine from an Asian locale: + // + // Opera : "Thu, 25 Oct 2007 22:53:45 GMT+0800" -- shortest (weirdest) date string of the lot + // Safari : "Thu Oct 25 2007 22:55:35 GMT+0800 (Malay Peninsula Standard Time)" -- value in parentheses always gives the correct timezone (same as FF) + // FF : "Thu Oct 25 2007 22:55:35 GMT+0800 (Malay Peninsula Standard Time)" -- value in parentheses always gives the correct timezone + // IE : "Thu Oct 25 22:54:35 UTC+0800 2007" -- (Asian system setting) look for 3-4 letter timezone abbrev + // IE : "Thu Oct 25 17:06:37 PDT 2007" -- (American system setting) look for 3-4 letter timezone abbrev + // + // this crazy regex attempts to guess the correct timezone abbreviation despite these differences. + // step 1: (?:\((.*)\) -- find timezone in parentheses + // step 2: ([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?) -- if nothing was found in step 1, find timezone from timezone offset portion of date string + // step 3: remove all non uppercase characters found in step 1 and 2 + return date.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,5})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/, "$1$2").replace(/[^A-Z]/g, ""); + }, + + /** + * Get the offset from GMT of the current date (equivalent to the format specifier 'O'). + * @param {Date} date The date + * @param {Boolean} [colon=false] (optional) true to separate the hours and minutes with a colon. + * @return {String} The 4-character offset string prefixed with + or - (e.g. '-0600'). + */ + getGMTOffset : function(date, colon) { + var offset = date.getTimezoneOffset(); + return (offset > 0 ? "-" : "+") + + Ext.String.leftPad(Math.floor(Math.abs(offset) / 60), 2, "0") + + (colon ? ":" : "") + + Ext.String.leftPad(Math.abs(offset % 60), 2, "0"); + }, + + /** + * Get the numeric day number of the year, adjusted for leap year. + * @param {Date} date The date + * @return {Number} 0 to 364 (365 in leap years). + */ + getDayOfYear: function(date) { + var num = 0, + d = Ext.Date.clone(date), + m = date.getMonth(), + i; + + for (i = 0, d.setDate(1), d.setMonth(0); i < m; d.setMonth(++i)) { + num += utilDate.getDaysInMonth(d); + } + return num + date.getDate() - 1; + }, + + /** + * Get the numeric ISO-8601 week number of the year. + * (equivalent to the format specifier 'W', but without a leading zero). + * @param {Date} date The date + * @return {Number} 1 to 53 + * @method + */ + getWeekOfYear : (function() { + // adapted from http://www.merlyn.demon.co.uk/weekcalc.htm + var ms1d = 864e5, // milliseconds in a day + ms7d = 7 * ms1d; // milliseconds in a week + + return function(date) { // return a closure so constants get calculated only once + var DC3 = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate() + 3) / ms1d, // an Absolute Day Number + AWN = Math.floor(DC3 / 7), // an Absolute Week Number + Wyr = new Date(AWN * ms7d).getUTCFullYear(); + + return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1; + }; + }()), + + /** + * Checks if the current date falls within a leap year. + * @param {Date} date The date + * @return {Boolean} True if the current date falls within a leap year, false otherwise. + */ + isLeapYear : function(date) { + var year = date.getFullYear(); + return !!((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year))); + }, + + /** + * Get the first day of the current month, adjusted for leap year. The returned value + * is the numeric day index within the week (0-6) which can be used in conjunction with + * the {@link #monthNames} array to retrieve the textual day name. + * + * Example: + * + * var dt = new Date('1/10/2007'), + * firstDay = Ext.Date.getFirstDayOfMonth(dt); + * console.log(Ext.Date.dayNames[firstDay]); // output: 'Monday' + * + * @param {Date} date The date + * @return {Number} The day number (0-6). + */ + getFirstDayOfMonth : function(date) { + var day = (date.getDay() - (date.getDate() - 1)) % 7; + return (day < 0) ? (day + 7) : day; + }, + + /** + * Get the last day of the current month, adjusted for leap year. The returned value + * is the numeric day index within the week (0-6) which can be used in conjunction with + * the {@link #monthNames} array to retrieve the textual day name. + * + * Example: + * + * var dt = new Date('1/10/2007'), + * lastDay = Ext.Date.getLastDayOfMonth(dt); + * console.log(Ext.Date.dayNames[lastDay]); // output: 'Wednesday' + * + * @param {Date} date The date + * @return {Number} The day number (0-6). + */ + getLastDayOfMonth : function(date) { + return utilDate.getLastDateOfMonth(date).getDay(); + }, + + + /** + * Get the date of the first day of the month in which this date resides. + * @param {Date} date The date + * @return {Date} + */ + getFirstDateOfMonth : function(date) { + return new Date(date.getFullYear(), date.getMonth(), 1); + }, + + /** + * Get the date of the last day of the month in which this date resides. + * @param {Date} date The date + * @return {Date} + */ + getLastDateOfMonth : function(date) { + return new Date(date.getFullYear(), date.getMonth(), utilDate.getDaysInMonth(date)); + }, + + /** + * Get the number of days in the current month, adjusted for leap year. + * @param {Date} date The date + * @return {Number} The number of days in the month. + * @method + */ + getDaysInMonth: (function() { + var daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + + return function(date) { // return a closure for efficiency + var m = date.getMonth(); + + return m == 1 && utilDate.isLeapYear(date) ? 29 : daysInMonth[m]; + }; + }()), + + // + /** + * Get the English ordinal suffix of the current day (equivalent to the format specifier 'S'). + * @param {Date} date The date + * @return {String} 'st, 'nd', 'rd' or 'th'. + */ + getSuffix : function(date) { + switch (date.getDate()) { + case 1: + case 21: + case 31: + return "st"; + case 2: + case 22: + return "nd"; + case 3: + case 23: + return "rd"; + default: + return "th"; + } + }, + // + + /** + * Creates and returns a new Date instance with the exact same date value as the called instance. + * Dates are copied and passed by reference, so if a copied date variable is modified later, the original + * variable will also be changed. When the intention is to create a new variable that will not + * modify the original instance, you should create a clone. + * + * Example of correctly cloning a date: + * + * //wrong way: + * var orig = new Date('10/1/2006'); + * var copy = orig; + * copy.setDate(5); + * console.log(orig); // returns 'Thu Oct 05 2006'! + * + * //correct way: + * var orig = new Date('10/1/2006'), + * copy = Ext.Date.clone(orig); + * copy.setDate(5); + * console.log(orig); // returns 'Thu Oct 01 2006' + * + * @param {Date} date The date. + * @return {Date} The new Date instance. + */ + clone : function(date) { + return new Date(date.getTime()); + }, + + /** + * Checks if the current date is affected by Daylight Saving Time (DST). + * @param {Date} date The date + * @return {Boolean} `true` if the current date is affected by DST. + */ + isDST : function(date) { + // adapted from http://sencha.com/forum/showthread.php?p=247172#post247172 + // courtesy of @geoffrey.mcgill + return new Date(date.getFullYear(), 0, 1).getTimezoneOffset() != date.getTimezoneOffset(); + }, + + /** + * Attempts to clear all time information from this Date by setting the time to midnight of the same day, + * automatically adjusting for Daylight Saving Time (DST) where applicable. + * + * __Note:__ DST timezone information for the browser's host operating system is assumed to be up-to-date. + * @param {Date} date The date + * @param {Boolean} [clone=false] `true` to create a clone of this date, clear the time and return it. + * @return {Date} this or the clone. + */ + clearTime : function(date, clone) { + if (clone) { + return Ext.Date.clearTime(Ext.Date.clone(date)); + } + + // get current date before clearing time + var d = date.getDate(), + hr, + c; + + // clear time + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + + if (date.getDate() != d) { // account for DST (i.e. day of month changed when setting hour = 0) + // note: DST adjustments are assumed to occur in multiples of 1 hour (this is almost always the case) + // refer to http://www.timeanddate.com/time/aboutdst.html for the (rare) exceptions to this rule + + // increment hour until cloned date == current date + for (hr = 1, c = utilDate.add(date, Ext.Date.HOUR, hr); c.getDate() != d; hr++, c = utilDate.add(date, Ext.Date.HOUR, hr)); + + date.setDate(d); + date.setHours(c.getHours()); + } + + return date; + }, + + /** + * Provides a convenient method for performing basic date arithmetic. This method + * does not modify the Date instance being called - it creates and returns + * a new Date instance containing the resulting date value. + * + * Examples: + * + * // Basic usage: + * var dt = Ext.Date.add(new Date('10/29/2006'), Ext.Date.DAY, 5); + * console.log(dt); // returns 'Fri Nov 03 2006 00:00:00' + * + * // Negative values will be subtracted: + * var dt2 = Ext.Date.add(new Date('10/1/2006'), Ext.Date.DAY, -5); + * console.log(dt2); // returns 'Tue Sep 26 2006 00:00:00' + * + * // Decimal values can be used: + * var dt3 = Ext.Date.add(new Date('10/1/2006'), Ext.Date.DAY, 1.25); + * console.log(dt3); // returns 'Mon Oct 02 2006 06:00:00' + * + * @param {Date} date The date to modify + * @param {String} interval A valid date interval enum value. + * @param {Number} value The amount to add to the current date. + * @return {Date} The new Date instance. + */ + add : function(date, interval, value) { + var d = Ext.Date.clone(date), + Date = Ext.Date, + day, decimalValue, base = 0; + if (!interval || value === 0) { + return d; + } + + decimalValue = value - parseInt(value, 10); + value = parseInt(value, 10); + + if (value) { + switch(interval.toLowerCase()) { + // See EXTJSIV-7418. We use setTime() here to deal with issues related to + // the switchover that occurs when changing to daylight savings and vice + // versa. setTime() handles this correctly where setHour/Minute/Second/Millisecond + // do not. Let's assume the DST change occurs at 2am and we're incrementing using add + // for 15 minutes at time. When entering DST, we should see: + // 01:30am + // 01:45am + // 03:00am // skip 2am because the hour does not exist + // ... + // Similarly, leaving DST, we should see: + // 01:30am + // 01:45am + // 01:00am // repeat 1am because that's the change over + // 01:30am + // 01:45am + // 02:00am + // .... + // + case Ext.Date.MILLI: + d.setTime(d.getTime() + value); + break; + case Ext.Date.SECOND: + d.setTime(d.getTime() + value * 1000); + break; + case Ext.Date.MINUTE: + d.setTime(d.getTime() + value * 60 * 1000); + break; + case Ext.Date.HOUR: + d.setTime(d.getTime() + value * 60 * 60 * 1000); + break; + case Ext.Date.DAY: + d.setDate(d.getDate() + value); + break; + case Ext.Date.MONTH: + day = date.getDate(); + if (day > 28) { + day = Math.min(day, Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(date), Ext.Date.MONTH, value)).getDate()); + } + d.setDate(day); + d.setMonth(date.getMonth() + value); + break; + case Ext.Date.YEAR: + day = date.getDate(); + if (day > 28) { + day = Math.min(day, Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(date), Ext.Date.YEAR, value)).getDate()); + } + d.setDate(day); + d.setFullYear(date.getFullYear() + value); + break; + } + } + + if (decimalValue) { + switch (interval.toLowerCase()) { + case Ext.Date.MILLI: base = 1; break; + case Ext.Date.SECOND: base = 1000; break; + case Ext.Date.MINUTE: base = 1000*60; break; + case Ext.Date.HOUR: base = 1000*60*60; break; + case Ext.Date.DAY: base = 1000*60*60*24; break; + + case Ext.Date.MONTH: + day = utilDate.getDaysInMonth(d); + base = 1000*60*60*24*day; + break; + + case Ext.Date.YEAR: + day = (utilDate.isLeapYear(d) ? 366 : 365); + base = 1000*60*60*24*day; + break; + } + if (base) { + d.setTime(d.getTime() + base * decimalValue); + } + } + + return d; + }, + + /** + * Provides a convenient method for performing basic date arithmetic. This method + * does not modify the Date instance being called - it creates and returns + * a new Date instance containing the resulting date value. + * + * Examples: + * + * // Basic usage: + * var dt = Ext.Date.subtract(new Date('10/29/2006'), Ext.Date.DAY, 5); + * console.log(dt); // returns 'Tue Oct 24 2006 00:00:00' + * + * // Negative values will be added: + * var dt2 = Ext.Date.subtract(new Date('10/1/2006'), Ext.Date.DAY, -5); + * console.log(dt2); // returns 'Fri Oct 6 2006 00:00:00' + * + * // Decimal values can be used: + * var dt3 = Ext.Date.subtract(new Date('10/1/2006'), Ext.Date.DAY, 1.25); + * console.log(dt3); // returns 'Fri Sep 29 2006 06:00:00' + * + * @param {Date} date The date to modify + * @param {String} interval A valid date interval enum value. + * @param {Number} value The amount to subtract from the current date. + * @return {Date} The new Date instance. + */ + subtract: function(date, interval, value){ + return utilDate.add(date, interval, -value); + }, + + /** + * Checks if a date falls on or between the given start and end dates. + * @param {Date} date The date to check + * @param {Date} start Start date + * @param {Date} end End date + * @return {Boolean} `true` if this date falls on or between the given start and end dates. + */ + between : function(date, start, end) { + var t = date.getTime(); + return start.getTime() <= t && t <= end.getTime(); + }, + + //Maintains compatibility with old static and prototype window.Date methods. + compat: function() { + var nativeDate = window.Date, + p, + statics = ['useStrict', 'formatCodeToRegex', 'parseFunctions', 'parseRegexes', 'formatFunctions', 'y2kYear', 'MILLI', 'SECOND', 'MINUTE', 'HOUR', 'DAY', 'MONTH', 'YEAR', 'defaults', 'dayNames', 'monthNames', 'monthNumbers', 'getShortMonthName', 'getShortDayName', 'getMonthNumber', 'formatCodes', 'isValid', 'parseDate', 'getFormatCode', 'createFormat', 'createParser', 'parseCodes'], + proto = ['dateFormat', 'format', 'getTimezone', 'getGMTOffset', 'getDayOfYear', 'getWeekOfYear', 'isLeapYear', 'getFirstDayOfMonth', 'getLastDayOfMonth', 'getDaysInMonth', 'getSuffix', 'clone', 'isDST', 'clearTime', 'add', 'between'], + sLen = statics.length, + pLen = proto.length, + stat, prot, s; + + //Append statics + for (s = 0; s < sLen; s++) { + stat = statics[s]; + nativeDate[stat] = utilDate[stat]; + } + + //Append to prototype + for (p = 0; p < pLen; p++) { + prot = proto[p]; + nativeDate.prototype[prot] = function() { + var args = Array.prototype.slice.call(arguments); + args.unshift(this); + return utilDate[prot].apply(utilDate, args); + }; + } + } + }); +}; + +//@tag foundation,core +//@require ../lang/Date.js + +/** + * @author Jacky Nguyen + * @docauthor Jacky Nguyen + * @class Ext.Base + * + * The root of all classes created with {@link Ext#define}. + * + * Ext.Base is the building block of all Ext classes. All classes in Ext inherit from Ext.Base. + * All prototype and static members of this class are inherited by all other classes. + */ +(function(flexSetter) { + +var noArgs = [], + Base = function(){}, + hookFunctionFactory = function(hookFunction, underriddenFunction, methodName, owningClass) { + var result = function() { + var result = this.callParent(arguments); + hookFunction.apply(this, arguments); + return result; + }; + result.$name = methodName; + result.$owner = owningClass; + if (underriddenFunction) { + result.$previous = underriddenFunction.$previous; + underriddenFunction.$previous = result; + } + return result; + }; + + // These static properties will be copied to every newly created class with {@link Ext#define} + Ext.apply(Base, { + $className: 'Ext.Base', + + $isClass: true, + + /** + * Create a new instance of this Class. + * + * Ext.define('My.cool.Class', { + * ... + * }); + * + * My.cool.Class.create({ + * someConfig: true + * }); + * + * All parameters are passed to the constructor of the class. + * + * @return {Object} the created instance. + * @static + * @inheritable + */ + create: function() { + return Ext.create.apply(Ext, [this].concat(Array.prototype.slice.call(arguments, 0))); + }, + + /** + * @private + * @static + * @inheritable + * @param config + */ + extend: function(parent) { + var parentPrototype = parent.prototype, + basePrototype, prototype, i, ln, name, statics; + + prototype = this.prototype = Ext.Object.chain(parentPrototype); + prototype.self = this; + + this.superclass = prototype.superclass = parentPrototype; + + if (!parent.$isClass) { + basePrototype = Ext.Base.prototype; + + for (i in basePrototype) { + if (i in prototype) { + prototype[i] = basePrototype[i]; + } + } + } + + // Statics inheritance + statics = parentPrototype.$inheritableStatics; + + if (statics) { + for (i = 0,ln = statics.length; i < ln; i++) { + name = statics[i]; + + if (!this.hasOwnProperty(name)) { + this[name] = parent[name]; + } + } + } + + if (parent.$onExtended) { + this.$onExtended = parent.$onExtended.slice(); + } + + prototype.config = new prototype.configClass(); + prototype.initConfigList = prototype.initConfigList.slice(); + prototype.initConfigMap = Ext.clone(prototype.initConfigMap); + prototype.configMap = Ext.Object.chain(prototype.configMap); + }, + + /** + * @private + * @static + * @inheritable + */ + $onExtended: [], + + /** + * @private + * @static + * @inheritable + */ + triggerExtended: function() { + Ext.classSystemMonitor && Ext.classSystemMonitor(this, 'Ext.Base#triggerExtended', arguments); + + var callbacks = this.$onExtended, + ln = callbacks.length, + i, callback; + + if (ln > 0) { + for (i = 0; i < ln; i++) { + callback = callbacks[i]; + callback.fn.apply(callback.scope || this, arguments); + } + } + }, + + /** + * @private + * @static + * @inheritable + */ + onExtended: function(fn, scope) { + this.$onExtended.push({ + fn: fn, + scope: scope + }); + + return this; + }, + + /** + * @private + * @static + * @inheritable + * @param config + */ + addConfig: function(config, fullMerge) { + var prototype = this.prototype, + configNameCache = Ext.Class.configNameCache, + hasConfig = prototype.configMap, + initConfigList = prototype.initConfigList, + initConfigMap = prototype.initConfigMap, + defaultConfig = prototype.config, + initializedName, name, value; + + for (name in config) { + if (config.hasOwnProperty(name)) { + if (!hasConfig[name]) { + hasConfig[name] = true; + } + + value = config[name]; + + initializedName = configNameCache[name].initialized; + + if (!initConfigMap[name] && value !== null && !prototype[initializedName]) { + initConfigMap[name] = true; + initConfigList.push(name); + } + } + } + + if (fullMerge) { + Ext.merge(defaultConfig, config); + } + else { + Ext.mergeIf(defaultConfig, config); + } + + prototype.configClass = Ext.Object.classify(defaultConfig); + }, + + /** + * Add / override static properties of this class. + * + * Ext.define('My.cool.Class', { + * ... + * }); + * + * My.cool.Class.addStatics({ + * someProperty: 'someValue', // My.cool.Class.someProperty = 'someValue' + * method1: function() { ... }, // My.cool.Class.method1 = function() { ... }; + * method2: function() { ... } // My.cool.Class.method2 = function() { ... }; + * }); + * + * @param {Object} members + * @return {Ext.Base} this + * @static + * @inheritable + */ + addStatics: function(members) { + var member, name; + + for (name in members) { + if (members.hasOwnProperty(name)) { + member = members[name]; + if (typeof member == 'function' && !member.$isClass && member !== Ext.emptyFn && member !== Ext.identityFn) { + member.$owner = this; + member.$name = name; + member.displayName = Ext.getClassName(this) + '.' + name; + } + this[name] = member; + } + } + + return this; + }, + + /** + * @private + * @static + * @inheritable + * @param {Object} members + */ + addInheritableStatics: function(members) { + var inheritableStatics, + hasInheritableStatics, + prototype = this.prototype, + name, member; + + inheritableStatics = prototype.$inheritableStatics; + hasInheritableStatics = prototype.$hasInheritableStatics; + + if (!inheritableStatics) { + inheritableStatics = prototype.$inheritableStatics = []; + hasInheritableStatics = prototype.$hasInheritableStatics = {}; + } + + for (name in members) { + if (members.hasOwnProperty(name)) { + member = members[name]; + if (typeof member == 'function') { + member.displayName = Ext.getClassName(this) + '.' + name; + } + this[name] = member; + + if (!hasInheritableStatics[name]) { + hasInheritableStatics[name] = true; + inheritableStatics.push(name); + } + } + } + + return this; + }, + + /** + * Add methods / properties to the prototype of this class. + * + * Ext.define('My.awesome.Cat', { + * constructor: function() { + * ... + * } + * }); + * + * My.awesome.Cat.addMembers({ + * meow: function() { + * alert('Meowww...'); + * } + * }); + * + * var kitty = new My.awesome.Cat; + * kitty.meow(); + * + * @param {Object} members + * @static + * @inheritable + */ + addMembers: function(members) { + var prototype = this.prototype, + enumerables = Ext.enumerables, + names = [], + i, ln, name, member; + + for (name in members) { + names.push(name); + } + + if (enumerables) { + names.push.apply(names, enumerables); + } + + for (i = 0,ln = names.length; i < ln; i++) { + name = names[i]; + + if (members.hasOwnProperty(name)) { + member = members[name]; + + if (typeof member == 'function' && !member.$isClass && member !== Ext.emptyFn && member !== Ext.identityFn) { + member.$owner = this; + member.$name = name; + member.displayName = (this.$className || '') + '#' + name; + } + + prototype[name] = member; + } + } + + return this; + }, + + /** + * @private + * @static + * @inheritable + * @param name + * @param member + */ + addMember: function(name, member) { + if (typeof member == 'function' && !member.$isClass && member !== Ext.emptyFn && member !== Ext.identityFn) { + member.$owner = this; + member.$name = name; + member.displayName = (this.$className || '') + '#' + name; + } + + this.prototype[name] = member; + return this; + }, + + /** + * Adds members to class. + * @static + * @inheritable + * @deprecated 4.1 Use {@link #addMembers} instead. + */ + implement: function() { + this.addMembers.apply(this, arguments); + }, + + /** + * Borrow another class' members to the prototype of this class. + * + * Ext.define('Bank', { + * money: '$$$', + * printMoney: function() { + * alert('$$$$$$$'); + * } + * }); + * + * Ext.define('Thief', { + * ... + * }); + * + * Thief.borrow(Bank, ['money', 'printMoney']); + * + * var steve = new Thief(); + * + * alert(steve.money); // alerts '$$$' + * steve.printMoney(); // alerts '$$$$$$$' + * + * @param {Ext.Base} fromClass The class to borrow members from + * @param {Array/String} members The names of the members to borrow + * @return {Ext.Base} this + * @static + * @inheritable + * @private + */ + borrow: function(fromClass, members) { + Ext.classSystemMonitor && Ext.classSystemMonitor(this, 'Ext.Base#borrow', arguments); + + var prototype = this.prototype, + fromPrototype = fromClass.prototype, + className = Ext.getClassName(this), + i, ln, name, fn, toBorrow; + + members = Ext.Array.from(members); + + for (i = 0,ln = members.length; i < ln; i++) { + name = members[i]; + + toBorrow = fromPrototype[name]; + + if (typeof toBorrow == 'function') { + fn = Ext.Function.clone(toBorrow); + + if (className) { + fn.displayName = className + '#' + name; + } + + fn.$owner = this; + fn.$name = name; + + prototype[name] = fn; + } + else { + prototype[name] = toBorrow; + } + } + + return this; + }, + + /** + * Override members of this class. Overridden methods can be invoked via + * {@link Ext.Base#callParent}. + * + * Ext.define('My.Cat', { + * constructor: function() { + * alert("I'm a cat!"); + * } + * }); + * + * My.Cat.override({ + * constructor: function() { + * alert("I'm going to be a cat!"); + * + * this.callParent(arguments); + * + * alert("Meeeeoooowwww"); + * } + * }); + * + * var kitty = new My.Cat(); // alerts "I'm going to be a cat!" + * // alerts "I'm a cat!" + * // alerts "Meeeeoooowwww" + * + * As of 4.1, direct use of this method is deprecated. Use {@link Ext#define Ext.define} + * instead: + * + * Ext.define('My.CatOverride', { + * override: 'My.Cat', + * constructor: function() { + * alert("I'm going to be a cat!"); + * + * this.callParent(arguments); + * + * alert("Meeeeoooowwww"); + * } + * }); + * + * The above accomplishes the same result but can be managed by the {@link Ext.Loader} + * which can properly order the override and its target class and the build process + * can determine whether the override is needed based on the required state of the + * target class (My.Cat). + * + * @param {Object} members The properties to add to this class. This should be + * specified as an object literal containing one or more properties. + * @return {Ext.Base} this class + * @static + * @inheritable + * @markdown + * @deprecated 4.1.0 Use {@link Ext#define Ext.define} instead + */ + override: function(members) { + var me = this, + enumerables = Ext.enumerables, + target = me.prototype, + cloneFunction = Ext.Function.clone, + name, index, member, statics, names, previous; + + if (arguments.length === 2) { + name = members; + members = {}; + members[name] = arguments[1]; + enumerables = null; + } + + do { + names = []; // clean slate for prototype (1st pass) and static (2nd pass) + statics = null; // not needed 1st pass, but needs to be cleared for 2nd pass + + for (name in members) { // hasOwnProperty is checked in the next loop... + if (name == 'statics') { + statics = members[name]; + } else if (name == 'inheritableStatics'){ + me.addInheritableStatics(members[name]); + } else if (name == 'config') { + me.addConfig(members[name], true); + } else { + names.push(name); + } + } + + if (enumerables) { + names.push.apply(names, enumerables); + } + + for (index = names.length; index--; ) { + name = names[index]; + + if (members.hasOwnProperty(name)) { + member = members[name]; + + if (typeof member == 'function' && !member.$className && member !== Ext.emptyFn && member !== Ext.identityFn) { + if (typeof member.$owner != 'undefined') { + member = cloneFunction(member); + } + + if (me.$className) { + member.displayName = me.$className + '#' + name; + } + + member.$owner = me; + member.$name = name; + + previous = target[name]; + if (previous) { + member.$previous = previous; + } + } + + target[name] = member; + } + } + + target = me; // 2nd pass is for statics + members = statics; // statics will be null on 2nd pass + } while (members); + + return this; + }, + + // Documented downwards + callParent: function(args) { + var method; + + // This code is intentionally inlined for the least number of debugger stepping + return (method = this.callParent.caller) && (method.$previous || + ((method = method.$owner ? method : method.caller) && + method.$owner.superclass.self[method.$name])).apply(this, args || noArgs); + }, + + // Documented downwards + callSuper: function(args) { + var method; + + // This code is intentionally inlined for the least number of debugger stepping + return (method = this.callSuper.caller) && + ((method = method.$owner ? method : method.caller) && + method.$owner.superclass.self[method.$name]).apply(this, args || noArgs); + }, + + /** + * Used internally by the mixins pre-processor + * @private + * @static + * @inheritable + */ + mixin: function(name, mixinClass) { + var me = this, + mixin = mixinClass.prototype, + prototype = me.prototype, + key, statics, i, ln, staticName, + mixinValue, hookKey, hookFunction; + + if (typeof mixin.onClassMixedIn != 'undefined') { + mixin.onClassMixedIn.call(mixinClass, me); + } + + if (!prototype.hasOwnProperty('mixins')) { + if ('mixins' in prototype) { + prototype.mixins = Ext.Object.chain(prototype.mixins); + } + else { + prototype.mixins = {}; + } + } + + for (key in mixin) { + mixinValue = mixin[key]; + if (key === 'mixins') { + Ext.merge(prototype.mixins, mixinValue); + } + else if (key === 'xhooks') { + for (hookKey in mixinValue) { + hookFunction = mixinValue[hookKey]; + + // Mixed in xhook methods cannot call a parent. + hookFunction.$previous = Ext.emptyFn; + + if (prototype.hasOwnProperty(hookKey)) { + + // Pass the hook function, and the existing function which it is to underride. + // The existing function has its $previous pointer replaced by a closure + // which calls the hookFunction and then the existing function's original $previous + hookFunctionFactory(hookFunction, prototype[hookKey], hookKey, me); + } else { + // There's no original function, so generate an implementation which calls + // the hook function. It will not get any $previous pointer. + prototype[hookKey] = hookFunctionFactory(hookFunction, null, hookKey, me); + } + } + } + else if (!(key === 'mixinId' || key === 'config') && (prototype[key] === undefined)) { + prototype[key] = mixinValue; + } + } + + // Mixin statics inheritance + statics = mixin.$inheritableStatics; + + if (statics) { + for (i = 0, ln = statics.length; i < ln; i++) { + staticName = statics[i]; + + if (!me.hasOwnProperty(staticName)) { + me[staticName] = mixinClass[staticName]; + } + } + } + + if ('config' in mixin) { + me.addConfig(mixin.config, false); + } + + prototype.mixins[name] = mixin; + return me; + }, + + /** + * Get the current class' name in string format. + * + * Ext.define('My.cool.Class', { + * constructor: function() { + * alert(this.self.getName()); // alerts 'My.cool.Class' + * } + * }); + * + * My.cool.Class.getName(); // 'My.cool.Class' + * + * @return {String} className + * @static + * @inheritable + */ + getName: function() { + return Ext.getClassName(this); + }, + + /** + * Create aliases for existing prototype methods. Example: + * + * Ext.define('My.cool.Class', { + * method1: function() { ... }, + * method2: function() { ... } + * }); + * + * var test = new My.cool.Class(); + * + * My.cool.Class.createAlias({ + * method3: 'method1', + * method4: 'method2' + * }); + * + * test.method3(); // test.method1() + * + * My.cool.Class.createAlias('method5', 'method3'); + * + * test.method5(); // test.method3() -> test.method1() + * + * @param {String/Object} alias The new method name, or an object to set multiple aliases. See + * {@link Ext.Function#flexSetter flexSetter} + * @param {String/Object} origin The original method name + * @static + * @inheritable + * @method + */ + createAlias: flexSetter(function(alias, origin) { + this.override(alias, function() { + return this[origin].apply(this, arguments); + }); + }), + + /** + * @private + * @static + * @inheritable + */ + addXtype: function(xtype) { + var prototype = this.prototype, + xtypesMap = prototype.xtypesMap, + xtypes = prototype.xtypes, + xtypesChain = prototype.xtypesChain; + + if (!prototype.hasOwnProperty('xtypesMap')) { + xtypesMap = prototype.xtypesMap = Ext.merge({}, prototype.xtypesMap || {}); + xtypes = prototype.xtypes = prototype.xtypes ? [].concat(prototype.xtypes) : []; + xtypesChain = prototype.xtypesChain = prototype.xtypesChain ? [].concat(prototype.xtypesChain) : []; + prototype.xtype = xtype; + } + + if (!xtypesMap[xtype]) { + xtypesMap[xtype] = true; + xtypes.push(xtype); + xtypesChain.push(xtype); + Ext.ClassManager.setAlias(this, 'widget.' + xtype); + } + + return this; + } + }); + + Base.implement({ + /** @private */ + isInstance: true, + + /** @private */ + $className: 'Ext.Base', + + /** @private */ + configClass: Ext.emptyFn, + + /** @private */ + initConfigList: [], + + /** @private */ + configMap: {}, + + /** @private */ + initConfigMap: {}, + + /** + * Get the reference to the class from which this object was instantiated. Note that unlike {@link Ext.Base#self}, + * `this.statics()` is scope-independent and it always returns the class from which it was called, regardless of what + * `this` points to during run-time + * + * Ext.define('My.Cat', { + * statics: { + * totalCreated: 0, + * speciesName: 'Cat' // My.Cat.speciesName = 'Cat' + * }, + * + * constructor: function() { + * var statics = this.statics(); + * + * alert(statics.speciesName); // always equals to 'Cat' no matter what 'this' refers to + * // equivalent to: My.Cat.speciesName + * + * alert(this.self.speciesName); // dependent on 'this' + * + * statics.totalCreated++; + * }, + * + * clone: function() { + * var cloned = new this.self; // dependent on 'this' + * + * cloned.groupName = this.statics().speciesName; // equivalent to: My.Cat.speciesName + * + * return cloned; + * } + * }); + * + * + * Ext.define('My.SnowLeopard', { + * extend: 'My.Cat', + * + * statics: { + * speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard' + * }, + * + * constructor: function() { + * this.callParent(); + * } + * }); + * + * var cat = new My.Cat(); // alerts 'Cat', then alerts 'Cat' + * + * var snowLeopard = new My.SnowLeopard(); // alerts 'Cat', then alerts 'Snow Leopard' + * + * var clone = snowLeopard.clone(); + * alert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard' + * alert(clone.groupName); // alerts 'Cat' + * + * alert(My.Cat.totalCreated); // alerts 3 + * + * @protected + * @return {Ext.Class} + */ + statics: function() { + var method = this.statics.caller, + self = this.self; + + if (!method) { + return self; + } + + return method.$owner; + }, + + /** + * Call the "parent" method of the current method. That is the method previously + * overridden by derivation or by an override (see {@link Ext#define}). + * + * Ext.define('My.Base', { + * constructor: function (x) { + * this.x = x; + * }, + * + * statics: { + * method: function (x) { + * return x; + * } + * } + * }); + * + * Ext.define('My.Derived', { + * extend: 'My.Base', + * + * constructor: function () { + * this.callParent([21]); + * } + * }); + * + * var obj = new My.Derived(); + * + * alert(obj.x); // alerts 21 + * + * This can be used with an override as follows: + * + * Ext.define('My.DerivedOverride', { + * override: 'My.Derived', + * + * constructor: function (x) { + * this.callParent([x*2]); // calls original My.Derived constructor + * } + * }); + * + * var obj = new My.Derived(); + * + * alert(obj.x); // now alerts 42 + * + * This also works with static methods. + * + * Ext.define('My.Derived2', { + * extend: 'My.Base', + * + * statics: { + * method: function (x) { + * return this.callParent([x*2]); // calls My.Base.method + * } + * } + * }); + * + * alert(My.Base.method(10); // alerts 10 + * alert(My.Derived2.method(10); // alerts 20 + * + * Lastly, it also works with overridden static methods. + * + * Ext.define('My.Derived2Override', { + * override: 'My.Derived2', + * + * statics: { + * method: function (x) { + * return this.callParent([x*2]); // calls My.Derived2.method + * } + * } + * }); + * + * alert(My.Derived2.method(10); // now alerts 40 + * + * To override a method and replace it and also call the superclass method, use + * {@link #callSuper}. This is often done to patch a method to fix a bug. + * + * @protected + * @param {Array/Arguments} args The arguments, either an array or the `arguments` object + * from the current method, for example: `this.callParent(arguments)` + * @return {Object} Returns the result of calling the parent method + */ + callParent: function(args) { + // NOTE: this code is deliberately as few expressions (and no function calls) + // as possible so that a debugger can skip over this noise with the minimum number + // of steps. Basically, just hit Step Into until you are where you really wanted + // to be. + var method, + superMethod = (method = this.callParent.caller) && (method.$previous || + ((method = method.$owner ? method : method.caller) && + method.$owner.superclass[method.$name])); + + if (!superMethod) { + method = this.callParent.caller; + var parentClass, methodName; + + if (!method.$owner) { + if (!method.caller) { + throw new Error("Attempting to call a protected method from the public scope, which is not allowed"); + } + + method = method.caller; + } + + parentClass = method.$owner.superclass; + methodName = method.$name; + + if (!(methodName in parentClass)) { + throw new Error("this.callParent() was called but there's no such method (" + methodName + + ") found in the parent class (" + (Ext.getClassName(parentClass) || 'Object') + ")"); + } + } + + return superMethod.apply(this, args || noArgs); + }, + + /** + * This method is used by an override to call the superclass method but bypass any + * overridden method. This is often done to "patch" a method that contains a bug + * but for whatever reason cannot be fixed directly. + * + * Consider: + * + * Ext.define('Ext.some.Class', { + * method: function () { + * console.log('Good'); + * } + * }); + * + * Ext.define('Ext.some.DerivedClass', { + * method: function () { + * console.log('Bad'); + * + * // ... logic but with a bug ... + * + * this.callParent(); + * } + * }); + * + * To patch the bug in `DerivedClass.method`, the typical solution is to create an + * override: + * + * Ext.define('App.paches.DerivedClass', { + * override: 'Ext.some.DerivedClass', + * + * method: function () { + * console.log('Fixed'); + * + * // ... logic but with bug fixed ... + * + * this.callSuper(); + * } + * }); + * + * The patch method cannot use `callParent` to call the superclass `method` since + * that would call the overridden method containing the bug. In other words, the + * above patch would only produce "Fixed" then "Good" in the console log, whereas, + * using `callParent` would produce "Fixed" then "Bad" then "Good". + * + * @protected + * @param {Array/Arguments} args The arguments, either an array or the `arguments` object + * from the current method, for example: `this.callSuper(arguments)` + * @return {Object} Returns the result of calling the superclass method + */ + callSuper: function(args) { + // NOTE: this code is deliberately as few expressions (and no function calls) + // as possible so that a debugger can skip over this noise with the minimum number + // of steps. Basically, just hit Step Into until you are where you really wanted + // to be. + var method, + superMethod = (method = this.callSuper.caller) && + ((method = method.$owner ? method : method.caller) && + method.$owner.superclass[method.$name]); + + if (!superMethod) { + method = this.callSuper.caller; + var parentClass, methodName; + + if (!method.$owner) { + if (!method.caller) { + throw new Error("Attempting to call a protected method from the public scope, which is not allowed"); + } + + method = method.caller; + } + + parentClass = method.$owner.superclass; + methodName = method.$name; + + if (!(methodName in parentClass)) { + throw new Error("this.callSuper() was called but there's no such method (" + methodName + + ") found in the parent class (" + (Ext.getClassName(parentClass) || 'Object') + ")"); + } + } + + return superMethod.apply(this, args || noArgs); + }, + + /** + * @property {Ext.Class} self + * + * Get the reference to the current class from which this object was instantiated. Unlike {@link Ext.Base#statics}, + * `this.self` is scope-dependent and it's meant to be used for dynamic inheritance. See {@link Ext.Base#statics} + * for a detailed comparison + * + * Ext.define('My.Cat', { + * statics: { + * speciesName: 'Cat' // My.Cat.speciesName = 'Cat' + * }, + * + * constructor: function() { + * alert(this.self.speciesName); // dependent on 'this' + * }, + * + * clone: function() { + * return new this.self(); + * } + * }); + * + * + * Ext.define('My.SnowLeopard', { + * extend: 'My.Cat', + * statics: { + * speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard' + * } + * }); + * + * var cat = new My.Cat(); // alerts 'Cat' + * var snowLeopard = new My.SnowLeopard(); // alerts 'Snow Leopard' + * + * var clone = snowLeopard.clone(); + * alert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard' + * + * @protected + */ + self: Base, + + // Default constructor, simply returns `this` + constructor: function() { + return this; + }, + + /** + * Initialize configuration for this class. a typical example: + * + * Ext.define('My.awesome.Class', { + * // The default config + * config: { + * name: 'Awesome', + * isAwesome: true + * }, + * + * constructor: function(config) { + * this.initConfig(config); + * } + * }); + * + * var awesome = new My.awesome.Class({ + * name: 'Super Awesome' + * }); + * + * alert(awesome.getName()); // 'Super Awesome' + * + * @protected + * @param {Object} config + * @return {Ext.Base} this + */ + initConfig: function(config) { + var instanceConfig = config, + configNameCache = Ext.Class.configNameCache, + defaultConfig = new this.configClass(), + defaultConfigList = this.initConfigList, + hasConfig = this.configMap, + nameMap, i, ln, name, initializedName; + + this.initConfig = Ext.emptyFn; + + this.initialConfig = instanceConfig || {}; + + this.config = config = (instanceConfig) ? Ext.merge(defaultConfig, config) : defaultConfig; + + if (instanceConfig) { + defaultConfigList = defaultConfigList.slice(); + + for (name in instanceConfig) { + if (hasConfig[name]) { + if (instanceConfig[name] !== null) { + defaultConfigList.push(name); + this[configNameCache[name].initialized] = false; + } + } + } + } + + for (i = 0,ln = defaultConfigList.length; i < ln; i++) { + name = defaultConfigList[i]; + nameMap = configNameCache[name]; + initializedName = nameMap.initialized; + + if (!this[initializedName]) { + this[initializedName] = true; + this[nameMap.set].call(this, config[name]); + } + } + + return this; + }, + + /** + * @private + * @param config + */ + hasConfig: function(name) { + return Boolean(this.configMap[name]); + }, + + /** + * @private + */ + setConfig: function(config, applyIfNotSet) { + if (!config) { + return this; + } + + var configNameCache = Ext.Class.configNameCache, + currentConfig = this.config, + hasConfig = this.configMap, + initialConfig = this.initialConfig, + name, value; + + applyIfNotSet = Boolean(applyIfNotSet); + + for (name in config) { + if (applyIfNotSet && initialConfig.hasOwnProperty(name)) { + continue; + } + + value = config[name]; + currentConfig[name] = value; + + if (hasConfig[name]) { + this[configNameCache[name].set](value); + } + } + + return this; + }, + + /** + * @private + * @param name + */ + getConfig: function(name) { + var configNameCache = Ext.Class.configNameCache; + + return this[configNameCache[name].get](); + }, + + /** + * Returns the initial configuration passed to constructor when instantiating + * this class. + * @param {String} [name] Name of the config option to return. + * @return {Object/Mixed} The full config object or a single config value + * when `name` parameter specified. + */ + getInitialConfig: function(name) { + var config = this.config; + + if (!name) { + return config; + } + else { + return config[name]; + } + }, + + /** + * @private + * @param names + * @param callback + * @param scope + */ + onConfigUpdate: function(names, callback, scope) { + var self = this.self, + className = self.$className, + i, ln, name, + updaterName, updater, newUpdater; + + names = Ext.Array.from(names); + + scope = scope || this; + + for (i = 0,ln = names.length; i < ln; i++) { + name = names[i]; + updaterName = 'update' + Ext.String.capitalize(name); + updater = this[updaterName] || Ext.emptyFn; + newUpdater = function() { + updater.apply(this, arguments); + scope[callback].apply(scope, arguments); + }; + newUpdater.$name = updaterName; + newUpdater.$owner = self; + newUpdater.displayName = className + '#' + updaterName; + + this[updaterName] = newUpdater; + } + }, + + /** + * @private + */ + destroy: function() { + this.destroy = Ext.emptyFn; + } + }); + + /** + * Call the original method that was previously overridden with {@link Ext.Base#override} + * + * Ext.define('My.Cat', { + * constructor: function() { + * alert("I'm a cat!"); + * } + * }); + * + * My.Cat.override({ + * constructor: function() { + * alert("I'm going to be a cat!"); + * + * this.callOverridden(); + * + * alert("Meeeeoooowwww"); + * } + * }); + * + * var kitty = new My.Cat(); // alerts "I'm going to be a cat!" + * // alerts "I'm a cat!" + * // alerts "Meeeeoooowwww" + * + * @param {Array/Arguments} args The arguments, either an array or the `arguments` object + * from the current method, for example: `this.callOverridden(arguments)` + * @return {Object} Returns the result of calling the overridden method + * @protected + * @deprecated as of 4.1. Use {@link #callParent} instead. + */ + Base.prototype.callOverridden = Base.prototype.callParent; + + Ext.Base = Base; + +}(Ext.Function.flexSetter)); + +//@tag foundation,core +//@require Base.js + +/** + * @author Jacky Nguyen + * @docauthor Jacky Nguyen + * @class Ext.Class + * + * Handles class creation throughout the framework. This is a low level factory that is used by Ext.ClassManager and generally + * should not be used directly. If you choose to use Ext.Class you will lose out on the namespace, aliasing and depency loading + * features made available by Ext.ClassManager. The only time you would use Ext.Class directly is to create an anonymous class. + * + * If you wish to create a class you should use {@link Ext#define Ext.define} which aliases + * {@link Ext.ClassManager#create Ext.ClassManager.create} to enable namespacing and dynamic dependency resolution. + * + * Ext.Class is the factory and **not** the superclass of everything. For the base class that **all** Ext classes inherit + * from, see {@link Ext.Base}. + */ +(function() { + var ExtClass, + Base = Ext.Base, + baseStaticMembers = [], + baseStaticMember, baseStaticMemberLength; + + for (baseStaticMember in Base) { + if (Base.hasOwnProperty(baseStaticMember)) { + baseStaticMembers.push(baseStaticMember); + } + } + + baseStaticMemberLength = baseStaticMembers.length; + + // Creates a constructor that has nothing extra in its scope chain. + function makeCtor (className) { + function constructor () { + // Opera has some problems returning from a constructor when Dragonfly isn't running. The || null seems to + // be sufficient to stop it misbehaving. Known to be required against 10.53, 11.51 and 11.61. + return this.constructor.apply(this, arguments) || null; + } + if (className) { + constructor.displayName = className; + } + return constructor; + } + + /** + * @method constructor + * Create a new anonymous class. + * + * @param {Object} data An object represent the properties of this class + * @param {Function} onCreated Optional, the callback function to be executed when this class is fully created. + * Note that the creation process can be asynchronous depending on the pre-processors used. + * + * @return {Ext.Base} The newly created class + */ + Ext.Class = ExtClass = function(Class, data, onCreated) { + if (typeof Class != 'function') { + onCreated = data; + data = Class; + Class = null; + } + + if (!data) { + data = {}; + } + + Class = ExtClass.create(Class, data); + + ExtClass.process(Class, data, onCreated); + + return Class; + }; + + Ext.apply(ExtClass, { + /** + * @private + */ + onBeforeCreated: function(Class, data, hooks) { + Ext.classSystemMonitor && Ext.classSystemMonitor(Class, '>> Ext.Class#onBeforeCreated', arguments); + + Class.addMembers(data); + + hooks.onCreated.call(Class, Class); + + Ext.classSystemMonitor && Ext.classSystemMonitor(Class, '<< Ext.Class#onBeforeCreated', arguments); + }, + + /** + * @private + */ + create: function(Class, data) { + var name, i; + + if (!Class) { + Class = makeCtor( + data.$className + ); + } + + for (i = 0; i < baseStaticMemberLength; i++) { + name = baseStaticMembers[i]; + Class[name] = Base[name]; + } + + return Class; + }, + + /** + * @private + */ + process: function(Class, data, onCreated) { + var preprocessorStack = data.preprocessors || ExtClass.defaultPreprocessors, + registeredPreprocessors = this.preprocessors, + hooks = { + onBeforeCreated: this.onBeforeCreated + }, + preprocessors = [], + preprocessor, preprocessorsProperties, + i, ln, j, subLn, preprocessorProperty; + + delete data.preprocessors; + + for (i = 0,ln = preprocessorStack.length; i < ln; i++) { + preprocessor = preprocessorStack[i]; + + if (typeof preprocessor == 'string') { + preprocessor = registeredPreprocessors[preprocessor]; + preprocessorsProperties = preprocessor.properties; + + if (preprocessorsProperties === true) { + preprocessors.push(preprocessor.fn); + } + else if (preprocessorsProperties) { + for (j = 0,subLn = preprocessorsProperties.length; j < subLn; j++) { + preprocessorProperty = preprocessorsProperties[j]; + + if (data.hasOwnProperty(preprocessorProperty)) { + preprocessors.push(preprocessor.fn); + break; + } + } + } + } + else { + preprocessors.push(preprocessor); + } + } + + hooks.onCreated = onCreated ? onCreated : Ext.emptyFn; + hooks.preprocessors = preprocessors; + + this.doProcess(Class, data, hooks); + }, + + doProcess: function(Class, data, hooks) { + var me = this, + preprocessors = hooks.preprocessors, + preprocessor = preprocessors.shift(), + doProcess = me.doProcess; + + for ( ; preprocessor ; preprocessor = preprocessors.shift()) { + // Returning false signifies an asynchronous preprocessor - it will call doProcess when we can continue + if (preprocessor.call(me, Class, data, hooks, doProcess) === false) { + return; + } + } + hooks.onBeforeCreated.apply(me, arguments); + }, + + /** @private */ + preprocessors: {}, + + /** + * Register a new pre-processor to be used during the class creation process + * + * @param {String} name The pre-processor's name + * @param {Function} fn The callback function to be executed. Typical format: + * + * function(cls, data, fn) { + * // Your code here + * + * // Execute this when the processing is finished. + * // Asynchronous processing is perfectly ok + * if (fn) { + * fn.call(this, cls, data); + * } + * }); + * + * @param {Function} fn.cls The created class + * @param {Object} fn.data The set of properties passed in {@link Ext.Class} constructor + * @param {Function} fn.fn The callback function that **must** to be executed when this + * pre-processor finishes, regardless of whether the processing is synchronous or aynchronous. + * @return {Ext.Class} this + * @private + * @static + */ + registerPreprocessor: function(name, fn, properties, position, relativeTo) { + if (!position) { + position = 'last'; + } + + if (!properties) { + properties = [name]; + } + + this.preprocessors[name] = { + name: name, + properties: properties || false, + fn: fn + }; + + this.setDefaultPreprocessorPosition(name, position, relativeTo); + + return this; + }, + + /** + * Retrieve a pre-processor callback function by its name, which has been registered before + * + * @param {String} name + * @return {Function} preprocessor + * @private + * @static + */ + getPreprocessor: function(name) { + return this.preprocessors[name]; + }, + + /** + * @private + */ + getPreprocessors: function() { + return this.preprocessors; + }, + + /** + * @private + */ + defaultPreprocessors: [], + + /** + * Retrieve the array stack of default pre-processors + * @return {Function[]} defaultPreprocessors + * @private + * @static + */ + getDefaultPreprocessors: function() { + return this.defaultPreprocessors; + }, + + /** + * Set the default array stack of default pre-processors + * + * @private + * @param {Array} preprocessors + * @return {Ext.Class} this + * @static + */ + setDefaultPreprocessors: function(preprocessors) { + this.defaultPreprocessors = Ext.Array.from(preprocessors); + + return this; + }, + + /** + * Insert this pre-processor at a specific position in the stack, optionally relative to + * any existing pre-processor. For example: + * + * Ext.Class.registerPreprocessor('debug', function(cls, data, fn) { + * // Your code here + * + * if (fn) { + * fn.call(this, cls, data); + * } + * }).setDefaultPreprocessorPosition('debug', 'last'); + * + * @private + * @param {String} name The pre-processor name. Note that it needs to be registered with + * {@link Ext.Class#registerPreprocessor registerPreprocessor} before this + * @param {String} offset The insertion position. Four possible values are: + * 'first', 'last', or: 'before', 'after' (relative to the name provided in the third argument) + * @param {String} relativeName + * @return {Ext.Class} this + * @static + */ + setDefaultPreprocessorPosition: function(name, offset, relativeName) { + var defaultPreprocessors = this.defaultPreprocessors, + index; + + if (typeof offset == 'string') { + if (offset === 'first') { + defaultPreprocessors.unshift(name); + + return this; + } + else if (offset === 'last') { + defaultPreprocessors.push(name); + + return this; + } + + offset = (offset === 'after') ? 1 : -1; + } + + index = Ext.Array.indexOf(defaultPreprocessors, relativeName); + + if (index !== -1) { + Ext.Array.splice(defaultPreprocessors, Math.max(0, index + offset), 0, name); + } + + return this; + }, + + configNameCache: {}, + + getConfigNameMap: function(name) { + var cache = this.configNameCache, + map = cache[name], + capitalizedName; + + if (!map) { + capitalizedName = name.charAt(0).toUpperCase() + name.substr(1); + + map = cache[name] = { + internal: name, + initialized: '_is' + capitalizedName + 'Initialized', + apply: 'apply' + capitalizedName, + update: 'update' + capitalizedName, + 'set': 'set' + capitalizedName, + 'get': 'get' + capitalizedName, + doSet : 'doSet' + capitalizedName, + changeEvent: name.toLowerCase() + 'change' + }; + } + + return map; + } + }); + + /** + * @cfg {String} extend + * The parent class that this class extends. For example: + * + * Ext.define('Person', { + * say: function(text) { alert(text); } + * }); + * + * Ext.define('Developer', { + * extend: 'Person', + * say: function(text) { this.callParent(["print "+text]); } + * }); + */ + ExtClass.registerPreprocessor('extend', function(Class, data, hooks) { + Ext.classSystemMonitor && Ext.classSystemMonitor(Class, 'Ext.Class#extendPreProcessor', arguments); + + var Base = Ext.Base, + basePrototype = Base.prototype, + extend = data.extend, + Parent, parentPrototype, i; + + delete data.extend; + + if (extend && extend !== Object) { + Parent = extend; + } + else { + Parent = Base; + } + + parentPrototype = Parent.prototype; + + if (!Parent.$isClass) { + for (i in basePrototype) { + if (!parentPrototype[i]) { + parentPrototype[i] = basePrototype[i]; + } + } + } + + Class.extend(Parent); + + Class.triggerExtended.apply(Class, arguments); + + if (data.onClassExtended) { + Class.onExtended(data.onClassExtended, Class); + delete data.onClassExtended; + } + + }, true); + + /** + * @cfg {Object} statics + * List of static methods for this class. For example: + * + * Ext.define('Computer', { + * statics: { + * factory: function(brand) { + * // 'this' in static methods refer to the class itself + * return new this(brand); + * } + * }, + * + * constructor: function() { ... } + * }); + * + * var dellComputer = Computer.factory('Dell'); + */ + ExtClass.registerPreprocessor('statics', function(Class, data) { + Ext.classSystemMonitor && Ext.classSystemMonitor(Class, 'Ext.Class#staticsPreprocessor', arguments); + + Class.addStatics(data.statics); + + delete data.statics; + }); + + /** + * @cfg {Object} inheritableStatics + * List of inheritable static methods for this class. + * Otherwise just like {@link #statics} but subclasses inherit these methods. + */ + ExtClass.registerPreprocessor('inheritableStatics', function(Class, data) { + Ext.classSystemMonitor && Ext.classSystemMonitor(Class, 'Ext.Class#inheritableStaticsPreprocessor', arguments); + + Class.addInheritableStatics(data.inheritableStatics); + + delete data.inheritableStatics; + }); + + /** + * @cfg {Object} config + * List of configuration options with their default values, for which automatically + * accessor methods are generated. For example: + * + * Ext.define('SmartPhone', { + * config: { + * hasTouchScreen: false, + * operatingSystem: 'Other', + * price: 500 + * }, + * constructor: function(cfg) { + * this.initConfig(cfg); + * } + * }); + * + * var iPhone = new SmartPhone({ + * hasTouchScreen: true, + * operatingSystem: 'iOS' + * }); + * + * iPhone.getPrice(); // 500; + * iPhone.getOperatingSystem(); // 'iOS' + * iPhone.getHasTouchScreen(); // true; + * + * NOTE for when configs are reference types, the getter and setter methods do not make copies. + * + * For example, when a config value is set, the reference is stored on the instance. All instances that set + * the same reference type will share it. + * + * In the case of the getter, the value with either come from the prototype if the setter was never called or from + * the instance as the last value passed to the setter. + * + * For some config properties, the value passed to the setter is transformed prior to being stored on the instance. + */ + ExtClass.registerPreprocessor('config', function(Class, data) { + Ext.classSystemMonitor && Ext.classSystemMonitor(Class, 'Ext.Class#configPreProcessor', arguments); + + var config = data.config, + prototype = Class.prototype; + + delete data.config; + + Ext.Object.each(config, function(name, value) { + var nameMap = ExtClass.getConfigNameMap(name), + internalName = nameMap.internal, + initializedName = nameMap.initialized, + applyName = nameMap.apply, + updateName = nameMap.update, + setName = nameMap.set, + getName = nameMap.get, + hasOwnSetter = (setName in prototype) || data.hasOwnProperty(setName), + hasOwnApplier = (applyName in prototype) || data.hasOwnProperty(applyName), + hasOwnUpdater = (updateName in prototype) || data.hasOwnProperty(updateName), + optimizedGetter, customGetter; + + if (value === null || (!hasOwnSetter && !hasOwnApplier && !hasOwnUpdater)) { + prototype[internalName] = value; + prototype[initializedName] = true; + } + else { + prototype[initializedName] = false; + } + + if (!hasOwnSetter) { + data[setName] = function(value) { + var oldValue = this[internalName], + applier = this[applyName], + updater = this[updateName]; + + if (!this[initializedName]) { + this[initializedName] = true; + } + + if (applier) { + value = applier.call(this, value, oldValue); + } + + if (typeof value != 'undefined') { + this[internalName] = value; + + if (updater && value !== oldValue) { + updater.call(this, value, oldValue); + } + } + + return this; + }; + } + + if (!(getName in prototype) || data.hasOwnProperty(getName)) { + customGetter = data[getName] || false; + + if (customGetter) { + optimizedGetter = function() { + return customGetter.apply(this, arguments); + }; + } + else { + optimizedGetter = function() { + return this[internalName]; + }; + } + + data[getName] = function() { + var currentGetter; + + if (!this[initializedName]) { + this[initializedName] = true; + this[setName](this.config[name]); + } + + currentGetter = this[getName]; + + if ('$previous' in currentGetter) { + currentGetter.$previous = optimizedGetter; + } + else { + this[getName] = optimizedGetter; + } + + return optimizedGetter.apply(this, arguments); + }; + } + }); + + Class.addConfig(config, true); + }); + + /** + * @cfg {String[]/Object} mixins + * List of classes to mix into this class. For example: + * + * Ext.define('CanSing', { + * sing: function() { + * alert("I'm on the highway to hell...") + * } + * }); + * + * Ext.define('Musician', { + * mixins: ['CanSing'] + * }) + * + * In this case the Musician class will get a `sing` method from CanSing mixin. + * + * But what if the Musician already has a `sing` method? Or you want to mix + * in two classes, both of which define `sing`? In such a cases it's good + * to define mixins as an object, where you assign a name to each mixin: + * + * Ext.define('Musician', { + * mixins: { + * canSing: 'CanSing' + * }, + * + * sing: function() { + * // delegate singing operation to mixin + * this.mixins.canSing.sing.call(this); + * } + * }) + * + * In this case the `sing` method of Musician will overwrite the + * mixed in `sing` method. But you can access the original mixed in method + * through special `mixins` property. + */ + ExtClass.registerPreprocessor('mixins', function(Class, data, hooks) { + Ext.classSystemMonitor && Ext.classSystemMonitor(Class, 'Ext.Class#mixinsPreprocessor', arguments); + + var mixins = data.mixins, + name, mixin, i, ln; + + delete data.mixins; + + Ext.Function.interceptBefore(hooks, 'onCreated', function() { + Ext.classSystemMonitor && Ext.classSystemMonitor(Class, 'Ext.Class#mixinsPreprocessor#beforeCreated', arguments); + + if (mixins instanceof Array) { + for (i = 0,ln = mixins.length; i < ln; i++) { + mixin = mixins[i]; + name = mixin.prototype.mixinId || mixin.$className; + + Class.mixin(name, mixin); + } + } + else { + for (var mixinName in mixins) { + if (mixins.hasOwnProperty(mixinName)) { + Class.mixin(mixinName, mixins[mixinName]); + } + } + } + }); + }); + + // Backwards compatible + Ext.extend = function(Class, Parent, members) { + Ext.classSystemMonitor && Ext.classSystemMonitor(Class, 'Ext.Class#extend-backwards-compatible', arguments); + + if (arguments.length === 2 && Ext.isObject(Parent)) { + members = Parent; + Parent = Class; + Class = null; + } + + var cls; + + if (!Parent) { + throw new Error("[Ext.extend] Attempting to extend from a class which has not been loaded on the page."); + } + + members.extend = Parent; + members.preprocessors = [ + 'extend' + ,'statics' + ,'inheritableStatics' + ,'mixins' + ,'config' + ]; + + if (Class) { + cls = new ExtClass(Class, members); + // The 'constructor' is given as 'Class' but also needs to be on prototype + cls.prototype.constructor = Class; + } else { + cls = new ExtClass(members); + } + + cls.prototype.override = function(o) { + for (var m in o) { + if (o.hasOwnProperty(m)) { + this[m] = o[m]; + } + } + }; + + return cls; + }; +}()); + +//@tag foundation,core +//@require Class.js + +/** + * @author Jacky Nguyen + * @docauthor Jacky Nguyen + * @class Ext.ClassManager + * + * Ext.ClassManager manages all classes and handles mapping from string class name to + * actual class objects throughout the whole framework. It is not generally accessed directly, rather through + * these convenient shorthands: + * + * - {@link Ext#define Ext.define} + * - {@link Ext#create Ext.create} + * - {@link Ext#widget Ext.widget} + * - {@link Ext#getClass Ext.getClass} + * - {@link Ext#getClassName Ext.getClassName} + * + * # Basic syntax: + * + * Ext.define(className, properties); + * + * in which `properties` is an object represent a collection of properties that apply to the class. See + * {@link Ext.ClassManager#create} for more detailed instructions. + * + * Ext.define('Person', { + * name: 'Unknown', + * + * constructor: function(name) { + * if (name) { + * this.name = name; + * } + * }, + * + * eat: function(foodType) { + * alert("I'm eating: " + foodType); + * + * return this; + * } + * }); + * + * var aaron = new Person("Aaron"); + * aaron.eat("Sandwich"); // alert("I'm eating: Sandwich"); + * + * Ext.Class has a powerful set of extensible {@link Ext.Class#registerPreprocessor pre-processors} which takes care of + * everything related to class creation, including but not limited to inheritance, mixins, configuration, statics, etc. + * + * # Inheritance: + * + * Ext.define('Developer', { + * extend: 'Person', + * + * constructor: function(name, isGeek) { + * this.isGeek = isGeek; + * + * // Apply a method from the parent class' prototype + * this.callParent([name]); + * }, + * + * code: function(language) { + * alert("I'm coding in: " + language); + * + * this.eat("Bugs"); + * + * return this; + * } + * }); + * + * var jacky = new Developer("Jacky", true); + * jacky.code("JavaScript"); // alert("I'm coding in: JavaScript"); + * // alert("I'm eating: Bugs"); + * + * See {@link Ext.Base#callParent} for more details on calling superclass' methods + * + * # Mixins: + * + * Ext.define('CanPlayGuitar', { + * playGuitar: function() { + * alert("F#...G...D...A"); + * } + * }); + * + * Ext.define('CanComposeSongs', { + * composeSongs: function() { ... } + * }); + * + * Ext.define('CanSing', { + * sing: function() { + * alert("I'm on the highway to hell...") + * } + * }); + * + * Ext.define('Musician', { + * extend: 'Person', + * + * mixins: { + * canPlayGuitar: 'CanPlayGuitar', + * canComposeSongs: 'CanComposeSongs', + * canSing: 'CanSing' + * } + * }) + * + * Ext.define('CoolPerson', { + * extend: 'Person', + * + * mixins: { + * canPlayGuitar: 'CanPlayGuitar', + * canSing: 'CanSing' + * }, + * + * sing: function() { + * alert("Ahem...."); + * + * this.mixins.canSing.sing.call(this); + * + * alert("[Playing guitar at the same time...]"); + * + * this.playGuitar(); + * } + * }); + * + * var me = new CoolPerson("Jacky"); + * + * me.sing(); // alert("Ahem..."); + * // alert("I'm on the highway to hell..."); + * // alert("[Playing guitar at the same time...]"); + * // alert("F#...G...D...A"); + * + * # Config: + * + * Ext.define('SmartPhone', { + * config: { + * hasTouchScreen: false, + * operatingSystem: 'Other', + * price: 500 + * }, + * + * isExpensive: false, + * + * constructor: function(config) { + * this.initConfig(config); + * }, + * + * applyPrice: function(price) { + * this.isExpensive = (price > 500); + * + * return price; + * }, + * + * applyOperatingSystem: function(operatingSystem) { + * if (!(/^(iOS|Android|BlackBerry)$/i).test(operatingSystem)) { + * return 'Other'; + * } + * + * return operatingSystem; + * } + * }); + * + * var iPhone = new SmartPhone({ + * hasTouchScreen: true, + * operatingSystem: 'iOS' + * }); + * + * iPhone.getPrice(); // 500; + * iPhone.getOperatingSystem(); // 'iOS' + * iPhone.getHasTouchScreen(); // true; + * iPhone.hasTouchScreen(); // true + * + * iPhone.isExpensive; // false; + * iPhone.setPrice(600); + * iPhone.getPrice(); // 600 + * iPhone.isExpensive; // true; + * + * iPhone.setOperatingSystem('AlienOS'); + * iPhone.getOperatingSystem(); // 'Other' + * + * # Statics: + * + * Ext.define('Computer', { + * statics: { + * factory: function(brand) { + * // 'this' in static methods refer to the class itself + * return new this(brand); + * } + * }, + * + * constructor: function() { ... } + * }); + * + * var dellComputer = Computer.factory('Dell'); + * + * Also see {@link Ext.Base#statics} and {@link Ext.Base#self} for more details on accessing + * static properties within class methods + * + * @singleton + */ +(function(Class, alias, arraySlice, arrayFrom, global) { + + // Creates a constructor that has nothing extra in its scope chain. + function makeCtor () { + function constructor () { + // Opera has some problems returning from a constructor when Dragonfly isn't running. The || null seems to + // be sufficient to stop it misbehaving. Known to be required against 10.53, 11.51 and 11.61. + return this.constructor.apply(this, arguments) || null; + } + return constructor; + } + + var Manager = Ext.ClassManager = { + + /** + * @property {Object} classes + * All classes which were defined through the ClassManager. Keys are the + * name of the classes and the values are references to the classes. + * @private + */ + classes: {}, + + /** + * @private + */ + existCache: {}, + + /** + * @private + */ + namespaceRewrites: [{ + from: 'Ext.', + to: Ext + }], + + /** + * @private + */ + maps: { + alternateToName: {}, + aliasToName: {}, + nameToAliases: {}, + nameToAlternates: {} + }, + + /** @private */ + enableNamespaceParseCache: true, + + /** @private */ + namespaceParseCache: {}, + + /** @private */ + instantiators: [], + + /** + * Checks if a class has already been created. + * + * @param {String} className + * @return {Boolean} exist + */ + isCreated: function(className) { + var existCache = this.existCache, + i, ln, part, root, parts; + + if (typeof className != 'string' || className.length < 1) { + throw new Error("[Ext.ClassManager] Invalid classname, must be a string and must not be empty"); + } + + if (this.classes[className] || existCache[className]) { + return true; + } + + root = global; + parts = this.parseNamespace(className); + + for (i = 0, ln = parts.length; i < ln; i++) { + part = parts[i]; + + if (typeof part != 'string') { + root = part; + } else { + if (!root || !root[part]) { + return false; + } + + root = root[part]; + } + } + + existCache[className] = true; + + this.triggerCreated(className); + + return true; + }, + + /** + * @private + */ + createdListeners: [], + + /** + * @private + */ + nameCreatedListeners: {}, + + /** + * @private + */ + triggerCreated: function(className) { + var listeners = this.createdListeners, + nameListeners = this.nameCreatedListeners, + alternateNames = this.maps.nameToAlternates[className], + names = [className], + i, ln, j, subLn, listener, name; + + for (i = 0,ln = listeners.length; i < ln; i++) { + listener = listeners[i]; + listener.fn.call(listener.scope, className); + } + + if (alternateNames) { + names.push.apply(names, alternateNames); + } + + for (i = 0,ln = names.length; i < ln; i++) { + name = names[i]; + listeners = nameListeners[name]; + + if (listeners) { + for (j = 0,subLn = listeners.length; j < subLn; j++) { + listener = listeners[j]; + listener.fn.call(listener.scope, name); + } + delete nameListeners[name]; + } + } + }, + + /** + * @private + */ + onCreated: function(fn, scope, className) { + Ext.classSystemMonitor && Ext.classSystemMonitor(className, 'Ext.ClassManager#onCreated', arguments); + + var listeners = this.createdListeners, + nameListeners = this.nameCreatedListeners, + listener = { + fn: fn, + scope: scope + }; + + if (className) { + if (this.isCreated(className)) { + fn.call(scope, className); + return; + } + + if (!nameListeners[className]) { + nameListeners[className] = []; + } + + nameListeners[className].push(listener); + } + else { + listeners.push(listener); + } + }, + + /** + * Supports namespace rewriting + * @private + */ + parseNamespace: function(namespace) { + if (typeof namespace != 'string') { + throw new Error("[Ext.ClassManager] Invalid namespace, must be a string"); + } + + var cache = this.namespaceParseCache, + parts, + rewrites, + root, + name, + rewrite, from, to, i, ln; + + if (this.enableNamespaceParseCache) { + if (cache.hasOwnProperty(namespace)) { + return cache[namespace]; + } + } + + parts = []; + rewrites = this.namespaceRewrites; + root = global; + name = namespace; + + for (i = 0, ln = rewrites.length; i < ln; i++) { + rewrite = rewrites[i]; + from = rewrite.from; + to = rewrite.to; + + if (name === from || name.substring(0, from.length) === from) { + name = name.substring(from.length); + + if (typeof to != 'string') { + root = to; + } else { + parts = parts.concat(to.split('.')); + } + + break; + } + } + + parts.push(root); + + parts = parts.concat(name.split('.')); + + if (this.enableNamespaceParseCache) { + cache[namespace] = parts; + } + + return parts; + }, + + /** + * Creates a namespace and assign the `value` to the created object + * + * Ext.ClassManager.setNamespace('MyCompany.pkg.Example', someObject); + * + * alert(MyCompany.pkg.Example === someObject); // alerts true + * + * @param {String} name + * @param {Object} value + */ + setNamespace: function(name, value) { + var root = global, + parts = this.parseNamespace(name), + ln = parts.length - 1, + leaf = parts[ln], + i, part; + + for (i = 0; i < ln; i++) { + part = parts[i]; + + if (typeof part != 'string') { + root = part; + } else { + if (!root[part]) { + root[part] = {}; + } + + root = root[part]; + } + } + + root[leaf] = value; + + return root[leaf]; + }, + + /** + * The new Ext.ns, supports namespace rewriting + * @private + */ + createNamespaces: function() { + var root = global, + parts, part, i, j, ln, subLn; + + for (i = 0, ln = arguments.length; i < ln; i++) { + parts = this.parseNamespace(arguments[i]); + + for (j = 0, subLn = parts.length; j < subLn; j++) { + part = parts[j]; + + if (typeof part != 'string') { + root = part; + } else { + if (!root[part]) { + root[part] = {}; + } + + root = root[part]; + } + } + } + + return root; + }, + + /** + * Sets a name reference to a class. + * + * @param {String} name + * @param {Object} value + * @return {Ext.ClassManager} this + */ + set: function(name, value) { + var me = this, + maps = me.maps, + nameToAlternates = maps.nameToAlternates, + targetName = me.getName(value), + alternates; + + me.classes[name] = me.setNamespace(name, value); + + if (targetName && targetName !== name) { + maps.alternateToName[name] = targetName; + alternates = nameToAlternates[targetName] || (nameToAlternates[targetName] = []); + alternates.push(name); + } + + return this; + }, + + /** + * Retrieve a class by its name. + * + * @param {String} name + * @return {Ext.Class} class + */ + get: function(name) { + var classes = this.classes, + root, + parts, + part, i, ln; + + if (classes[name]) { + return classes[name]; + } + + root = global; + parts = this.parseNamespace(name); + + for (i = 0, ln = parts.length; i < ln; i++) { + part = parts[i]; + + if (typeof part != 'string') { + root = part; + } else { + if (!root || !root[part]) { + return null; + } + + root = root[part]; + } + } + + return root; + }, + + /** + * Register the alias for a class. + * + * @param {Ext.Class/String} cls a reference to a class or a className + * @param {String} alias Alias to use when referring to this class + */ + setAlias: function(cls, alias) { + var aliasToNameMap = this.maps.aliasToName, + nameToAliasesMap = this.maps.nameToAliases, + className; + + if (typeof cls == 'string') { + className = cls; + } else { + className = this.getName(cls); + } + + if (alias && aliasToNameMap[alias] !== className) { + if (aliasToNameMap[alias] && Ext.isDefined(global.console)) { + global.console.log("[Ext.ClassManager] Overriding existing alias: '" + alias + "' " + + "of: '" + aliasToNameMap[alias] + "' with: '" + className + "'. Be sure it's intentional."); + } + + aliasToNameMap[alias] = className; + } + + if (!nameToAliasesMap[className]) { + nameToAliasesMap[className] = []; + } + + if (alias) { + Ext.Array.include(nameToAliasesMap[className], alias); + } + + return this; + }, + + /** + * Adds a batch of class name to alias mappings + * @param {Object} aliases The set of mappings of the form + * className : [values...] + */ + addNameAliasMappings: function(aliases){ + var aliasToNameMap = this.maps.aliasToName, + nameToAliasesMap = this.maps.nameToAliases, + className, aliasList, alias, i; + + for (className in aliases) { + aliasList = nameToAliasesMap[className] || + (nameToAliasesMap[className] = []); + + for (i = 0; i < aliases[className].length; i++) { + alias = aliases[className][i]; + if (!aliasToNameMap[alias]) { + aliasToNameMap[alias] = className; + aliasList.push(alias); + } + } + + } + return this; + }, + + /** + * + * @param {Object} alternates The set of mappings of the form + * className : [values...] + */ + addNameAlternateMappings: function(alternates) { + var alternateToName = this.maps.alternateToName, + nameToAlternates = this.maps.nameToAlternates, + className, aliasList, alternate, i; + + for (className in alternates) { + aliasList = nameToAlternates[className] || + (nameToAlternates[className] = []); + + for (i = 0; i < alternates[className].length; i++) { + alternate = alternates[className]; + if (!alternateToName[alternate]) { + alternateToName[alternate] = className; + aliasList.push(alternate); + } + } + + } + return this; + }, + + /** + * Get a reference to the class by its alias. + * + * @param {String} alias + * @return {Ext.Class} class + */ + getByAlias: function(alias) { + return this.get(this.getNameByAlias(alias)); + }, + + /** + * Get the name of a class by its alias. + * + * @param {String} alias + * @return {String} className + */ + getNameByAlias: function(alias) { + return this.maps.aliasToName[alias] || ''; + }, + + /** + * Get the name of a class by its alternate name. + * + * @param {String} alternate + * @return {String} className + */ + getNameByAlternate: function(alternate) { + return this.maps.alternateToName[alternate] || ''; + }, + + /** + * Get the aliases of a class by the class name + * + * @param {String} name + * @return {Array} aliases + */ + getAliasesByName: function(name) { + return this.maps.nameToAliases[name] || []; + }, + + /** + * Get the name of the class by its reference or its instance; + * + * {@link Ext.ClassManager#getName} is usually invoked by the shorthand {@link Ext#getClassName}. + * + * Ext.getName(Ext.Action); // returns "Ext.Action" + * + * @param {Ext.Class/Object} object + * @return {String} className + */ + getName: function(object) { + return object && object.$className || ''; + }, + + /** + * Get the class of the provided object; returns null if it's not an instance + * of any class created with Ext.define. + * + * {@link Ext.ClassManager#getClass} is usually invoked by the shorthand {@link Ext#getClass}. + * + * var component = new Ext.Component(); + * + * Ext.getClass(component); // returns Ext.Component + * + * @param {Object} object + * @return {Ext.Class} class + */ + getClass: function(object) { + return object && object.self || null; + }, + + /** + * Defines a class. + * @deprecated 4.1.0 Use {@link Ext#define} instead, as that also supports creating overrides. + */ + create: function(className, data, createdFn) { + if (className != null && typeof className != 'string') { + throw new Error("[Ext.define] Invalid class name '" + className + "' specified, must be a non-empty string"); + } + + var ctor = makeCtor(); + if (typeof data == 'function') { + data = data(ctor); + } + + if (className) { + ctor.displayName = className; + } + + data.$className = className; + + return new Class(ctor, data, function() { + var postprocessorStack = data.postprocessors || Manager.defaultPostprocessors, + registeredPostprocessors = Manager.postprocessors, + postprocessors = [], + postprocessor, i, ln, j, subLn, postprocessorProperties, postprocessorProperty; + + delete data.postprocessors; + + for (i = 0,ln = postprocessorStack.length; i < ln; i++) { + postprocessor = postprocessorStack[i]; + + if (typeof postprocessor == 'string') { + postprocessor = registeredPostprocessors[postprocessor]; + postprocessorProperties = postprocessor.properties; + + if (postprocessorProperties === true) { + postprocessors.push(postprocessor.fn); + } + else if (postprocessorProperties) { + for (j = 0,subLn = postprocessorProperties.length; j < subLn; j++) { + postprocessorProperty = postprocessorProperties[j]; + + if (data.hasOwnProperty(postprocessorProperty)) { + postprocessors.push(postprocessor.fn); + break; + } + } + } + } + else { + postprocessors.push(postprocessor); + } + } + + data.postprocessors = postprocessors; + data.createdFn = createdFn; + Manager.processCreate(className, this, data); + }); + }, + + processCreate: function(className, cls, clsData){ + var me = this, + postprocessor = clsData.postprocessors.shift(), + createdFn = clsData.createdFn; + + if (!postprocessor) { + Ext.classSystemMonitor && Ext.classSystemMonitor(className, 'Ext.ClassManager#classCreated', arguments); + + if (className) { + me.set(className, cls); + } + + if (createdFn) { + createdFn.call(cls, cls); + } + + if (className) { + me.triggerCreated(className); + } + return; + } + + if (postprocessor.call(me, className, cls, clsData, me.processCreate) !== false) { + me.processCreate(className, cls, clsData); + } + }, + + createOverride: function (className, data, createdFn) { + var me = this, + overriddenClassName = data.override, + requires = data.requires, + uses = data.uses, + classReady = function () { + var cls, temp; + + if (requires) { + temp = requires; + requires = null; // do the real thing next time (which may be now) + + // Since the override is going to be used (its target class is now + // created), we need to fetch the required classes for the override + // and call us back once they are loaded: + Ext.Loader.require(temp, classReady); + } else { + // The target class and the required classes for this override are + // ready, so we can apply the override now: + cls = me.get(overriddenClassName); + + // We don't want to apply these: + delete data.override; + delete data.requires; + delete data.uses; + + Ext.override(cls, data); + + // This pushes the overridding file itself into Ext.Loader.history + // Hence if the target class never exists, the overriding file will + // never be included in the build. + me.triggerCreated(className); + + if (uses) { + Ext.Loader.addUsedClasses(uses); // get these classes too! + } + + if (createdFn) { + createdFn.call(cls); // last but not least! + } + } + }; + + me.existCache[className] = true; + + // Override the target class right after it's created + me.onCreated(classReady, me, overriddenClassName); + + return me; + }, + + /** + * Instantiate a class by its alias. + * + * {@link Ext.ClassManager#instantiateByAlias} is usually invoked by the shorthand {@link Ext#createByAlias}. + * + * If {@link Ext.Loader} is {@link Ext.Loader#setConfig enabled} and the class has not been defined yet, it will + * attempt to load the class via synchronous loading. + * + * var window = Ext.createByAlias('widget.window', { width: 600, height: 800, ... }); + * + * @param {String} alias + * @param {Object...} args Additional arguments after the alias will be passed to the + * class constructor. + * @return {Object} instance + */ + instantiateByAlias: function() { + var alias = arguments[0], + args = arraySlice.call(arguments), + className = this.getNameByAlias(alias); + + if (!className) { + className = this.maps.aliasToName[alias]; + + if (!className) { + throw new Error("[Ext.createByAlias] Cannot create an instance of unrecognized alias: " + alias); + } + + if (global.console) { + global.console.warn("[Ext.Loader] Synchronously loading '" + className + "'; consider adding " + + "Ext.require('" + alias + "') above Ext.onReady"); + } + + Ext.syncRequire(className); + } + + args[0] = className; + + return this.instantiate.apply(this, args); + }, + + /** + * @private + */ + instantiate: function() { + var name = arguments[0], + nameType = typeof name, + args = arraySlice.call(arguments, 1), + alias = name, + possibleName, cls; + + if (nameType != 'function') { + if (nameType != 'string' && args.length === 0) { + args = [name]; + name = name.xclass; + } + + if (typeof name != 'string' || name.length < 1) { + throw new Error("[Ext.create] Invalid class name or alias '" + name + "' specified, must be a non-empty string"); + } + + cls = this.get(name); + } + else { + cls = name; + } + + // No record of this class name, it's possibly an alias, so look it up + if (!cls) { + possibleName = this.getNameByAlias(name); + + if (possibleName) { + name = possibleName; + + cls = this.get(name); + } + } + + // Still no record of this class name, it's possibly an alternate name, so look it up + if (!cls) { + possibleName = this.getNameByAlternate(name); + + if (possibleName) { + name = possibleName; + + cls = this.get(name); + } + } + + // Still not existing at this point, try to load it via synchronous mode as the last resort + if (!cls) { + if (global.console) { + global.console.warn("[Ext.Loader] Synchronously loading '" + name + "'; consider adding " + + "Ext.require('" + ((possibleName) ? alias : name) + "') above Ext.onReady"); + } + + Ext.syncRequire(name); + + cls = this.get(name); + } + + if (!cls) { + throw new Error("[Ext.create] Cannot create an instance of unrecognized class name / alias: " + alias); + } + + if (typeof cls != 'function') { + throw new Error("[Ext.create] '" + name + "' is a singleton and cannot be instantiated"); + } + + return this.getInstantiator(args.length)(cls, args); + }, + + /** + * @private + * @param name + * @param args + */ + dynInstantiate: function(name, args) { + args = arrayFrom(args, true); + args.unshift(name); + + return this.instantiate.apply(this, args); + }, + + /** + * @private + * @param length + */ + getInstantiator: function(length) { + var instantiators = this.instantiators, + instantiator, + i, + args; + + instantiator = instantiators[length]; + + if (!instantiator) { + i = length; + args = []; + + for (i = 0; i < length; i++) { + args.push('a[' + i + ']'); + } + + instantiator = instantiators[length] = new Function('c', 'a', 'return new c(' + args.join(',') + ')'); + instantiator.displayName = "Ext.ClassManager.instantiate" + length; + } + + return instantiator; + }, + + /** + * @private + */ + postprocessors: {}, + + /** + * @private + */ + defaultPostprocessors: [], + + /** + * Register a post-processor function. + * + * @private + * @param {String} name + * @param {Function} postprocessor + */ + registerPostprocessor: function(name, fn, properties, position, relativeTo) { + if (!position) { + position = 'last'; + } + + if (!properties) { + properties = [name]; + } + + this.postprocessors[name] = { + name: name, + properties: properties || false, + fn: fn + }; + + this.setDefaultPostprocessorPosition(name, position, relativeTo); + + return this; + }, + + /** + * Set the default post processors array stack which are applied to every class. + * + * @private + * @param {String/Array} postprocessors The name of a registered post processor or an array of registered names. + * @return {Ext.ClassManager} this + */ + setDefaultPostprocessors: function(postprocessors) { + this.defaultPostprocessors = arrayFrom(postprocessors); + + return this; + }, + + /** + * Insert this post-processor at a specific position in the stack, optionally relative to + * any existing post-processor + * + * @private + * @param {String} name The post-processor name. Note that it needs to be registered with + * {@link Ext.ClassManager#registerPostprocessor} before this + * @param {String} offset The insertion position. Four possible values are: + * 'first', 'last', or: 'before', 'after' (relative to the name provided in the third argument) + * @param {String} relativeName + * @return {Ext.ClassManager} this + */ + setDefaultPostprocessorPosition: function(name, offset, relativeName) { + var defaultPostprocessors = this.defaultPostprocessors, + index; + + if (typeof offset == 'string') { + if (offset === 'first') { + defaultPostprocessors.unshift(name); + + return this; + } + else if (offset === 'last') { + defaultPostprocessors.push(name); + + return this; + } + + offset = (offset === 'after') ? 1 : -1; + } + + index = Ext.Array.indexOf(defaultPostprocessors, relativeName); + + if (index !== -1) { + Ext.Array.splice(defaultPostprocessors, Math.max(0, index + offset), 0, name); + } + + return this; + }, + + /** + * Converts a string expression to an array of matching class names. An expression can either refers to class aliases + * or class names. Expressions support wildcards: + * + * // returns ['Ext.window.Window'] + * var window = Ext.ClassManager.getNamesByExpression('widget.window'); + * + * // returns ['widget.panel', 'widget.window', ...] + * var allWidgets = Ext.ClassManager.getNamesByExpression('widget.*'); + * + * // returns ['Ext.data.Store', 'Ext.data.ArrayProxy', ...] + * var allData = Ext.ClassManager.getNamesByExpression('Ext.data.*'); + * + * @param {String} expression + * @return {String[]} classNames + */ + getNamesByExpression: function(expression) { + var nameToAliasesMap = this.maps.nameToAliases, + names = [], + name, alias, aliases, possibleName, regex, i, ln; + + if (typeof expression != 'string' || expression.length < 1) { + throw new Error("[Ext.ClassManager.getNamesByExpression] Expression " + expression + " is invalid, must be a non-empty string"); + } + + if (expression.indexOf('*') !== -1) { + expression = expression.replace(/\*/g, '(.*?)'); + regex = new RegExp('^' + expression + '$'); + + for (name in nameToAliasesMap) { + if (nameToAliasesMap.hasOwnProperty(name)) { + aliases = nameToAliasesMap[name]; + + if (name.search(regex) !== -1) { + names.push(name); + } + else { + for (i = 0, ln = aliases.length; i < ln; i++) { + alias = aliases[i]; + + if (alias.search(regex) !== -1) { + names.push(name); + break; + } + } + } + } + } + + } else { + possibleName = this.getNameByAlias(expression); + + if (possibleName) { + names.push(possibleName); + } else { + possibleName = this.getNameByAlternate(expression); + + if (possibleName) { + names.push(possibleName); + } else { + names.push(expression); + } + } + } + + return names; + } + }; + + /** + * @cfg {String[]} alias + * @member Ext.Class + * List of short aliases for class names. Most useful for defining xtypes for widgets: + * + * Ext.define('MyApp.CoolPanel', { + * extend: 'Ext.panel.Panel', + * alias: ['widget.coolpanel'], + * title: 'Yeah!' + * }); + * + * // Using Ext.create + * Ext.create('widget.coolpanel'); + * + * // Using the shorthand for defining widgets by xtype + * Ext.widget('panel', { + * items: [ + * {xtype: 'coolpanel', html: 'Foo'}, + * {xtype: 'coolpanel', html: 'Bar'} + * ] + * }); + * + * Besides "widget" for xtype there are alias namespaces like "feature" for ftype and "plugin" for ptype. + */ + Manager.registerPostprocessor('alias', function(name, cls, data) { + Ext.classSystemMonitor && Ext.classSystemMonitor(name, 'Ext.ClassManager#aliasPostProcessor', arguments); + + var aliases = data.alias, + i, ln; + + for (i = 0,ln = aliases.length; i < ln; i++) { + alias = aliases[i]; + + this.setAlias(cls, alias); + } + + }, ['xtype', 'alias']); + + /** + * @cfg {Boolean} singleton + * @member Ext.Class + * When set to true, the class will be instantiated as singleton. For example: + * + * Ext.define('Logger', { + * singleton: true, + * log: function(msg) { + * console.log(msg); + * } + * }); + * + * Logger.log('Hello'); + */ + Manager.registerPostprocessor('singleton', function(name, cls, data, fn) { + Ext.classSystemMonitor && Ext.classSystemMonitor(name, 'Ext.ClassManager#singletonPostProcessor', arguments); + + if (data.singleton) { + fn.call(this, name, new cls(), data); + } + else { + return true; + } + return false; + }); + + /** + * @cfg {String/String[]} alternateClassName + * @member Ext.Class + * Defines alternate names for this class. For example: + * + * Ext.define('Developer', { + * alternateClassName: ['Coder', 'Hacker'], + * code: function(msg) { + * alert('Typing... ' + msg); + * } + * }); + * + * var joe = Ext.create('Developer'); + * joe.code('stackoverflow'); + * + * var rms = Ext.create('Hacker'); + * rms.code('hack hack'); + */ + Manager.registerPostprocessor('alternateClassName', function(name, cls, data) { + Ext.classSystemMonitor && Ext.classSystemMonitor(name, 'Ext.ClassManager#alternateClassNamePostprocessor', arguments); + + var alternates = data.alternateClassName, + i, ln, alternate; + + if (!(alternates instanceof Array)) { + alternates = [alternates]; + } + + for (i = 0, ln = alternates.length; i < ln; i++) { + alternate = alternates[i]; + + if (typeof alternate != 'string') { + throw new Error("[Ext.define] Invalid alternate of: '" + alternate + "' for class: '" + name + "'; must be a valid string"); + } + + this.set(alternate, cls); + } + }); + + Ext.apply(Ext, { + /** + * Instantiate a class by either full name, alias or alternate name. + * + * If {@link Ext.Loader} is {@link Ext.Loader#setConfig enabled} and the class has + * not been defined yet, it will attempt to load the class via synchronous loading. + * + * For example, all these three lines return the same result: + * + * // alias + * var window = Ext.create('widget.window', { + * width: 600, + * height: 800, + * ... + * }); + * + * // alternate name + * var window = Ext.create('Ext.Window', { + * width: 600, + * height: 800, + * ... + * }); + * + * // full class name + * var window = Ext.create('Ext.window.Window', { + * width: 600, + * height: 800, + * ... + * }); + * + * // single object with xclass property: + * var window = Ext.create({ + * xclass: 'Ext.window.Window', // any valid value for 'name' (above) + * width: 600, + * height: 800, + * ... + * }); + * + * @param {String} [name] The class name or alias. Can be specified as `xclass` + * property if only one object parameter is specified. + * @param {Object...} [args] Additional arguments after the name will be passed to + * the class' constructor. + * @return {Object} instance + * @member Ext + * @method create + */ + create: alias(Manager, 'instantiate'), + + /** + * Convenient shorthand to create a widget by its xtype or a config object. + * See also {@link Ext.ClassManager#instantiateByAlias}. + * + * var button = Ext.widget('button'); // Equivalent to Ext.create('widget.button'); + * + * var panel = Ext.widget('panel', { // Equivalent to Ext.create('widget.panel') + * title: 'Panel' + * }); + * + * var grid = Ext.widget({ + * xtype: 'grid', + * ... + * }); + * + * If a {@link Ext.Component component} instance is passed, it is simply returned. + * + * @member Ext + * @param {String} [name] The xtype of the widget to create. + * @param {Object} [config] The configuration object for the widget constructor. + * @return {Object} The widget instance + */ + widget: function(name, config) { + // forms: + // 1: (xtype) + // 2: (xtype, config) + // 3: (config) + // 4: (xtype, component) + // 5: (component) + // + var xtype = name, + alias, className, T, load; + + if (typeof xtype != 'string') { // if (form 3 or 5) + // first arg is config or component + config = name; // arguments[0] + xtype = config.xtype; + } else { + config = config || {}; + } + + if (config.isComponent) { + return config; + } + + alias = 'widget.' + xtype; + className = Manager.getNameByAlias(alias); + + // this is needed to support demand loading of the class + if (!className) { + load = true; + } + + T = Manager.get(className); + if (load || !T) { + return Manager.instantiateByAlias(alias, config); + } + return new T(config); + }, + + /** + * @inheritdoc Ext.ClassManager#instantiateByAlias + * @member Ext + * @method createByAlias + */ + createByAlias: alias(Manager, 'instantiateByAlias'), + + /** + * Defines a class or override. A basic class is defined like this: + * + * Ext.define('My.awesome.Class', { + * someProperty: 'something', + * + * someMethod: function(s) { + * alert(s + this.someProperty); + * } + * + * ... + * }); + * + * var obj = new My.awesome.Class(); + * + * obj.someMethod('Say '); // alerts 'Say something' + * + * To create an anonymous class, pass `null` for the `className`: + * + * Ext.define(null, { + * constructor: function () { + * // ... + * } + * }); + * + * In some cases, it is helpful to create a nested scope to contain some private + * properties. The best way to do this is to pass a function instead of an object + * as the second parameter. This function will be called to produce the class + * body: + * + * Ext.define('MyApp.foo.Bar', function () { + * var id = 0; + * + * return { + * nextId: function () { + * return ++id; + * } + * }; + * }); + * + * _Note_ that when using override, the above syntax will not override successfully, because + * the passed function would need to be executed first to determine whether or not the result + * is an override or defining a new object. As such, an alternative syntax that immediately + * invokes the function can be used: + * + * Ext.define('MyApp.override.BaseOverride', function () { + * var counter = 0; + * + * return { + * override: 'Ext.Component', + * logId: function () { + * console.log(++counter, this.id); + * } + * }; + * }()); + * + * + * When using this form of `Ext.define`, the function is passed a reference to its + * class. This can be used as an efficient way to access any static properties you + * may have: + * + * Ext.define('MyApp.foo.Bar', function (Bar) { + * return { + * statics: { + * staticMethod: function () { + * // ... + * } + * }, + * + * method: function () { + * return Bar.staticMethod(); + * } + * }; + * }); + * + * To define an override, include the `override` property. The content of an + * override is aggregated with the specified class in order to extend or modify + * that class. This can be as simple as setting default property values or it can + * extend and/or replace methods. This can also extend the statics of the class. + * + * One use for an override is to break a large class into manageable pieces. + * + * // File: /src/app/Panel.js + * + * Ext.define('My.app.Panel', { + * extend: 'Ext.panel.Panel', + * requires: [ + * 'My.app.PanelPart2', + * 'My.app.PanelPart3' + * ] + * + * constructor: function (config) { + * this.callParent(arguments); // calls Ext.panel.Panel's constructor + * //... + * }, + * + * statics: { + * method: function () { + * return 'abc'; + * } + * } + * }); + * + * // File: /src/app/PanelPart2.js + * Ext.define('My.app.PanelPart2', { + * override: 'My.app.Panel', + * + * constructor: function (config) { + * this.callParent(arguments); // calls My.app.Panel's constructor + * //... + * } + * }); + * + * Another use of overrides is to provide optional parts of classes that can be + * independently required. In this case, the class may even be unaware of the + * override altogether. + * + * Ext.define('My.ux.CoolTip', { + * override: 'Ext.tip.ToolTip', + * + * constructor: function (config) { + * this.callParent(arguments); // calls Ext.tip.ToolTip's constructor + * //... + * } + * }); + * + * The above override can now be required as normal. + * + * Ext.define('My.app.App', { + * requires: [ + * 'My.ux.CoolTip' + * ] + * }); + * + * Overrides can also contain statics: + * + * Ext.define('My.app.BarMod', { + * override: 'Ext.foo.Bar', + * + * statics: { + * method: function (x) { + * return this.callParent([x * 2]); // call Ext.foo.Bar.method + * } + * } + * }); + * + * IMPORTANT: An override is only included in a build if the class it overrides is + * required. Otherwise, the override, like the target class, is not included. + * + * @param {String} className The class name to create in string dot-namespaced format, for example: + * 'My.very.awesome.Class', 'FeedViewer.plugin.CoolPager' + * It is highly recommended to follow this simple convention: + * - The root and the class name are 'CamelCased' + * - Everything else is lower-cased + * Pass `null` to create an anonymous class. + * @param {Object} data The key - value pairs of properties to apply to this class. Property names can be of any valid + * strings, except those in the reserved listed below: + * - `mixins` + * - `statics` + * - `config` + * - `alias` + * - `self` + * - `singleton` + * - `alternateClassName` + * - `override` + * + * @param {Function} createdFn Optional callback to execute after the class is created, the execution scope of which + * (`this`) will be the newly created class itself. + * @return {Ext.Base} + * @member Ext + */ + define: function (className, data, createdFn) { + Ext.classSystemMonitor && Ext.classSystemMonitor(className, 'ClassManager#define', arguments); + + if (data.override) { + return Manager.createOverride.apply(Manager, arguments); + } + + return Manager.create.apply(Manager, arguments); + }, + + /** + * Undefines a class defined using the #define method. Typically used + * for unit testing where setting up and tearing down a class multiple + * times is required. For example: + * + * // define a class + * Ext.define('Foo', { + * ... + * }); + * + * // run test + * + * // undefine the class + * Ext.undefine('Foo'); + * @param {String} className The class name to undefine in string dot-namespaced format. + * @private + */ + undefine: function(className) { + Ext.classSystemMonitor && Ext.classSystemMonitor(className, 'Ext.ClassManager#undefine', arguments); + + var classes = Manager.classes, + maps = Manager.maps, + aliasToName = maps.aliasToName, + nameToAliases = maps.nameToAliases, + alternateToName = maps.alternateToName, + nameToAlternates = maps.nameToAlternates, + aliases = nameToAliases[className], + alternates = nameToAlternates[className], + parts, partCount, namespace, i; + + delete Manager.namespaceParseCache[className]; + delete nameToAliases[className]; + delete nameToAlternates[className]; + delete classes[className]; + + if (aliases) { + for (i = aliases.length; i--;) { + delete aliasToName[aliases[i]]; + } + } + + if (alternates) { + for (i = alternates.length; i--; ) { + delete alternateToName[alternates[i]]; + } + } + + parts = Manager.parseNamespace(className); + partCount = parts.length - 1; + namespace = parts[0]; + + for (i = 1; i < partCount; i++) { + namespace = namespace[parts[i]]; + if (!namespace) { + return; + } + } + + // Old IE blows up on attempt to delete window property + try { + delete namespace[parts[partCount]]; + } + catch (e) { + namespace[parts[partCount]] = undefined; + } + }, + + /** + * @inheritdoc Ext.ClassManager#getName + * @member Ext + * @method getClassName + */ + getClassName: alias(Manager, 'getName'), + + /** + * Returns the displayName property or className or object. When all else fails, returns "Anonymous". + * @param {Object} object + * @return {String} + */ + getDisplayName: function(object) { + if (object) { + if (object.displayName) { + return object.displayName; + } + + if (object.$name && object.$class) { + return Ext.getClassName(object.$class) + '#' + object.$name; + } + + if (object.$className) { + return object.$className; + } + } + + return 'Anonymous'; + }, + + /** + * @inheritdoc Ext.ClassManager#getClass + * @member Ext + * @method getClass + */ + getClass: alias(Manager, 'getClass'), + + /** + * Creates namespaces to be used for scoping variables and classes so that they are not global. + * Specifying the last node of a namespace implicitly creates all other nodes. Usage: + * + * Ext.namespace('Company', 'Company.data'); + * + * // equivalent and preferable to the above syntax + * Ext.ns('Company.data'); + * + * Company.Widget = function() { ... }; + * + * Company.data.CustomStore = function(config) { ... }; + * + * @param {String...} namespaces + * @return {Object} The namespace object. + * (If multiple arguments are passed, this will be the last namespace created) + * @member Ext + * @method namespace + */ + namespace: alias(Manager, 'createNamespaces') + }); + + /** + * Old name for {@link Ext#widget}. + * @deprecated 4.0.0 Use {@link Ext#widget} instead. + * @method createWidget + * @member Ext + */ + Ext.createWidget = Ext.widget; + + /** + * Convenient alias for {@link Ext#namespace Ext.namespace}. + * @inheritdoc Ext#namespace + * @member Ext + * @method ns + */ + Ext.ns = Ext.namespace; + + Class.registerPreprocessor('className', function(cls, data) { + if (data.$className) { + cls.$className = data.$className; + cls.displayName = cls.$className; + } + + Ext.classSystemMonitor && Ext.classSystemMonitor(cls, 'Ext.ClassManager#classNamePreprocessor', arguments); + }, true, 'first'); + + Class.registerPreprocessor('alias', function(cls, data) { + Ext.classSystemMonitor && Ext.classSystemMonitor(cls, 'Ext.ClassManager#aliasPreprocessor', arguments); + + var prototype = cls.prototype, + xtypes = arrayFrom(data.xtype), + aliases = arrayFrom(data.alias), + widgetPrefix = 'widget.', + widgetPrefixLength = widgetPrefix.length, + xtypesChain = Array.prototype.slice.call(prototype.xtypesChain || []), + xtypesMap = Ext.merge({}, prototype.xtypesMap || {}), + i, ln, alias, xtype; + + for (i = 0,ln = aliases.length; i < ln; i++) { + alias = aliases[i]; + + if (typeof alias != 'string' || alias.length < 1) { + throw new Error("[Ext.define] Invalid alias of: '" + alias + "' for class: '" + name + "'; must be a valid string"); + } + + if (alias.substring(0, widgetPrefixLength) === widgetPrefix) { + xtype = alias.substring(widgetPrefixLength); + Ext.Array.include(xtypes, xtype); + } + } + + cls.xtype = data.xtype = xtypes[0]; + data.xtypes = xtypes; + + for (i = 0,ln = xtypes.length; i < ln; i++) { + xtype = xtypes[i]; + + if (!xtypesMap[xtype]) { + xtypesMap[xtype] = true; + xtypesChain.push(xtype); + } + } + + data.xtypesChain = xtypesChain; + data.xtypesMap = xtypesMap; + + Ext.Function.interceptAfter(data, 'onClassCreated', function() { + Ext.classSystemMonitor && Ext.classSystemMonitor(cls, 'Ext.ClassManager#aliasPreprocessor#afterClassCreated', arguments); + + var mixins = prototype.mixins, + key, mixin; + + for (key in mixins) { + if (mixins.hasOwnProperty(key)) { + mixin = mixins[key]; + + xtypes = mixin.xtypes; + + if (xtypes) { + for (i = 0,ln = xtypes.length; i < ln; i++) { + xtype = xtypes[i]; + + if (!xtypesMap[xtype]) { + xtypesMap[xtype] = true; + xtypesChain.push(xtype); + } + } + } + } + } + }); + + for (i = 0,ln = xtypes.length; i < ln; i++) { + xtype = xtypes[i]; + + if (typeof xtype != 'string' || xtype.length < 1) { + throw new Error("[Ext.define] Invalid xtype of: '" + xtype + "' for class: '" + name + "'; must be a valid non-empty string"); + } + + Ext.Array.include(aliases, widgetPrefix + xtype); + } + + data.alias = aliases; + + }, ['xtype', 'alias']); + +}(Ext.Class, Ext.Function.alias, Array.prototype.slice, Ext.Array.from, Ext.global)); + +// simple mechanism for automated means of injecting large amounts of dependency info +// at the appropriate time in the load cycle +if (Ext._alternatesMetadata) { + Ext.ClassManager.addNameAlternateMappings(Ext._alternatesMetadata); + Ext._alternatesMetadata = null; +} + +if (Ext._aliasMetadata) { + Ext.ClassManager.addNameAliasMappings(Ext._aliasMetadata); + Ext._aliasMetadata = null; +} + +//@tag foundation,core +//@require ClassManager.js +//@define Ext.Loader + +/** + * @author Jacky Nguyen + * @docauthor Jacky Nguyen + * @class Ext.Loader + * + * Ext.Loader is the heart of the new dynamic dependency loading capability in Ext JS 4+. It is most commonly used + * via the {@link Ext#require} shorthand. Ext.Loader supports both asynchronous and synchronous loading + * approaches, and leverage their advantages for the best development flow. We'll discuss about the pros and cons of each approach: + * + * # Asynchronous Loading # + * + * - Advantages: + * + Cross-domain + * + No web server needed: you can run the application via the file system protocol (i.e: `file://path/to/your/index + * .html`) + * + Best possible debugging experience: error messages come with the exact file name and line number + * + * - Disadvantages: + * + Dependencies need to be specified before-hand + * + * ### Method 1: Explicitly include what you need: ### + * + * // Syntax + * Ext.require({String/Array} expressions); + * + * // Example: Single alias + * Ext.require('widget.window'); + * + * // Example: Single class name + * Ext.require('Ext.window.Window'); + * + * // Example: Multiple aliases / class names mix + * Ext.require(['widget.window', 'layout.border', 'Ext.data.Connection']); + * + * // Wildcards + * Ext.require(['widget.*', 'layout.*', 'Ext.data.*']); + * + * ### Method 2: Explicitly exclude what you don't need: ### + * + * // Syntax: Note that it must be in this chaining format. + * Ext.exclude({String/Array} expressions) + * .require({String/Array} expressions); + * + * // Include everything except Ext.data.* + * Ext.exclude('Ext.data.*').require('*'); + * + * // Include all widgets except widget.checkbox*, + * // which will match widget.checkbox, widget.checkboxfield, widget.checkboxgroup, etc. + * Ext.exclude('widget.checkbox*').require('widget.*'); + * + * # Synchronous Loading on Demand # + * + * - Advantages: + * + There's no need to specify dependencies before-hand, which is always the convenience of including ext-all.js + * before + * + * - Disadvantages: + * + Not as good debugging experience since file name won't be shown (except in Firebug at the moment) + * + Must be from the same domain due to XHR restriction + * + Need a web server, same reason as above + * + * There's one simple rule to follow: Instantiate everything with Ext.create instead of the `new` keyword + * + * Ext.create('widget.window', { ... }); // Instead of new Ext.window.Window({...}); + * + * Ext.create('Ext.window.Window', {}); // Same as above, using full class name instead of alias + * + * Ext.widget('window', {}); // Same as above, all you need is the traditional `xtype` + * + * Behind the scene, {@link Ext.ClassManager} will automatically check whether the given class name / alias has already + * existed on the page. If it's not, Ext.Loader will immediately switch itself to synchronous mode and automatic load the given + * class and all its dependencies. + * + * # Hybrid Loading - The Best of Both Worlds # + * + * It has all the advantages combined from asynchronous and synchronous loading. The development flow is simple: + * + * ### Step 1: Start writing your application using synchronous approach. + * + * Ext.Loader will automatically fetch all dependencies on demand as they're needed during run-time. For example: + * + * Ext.onReady(function(){ + * var window = Ext.widget('window', { + * width: 500, + * height: 300, + * layout: { + * type: 'border', + * padding: 5 + * }, + * title: 'Hello Dialog', + * items: [{ + * title: 'Navigation', + * collapsible: true, + * region: 'west', + * width: 200, + * html: 'Hello', + * split: true + * }, { + * title: 'TabPanel', + * region: 'center' + * }] + * }); + * + * window.show(); + * }) + * + * ### Step 2: Along the way, when you need better debugging ability, watch the console for warnings like these: ### + * + * [Ext.Loader] Synchronously loading 'Ext.window.Window'; consider adding Ext.require('Ext.window.Window') before your application's code + * ClassManager.js:432 + * [Ext.Loader] Synchronously loading 'Ext.layout.container.Border'; consider adding Ext.require('Ext.layout.container.Border') before your application's code + * + * Simply copy and paste the suggested code above `Ext.onReady`, i.e: + * + * Ext.require('Ext.window.Window'); + * Ext.require('Ext.layout.container.Border'); + * + * Ext.onReady(...); + * + * Everything should now load via asynchronous mode. + * + * # Deployment # + * + * It's important to note that dynamic loading should only be used during development on your local machines. + * During production, all dependencies should be combined into one single JavaScript file. Ext.Loader makes + * the whole process of transitioning from / to between development / maintenance and production as easy as + * possible. Internally {@link Ext.Loader#history Ext.Loader.history} maintains the list of all dependencies your application + * needs in the exact loading sequence. It's as simple as concatenating all files in this array into one, + * then include it on top of your application. + * + * This process will be automated with Sencha Command, to be released and documented towards Ext JS 4 Final. + * + * @singleton + */ + +Ext.Loader = new function() { + var Loader = this, + Manager = Ext.ClassManager, + Class = Ext.Class, + flexSetter = Ext.Function.flexSetter, + alias = Ext.Function.alias, + pass = Ext.Function.pass, + defer = Ext.Function.defer, + arrayErase = Ext.Array.erase, + dependencyProperties = ['extend', 'mixins', 'requires'], + isInHistory = {}, + history = [], + slashDotSlashRe = /\/\.\//g, + dotRe = /\./g, + setPathCount = 0; + + Ext.apply(Loader, { + + /** + * @private + */ + isInHistory: isInHistory, + + /** + * An array of class names to keep track of the dependency loading order. + * This is not guaranteed to be the same everytime due to the asynchronous + * nature of the Loader. + * + * @property {Array} history + */ + history: history, + + /** + * Configuration + * @private + */ + config: { + /** + * @cfg {Boolean} enabled + * Whether or not to enable the dynamic dependency loading feature. + */ + enabled: false, + + /** + * @cfg {Boolean} scriptChainDelay + * millisecond delay between asynchronous script injection (prevents stack overflow on some user agents) + * 'false' disables delay but potentially increases stack load. + */ + scriptChainDelay : false, + + /** + * @cfg {Boolean} disableCaching + * Appends current timestamp to script files to prevent caching. + */ + disableCaching: true, + + /** + * @cfg {String} disableCachingParam + * The get parameter name for the cache buster's timestamp. + */ + disableCachingParam: '_dc', + + /** + * @cfg {Boolean} garbageCollect + * True to prepare an asynchronous script tag for garbage collection (effective only + * if {@link #preserveScripts preserveScripts} is false) + */ + garbageCollect : false, + + /** + * @cfg {Object} paths + * The mapping from namespaces to file paths + * + * { + * 'Ext': '.', // This is set by default, Ext.layout.container.Container will be + * // loaded from ./layout/Container.js + * + * 'My': './src/my_own_folder' // My.layout.Container will be loaded from + * // ./src/my_own_folder/layout/Container.js + * } + * + * Note that all relative paths are relative to the current HTML document. + * If not being specified, for example, Other.awesome.Class + * will simply be loaded from ./Other/awesome/Class.js + */ + paths: { + 'Ext': '.' + }, + + /** + * @cfg {Boolean} preserveScripts + * False to remove and optionally {@link #garbageCollect garbage-collect} asynchronously loaded scripts, + * True to retain script element for browser debugger compatibility and improved load performance. + */ + preserveScripts : true, + + /** + * @cfg {String} scriptCharset + * Optional charset to specify encoding of dynamic script content. + */ + scriptCharset : undefined + }, + + /** + * Set the configuration for the loader. This should be called right after ext-(debug).js + * is included in the page, and before Ext.onReady. i.e: + * + * + * + * + * + * Refer to config options of {@link Ext.Loader} for the list of possible properties + * + * @param {Object} config The config object to override the default values + * @return {Ext.Loader} this + */ + setConfig: function(name, value) { + if (Ext.isObject(name) && arguments.length === 1) { + Ext.merge(Loader.config, name); + + if ('paths' in name) { + Ext.app.collectNamespaces(name.paths); + } + } + else { + Loader.config[name] = (Ext.isObject(value)) ? Ext.merge(Loader.config[name], value) : value; + + if (name === 'paths') { + Ext.app.collectNamespaces(value); + } + } + + return Loader; + }, + + /** + * Get the config value corresponding to the specified name. If no name is given, will return the config object + * @param {String} name The config property name + * @return {Object} + */ + getConfig: function(name) { + if (name) { + return Loader.config[name]; + } + + return Loader.config; + }, + + /** + * Sets the path of a namespace. + * For Example: + * + * Ext.Loader.setPath('Ext', '.'); + * + * @param {String/Object} name See {@link Ext.Function#flexSetter flexSetter} + * @param {String} [path] See {@link Ext.Function#flexSetter flexSetter} + * @return {Ext.Loader} this + * @method + */ + setPath: flexSetter(function(name, path) { + Loader.config.paths[name] = path; + Ext.app.namespaces[name] = true; + setPathCount++; + + return Loader; + }), + + /** + * Sets a batch of path entries + * + * @param {Object } paths a set of className: path mappings + * @return {Ext.Loader} this + */ + addClassPathMappings: function(paths) { + var name; + + if(setPathCount == 0){ + Loader.config.paths = paths; + } else { + for(name in paths){ + Loader.config.paths[name] = paths[name]; + } + } + setPathCount++; + return Loader; + }, + + /** + * Translates a className to a file path by adding the + * the proper prefix and converting the .'s to /'s. For example: + * + * Ext.Loader.setPath('My', '/path/to/My'); + * + * alert(Ext.Loader.getPath('My.awesome.Class')); // alerts '/path/to/My/awesome/Class.js' + * + * Note that the deeper namespace levels, if explicitly set, are always resolved first. For example: + * + * Ext.Loader.setPath({ + * 'My': '/path/to/lib', + * 'My.awesome': '/other/path/for/awesome/stuff', + * 'My.awesome.more': '/more/awesome/path' + * }); + * + * alert(Ext.Loader.getPath('My.awesome.Class')); // alerts '/other/path/for/awesome/stuff/Class.js' + * + * alert(Ext.Loader.getPath('My.awesome.more.Class')); // alerts '/more/awesome/path/Class.js' + * + * alert(Ext.Loader.getPath('My.cool.Class')); // alerts '/path/to/lib/cool/Class.js' + * + * alert(Ext.Loader.getPath('Unknown.strange.Stuff')); // alerts 'Unknown/strange/Stuff.js' + * + * @param {String} className + * @return {String} path + */ + getPath: function(className) { + var path = '', + paths = Loader.config.paths, + prefix = Loader.getPrefix(className); + + if (prefix.length > 0) { + if (prefix === className) { + return paths[prefix]; + } + + path = paths[prefix]; + className = className.substring(prefix.length + 1); + } + + if (path.length > 0) { + path += '/'; + } + + return path.replace(slashDotSlashRe, '/') + className.replace(dotRe, "/") + '.js'; + }, + + /** + * @private + * @param {String} className + */ + getPrefix: function(className) { + var paths = Loader.config.paths, + prefix, deepestPrefix = ''; + + if (paths.hasOwnProperty(className)) { + return className; + } + + for (prefix in paths) { + if (paths.hasOwnProperty(prefix) && prefix + '.' === className.substring(0, prefix.length + 1)) { + if (prefix.length > deepestPrefix.length) { + deepestPrefix = prefix; + } + } + } + + return deepestPrefix; + }, + + /** + * @private + * @param {String} className + */ + isAClassNameWithAKnownPrefix: function(className) { + var prefix = Loader.getPrefix(className); + + // we can only say it's really a class if className is not equal to any known namespace + return prefix !== '' && prefix !== className; + }, + + /** + * Loads all classes by the given names and all their direct dependencies; optionally executes + * the given callback function when finishes, within the optional scope. + * + * {@link Ext#require} is alias for {@link Ext.Loader#require}. + * + * @param {String/Array} expressions Can either be a string or an array of string + * @param {Function} fn (Optional) The callback function + * @param {Object} scope (Optional) The execution scope (`this`) of the callback function + * @param {String/Array} excludes (Optional) Classes to be excluded, useful when being used with expressions + */ + require: function(expressions, fn, scope, excludes) { + if (fn) { + fn.call(scope); + } + }, + + /** + * Synchronously loads all classes by the given names and all their direct dependencies; optionally + * executes the given callback function when finishes, within the optional scope. + * + * {@link Ext#syncRequire} is alias for {@link Ext.Loader#syncRequire}. + * + * @param {String/Array} expressions Can either be a string or an array of string + * @param {Function} fn (Optional) The callback function + * @param {Object} scope (Optional) The execution scope (`this`) of the callback function + * @param {String/Array} excludes (Optional) Classes to be excluded, useful when being used with expressions + */ + syncRequire: function() {}, + + /** + * Explicitly exclude files from being loaded. Useful when used in conjunction with a broad include expression. + * Can be chained with more `require` and `exclude` methods, eg: + * + * Ext.exclude('Ext.data.*').require('*'); + * + * Ext.exclude('widget.button*').require('widget.*'); + * + * {@link Ext#exclude} is alias for {@link Ext.Loader#exclude}. + * + * @param {Array} excludes + * @return {Object} object contains `require` method for chaining + */ + exclude: function(excludes) { + return { + require: function(expressions, fn, scope) { + return Loader.require(expressions, fn, scope, excludes); + }, + + syncRequire: function(expressions, fn, scope) { + return Loader.syncRequire(expressions, fn, scope, excludes); + } + }; + }, + + /** + * Add a new listener to be executed when all required scripts are fully loaded + * + * @param {Function} fn The function callback to be executed + * @param {Object} scope The execution scope (this) of the callback function + * @param {Boolean} withDomReady Whether or not to wait for document dom ready as well + */ + onReady: function(fn, scope, withDomReady, options) { + var oldFn; + + if (withDomReady !== false && Ext.onDocumentReady) { + oldFn = fn; + + fn = function() { + Ext.onDocumentReady(oldFn, scope, options); + }; + } + + fn.call(scope); + } + }); + + var queue = [], + isClassFileLoaded = {}, + isFileLoaded = {}, + classNameToFilePathMap = {}, + scriptElements = {}, + readyListeners = [], + usedClasses = [], + requiresMap = {}, + comparePriority = function(listenerA, listenerB) { + return listenerB.priority - listenerA.priority; + }; + + Ext.apply(Loader, { + /** + * @private + */ + documentHead: typeof document != 'undefined' && (document.head || document.getElementsByTagName('head')[0]), + + /** + * Flag indicating whether there are still files being loaded + * @private + */ + isLoading: false, + + /** + * Maintain the queue for all dependencies. Each item in the array is an object of the format: + * + * { + * requires: [...], // The required classes for this queue item + * callback: function() { ... } // The function to execute when all classes specified in requires exist + * } + * + * @private + */ + queue: queue, + + /** + * Maintain the list of files that have already been handled so that they never get double-loaded + * @private + */ + isClassFileLoaded: isClassFileLoaded, + + /** + * @private + */ + isFileLoaded: isFileLoaded, + + /** + * Maintain the list of listeners to execute when all required scripts are fully loaded + * @private + */ + readyListeners: readyListeners, + + /** + * Contains classes referenced in `uses` properties. + * @private + */ + optionalRequires: usedClasses, + + /** + * Map of fully qualified class names to an array of dependent classes. + * @private + */ + requiresMap: requiresMap, + + /** + * @private + */ + numPendingFiles: 0, + + /** + * @private + */ + numLoadedFiles: 0, + + /** @private */ + hasFileLoadError: false, + + /** + * @private + */ + classNameToFilePathMap: classNameToFilePathMap, + + /** + * The number of scripts loading via loadScript. + * @private + */ + scriptsLoading: 0, + + /** + * @private + */ + syncModeEnabled: false, + + scriptElements: scriptElements, + + /** + * Refresh all items in the queue. If all dependencies for an item exist during looping, + * it will execute the callback and call refreshQueue again. Triggers onReady when the queue is + * empty + * @private + */ + refreshQueue: function() { + var ln = queue.length, + i, item, j, requires; + + // When the queue of loading classes reaches zero, trigger readiness + + if (!ln && !Loader.scriptsLoading) { + return Loader.triggerReady(); + } + + for (i = 0; i < ln; i++) { + item = queue[i]; + + if (item) { + requires = item.requires; + + // Don't bother checking when the number of files loaded + // is still less than the array length + if (requires.length > Loader.numLoadedFiles) { + continue; + } + + // Remove any required classes that are loaded + for (j = 0; j < requires.length; ) { + if (Manager.isCreated(requires[j])) { + // Take out from the queue + arrayErase(requires, j, 1); + } + else { + j++; + } + } + + // If we've ended up with no required classes, call the callback + if (item.requires.length === 0) { + arrayErase(queue, i, 1); + item.callback.call(item.scope); + Loader.refreshQueue(); + break; + } + } + } + + return Loader; + }, + + /** + * Inject a script element to document's head, call onLoad and onError accordingly + * @private + */ + injectScriptElement: function(url, onLoad, onError, scope, charset) { + var script = document.createElement('script'), + dispatched = false, + config = Loader.config, + onLoadFn = function() { + + if(!dispatched) { + dispatched = true; + script.onload = script.onreadystatechange = script.onerror = null; + if (typeof config.scriptChainDelay == 'number') { + //free the stack (and defer the next script) + defer(onLoad, config.scriptChainDelay, scope); + } else { + onLoad.call(scope); + } + Loader.cleanupScriptElement(script, config.preserveScripts === false, config.garbageCollect); + } + + }, + onErrorFn = function(arg) { + defer(onError, 1, scope); //free the stack + Loader.cleanupScriptElement(script, config.preserveScripts === false, config.garbageCollect); + }; + + script.type = 'text/javascript'; + script.onerror = onErrorFn; + charset = charset || config.scriptCharset; + if (charset) { + script.charset = charset; + } + + /* + * IE9 Standards mode (and others) SHOULD follow the load event only + * (Note: IE9 supports both onload AND readystatechange events) + */ + if ('addEventListener' in script ) { + script.onload = onLoadFn; + } else if ('readyState' in script) { // for = 200 && status < 300) || (status === 304) + ) { + // Debugger friendly, file names are still shown even though they're eval'ed code + // Breakpoints work on both Firebug and Chrome's Web Inspector + if (!Ext.isIE) { + debugSourceURL = "\n//@ sourceURL=" + url; + } + + Ext.globalEval(xhr.responseText + debugSourceURL); + + onLoad.call(scope); + } + else { + onError.call(Loader, "Failed loading synchronously via XHR: '" + url + "'; please " + + "verify that the file exists. " + + "XHR status code: " + status, synchronous); + } + + // Prevent potential IE memory leak + xhr = null; + } + }, + + // documented above + syncRequire: function() { + var syncModeEnabled = Loader.syncModeEnabled; + + if (!syncModeEnabled) { + Loader.syncModeEnabled = true; + } + + Loader.require.apply(Loader, arguments); + + if (!syncModeEnabled) { + Loader.syncModeEnabled = false; + } + + Loader.refreshQueue(); + }, + + // documented above + require: function(expressions, fn, scope, excludes) { + var excluded = {}, + included = {}, + excludedClassNames = [], + possibleClassNames = [], + classNames = [], + references = [], + callback, + syncModeEnabled, + filePath, expression, exclude, className, + possibleClassName, i, j, ln, subLn; + + if (excludes) { + // Convert possible single string to an array. + excludes = (typeof excludes === 'string') ? [ excludes ] : excludes; + + for (i = 0,ln = excludes.length; i < ln; i++) { + exclude = excludes[i]; + + if (typeof exclude == 'string' && exclude.length > 0) { + excludedClassNames = Manager.getNamesByExpression(exclude); + + for (j = 0,subLn = excludedClassNames.length; j < subLn; j++) { + excluded[excludedClassNames[j]] = true; + } + } + } + } + + // Convert possible single string to an array. + expressions = (typeof expressions === 'string') ? [ expressions ] : (expressions ? expressions : []); + + if (fn) { + if (fn.length > 0) { + callback = function() { + var classes = [], + i, ln; + + for (i = 0,ln = references.length; i < ln; i++) { + classes.push(Manager.get(references[i])); + } + + return fn.apply(this, classes); + }; + } + else { + callback = fn; + } + } + else { + callback = Ext.emptyFn; + } + + scope = scope || Ext.global; + + for (i = 0,ln = expressions.length; i < ln; i++) { + expression = expressions[i]; + + if (typeof expression == 'string' && expression.length > 0) { + possibleClassNames = Manager.getNamesByExpression(expression); + subLn = possibleClassNames.length; + + for (j = 0; j < subLn; j++) { + possibleClassName = possibleClassNames[j]; + + if (excluded[possibleClassName] !== true) { + references.push(possibleClassName); + + if (!Manager.isCreated(possibleClassName) && !included[possibleClassName]) { + included[possibleClassName] = true; + classNames.push(possibleClassName); + } + } + } + } + } + + // If the dynamic dependency feature is not being used, throw an error + // if the dependencies are not defined + if (classNames.length > 0) { + if (!Loader.config.enabled) { + throw new Error("Ext.Loader is not enabled, so dependencies cannot be resolved dynamically. " + + "Missing required class" + ((classNames.length > 1) ? "es" : "") + ": " + classNames.join(', ')); + } + } + else { + callback.call(scope); + return Loader; + } + + syncModeEnabled = Loader.syncModeEnabled; + + if (!syncModeEnabled) { + queue.push({ + requires: classNames.slice(), // this array will be modified as the queue is processed, + // so we need a copy of it + callback: callback, + scope: scope + }); + } + + ln = classNames.length; + + for (i = 0; i < ln; i++) { + className = classNames[i]; + + filePath = Loader.getPath(className); + + // If we are synchronously loading a file that has already been asychronously loaded before + // we need to destroy the script tag and revert the count + // This file will then be forced loaded in synchronous + if (syncModeEnabled && isClassFileLoaded.hasOwnProperty(className)) { + if (!isClassFileLoaded[className]) { + Loader.numPendingFiles--; + Loader.removeScriptElement(filePath); + delete isClassFileLoaded[className]; + } + } + + if (!isClassFileLoaded.hasOwnProperty(className)) { + isClassFileLoaded[className] = false; + classNameToFilePathMap[className] = filePath; + + Loader.numPendingFiles++; + Loader.loadScriptFile( + filePath, + pass(Loader.onFileLoaded, [className, filePath], Loader), + pass(Loader.onFileLoadError, [className, filePath], Loader), + Loader, + syncModeEnabled + ); + } + } + + if (syncModeEnabled) { + callback.call(scope); + + if (ln === 1) { + return Manager.get(className); + } + } + + return Loader; + }, + + /** + * @private + * @param {String} className + * @param {String} filePath + */ + onFileLoaded: function(className, filePath) { + var loaded = isClassFileLoaded[className]; + Loader.numLoadedFiles++; + + isClassFileLoaded[className] = true; + isFileLoaded[filePath] = true; + + // In FF, when we sync load something that has had a script tag inserted, the load event may + // sometimes fire even if we clean it up and set it to null, so check if we're already loaded here. + if (!loaded) { + Loader.numPendingFiles--; + } + + if (Loader.numPendingFiles === 0) { + Loader.refreshQueue(); + } + + if (!Loader.syncModeEnabled && Loader.numPendingFiles === 0 && Loader.isLoading && !Loader.hasFileLoadError) { + var missingClasses = [], + missingPaths = [], + requires, + i, ln, j, subLn; + + for (i = 0,ln = queue.length; i < ln; i++) { + requires = queue[i].requires; + + for (j = 0,subLn = requires.length; j < subLn; j++) { + if (isClassFileLoaded[requires[j]]) { + missingClasses.push(requires[j]); + } + } + } + + if (missingClasses.length < 1) { + return; + } + + missingClasses = Ext.Array.filter(Ext.Array.unique(missingClasses), function(item) { + return !requiresMap.hasOwnProperty(item); + }, Loader); + + if (missingClasses.length < 1) { + return; + } + + for (i = 0,ln = missingClasses.length; i < ln; i++) { + missingPaths.push(classNameToFilePathMap[missingClasses[i]]); + } + + throw new Error("The following classes are not declared even if their files have been " + + "loaded: '" + missingClasses.join("', '") + "'. Please check the source code of their " + + "corresponding files for possible typos: '" + missingPaths.join("', '")); + } + }, + + /** + * @private + */ + onFileLoadError: function(className, filePath, errorMessage, isSynchronous) { + Loader.numPendingFiles--; + Loader.hasFileLoadError = true; + + throw new Error("[Ext.Loader] " + errorMessage); + }, + + /** + * @private + * Ensure that any classes referenced in the `uses` property are loaded. + */ + addUsedClasses: function (classes) { + var cls, i, ln; + + if (classes) { + classes = (typeof classes == 'string') ? [classes] : classes; + for (i = 0, ln = classes.length; i < ln; i++) { + cls = classes[i]; + if (typeof cls == 'string' && !Ext.Array.contains(usedClasses, cls)) { + usedClasses.push(cls); + } + } + } + + return Loader; + }, + + /** + * @private + */ + triggerReady: function() { + var listener, + refClasses = usedClasses; + + if (Loader.isLoading) { + Loader.isLoading = false; + + if (refClasses.length !== 0) { + // Clone then empty the array to eliminate potential recursive loop issue + refClasses = refClasses.slice(); + usedClasses.length = 0; + // this may immediately call us back if all 'uses' classes + // have been loaded + Loader.require(refClasses, Loader.triggerReady, Loader); + return Loader; + } + } + + Ext.Array.sort(readyListeners, comparePriority); + + // this method can be called with Loader.isLoading either true or false + // (can be called with false when all 'uses' classes are already loaded) + // this may bypass the above if condition + while (readyListeners.length && !Loader.isLoading) { + // calls to refreshQueue may re-enter triggerReady + // so we cannot necessarily iterate the readyListeners array + listener = readyListeners.shift(); + listener.fn.call(listener.scope); + } + + return Loader; + }, + + // Documented above already + onReady: function(fn, scope, withDomReady, options) { + var oldFn; + + if (withDomReady !== false && Ext.onDocumentReady) { + oldFn = fn; + + fn = function() { + Ext.onDocumentReady(oldFn, scope, options); + }; + } + + if (!Loader.isLoading) { + fn.call(scope); + } + else { + readyListeners.push({ + fn: fn, + scope: scope, + priority: (options && options.priority) || 0 + }); + } + }, + + /** + * @private + * @param {String} className + */ + historyPush: function(className) { + if (className && isClassFileLoaded.hasOwnProperty(className) && !isInHistory[className]) { + isInHistory[className] = true; + history.push(className); + } + return Loader; + } + }); + + /** + * Turns on or off the "cache buster" applied to dynamically loaded scripts. Normally + * dynamically loaded scripts have an extra query parameter appended to avoid stale + * cached scripts. This method can be used to disable this mechanism, and is primarily + * useful for testing. This is done using a cookie. + * @param {Boolean} disable True to disable the cache buster. + * @param {String} [path="/"] An optional path to scope the cookie. + * @private + */ + Ext.disableCacheBuster = function (disable, path) { + var date = new Date(); + date.setTime(date.getTime() + (disable ? 10*365 : -1) * 24*60*60*1000); + date = date.toGMTString(); + document.cookie = 'ext-cache=1; expires=' + date + '; path='+(path || '/'); + }; + + + /** + * @member Ext + * @method require + * @inheritdoc Ext.Loader#require + */ + Ext.require = alias(Loader, 'require'); + + /** + * @member Ext + * @method syncRequire + * @inheritdoc Ext.Loader#syncRequire + */ + Ext.syncRequire = alias(Loader, 'syncRequire'); + + /** + * Convenient shortcut to {@link Ext.Loader#exclude} + * @member Ext + * @method exclude + * @inheritdoc Ext.Loader#exclude + */ + Ext.exclude = alias(Loader, 'exclude'); + + /** + * @member Ext + * @method onReady + * @ignore + */ + Ext.onReady = function(fn, scope, options) { + Loader.onReady(fn, scope, true, options); + }; + + /** + * @cfg {String[]} requires + * @member Ext.Class + * List of classes that have to be loaded before instantiating this class. + * For example: + * + * Ext.define('Mother', { + * requires: ['Child'], + * giveBirth: function() { + * // we can be sure that child class is available. + * return new Child(); + * } + * }); + */ + Class.registerPreprocessor('loader', function(cls, data, hooks, continueFn) { + Ext.classSystemMonitor && Ext.classSystemMonitor(cls, 'Ext.Loader#loaderPreprocessor', arguments); + + var me = this, + dependencies = [], + dependency, + className = Manager.getName(cls), + i, j, ln, subLn, value, propertyName, propertyValue, + requiredMap, requiredDep; + + /* + Loop through the dependencyProperties, look for string class names and push + them into a stack, regardless of whether the property's value is a string, array or object. For example: + { + extend: 'Ext.MyClass', + requires: ['Ext.some.OtherClass'], + mixins: { + observable: 'Ext.util.Observable'; + } + } + which will later be transformed into: + { + extend: Ext.MyClass, + requires: [Ext.some.OtherClass], + mixins: { + observable: Ext.util.Observable; + } + } + */ + + for (i = 0,ln = dependencyProperties.length; i < ln; i++) { + propertyName = dependencyProperties[i]; + + if (data.hasOwnProperty(propertyName)) { + propertyValue = data[propertyName]; + + if (typeof propertyValue == 'string') { + dependencies.push(propertyValue); + } + else if (propertyValue instanceof Array) { + for (j = 0, subLn = propertyValue.length; j < subLn; j++) { + value = propertyValue[j]; + + if (typeof value == 'string') { + dependencies.push(value); + } + } + } + else if (typeof propertyValue != 'function') { + for (j in propertyValue) { + if (propertyValue.hasOwnProperty(j)) { + value = propertyValue[j]; + + if (typeof value == 'string') { + dependencies.push(value); + } + } + } + } + } + } + + if (dependencies.length === 0) { + return; + } + + var deadlockPath = [], + detectDeadlock; + + /* + Automatically detect deadlocks before-hand, + will throw an error with detailed path for ease of debugging. Examples of deadlock cases: + + - A extends B, then B extends A + - A requires B, B requires C, then C requires A + + The detectDeadlock function will recursively transverse till the leaf, hence it can detect deadlocks + no matter how deep the path is. + */ + + if (className) { + requiresMap[className] = dependencies; + requiredMap = Loader.requiredByMap || (Loader.requiredByMap = {}); + + for (i = 0,ln = dependencies.length; i < ln; i++) { + dependency = dependencies[i]; + (requiredMap[dependency] || (requiredMap[dependency] = [])).push(className); + } + detectDeadlock = function(cls) { + deadlockPath.push(cls); + + if (requiresMap[cls]) { + if (Ext.Array.contains(requiresMap[cls], className)) { + throw new Error("Deadlock detected while loading dependencies! '" + className + "' and '" + + deadlockPath[1] + "' " + "mutually require each other. Path: " + + deadlockPath.join(' -> ') + " -> " + deadlockPath[0]); + } + + for (i = 0,ln = requiresMap[cls].length; i < ln; i++) { + detectDeadlock(requiresMap[cls][i]); + } + } + }; + + detectDeadlock(className); + } + + + Loader.require(dependencies, function() { + for (i = 0,ln = dependencyProperties.length; i < ln; i++) { + propertyName = dependencyProperties[i]; + + if (data.hasOwnProperty(propertyName)) { + propertyValue = data[propertyName]; + + if (typeof propertyValue == 'string') { + data[propertyName] = Manager.get(propertyValue); + } + else if (propertyValue instanceof Array) { + for (j = 0, subLn = propertyValue.length; j < subLn; j++) { + value = propertyValue[j]; + + if (typeof value == 'string') { + data[propertyName][j] = Manager.get(value); + } + } + } + else if (typeof propertyValue != 'function') { + for (var k in propertyValue) { + if (propertyValue.hasOwnProperty(k)) { + value = propertyValue[k]; + + if (typeof value == 'string') { + data[propertyName][k] = Manager.get(value); + } + } + } + } + } + } + + continueFn.call(me, cls, data, hooks); + }); + + return false; + }, true, 'after', 'className'); + + /** + * @cfg {String[]} uses + * @member Ext.Class + * List of optional classes to load together with this class. These aren't neccessarily loaded before + * this class is created, but are guaranteed to be available before Ext.onReady listeners are + * invoked. For example: + * + * Ext.define('Mother', { + * uses: ['Child'], + * giveBirth: function() { + * // This code might, or might not work: + * // return new Child(); + * + * // Instead use Ext.create() to load the class at the spot if not loaded already: + * return Ext.create('Child'); + * } + * }); + */ + Manager.registerPostprocessor('uses', function(name, cls, data) { + Ext.classSystemMonitor && Ext.classSystemMonitor(cls, 'Ext.Loader#usesPostprocessor', arguments); + + var uses = data.uses; + if (uses) { + Loader.addUsedClasses(uses); + } + }); + + Manager.onCreated(Loader.historyPush); +}; + +// simple mechanism for automated means of injecting large amounts of dependency info +// at the appropriate time in the load cycle +if (Ext._classPathMetadata) { + Ext.Loader.addClassPathMappings(Ext._classPathMetadata); + Ext._classPathMetadata = null; +} + +// initalize the default path of the framework +(function() { + var scripts = document.getElementsByTagName('script'), + currentScript = scripts[scripts.length - 1], + src = currentScript.src, + path = src.substring(0, src.lastIndexOf('/') + 1), + Loader = Ext.Loader; + + if(src.indexOf("/platform/core/src/class/") != -1) { + path = path + "../../../../extjs/"; + } else if(src.indexOf("/core/src/class/") != -1) { + path = path + "../../../"; + } + + Loader.setConfig({ + enabled: true, + disableCaching: true, + paths: { + 'Ext': path + 'src' + } + }); +})(); + +// allows a tools like dynatrace to deterministically detect onReady state by invoking +// a callback (intended for external consumption) +Ext._endTime = new Date().getTime(); +if (Ext._beforereadyhandler){ + Ext._beforereadyhandler(); +} + +//@tag foundation,core +//@require ../class/Loader.js + +/** + * @author Brian Moeskau + * @docauthor Brian Moeskau + * + * A wrapper class for the native JavaScript Error object that adds a few useful capabilities for handling + * errors in an Ext application. When you use Ext.Error to {@link #raise} an error from within any class that + * uses the Ext 4 class system, the Error class can automatically add the source class and method from which + * the error was raised. It also includes logic to automatically log the error to the console, if available, + * with additional metadata about the error. In all cases, the error will always be thrown at the end so that + * execution will halt. + * + * Ext.Error also offers a global error {@link #handle handling} method that can be overridden in order to + * handle application-wide errors in a single spot. You can optionally {@link #ignore} errors altogether, + * although in a real application it's usually a better idea to override the handling function and perform + * logging or some other method of reporting the errors in a way that is meaningful to the application. + * + * At its simplest you can simply raise an error as a simple string from within any code: + * + * Example usage: + * + * Ext.Error.raise('Something bad happened!'); + * + * If raised from plain JavaScript code, the error will be logged to the console (if available) and the message + * displayed. In most cases however you'll be raising errors from within a class, and it may often be useful to add + * additional metadata about the error being raised. The {@link #raise} method can also take a config object. + * In this form the `msg` attribute becomes the error description, and any other data added to the config gets + * added to the error object and, if the console is available, logged to the console for inspection. + * + * Example usage: + * + * Ext.define('Ext.Foo', { + * doSomething: function(option){ + * if (someCondition === false) { + * Ext.Error.raise({ + * msg: 'You cannot do that!', + * option: option, // whatever was passed into the method + * 'error code': 100 // other arbitrary info + * }); + * } + * } + * }); + * + * If a console is available (that supports the `console.dir` function) you'll see console output like: + * + * An error was raised with the following data: + * option: Object { foo: "bar"} + * foo: "bar" + * error code: 100 + * msg: "You cannot do that!" + * sourceClass: "Ext.Foo" + * sourceMethod: "doSomething" + * + * uncaught exception: You cannot do that! + * + * As you can see, the error will report exactly where it was raised and will include as much information as the + * raising code can usefully provide. + * + * If you want to handle all application errors globally you can simply override the static {@link #handle} method + * and provide whatever handling logic you need. If the method returns true then the error is considered handled + * and will not be thrown to the browser. If anything but true is returned then the error will be thrown normally. + * + * Example usage: + * + * Ext.Error.handle = function(err) { + * if (err.someProperty == 'NotReallyAnError') { + * // maybe log something to the application here if applicable + * return true; + * } + * // any non-true return value (including none) will cause the error to be thrown + * } + * + */ +Ext.Error = Ext.extend(Error, { + statics: { + /** + * @property {Boolean} ignore + * Static flag that can be used to globally disable error reporting to the browser if set to true + * (defaults to false). Note that if you ignore Ext errors it's likely that some other code may fail + * and throw a native JavaScript error thereafter, so use with caution. In most cases it will probably + * be preferable to supply a custom error {@link #handle handling} function instead. + * + * Example usage: + * + * Ext.Error.ignore = true; + * + * @static + */ + ignore: false, + + /** + * @property {Boolean} notify + * Static flag that can be used to globally control error notification to the user. Unlike + * Ex.Error.ignore, this does not effect exceptions. They are still thrown. This value can be + * set to false to disable the alert notification (default is true for IE6 and IE7). + * + * Only the first error will generate an alert. Internally this flag is set to false when the + * first error occurs prior to displaying the alert. + * + * This flag is not used in a release build. + * + * Example usage: + * + * Ext.Error.notify = false; + * + * @static + */ + //notify: Ext.isIE6 || Ext.isIE7, + + /** + * Raise an error that can include additional data and supports automatic console logging if available. + * You can pass a string error message or an object with the `msg` attribute which will be used as the + * error message. The object can contain any other name-value attributes (or objects) to be logged + * along with the error. + * + * Note that after displaying the error message a JavaScript error will ultimately be thrown so that + * execution will halt. + * + * Example usage: + * + * Ext.Error.raise('A simple string error message'); + * + * // or... + * + * Ext.define('Ext.Foo', { + * doSomething: function(option){ + * if (someCondition === false) { + * Ext.Error.raise({ + * msg: 'You cannot do that!', + * option: option, // whatever was passed into the method + * 'error code': 100 // other arbitrary info + * }); + * } + * } + * }); + * + * @param {String/Object} err The error message string, or an object containing the attribute "msg" that will be + * used as the error message. Any other data included in the object will also be logged to the browser console, + * if available. + * @static + */ + raise: function(err){ + err = err || {}; + if (Ext.isString(err)) { + err = { msg: err }; + } + + var method = this.raise.caller, + msg; + + if (method) { + if (method.$name) { + err.sourceMethod = method.$name; + } + if (method.$owner) { + err.sourceClass = method.$owner.$className; + } + } + + if (Ext.Error.handle(err) !== true) { + msg = Ext.Error.prototype.toString.call(err); + + Ext.log({ + msg: msg, + level: 'error', + dump: err, + stack: true + }); + + throw new Ext.Error(err); + } + }, + + /** + * Globally handle any Ext errors that may be raised, optionally providing custom logic to + * handle different errors individually. Return true from the function to bypass throwing the + * error to the browser, otherwise the error will be thrown and execution will halt. + * + * Example usage: + * + * Ext.Error.handle = function(err) { + * if (err.someProperty == 'NotReallyAnError') { + * // maybe log something to the application here if applicable + * return true; + * } + * // any non-true return value (including none) will cause the error to be thrown + * } + * + * @param {Ext.Error} err The Ext.Error object being raised. It will contain any attributes that were originally + * raised with it, plus properties about the method and class from which the error originated (if raised from a + * class that uses the Ext 4 class system). + * @static + */ + handle: function(){ + return Ext.Error.ignore; + } + }, + + // This is the standard property that is the name of the constructor. + name: 'Ext.Error', + + /** + * Creates new Error object. + * @param {String/Object} config The error message string, or an object containing the + * attribute "msg" that will be used as the error message. Any other data included in + * the object will be applied to the error instance and logged to the browser console, if available. + */ + constructor: function(config){ + if (Ext.isString(config)) { + config = { msg: config }; + } + + var me = this; + + Ext.apply(me, config); + + me.message = me.message || me.msg; // 'message' is standard ('msg' is non-standard) + // note: the above does not work in old WebKit (me.message is readonly) (Safari 4) + }, + + /** + * Provides a custom string representation of the error object. This is an override of the base JavaScript + * `Object.toString` method, which is useful so that when logged to the browser console, an error object will + * be displayed with a useful message instead of `[object Object]`, the default `toString` result. + * + * The default implementation will include the error message along with the raising class and method, if available, + * but this can be overridden with a custom implementation either at the prototype level (for all errors) or on + * a particular error instance, if you want to provide a custom description that will show up in the console. + * @return {String} The error message. If raised from within the Ext 4 class system, the error message will also + * include the raising class and method names, if available. + */ + toString: function(){ + var me = this, + className = me.sourceClass ? me.sourceClass : '', + methodName = me.sourceMethod ? '.' + me.sourceMethod + '(): ' : '', + msg = me.msg || '(No description provided)'; + + return className + methodName + msg; + } +}); + +/* + * Create a function that will throw an error if called (in debug mode) with a message that + * indicates the method has been removed. + * @param {String} suggestion Optional text to include in the message (a workaround perhaps). + * @return {Function} The generated function. + * @private + */ +Ext.deprecated = function (suggestion) { + if (!suggestion) { + suggestion = ''; + } + + function fail () { + Ext.Error.raise('The method "' + fail.$owner.$className + '.' + fail.$name + + '" has been removed. ' + suggestion); + } + + return fail; + return Ext.emptyFn; +}; + +/* + * This mechanism is used to notify the user of the first error encountered on the page. This + * was previously internal to Ext.Error.raise and is a desirable feature since errors often + * slip silently under the radar. It cannot live in Ext.Error.raise since there are times + * where exceptions are handled in a try/catch. + */ +(function () { + var timer, errors = 0, + win = Ext.global, + msg; + + if (typeof window === 'undefined') { + return; // build system or some such environment... + } + + // This method is called to notify the user of the current error status. + function notify () { + var counters = Ext.log.counters, + supports = Ext.supports, + hasOnError = supports && supports.WindowOnError; // TODO - timing + + // Put log counters to the status bar (for most browsers): + if (counters && (counters.error + counters.warn + counters.info + counters.log)) { + msg = [ 'Logged Errors:',counters.error, 'Warnings:',counters.warn, + 'Info:',counters.info, 'Log:',counters.log].join(' '); + if (errors) { + msg = '*** Errors: ' + errors + ' - ' + msg; + } else if (counters.error) { + msg = '*** ' + msg; + } + win.status = msg; + } + + // Display an alert on the first error: + if (!Ext.isDefined(Ext.Error.notify)) { + Ext.Error.notify = Ext.isIE6 || Ext.isIE7; // TODO - timing + } + if (Ext.Error.notify && (hasOnError ? errors : (counters && counters.error))) { + Ext.Error.notify = false; + + if (timer) { + win.clearInterval(timer); // ticks can queue up so stop... + timer = null; + } + + alert('Unhandled error on page: See console or log'); + poll(); + } + } + + // Sets up polling loop. This is the only way to know about errors in some browsers + // (Opera/Safari) and is the only way to update the status bar for warnings and other + // non-errors. + function poll () { + timer = win.setInterval(notify, 1000); + } + + // window.onerror sounds ideal but it prevents the built-in error dialog from doing + // its (better) thing. + poll(); +}()); + +//@tag extras,core +//@require ../lang/Error.js + +/** + * Modified version of [Douglas Crockford's JSON.js][dc] that doesn't + * mess with the Object prototype. + * + * [dc]: http://www.json.org/js.html + * + * @singleton + */ +Ext.JSON = (new(function() { + var me = this, + encodingFunction, + decodingFunction, + useNative = null, + useHasOwn = !! {}.hasOwnProperty, + isNative = function() { + if (useNative === null) { + useNative = Ext.USE_NATIVE_JSON && window.JSON && JSON.toString() == '[object JSON]'; + } + return useNative; + }, + pad = function(n) { + return n < 10 ? "0" + n : n; + }, + doDecode = function(json) { + return eval("(" + json + ')'); + }, + doEncode = function(o, newline) { + // http://jsperf.com/is-undefined + if (o === null || o === undefined) { + return "null"; + } else if (Ext.isDate(o)) { + return Ext.JSON.encodeDate(o); + } else if (Ext.isString(o)) { + return Ext.JSON.encodeString(o); + } else if (typeof o == "number") { + //don't use isNumber here, since finite checks happen inside isNumber + return isFinite(o) ? String(o) : "null"; + } else if (Ext.isBoolean(o)) { + return String(o); + } + // Allow custom zerialization by adding a toJSON method to any object type. + // Date/String have a toJSON in some environments, so check these first. + else if (o.toJSON) { + return o.toJSON(); + } else if (Ext.isArray(o)) { + return encodeArray(o, newline); + } else if (Ext.isObject(o)) { + return encodeObject(o, newline); + } else if (typeof o === "function") { + return "null"; + } + return 'undefined'; + }, + m = { + "\b": '\\b', + "\t": '\\t', + "\n": '\\n', + "\f": '\\f', + "\r": '\\r', + '"': '\\"', + "\\": '\\\\', + '\x0b': '\\u000b' //ie doesn't handle \v + }, + charToReplace = /[\\\"\x00-\x1f\x7f-\uffff]/g, + encodeString = function(s) { + return '"' + s.replace(charToReplace, function(a) { + var c = m[a]; + return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"'; + }, + + encodeArrayPretty = function(o, newline) { + var len = o.length, + cnewline = newline + ' ', + sep = ',' + cnewline, + a = ["[", cnewline], // Note newline in case there are no members + i; + + for (i = 0; i < len; i += 1) { + a.push(Ext.JSON.encodeValue(o[i], cnewline), sep); + } + + // Overwrite trailing comma (or empty string) + a[a.length - 1] = newline + ']'; + + return a.join(''); + }, + + encodeObjectPretty = function(o, newline) { + var cnewline = newline + ' ', + sep = ',' + cnewline, + a = ["{", cnewline], // Note newline in case there are no members + i, val; + + for (i in o) { + val = o[i]; + if (!useHasOwn || o.hasOwnProperty(i)) { + // To match JSON.stringify, we shouldn't encode functions or undefined + if (typeof val === 'function' || val === undefined) { + continue; + } + a.push(Ext.JSON.encodeValue(i) + ': ' + Ext.JSON.encodeValue(val, cnewline), sep); + } + } + + // Overwrite trailing comma (or empty string) + a[a.length - 1] = newline + '}'; + + return a.join(''); + }, + + encodeArray = function(o, newline) { + if (newline) { + return encodeArrayPretty(o, newline); + } + + var a = ["[", ""], // Note empty string in case there are no serializable members. + len = o.length, + i; + for (i = 0; i < len; i += 1) { + a.push(Ext.JSON.encodeValue(o[i]), ','); + } + // Overwrite trailing comma (or empty string) + a[a.length - 1] = ']'; + return a.join(""); + }, + + encodeObject = function(o, newline) { + if (newline) { + return encodeObjectPretty(o, newline); + } + + var a = ["{", ""], // Note empty string in case there are no serializable members. + i, val; + for (i in o) { + val = o[i]; + if (!useHasOwn || o.hasOwnProperty(i)) { + // To match JSON.stringify, we shouldn't encode functions or undefined + if (typeof val === 'function' || val === undefined) { + continue; + } + a.push(Ext.JSON.encodeValue(i), ":", Ext.JSON.encodeValue(val), ','); + + } + } + // Overwrite trailing comma (or empty string) + a[a.length - 1] = '}'; + return a.join(""); + }; + + /** + * Encodes a String. This returns the actual string which is inserted into the JSON string as the literal + * expression. **The returned value includes enclosing double quotation marks.** + * + * To override this: + * + * Ext.JSON.encodeString = function(s) { + * return 'Foo' + s; + * }; + * + * @param {String} s The String to encode + * @return {String} The string literal to use in a JSON string. + * @method + */ + me.encodeString = encodeString; + + /** + * The function which {@link #encode} uses to encode all javascript values to their JSON representations + * when {@link Ext#USE_NATIVE_JSON} is `false`. + * + * This is made public so that it can be replaced with a custom implementation. + * + * @param {Object} o Any javascript value to be converted to its JSON representation + * @return {String} The JSON representation of the passed value. + * @method + */ + me.encodeValue = doEncode; + + /** + * Encodes a Date. This returns the actual string which is inserted into the JSON string as the literal + * expression. **The returned value includes enclosing double quotation marks.** + * + * The default return format is `"yyyy-mm-ddThh:mm:ss"`. + * + * To override this: + * + * Ext.JSON.encodeDate = function(d) { + * return Ext.Date.format(d, '"Y-m-d"'); + * }; + * + * @param {Date} d The Date to encode + * @return {String} The string literal to use in a JSON string. + */ + me.encodeDate = function(o) { + return '"' + o.getFullYear() + "-" + + pad(o.getMonth() + 1) + "-" + + pad(o.getDate()) + "T" + + pad(o.getHours()) + ":" + + pad(o.getMinutes()) + ":" + + pad(o.getSeconds()) + '"'; + }; + + /** + * Encodes an Object, Array or other value. + * + * If the environment's native JSON encoding is not being used ({@link Ext#USE_NATIVE_JSON} is not set, + * or the environment does not support it), then ExtJS's encoding will be used. This allows the developer + * to add a `toJSON` method to their classes which need serializing to return a valid JSON representation + * of the object. + * + * @param {Object} o The variable to encode + * @return {String} The JSON string + */ + me.encode = function(o) { + if (!encodingFunction) { + // setup encoding function on first access + encodingFunction = isNative() ? JSON.stringify : me.encodeValue; + } + return encodingFunction(o); + }; + + /** + * Decodes (parses) a JSON string to an object. If the JSON is invalid, this function throws + * a SyntaxError unless the safe option is set. + * + * @param {String} json The JSON string + * @param {Boolean} [safe=false] True to return null, false to throw an exception if the JSON is invalid. + * @return {Object} The resulting object + */ + me.decode = function(json, safe) { + if (!decodingFunction) { + // setup decoding function on first access + decodingFunction = isNative() ? JSON.parse : doDecode; + } + try { + return decodingFunction(json); + } catch (e) { + if (safe === true) { + return null; + } + Ext.Error.raise({ + sourceClass: "Ext.JSON", + sourceMethod: "decode", + msg: "You're trying to decode an invalid JSON String: " + json + }); + } + }; +})()); +/** + * Shorthand for {@link Ext.JSON#encode} + * @member Ext + * @method encode + * @inheritdoc Ext.JSON#encode + */ +Ext.encode = Ext.JSON.encode; +/** + * Shorthand for {@link Ext.JSON#decode} + * @member Ext + * @method decode + * @inheritdoc Ext.JSON#decode + */ +Ext.decode = Ext.JSON.decode; + +//@tag extras,core +//@require misc/JSON.js + +/** + * @class Ext + * + * The Ext namespace (global object) encapsulates all classes, singletons, and + * utility methods provided by Sencha's libraries. + * + * Most user interface Components are at a lower level of nesting in the namespace, + * but many common utility functions are provided as direct properties of the Ext namespace. + * + * Also many frequently used methods from other classes are provided as shortcuts + * within the Ext namespace. For example {@link Ext#getCmp Ext.getCmp} aliases + * {@link Ext.ComponentManager#get Ext.ComponentManager.get}. + * + * Many applications are initiated with {@link Ext#onReady Ext.onReady} which is + * called once the DOM is ready. This ensures all scripts have been loaded, + * preventing dependency issues. For example: + * + * Ext.onReady(function(){ + * new Ext.Component({ + * renderTo: document.body, + * html: 'DOM ready!' + * }); + * }); + * + * For more information about how to use the Ext classes, see: + * + * - The Learning Center + * - The FAQ + * - The forums + * + * @singleton + */ +Ext.apply(Ext, { + userAgent: navigator.userAgent.toLowerCase(), + cache: {}, + idSeed: 1000, + windowId: 'ext-window', + documentId: 'ext-document', + + /** + * True when the document is fully initialized and ready for action + */ + isReady: false, + + /** + * True to automatically uncache orphaned Ext.Elements periodically + */ + enableGarbageCollector: true, + + /** + * True to automatically purge event listeners during garbageCollection. + */ + enableListenerCollection: true, + + /** + * @property {Object} rootHierarchyState the top level hierarchy state to which + * all other hierarchy states are chained. If there is a viewport instance, + * this object becomes the viewport's heirarchyState. See also + * {@link Ext.AbstractComponent#getHierarchyState} + * @private + */ + rootHierarchyState: {}, + + addCacheEntry: function(id, el, dom) { + dom = dom || el.dom; + + if (!dom) { + // Without the DOM node we can't GC the entry + Ext.Error.raise('Cannot add an entry to the element cache without the DOM node'); + } + + var cache = Ext.cache, + key = id || (el && el.id) || dom.id, + entry = cache[key] || (cache[key] = { + data: {}, + events: {}, + + dom: dom, + + // Skip garbage collection for special elements (window, document, iframes) + skipGarbageCollection: !!(dom.getElementById || dom.navigator) + }); + + if (el) { + el.$cache = entry; + // Inject the back link from the cache in case the cache entry + // had already been created by Ext.fly. Ext.fly creates a cache entry with no el link. + entry.el = el; + } + + return entry; + }, + + updateCacheEntry: function(cacheItem, dom){ + cacheItem.dom = dom; + if (cacheItem.el) { + cacheItem.el.dom = dom; + } + return cacheItem; + }, + + /** + * Generates unique ids. If the element already has an id, it is unchanged + * @param {HTMLElement/Ext.Element} [el] The element to generate an id for + * @param {String} prefix (optional) Id prefix (defaults "ext-gen") + * @return {String} The generated Id. + */ + id: function(el, prefix) { + var me = this, + sandboxPrefix = ''; + el = Ext.getDom(el, true) || {}; + if (el === document) { + el.id = me.documentId; + } + else if (el === window) { + el.id = me.windowId; + } + if (!el.id) { + if (me.isSandboxed) { + sandboxPrefix = Ext.sandboxName.toLowerCase() + '-'; + } + el.id = sandboxPrefix + (prefix || "ext-gen") + (++Ext.idSeed); + } + return el.id; + }, + + escapeId: (function(){ + var validIdRe = /^[a-zA-Z_][a-zA-Z0-9_\-]*$/i, + escapeRx = /([\W]{1})/g, + leadingNumRx = /^(\d)/g, + escapeFn = function(match, capture){ + return "\\" + capture; + }, + numEscapeFn = function(match, capture){ + return '\\00' + capture.charCodeAt(0).toString(16) + ' '; + }; + + return function(id) { + return validIdRe.test(id) + ? id + // replace the number portion last to keep the trailing ' ' + // from being escaped + : id.replace(escapeRx, escapeFn) + .replace(leadingNumRx, numEscapeFn); + }; + }()), + + /** + * Returns the current document body as an {@link Ext.Element}. + * @return {Ext.Element} The document body + */ + getBody: (function() { + var body; + return function() { + return body || (body = Ext.get(document.body)); + }; + }()), + + /** + * Returns the current document head as an {@link Ext.Element}. + * @return {Ext.Element} The document head + * @method + */ + getHead: (function() { + var head; + return function() { + return head || (head = Ext.get(document.getElementsByTagName("head")[0])); + }; + }()), + + /** + * Returns the current HTML document object as an {@link Ext.Element}. + * @return {Ext.Element} The document + */ + getDoc: (function() { + var doc; + return function() { + return doc || (doc = Ext.get(document)); + }; + }()), + + /** + * Returns the current orientation of the mobile device + * @return {String} Either 'portrait' or 'landscape' + */ + getOrientation: function() { + return window.innerHeight > window.innerWidth ? 'portrait' : 'landscape'; + }, + + /** + * Attempts to destroy any objects passed to it by removing all event listeners, removing them from the + * DOM (if applicable) and calling their destroy functions (if available). This method is primarily + * intended for arguments of type {@link Ext.Element} and {@link Ext.Component}, but any subclass of + * {@link Ext.util.Observable} can be passed in. Any number of elements and/or components can be + * passed into this function in a single call as separate arguments. + * + * @param {Ext.Element/Ext.Component/Ext.Element[]/Ext.Component[]...} args + * An {@link Ext.Element}, {@link Ext.Component}, or an Array of either of these to destroy + */ + destroy: function() { + var ln = arguments.length, + i, arg; + + for (i = 0; i < ln; i++) { + arg = arguments[i]; + if (arg) { + if (Ext.isArray(arg)) { + this.destroy.apply(this, arg); + } + else if (Ext.isFunction(arg.destroy)) { + arg.destroy(); + } + else if (arg.dom) { + arg.remove(); + } + } + } + }, + + /** + * Execute a callback function in a particular scope. If no function is passed the call is ignored. + * + * For example, these lines are equivalent: + * + * Ext.callback(myFunc, this, [arg1, arg2]); + * Ext.isFunction(myFunc) && myFunc.apply(this, [arg1, arg2]); + * + * @param {Function} callback The callback to execute + * @param {Object} [scope] The scope to execute in + * @param {Array} [args] The arguments to pass to the function + * @param {Number} [delay] Pass a number to delay the call by a number of milliseconds. + */ + callback: function(callback, scope, args, delay){ + if(Ext.isFunction(callback)){ + args = args || []; + scope = scope || window; + if (delay) { + Ext.defer(callback, delay, scope, args); + } else { + callback.apply(scope, args); + } + } + }, + + /** + * Alias for {@link Ext.String#htmlEncode}. + * @inheritdoc Ext.String#htmlEncode + * @ignore + */ + htmlEncode : function(value) { + return Ext.String.htmlEncode(value); + }, + + /** + * Alias for {@link Ext.String#htmlDecode}. + * @inheritdoc Ext.String#htmlDecode + * @ignore + */ + htmlDecode : function(value) { + return Ext.String.htmlDecode(value); + }, + + /** + * Alias for {@link Ext.String#urlAppend}. + * @inheritdoc Ext.String#urlAppend + * @ignore + */ + urlAppend : function(url, s) { + return Ext.String.urlAppend(url, s); + } +}); + + +Ext.ns = Ext.namespace; + +// for old browsers +window.undefined = window.undefined; + +/** + * @class Ext + */ +(function(){ +/* +FF 3.6 - Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17 +FF 4.0.1 - Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 +FF 5.0 - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0 + +IE6 - Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;) +IE7 - Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1;) +IE8 - Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +IE9 - Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)] +IE10 - Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8) + +Chrome 11 - Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.60 Safari/534.24 + +Safari 5 - Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1 + +Opera 11.11 - Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11 +*/ + var check = function(regex){ + return regex.test(Ext.userAgent); + }, + isStrict = document.compatMode == "CSS1Compat", + version = function (is, regex) { + var m; + return (is && (m = regex.exec(Ext.userAgent))) ? parseFloat(m[1]) : 0; + }, + docMode = document.documentMode, + isOpera = check(/opera/), + isOpera10_5 = isOpera && check(/version\/10\.5/), + isChrome = check(/\bchrome\b/), + isWebKit = check(/webkit/), + isSafari = !isChrome && check(/safari/), + isSafari2 = isSafari && check(/applewebkit\/4/), // unique to Safari 2 + isSafari3 = isSafari && check(/version\/3/), + isSafari4 = isSafari && check(/version\/4/), + isSafari5_0 = isSafari && check(/version\/5\.0/), + isSafari5 = isSafari && check(/version\/5/), + isIE = !isOpera && check(/msie/), + isIE7 = isIE && ((check(/msie 7/) && docMode != 8 && docMode != 9 && docMode != 10) || docMode == 7), + isIE8 = isIE && ((check(/msie 8/) && docMode != 7 && docMode != 9 && docMode != 10) || docMode == 8), + isIE9 = isIE && ((check(/msie 9/) && docMode != 7 && docMode != 8 && docMode != 10) || docMode == 9), + isIE10 = isIE && ((check(/msie 10/) && docMode != 7 && docMode != 8 && docMode != 9) || docMode == 10), + isIE6 = isIE && check(/msie 6/), + isGecko = !isWebKit && check(/gecko/), + isGecko3 = isGecko && check(/rv:1\.9/), + isGecko4 = isGecko && check(/rv:2\.0/), + isGecko5 = isGecko && check(/rv:5\./), + isGecko10 = isGecko && check(/rv:10\./), + isFF3_0 = isGecko3 && check(/rv:1\.9\.0/), + isFF3_5 = isGecko3 && check(/rv:1\.9\.1/), + isFF3_6 = isGecko3 && check(/rv:1\.9\.2/), + isWindows = check(/windows|win32/), + isMac = check(/macintosh|mac os x/), + isLinux = check(/linux/), + scrollbarSize = null, + chromeVersion = version(true, /\bchrome\/(\d+\.\d+)/), + firefoxVersion = version(true, /\bfirefox\/(\d+\.\d+)/), + ieVersion = version(isIE, /msie (\d+\.\d+)/), + operaVersion = version(isOpera, /version\/(\d+\.\d+)/), + safariVersion = version(isSafari, /version\/(\d+\.\d+)/), + webKitVersion = version(isWebKit, /webkit\/(\d+\.\d+)/), + isSecure = /^https/i.test(window.location.protocol), + nullLog; + + // remove css image flicker + try { + document.execCommand("BackgroundImageCache", false, true); + } catch(e) {} + + + var primitiveRe = /string|number|boolean/; + function dumpObject (object) { + var member, type, value, name, + members = []; + + // Cannot use Ext.encode since it can recurse endlessly (if we're lucky) + // ...and the data could be prettier! + for (name in object) { + if (object.hasOwnProperty(name)) { + value = object[name]; + + type = typeof value; + if (type == "function") { + continue; + } + + if (type == 'undefined') { + member = type; + } else if (value === null || primitiveRe.test(type) || Ext.isDate(value)) { + member = Ext.encode(value); + } else if (Ext.isArray(value)) { + member = '[ ]'; + } else if (Ext.isObject(value)) { + member = '{ }'; + } else { + member = type; + } + members.push(Ext.encode(name) + ': ' + member); + } + } + + if (members.length) { + return ' \nData: {\n ' + members.join(',\n ') + '\n}'; + } + return ''; + } + + function log (message) { + var options, dump, + con = Ext.global.console, + level = 'log', + indent = log.indent || 0, + stack, + out, + max; + + log.indent = indent; + + if (typeof message != 'string') { + options = message; + message = options.msg || ''; + level = options.level || level; + dump = options.dump; + stack = options.stack; + + if (options.indent) { + ++log.indent; + } else if (options.outdent) { + log.indent = indent = Math.max(indent - 1, 0); + } + + if (dump && !(con && con.dir)) { + message += dumpObject(dump); + dump = null; + } + } + + if (arguments.length > 1) { + message += Array.prototype.slice.call(arguments, 1).join(''); + } + + message = indent ? Ext.String.repeat(' ', log.indentSize * indent) + message : message; + // w/o console, all messages are equal, so munge the level into the message: + if (level != 'log') { + message = '[' + level.charAt(0).toUpperCase() + '] ' + message; + } + + // Not obvious, but 'console' comes and goes when Firebug is turned on/off, so + // an early test may fail either direction if Firebug is toggled. + // + if (con) { // if (Firebug-like console) + if (con[level]) { + con[level](message); + } else { + con.log(message); + } + + if (dump) { + con.dir(dump); + } + + if (stack && con.trace) { + // Firebug's console.error() includes a trace already... + if (!con.firebug || level != 'error') { + con.trace(); + } + } + } else { + if (Ext.isOpera) { + opera.postError(message); + } else { + out = log.out; + max = log.max; + + if (out.length >= max) { + // this formula allows out.max to change (via debugger), where the + // more obvious "max/4" would not quite be the same + Ext.Array.erase(out, 0, out.length - 3 * Math.floor(max / 4)); // keep newest 75% + } + + out.push(message); + } + } + + // Mostly informational, but the Ext.Error notifier uses them: + ++log.count; + ++log.counters[level]; + } + + function logx (level, args) { + if (typeof args[0] == 'string') { + args.unshift({}); + } + args[0].level = level; + log.apply(this, args); + } + + log.error = function () { + logx('error', Array.prototype.slice.call(arguments)); + }; + log.info = function () { + logx('info', Array.prototype.slice.call(arguments)); + }; + log.warn = function () { + logx('warn', Array.prototype.slice.call(arguments)); + }; + + log.count = 0; + log.counters = { error: 0, warn: 0, info: 0, log: 0 }; + log.indentSize = 2; + log.out = []; + log.max = 750; + log.show = function () { + window.open('','extlog').document.write([ + ''].join('')); + }; + + nullLog = function () {}; + nullLog.info = nullLog.warn = nullLog.error = Ext.emptyFn; + + // also update Version.js + Ext.setVersion('extjs', '4.2.0.663'); + Ext.apply(Ext, { + /** + * @property {String} SSL_SECURE_URL + * URL to a blank file used by Ext when in secure mode for iframe src and onReady src + * to prevent the IE insecure content warning (`'about:blank'`, except for IE + * in secure mode, which is `'javascript:""'`). + */ + SSL_SECURE_URL : isSecure && isIE ? 'javascript:\'\'' : 'about:blank', + + /** + * @property {Boolean} enableFx + * True if the {@link Ext.fx.Anim} Class is available. + */ + + plainTableCls: Ext.buildSettings.baseCSSPrefix + 'table-plain', + + plainListCls: Ext.buildSettings.baseCSSPrefix + 'list-plain', + + /** + * @property {Boolean} enableNestedListenerRemoval + * **Experimental.** True to cascade listener removal to child elements when an element + * is removed. Currently not optimized for performance. + */ + enableNestedListenerRemoval : false, + + /** + * @property {Boolean} USE_NATIVE_JSON + * Indicates whether to use native browser parsing for JSON methods. + * This option is ignored if the browser does not support native JSON methods. + * + * **Note:** Native JSON methods will not work with objects that have functions. + * Also, property names must be quoted, otherwise the data will not parse. + */ + USE_NATIVE_JSON : false, + + /** + * Returns the dom node for the passed String (id), dom node, or Ext.Element. + * Optional 'strict' flag is needed for IE since it can return 'name' and + * 'id' elements by using getElementById. + * + * Here are some examples: + * + * // gets dom node based on id + * var elDom = Ext.getDom('elId'); + * // gets dom node based on the dom node + * var elDom1 = Ext.getDom(elDom); + * + * // If we don't know if we are working with an + * // Ext.Element or a dom node use Ext.getDom + * function(el){ + * var dom = Ext.getDom(el); + * // do something with the dom node + * } + * + * **Note:** the dom node to be found actually needs to exist (be rendered, etc) + * when this method is called to be successful. + * + * @param {String/HTMLElement/Ext.Element} el + * @return HTMLElement + */ + getDom : function(el, strict) { + if (!el || !document) { + return null; + } + if (el.dom) { + return el.dom; + } else { + if (typeof el == 'string') { + var e = Ext.getElementById(el); + // IE returns elements with the 'name' and 'id' attribute. + // we do a strict check to return the element with only the id attribute + if (e && isIE && strict) { + if (el == e.getAttribute('id')) { + return e; + } else { + return null; + } + } + return e; + } else { + return el; + } + } + }, + + /** + * Removes a DOM node from the document. + * + * Removes this element from the document, removes all DOM event listeners, and + * deletes the cache reference. All DOM event listeners are removed from this element. + * If {@link Ext#enableNestedListenerRemoval Ext.enableNestedListenerRemoval} is + * `true`, then DOM event listeners are also removed from all child nodes. + * The body node will be ignored if passed in. + * + * @param {HTMLElement} node The node to remove + * @method + */ + removeNode : isIE6 || isIE7 || isIE8 + ? (function() { + var d; + return function(n){ + if(n && n.tagName.toUpperCase() != 'BODY'){ + (Ext.enableNestedListenerRemoval) ? Ext.EventManager.purgeElement(n) : Ext.EventManager.removeAll(n); + + var cache = Ext.cache, + id = n.id; + + if (cache[id]) { + delete cache[id].dom; + delete cache[id]; + } + + if (isIE8 && n.parentNode) { + n.parentNode.removeChild(n); + } + d = d || document.createElement('div'); + d.appendChild(n); + d.innerHTML = ''; + } + }; + }()) + : function(n) { + if (n && n.parentNode && n.tagName.toUpperCase() != 'BODY') { + (Ext.enableNestedListenerRemoval) ? Ext.EventManager.purgeElement(n) : Ext.EventManager.removeAll(n); + + var cache = Ext.cache, + id = n.id; + + if (cache[id]) { + delete cache[id].dom; + delete cache[id]; + } + + n.parentNode.removeChild(n); + } + }, + + isStrict: isStrict, + + // IE10 quirks behaves like Gecko/WebKit quirks, so don't include it here + isIEQuirks: isIE && (!isStrict && (isIE6 || isIE7 || isIE8 || isIE9)), + + /** + * True if the detected browser is Opera. + * @type Boolean + */ + isOpera : isOpera, + + /** + * True if the detected browser is Opera 10.5x. + * @type Boolean + */ + isOpera10_5 : isOpera10_5, + + /** + * True if the detected browser uses WebKit. + * @type Boolean + */ + isWebKit : isWebKit, + + /** + * True if the detected browser is Chrome. + * @type Boolean + */ + isChrome : isChrome, + + /** + * True if the detected browser is Safari. + * @type Boolean + */ + isSafari : isSafari, + + /** + * True if the detected browser is Safari 3.x. + * @type Boolean + */ + isSafari3 : isSafari3, + + /** + * True if the detected browser is Safari 4.x. + * @type Boolean + */ + isSafari4 : isSafari4, + + /** + * True if the detected browser is Safari 5.x. + * @type Boolean + */ + isSafari5 : isSafari5, + + /** + * True if the detected browser is Safari 5.0.x. + * @type Boolean + */ + isSafari5_0 : isSafari5_0, + + + /** + * True if the detected browser is Safari 2.x. + * @type Boolean + */ + isSafari2 : isSafari2, + + /** + * True if the detected browser is Internet Explorer. + * @type Boolean + */ + isIE : isIE, + + /** + * True if the detected browser is Internet Explorer 6.x. + * @type Boolean + */ + isIE6 : isIE6, + + /** + * True if the detected browser is Internet Explorer 7.x. + * @type Boolean + */ + isIE7 : isIE7, + + /** + * True if the detected browser is Internet Explorer 7.x or lower. + * @type Boolean + */ + isIE7m : isIE6 || isIE7, + + /** + * True if the detected browser is Internet Explorer 7.x or higher. + * @type Boolean + */ + isIE7p : isIE && !isIE6, + + /** + * True if the detected browser is Internet Explorer 8.x. + * @type Boolean + */ + isIE8 : isIE8, + + /** + * True if the detected browser is Internet Explorer 8.x or lower. + * @type Boolean + */ + isIE8m : isIE6 || isIE7 || isIE8, + + /** + * True if the detected browser is Internet Explorer 8.x or higher. + * @type Boolean + */ + isIE8p : isIE && !(isIE6 || isIE7), + + /** + * True if the detected browser is Internet Explorer 9.x. + * @type Boolean + */ + isIE9 : isIE9, + + /** + * True if the detected browser is Internet Explorer 9.x or lower. + * @type Boolean + */ + isIE9m : isIE6 || isIE7 || isIE8 || isIE9, + + /** + * True if the detected browser is Internet Explorer 9.x or higher. + * @type Boolean + */ + isIE9p : isIE && !(isIE6 || isIE7 || isIE8), + + /** + * True if the detected browser is Internet Explorer 10.x. + * @type Boolean + */ + isIE10 : isIE10, + + /** + * True if the detected browser is Internet Explorer 10.x or lower. + * @type Boolean + */ + isIE10m : isIE6 || isIE7 || isIE8 || isIE9 || isIE10, + + /** + * True if the detected browser is Internet Explorer 10.x or higher. + * @type Boolean + */ + isIE10p : isIE && !(isIE6 || isIE7 || isIE8 || isIE9), + + /** + * True if the detected browser uses the Gecko layout engine (e.g. Mozilla, Firefox). + * @type Boolean + */ + isGecko : isGecko, + + /** + * True if the detected browser uses a Gecko 1.9+ layout engine (e.g. Firefox 3.x). + * @type Boolean + */ + isGecko3 : isGecko3, + + /** + * True if the detected browser uses a Gecko 2.0+ layout engine (e.g. Firefox 4.x). + * @type Boolean + */ + isGecko4 : isGecko4, + + /** + * True if the detected browser uses a Gecko 5.0+ layout engine (e.g. Firefox 5.x). + * @type Boolean + */ + isGecko5 : isGecko5, + + /** + * True if the detected browser uses a Gecko 5.0+ layout engine (e.g. Firefox 5.x). + * @type Boolean + */ + isGecko10 : isGecko10, + + /** + * True if the detected browser uses FireFox 3.0 + * @type Boolean + */ + isFF3_0 : isFF3_0, + + /** + * True if the detected browser uses FireFox 3.5 + * @type Boolean + */ + isFF3_5 : isFF3_5, + + /** + * True if the detected browser uses FireFox 3.6 + * @type Boolean + */ + isFF3_6 : isFF3_6, + + /** + * True if the detected browser uses FireFox 4 + * @type Boolean + */ + isFF4 : 4 <= firefoxVersion && firefoxVersion < 5, + + /** + * True if the detected browser uses FireFox 5 + * @type Boolean + */ + isFF5 : 5 <= firefoxVersion && firefoxVersion < 6, + + /** + * True if the detected browser uses FireFox 10 + * @type Boolean + */ + isFF10 : 10 <= firefoxVersion && firefoxVersion < 11, + + /** + * True if the detected platform is Linux. + * @type Boolean + */ + isLinux : isLinux, + + /** + * True if the detected platform is Windows. + * @type Boolean + */ + isWindows : isWindows, + + /** + * True if the detected platform is Mac OS. + * @type Boolean + */ + isMac : isMac, + + /** + * The current version of Chrome (0 if the browser is not Chrome). + * @type Number + */ + chromeVersion: chromeVersion, + + /** + * The current version of Firefox (0 if the browser is not Firefox). + * @type Number + */ + firefoxVersion: firefoxVersion, + + /** + * The current version of IE (0 if the browser is not IE). This does not account + * for the documentMode of the current page, which is factored into {@link #isIE7}, + * {@link #isIE8} and {@link #isIE9}. Thus this is not always true: + * + * Ext.isIE8 == (Ext.ieVersion == 8) + * + * @type Number + */ + ieVersion: ieVersion, + + /** + * The current version of Opera (0 if the browser is not Opera). + * @type Number + */ + operaVersion: operaVersion, + + /** + * The current version of Safari (0 if the browser is not Safari). + * @type Number + */ + safariVersion: safariVersion, + + /** + * The current version of WebKit (0 if the browser does not use WebKit). + * @type Number + */ + webKitVersion: webKitVersion, + + /** + * True if the page is running over SSL + * @type Boolean + */ + isSecure: isSecure, + + /** + * URL to a 1x1 transparent gif image used by Ext to create inline icons with + * CSS background images. In older versions of IE, this defaults to + * "http://sencha.com/s.gif" and you should change this to a URL on your server. + * For other browsers it uses an inline data URL. + * @type String + */ + BLANK_IMAGE_URL : (isIE6 || isIE7) ? '/' + '/www.sencha.com/s.gif' : 'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', + + /** + * Utility method for returning a default value if the passed value is empty. + * + * The value is deemed to be empty if it is: + * + * - null + * - undefined + * - an empty array + * - a zero length string (Unless the `allowBlank` parameter is `true`) + * + * @param {Object} value The value to test + * @param {Object} defaultValue The value to return if the original value is empty + * @param {Boolean} [allowBlank=false] true to allow zero length strings to qualify as non-empty. + * @return {Object} value, if non-empty, else defaultValue + * @deprecated 4.0.0 Use {@link Ext#valueFrom} instead + */ + value : function(v, defaultValue, allowBlank){ + return Ext.isEmpty(v, allowBlank) ? defaultValue : v; + }, + + /** + * Escapes the passed string for use in a regular expression. + * @param {String} str + * @return {String} + * @deprecated 4.0.0 Use {@link Ext.String#escapeRegex} instead + */ + escapeRe : function(s) { + return s.replace(/([-.*+?\^${}()|\[\]\/\\])/g, "\\$1"); + }, + + /** + * Applies event listeners to elements by selectors when the document is ready. + * The event name is specified with an `@` suffix. + * + * Ext.addBehaviors({ + * // add a listener for click on all anchors in element with id foo + * '#foo a@click' : function(e, t){ + * // do something + * }, + * + * // add the same listener to multiple selectors (separated by comma BEFORE the @) + * '#foo a, #bar span.some-class@mouseover' : function(){ + * // do something + * } + * }); + * + * @param {Object} obj The list of behaviors to apply + */ + addBehaviors : function(o){ + if(!Ext.isReady){ + Ext.onReady(function(){ + Ext.addBehaviors(o); + }); + } else { + var cache = {}, // simple cache for applying multiple behaviors to same selector does query multiple times + parts, + b, + s; + for (b in o) { + if ((parts = b.split('@'))[1]) { // for Object prototype breakers + s = parts[0]; + if(!cache[s]){ + cache[s] = Ext.select(s); + } + cache[s].on(parts[1], o[b]); + } + } + cache = null; + } + }, + + /** + * Returns the size of the browser scrollbars. This can differ depending on + * operating system settings, such as the theme or font size. + * @param {Boolean} [force] true to force a recalculation of the value. + * @return {Object} An object containing scrollbar sizes. + * @return {Number} return.width The width of the vertical scrollbar. + * @return {Number} return.height The height of the horizontal scrollbar. + */ + getScrollbarSize: function (force) { + if (!Ext.isReady) { + return {}; + } + + if (force || !scrollbarSize) { + var db = document.body, + div = document.createElement('div'); + + div.style.width = div.style.height = '100px'; + div.style.overflow = 'scroll'; + div.style.position = 'absolute'; + + db.appendChild(div); // now we can measure the div... + + // at least in iE9 the div is not 100px - the scrollbar size is removed! + scrollbarSize = { + width: div.offsetWidth - div.clientWidth, + height: div.offsetHeight - div.clientHeight + }; + + db.removeChild(div); + } + + return scrollbarSize; + }, + + /** + * Utility method for getting the width of the browser's vertical scrollbar. This + * can differ depending on operating system settings, such as the theme or font size. + * + * This method is deprected in favor of {@link #getScrollbarSize}. + * + * @param {Boolean} [force] true to force a recalculation of the value. + * @return {Number} The width of a vertical scrollbar. + * @deprecated + */ + getScrollBarWidth: function(force){ + var size = Ext.getScrollbarSize(force); + return size.width + 2; // legacy fudge factor + }, + + /** + * Copies a set of named properties fom the source object to the destination object. + * + * Example: + * + * ImageComponent = Ext.extend(Ext.Component, { + * initComponent: function() { + * this.autoEl = { tag: 'img' }; + * MyComponent.superclass.initComponent.apply(this, arguments); + * this.initialBox = Ext.copyTo({}, this.initialConfig, 'x,y,width,height'); + * } + * }); + * + * Important note: To borrow class prototype methods, use {@link Ext.Base#borrow} instead. + * + * @param {Object} dest The destination object. + * @param {Object} source The source object. + * @param {String/String[]} names Either an Array of property names, or a comma-delimited list + * of property names to copy. + * @param {Boolean} [usePrototypeKeys] Defaults to false. Pass true to copy keys off of the + * prototype as well as the instance. + * @return {Object} The modified object. + */ + copyTo : function(dest, source, names, usePrototypeKeys){ + if(typeof names == 'string'){ + names = names.split(/[,;\s]/); + } + + var n, + nLen = names? names.length : 0, + name; + + for(n = 0; n < nLen; n++) { + name = names[n]; + + if(usePrototypeKeys || source.hasOwnProperty(name)){ + dest[name] = source[name]; + } + } + + return dest; + }, + + /** + * Attempts to destroy and then remove a set of named properties of the passed object. + * @param {Object} o The object (most likely a Component) who's properties you wish to destroy. + * @param {String...} args One or more names of the properties to destroy and remove from the object. + */ + destroyMembers : function(o){ + for (var i = 1, a = arguments, len = a.length; i < len; i++) { + Ext.destroy(o[a[i]]); + delete o[a[i]]; + } + }, + + /** + * Logs a message. If a console is present it will be used. On Opera, the method + * "opera.postError" is called. In other cases, the message is logged to an array + * "Ext.log.out". An attached debugger can watch this array and view the log. The + * log buffer is limited to a maximum of "Ext.log.max" entries (defaults to 250). + * The `Ext.log.out` array can also be written to a popup window by entering the + * following in the URL bar (a "bookmarklet"): + * + * javascript:void(Ext.log.show()); + * + * If additional parameters are passed, they are joined and appended to the message. + * A technique for tracing entry and exit of a function is this: + * + * function foo () { + * Ext.log({ indent: 1 }, '>> foo'); + * + * // log statements in here or methods called from here will be indented + * // by one step + * + * Ext.log({ outdent: 1 }, '<< foo'); + * } + * + * This method does nothing in a release build. + * + * @param {String/Object} [options] The message to log or an options object with any + * of the following properties: + * + * - `msg`: The message to log (required). + * - `level`: One of: "error", "warn", "info" or "log" (the default is "log"). + * - `dump`: An object to dump to the log as part of the message. + * - `stack`: True to include a stack trace in the log. + * - `indent`: Cause subsequent log statements to be indented one step. + * - `outdent`: Cause this and following statements to be one step less indented. + * + * @param {String...} [message] The message to log (required unless specified in + * options object). + * + * @method + */ + log : + log || + nullLog, + + /** + * Partitions the set into two sets: a true set and a false set. + * + * Example 1: + * + * Ext.partition([true, false, true, true, false]); + * // returns [[true, true, true], [false, false]] + * + * Example 2: + * + * Ext.partition( + * Ext.query("p"), + * function(val){ + * return val.className == "class1" + * } + * ); + * // true are those paragraph elements with a className of "class1", + * // false set are those that do not have that className. + * + * @param {Array/NodeList} arr The array to partition + * @param {Function} truth (optional) a function to determine truth. + * If this is omitted the element itself must be able to be evaluated for its truthfulness. + * @return {Array} [array of truish values, array of falsy values] + * @deprecated 4.0.0 Will be removed in the next major version + */ + partition : function(arr, truth){ + var ret = [[],[]], + a, v, + aLen = arr.length; + + for (a = 0; a < aLen; a++) { + v = arr[a]; + ret[ (truth && truth(v, a, arr)) || (!truth && v) ? 0 : 1].push(v); + } + + return ret; + }, + + /** + * Invokes a method on each item in an Array. + * + * Example: + * + * Ext.invoke(Ext.query("p"), "getAttribute", "id"); + * // [el1.getAttribute("id"), el2.getAttribute("id"), ..., elN.getAttribute("id")] + * + * @param {Array/NodeList} arr The Array of items to invoke the method on. + * @param {String} methodName The method name to invoke. + * @param {Object...} args Arguments to send into the method invocation. + * @return {Array} The results of invoking the method on each item in the array. + * @deprecated 4.0.0 Will be removed in the next major version + */ + invoke : function(arr, methodName){ + var ret = [], + args = Array.prototype.slice.call(arguments, 2), + a, v, + aLen = arr.length; + + for (a = 0; a < aLen; a++) { + v = arr[a]; + + if (v && typeof v[methodName] == 'function') { + ret.push(v[methodName].apply(v, args)); + } else { + ret.push(undefined); + } + } + + return ret; + }, + + /** + * Zips N sets together. + * + * Example 1: + * + * Ext.zip([1,2,3],[4,5,6]); // [[1,4],[2,5],[3,6]] + * + * Example 2: + * + * Ext.zip( + * [ "+", "-", "+"], + * [ 12, 10, 22], + * [ 43, 15, 96], + * function(a, b, c){ + * return "$" + a + "" + b + "." + c + * } + * ); // ["$+12.43", "$-10.15", "$+22.96"] + * + * @param {Array/NodeList...} arr This argument may be repeated. Array(s) + * to contribute values. + * @param {Function} zipper (optional) The last item in the argument list. + * This will drive how the items are zipped together. + * @return {Array} The zipped set. + * @deprecated 4.0.0 Will be removed in the next major version + */ + zip : function(){ + var parts = Ext.partition(arguments, function( val ){ return typeof val != 'function'; }), + arrs = parts[0], + fn = parts[1][0], + len = Ext.max(Ext.pluck(arrs, "length")), + ret = [], + i, + j, + aLen; + + for (i = 0; i < len; i++) { + ret[i] = []; + if(fn){ + ret[i] = fn.apply(fn, Ext.pluck(arrs, i)); + }else{ + for (j = 0, aLen = arrs.length; j < aLen; j++){ + ret[i].push( arrs[j][i] ); + } + } + } + return ret; + }, + + /** + * Turns an array into a sentence, joined by a specified connector - e.g.: + * + * Ext.toSentence(['Adama', 'Tigh', 'Roslin']); //'Adama, Tigh and Roslin' + * Ext.toSentence(['Adama', 'Tigh', 'Roslin'], 'or'); //'Adama, Tigh or Roslin' + * + * @param {String[]} items The array to create a sentence from + * @param {String} connector The string to use to connect the last two words. + * Usually 'and' or 'or' - defaults to 'and'. + * @return {String} The sentence string + * @deprecated 4.0.0 Will be removed in the next major version + */ + toSentence: function(items, connector) { + var length = items.length, + head, + tail; + + if (length <= 1) { + return items[0]; + } else { + head = items.slice(0, length - 1); + tail = items[length - 1]; + + return Ext.util.Format.format("{0} {1} {2}", head.join(", "), connector || 'and', tail); + } + }, + + /** + * Sets the default font-family to use for components that support a `glyph` config. + * @param {String} fontFamily The name of the font-family + */ + setGlyphFontFamily: function(fontFamily) { + Ext._glyphFontFamily = fontFamily; + }, + + /** + * @property {Boolean} useShims + * By default, Ext intelligently decides whether floating elements should be shimmed. + * If you are using flash, you may want to set this to true. + */ + useShims: isIE6 + }); +}()); + +/** + * Loads Ext.app.Application class and starts it up with given configuration after the + * page is ready. + * + * See `Ext.app.Application` for details. + * + * @param {Object/String} config Application config object or name of a class derived from Ext.app.Application. + */ +Ext.application = function(config) { + var App, paths, ns; + + if (typeof config === "string") { + Ext.require(config, function(){ + App = Ext.ClassManager.get(config); + }); + } + else { + // We have to process `paths` before creating Application class, + // or `requires` won't work. + Ext.Loader.setPath(config.name, config.appFolder || 'app'); + + if (paths = config.paths) { + for (ns in paths) { + if (paths.hasOwnProperty(ns)) { + Ext.Loader.setPath(ns, paths[ns]); + } + } + } + + config['paths processed'] = true; + + // Let Ext.define do the hard work but don't assign a class name. + // + Ext.define(config.name + ".$application", Ext.apply({ + extend: 'Ext.app.Application' // can be replaced by config! + }, config), + // call here when the App class gets full defined + function () { + App = this; + }); + } + + Ext.onReady(function() { + // this won't be called until App has been created and its requires have been + // met... + Ext.app.Application.instance = new App(); + }); +}; + +//@tag extras,core +//@require ../Ext-more.js +//@define Ext.util.Format + +/** + * @class Ext.util.Format + * + * This class is a centralized place for formatting functions. It includes + * functions to format various different types of data, such as text, dates and numeric values. + * + * ## Localization + * + * This class contains several options for localization. These can be set once the library has loaded, + * all calls to the functions from that point will use the locale settings that were specified. + * + * Options include: + * + * - thousandSeparator + * - decimalSeparator + * - currenyPrecision + * - currencySign + * - currencyAtEnd + * + * This class also uses the default date format defined here: {@link Ext.Date#defaultFormat}. + * + * ## Using with renderers + * + * There are two helper functions that return a new function that can be used in conjunction with + * grid renderers: + * + * columns: [{ + * dataIndex: 'date', + * renderer: Ext.util.Format.dateRenderer('Y-m-d') + * }, { + * dataIndex: 'time', + * renderer: Ext.util.Format.numberRenderer('0.000') + * }] + * + * Functions that only take a single argument can also be passed directly: + * + * columns: [{ + * dataIndex: 'cost', + * renderer: Ext.util.Format.usMoney + * }, { + * dataIndex: 'productCode', + * renderer: Ext.util.Format.uppercase + * }] + * + * ## Using with XTemplates + * + * XTemplates can also directly use Ext.util.Format functions: + * + * new Ext.XTemplate([ + * 'Date: {startDate:date("Y-m-d")}', + * 'Cost: {cost:usMoney}' + * ]); + * + * @singleton + */ +(function() { + Ext.ns('Ext.util'); + + Ext.util.Format = {}; + var UtilFormat = Ext.util.Format, + stripTagsRE = /<\/?[^>]+>/gi, + stripScriptsRe = /(?:)((\n|\r|.)*?)(?:<\/script>)/ig, + nl2brRe = /\r?\n/g, + + // A RegExp to remove from a number format string, all characters except digits and '.' + formatCleanRe = /[^\d\.]/g, + + // A RegExp to remove from a number format string, all characters except digits and the local decimal separator. + // Created on first use. The local decimal separator character must be initialized for this to be created. + I18NFormatCleanRe; + + Ext.apply(UtilFormat, { + // + /** + * @property {String} thousandSeparator + * The character that the {@link #number} function uses as a thousand separator. + * + * This may be overridden in a locale file. + */ + thousandSeparator: ',', + // + + // + /** + * @property {String} decimalSeparator + * The character that the {@link #number} function uses as a decimal point. + * + * This may be overridden in a locale file. + */ + decimalSeparator: '.', + // + + // + /** + * @property {Number} currencyPrecision + * The number of decimal places that the {@link #currency} function displays. + * + * This may be overridden in a locale file. + */ + currencyPrecision: 2, + // + + // + /** + * @property {String} currencySign + * The currency sign that the {@link #currency} function displays. + * + * This may be overridden in a locale file. + */ + currencySign: '$', + // + + // + /** + * @property {Boolean} currencyAtEnd + * This may be set to true to make the {@link #currency} function + * append the currency sign to the formatted value. + * + * This may be overridden in a locale file. + */ + currencyAtEnd: false, + // + + /** + * Checks a reference and converts it to empty string if it is undefined. + * @param {Object} value Reference to check + * @return {Object} Empty string if converted, otherwise the original value + */ + undef : function(value) { + return value !== undefined ? value : ""; + }, + + /** + * Checks a reference and converts it to the default value if it's empty. + * @param {Object} value Reference to check + * @param {String} [defaultValue=""] The value to insert of it's undefined. + * @return {String} + */ + defaultValue : function(value, defaultValue) { + return value !== undefined && value !== '' ? value : defaultValue; + }, + + /** + * Returns a substring from within an original string. + * @param {String} value The original text + * @param {Number} start The start index of the substring + * @param {Number} length The length of the substring + * @return {String} The substring + * @method + */ + substr : 'ab'.substr(-1) != 'b' + ? function (value, start, length) { + var str = String(value); + return (start < 0) + ? str.substr(Math.max(str.length + start, 0), length) + : str.substr(start, length); + } + : function(value, start, length) { + return String(value).substr(start, length); + }, + + /** + * Converts a string to all lower case letters. + * @param {String} value The text to convert + * @return {String} The converted text + */ + lowercase : function(value) { + return String(value).toLowerCase(); + }, + + /** + * Converts a string to all upper case letters. + * @param {String} value The text to convert + * @return {String} The converted text + */ + uppercase : function(value) { + return String(value).toUpperCase(); + }, + + /** + * Format a number as US currency. + * @param {Number/String} value The numeric value to format + * @return {String} The formatted currency string + */ + usMoney : function(v) { + return UtilFormat.currency(v, '$', 2); + }, + + /** + * Format a number as a currency. + * @param {Number/String} value The numeric value to format + * @param {String} [sign] The currency sign to use (defaults to {@link #currencySign}) + * @param {Number} [decimals] The number of decimals to use for the currency + * (defaults to {@link #currencyPrecision}) + * @param {Boolean} [end] True if the currency sign should be at the end of the string + * (defaults to {@link #currencyAtEnd}) + * @return {String} The formatted currency string + */ + currency: function(v, currencySign, decimals, end) { + var negativeSign = '', + format = ",0", + i = 0; + v = v - 0; + if (v < 0) { + v = -v; + negativeSign = '-'; + } + decimals = Ext.isDefined(decimals) ? decimals : UtilFormat.currencyPrecision; + format += format + (decimals > 0 ? '.' : ''); + for (; i < decimals; i++) { + format += '0'; + } + v = UtilFormat.number(v, format); + if ((end || UtilFormat.currencyAtEnd) === true) { + return Ext.String.format("{0}{1}{2}", negativeSign, v, currencySign || UtilFormat.currencySign); + } else { + return Ext.String.format("{0}{1}{2}", negativeSign, currencySign || UtilFormat.currencySign, v); + } + }, + + /** + * Formats the passed date using the specified format pattern. + * @param {String/Date} value The value to format. If a string is passed, it is converted to a Date + * by the Javascript's built-in Date#parse method. + * @param {String} [format] Any valid date format string. Defaults to {@link Ext.Date#defaultFormat}. + * @return {String} The formatted date string. + */ + date: function(v, format) { + if (!v) { + return ""; + } + if (!Ext.isDate(v)) { + v = new Date(Date.parse(v)); + } + return Ext.Date.dateFormat(v, format || Ext.Date.defaultFormat); + }, + + /** + * Returns a date rendering function that can be reused to apply a date format multiple times efficiently. + * @param {String} format Any valid date format string. Defaults to {@link Ext.Date#defaultFormat}. + * @return {Function} The date formatting function + */ + dateRenderer : function(format) { + return function(v) { + return UtilFormat.date(v, format); + }; + }, + + /** + * Strips all HTML tags. + * @param {Object} value The text from which to strip tags + * @return {String} The stripped text + */ + stripTags : function(v) { + return !v ? v : String(v).replace(stripTagsRE, ""); + }, + + /** + * Strips all script tags. + * @param {Object} value The text from which to strip script tags + * @return {String} The stripped text + */ + stripScripts : function(v) { + return !v ? v : String(v).replace(stripScriptsRe, ""); + }, + + /** + * Simple format for a file size (xxx bytes, xxx KB, xxx MB). + * @param {Number/String} size The numeric value to format + * @return {String} The formatted file size + */ + fileSize : function(size) { + if (size < 1024) { + return size + " bytes"; + } else if (size < 1048576) { + return (Math.round(((size*10) / 1024))/10) + " KB"; + } else { + return (Math.round(((size*10) / 1048576))/10) + " MB"; + } + }, + + /** + * It does simple math for use in a template, for example: + * + * var tpl = new Ext.Template('{value} * 10 = {value:math("* 10")}'); + * + * @return {Function} A function that operates on the passed value. + * @method + */ + math : (function(){ + var fns = {}; + + return function(v, a){ + if (!fns[a]) { + fns[a] = Ext.functionFactory('v', 'return v ' + a + ';'); + } + return fns[a](v); + }; + }()), + + /** + * Rounds the passed number to the required decimal precision. + * @param {Number/String} value The numeric value to round. + * @param {Number} precision The number of decimal places to which to round the first parameter's value. + * @return {Number} The rounded value. + */ + round : function(value, precision) { + var result = Number(value); + if (typeof precision == 'number') { + precision = Math.pow(10, precision); + result = Math.round(value * precision) / precision; + } + return result; + }, + + /** + * Formats the passed number according to the passed format string. + * + * The number of digits after the decimal separator character specifies the number of + * decimal places in the resulting string. The *local-specific* decimal character is + * used in the result. + * + * The *presence* of a thousand separator character in the format string specifies that + * the *locale-specific* thousand separator (if any) is inserted separating thousand groups. + * + * By default, "," is expected as the thousand separator, and "." is expected as the decimal separator. + * + * ## New to Ext JS 4 + * + * Locale-specific characters are always used in the formatted output when inserting + * thousand and decimal separators. + * + * The format string must specify separator characters according to US/UK conventions ("," as the + * thousand separator, and "." as the decimal separator) + * + * To allow specification of format strings according to local conventions for separator characters, add + * the string `/i` to the end of the format string. + * + * examples (123456.789): + * + * - `0` - (123456) show only digits, no precision + * - `0.00` - (123456.78) show only digits, 2 precision + * - `0.0000` - (123456.7890) show only digits, 4 precision + * - `0,000` - (123,456) show comma and digits, no precision + * - `0,000.00` - (123,456.78) show comma and digits, 2 precision + * - `0,0.00` - (123,456.78) shortcut method, show comma and digits, 2 precision + * + * To allow specification of the formatting string using UK/US grouping characters (,) and + * decimal (.) for international numbers, add /i to the end. For example: 0.000,00/i + * + * @param {Number} v The number to format. + * @param {String} format The way you would like to format this text. + * @return {String} The formatted number. + */ + number : function(v, formatString) { + if (!formatString) { + return v; + } + v = Ext.Number.from(v, NaN); + if (isNaN(v)) { + return ''; + } + var comma = UtilFormat.thousandSeparator, + dec = UtilFormat.decimalSeparator, + neg = v < 0, + hasComma, + psplit, + fnum, + cnum, + parr, + j, + m, + n, + i; + + v = Math.abs(v); + + // The "/i" suffix allows caller to use a locale-specific formatting string. + // Clean the format string by removing all but numerals and the decimal separator. + // Then split the format string into pre and post decimal segments according to *what* the + // decimal separator is. If they are specifying "/i", they are using the local convention in the format string. + if (formatString.substr(formatString.length - 2) == '/i') { + if (!I18NFormatCleanRe) { + I18NFormatCleanRe = new RegExp('[^\\d\\' + UtilFormat.decimalSeparator + ']','g'); + } + formatString = formatString.substr(0, formatString.length - 2); + hasComma = formatString.indexOf(comma) != -1; + psplit = formatString.replace(I18NFormatCleanRe, '').split(dec); + } else { + hasComma = formatString.indexOf(',') != -1; + psplit = formatString.replace(formatCleanRe, '').split('.'); + } + + if (psplit.length > 2) { + Ext.Error.raise({ + sourceClass: "Ext.util.Format", + sourceMethod: "number", + value: v, + formatString: formatString, + msg: "Invalid number format, should have no more than 1 decimal" + }); + } else if (psplit.length > 1) { + v = Ext.Number.toFixed(v, psplit[1].length); + } else { + v = Ext.Number.toFixed(v, 0); + } + + fnum = v.toString(); + + psplit = fnum.split('.'); + + if (hasComma) { + cnum = psplit[0]; + parr = []; + j = cnum.length; + m = Math.floor(j / 3); + n = cnum.length % 3 || 3; + + for (i = 0; i < j; i += n) { + if (i !== 0) { + n = 3; + } + + parr[parr.length] = cnum.substr(i, n); + m -= 1; + } + fnum = parr.join(comma); + if (psplit[1]) { + fnum += dec + psplit[1]; + } + } else { + if (psplit[1]) { + fnum = psplit[0] + dec + psplit[1]; + } + } + + if (neg) { + /* + * Edge case. If we have a very small negative number it will get rounded to 0, + * however the initial check at the top will still report as negative. Replace + * everything but 1-9 and check if the string is empty to determine a 0 value. + */ + neg = fnum.replace(/[^1-9]/g, '') !== ''; + } + + return (neg ? '-' : '') + formatString.replace(/[\d,?\.?]+/, fnum); + }, + + /** + * Returns a number rendering function that can be reused to apply a number format multiple + * times efficiently. + * + * @param {String} format Any valid number format string for {@link #number} + * @return {Function} The number formatting function + */ + numberRenderer : function(format) { + return function(v) { + return UtilFormat.number(v, format); + }; + }, + + /** + * Formats an object of name value properties as HTML element attribute values suitable for using when creating textual markup. + * @param {Object} attributes An object containing the HTML attributes as properties eg: `{height:40, vAlign:'top'}` + */ + attributes: function(attributes) { + if (typeof attributes === 'object') { + var result = [], + name; + + for (name in attributes) { + result.push(name, '="', name === 'style' ? Ext.DomHelper.generateStyles(attributes[name]) : Ext.htmlEncode(attributes[name]), '"'); + } + attributes = result.join(''); + } + return attributes||''; + }, + + /** + * Selectively do a plural form of a word based on a numeric value. For example, in a template, + * `{commentCount:plural("Comment")}` would result in `"1 Comment"` if commentCount was 1 or + * would be `"x Comments"` if the value is 0 or greater than 1. + * + * @param {Number} value The value to compare against + * @param {String} singular The singular form of the word + * @param {String} [plural] The plural form of the word (defaults to the singular with an "s") + */ + plural : function(v, s, p) { + return v +' ' + (v == 1 ? s : (p ? p : s+'s')); + }, + + /** + * Converts newline characters to the HTML tag `
    ` + * + * @param {String} v The string value to format. + * @return {String} The string with embedded `
    ` tags in place of newlines. + */ + nl2br : function(v) { + return Ext.isEmpty(v) ? '' : v.replace(nl2brRe, '
    '); + }, + + /** + * Alias for {@link Ext.String#capitalize}. + * @method + * @inheritdoc Ext.String#capitalize + */ + capitalize: Ext.String.capitalize, + + /** + * Alias for {@link Ext.String#ellipsis}. + * @method + * @inheritdoc Ext.String#ellipsis + */ + ellipsis: Ext.String.ellipsis, + + /** + * Alias for {@link Ext.String#format}. + * @method + * @inheritdoc Ext.String#format + */ + format: Ext.String.format, + + /** + * Alias for {@link Ext.String#htmlDecode}. + * @method + * @inheritdoc Ext.String#htmlDecode + */ + htmlDecode: Ext.String.htmlDecode, + + /** + * Alias for {@link Ext.String#htmlEncode}. + * @method + * @inheritdoc Ext.String#htmlEncode + */ + htmlEncode: Ext.String.htmlEncode, + + /** + * Alias for {@link Ext.String#leftPad}. + * @method + * @inheritdoc Ext.String#leftPad + */ + leftPad: Ext.String.leftPad, + + /** + * Alias for {@link Ext.String#trim}. + * @method + * @inheritdoc Ext.String#trim + */ + trim : Ext.String.trim, + + /** + * Parses a number or string representing margin sizes into an object. + * Supports CSS-style margin declarations (e.g. 10, "10", "10 10", "10 10 10" and + * "10 10 10 10" are all valid options and would return the same result). + * + * @param {Number/String} v The encoded margins + * @return {Object} An object with margin sizes for top, right, bottom and left + */ + parseBox : function(box) { + box = box || 0; + + if (typeof box === 'number') { + return { + top : box, + right : box, + bottom: box, + left : box + }; + } + + var parts = box.split(' '), + ln = parts.length; + + if (ln == 1) { + parts[1] = parts[2] = parts[3] = parts[0]; + } + else if (ln == 2) { + parts[2] = parts[0]; + parts[3] = parts[1]; + } + else if (ln == 3) { + parts[3] = parts[1]; + } + + return { + top :parseInt(parts[0], 10) || 0, + right :parseInt(parts[1], 10) || 0, + bottom:parseInt(parts[2], 10) || 0, + left :parseInt(parts[3], 10) || 0 + }; + }, + + /** + * Escapes the passed string for use in a regular expression. + * @param {String} str + * @return {String} + */ + escapeRegex : function(s) { + return s.replace(/([\-.*+?\^${}()|\[\]\/\\])/g, "\\$1"); + } + }); +}()); + +//@tag extras,core +//@require Format.js + +/** + * Provides the ability to execute one or more arbitrary tasks in a asynchronous manner. + * Generally, you can use the singleton {@link Ext.TaskManager} instead, but if needed, + * you can create separate instances of TaskRunner. Any number of separate tasks can be + * started at any time and will run independently of each other. + * + * Example usage: + * + * // Start a simple clock task that updates a div once per second + * var updateClock = function () { + * Ext.fly('clock').update(new Date().format('g:i:s A')); + * } + * + * var runner = new Ext.util.TaskRunner(); + * var task = runner.start({ + * run: updateClock, + * interval: 1000 + * } + * + * The equivalent using TaskManager: + * + * var task = Ext.TaskManager.start({ + * run: updateClock, + * interval: 1000 + * }); + * + * To end a running task: + * + * task.destroy(); + * + * If a task needs to be started and stopped repeated over time, you can create a + * {@link Ext.util.TaskRunner.Task Task} instance. + * + * var task = runner.newTask({ + * run: function () { + * // useful code + * }, + * interval: 1000 + * }); + * + * task.start(); + * + * // ... + * + * task.stop(); + * + * // ... + * + * task.start(); + * + * A re-usable, one-shot task can be managed similar to the above: + * + * var task = runner.newTask({ + * run: function () { + * // useful code to run once + * }, + * repeat: 1 + * }); + * + * task.start(); + * + * // ... + * + * task.start(); + * + * See the {@link #start} method for details about how to configure a task object. + * + * Also see {@link Ext.util.DelayedTask}. + * + * @constructor + * @param {Number/Object} [interval=10] The minimum precision in milliseconds supported by this + * TaskRunner instance. Alternatively, a config object to apply to the new instance. + */ +Ext.define('Ext.util.TaskRunner', { + /** + * @cfg {Boolean} [fireIdleEvent=true] + * This may be configured `false` to inhibit firing of the {@link Ext.EventManager#idleEvent idle event} after task invocation. + */ + + /** + * @cfg interval + * The timer resolution. + */ + interval: 10, + + /** + * @property timerId + * The id of the current timer. + * @private + */ + timerId: null, + + constructor: function (interval) { + var me = this; + + if (typeof interval == 'number') { + me.interval = interval; + } else if (interval) { + Ext.apply(me, interval); + } + + me.tasks = []; + me.timerFn = Ext.Function.bind(me.onTick, me); + }, + + /** + * Creates a new {@link Ext.util.TaskRunner.Task Task} instance. These instances can + * be easily started and stopped. + * @param {Object} config The config object. For details on the supported properties, + * see {@link #start}. + */ + newTask: function (config) { + var task = new Ext.util.TaskRunner.Task(config); + task.manager = this; + return task; + }, + + /** + * Starts a new task. + * + * Before each invocation, Ext injects the property `taskRunCount` into the task object + * so that calculations based on the repeat count can be performed. + * + * The returned task will contain a `destroy` method that can be used to destroy the + * task and cancel further calls. This is equivalent to the {@link #stop} method. + * + * @param {Object} task A config object that supports the following properties: + * @param {Function} task.run The function to execute each time the task is invoked. The + * function will be called at each interval and passed the `args` argument if specified, + * and the current invocation count if not. + * + * If a particular scope (`this` reference) is required, be sure to specify it using + * the `scope` argument. + * + * @param {Function} task.onError The function to execute in case of unhandled + * error on task.run. + * + * @param {Boolean} task.run.return `false` from this function to terminate the task. + * + * @param {Number} task.interval The frequency in milliseconds with which the task + * should be invoked. + * + * @param {Object[]} task.args An array of arguments to be passed to the function + * specified by `run`. If not specified, the current invocation count is passed. + * + * @param {Object} task.scope The scope (`this` reference) in which to execute the + * `run` function. Defaults to the task config object. + * + * @param {Number} task.duration The length of time in milliseconds to invoke the task + * before stopping automatically (defaults to indefinite). + * + * @param {Number} task.repeat The number of times to invoke the task before stopping + * automatically (defaults to indefinite). + * @return {Object} The task + */ + start: function(task) { + var me = this, + now = new Date().getTime(); + + if (!task.pending) { + me.tasks.push(task); + task.pending = true; // don't allow the task to be added to me.tasks again + } + + task.stopped = false; // might have been previously stopped... + task.taskStartTime = now; + task.taskRunTime = task.fireOnStart !== false ? 0 : task.taskStartTime; + task.taskRunCount = 0; + + if (!me.firing) { + if (task.fireOnStart !== false) { + me.startTimer(0, now); + } else { + me.startTimer(task.interval, now); + } + } + + return task; + }, + + /** + * Stops an existing running task. + * @param {Object} task The task to stop + * @return {Object} The task + */ + stop: function(task) { + // NOTE: we don't attempt to remove the task from me.tasks at this point because + // this could be called from inside a task which would then corrupt the state of + // the loop in onTick + if (!task.stopped) { + task.stopped = true; + + if (task.onStop) { + task.onStop.call(task.scope || task, task); + } + } + + return task; + }, + + /** + * Stops all tasks that are currently running. + */ + stopAll: function() { + // onTick will take care of cleaning up the mess after this point... + Ext.each(this.tasks, this.stop, this); + }, + + //------------------------------------------------------------------------- + + firing: false, + + nextExpires: 1e99, + + // private + onTick: function () { + var me = this, + tasks = me.tasks, + now = new Date().getTime(), + nextExpires = 1e99, + len = tasks.length, + expires, newTasks, i, task, rt, remove; + + me.timerId = null; + me.firing = true; // ensure we don't startTimer during this loop... + + // tasks.length can be > len if start is called during a task.run call... so we + // first check len to avoid tasks.length reference but eventually we need to also + // check tasks.length. we avoid repeating use of tasks.length by setting len at + // that time (to help the next loop) + for (i = 0; i < len || i < (len = tasks.length); ++i) { + task = tasks[i]; + + if (!(remove = task.stopped)) { + expires = task.taskRunTime + task.interval; + + if (expires <= now) { + rt = 1; // otherwise we have a stale "rt" + try { + rt = task.run.apply(task.scope || task, task.args || [++task.taskRunCount]); + } catch (taskError) { + try { + Ext.log({ + msg: taskError, + level: 'error' + }); + if (task.onError) { + rt = task.onError.call(task.scope || task, task, taskError); + } + } catch (ignore) { } + } + task.taskRunTime = now; + if (rt === false || task.taskRunCount === task.repeat) { + me.stop(task); + remove = true; + } else { + remove = task.stopped; // in case stop was called by run + expires = now + task.interval; + } + } + + if (!remove && task.duration && task.duration <= (now - task.taskStartTime)) { + me.stop(task); + remove = true; + } + } + + if (remove) { + task.pending = false; // allow the task to be added to me.tasks again + + // once we detect that a task needs to be removed, we copy the tasks that + // will carry forward into newTasks... this way we avoid O(N*N) to remove + // each task from the tasks array (and ripple the array down) and also the + // potentially wasted effort of making a new tasks[] even if all tasks are + // going into the next wave. + if (!newTasks) { + newTasks = tasks.slice(0, i); + // we don't set me.tasks here because callbacks can also start tasks, + // which get added to me.tasks... so we will visit them in this loop + // and account for their expirations in nextExpires... + } + } else { + if (newTasks) { + newTasks.push(task); // we've cloned the tasks[], so keep this one... + } + + if (nextExpires > expires) { + nextExpires = expires; // track the nearest expiration time + } + } + } + + if (newTasks) { + // only now can we copy the newTasks to me.tasks since no user callbacks can + // take place + me.tasks = newTasks; + } + + me.firing = false; // we're done, so allow startTimer afterwards + + if (me.tasks.length) { + // we create a new Date here because all the callbacks could have taken a long + // time... we want to base the next timeout on the current time (after the + // callback storm): + me.startTimer(nextExpires - now, new Date().getTime()); + } + + // After a tick + if (me.fireIdleEvent !== false) { + Ext.EventManager.idleEvent.fire(); + } + }, + + // private + startTimer: function (timeout, now) { + var me = this, + expires = now + timeout, + timerId = me.timerId; + + // Check to see if this request is enough in advance of the current timer. If so, + // we reschedule the timer based on this new expiration. + if (timerId && me.nextExpires - expires > me.interval) { + clearTimeout(timerId); + timerId = null; + } + + if (!timerId) { + if (timeout < me.interval) { + timeout = me.interval; + } + + me.timerId = setTimeout(me.timerFn, timeout); + me.nextExpires = expires; + } + } +}, +function () { + var me = this, + proto = me.prototype; + + /** + * Destroys this instance, stopping all tasks that are currently running. + * @method destroy + */ + proto.destroy = proto.stopAll; + + // Documented in TaskManager.js + Ext.util.TaskManager = Ext.TaskManager = new me(); + + /** + * Instances of this class are created by {@link Ext.util.TaskRunner#newTask} method. + * + * For details on config properties, see {@link Ext.util.TaskRunner#start}. + * @class Ext.util.TaskRunner.Task + */ + me.Task = new Ext.Class({ + isTask: true, + + /** + * This flag is set to `true` by {@link #stop}. + * @private + */ + stopped: true, // this avoids the odd combination of !stopped && !pending + + /** + * Override default behavior + */ + fireOnStart: false, + + constructor: function (config) { + Ext.apply(this, config); + }, + + /** + * Restarts this task, clearing it duration, expiration and run count. + * @param {Number} [interval] Optionally reset this task's interval. + */ + restart: function (interval) { + if (interval !== undefined) { + this.interval = interval; + } + + this.manager.start(this); + }, + + /** + * Starts this task if it is not already started. + * @param {Number} [interval] Optionally reset this task's interval. + */ + start: function (interval) { + if (this.stopped) { + this.restart(interval); + } + }, + + /** + * Stops this task. + */ + stop: function () { + this.manager.stop(this); + } + }); + + proto = me.Task.prototype; + + /** + * Destroys this instance, stopping this task's execution. + * @method destroy + */ + proto.destroy = proto.stop; +}); + + + + + + + + + + +//@tag extras,core +/** + * A static {@link Ext.util.TaskRunner} instance that can be used to start and stop + * arbitrary tasks. See {@link Ext.util.TaskRunner} for supported methods and task + * config properties. + * + * // Start a simple clock task that updates a div once per second + * var task = { + * run: function(){ + * Ext.fly('clock').update(new Date().format('g:i:s A')); + * }, + * interval: 1000 //1 second + * } + * + * Ext.TaskManager.start(task); + * + * See the {@link #start} method for details about how to configure a task object. + */ +Ext.define('Ext.util.TaskManager', { + extend: Ext.util.TaskRunner , + + alternateClassName: [ + 'Ext.TaskManager' + ], + + singleton: true +}); + +//@tag extras,core +//@require ../util/TaskManager.js + +/** + * @class Ext.perf.Accumulator + * @private + */ +Ext.define('Ext.perf.Accumulator', (function () { + var currentFrame = null, + khrome = Ext.global['chrome'], + formatTpl, + // lazy init on first request for timestamp (avoids infobar in IE until needed) + // Also avoids kicking off Chrome's microsecond timer until first needed + getTimestamp = function () { + + getTimestamp = function () { + return new Date().getTime(); + }; + + var interval, toolbox; + + // If Chrome is started with the --enable-benchmarking switch + if (Ext.isChrome && khrome && khrome.Interval) { + interval = new khrome.Interval(); + interval.start(); + getTimestamp = function () { + return interval.microseconds() / 1000; + }; + } else if (window.ActiveXObject) { + try { + // the above technique is not very accurate for small intervals... + toolbox = new ActiveXObject('SenchaToolbox.Toolbox'); + Ext.senchaToolbox = toolbox; // export for other uses + getTimestamp = function () { + return toolbox.milliseconds; + }; + } catch (e) { + // ignore + } + } else if (Date.now) { + getTimestamp = Date.now; + } + + Ext.perf.getTimestamp = Ext.perf.Accumulator.getTimestamp = getTimestamp; + return getTimestamp(); + }; + + function adjustSet (set, time) { + set.sum += time; + set.min = Math.min(set.min, time); + set.max = Math.max(set.max, time); + } + + function leaveFrame (time) { + var totalTime = time ? time : (getTimestamp() - this.time), // do this first + me = this, // me = frame + accum = me.accum; + + ++accum.count; + if (! --accum.depth) { + adjustSet(accum.total, totalTime); + } + adjustSet(accum.pure, totalTime - me.childTime); + + currentFrame = me.parent; + if (currentFrame) { + ++currentFrame.accum.childCount; + currentFrame.childTime += totalTime; + } + } + + function makeSet () { + return { + min: Number.MAX_VALUE, + max: 0, + sum: 0 + }; + } + + function makeTap (me, fn) { + return function () { + var frame = me.enter(), + ret = fn.apply(this, arguments); + + frame.leave(); + return ret; + }; + } + + function round (x) { + return Math.round(x * 100) / 100; + } + + function setToJSON (count, childCount, calibration, set) { + var data = { + avg: 0, + min: set.min, + max: set.max, + sum: 0 + }; + + if (count) { + calibration = calibration || 0; + data.sum = set.sum - childCount * calibration; + data.avg = data.sum / count; + // min and max cannot be easily corrected since we don't know the number of + // child calls for them. + } + + return data; + } + + return { + constructor: function (name) { + var me = this; + + me.count = me.childCount = me.depth = me.maxDepth = 0; + me.pure = makeSet(); + me.total = makeSet(); + me.name = name; + }, + + statics: { + getTimestamp: getTimestamp + }, + + format: function (calibration) { + if (!formatTpl) { + formatTpl = new Ext.XTemplate([ + '{name} - {count} call(s)', + '', + '', + ' ({childCount} children)', + '', + '', + ' ({depth} deep)', + '', + '', + ', {type}: {[this.time(values.sum)]} msec (', + //'min={[this.time(values.min)]}, ', + 'avg={[this.time(values.sum / parent.count)]}', + //', max={[this.time(values.max)]}', + ')', + '', + '' + ].join(''), { + time: function (t) { + return Math.round(t * 100) / 100; + } + }); + } + + var data = this.getData(calibration); + data.name = this.name; + data.pure.type = 'Pure'; + data.total.type = 'Total'; + data.times = [data.pure, data.total]; + return formatTpl.apply(data); + }, + + getData: function (calibration) { + var me = this; + + return { + count: me.count, + childCount: me.childCount, + depth: me.maxDepth, + pure: setToJSON(me.count, me.childCount, calibration, me.pure), + total: setToJSON(me.count, me.childCount, calibration, me.total) + }; + }, + + enter: function () { + var me = this, + frame = { + accum: me, + leave: leaveFrame, + childTime: 0, + parent: currentFrame + }; + + ++me.depth; + if (me.maxDepth < me.depth) { + me.maxDepth = me.depth; + } + + currentFrame = frame; + frame.time = getTimestamp(); // do this last + return frame; + }, + + monitor: function (fn, scope, args) { + var frame = this.enter(); + if (args) { + fn.apply(scope, args); + } else { + fn.call(scope); + } + frame.leave(); + }, + + report: function () { + Ext.log(this.format()); + }, + + tap: function (className, methodName) { + var me = this, + methods = typeof methodName == 'string' ? [methodName] : methodName, + klass, statik, i, parts, length, name, src, + tapFunc; + + tapFunc = function(){ + if (typeof className == 'string') { + klass = Ext.global; + parts = className.split('.'); + for (i = 0, length = parts.length; i < length; ++i) { + klass = klass[parts[i]]; + } + } else { + klass = className; + } + + for (i = 0, length = methods.length; i < length; ++i) { + name = methods[i]; + statik = name.charAt(0) == '!'; + + if (statik) { + name = name.substring(1); + } else { + statik = !(name in klass.prototype); + } + + src = statik ? klass : klass.prototype; + src[name] = makeTap(me, src[name]); + } + }; + + Ext.ClassManager.onCreated(tapFunc, me, className); + + return me; + } + }; +}()), + +function () { + Ext.perf.getTimestamp = this.getTimestamp; +}); + +//@tag extras,core +//@require Accumulator.js + +/** + * @class Ext.perf.Monitor + * @singleton + * @private + */ +Ext.define('Ext.perf.Monitor', { + singleton: true, + alternateClassName: 'Ext.Perf', + + + + + + constructor: function () { + this.accumulators = []; + this.accumulatorsByName = {}; + }, + + calibrate: function () { + var accum = new Ext.perf.Accumulator('$'), + total = accum.total, + getTimestamp = Ext.perf.Accumulator.getTimestamp, + count = 0, + frame, + endTime, + startTime; + + startTime = getTimestamp(); + + do { + frame = accum.enter(); + frame.leave(); + ++count; + } while (total.sum < 100); + + endTime = getTimestamp(); + + return (endTime - startTime) / count; + }, + + get: function (name) { + var me = this, + accum = me.accumulatorsByName[name]; + + if (!accum) { + me.accumulatorsByName[name] = accum = new Ext.perf.Accumulator(name); + me.accumulators.push(accum); + } + + return accum; + }, + + enter: function (name) { + return this.get(name).enter(); + }, + + monitor: function (name, fn, scope) { + this.get(name).monitor(fn, scope); + }, + + report: function () { + var me = this, + accumulators = me.accumulators, + calibration = me.calibrate(); + + accumulators.sort(function (a, b) { + return (a.name < b.name) ? -1 : ((b.name < a.name) ? 1 : 0); + }); + + me.updateGC(); + + Ext.log('Calibration: ' + Math.round(calibration * 100) / 100 + ' msec/sample'); + Ext.each(accumulators, function (accum) { + Ext.log(accum.format(calibration)); + }); + }, + + getData: function (all) { + var ret = {}, + accumulators = this.accumulators; + + Ext.each(accumulators, function (accum) { + if (all || accum.count) { + ret[accum.name] = accum.getData(); + } + }); + + return ret; + }, + + reset: function(){ + Ext.each(this.accumulators, function(accum){ + var me = accum; + me.count = me.childCount = me.depth = me.maxDepth = 0; + me.pure = { + min: Number.MAX_VALUE, + max: 0, + sum: 0 + }; + me.total = { + min: Number.MAX_VALUE, + max: 0, + sum: 0 + }; + }); + }, + + updateGC: function () { + var accumGC = this.accumulatorsByName.GC, + toolbox = Ext.senchaToolbox, + bucket; + + if (accumGC) { + accumGC.count = toolbox.garbageCollectionCounter || 0; + + if (accumGC.count) { + bucket = accumGC.pure; + accumGC.total.sum = bucket.sum = toolbox.garbageCollectionMilliseconds; + bucket.min = bucket.max = bucket.sum / accumGC.count; + bucket = accumGC.total; + bucket.min = bucket.max = bucket.sum / accumGC.count; + } + } + }, + + watchGC: function () { + Ext.perf.getTimestamp(); // initializes SenchaToolbox (if available) + + var toolbox = Ext.senchaToolbox; + + if (toolbox) { + this.get("GC"); + toolbox.watchGarbageCollector(false); // no logging, just totals + } + }, + + setup: function (config) { + if (!config) { + config = { + /*insertHtml: { + 'Ext.dom.Helper': 'insertHtml' + },*/ + /*xtplCompile: { + 'Ext.XTemplateCompiler': 'compile' + },*/ +// doInsert: { +// 'Ext.Template': 'doInsert' +// }, +// applyOut: { +// 'Ext.XTemplate': 'applyOut' +// }, + render: { + 'Ext.AbstractComponent': 'render' + }, +// fnishRender: { +// 'Ext.AbstractComponent': 'finishRender' +// }, +// renderSelectors: { +// 'Ext.AbstractComponent': 'applyRenderSelectors' +// }, +// compAddCls: { +// 'Ext.AbstractComponent': 'addCls' +// }, +// compRemoveCls: { +// 'Ext.AbstractComponent': 'removeCls' +// }, +// getStyle: { +// 'Ext.core.Element': 'getStyle' +// }, +// setStyle: { +// 'Ext.core.Element': 'setStyle' +// }, +// addCls: { +// 'Ext.core.Element': 'addCls' +// }, +// removeCls: { +// 'Ext.core.Element': 'removeCls' +// }, +// measure: { +// 'Ext.layout.component.Component': 'measureAutoDimensions' +// }, +// moveItem: { +// 'Ext.layout.Layout': 'moveItem' +// }, +// layoutFlush: { +// 'Ext.layout.Context': 'flush' +// }, + layout: { + 'Ext.layout.Context': 'run' + } + }; + } + + this.currentConfig = config; + + var key, prop, + accum, className, methods; + for (key in config) { + if (config.hasOwnProperty(key)) { + prop = config[key]; + accum = Ext.Perf.get(key); + + for (className in prop) { + if (prop.hasOwnProperty(className)) { + methods = prop[className]; + accum.tap(className, methods); + } + } + } + } + + this.watchGC(); + } +}); + +//@tag extras,core +//@require perf/Monitor.js +//@define Ext.Supports + +/** + * @class Ext.is + * + * Determines information about the current platform the application is running on. + * + * @singleton + */ +Ext.is = { + init : function(navigator) { + var platforms = this.platforms, + ln = platforms.length, + i, platform; + + navigator = navigator || window.navigator; + + for (i = 0; i < ln; i++) { + platform = platforms[i]; + this[platform.identity] = platform.regex.test(navigator[platform.property]); + } + + /** + * @property Desktop True if the browser is running on a desktop machine + * @type {Boolean} + */ + this.Desktop = this.Mac || this.Windows || (this.Linux && !this.Android); + /** + * @property Tablet True if the browser is running on a tablet (iPad) + */ + this.Tablet = this.iPad; + /** + * @property Phone True if the browser is running on a phone. + * @type {Boolean} + */ + this.Phone = !this.Desktop && !this.Tablet; + /** + * @property iOS True if the browser is running on iOS + * @type {Boolean} + */ + this.iOS = this.iPhone || this.iPad || this.iPod; + + /** + * @property Standalone Detects when application has been saved to homescreen. + * @type {Boolean} + */ + this.Standalone = !!window.navigator.standalone; + }, + + /** + * @property iPhone True when the browser is running on a iPhone + * @type {Boolean} + */ + platforms: [{ + property: 'platform', + regex: /iPhone/i, + identity: 'iPhone' + }, + + /** + * @property iPod True when the browser is running on a iPod + * @type {Boolean} + */ + { + property: 'platform', + regex: /iPod/i, + identity: 'iPod' + }, + + /** + * @property iPad True when the browser is running on a iPad + * @type {Boolean} + */ + { + property: 'userAgent', + regex: /iPad/i, + identity: 'iPad' + }, + + /** + * @property Blackberry True when the browser is running on a Blackberry + * @type {Boolean} + */ + { + property: 'userAgent', + regex: /Blackberry/i, + identity: 'Blackberry' + }, + + /** + * @property Android True when the browser is running on an Android device + * @type {Boolean} + */ + { + property: 'userAgent', + regex: /Android/i, + identity: 'Android' + }, + + /** + * @property Mac True when the browser is running on a Mac + * @type {Boolean} + */ + { + property: 'platform', + regex: /Mac/i, + identity: 'Mac' + }, + + /** + * @property Windows True when the browser is running on Windows + * @type {Boolean} + */ + { + property: 'platform', + regex: /Win/i, + identity: 'Windows' + }, + + /** + * @property Linux True when the browser is running on Linux + * @type {Boolean} + */ + { + property: 'platform', + regex: /Linux/i, + identity: 'Linux' + }] +}; + +Ext.is.init(); + +/** + * @class Ext.supports + * + * Determines information about features are supported in the current environment + * + * @singleton + */ +(function(){ + + // this is a local copy of certain logic from (Abstract)Element.getStyle + // to break a dependancy between the supports mechanism and Element + // use this instead of element references to check for styling info + var getStyle = function(element, styleName){ + var view = element.ownerDocument.defaultView, + style = (view ? view.getComputedStyle(element, null) : element.currentStyle) || element.style; + return style[styleName]; + }, + supportsVectors = { + 'IE6-quirks': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0], + 'IE6-strict': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0], + 'IE7-quirks': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0], + 'IE7-strict': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,0,1,0,0], + 'IE8-quirks': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0], + 'IE8-strict': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0], + 'IE9-quirks': [0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0], + 'IE9-strict': [0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0], + 'IE10-quirks': [1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,0], + 'IE10-strict': [1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,0] + }; + +function getBrowserKey() { + var browser = Ext.isIE6 ? 'IE6' : Ext.isIE7 ? 'IE7' : Ext.isIE8 ? 'IE8' : + Ext.isIE9 ? 'IE9': Ext.isIE10 ? 'IE10' : ''; + + return browser ? browser + (Ext.isStrict ? '-strict' : '-quirks') : ''; +} + +Ext.supports = { + /** + * Runs feature detection routines and sets the various flags. This is called when + * the scripts loads (very early) and again at {@link Ext#onReady}. Some detections + * are flagged as `early` and run immediately. Others that require the document body + * will not run until ready. + * + * Each test is run only once, so calling this method from an onReady function is safe + * and ensures that all flags have been set. + * @markdown + * @private + */ + init : function() { + var me = this, + doc = document, + toRun = me.toRun || me.tests, + n = toRun.length, + div = n && Ext.isReady && doc.createElement('div'), + notRun = [], + browserKey = getBrowserKey(), + test, vector, value; + + if (div) { + div.innerHTML = [ + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + '
    ' + ].join(''); + + doc.body.appendChild(div); + } + + vector = supportsVectors[browserKey]; + while (n--) { + test = toRun[n]; + value = vector && vector[n]; + if (value !== undefined) { + me[test.identity] = value; + } else if (div || test.early) { + me[test.identity] = test.fn.call(me, doc, div); + } else { + notRun.push(test); + } + } + + if (div) { + doc.body.removeChild(div); + } + + me.toRun = notRun; + }, + + /** + * Generates a support vector for the current browser/mode. The result can be + * added to supportsVectors to eliminate feature detection at startup time. + * @private + */ + generateVector: function() { + var tests = this.tests, + vector = [], + i = 0, + ln = tests.length, + test; + + for (; i < ln; i++) { + test = tests[i]; + vector.push(this[test.identity] ? 1 : 0); + } + return vector; + }, + + /** + * @property PointerEvents True if document environment supports the CSS3 pointer-events style. + * @type {Boolean} + */ + PointerEvents: 'pointerEvents' in document.documentElement.style, + + // IE10/Win8 throws "Access Denied" accessing window.localStorage, so this test + // needs to have a try/catch + /** + * @property LocalStorage True if localStorage is supported + */ + LocalStorage: (function() { + try { + return 'localStorage' in window && window['localStorage'] !== null; + } catch (e) { + return false; + } + })(), + + /** + * @property CSS3BoxShadow True if document environment supports the CSS3 box-shadow style. + * @type {Boolean} + */ + CSS3BoxShadow: 'boxShadow' in document.documentElement.style || 'WebkitBoxShadow' in document.documentElement.style || 'MozBoxShadow' in document.documentElement.style, + + /** + * @property ClassList True if document environment supports the HTML5 classList API. + * @type {Boolean} + */ + ClassList: !!document.documentElement.classList, + + /** + * @property OrientationChange True if the device supports orientation change + * @type {Boolean} + */ + OrientationChange: ((typeof window.orientation != 'undefined') && ('onorientationchange' in window)), + + /** + * @property DeviceMotion True if the device supports device motion (acceleration and rotation rate) + * @type {Boolean} + */ + DeviceMotion: ('ondevicemotion' in window), + + /** + * @property Touch True if the device supports touch + * @type {Boolean} + */ + // is.Desktop is needed due to the bug in Chrome 5.0.375, Safari 3.1.2 + // and Safari 4.0 (they all have 'ontouchstart' in the window object). + Touch: ('ontouchstart' in window) && (!Ext.is.Desktop), + + /** + * @property TimeoutActualLateness True if the browser passes the "actualLateness" parameter to + * setTimeout. See: https://developer.mozilla.org/en/DOM/window.setTimeout + * @type {Boolean} + */ + TimeoutActualLateness: (function(){ + setTimeout(function(){ + Ext.supports.TimeoutActualLateness = arguments.length !== 0; + }, 0); + }()), + + tests: [ + /** + * @property Transitions True if the device supports CSS3 Transitions + * @type {Boolean} + */ + { + identity: 'Transitions', + fn: function(doc, div) { + var prefix = [ + 'webkit', + 'Moz', + 'o', + 'ms', + 'khtml' + ], + TE = 'TransitionEnd', + transitionEndName = [ + prefix[0] + TE, + 'transitionend', //Moz bucks the prefixing convention + prefix[2] + TE, + prefix[3] + TE, + prefix[4] + TE + ], + ln = prefix.length, + i = 0, + out = false; + + for (; i < ln; i++) { + if (getStyle(div, prefix[i] + "TransitionProperty")) { + Ext.supports.CSS3Prefix = prefix[i]; + Ext.supports.CSS3TransitionEnd = transitionEndName[i]; + out = true; + break; + } + } + return out; + } + }, + + /** + * @property RightMargin True if the device supports right margin. + * See https://bugs.webkit.org/show_bug.cgi?id=13343 for why this is needed. + * @type {Boolean} + */ + { + identity: 'RightMargin', + fn: function(doc, div) { + var view = doc.defaultView; + return !(view && view.getComputedStyle(div.firstChild.firstChild, null).marginRight != '0px'); + } + }, + + /** + * @property DisplayChangeInputSelectionBug True if INPUT elements lose their + * selection when their display style is changed. Essentially, if a text input + * has focus and its display style is changed, the I-beam disappears. + * + * This bug is encountered due to the work around in place for the {@link #RightMargin} + * bug. This has been observed in Safari 4.0.4 and older, and appears to be fixed + * in Safari 5. It's not clear if Safari 4.1 has the bug, but it has the same WebKit + * version number as Safari 5 (according to http://unixpapa.com/js/gecko.html). + */ + { + identity: 'DisplayChangeInputSelectionBug', + early: true, + fn: function() { + var webKitVersion = Ext.webKitVersion; + // WebKit but older than Safari 5 or Chrome 6: + return 0 < webKitVersion && webKitVersion < 533; + } + }, + + /** + * @property DisplayChangeTextAreaSelectionBug True if TEXTAREA elements lose their + * selection when their display style is changed. Essentially, if a text area has + * focus and its display style is changed, the I-beam disappears. + * + * This bug is encountered due to the work around in place for the {@link #RightMargin} + * bug. This has been observed in Chrome 10 and Safari 5 and older, and appears to + * be fixed in Chrome 11. + */ + { + identity: 'DisplayChangeTextAreaSelectionBug', + early: true, + fn: function() { + var webKitVersion = Ext.webKitVersion; + + /* + Has bug w/textarea: + + (Chrome) Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) + AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.127 + Safari/534.16 + (Safari) Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) + AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 + Safari/533.21.1 + + No bug: + + (Chrome) Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) + AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.57 + Safari/534.24 + */ + return 0 < webKitVersion && webKitVersion < 534.24; + } + }, + + /** + * @property TransparentColor True if the device supports transparent color + * @type {Boolean} + */ + { + identity: 'TransparentColor', + fn: function(doc, div, view) { + view = doc.defaultView; + return !(view && view.getComputedStyle(div.lastChild, null).backgroundColor != 'transparent'); + } + }, + + /** + * @property ComputedStyle True if the browser supports document.defaultView.getComputedStyle() + * @type {Boolean} + */ + { + identity: 'ComputedStyle', + fn: function(doc, div, view) { + view = doc.defaultView; + return view && view.getComputedStyle; + } + }, + + /** + * @property Svg True if the device supports SVG + * @type {Boolean} + */ + { + identity: 'Svg', + fn: function(doc) { + return !!doc.createElementNS && !!doc.createElementNS( "http:/" + "/www.w3.org/2000/svg", "svg").createSVGRect; + } + }, + + /** + * @property Canvas True if the device supports Canvas + * @type {Boolean} + */ + { + identity: 'Canvas', + fn: function(doc) { + return !!doc.createElement('canvas').getContext; + } + }, + + /** + * @property Vml True if the device supports VML + * @type {Boolean} + */ + { + identity: 'Vml', + fn: function(doc) { + var d = doc.createElement("div"); + d.innerHTML = ""; + return (d.childNodes.length == 2); + } + }, + + /** + * @property Float True if the device supports CSS float + * @type {Boolean} + */ + { + identity: 'Float', + fn: function(doc, div) { + return !!div.lastChild.style.cssFloat; + } + }, + + /** + * @property AudioTag True if the device supports the HTML5 audio tag + * @type {Boolean} + */ + { + identity: 'AudioTag', + fn: function(doc) { + return !!doc.createElement('audio').canPlayType; + } + }, + + /** + * @property History True if the device supports HTML5 history + * @type {Boolean} + */ + { + identity: 'History', + fn: function() { + var history = window.history; + return !!(history && history.pushState); + } + }, + + /** + * @property CSS3DTransform True if the device supports CSS3DTransform + * @type {Boolean} + */ + { + identity: 'CSS3DTransform', + fn: function() { + return (typeof WebKitCSSMatrix != 'undefined' && new WebKitCSSMatrix().hasOwnProperty('m41')); + } + }, + + /** + * @property CSS3LinearGradient True if the device supports CSS3 linear gradients + * @type {Boolean} + */ + { + identity: 'CSS3LinearGradient', + fn: function(doc, div) { + var property = 'background-image:', + webkit = '-webkit-gradient(linear, left top, right bottom, from(black), to(white))', + w3c = 'linear-gradient(left top, black, white)', + moz = '-moz-' + w3c, + ms = '-ms-' + w3c, + opera = '-o-' + w3c, + options = [property + webkit, property + w3c, property + moz, property + ms, property + opera]; + + div.style.cssText = options.join(';'); + + return (("" + div.style.backgroundImage).indexOf('gradient') !== -1) && !Ext.isIE9; + } + }, + + /** + * @property CSS3BorderRadius True if the device supports CSS3 border radius + * @type {Boolean} + */ + { + identity: 'CSS3BorderRadius', + fn: function(doc, div) { + var domPrefixes = ['borderRadius', 'BorderRadius', 'MozBorderRadius', 'WebkitBorderRadius', 'OBorderRadius', 'KhtmlBorderRadius'], + pass = false, + i; + for (i = 0; i < domPrefixes.length; i++) { + if (document.body.style[domPrefixes[i]] !== undefined) { + return true; + } + } + return pass; + } + }, + + /** + * @property GeoLocation True if the device supports GeoLocation + * @type {Boolean} + */ + { + identity: 'GeoLocation', + fn: function() { + // Use the in check for geolocation, see https://github.com/Modernizr/Modernizr/issues/513 + return (typeof navigator != 'undefined' && 'geolocation' in navigator) || (typeof google != 'undefined' && typeof google.gears != 'undefined'); + } + }, + /** + * @property MouseEnterLeave True if the browser supports mouseenter and mouseleave events + * @type {Boolean} + */ + { + identity: 'MouseEnterLeave', + fn: function(doc, div){ + return ('onmouseenter' in div && 'onmouseleave' in div); + } + }, + /** + * @property MouseWheel True if the browser supports the mousewheel event + * @type {Boolean} + */ + { + identity: 'MouseWheel', + fn: function(doc, div) { + return ('onmousewheel' in div); + } + }, + /** + * @property Opacity True if the browser supports normal css opacity + * @type {Boolean} + */ + { + identity: 'Opacity', + fn: function(doc, div){ + // Not a strict equal comparison in case opacity can be converted to a number. + if (Ext.isIE6 || Ext.isIE7 || Ext.isIE8) { + return false; + } + div.firstChild.style.cssText = 'opacity:0.73'; + return div.firstChild.style.opacity == '0.73'; + } + }, + /** + * @property Placeholder True if the browser supports the HTML5 placeholder attribute on inputs + * @type {Boolean} + */ + { + identity: 'Placeholder', + fn: function(doc) { + return 'placeholder' in doc.createElement('input'); + } + }, + + /** + * @property Direct2DBug True if when asking for an element's dimension via offsetWidth or offsetHeight, + * getBoundingClientRect, etc. the browser returns the subpixel width rounded to the nearest pixel. + * @type {Boolean} + */ + { + identity: 'Direct2DBug', + fn: function() { + return Ext.isString(document.body.style.msTransformOrigin) && Ext.isIE10m; + } + }, + /** + * @property BoundingClientRect True if the browser supports the getBoundingClientRect method on elements + * @type {Boolean} + */ + { + identity: 'BoundingClientRect', + fn: function(doc, div) { + return Ext.isFunction(div.getBoundingClientRect); + } + }, + /** + * @property RotatedBoundingClientRect True if the BoundingClientRect is + * rotated when the element is rotated using a CSS transform. + * @type {Boolean} + */ + { + identity: 'RotatedBoundingClientRect', + fn: function() { + var body = document.body, + supports = false, + el = document.createElement('div'), + style = el.style; + + if (el.getBoundingClientRect) { + style.WebkitTransform = style.MozTransform = + style.OTransform = style.transform = 'rotate(90deg)'; + style.width = '100px'; + style.height = '30px'; + body.appendChild(el) + + supports = el.getBoundingClientRect().height !== 100; + body.removeChild(el); + } + + return supports; + } + }, + { + identity: 'IncludePaddingInWidthCalculation', + fn: function(doc, div){ + return div.childNodes[1].firstChild.offsetWidth == 210; + } + }, + { + identity: 'IncludePaddingInHeightCalculation', + fn: function(doc, div){ + return div.childNodes[1].firstChild.offsetHeight == 210; + } + }, + + /** + * @property ArraySort True if the Array sort native method isn't bugged. + * @type {Boolean} + */ + { + identity: 'ArraySort', + fn: function() { + var a = [1,2,3,4,5].sort(function(){ return 0; }); + return a[0] === 1 && a[1] === 2 && a[2] === 3 && a[3] === 4 && a[4] === 5; + } + }, + /** + * @property Range True if browser support document.createRange native method. + * @type {Boolean} + */ + { + identity: 'Range', + fn: function() { + return !!document.createRange; + } + }, + /** + * @property CreateContextualFragment True if browser support CreateContextualFragment range native methods. + * @type {Boolean} + */ + { + identity: 'CreateContextualFragment', + fn: function() { + var range = Ext.supports.Range ? document.createRange() : false; + + return range && !!range.createContextualFragment; + } + }, + + /** + * @property WindowOnError True if browser supports window.onerror. + * @type {Boolean} + */ + { + identity: 'WindowOnError', + fn: function () { + // sadly, we cannot feature detect this... + return Ext.isIE || Ext.isGecko || Ext.webKitVersion >= 534.16; // Chrome 10+ + } + }, + + /** + * @property TextAreaMaxLength True if the browser supports maxlength on textareas. + * @type {Boolean} + */ + { + identity: 'TextAreaMaxLength', + fn: function(){ + var el = document.createElement('textarea'); + return ('maxlength' in el); + } + }, + /** + * @property GetPositionPercentage True if the browser will return the left/top/right/bottom + * position as a percentage when explicitly set as a percentage value. + * @type {Boolean} + */ + // Related bug: https://bugzilla.mozilla.org/show_bug.cgi?id=707691#c7 + { + identity: 'GetPositionPercentage', + fn: function(doc, div){ + return getStyle(div.childNodes[2], 'left') == '10%'; + } + }, + /** + * @property {Boolean} PercentageHeightOverflowBug + * In some browsers (IE quirks, IE6, IE7, IE9, chrome, safari and opera at the time + * of this writing) a percentage-height element ignores the horizontal scrollbar + * of its parent element. This method returns true if the browser is affected + * by this bug. + * + * @private + */ + { + identity: 'PercentageHeightOverflowBug', + fn: function(doc) { + var hasBug = false, + style, el; + + if (Ext.getScrollbarSize().height) { + // must have space-consuming scrollbars for bug to be possible + el = doc.createElement('div'); + style = el.style; + style.height = '50px'; + style.width = '50px'; + style.overflow = 'auto'; + style.position = 'absolute'; + + el.innerHTML = [ + '
    ', + // The element that causes the horizontal overflow must be + // a child of the element with the 100% height, otherwise + // horizontal overflow is not triggered in webkit quirks mode + '
    ', + '
    ' + ].join(''); + doc.body.appendChild(el); + if (el.firstChild.offsetHeight === 50) { + hasBug = true; + } + doc.body.removeChild(el); + } + + return hasBug; + } + }, + /** + * @property {Boolean} xOriginBug + * In Chrome 24.0, an RTL element which has vertical overflow positions its right X origin incorrectly. + * It skips a non-existent scrollbar which has been moved to the left edge due to the RTL setting. + * + * http://code.google.com/p/chromium/issues/detail?id=174656 + * + * This method returns true if the browser is affected by this bug. + * + * @private + */ + { + identity: 'xOriginBug', + fn: function(doc, div) { + div.innerHTML = '
    ' + + '
    ' + + '
    ' + + '
    '; + + var outerBox = document.getElementById('b1').getBoundingClientRect(), + b2 = document.getElementById('b2').getBoundingClientRect(), + b3 = document.getElementById('b3').getBoundingClientRect(); + + return (b2.left !== outerBox.left && b3.right !== outerBox.right); + } + } + ] +}; +}()); + +Ext.supports.init(); // run the "early" detections now + +//@tag dom,core +//@require ../Support.js +//@define Ext.util.DelayedTask + +/** + * @class Ext.util.DelayedTask + * + * The DelayedTask class provides a convenient way to "buffer" the execution of a method, + * performing setTimeout where a new timeout cancels the old timeout. When called, the + * task will wait the specified time period before executing. If durng that time period, + * the task is called again, the original call will be cancelled. This continues so that + * the function is only called a single time for each iteration. + * + * This method is especially useful for things like detecting whether a user has finished + * typing in a text field. An example would be performing validation on a keypress. You can + * use this class to buffer the keypress events for a certain number of milliseconds, and + * perform only if they stop for that amount of time. + * + * ## Usage + * + * var task = new Ext.util.DelayedTask(function(){ + * alert(Ext.getDom('myInputField').value.length); + * }); + * + * // Wait 500ms before calling our function. If the user presses another key + * // during that 500ms, it will be cancelled and we'll wait another 500ms. + * Ext.get('myInputField').on('keypress', function() { + * task.{@link #delay}(500); + * }); + * + * Note that we are using a DelayedTask here to illustrate a point. The configuration + * option `buffer` for {@link Ext.util.Observable#addListener addListener/on} will + * also setup a delayed task for you to buffer events. + * + * @constructor The parameters to this constructor serve as defaults and are not required. + * @param {Function} fn (optional) The default function to call. If not specified here, it must be specified during the {@link #delay} call. + * @param {Object} scope (optional) The default scope (The **`this`** reference) in which the + * function is called. If not specified, `this` will refer to the browser window. + * @param {Array} args (optional) The default Array of arguments. + * @param {Boolean} [cancelOnDelay=true] By default, each call to {@link #delay} cancels any pending invocation and reschedules a new + * invocation. Specifying this as `false` means that calls to {@link #delay} when an invocation is pending just update the call settings, + * `newDelay`, `newFn`, `newScope` or `newArgs`, whichever are passed. + */ +Ext.util.DelayedTask = function(fn, scope, args, cancelOnDelay) { + var me = this, + id, + delay, + call = function() { + clearInterval(id); + id = null; + fn.apply(scope, args || []); + Ext.EventManager.idleEvent.fire(); + }; + + cancelOnDelay = typeof cancelOnDelay === 'boolean' ? cancelOnDelay : true; + + /** + * By default, cancels any pending timeout and queues a new one. + * + * If the `cancelOnDelay` parameter was specified as `false` in the constructor, this does not cancel and + * reschedule, but just updates the call settings, `newDelay`, `newFn`, `newScope` or `newArgs`, whichever are passed. + * + * @param {Number} newDelay The milliseconds to delay + * @param {Function} newFn (optional) Overrides function passed to constructor + * @param {Object} newScope (optional) Overrides scope passed to constructor. Remember that if no scope + * is specified, this will refer to the browser window. + * @param {Array} newArgs (optional) Overrides args passed to constructor + */ + me.delay = function(newDelay, newFn, newScope, newArgs) { + if (cancelOnDelay) { + me.cancel(); + } + delay = newDelay || delay, + fn = newFn || fn; + scope = newScope || scope; + args = newArgs || args; + if (!id) { + id = setInterval(call, delay); + } + }; + + /** + * Cancel the last queued timeout + */ + me.cancel = function() { + if (id) { + clearInterval(id); + id = null; + } + }; +}; + +//@tag dom,core +/** + * Represents single event type that an Observable object listens to. + * All actual listeners are tracked inside here. When the event fires, + * it calls all the registered listener functions. + * + * @private + */ +Ext.define('Ext.util.Event', function() { + var arraySlice = Array.prototype.slice, + arrayInsert = Ext.Array.insert, + toArray = Ext.Array.toArray, + DelayedTask = Ext.util.DelayedTask; + + return { + + + /** + * @property {Boolean} isEvent + * `true` in this class to identify an object as an instantiated Event, or subclass thereof. + */ + isEvent: true, + + // Private. Event suspend count + suspended: 0, + + noOptions: {}, + + constructor: function(observable, name) { + this.name = name; + this.observable = observable; + this.listeners = []; + }, + + addListener: function(fn, scope, options) { + var me = this, + listeners, listener, priority, isNegativePriority, highestNegativePriorityIndex, + hasNegativePriorityIndex, length, index, i, listenerPriority; + + scope = scope || me.observable; + + if (!fn) { + Ext.Error.raise({ + sourceClass: Ext.getClassName(this.observable), + sourceMethod: "addListener", + msg: "The specified callback function is undefined" + }); + } + + if (!me.isListening(fn, scope)) { + listener = me.createListener(fn, scope, options); + if (me.firing) { + // if we are currently firing this event, don't disturb the listener loop + me.listeners = me.listeners.slice(0); + } + listeners = me.listeners; + index = length = listeners.length; + priority = options && options.priority; + highestNegativePriorityIndex = me._highestNegativePriorityIndex; + hasNegativePriorityIndex = (highestNegativePriorityIndex !== undefined); + if (priority) { + // Find the index at which to insert the listener into the listeners array, + // sorted by priority highest to lowest. + isNegativePriority = (priority < 0); + if (!isNegativePriority || hasNegativePriorityIndex) { + // If the priority is a positive number, or if it is a negative number + // and there are other existing negative priority listenrs, then we + // need to calcuate the listeners priority-order index. + // If the priority is a negative number, begin the search for priority + // order index at the index of the highest existing negative priority + // listener, otherwise begin at 0 + for(i = (isNegativePriority ? highestNegativePriorityIndex : 0); i < length; i++) { + // Listeners created without options will have no "o" property + listenerPriority = listeners[i].o ? listeners[i].o.priority||0 : 0; + if (listenerPriority < priority) { + index = i; + break; + } + } + } else { + // if the priority is a negative number, and there are no other negative + // priority listeners, then no calculation is needed - the negative + // priority listener gets appended to the end of the listeners array. + me._highestNegativePriorityIndex = index; + } + } else if (hasNegativePriorityIndex) { + // listeners with a priority of 0 or undefined are appended to the end of + // the listeners array unless there are negative priority listeners in the + // listeners array, then they are inserted before the highest negative + // priority listener. + index = highestNegativePriorityIndex; + } + + if (!isNegativePriority && index <= highestNegativePriorityIndex) { + me._highestNegativePriorityIndex ++; + } + if (index === length) { + me.listeners[length] = listener; + } else { + arrayInsert(me.listeners, index, [listener]); + } + } + }, + + createListener: function(fn, scope, o) { + scope = scope || this.observable; + + var me = this, + listener = { + fn: fn, + scope: scope, + ev: me + }, + handler = fn; + + // The order is important. The 'single' wrapper must be wrapped by the 'buffer' and 'delayed' wrapper + // because the event removal that the single listener does destroys the listener's DelayedTask(s) + if (o) { + listener.o = o; + if (o.single) { + handler = me.createSingle(handler, listener, o, scope); + } + if (o.target) { + handler = me.createTargeted(handler, listener, o, scope); + } + if (o.delay) { + handler = me.createDelayed(handler, listener, o, scope); + } + if (o.buffer) { + handler = me.createBuffered(handler, listener, o, scope); + } + } + + listener.fireFn = handler; + return listener; + }, + + findListener: function(fn, scope) { + var listeners = this.listeners, + i = listeners.length, + listener, + s; + + while (i--) { + listener = listeners[i]; + if (listener) { + s = listener.scope; + + // Compare the listener's scope with *JUST THE PASSED SCOPE* if one is passed, and only fall back to the owning Observable if none is passed. + // We cannot use the test (s == scope || s == this.observable) + // Otherwise, if the Observable itself adds Ext.emptyFn as a listener, and then Ext.emptyFn is added under another scope, there will be a false match. + if (listener.fn == fn && (s == (scope || this.observable))) { + return i; + } + } + } + + return - 1; + }, + + isListening: function(fn, scope) { + return this.findListener(fn, scope) !== -1; + }, + + removeListener: function(fn, scope) { + var me = this, + index, + listener, + highestNegativePriorityIndex, + k; + index = me.findListener(fn, scope); + if (index != -1) { + listener = me.listeners[index]; + highestNegativePriorityIndex = me._highestNegativePriorityIndex; + + if (me.firing) { + me.listeners = me.listeners.slice(0); + } + + // cancel and remove a buffered handler that hasn't fired yet + if (listener.task) { + listener.task.cancel(); + delete listener.task; + } + + // cancel and remove all delayed handlers that haven't fired yet + k = listener.tasks && listener.tasks.length; + if (k) { + while (k--) { + listener.tasks[k].cancel(); + } + delete listener.tasks; + } + + // Remove this listener from the listeners array + // We can use splice directly. The IE8 bug which Ext.Array works around only affects *insertion* + // http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/6e946d03-e09f-4b22-a4dd-cd5e276bf05a/ + me.listeners.splice(index, 1); + + // if the listeners array contains negative priority listeners, adjust the + // internal index if needed. + if (highestNegativePriorityIndex) { + if (index < highestNegativePriorityIndex) { + me._highestNegativePriorityIndex --; + } else if (index === highestNegativePriorityIndex && index === me.listeners.length) { + delete me._highestNegativePriorityIndex; + } + } + return true; + } + + return false; + }, + + // Iterate to stop any buffered/delayed events + clearListeners: function() { + var listeners = this.listeners, + i = listeners.length; + + while (i--) { + this.removeListener(listeners[i].fn, listeners[i].scope); + } + }, + + suspend: function() { + this.suspended += 1; + }, + + resume: function() { + if (this.suspended) { + this.suspended--; + } + }, + + fire: function() { + var me = this, + listeners = me.listeners, + count = listeners.length, + i, + args, + listener, + len; + + if (!me.suspended && count > 0) { + me.firing = true; + args = arguments.length ? arraySlice.call(arguments, 0) : [] + len = args.length; + for (i = 0; i < count; i++) { + listener = listeners[i]; + if (listener.o) { + args[len] = listener.o; + } + if (listener && listener.fireFn.apply(listener.scope || me.observable, args) === false) { + return (me.firing = false); + } + } + } + me.firing = false; + return true; + }, + + createTargeted: function (handler, listener, o, scope) { + return function(){ + if (o.target === arguments[0]){ + handler.apply(scope, arguments); + } + }; + }, + + createBuffered: function (handler, listener, o, scope) { + listener.task = new DelayedTask(); + return function() { + listener.task.delay(o.buffer, handler, scope, toArray(arguments)); + }; + }, + + createDelayed: function (handler, listener, o, scope) { + return function() { + var task = new DelayedTask(); + if (!listener.tasks) { + listener.tasks = []; + } + listener.tasks.push(task); + task.delay(o.delay || 10, handler, scope, toArray(arguments)); + }; + }, + + createSingle: function (handler, listener, o, scope) { + return function() { + var event = listener.ev; + + if (event.removeListener(listener.fn, scope) && event.observable) { + // Removing from a regular Observable-owned, named event (not an anonymous + // event such as Ext's readyEvent): Decrement the listeners count + event.observable.hasListeners[event.name]--; + } + + return handler.apply(scope, arguments); + }; + } + }; +}); + +//@tag dom,core +//@require util/Event.js +//@define Ext.EventManager + +/** + * @class Ext.EventManager + * Registers event handlers that want to receive a normalized EventObject instead of the standard browser event and provides + * several useful events directly. + * + * See {@link Ext.EventObject} for more details on normalized event objects. + * @singleton + */ +Ext.EventManager = new function() { + var EventManager = this, + doc = document, + win = window, + escapeRx = /\\/g, + prefix = Ext.baseCSSPrefix, + readyEvent, + initExtCss = function() { + // find the body element + var bd = doc.body || doc.getElementsByTagName('body')[0], + cls = [prefix + 'body'], + htmlCls = [], + supportsLG = Ext.supports.CSS3LinearGradient, + supportsBR = Ext.supports.CSS3BorderRadius, + html; + + if (!bd) { + return false; + } + + html = bd.parentNode; + + function add (c) { + cls.push(prefix + c); + } + + //Let's keep this human readable! + if (Ext.isIE && Ext.isIE9m) { + add('ie'); + + // very often CSS needs to do checks like "IE7+" or "IE6 or 7". To help + // reduce the clutter (since CSS/SCSS cannot do these tests), we add some + // additional classes: + // + // x-ie7p : IE7+ : 7 <= ieVer + // x-ie7m : IE7- : ieVer <= 7 + // x-ie8p : IE8+ : 8 <= ieVer + // x-ie8m : IE8- : ieVer <= 8 + // x-ie9p : IE9+ : 9 <= ieVer + // x-ie78 : IE7 or 8 : 7 <= ieVer <= 8 + // + if (Ext.isIE6) { + add('ie6'); + } else { // ignore pre-IE6 :) + add('ie7p'); + + if (Ext.isIE7) { + add('ie7'); + } else { + add('ie8p'); + + if (Ext.isIE8) { + add('ie8'); + } else { + add('ie9p'); + + if (Ext.isIE9) { + add('ie9'); + } + } + } + } + + if (Ext.isIE7m) { + add('ie7m'); + } + if (Ext.isIE8m) { + add('ie8m'); + } + if (Ext.isIE9m) { + add('ie9m'); + } + if (Ext.isIE7 || Ext.isIE8) { + add('ie78'); + } + } + + if (Ext.isIE10) { + add('ie10'); + } + + if (Ext.isGecko) { + add('gecko'); + if (Ext.isGecko3) { + add('gecko3'); + } + if (Ext.isGecko4) { + add('gecko4'); + } + if (Ext.isGecko5) { + add('gecko5'); + } + } + if (Ext.isOpera) { + add('opera'); + } + if (Ext.isWebKit) { + add('webkit'); + } + if (Ext.isSafari) { + add('safari'); + if (Ext.isSafari2) { + add('safari2'); + } + if (Ext.isSafari3) { + add('safari3'); + } + if (Ext.isSafari4) { + add('safari4'); + } + if (Ext.isSafari5) { + add('safari5'); + } + if (Ext.isSafari5_0) { + add('safari5_0') + } + } + if (Ext.isChrome) { + add('chrome'); + } + if (Ext.isMac) { + add('mac'); + } + if (Ext.isLinux) { + add('linux'); + } + if (!supportsBR) { + add('nbr'); + } + if (!supportsLG) { + add('nlg'); + } + + // add to the parent to allow for selectors x-strict x-border-box, also set the isBorderBox property correctly + if (html) { + if (Ext.isStrict && (Ext.isIE6 || Ext.isIE7)) { + Ext.isBorderBox = false; + } + else { + Ext.isBorderBox = true; + } + + if(Ext.isBorderBox) { + htmlCls.push(prefix + 'border-box'); + } + if (Ext.isStrict) { + htmlCls.push(prefix + 'strict'); + } else { + htmlCls.push(prefix + 'quirks'); + } + Ext.fly(html, '_internal').addCls(htmlCls); + } + + Ext.fly(bd, '_internal').addCls(cls); + return true; + }; + + Ext.apply(EventManager, { + /** + * Check if we have bound our global onReady listener + * @private + */ + hasBoundOnReady: false, + + /** + * Check if fireDocReady has been called + * @private + */ + hasFiredReady: false, + + /** + * Additionally, allow the 'DOM' listener thread to complete (usually desirable with mobWebkit, Gecko) + * before firing the entire onReady chain (high stack load on Loader) by specifying a delay value. + * Defaults to 1ms. + * @private + */ + deferReadyEvent : 1, + + /* + * diags: a list of event names passed to onReadyEvent (in chron order) + * @private + */ + onReadyChain : [], + + /** + * Holds references to any onReady functions + * @private + */ + readyEvent: + (function () { + readyEvent = new Ext.util.Event(); + readyEvent.fire = function () { + Ext._beforeReadyTime = Ext._beforeReadyTime || new Date().getTime(); + readyEvent.self.prototype.fire.apply(readyEvent, arguments); + Ext._afterReadytime = new Date().getTime(); + }; + return readyEvent; + }()), + + /** + * Fires when an event handler finishes its run, just before returning to browser control. + * + * This includes DOM event handlers, Ajax (including JSONP) event handlers, and {@link Ext.util.TaskRunner TaskRunners} + * + * This can be useful for performing cleanup, or update tasks which need to happen only + * after all code in an event handler has been run, but which should not be executed in a timer + * due to the intervening browser reflow/repaint which would take place. + * + */ + idleEvent: new Ext.util.Event(), + + /** + * detects whether the EventManager has been placed in a paused state for synchronization + * with external debugging / perf tools (PageAnalyzer) + * @private + */ + isReadyPaused: function(){ + return (/[?&]ext-pauseReadyFire\b/i.test(location.search) && !Ext._continueFireReady); + }, + + /** + * Binds the appropriate browser event for checking if the DOM has loaded. + * @private + */ + bindReadyEvent: function() { + if (EventManager.hasBoundOnReady) { + return; + } + + // Test scenario where Core is dynamically loaded AFTER window.load + if ( doc.readyState == 'complete' ) { // Firefox4+ got support for this state, others already do. + EventManager.onReadyEvent({ + type: doc.readyState || 'body' + }); + } else { + doc.addEventListener('DOMContentLoaded', EventManager.onReadyEvent, false); + win.addEventListener('load', EventManager.onReadyEvent, false); + EventManager.hasBoundOnReady = true; + } + }, + + onReadyEvent : function(e) { + if (e && e.type) { + EventManager.onReadyChain.push(e.type); + } + + if (EventManager.hasBoundOnReady) { + doc.removeEventListener('DOMContentLoaded', EventManager.onReadyEvent, false); + win.removeEventListener('load', EventManager.onReadyEvent, false); + } + + if (!Ext.isReady) { + EventManager.fireDocReady(); + } + }, + + /** + * We know the document is loaded, so trigger any onReady events. + * @private + */ + fireDocReady: function() { + if (!Ext.isReady) { + Ext._readyTime = new Date().getTime(); + Ext.isReady = true; + + Ext.supports.init(); + EventManager.onWindowUnload(); + readyEvent.onReadyChain = EventManager.onReadyChain; //diags report + + if (Ext.isNumber(EventManager.deferReadyEvent)) { + Ext.Function.defer(EventManager.fireReadyEvent, EventManager.deferReadyEvent); + EventManager.hasDocReadyTimer = true; + } else { + EventManager.fireReadyEvent(); + } + } + }, + + /** + * Fires the ready event + * @private + */ + fireReadyEvent: function() { + + // Unset the timer flag here since other onReady events may be + // added during the fire() call and we don't want to block them + EventManager.hasDocReadyTimer = false; + EventManager.isFiring = true; + + // Ready events are all single: true, if we get to the end + // & there are more listeners, it means they were added + // inside some other ready event + while (readyEvent.listeners.length && !EventManager.isReadyPaused()) { + readyEvent.fire(); + } + EventManager.isFiring = false; + EventManager.hasFiredReady = true; + Ext.EventManager.idleEvent.fire(); + }, + + /** + * Adds a listener to be notified when the document is ready (before onload and before images are loaded). + * + * {@link Ext#onDocumentReady} is an alias for {@link Ext.EventManager#onDocumentReady}. + * + * @param {Function} fn The method the event invokes. + * @param {Object} [scope] The scope (`this` reference) in which the handler function executes. + * Defaults to the browser window. + * @param {Object} [options] Options object as passed to {@link Ext.Element#addListener}. + */ + onDocumentReady: function(fn, scope, options) { + options = options || {}; + // force single, only ever fire it once + options.single = true; + readyEvent.addListener(fn, scope, options); + + // If we're in the middle of firing, or we have a deferred timer + // pending, drop out since the event will be fired later + if (!(EventManager.isFiring || EventManager.hasDocReadyTimer)) { + if (Ext.isReady) { + EventManager.fireReadyEvent(); + } else { + EventManager.bindReadyEvent(); + } + } + }, + + // --------------------- event binding --------------------- + + /** + * Contains a list of all document mouse downs, so we can ensure they fire even when stopEvent is called. + * @private + */ + stoppedMouseDownEvent: new Ext.util.Event(), + + /** + * Options to parse for the 4th argument to addListener. + * @private + */ + propRe: /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate|freezeEvent)$/, + + /** + * Get the id of the element. If one has not been assigned, automatically assign it. + * @param {HTMLElement/Ext.Element} element The element to get the id for. + * @return {String} id + */ + getId : function(element) { + var id; + + element = Ext.getDom(element); + + if (element === doc || element === win) { + id = element === doc ? Ext.documentId : Ext.windowId; + } + else { + id = Ext.id(element); + } + + if (!Ext.cache[id]) { + Ext.addCacheEntry(id, null, element); + } + + return id; + }, + + /** + * Convert a "config style" listener into a set of flat arguments so they can be passed to addListener + * @private + * @param {Object} element The element the event is for + * @param {Object} event The event configuration + * @param {Object} isRemove True if a removal should be performed, otherwise an add will be done. + */ + prepareListenerConfig: function(element, config, isRemove) { + var propRe = EventManager.propRe, + key, value, args; + + // loop over all the keys in the object + for (key in config) { + if (config.hasOwnProperty(key)) { + // if the key is something else then an event option + if (!propRe.test(key)) { + value = config[key]; + // if the value is a function it must be something like click: function() {}, scope: this + // which means that there might be multiple event listeners with shared options + if (typeof value == 'function') { + // shared options + args = [element, key, value, config.scope, config]; + } else { + // if its not a function, it must be an object like click: {fn: function() {}, scope: this} + args = [element, key, value.fn, value.scope, value]; + } + + if (isRemove) { + EventManager.removeListener.apply(EventManager, args); + } else { + EventManager.addListener.apply(EventManager, args); + } + } + } + } + }, + + mouseEnterLeaveRe: /mouseenter|mouseleave/, + + /** + * Normalize cross browser event differences + * @private + * @param {Object} eventName The event name + * @param {Object} fn The function to execute + * @return {Object} The new event name/function + */ + normalizeEvent: function(eventName, fn) { + if (EventManager.mouseEnterLeaveRe.test(eventName) && !Ext.supports.MouseEnterLeave) { + if (fn) { + fn = Ext.Function.createInterceptor(fn, EventManager.contains); + } + eventName = eventName == 'mouseenter' ? 'mouseover' : 'mouseout'; + } else if (eventName == 'mousewheel' && !Ext.supports.MouseWheel && !Ext.isOpera) { + eventName = 'DOMMouseScroll'; + } + return { + eventName: eventName, + fn: fn + }; + }, + + /** + * Checks whether the event's relatedTarget is contained inside (or is) the element. + * @private + * @param {Object} event + */ + contains: function(event) { + event = event.browserEvent || event; + var parent = event.currentTarget, + child = EventManager.getRelatedTarget(event); + + if (parent && parent.firstChild) { + while (child) { + if (child === parent) { + return false; + } + child = child.parentNode; + if (child && (child.nodeType != 1)) { + child = null; + } + } + } + return true; + }, + + /** + * Appends an event handler to an element. The shorthand version {@link #on} is equivalent. + * Typically you will use {@link Ext.Element#addListener} directly on an Element in favor of + * calling this version. + * + * {@link Ext.EventManager#on} is an alias for {@link Ext.EventManager#addListener}. + * + * @param {String/Ext.Element/HTMLElement/Window} el The html element or id to assign the event handler to. + * + * @param {String} eventName The name of the event to listen for. + * + * @param {Function} handler The handler function the event invokes. + * @param {Ext.EventObject} handler.event The {@link Ext.EventObject EventObject} describing the event. + * @param {Ext.dom.Element} handler.target The Element which was the target of the event. + * Note that this may be filtered by using the `delegate` option. + * @param {Object} handler.options The options object from the addListener call. + * + * @param {Object} [scope] The scope (`this` reference) in which the handler function is executed. + * Defaults to the Element. + * + * @param {Object} [options] An object containing handler configuration properties. + * This may contain any of the following properties (See {@link Ext.Element#addListener} + * for examples of how to use these options.): + * @param {Object} options.scope The scope (`this` reference) in which the handler function is executed. Defaults to the Element. + * @param {String} options.delegate A simple selector to filter the target or look for a descendant of the target + * @param {Boolean} options.stopEvent True to stop the event. That is stop propagation, and prevent the default action. + * @param {Boolean} options.preventDefault True to prevent the default action + * @param {Boolean} options.stopPropagation True to prevent event propagation + * @param {Boolean} options.normalized False to pass a browser event to the handler function instead of an Ext.EventObject + * @param {Number} options.delay The number of milliseconds to delay the invocation of the handler after te event fires. + * @param {Boolean} options.single True to add a handler to handle just the next firing of the event, and then remove itself. + * @param {Number} options.buffer Causes the handler to be scheduled to run in an {@link Ext.util.DelayedTask} delayed + * by the specified number of milliseconds. If the event fires again within that time, the original + * handler is *not* invoked, but the new handler is scheduled in its place. + * @param {Ext.dom.Element} options.target Only call the handler if the event was fired on the target Element, + * *not* if the event was bubbled up from a child node. + */ + addListener: function(element, eventName, fn, scope, options) { + // Check if we've been passed a "config style" event. + if (typeof eventName !== 'string') { + EventManager.prepareListenerConfig(element, eventName); + return; + } + + var dom = element.dom || Ext.getDom(element), + bind, wrap, cache, id, cacheItem; + + if (!fn) { + Ext.Error.raise({ + sourceClass: 'Ext.EventManager', + sourceMethod: 'addListener', + targetElement: element, + eventName: eventName, + msg: 'Error adding "' + eventName + '\" listener. The handler function is undefined.' + }); + } + + // create the wrapper function + options = options || {}; + + bind = EventManager.normalizeEvent(eventName, fn); + wrap = EventManager.createListenerWrap(dom, eventName, bind.fn, scope, options); + + // add all required data into the event cache + cache = EventManager.getEventListenerCache(element.dom ? element : dom, eventName); + eventName = bind.eventName; + + if (dom.attachEvent) { + id = EventManager.normalizeId(dom); + // If there's no id we don't have any events bound, so we never + // need to clone at this point. + if (id) { + cacheItem = Ext.cache[id][eventName]; + if (cacheItem && cacheItem.firing) { + // If we're in the middle of firing we want to update the class + // cache reference so it is different to the array we referenced + // when we started firing the event. Though this is a more difficult + // way of not mutating the collection while firing, a vast majority of + // the time we won't be adding listeners for the same element/event type + // while firing the same event. + cache = EventManager.cloneEventListenerCache(dom, eventName); + } + } + } + + cache.push({ + fn: fn, + wrap: wrap, + scope: scope + }); + + + if (dom.attachEvent) { + // If cache length is 1, it means we're binding the first event + // for this element for this type + if (cache.length === 1) { + id = EventManager.normalizeId(dom, true); + fn = Ext.Function.bind(EventManager.handleSingleEvent, EventManager, [id, eventName], true); + Ext.cache[id][eventName] = { + firing: false, + fn: fn + }; + dom.attachEvent('on' + eventName, fn); + } + } else { + dom.addEventListener(eventName, wrap, options.capture || false); + } + + if (dom == doc && eventName == 'mousedown') { + EventManager.stoppedMouseDownEvent.addListener(wrap); + } + }, + + // Handle the case where the window/document already has an id attached. + // In this case we still want to return our custom window/doc id. + normalizeId: function(dom, force) { + var id; + if (dom === document) { + id = Ext.documentId; + } else if (dom === window) { + id = Ext.windowId; + } else { + id = dom.id; + } + if (!id && force) { + id = EventManager.getId(dom); + } + return id; + }, + + handleSingleEvent: function(e, id, eventName) { + // Don't create a copy here, since we fire lots of events and it's likely + // that we won't add an event during a fire. Instead, we'll handle this during + // the process of adding events + var listenerCache = EventManager.getEventListenerCache(id, eventName), + attachItem = Ext.cache[id][eventName], + len, i; + + // Typically this will never occur, however, the framework allows the creation + // of synthetic events in Ext.EventObject. As such, it makes it possible to fire + // off the same event on the same element during this method. + if (attachItem.firing) { + return; + } + + attachItem.firing = true; + for (i = 0, len = listenerCache.length; i < len; ++i) { + listenerCache[i].wrap(e); + } + attachItem.firing = false; + + }, + + /** + * Removes an event handler from an element. The shorthand version {@link #un} is equivalent. Typically + * you will use {@link Ext.Element#removeListener} directly on an Element in favor of calling this version. + * + * {@link Ext.EventManager#on} is an alias for {@link Ext.EventManager#addListener}. + * + * @param {String/Ext.Element/HTMLElement/Window} el The id or html element from which to remove the listener. + * @param {String} eventName The name of the event. + * @param {Function} fn The handler function to remove. **This must be a reference to the function passed + * into the {@link #addListener} call.** + * @param {Object} scope If a scope (`this` reference) was specified when the listener was added, + * then this must refer to the same object. + */ + removeListener : function(element, eventName, fn, scope) { + // handle our listener config object syntax + if (typeof eventName !== 'string') { + EventManager.prepareListenerConfig(element, eventName, true); + return; + } + + var dom = Ext.getDom(element), + id, el = element.dom ? element : Ext.get(dom), + cache = EventManager.getEventListenerCache(el, eventName), + bindName = EventManager.normalizeEvent(eventName).eventName, + i = cache.length, j, cacheItem, + listener, wrap; + + + while (i--) { + listener = cache[i]; + + if (listener && (!fn || listener.fn == fn) && (!scope || listener.scope === scope)) { + wrap = listener.wrap; + + // clear buffered calls + if (wrap.task) { + clearTimeout(wrap.task); + delete wrap.task; + } + + // clear delayed calls + j = wrap.tasks && wrap.tasks.length; + if (j) { + while (j--) { + clearTimeout(wrap.tasks[j]); + } + delete wrap.tasks; + } + + if (dom.detachEvent) { + // if length is 1, we're removing the final event, actually + // unbind it from the element + id = EventManager.normalizeId(dom, true); + cacheItem = Ext.cache[id][bindName]; + if (cacheItem && cacheItem.firing) { + // See code in addListener for why we create a copy + cache = EventManager.cloneEventListenerCache(dom, bindName); + } + + if (cache.length === 1) { + fn = cacheItem.fn; + delete Ext.cache[id][bindName]; + dom.detachEvent('on' + bindName, fn); + } + } else { + dom.removeEventListener(bindName, wrap, false); + } + + if (wrap && dom == doc && eventName == 'mousedown') { + EventManager.stoppedMouseDownEvent.removeListener(wrap); + } + + // remove listener from cache + Ext.Array.erase(cache, i, 1); + } + } + }, + + /** + * Removes all event handers from an element. Typically you will use {@link Ext.Element#removeAllListeners} + * directly on an Element in favor of calling this version. + * @param {String/Ext.Element/HTMLElement/Window} el The id or html element from which to remove all event handlers. + */ + removeAll : function(element) { + var id = (typeof element === 'string') ? element : element.id, + cache, events, eventName; + + // If the element does not have an ID or a cache entry for its ID, then this is a no-op + if (id && (cache = Ext.cache[id])) { + events = cache.events; + + for (eventName in events) { + if (events.hasOwnProperty(eventName)) { + EventManager.removeListener(element, eventName); + } + } + cache.events = {}; + } + }, + + /** + * Recursively removes all previous added listeners from an element and its children. Typically you will use {@link Ext.Element#purgeAllListeners} + * directly on an Element in favor of calling this version. + * @param {String/Ext.Element/HTMLElement/Window} el The id or html element from which to remove all event handlers. + * @param {String} eventName (optional) The name of the event. + */ + purgeElement : function(element, eventName) { + var dom = Ext.getDom(element), + i = 0, len, childNodes; + + if (eventName) { + EventManager.removeListener(element, eventName); + } else { + EventManager.removeAll(element); + } + + if (dom && dom.childNodes) { + childNodes = dom.childNodes; + for (len = childNodes.length; i < len; i++) { + EventManager.purgeElement(childNodes[i], eventName); + } + } + }, + + /** + * Create the wrapper function for the event + * @private + * @param {HTMLElement} dom The dom element + * @param {String} ename The event name + * @param {Function} fn The function to execute + * @param {Object} scope The scope to execute callback in + * @param {Object} options The options + * @return {Function} the wrapper function + */ + createListenerWrap : function(dom, ename, fn, scope, options) { + options = options || {}; + + var f, gen, wrap = function(e, args) { + // Compile the implementation upon first firing + if (!gen) { + f = ['if(!' + Ext.name + ') {return;}']; + + if (options.buffer || options.delay || options.freezeEvent) { + if (options.freezeEvent) { + // If we're freezing, we still want to update the singleton event object + // as well as returning a frozen copy + f.push('e = X.EventObject.setEvent(e);'); + } + f.push('e = new X.EventObjectImpl(e, ' + (options.freezeEvent ? 'true' : 'false' ) + ');'); + } else { + f.push('e = X.EventObject.setEvent(e);'); + } + + if (options.delegate) { + // double up '\' characters so escape sequences survive the + // string-literal translation + f.push('var result, t = e.getTarget("' + (options.delegate + '').replace(escapeRx, '\\\\') + '", this);'); + f.push('if(!t) {return;}'); + } else { + f.push('var t = e.target, result;'); + } + + if (options.target) { + f.push('if(e.target !== options.target) {return;}'); + } + + if (options.stopEvent) { + f.push('e.stopEvent();'); + } else { + if(options.preventDefault) { + f.push('e.preventDefault();'); + } + if(options.stopPropagation) { + f.push('e.stopPropagation();'); + } + } + + if (options.normalized === false) { + f.push('e = e.browserEvent;'); + } + + if (options.buffer) { + f.push('(wrap.task && clearTimeout(wrap.task));'); + f.push('wrap.task = setTimeout(function() {'); + } + + if (options.delay) { + f.push('wrap.tasks = wrap.tasks || [];'); + f.push('wrap.tasks.push(setTimeout(function() {'); + } + + // finally call the actual handler fn + f.push('result = fn.call(scope || dom, e, t, options);'); + + if (options.single) { + f.push('evtMgr.removeListener(dom, ename, fn, scope);'); + } + + // Fire the global idle event for all events except mousemove which is too common, and + // fires too frequently and fast to be use in tiggering onIdle processing. Do not fire on page unload. + if (ename !== 'mousemove' && ename !== 'unload') { + f.push('if (evtMgr.idleEvent.listeners.length) {'); + f.push('evtMgr.idleEvent.fire();'); + f.push('}'); + } + + if (options.delay) { + f.push('}, ' + options.delay + '));'); + } + + if (options.buffer) { + f.push('}, ' + options.buffer + ');'); + } + f.push('return result;'); + + gen = Ext.cacheableFunctionFactory('e', 'options', 'fn', 'scope', 'ename', 'dom', 'wrap', 'args', 'X', 'evtMgr', f.join('\n')); + } + + return gen.call(dom, e, options, fn, scope, ename, dom, wrap, args, Ext, EventManager); + }; + return wrap; + }, + + /** + * Gets the event cache object for a particular element + * @private + * @param {HTMLElement} element The element + * @return {Object} The event cache object + */ + getEventCache: function(element) { + var elementCache, eventCache, id; + + if (!element) { + return []; + } + + if (element.$cache) { + elementCache = element.$cache; + } else { + // getId will populate the cache for this element if it isn't already present + if (typeof element === 'string') { + id = element; + } else { + id = EventManager.getId(element); + } + elementCache = Ext.cache[id]; + } + eventCache = elementCache.events || (elementCache.events = {}); + return eventCache; + }, + + /** + * Get the event cache for a particular element for a particular event + * @private + * @param {HTMLElement} element The element + * @param {Object} eventName The event name + * @return {Array} The events for the element + */ + getEventListenerCache : function(element, eventName) { + var eventCache = EventManager.getEventCache(element); + return eventCache[eventName] || (eventCache[eventName] = []); + }, + + /** + * Clones the event cache for a particular element for a particular event + * @private + * @param {HTMLElement} element The element + * @param {Object} eventName The event name + * @return {Array} The cloned events for the element + */ + cloneEventListenerCache: function(element, eventName){ + var eventCache = EventManager.getEventCache(element), + out; + + if (eventCache[eventName]) { + out = eventCache[eventName].slice(0); + } else { + out = []; + } + eventCache[eventName] = out; + return out; + }, + + // --------------------- utility methods --------------------- + mouseLeaveRe: /(mouseout|mouseleave)/, + mouseEnterRe: /(mouseover|mouseenter)/, + + /** + * Stop the event (preventDefault and stopPropagation) + * @param {Event} event The event to stop + */ + stopEvent: function(event) { + EventManager.stopPropagation(event); + EventManager.preventDefault(event); + }, + + /** + * Cancels bubbling of the event. + * @param {Event} event The event to stop bubbling. + */ + stopPropagation: function(event) { + event = event.browserEvent || event; + if (event.stopPropagation) { + event.stopPropagation(); + } else { + event.cancelBubble = true; + } + }, + + /** + * Prevents the browsers default handling of the event. + * @param {Event} event The event to prevent the default + */ + preventDefault: function(event) { + event = event.browserEvent || event; + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + // Some keys events require setting the keyCode to -1 to be prevented + try { + // all ctrl + X and F1 -> F12 + if (event.ctrlKey || event.keyCode > 111 && event.keyCode < 124) { + event.keyCode = -1; + } + } catch (e) { + // see this outdated document http://support.microsoft.com/kb/934364/en-us for more info + } + } + }, + + /** + * Gets the related target from the event. + * @param {Object} event The event + * @return {HTMLElement} The related target. + */ + getRelatedTarget: function(event) { + event = event.browserEvent || event; + var target = event.relatedTarget; + if (!target) { + if (EventManager.mouseLeaveRe.test(event.type)) { + target = event.toElement; + } else if (EventManager.mouseEnterRe.test(event.type)) { + target = event.fromElement; + } + } + return EventManager.resolveTextNode(target); + }, + + /** + * Gets the x coordinate from the event + * @param {Object} event The event + * @return {Number} The x coordinate + */ + getPageX: function(event) { + return EventManager.getPageXY(event)[0]; + }, + + /** + * Gets the y coordinate from the event + * @param {Object} event The event + * @return {Number} The y coordinate + */ + getPageY: function(event) { + return EventManager.getPageXY(event)[1]; + }, + + /** + * Gets the x & y coordinate from the event + * @param {Object} event The event + * @return {Number[]} The x/y coordinate + */ + getPageXY: function(event) { + event = event.browserEvent || event; + var x = event.pageX, + y = event.pageY, + docEl = doc.documentElement, + body = doc.body; + + // pageX/pageY not available (undefined, not null), use clientX/clientY instead + if (!x && x !== 0) { + x = event.clientX + (docEl && docEl.scrollLeft || body && body.scrollLeft || 0) - (docEl && docEl.clientLeft || body && body.clientLeft || 0); + y = event.clientY + (docEl && docEl.scrollTop || body && body.scrollTop || 0) - (docEl && docEl.clientTop || body && body.clientTop || 0); + } + return [x, y]; + }, + + /** + * Gets the target of the event. + * @param {Object} event The event + * @return {HTMLElement} target + */ + getTarget: function(event) { + event = event.browserEvent || event; + return EventManager.resolveTextNode(event.target || event.srcElement); + }, + + // technically no need to browser sniff this, however it makes + // no sense to check this every time, for every event, whether + // the string is equal. + /** + * Resolve any text nodes accounting for browser differences. + * @private + * @param {HTMLElement} node The node + * @return {HTMLElement} The resolved node + */ + resolveTextNode: Ext.isGecko ? + function(node) { + if (node) { + // work around firefox bug, https://bugzilla.mozilla.org/show_bug.cgi?id=101197 + var s = HTMLElement.prototype.toString.call(node); + if (s !== '[xpconnect wrapped native prototype]' && s !== '[object XULElement]') { + return node.nodeType == 3 ? node.parentNode: node; + } + } + } + : + function(node) { + return node && node.nodeType == 3 ? node.parentNode: node; + }, + + // --------------------- custom event binding --------------------- + + // Keep track of the current width/height + curWidth: 0, + curHeight: 0, + + /** + * Adds a listener to be notified when the browser window is resized and provides resize event buffering (100 milliseconds), + * passes new viewport width and height to handlers. + * @param {Function} fn The handler function the window resize event invokes. + * @param {Object} scope The scope (this reference) in which the handler function executes. Defaults to the browser window. + * @param {Boolean} [options] Options object as passed to {@link Ext.Element#addListener} + */ + onWindowResize: function(fn, scope, options) { + var resize = EventManager.resizeEvent; + + if (!resize) { + EventManager.resizeEvent = resize = new Ext.util.Event(); + EventManager.on(win, 'resize', EventManager.fireResize, null, {buffer: 100}); + } + resize.addListener(fn, scope, options); + }, + + /** + * Fire the resize event. + * @private + */ + fireResize: function() { + var w = Ext.Element.getViewWidth(), + h = Ext.Element.getViewHeight(); + + //whacky problem in IE where the resize event will sometimes fire even though the w/h are the same. + if (EventManager.curHeight != h || EventManager.curWidth != w) { + EventManager.curHeight = h; + EventManager.curWidth = w; + EventManager.resizeEvent.fire(w, h); + } + }, + + /** + * Removes the passed window resize listener. + * @param {Function} fn The method the event invokes + * @param {Object} scope The scope of handler + */ + removeResizeListener: function(fn, scope) { + var resize = EventManager.resizeEvent; + if (resize) { + resize.removeListener(fn, scope); + } + }, + + /** + * Adds a listener to be notified when the browser window is unloaded. + * @param {Function} fn The handler function the window unload event invokes. + * @param {Object} scope The scope (this reference) in which the handler function executes. Defaults to the browser window. + * @param {Boolean} options Options object as passed to {@link Ext.Element#addListener} + */ + onWindowUnload: function(fn, scope, options) { + var unload = EventManager.unloadEvent; + + if (!unload) { + EventManager.unloadEvent = unload = new Ext.util.Event(); + EventManager.addListener(win, 'unload', EventManager.fireUnload); + } + if (fn) { + unload.addListener(fn, scope, options); + } + }, + + /** + * Fires the unload event for items bound with onWindowUnload + * @private + */ + fireUnload: function() { + // wrap in a try catch, could have some problems during unload + try { + // relinquish references. + doc = win = undefined; + + var gridviews, i, ln, + el, cache; + + EventManager.unloadEvent.fire(); + // Work around FF3 remembering the last scroll position when refreshing the grid and then losing grid view + if (Ext.isGecko3) { + gridviews = Ext.ComponentQuery.query('gridview'); + i = 0; + ln = gridviews.length; + for (; i < ln; i++) { + gridviews[i].scrollToTop(); + } + } + // Purge all elements in the cache + cache = Ext.cache; + + for (el in cache) { + if (cache.hasOwnProperty(el)) { + EventManager.removeAll(el); + } + } + } catch(e) { + } + }, + + /** + * Removes the passed window unload listener. + * @param {Function} fn The method the event invokes + * @param {Object} scope The scope of handler + */ + removeUnloadListener: function(fn, scope) { + var unload = EventManager.unloadEvent; + if (unload) { + unload.removeListener(fn, scope); + } + }, + + /** + * note 1: IE fires ONLY the keydown event on specialkey autorepeat + * note 2: Safari < 3.1, Gecko (Mac/Linux) & Opera fire only the keypress event on specialkey autorepeat + * (research done by Jan Wolter at http://unixpapa.com/js/key.html) + * @private + */ + useKeyDown: Ext.isWebKit ? + parseInt(navigator.userAgent.match(/AppleWebKit\/(\d+)/)[1], 10) >= 525 : + !((Ext.isGecko && !Ext.isWindows) || Ext.isOpera), + + /** + * Indicates which event to use for getting key presses. + * @return {String} The appropriate event name. + */ + getKeyEvent: function() { + return EventManager.useKeyDown ? 'keydown' : 'keypress'; + } + }); + + // route "< ie9-Standards" to a legacy IE onReady implementation + if(!('addEventListener' in document) && document.attachEvent) { + Ext.apply( EventManager, { + /* Customized implementation for Legacy IE. The default implementation is configured for use + * with all other 'standards compliant' agents. + * References: http://javascript.nwbox.com/IEContentLoaded/ + * licensed courtesy of http://developer.yahoo.com/yui/license.html + */ + + /** + * This strategy has minimal benefits for Sencha solutions that build themselves (ie. minimal initial page markup). + * However, progressively-enhanced pages (with image content and/or embedded frames) will benefit the most from it. + * Browser timer resolution is too poor to ensure a doScroll check more than once on a page loaded with minimal + * assets (the readystatechange event 'complete' usually beats the doScroll timer on a 'lightly-loaded' initial document). + */ + pollScroll : function() { + var scrollable = true; + + try { + document.documentElement.doScroll('left'); + } catch(e) { + scrollable = false; + } + + // on IE8, when running within an iFrame, document.body is not immediately available + if (scrollable && document.body) { + EventManager.onReadyEvent({ + type:'doScroll' + }); + } else { + /* + * minimize thrashing -- + * adjusted for setTimeout's close-to-minimums (not too low), + * as this method SHOULD always be called once initially + */ + EventManager.scrollTimeout = setTimeout(EventManager.pollScroll, 20); + } + + return scrollable; + }, + + /** + * Timer for doScroll polling + * @private + */ + scrollTimeout: null, + + /* @private + */ + readyStatesRe : /complete/i, + + /* @private + */ + checkReadyState: function() { + var state = document.readyState; + + if (EventManager.readyStatesRe.test(state)) { + EventManager.onReadyEvent({ + type: state + }); + } + }, + + bindReadyEvent: function() { + var topContext = true; + + if (EventManager.hasBoundOnReady) { + return; + } + + //are we in an IFRAME? (doScroll ineffective here) + try { + topContext = window.frameElement === undefined; + } catch(e) { + // If we throw an exception, it means we're probably getting access denied, + // which means we're in an iframe cross domain. + topContext = false; + } + + if (!topContext || !doc.documentElement.doScroll) { + EventManager.pollScroll = Ext.emptyFn; //then noop this test altogether + } + + // starts doScroll polling if necessary + if (EventManager.pollScroll() === true) { + return; + } + + // Core is loaded AFTER initial document write/load ? + if (doc.readyState == 'complete' ) { + EventManager.onReadyEvent({type: 'already ' + (doc.readyState || 'body') }); + } else { + doc.attachEvent('onreadystatechange', EventManager.checkReadyState); + window.attachEvent('onload', EventManager.onReadyEvent); + EventManager.hasBoundOnReady = true; + } + }, + + onReadyEvent : function(e) { + if (e && e.type) { + EventManager.onReadyChain.push(e.type); + } + + if (EventManager.hasBoundOnReady) { + document.detachEvent('onreadystatechange', EventManager.checkReadyState); + window.detachEvent('onload', EventManager.onReadyEvent); + } + + if (Ext.isNumber(EventManager.scrollTimeout)) { + clearTimeout(EventManager.scrollTimeout); + delete EventManager.scrollTimeout; + } + + if (!Ext.isReady) { + EventManager.fireDocReady(); + } + }, + + //diags: a list of event types passed to onReadyEvent (in chron order) + onReadyChain : [] + }); + } + + + /** + * Adds a function to be called when the DOM is ready, and all required classes have been loaded. + * + * If the DOM is ready and all classes are loaded, the passed function is executed immediately. + * @member Ext + * @method onReady + * @param {Function} fn The function callback to be executed + * @param {Object} scope The execution scope (`this` reference) of the callback function + * @param {Object} options The options to modify the listener as passed to {@link Ext.util.Observable#addListener addListener}. + */ + Ext.onReady = function(fn, scope, options) { + Ext.Loader.onReady(fn, scope, true, options); + }; + + /** + * @member Ext + * @method onDocumentReady + * @inheritdoc Ext.EventManager#onDocumentReady + */ + Ext.onDocumentReady = EventManager.onDocumentReady; + + /** + * @member Ext.EventManager + * @method on + * @inheritdoc Ext.EventManager#addListener + */ + EventManager.on = EventManager.addListener; + + /** + * @member Ext.EventManager + * @method un + * @inheritdoc Ext.EventManager#removeListener + */ + EventManager.un = EventManager.removeListener; + + Ext.onReady(initExtCss); +}; + +//@tag core +/** + * Base class that provides a common interface for publishing events. Subclasses are expected to to have a property + * "events" with all the events defined, and, optionally, a property "listeners" with configured listeners defined. + * + * For example: + * + * Ext.define('Employee', { + * mixins: { + * observable: 'Ext.util.Observable' + * }, + * + * constructor: function (config) { + * // The Observable constructor copies all of the properties of `config` on + * // to `this` using {@link Ext#apply}. Further, the `listeners` property is + * // processed to add listeners. + * // + * this.mixins.observable.constructor.call(this, config); + * + * this.addEvents( + * 'fired', + * 'quit' + * ); + * } + * }); + * + * This could then be used like this: + * + * var newEmployee = new Employee({ + * name: employeeName, + * listeners: { + * quit: function() { + * // By default, "this" will be the object that fired the event. + * alert(this.name + " has quit!"); + * } + * } + * }); + */ +Ext.define('Ext.util.Observable', function(Observable) { + + // Private Destroyable class which removes listeners + var emptyArray = [], + arrayProto = Array.prototype, + arraySlice = arrayProto.slice, + ExtEvent = Ext.util.Event, + ListenerRemover = function(observable) { + + // Passed a ListenerRemover: return it + if (observable instanceof ListenerRemover) { + return observable; + } + + this.observable = observable; + + // Called when addManagedListener is used with the event source as the second arg: + // (owner, eventSource, args...) + if (arguments[1].isObservable) { + this.managedListeners = true; + } + this.args = arraySlice.call(arguments, 1); + }; + + ListenerRemover.prototype.destroy = function() { + this.observable[this.managedListeners ? 'mun' : 'un'].apply(this.observable, this.args); + }; + + return { + + /* Begin Definitions */ + + + + statics: { + /** + * Removes **all** added captures from the Observable. + * + * @param {Ext.util.Observable} o The Observable to release + * @static + */ + releaseCapture: function(o) { + o.fireEvent = this.prototype.fireEvent; + }, + + /** + * Starts capture on the specified Observable. All events will be passed to the supplied function with the event + * name + standard signature of the event **before** the event is fired. If the supplied function returns false, + * the event will not fire. + * + * @param {Ext.util.Observable} o The Observable to capture events from. + * @param {Function} fn The function to call when an event is fired. + * @param {Object} scope (optional) The scope (`this` reference) in which the function is executed. Defaults to + * the Observable firing the event. + * @static + */ + capture: function(o, fn, scope) { + o.fireEvent = Ext.Function.createInterceptor(o.fireEvent, fn, scope); + }, + + /** + * Sets observability on the passed class constructor. + * + * This makes any event fired on any instance of the passed class also fire a single event through + * the **class** allowing for central handling of events on many instances at once. + * + * Usage: + * + * Ext.util.Observable.observe(Ext.data.Connection); + * Ext.data.Connection.on('beforerequest', function(con, options) { + * console.log('Ajax request made to ' + options.url); + * }); + * + * @param {Function} c The class constructor to make observable. + * @param {Object} listeners An object containing a series of listeners to add. See {@link #addListener}. + * @static + */ + observe: function(cls, listeners) { + if (cls) { + if (!cls.isObservable) { + Ext.applyIf(cls, new this()); + this.capture(cls.prototype, cls.fireEvent, cls); + } + if (Ext.isObject(listeners)) { + cls.on(listeners); + } + } + return cls; + }, + + /** + * Prepares a given class for observable instances. This method is called when a + * class derives from this class or uses this class as a mixin. + * @param {Function} T The class constructor to prepare. + * @private + */ + prepareClass: function (T, mixin) { + // T.hasListeners is the object to track listeners on class T. This object's + // prototype (__proto__) is the "hasListeners" of T.superclass. + + // Instances of T will create "hasListeners" that have T.hasListeners as their + // immediate prototype (__proto__). + + if (!T.HasListeners) { + // We create a HasListeners "class" for this class. The "prototype" of the + // HasListeners class is an instance of the HasListeners class associated + // with this class's super class (or with Observable). + var HasListeners = function () {}, + SuperHL = T.superclass.HasListeners || (mixin && mixin.HasListeners) || + Observable.HasListeners; + + // Make the HasListener class available on the class and its prototype: + T.prototype.HasListeners = T.HasListeners = HasListeners; + + // And connect its "prototype" to the new HasListeners of our super class + // (which is also the class-level "hasListeners" instance). + HasListeners.prototype = T.hasListeners = new SuperHL(); + } + } + }, + + /* End Definitions */ + + /** + * @cfg {Object} listeners + * + * A config object containing one or more event handlers to be added to this object during initialization. This + * should be a valid listeners config object as specified in the {@link #addListener} example for attaching multiple + * handlers at once. + * + * **DOM events from Ext JS {@link Ext.Component Components}** + * + * While _some_ Ext JS Component classes export selected DOM events (e.g. "click", "mouseover" etc), this is usually + * only done when extra value can be added. For example the {@link Ext.view.View DataView}'s **`{@link + * Ext.view.View#itemclick itemclick}`** event passing the node clicked on. To access DOM events directly from a + * child element of a Component, we need to specify the `element` option to identify the Component property to add a + * DOM listener to: + * + * new Ext.panel.Panel({ + * width: 400, + * height: 200, + * dockedItems: [{ + * xtype: 'toolbar' + * }], + * listeners: { + * click: { + * element: 'el', //bind to the underlying el property on the panel + * fn: function(){ console.log('click el'); } + * }, + * dblclick: { + * element: 'body', //bind to the underlying body property on the panel + * fn: function(){ console.log('dblclick body'); } + * } + * } + * }); + */ + + /** + * @property {Boolean} isObservable + * `true` in this class to identify an object as an instantiated Observable, or subclass thereof. + */ + isObservable: true, + + /** + * @private + * Initial suspended call count. Incremented when {@link #suspendEvents} is called, decremented when {@link #resumeEvents} is called. + */ + eventsSuspended: 0, + + /** + * @property {Object} hasListeners + * @readonly + * This object holds a key for any event that has a listener. The listener may be set + * directly on the instance, or on its class or a super class (via {@link #observe}) or + * on the {@link Ext.app.EventBus MVC EventBus}. The values of this object are truthy + * (a non-zero number) and falsy (0 or undefined). They do not represent an exact count + * of listeners. The value for an event is truthy if the event must be fired and is + * falsy if there is no need to fire the event. + * + * The intended use of this property is to avoid the expense of fireEvent calls when + * there are no listeners. This can be particularly helpful when one would otherwise + * have to call fireEvent hundreds or thousands of times. It is used like this: + * + * if (this.hasListeners.foo) { + * this.fireEvent('foo', this, arg1); + * } + */ + + constructor: function(config) { + var me = this; + + Ext.apply(me, config); + + // The subclass may have already initialized it. + if (!me.hasListeners) { + me.hasListeners = new me.HasListeners(); + } + + me.events = me.events || {}; + if (me.listeners) { + me.on(me.listeners); + me.listeners = null; //Set as an instance property to pre-empt the prototype in case any are set there. + } + + if (me.bubbleEvents) { + me.enableBubble(me.bubbleEvents); + } + }, + + onClassExtended: function (T) { + if (!T.HasListeners) { + // Some classes derive from us and some others derive from those classes. All + // of these are passed to this method. + Observable.prepareClass(T); + } + }, + + // @private + // Matches options property names within a listeners specification object - property names which are never used as event names. + eventOptionsRe : /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate|element|destroyable|vertical|horizontal|freezeEvent|priority)$/, + + /** + * Adds listeners to any Observable object (or Ext.Element) which are automatically removed when this Component is + * destroyed. + * + * @param {Ext.util.Observable/Ext.Element} item The item to which to add a listener/listeners. + * @param {Object/String} ename The event name, or an object containing event name properties. + * @param {Function} fn (optional) If the `ename` parameter was an event name, this is the handler function. + * @param {Object} scope (optional) If the `ename` parameter was an event name, this is the scope (`this` reference) + * in which the handler function is executed. + * @param {Object} options (optional) If the `ename` parameter was an event name, this is the + * {@link Ext.util.Observable#addListener addListener} options. + * @return {Object} **Only when the `destroyable` option is specified. ** + * + * A `Destroyable` object. An object which implements the `destroy` method which removes all listeners added in this call. For example: + * + * this.btnListeners = = myButton.mon({ + * destroyable: true + * mouseover: function() { console.log('mouseover'); }, + * mouseout: function() { console.log('mouseout'); }, + * click: function() { console.log('click'); } + * }); + * + * And when those listeners need to be removed: + * + * Ext.destroy(this.btnListeners); + * + * or + * + * this.btnListeners.destroy(); + */ + addManagedListener : function(item, ename, fn, scope, options, /* private */ noDestroy) { + var me = this, + managedListeners = me.managedListeners = me.managedListeners || [], + config, passedOptions; + + if (typeof ename !== 'string') { + // When creating listeners using the object form, allow caller to override the default of + // using the listeners object as options. + // This is used by relayEvents, when adding its relayer so that it does not contibute + // a spurious options param to the end of the arg list. + passedOptions = arguments.length > 4 ? options : ename; + + options = ename; + for (ename in options) { + if (options.hasOwnProperty(ename)) { + config = options[ename]; + if (!me.eventOptionsRe.test(ename)) { + // recurse, but pass the noDestroy parameter as true so that lots of individual Destroyables are not created. + // We create a single one at the end if necessary. + me.addManagedListener(item, ename, config.fn || config, config.scope || options.scope || scope, config.fn ? config : passedOptions, true); + } + } + } + if (options && options.destroyable) { + return new ListenerRemover(me, item, options); + } + } + else { + if (typeof fn === 'string') { + scope = scope || me; + if (!(scope[fn])) { + Ext.Error.raise('No method named "' + fn + '"'); + } + fn = scope[fn]; + } + managedListeners.push({ + item: item, + ename: ename, + fn: fn, + scope: scope, + options: options + }); + + item.on(ename, fn, scope, options); + + // The 'noDestroy' flag is sent if we're looping through a hash of listeners passing each one to addManagedListener separately + if (!noDestroy && options && options.destroyable) { + return new ListenerRemover(me, item, ename, fn, scope); + } + } + }, + + /** + * Removes listeners that were added by the {@link #mon} method. + * + * @param {Ext.util.Observable/Ext.Element} item The item from which to remove a listener/listeners. + * @param {Object/String} ename The event name, or an object containing event name properties. + * @param {Function} fn (optional) If the `ename` parameter was an event name, this is the handler function. + * @param {Object} scope (optional) If the `ename` parameter was an event name, this is the scope (`this` reference) + * in which the handler function is executed. + */ + removeManagedListener : function(item, ename, fn, scope) { + var me = this, + options, + config, + managedListeners, + length, + i; + + if (typeof ename !== 'string') { + options = ename; + for (ename in options) { + if (options.hasOwnProperty(ename)) { + config = options[ename]; + if (!me.eventOptionsRe.test(ename)) { + me.removeManagedListener(item, ename, config.fn || config, config.scope || options.scope || scope); + } + } + } + } else { + + managedListeners = me.managedListeners ? me.managedListeners.slice() : []; + + for (i = 0, length = managedListeners.length; i < length; i++) { + me.removeManagedListenerItem(false, managedListeners[i], item, ename, fn, scope); + } + } + }, + + /** + * Fires the specified event with the passed parameters (minus the event name, plus the `options` object passed + * to {@link #addListener}). + * + * An event may be set to bubble up an Observable parent hierarchy (See {@link Ext.Component#getBubbleTarget}) by + * calling {@link #enableBubble}. + * + * @param {String} eventName The name of the event to fire. + * @param {Object...} args Variable number of parameters are passed to handlers. + * @return {Boolean} returns false if any of the handlers return false otherwise it returns true. + */ + fireEvent: function(eventName) { + return this.fireEventArgs(eventName, Array.prototype.slice.call(arguments, 1)); + }, + + /** + * Fires the specified event with the passed parameter list. + * + * An event may be set to bubble up an Observable parent hierarchy (See {@link Ext.Component#getBubbleTarget}) by + * calling {@link #enableBubble}. + * + * @param {String} eventName The name of the event to fire. + * @param {Object[]} args An array of parameters which are passed to handlers. + * @return {Boolean} returns false if any of the handlers return false otherwise it returns true. + */ + fireEventArgs: function(eventName, args) { + eventName = eventName.toLowerCase(); + var me = this, + events = me.events, + event = events && events[eventName], + ret = true; + + // Only continue firing the event if there are listeners to be informed. + // Bubbled events will always have a listener count, so will be fired. + if (event && me.hasListeners[eventName]) { + ret = me.continueFireEvent(eventName, args || emptyArray, event.bubble); + } + return ret; + }, + + /** + * Continue to fire event. + * @private + * + * @param {String} eventName + * @param {Array} args + * @param {Boolean} bubbles + */ + continueFireEvent: function(eventName, args, bubbles) { + var target = this, + queue, event, + ret = true; + + do { + if (target.eventsSuspended) { + if ((queue = target.eventQueue)) { + queue.push([eventName, args, bubbles]); + } + return ret; + } else { + event = target.events[eventName]; + // Continue bubbling if event exists and it is `true` or the handler didn't returns false and it + // configure to bubble. + if (event && event != true) { + if ((ret = event.fire.apply(event, args)) === false) { + break; + } + } + } + } while (bubbles && (target = target.getBubbleParent())); + return ret; + }, + + /** + * Gets the bubbling parent for an Observable + * @private + * @return {Ext.util.Observable} The bubble parent. null is returned if no bubble target exists + */ + getBubbleParent: function() { + var me = this, parent = me.getBubbleTarget && me.getBubbleTarget(); + if (parent && parent.isObservable) { + return parent; + } + return null; + }, + + /** + * Appends an event handler to this object. For example: + * + * myGridPanel.on("mouseover", this.onMouseOver, this); + * + * The method also allows for a single argument to be passed which is a config object + * containing properties which specify multiple events. For example: + * + * myGridPanel.on({ + * cellClick: this.onCellClick, + * mouseover: this.onMouseOver, + * mouseout: this.onMouseOut, + * scope: this // Important. Ensure "this" is correct during handler execution + * }); + * + * One can also specify options for each event handler separately: + * + * myGridPanel.on({ + * cellClick: {fn: this.onCellClick, scope: this, single: true}, + * mouseover: {fn: panel.onMouseOver, scope: panel} + * }); + * + * *Names* of methods in a specified scope may also be used. Note that + * `scope` MUST be specified to use this option: + * + * myGridPanel.on({ + * cellClick: {fn: 'onCellClick', scope: this, single: true}, + * mouseover: {fn: 'onMouseOver', scope: panel} + * }); + * + * @param {String/Object} eventName The name of the event to listen for. + * May also be an object who's property names are event names. + * + * @param {Function} [fn] The method the event invokes, or *if `scope` is specified, the *name* of the method within + * the specified `scope`. Will be called with arguments + * given to {@link Ext.util.Observable#fireEvent} plus the `options` parameter described below. + * + * @param {Object} [scope] The scope (`this` reference) in which the handler function is + * executed. **If omitted, defaults to the object which fired the event.** + * + * @param {Object} [options] An object containing handler configuration. + * + * **Note:** Unlike in ExtJS 3.x, the options object will also be passed as the last + * argument to every event handler. + * + * This object may contain any of the following properties: + * + * @param {Object} options.scope + * The scope (`this` reference) in which the handler function is executed. **If omitted, + * defaults to the object which fired the event.** + * + * @param {Number} options.delay + * The number of milliseconds to delay the invocation of the handler after the event fires. + * + * @param {Boolean} options.single + * True to add a handler to handle just the next firing of the event, and then remove itself. + * + * @param {Number} options.buffer + * Causes the handler to be scheduled to run in an {@link Ext.util.DelayedTask} delayed + * by the specified number of milliseconds. If the event fires again within that time, + * the original handler is _not_ invoked, but the new handler is scheduled in its place. + * + * @param {Ext.util.Observable} options.target + * Only call the handler if the event was fired on the target Observable, _not_ if the event + * was bubbled up from a child Observable. + * + * @param {String} options.element + * **This option is only valid for listeners bound to {@link Ext.Component Components}.** + * The name of a Component property which references an element to add a listener to. + * + * This option is useful during Component construction to add DOM event listeners to elements of + * {@link Ext.Component Components} which will exist only after the Component is rendered. + * For example, to add a click listener to a Panel's body: + * + * new Ext.panel.Panel({ + * title: 'The title', + * listeners: { + * click: this.handlePanelClick, + * element: 'body' + * } + * }); + * + * @param {Boolean} [options.destroyable=false] + * When specified as `true`, the function returns A `Destroyable` object. An object which implements the `destroy` method which removes all listeners added in this call. + * + * @param {Number} [options.priority] + * An optional numeric priority that determines the order in which event handlers + * are run. Event handlers with no priority will be run as if they had a priority + * of 0. Handlers with a higher priority will be prioritized to run sooner than + * those with a lower priority. Negative numbers can be used to set a priority + * lower than the default. Internally, the framework uses a range of 1000 or + * greater, and -1000 or lesser for handers that are intended to run before or + * after all others, so it is recommended to stay within the range of -999 to 999 + * when setting the priority of event handlers in application-level code. + * + * **Combining Options** + * + * Using the options argument, it is possible to combine different types of listeners: + * + * A delayed, one-time listener. + * + * myPanel.on('hide', this.handleClick, this, { + * single: true, + * delay: 100 + * }); + * + * @return {Object} **Only when the `destroyable` option is specified. ** + * + * A `Destroyable` object. An object which implements the `destroy` method which removes all listeners added in this call. For example: + * + * this.btnListeners = = myButton.on({ + * destroyable: true + * mouseover: function() { console.log('mouseover'); }, + * mouseout: function() { console.log('mouseout'); }, + * click: function() { console.log('click'); } + * }); + * + * And when those listeners need to be removed: + * + * Ext.destroy(this.btnListeners); + * + * or + * + * this.btnListeners.destroy(); + */ + addListener: function(ename, fn, scope, options) { + var me = this, + config, event, + prevListenerCount = 0; + + // Object listener hash passed + if (typeof ename !== 'string') { + options = ename; + for (ename in options) { + if (options.hasOwnProperty(ename)) { + config = options[ename]; + if (!me.eventOptionsRe.test(ename)) { + /* This would be an API change so check removed until https://sencha.jira.com/browse/EXTJSIV-7183 is fully implemented in 4.2 + // Test must go here as well as in the simple form because of the attempted property access here on the config object. + if (!config || (typeof config !== 'function' && !config.fn)) { + Ext.Error.raise('No function passed for event ' + me.$className + '.' + ename); + } + */ + me.addListener(ename, config.fn || config, config.scope || options.scope, config.fn ? config : options); + } + } + } + if (options && options.destroyable) { + return new ListenerRemover(me, options); + } + } + // String, function passed + else { + ename = ename.toLowerCase(); + event = me.events[ename]; + if (event && event.isEvent) { + prevListenerCount = event.listeners.length; + } else { + me.events[ename] = event = new ExtEvent(me, ename); + } + if (!fn) { + Ext.Error.raise('No function passed for event ' + me.$className + '.' + ename); + } + + // Allow listeners: { click: 'onClick', scope: myObject } + if (typeof fn === 'string') { + scope = scope || me; + if (!(scope[fn])) { + Ext.Error.raise('No method named "' + fn + '"'); + } + fn = scope[fn]; + } + event.addListener(fn, scope, options); + + // If a new listener has been added (Event.addListener rejects duplicates of the same fn+scope) + // then increment the hasListeners counter + if (event.listeners.length !== prevListenerCount) { + me.hasListeners._incr_(ename); + } + if (options && options.destroyable) { + return new ListenerRemover(me, ename, fn, scope, options); + } + } + }, + + /** + * Removes an event handler. + * + * @param {String} eventName The type of event the handler was associated with. + * @param {Function} fn The handler to remove. **This must be a reference to the function passed into the + * {@link Ext.util.Observable#addListener} call.** + * @param {Object} scope (optional) The scope originally specified for the handler. It must be the same as the + * scope argument specified in the original call to {@link Ext.util.Observable#addListener} or the listener will not be removed. + */ + removeListener: function(ename, fn, scope) { + var me = this, + config, + event, + options; + + if (typeof ename !== 'string') { + options = ename; + for (ename in options) { + if (options.hasOwnProperty(ename)) { + config = options[ename]; + if (!me.eventOptionsRe.test(ename)) { + me.removeListener(ename, config.fn || config, config.scope || options.scope); + } + } + } + } else { + ename = ename.toLowerCase(); + event = me.events[ename]; + if (event && event.isEvent) { + if (event.removeListener(fn, scope)) { + me.hasListeners._decr_(ename); + } + } + } + }, + + /** + * Removes all listeners for this object including the managed listeners + */ + clearListeners: function() { + var events = this.events, + hasListeners = this.hasListeners, + event, + key; + + for (key in events) { + if (events.hasOwnProperty(key)) { + event = events[key]; + if (event.isEvent) { + delete hasListeners[key]; + event.clearListeners(); + } + } + } + + this.clearManagedListeners(); + }, + + purgeListeners : function() { + if (Ext.global.console) { + Ext.global.console.warn('Observable: purgeListeners has been deprecated. Please use clearListeners.'); + } + return this.clearListeners.apply(this, arguments); + }, + + /** + * Removes all managed listeners for this object. + */ + clearManagedListeners : function() { + var managedListeners = this.managedListeners || [], + i = 0, + len = managedListeners.length; + + for (; i < len; i++) { + this.removeManagedListenerItem(true, managedListeners[i]); + } + + this.managedListeners = []; + }, + + /** + * Remove a single managed listener item + * @private + * @param {Boolean} isClear True if this is being called during a clear + * @param {Object} managedListener The managed listener item + * See removeManagedListener for other args + */ + removeManagedListenerItem: function(isClear, managedListener, item, ename, fn, scope){ + if (isClear || (managedListener.item === item && managedListener.ename === ename && (!fn || managedListener.fn === fn) && (!scope || managedListener.scope === scope))) { + managedListener.item.un(managedListener.ename, managedListener.fn, managedListener.scope); + if (!isClear) { + Ext.Array.remove(this.managedListeners, managedListener); + } + } + }, + + purgeManagedListeners : function() { + if (Ext.global.console) { + Ext.global.console.warn('Observable: purgeManagedListeners has been deprecated. Please use clearManagedListeners.'); + } + return this.clearManagedListeners.apply(this, arguments); + }, + + /** + * Adds the specified events to the list of events which this Observable may fire. + * + * @param {Object/String...} eventNames Either an object with event names as properties with + * a value of `true`. For example: + * + * this.addEvents({ + * storeloaded: true, + * storecleared: true + * }); + * + * Or any number of event names as separate parameters. For example: + * + * this.addEvents('storeloaded', 'storecleared'); + * + */ + addEvents: function(o) { + var me = this, + events = me.events || (me.events = {}), + arg, args, i; + + if (typeof o == 'string') { + for (args = arguments, i = args.length; i--; ) { + arg = args[i]; + if (!events[arg]) { + events[arg] = true; + } + } + } else { + Ext.applyIf(me.events, o); + } + }, + + /** + * Checks to see if this object has any listeners for a specified event, or whether the event bubbles. The answer + * indicates whether the event needs firing or not. + * + * @param {String} eventName The name of the event to check for + * @return {Boolean} `true` if the event is being listened for or bubbles, else `false` + */ + hasListener: function(ename) { + return !!this.hasListeners[ename.toLowerCase()]; + }, + + /** + * Suspends the firing of all events. (see {@link #resumeEvents}) + * + * @param {Boolean} queueSuspended Pass as true to queue up suspended events to be fired + * after the {@link #resumeEvents} call instead of discarding all suspended events. + */ + suspendEvents: function(queueSuspended) { + this.eventsSuspended += 1; + if (queueSuspended && !this.eventQueue) { + this.eventQueue = []; + } + }, + + /** + * Suspends firing of the named event(s). + * + * After calling this method to suspend events, the events will no longer fire when requested to fire. + * + * **Note that if this is called multiple times for a certain event, the converse method + * {@link #resumeEvent} will have to be called the same number of times for it to resume firing.** + * + * @param {String...} eventName Multiple event names to suspend. + */ + suspendEvent: function(eventName) { + var len = arguments.length, + i, event; + + for (i = 0; i < len; i++) { + event = this.events[arguments[i]]; + + // If it exists, and is an Event object (not still a boolean placeholder), suspend it + if (event && event.suspend) { + event.suspend(); + } + } + }, + + /** + * Resumes firing of the named event(s). + * + * After calling this method to resume events, the events will fire when requested to fire. + * + * **Note that if the {@link #suspendEvent} method is called multiple times for a certain event, + * this converse method will have to be called the same number of times for it to resume firing.** + * + * @param {String...} eventName Multiple event names to resume. + */ + resumeEvent: function() { + var len = arguments.length, + i, event; + + for (i = 0; i < len; i++) { + + // If it exists, and is an Event object (not still a boolean placeholder), resume it + event = this.events[arguments[i]]; + if (event && event.resume) { + event.resume(); + } + } + }, + + /** + * Resumes firing events (see {@link #suspendEvents}). + * + * If events were suspended using the `queueSuspended` parameter, then all events fired + * during event suspension will be sent to any listeners now. + */ + resumeEvents: function() { + var me = this, + queued = me.eventQueue, + qLen, q; + + if (me.eventsSuspended && ! --me.eventsSuspended) { + delete me.eventQueue; + + if (queued) { + qLen = queued.length; + for (q = 0; q < qLen; q++) { + me.continueFireEvent.apply(me, queued[q]); + } + } + } + }, + + /** + * Relays selected events from the specified Observable as if the events were fired by `this`. + * + * For example if you are extending Grid, you might decide to forward some events from store. + * So you can do this inside your initComponent: + * + * this.relayEvents(this.getStore(), ['load']); + * + * The grid instance will then have an observable 'load' event which will be passed the + * parameters of the store's load event and any function fired with the grid's load event + * would have access to the grid using the `this` keyword. + * + * @param {Object} origin The Observable whose events this object is to relay. + * @param {String[]} events Array of event names to relay. + * @param {String} [prefix] A common prefix to prepend to the event names. For example: + * + * this.relayEvents(this.getStore(), ['load', 'clear'], 'store'); + * + * Now the grid will forward 'load' and 'clear' events of store as 'storeload' and 'storeclear'. + * + * @return {Object} A `Destroyable` object. An object which implements the `destroy` method which, when destroyed, removes all relayers. For example: + * + * this.storeRelayers = this.relayEvents(this.getStore(), ['load', 'clear'], 'store'); + * + * Can be undone by calling + * + * Ext.destroy(this.storeRelayers); + * + * or + * this.store.relayers.destroy(); + */ + relayEvents : function(origin, events, prefix) { + var me = this, + len = events.length, + i = 0, + oldName, + relayers = {}; + + for (; i < len; i++) { + oldName = events[i]; + + // Build up the listener hash. + relayers[oldName] = me.createRelayer(prefix ? prefix + oldName : oldName); + } + // Add the relaying listeners as ManagedListeners so that they are removed when this.clearListeners is called (usually when _this_ is destroyed) + // Explicitly pass options as undefined so that the listener does not get an extra options param + // which then has to be sliced off in the relayer. + me.mon(origin, relayers, null, null, undefined); + + // relayed events are always destroyable. + return new ListenerRemover(me, origin, relayers); + }, + + /** + * @private + * Creates an event handling function which refires the event from this object as the passed event name. + * @param {String} newName The name under which to refire the passed parameters. + * @param {Array} beginEnd (optional) The caller can specify on which indices to slice. + * @returns {Function} + */ + createRelayer: function(newName, beginEnd) { + var me = this; + return function() { + return me.fireEventArgs.call(me, newName, beginEnd ? Array.prototype.slice.apply(arguments, beginEnd) : arguments); + }; + }, + + /** + * Enables events fired by this Observable to bubble up an owner hierarchy by calling `this.getBubbleTarget()` if + * present. There is no implementation in the Observable base class. + * + * This is commonly used by Ext.Components to bubble events to owner Containers. + * See {@link Ext.Component#getBubbleTarget}. The default implementation in Ext.Component returns the + * Component's immediate owner. But if a known target is required, this can be overridden to access the + * required target more quickly. + * + * Example: + * + * Ext.define('Ext.overrides.form.field.Base', { + * override: 'Ext.form.field.Base', + * + * // Add functionality to Field's initComponent to enable the change event to bubble + * initComponent: function () { + * this.callParent(); + * this.enableBubble('change'); + * } + * }); + * + * var myForm = Ext.create('Ext.form.Panel', { + * title: 'User Details', + * items: [{ + * ... + * }], + * listeners: { + * change: function() { + * // Title goes red if form has been modified. + * myForm.header.setStyle('color', 'red'); + * } + * } + * }); + * + * @param {String/String[]} eventNames The event name to bubble, or an Array of event names. + */ + enableBubble: function(eventNames) { + if (eventNames) { + var me = this, + names = (typeof eventNames == 'string') ? arguments : eventNames, + length = names.length, + events = me.events, + ename, event, i; + + for (i = 0; i < length; ++i) { + ename = names[i].toLowerCase(); + event = events[ename]; + + if (!event || typeof event == 'boolean') { + events[ename] = event = new ExtEvent(me, ename); + } + + // Event must fire if it bubbles (We don't know if anyone up the + // bubble hierarchy has listeners added) + me.hasListeners._incr_(ename); + + event.bubble = true; + } + } + } + }; +}, function() { + var Observable = this, + proto = Observable.prototype, + HasListeners = function () {}, + prepareMixin = function (T) { + if (!T.HasListeners) { + var proto = T.prototype; + + // Classes that use us as a mixin (best practice) need to be prepared. + Observable.prepareClass(T, this); + + // Now that we are mixed in to class T, we need to watch T for derivations + // and prepare them also. + T.onExtended(function (U) { + Ext.classSystemMonitor && Ext.classSystemMonitor('extend mixin', arguments); + + Observable.prepareClass(U); + }); + + // Also, if a class uses us as a mixin and that class is then used as + // a mixin, we need to be notified of that as well. + if (proto.onClassMixedIn) { + // play nice with other potential overrides... + Ext.override(T, { + onClassMixedIn: function (U) { + prepareMixin.call(this, U); + this.callParent(arguments); + } + }); + } else { + // just us chickens, so add the method... + proto.onClassMixedIn = function (U) { + prepareMixin.call(this, U); + }; + } + } + }, + globalEvents; + + HasListeners.prototype = { + //$$: 42 // to make sure we have a proper prototype + _decr_: function (ev) { + if (! --this[ev]) { + // Delete this entry, since 0 does not mean no one is listening, just + // that no one is *directly* listening. This allows the eventBus or + // class observers to "poke" through and expose their presence. + delete this[ev]; + } + }, + _incr_: function (ev) { + if (this.hasOwnProperty(ev)) { + // if we already have listeners at this level, just increment the count... + ++this[ev]; + } else { + // otherwise, start the count at 1 (which hides whatever is in our prototype + // chain)... + this[ev] = 1; + } + } + }; + + proto.HasListeners = Observable.HasListeners = HasListeners; + + Observable.createAlias({ + /** + * @method + * Shorthand for {@link #addListener}. + * @inheritdoc Ext.util.Observable#addListener + */ + on: 'addListener', + /** + * @method + * Shorthand for {@link #removeListener}. + * @inheritdoc Ext.util.Observable#removeListener + */ + un: 'removeListener', + /** + * @method + * Shorthand for {@link #addManagedListener}. + * @inheritdoc Ext.util.Observable#addManagedListener + */ + mon: 'addManagedListener', + /** + * @method + * Shorthand for {@link #removeManagedListener}. + * @inheritdoc Ext.util.Observable#removeManagedListener + */ + mun: 'removeManagedListener' + }); + + //deprecated, will be removed in 5.0 + Observable.observeClass = Observable.observe; + + /** + * @member Ext + * @property {Ext.util.Observable} globalEvents + * An instance of `{@link Ext.util.Observable}` through which Ext fires global events. + * + * This Observable instance fires the following events: + * + * * **`idle`** + * + * Fires when an event handler finishes its run, just before returning to browser control. + * + * This includes DOM event handlers, Ajax (including JSONP) event handlers, and {@link Ext.util.TaskRunner TaskRunners} + * + * This can be useful for performing cleanup, or update tasks which need to happen only + * after all code in an event handler has been run, but which should not be executed in a timer + * due to the intervening browser reflow/repaint which would take place. + * + * * **`ready`** + * + * Fires when the DOM is ready, and all required classes have been loaded. Functionally + * the same as {@link Ext#onReady}, but must be called with the `single` option: + * + * Ext.on({ + * ready: function() { + * console.log('document is ready!'); + * }, + * single: true + * }); + * + * * **`resumelayouts`** + * + * Fires after global layout processing has been resumed in {@link Ext.AbstractComponent#resumeLayouts}. + */ + Ext.globalEvents = globalEvents = new Observable({ + events: { + idle: Ext.EventManager.idleEvent, + ready: Ext.EventManager.readyEvent + } + }); + + /** + * @member Ext + * @method on + * Shorthand for the {@link Ext.util.Observable#addListener} method of the + * {@link Ext#globalEvents} Observable instance. + * @inheritdoc Ext.util.Observable#addListener + */ + Ext.on = function() { + return globalEvents.addListener.apply(globalEvents, arguments); + }; + + /** + * @member Ext + * @method + * Shorthand for the {@link Ext.util.Observable#removeListener} method of the + * {@link Ext#globalEvents} Observable instance. + * @inheritdoc Ext.util.Observable#removeListener + */ + Ext.un = function() { + return globalEvents.removeListener.apply(globalEvents, arguments); + }; + + // this is considered experimental (along with beforeMethod, afterMethod, removeMethodListener?) + // allows for easier interceptor and sequences, including cancelling and overwriting the return value of the call + // private + function getMethodEvent(method){ + var e = (this.methodEvents = this.methodEvents || {})[method], + returnValue, + v, + cancel, + obj = this, + makeCall; + + if (!e) { + this.methodEvents[method] = e = {}; + e.originalFn = this[method]; + e.methodName = method; + e.before = []; + e.after = []; + + makeCall = function(fn, scope, args){ + if((v = fn.apply(scope || obj, args)) !== undefined){ + if (typeof v == 'object') { + if(v.returnValue !== undefined){ + returnValue = v.returnValue; + }else{ + returnValue = v; + } + cancel = !!v.cancel; + } + else + if (v === false) { + cancel = true; + } + else { + returnValue = v; + } + } + }; + + this[method] = function(){ + var args = Array.prototype.slice.call(arguments, 0), + b, i, len; + returnValue = v = undefined; + cancel = false; + + for(i = 0, len = e.before.length; i < len; i++){ + b = e.before[i]; + makeCall(b.fn, b.scope, args); + if (cancel) { + return returnValue; + } + } + + if((v = e.originalFn.apply(obj, args)) !== undefined){ + returnValue = v; + } + + for(i = 0, len = e.after.length; i < len; i++){ + b = e.after[i]; + makeCall(b.fn, b.scope, args); + if (cancel) { + return returnValue; + } + } + return returnValue; + }; + } + return e; + } + + Ext.apply(proto, { + onClassMixedIn: prepareMixin, + + // these are considered experimental + // allows for easier interceptor and sequences, including cancelling and overwriting the return value of the call + // adds an 'interceptor' called before the original method + beforeMethod : function(method, fn, scope){ + getMethodEvent.call(this, method).before.push({ + fn: fn, + scope: scope + }); + }, + + // adds a 'sequence' called after the original method + afterMethod : function(method, fn, scope){ + getMethodEvent.call(this, method).after.push({ + fn: fn, + scope: scope + }); + }, + + removeMethodListener: function(method, fn, scope){ + var e = this.getMethodEvent(method), + i, len; + for(i = 0, len = e.before.length; i < len; i++){ + if(e.before[i].fn == fn && e.before[i].scope == scope){ + Ext.Array.erase(e.before, i, 1); + return; + } + } + for(i = 0, len = e.after.length; i < len; i++){ + if(e.after[i].fn == fn && e.after[i].scope == scope){ + Ext.Array.erase(e.after, i, 1); + return; + } + } + }, + + toggleEventLogging: function(toggle) { + Ext.util.Observable[toggle ? 'capture' : 'releaseCapture'](this, function(en) { + if (Ext.isDefined(Ext.global.console)) { + Ext.global.console.log(en, arguments); + } + }); + } + }); +}); + +//@tag dom,core +//@require EventManager.js +//@define Ext.EventObject + +/** + * @class Ext.EventObject + +Just as {@link Ext.Element} wraps around a native DOM node, Ext.EventObject +wraps the browser's native event-object normalizing cross-browser differences, +such as which mouse button is clicked, keys pressed, mechanisms to stop +event-propagation along with a method to prevent default actions from taking place. + +For example: + + function handleClick(e, t){ // e is not a standard event object, it is a Ext.EventObject + e.preventDefault(); + var target = e.getTarget(); // same as t (the target HTMLElement) + ... + } + + var myDiv = {@link Ext#get Ext.get}("myDiv"); // get reference to an {@link Ext.Element} + myDiv.on( // 'on' is shorthand for addListener + "click", // perform an action on click of myDiv + handleClick // reference to the action handler + ); + + // other methods to do the same: + Ext.EventManager.on("myDiv", 'click', handleClick); + Ext.EventManager.addListener("myDiv", 'click', handleClick); + + * @singleton + * @markdown + */ +Ext.define('Ext.EventObjectImpl', { + + + /** Key constant @type Number */ + BACKSPACE: 8, + /** Key constant @type Number */ + TAB: 9, + /** Key constant @type Number */ + NUM_CENTER: 12, + /** Key constant @type Number */ + ENTER: 13, + /** Key constant @type Number */ + RETURN: 13, + /** Key constant @type Number */ + SHIFT: 16, + /** Key constant @type Number */ + CTRL: 17, + /** Key constant @type Number */ + ALT: 18, + /** Key constant @type Number */ + PAUSE: 19, + /** Key constant @type Number */ + CAPS_LOCK: 20, + /** Key constant @type Number */ + ESC: 27, + /** Key constant @type Number */ + SPACE: 32, + /** Key constant @type Number */ + PAGE_UP: 33, + /** Key constant @type Number */ + PAGE_DOWN: 34, + /** Key constant @type Number */ + END: 35, + /** Key constant @type Number */ + HOME: 36, + /** Key constant @type Number */ + LEFT: 37, + /** Key constant @type Number */ + UP: 38, + /** Key constant @type Number */ + RIGHT: 39, + /** Key constant @type Number */ + DOWN: 40, + /** Key constant @type Number */ + PRINT_SCREEN: 44, + /** Key constant @type Number */ + INSERT: 45, + /** Key constant @type Number */ + DELETE: 46, + /** Key constant @type Number */ + ZERO: 48, + /** Key constant @type Number */ + ONE: 49, + /** Key constant @type Number */ + TWO: 50, + /** Key constant @type Number */ + THREE: 51, + /** Key constant @type Number */ + FOUR: 52, + /** Key constant @type Number */ + FIVE: 53, + /** Key constant @type Number */ + SIX: 54, + /** Key constant @type Number */ + SEVEN: 55, + /** Key constant @type Number */ + EIGHT: 56, + /** Key constant @type Number */ + NINE: 57, + /** Key constant @type Number */ + A: 65, + /** Key constant @type Number */ + B: 66, + /** Key constant @type Number */ + C: 67, + /** Key constant @type Number */ + D: 68, + /** Key constant @type Number */ + E: 69, + /** Key constant @type Number */ + F: 70, + /** Key constant @type Number */ + G: 71, + /** Key constant @type Number */ + H: 72, + /** Key constant @type Number */ + I: 73, + /** Key constant @type Number */ + J: 74, + /** Key constant @type Number */ + K: 75, + /** Key constant @type Number */ + L: 76, + /** Key constant @type Number */ + M: 77, + /** Key constant @type Number */ + N: 78, + /** Key constant @type Number */ + O: 79, + /** Key constant @type Number */ + P: 80, + /** Key constant @type Number */ + Q: 81, + /** Key constant @type Number */ + R: 82, + /** Key constant @type Number */ + S: 83, + /** Key constant @type Number */ + T: 84, + /** Key constant @type Number */ + U: 85, + /** Key constant @type Number */ + V: 86, + /** Key constant @type Number */ + W: 87, + /** Key constant @type Number */ + X: 88, + /** Key constant @type Number */ + Y: 89, + /** Key constant @type Number */ + Z: 90, + /** Key constant @type Number */ + CONTEXT_MENU: 93, + /** Key constant @type Number */ + NUM_ZERO: 96, + /** Key constant @type Number */ + NUM_ONE: 97, + /** Key constant @type Number */ + NUM_TWO: 98, + /** Key constant @type Number */ + NUM_THREE: 99, + /** Key constant @type Number */ + NUM_FOUR: 100, + /** Key constant @type Number */ + NUM_FIVE: 101, + /** Key constant @type Number */ + NUM_SIX: 102, + /** Key constant @type Number */ + NUM_SEVEN: 103, + /** Key constant @type Number */ + NUM_EIGHT: 104, + /** Key constant @type Number */ + NUM_NINE: 105, + /** Key constant @type Number */ + NUM_MULTIPLY: 106, + /** Key constant @type Number */ + NUM_PLUS: 107, + /** Key constant @type Number */ + NUM_MINUS: 109, + /** Key constant @type Number */ + NUM_PERIOD: 110, + /** Key constant @type Number */ + NUM_DIVISION: 111, + /** Key constant @type Number */ + F1: 112, + /** Key constant @type Number */ + F2: 113, + /** Key constant @type Number */ + F3: 114, + /** Key constant @type Number */ + F4: 115, + /** Key constant @type Number */ + F5: 116, + /** Key constant @type Number */ + F6: 117, + /** Key constant @type Number */ + F7: 118, + /** Key constant @type Number */ + F8: 119, + /** Key constant @type Number */ + F9: 120, + /** Key constant @type Number */ + F10: 121, + /** Key constant @type Number */ + F11: 122, + /** Key constant @type Number */ + F12: 123, + /** + * The mouse wheel delta scaling factor. This value depends on browser version and OS and + * attempts to produce a similar scrolling experience across all platforms and browsers. + * + * To change this value: + * + * Ext.EventObjectImpl.prototype.WHEEL_SCALE = 72; + * + * @type Number + * @markdown + */ + WHEEL_SCALE: (function () { + var scale; + + if (Ext.isGecko) { + // Firefox uses 3 on all platforms + scale = 3; + } else if (Ext.isMac) { + // Continuous scrolling devices have momentum and produce much more scroll than + // discrete devices on the same OS and browser. To make things exciting, Safari + // (and not Chrome) changed from small values to 120 (like IE). + + if (Ext.isSafari && Ext.webKitVersion >= 532.0) { + // Safari changed the scrolling factor to match IE (for details see + // https://bugs.webkit.org/show_bug.cgi?id=24368). The WebKit version where this + // change was introduced was 532.0 + // Detailed discussion: + // https://bugs.webkit.org/show_bug.cgi?id=29601 + // http://trac.webkit.org/browser/trunk/WebKit/chromium/src/mac/WebInputEventFactory.mm#L1063 + scale = 120; + } else { + // MS optical wheel mouse produces multiples of 12 which is close enough + // to help tame the speed of the continuous mice... + scale = 12; + } + + // Momentum scrolling produces very fast scrolling, so increase the scale factor + // to help produce similar results cross platform. This could be even larger and + // it would help those mice, but other mice would become almost unusable as a + // result (since we cannot tell which device type is in use). + scale *= 3; + } else { + // IE, Opera and other Windows browsers use 120. + scale = 120; + } + + return scale; + }()), + + /** + * Simple click regex + * @private + */ + clickRe: /(dbl)?click/, + // safari keypress events for special keys return bad keycodes + safariKeys: { + 3: 13, // enter + 63234: 37, // left + 63235: 39, // right + 63232: 38, // up + 63233: 40, // down + 63276: 33, // page up + 63277: 34, // page down + 63272: 46, // delete + 63273: 36, // home + 63275: 35 // end + }, + // normalize button clicks, don't see any way to feature detect this. + btnMap: Ext.isIE ? { + 1: 0, + 4: 1, + 2: 2 + } : { + 0: 0, + 1: 1, + 2: 2 + }, + + /** + * @property {Boolean} ctrlKey + * True if the control key was down during the event. + * In Mac this will also be true when meta key was down. + */ + /** + * @property {Boolean} altKey + * True if the alt key was down during the event. + */ + /** + * @property {Boolean} shiftKey + * True if the shift key was down during the event. + */ + + constructor: function(event, freezeEvent){ + if (event) { + this.setEvent(event.browserEvent || event, freezeEvent); + } + }, + + setEvent: function(event, freezeEvent){ + var me = this, button, options; + + if (event === me || (event && event.browserEvent)) { // already wrapped + return event; + } + me.browserEvent = event; + if (event) { + // normalize buttons + button = event.button ? me.btnMap[event.button] : (event.which ? event.which - 1 : -1); + if (me.clickRe.test(event.type) && button == -1) { + button = 0; + } + options = { + type: event.type, + button: button, + shiftKey: event.shiftKey, + // mac metaKey behaves like ctrlKey + ctrlKey: event.ctrlKey || event.metaKey || false, + altKey: event.altKey, + // in getKey these will be normalized for the mac + keyCode: event.keyCode, + charCode: event.charCode, + // cache the targets for the delayed and or buffered events + target: Ext.EventManager.getTarget(event), + relatedTarget: Ext.EventManager.getRelatedTarget(event), + currentTarget: event.currentTarget, + xy: (freezeEvent ? me.getXY() : null) + }; + } else { + options = { + button: -1, + shiftKey: false, + ctrlKey: false, + altKey: false, + keyCode: 0, + charCode: 0, + target: null, + xy: [0, 0] + }; + } + Ext.apply(me, options); + return me; + }, + + /** + * Stop the event (preventDefault and stopPropagation) + */ + stopEvent: function(){ + this.stopPropagation(); + this.preventDefault(); + }, + + /** + * Prevents the browsers default handling of the event. + */ + preventDefault: function(){ + if (this.browserEvent) { + Ext.EventManager.preventDefault(this.browserEvent); + } + }, + + /** + * Cancels bubbling of the event. + */ + stopPropagation: function(){ + var browserEvent = this.browserEvent; + + if (browserEvent) { + if (browserEvent.type == 'mousedown') { + Ext.EventManager.stoppedMouseDownEvent.fire(this); + } + Ext.EventManager.stopPropagation(browserEvent); + } + }, + + /** + * Gets the character code for the event. + * @return {Number} + */ + getCharCode: function(){ + return this.charCode || this.keyCode; + }, + + /** + * Returns a normalized keyCode for the event. + * @return {Number} The key code + */ + getKey: function(){ + return this.normalizeKey(this.keyCode || this.charCode); + }, + + /** + * Normalize key codes across browsers + * @private + * @param {Number} key The key code + * @return {Number} The normalized code + */ + normalizeKey: function(key){ + // can't feature detect this + return Ext.isWebKit ? (this.safariKeys[key] || key) : key; + }, + + /** + * Gets the x coordinate of the event. + * @return {Number} + * @deprecated 4.0 Replaced by {@link #getX} + */ + getPageX: function(){ + return this.getX(); + }, + + /** + * Gets the y coordinate of the event. + * @return {Number} + * @deprecated 4.0 Replaced by {@link #getY} + */ + getPageY: function(){ + return this.getY(); + }, + + /** + * Gets the x coordinate of the event. + * @return {Number} + */ + getX: function() { + return this.getXY()[0]; + }, + + /** + * Gets the y coordinate of the event. + * @return {Number} + */ + getY: function() { + return this.getXY()[1]; + }, + + /** + * Gets the page coordinates of the event. + * @return {Number[]} The xy values like [x, y] + */ + getXY: function() { + if (!this.xy) { + // same for XY + this.xy = Ext.EventManager.getPageXY(this.browserEvent); + } + return this.xy; + }, + + /** + * Gets the target for the event. + * @param {String} selector (optional) A simple selector to filter the target or look for an ancestor of the target + * @param {Number/HTMLElement} maxDepth (optional) The max depth to search as a number or element (defaults to 10 || document.body) + * @param {Boolean} returnEl (optional) True to return a Ext.Element object instead of DOM node + * @return {HTMLElement} + */ + getTarget : function(selector, maxDepth, returnEl){ + if (selector) { + return Ext.fly(this.target).findParent(selector, maxDepth, returnEl); + } + return returnEl ? Ext.get(this.target) : this.target; + }, + + /** + * Gets the related target. + * @param {String} selector (optional) A simple selector to filter the target or look for an ancestor of the target + * @param {Number/HTMLElement} maxDepth (optional) The max depth to search as a number or element (defaults to 10 || document.body) + * @param {Boolean} returnEl (optional) True to return a Ext.Element object instead of DOM node + * @return {HTMLElement} + */ + getRelatedTarget : function(selector, maxDepth, returnEl){ + if (selector && this.relatedTarget) { + return Ext.fly(this.relatedTarget).findParent(selector, maxDepth, returnEl); + } + return returnEl ? Ext.get(this.relatedTarget) : this.relatedTarget; + }, + + /** + * Correctly scales a given wheel delta. + * @param {Number} delta The delta value. + */ + correctWheelDelta : function (delta) { + var scale = this.WHEEL_SCALE, + ret = Math.round(delta / scale); + + if (!ret && delta) { + ret = (delta < 0) ? -1 : 1; // don't allow non-zero deltas to go to zero! + } + + return ret; + }, + + /** + * Returns the mouse wheel deltas for this event. + * @return {Object} An object with "x" and "y" properties holding the mouse wheel deltas. + */ + getWheelDeltas : function () { + var me = this, + event = me.browserEvent, + dx = 0, dy = 0; // the deltas + + if (Ext.isDefined(event.wheelDeltaX)) { // WebKit has both dimensions + dx = event.wheelDeltaX; + dy = event.wheelDeltaY; + } else if (event.wheelDelta) { // old WebKit and IE + dy = event.wheelDelta; + } else if (event.detail) { // Gecko + dy = -event.detail; // gecko is backwards + + // Gecko sometimes returns really big values if the user changes settings to + // scroll a whole page per scroll + if (dy > 100) { + dy = 3; + } else if (dy < -100) { + dy = -3; + } + + // Firefox 3.1 adds an axis field to the event to indicate direction of + // scroll. See https://developer.mozilla.org/en/Gecko-Specific_DOM_Events + if (Ext.isDefined(event.axis) && event.axis === event.HORIZONTAL_AXIS) { + dx = dy; + dy = 0; + } + } + + return { + x: me.correctWheelDelta(dx), + y: me.correctWheelDelta(dy) + }; + }, + + /** + * Normalizes mouse wheel y-delta across browsers. To get x-delta information, use + * {@link #getWheelDeltas} instead. + * @return {Number} The mouse wheel y-delta + */ + getWheelDelta : function(){ + var deltas = this.getWheelDeltas(); + + return deltas.y; + }, + + /** + * Returns true if the target of this event is a child of el. Unless the allowEl parameter is set, it will return false if if the target is el. + * Example usage:
    
    +// Handle click on any child of an element
    +Ext.getBody().on('click', function(e){
    +    if(e.within('some-el')){
    +        alert('Clicked on a child of some-el!');
    +    }
    +});
    +
    +// Handle click directly on an element, ignoring clicks on child nodes
    +Ext.getBody().on('click', function(e,t){
    +    if((t.id == 'some-el') && !e.within(t, true)){
    +        alert('Clicked directly on some-el!');
    +    }
    +});
    +
    + * @param {String/HTMLElement/Ext.Element} el The id, DOM element or Ext.Element to check + * @param {Boolean} related (optional) true to test if the related target is within el instead of the target + * @param {Boolean} allowEl (optional) true to also check if the passed element is the target or related target + * @return {Boolean} + */ + within : function(el, related, allowEl){ + if(el){ + var t = related ? this.getRelatedTarget() : this.getTarget(), + result; + + if (t) { + result = Ext.fly(el).contains(t); + if (!result && allowEl) { + result = t == Ext.getDom(el); + } + return result; + } + } + return false; + }, + + /** + * Checks if the key pressed was a "navigation" key + * @return {Boolean} True if the press is a navigation keypress + */ + isNavKeyPress : function(){ + var me = this, + k = this.normalizeKey(me.keyCode); + + return (k >= 33 && k <= 40) || // Page Up/Down, End, Home, Left, Up, Right, Down + k == me.RETURN || + k == me.TAB || + k == me.ESC; + }, + + /** + * Checks if the key pressed was a "special" key + * @return {Boolean} True if the press is a special keypress + */ + isSpecialKey : function(){ + var k = this.normalizeKey(this.keyCode); + return (this.type == 'keypress' && this.ctrlKey) || + this.isNavKeyPress() || + (k == this.BACKSPACE) || // Backspace + (k >= 16 && k <= 20) || // Shift, Ctrl, Alt, Pause, Caps Lock + (k >= 44 && k <= 46); // Print Screen, Insert, Delete + }, + + /** + * Returns a point object that consists of the object coordinates. + * @return {Ext.util.Point} point + */ + getPoint : function(){ + var xy = this.getXY(); + return new Ext.util.Point(xy[0], xy[1]); + }, + + /** + * Returns true if the control, meta, shift or alt key was pressed during this event. + * @return {Boolean} + */ + hasModifier : function(){ + return this.ctrlKey || this.altKey || this.shiftKey || this.metaKey; + }, + + /** + * Injects a DOM event using the data in this object and (optionally) a new target. + * This is a low-level technique and not likely to be used by application code. The + * currently supported event types are: + *

    HTMLEvents

    + *
      + *
    • load
    • + *
    • unload
    • + *
    • select
    • + *
    • change
    • + *
    • submit
    • + *
    • reset
    • + *
    • resize
    • + *
    • scroll
    • + *
    + *

    MouseEvents

    + *
      + *
    • click
    • + *
    • dblclick
    • + *
    • mousedown
    • + *
    • mouseup
    • + *
    • mouseover
    • + *
    • mousemove
    • + *
    • mouseout
    • + *
    + *

    UIEvents

    + *
      + *
    • focusin
    • + *
    • focusout
    • + *
    • activate
    • + *
    • focus
    • + *
    • blur
    • + *
    + * @param {Ext.Element/HTMLElement} target (optional) If specified, the target for the event. This + * is likely to be used when relaying a DOM event. If not specified, {@link #getTarget} + * is used to determine the target. + */ + injectEvent: (function () { + var API, + dispatchers = {}, // keyed by event type (e.g., 'mousedown') + crazyIEButtons; + + // Good reference: http://developer.yahoo.com/yui/docs/UserAction.js.html + + // IE9 has createEvent, but this code causes major problems with htmleditor (it + // blocks all mouse events and maybe more). TODO + + if (!Ext.isIE && document.createEvent) { // if (DOM compliant) + API = { + createHtmlEvent: function (doc, type, bubbles, cancelable) { + var event = doc.createEvent('HTMLEvents'); + + event.initEvent(type, bubbles, cancelable); + return event; + }, + + createMouseEvent: function (doc, type, bubbles, cancelable, detail, + clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, + button, relatedTarget) { + var event = doc.createEvent('MouseEvents'), + view = doc.defaultView || window; + + if (event.initMouseEvent) { + event.initMouseEvent(type, bubbles, cancelable, view, detail, + clientX, clientY, clientX, clientY, ctrlKey, altKey, + shiftKey, metaKey, button, relatedTarget); + } else { // old Safari + event = doc.createEvent('UIEvents'); + event.initEvent(type, bubbles, cancelable); + event.view = view; + event.detail = detail; + event.screenX = clientX; + event.screenY = clientY; + event.clientX = clientX; + event.clientY = clientY; + event.ctrlKey = ctrlKey; + event.altKey = altKey; + event.metaKey = metaKey; + event.shiftKey = shiftKey; + event.button = button; + event.relatedTarget = relatedTarget; + } + + return event; + }, + + createUIEvent: function (doc, type, bubbles, cancelable, detail) { + var event = doc.createEvent('UIEvents'), + view = doc.defaultView || window; + + event.initUIEvent(type, bubbles, cancelable, view, detail); + return event; + }, + + fireEvent: function (target, type, event) { + target.dispatchEvent(event); + }, + + fixTarget: function (target) { + // Safari3 doesn't have window.dispatchEvent() + if (target == window && !target.dispatchEvent) { + return document; + } + + return target; + } + }; + } else if (document.createEventObject) { // else if (IE) + crazyIEButtons = { 0: 1, 1: 4, 2: 2 }; + + API = { + createHtmlEvent: function (doc, type, bubbles, cancelable) { + var event = doc.createEventObject(); + event.bubbles = bubbles; + event.cancelable = cancelable; + return event; + }, + + createMouseEvent: function (doc, type, bubbles, cancelable, detail, + clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, + button, relatedTarget) { + var event = doc.createEventObject(); + event.bubbles = bubbles; + event.cancelable = cancelable; + event.detail = detail; + event.screenX = clientX; + event.screenY = clientY; + event.clientX = clientX; + event.clientY = clientY; + event.ctrlKey = ctrlKey; + event.altKey = altKey; + event.shiftKey = shiftKey; + event.metaKey = metaKey; + event.button = crazyIEButtons[button] || button; + event.relatedTarget = relatedTarget; // cannot assign to/fromElement + return event; + }, + + createUIEvent: function (doc, type, bubbles, cancelable, detail) { + var event = doc.createEventObject(); + event.bubbles = bubbles; + event.cancelable = cancelable; + return event; + }, + + fireEvent: function (target, type, event) { + target.fireEvent('on' + type, event); + }, + + fixTarget: function (target) { + if (target == document) { + // IE6,IE7 thinks window==document and doesn't have window.fireEvent() + // IE6,IE7 cannot properly call document.fireEvent() + return document.documentElement; + } + + return target; + } + }; + } + + //---------------- + // HTMLEvents + + Ext.Object.each({ + load: [false, false], + unload: [false, false], + select: [true, false], + change: [true, false], + submit: [true, true], + reset: [true, false], + resize: [true, false], + scroll: [true, false] + }, + function (name, value) { + var bubbles = value[0], cancelable = value[1]; + dispatchers[name] = function (targetEl, srcEvent) { + var e = API.createHtmlEvent(name, bubbles, cancelable); + API.fireEvent(targetEl, name, e); + }; + }); + + //---------------- + // MouseEvents + + function createMouseEventDispatcher (type, detail) { + var cancelable = (type != 'mousemove'); + return function (targetEl, srcEvent) { + var xy = srcEvent.getXY(), + e = API.createMouseEvent(targetEl.ownerDocument, type, true, cancelable, + detail, xy[0], xy[1], srcEvent.ctrlKey, srcEvent.altKey, + srcEvent.shiftKey, srcEvent.metaKey, srcEvent.button, + srcEvent.relatedTarget); + API.fireEvent(targetEl, type, e); + }; + } + + Ext.each(['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 'mouseout'], + function (eventName) { + dispatchers[eventName] = createMouseEventDispatcher(eventName, 1); + }); + + //---------------- + // UIEvents + + Ext.Object.each({ + focusin: [true, false], + focusout: [true, false], + activate: [true, true], + focus: [false, false], + blur: [false, false] + }, + function (name, value) { + var bubbles = value[0], cancelable = value[1]; + dispatchers[name] = function (targetEl, srcEvent) { + var e = API.createUIEvent(targetEl.ownerDocument, name, bubbles, cancelable, 1); + API.fireEvent(targetEl, name, e); + }; + }); + + //--------- + if (!API) { + // not even sure what ancient browsers fall into this category... + + dispatchers = {}; // never mind all those we just built :P + + API = { + fixTarget: Ext.identityFn + }; + } + + function cannotInject (target, srcEvent) { + // TODO log something + } + + return function (target) { + var me = this, + dispatcher = dispatchers[me.type] || cannotInject, + t = target ? (target.dom || target) : me.getTarget(); + + t = API.fixTarget(t); + dispatcher(t, me); + }; + }()) // call to produce method + +}, function() { + +Ext.EventObject = new Ext.EventObjectImpl(); + +}); + + +//@tag dom,core +//@require ../EventObject.js + +/** + * @class Ext.dom.AbstractQuery + * @private + */ +Ext.define('Ext.dom.AbstractQuery', { + /** + * Selects a group of elements. + * @param {String} selector The selector/xpath query (can be a comma separated list of selectors) + * @param {HTMLElement/String} [root] The start of the query (defaults to document). + * @return {HTMLElement[]} An Array of DOM elements which match the selector. If there are + * no matches, and empty Array is returned. + */ + select: function(q, root) { + var results = [], + nodes, + i, + j, + qlen, + nlen; + + root = root || document; + + if (typeof root == 'string') { + root = document.getElementById(root); + } + + q = q.split(","); + + for (i = 0,qlen = q.length; i < qlen; i++) { + if (typeof q[i] == 'string') { + + //support for node attribute selection + if (typeof q[i][0] == '@') { + nodes = root.getAttributeNode(q[i].substring(1)); + results.push(nodes); + } else { + nodes = root.querySelectorAll(q[i]); + + for (j = 0,nlen = nodes.length; j < nlen; j++) { + results.push(nodes[j]); + } + } + } + } + + return results; + }, + + /** + * Selects a single element. + * @param {String} selector The selector/xpath query + * @param {HTMLElement/String} [root] The start of the query (defaults to document). + * @return {HTMLElement} The DOM element which matched the selector. + */ + selectNode: function(q, root) { + return this.select(q, root)[0]; + }, + + /** + * Returns true if the passed element(s) match the passed simple selector (e.g. div.some-class or span:first-child) + * @param {String/HTMLElement/Array} el An element id, element or array of elements + * @param {String} selector The simple selector to test + * @return {Boolean} + */ + is: function(el, q) { + if (typeof el == "string") { + el = document.getElementById(el); + } + return this.select(q).indexOf(el) !== -1; + } + +}); + +//@tag dom,core +//@require AbstractQuery.js + +/** + * Abstract base class for {@link Ext.dom.Helper}. + * @private + */ +Ext.define('Ext.dom.AbstractHelper', { + emptyTags : /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i, + confRe : /^(?:tag|children|cn|html|tpl|tplData)$/i, + endRe : /end/i, + styleSepRe: /\s*(?::|;)\s*/, + + // Since cls & for are reserved words, we need to transform them + attributeTransform: { cls : 'class', htmlFor : 'for' }, + + closeTags: {}, + + decamelizeName : (function () { + var camelCaseRe = /([a-z])([A-Z])/g, + cache = {}; + + function decamel (match, p1, p2) { + return p1 + '-' + p2.toLowerCase(); + } + + return function (s) { + return cache[s] || (cache[s] = s.replace(camelCaseRe, decamel)); + }; + }()), + + generateMarkup: function(spec, buffer) { + var me = this, + specType = typeof spec, + attr, val, tag, i, closeTags; + + if (specType == "string" || specType == "number") { + buffer.push(spec); + } else if (Ext.isArray(spec)) { + for (i = 0; i < spec.length; i++) { + if (spec[i]) { + me.generateMarkup(spec[i], buffer); + } + } + } else { + tag = spec.tag || 'div'; + buffer.push('<', tag); + + for (attr in spec) { + if (spec.hasOwnProperty(attr)) { + val = spec[attr]; + if (!me.confRe.test(attr)) { + if (typeof val == "object") { + buffer.push(' ', attr, '="'); + me.generateStyles(val, buffer).push('"'); + } else { + buffer.push(' ', me.attributeTransform[attr] || attr, '="', val, '"'); + } + } + } + } + + // Now either just close the tag or try to add children and close the tag. + if (me.emptyTags.test(tag)) { + buffer.push('/>'); + } else { + buffer.push('>'); + + // Apply the tpl html, and cn specifications + if ((val = spec.tpl)) { + val.applyOut(spec.tplData, buffer); + } + if ((val = spec.html)) { + buffer.push(val); + } + if ((val = spec.cn || spec.children)) { + me.generateMarkup(val, buffer); + } + + // we generate a lot of close tags, so cache them rather than push 3 parts + closeTags = me.closeTags; + buffer.push(closeTags[tag] || (closeTags[tag] = '')); + } + } + + return buffer; + }, + + /** + * Converts the styles from the given object to text. The styles are CSS style names + * with their associated value. + * + * The basic form of this method returns a string: + * + * var s = Ext.DomHelper.generateStyles({ + * backgroundColor: 'red' + * }); + * + * // s = 'background-color:red;' + * + * Alternatively, this method can append to an output array. + * + * var buf = []; + * + * ... + * + * Ext.DomHelper.generateStyles({ + * backgroundColor: 'red' + * }, buf); + * + * In this case, the style text is pushed on to the array and the array is returned. + * + * @param {Object} styles The object describing the styles. + * @param {String[]} [buffer] The output buffer. + * @return {String/String[]} If buffer is passed, it is returned. Otherwise the style + * string is returned. + */ + generateStyles: function (styles, buffer) { + var a = buffer || [], + name; + + for (name in styles) { + if (styles.hasOwnProperty(name)) { + a.push(this.decamelizeName(name), ':', styles[name], ';'); + } + } + + return buffer || a.join(''); + }, + + /** + * Returns the markup for the passed Element(s) config. + * @param {Object} spec The DOM object spec (and children) + * @return {String} + */ + markup: function(spec) { + if (typeof spec == "string") { + return spec; + } + + var buf = this.generateMarkup(spec, []); + return buf.join(''); + }, + + /** + * Applies a style specification to an element. + * @param {String/HTMLElement} el The element to apply styles to + * @param {String/Object/Function} styles A style specification string e.g. 'width:100px', or object in the form {width:'100px'}, or + * a function which returns such a specification. + */ + applyStyles: function(el, styles) { + if (styles) { + var i = 0, + len; + + el = Ext.fly(el, '_applyStyles'); + if (typeof styles == 'function') { + styles = styles.call(); + } + if (typeof styles == 'string') { + styles = Ext.util.Format.trim(styles).split(this.styleSepRe); + for (len = styles.length; i < len;) { + el.setStyle(styles[i++], styles[i++]); + } + } else if (Ext.isObject(styles)) { + el.setStyle(styles); + } + } + }, + + /** + * Inserts an HTML fragment into the DOM. + * @param {String} where Where to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd. + * + * For example take the following HTML: `
    Contents
    ` + * + * Using different `where` values inserts element to the following places: + * + * - beforeBegin: `
    Contents
    ` + * - afterBegin: `
    Contents
    ` + * - beforeEnd: `
    Contents
    ` + * - afterEnd: `
    Contents
    ` + * + * @param {HTMLElement/TextNode} el The context element + * @param {String} html The HTML fragment + * @return {HTMLElement} The new node + */ + insertHtml: function(where, el, html) { + var hash = {}, + setStart, + range, + frag, + rangeEl; + + where = where.toLowerCase(); + + // add these here because they are used in both branches of the condition. + hash['beforebegin'] = ['BeforeBegin', 'previousSibling']; + hash['afterend'] = ['AfterEnd', 'nextSibling']; + + range = el.ownerDocument.createRange(); + setStart = 'setStart' + (this.endRe.test(where) ? 'After' : 'Before'); + if (hash[where]) { + range[setStart](el); + frag = range.createContextualFragment(html); + el.parentNode.insertBefore(frag, where == 'beforebegin' ? el : el.nextSibling); + return el[(where == 'beforebegin' ? 'previous' : 'next') + 'Sibling']; + } + else { + rangeEl = (where == 'afterbegin' ? 'first' : 'last') + 'Child'; + if (el.firstChild) { + range[setStart](el[rangeEl]); + frag = range.createContextualFragment(html); + if (where == 'afterbegin') { + el.insertBefore(frag, el.firstChild); + } + else { + el.appendChild(frag); + } + } + else { + el.innerHTML = html; + } + return el[rangeEl]; + } + + throw 'Illegal insertion point -> "' + where + '"'; + }, + + /** + * Creates new DOM element(s) and inserts them before el. + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/String} o The DOM object spec (and children) or raw HTML blob + * @param {Boolean} [returnElement] true to return a Ext.Element + * @return {HTMLElement/Ext.Element} The new node + */ + insertBefore: function(el, o, returnElement) { + return this.doInsert(el, o, returnElement, 'beforebegin'); + }, + + /** + * Creates new DOM element(s) and inserts them after el. + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object} o The DOM object spec (and children) + * @param {Boolean} [returnElement] true to return a Ext.Element + * @return {HTMLElement/Ext.Element} The new node + */ + insertAfter: function(el, o, returnElement) { + return this.doInsert(el, o, returnElement, 'afterend', 'nextSibling'); + }, + + /** + * Creates new DOM element(s) and inserts them as the first child of el. + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/String} o The DOM object spec (and children) or raw HTML blob + * @param {Boolean} [returnElement] true to return a Ext.Element + * @return {HTMLElement/Ext.Element} The new node + */ + insertFirst: function(el, o, returnElement) { + return this.doInsert(el, o, returnElement, 'afterbegin', 'firstChild'); + }, + + /** + * Creates new DOM element(s) and appends them to el. + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/String} o The DOM object spec (and children) or raw HTML blob + * @param {Boolean} [returnElement] true to return a Ext.Element + * @return {HTMLElement/Ext.Element} The new node + */ + append: function(el, o, returnElement) { + return this.doInsert(el, o, returnElement, 'beforeend', '', true); + }, + + /** + * Creates new DOM element(s) and overwrites the contents of el with them. + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/String} o The DOM object spec (and children) or raw HTML blob + * @param {Boolean} [returnElement] true to return a Ext.Element + * @return {HTMLElement/Ext.Element} The new node + */ + overwrite: function(el, o, returnElement) { + el = Ext.getDom(el); + el.innerHTML = this.markup(o); + return returnElement ? Ext.get(el.firstChild) : el.firstChild; + }, + + doInsert: function(el, o, returnElement, pos, sibling, append) { + var newNode = this.insertHtml(pos, Ext.getDom(el), this.markup(o)); + return returnElement ? Ext.get(newNode, true) : newNode; + } + +}); + +//@tag dom,core +/** + */ +Ext.define('Ext.dom.AbstractElement_static', { + override: 'Ext.dom.AbstractElement', + + inheritableStatics: { + unitRe: /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i, + camelRe: /(-[a-z])/gi, + msRe: /^-ms-/, + cssRe: /([a-z0-9\-]+)\s*:\s*([^;\s]+(?:\s*[^;\s]+)*)?;?/gi, + opacityRe: /alpha\(opacity=(.*)\)/i, + propertyCache: {}, + defaultUnit : "px", + borders: {l: 'border-left-width', r: 'border-right-width', t: 'border-top-width', b: 'border-bottom-width'}, + paddings: {l: 'padding-left', r: 'padding-right', t: 'padding-top', b: 'padding-bottom'}, + margins: {l: 'margin-left', r: 'margin-right', t: 'margin-top', b: 'margin-bottom'}, + /** + * Test if size has a unit, otherwise appends the passed unit string, or the default for this Element. + * @param size {Object} The size to set + * @param units {String} The units to append to a numeric size value + * @private + * @static + */ + addUnits: function(size, units) { + // Most common case first: Size is set to a number + if (typeof size == 'number') { + return size + (units || this.defaultUnit || 'px'); + } + + // Size set to a value which means "auto" + if (size === "" || size == "auto" || size === undefined || size === null) { + return size || ''; + } + + // Otherwise, warn if it's not a valid CSS measurement + if (!this.unitRe.test(size)) { + if (Ext.isDefined(Ext.global.console)) { + Ext.global.console.warn("Warning, size detected as NaN on Element.addUnits."); + } + return size || ''; + } + + return size; + }, + + /** + * @static + * @private + */ + isAncestor: function(p, c) { + var ret = false; + + p = Ext.getDom(p); + c = Ext.getDom(c); + if (p && c) { + if (p.contains) { + return p.contains(c); + } else if (p.compareDocumentPosition) { + return !!(p.compareDocumentPosition(c) & 16); + } else { + while ((c = c.parentNode)) { + ret = c == p || ret; + } + } + } + return ret; + }, + + /** + * Parses a number or string representing margin sizes into an object. Supports CSS-style margin declarations + * (e.g. 10, "10", "10 10", "10 10 10" and "10 10 10 10" are all valid options and would return the same result) + * @static + * @param {Number/String} box The encoded margins + * @return {Object} An object with margin sizes for top, right, bottom and left + */ + parseBox: function(box) { + box = box || 0; + + var type = typeof box, + parts, + ln; + + if (type === 'number') { + return { + top : box, + right : box, + bottom: box, + left : box + }; + } else if (type !== 'string') { + // If not a number or a string, assume we've been given a box config. + return box; + } + + parts = box.split(' '); + ln = parts.length; + + if (ln == 1) { + parts[1] = parts[2] = parts[3] = parts[0]; + } else if (ln == 2) { + parts[2] = parts[0]; + parts[3] = parts[1]; + } else if (ln == 3) { + parts[3] = parts[1]; + } + + return { + top :parseFloat(parts[0]) || 0, + right :parseFloat(parts[1]) || 0, + bottom:parseFloat(parts[2]) || 0, + left :parseFloat(parts[3]) || 0 + }; + }, + + /** + * Parses a number or string representing margin sizes into an object. Supports CSS-style margin declarations + * (e.g. 10, "10", "10 10", "10 10 10" and "10 10 10 10" are all valid options and would return the same result) + * @static + * @param {Number/String/Object} box The encoded margins, or an object with top, right, + * bottom, and left properties + * @param {String} units The type of units to add + * @return {String} An string with unitized (px if units is not specified) metrics for top, right, bottom and left + */ + unitizeBox: function(box, units) { + var a = this.addUnits, + b = this.parseBox(box); + + return a(b.top, units) + ' ' + + a(b.right, units) + ' ' + + a(b.bottom, units) + ' ' + + a(b.left, units); + + }, + + // private + camelReplaceFn: function(m, a) { + return a.charAt(1).toUpperCase(); + }, + + /** + * Normalizes CSS property keys from dash delimited to camel case JavaScript Syntax. + * For example: + * + * - border-width -> borderWidth + * - padding-top -> paddingTop + * + * @static + * @param {String} prop The property to normalize + * @return {String} The normalized string + */ + normalize: function(prop) { + // TODO: Mobile optimization? + if (prop == 'float') { + prop = Ext.supports.Float ? 'cssFloat' : 'styleFloat'; + } + // For '-ms-foo' we need msFoo + return this.propertyCache[prop] || (this.propertyCache[prop] = prop.replace(this.msRe, 'ms-').replace(this.camelRe, this.camelReplaceFn)); + }, + + /** + * Retrieves the document height + * @static + * @return {Number} documentHeight + */ + getDocumentHeight: function() { + return Math.max(!Ext.isStrict ? document.body.scrollHeight : document.documentElement.scrollHeight, this.getViewportHeight()); + }, + + /** + * Retrieves the document width + * @static + * @return {Number} documentWidth + */ + getDocumentWidth: function() { + return Math.max(!Ext.isStrict ? document.body.scrollWidth : document.documentElement.scrollWidth, this.getViewportWidth()); + }, + + /** + * Retrieves the viewport height of the window. + * @static + * @return {Number} viewportHeight + */ + getViewportHeight: function(){ + return window.innerHeight; + }, + + /** + * Retrieves the viewport width of the window. + * @static + * @return {Number} viewportWidth + */ + getViewportWidth: function() { + return window.innerWidth; + }, + + /** + * Retrieves the viewport size of the window. + * @static + * @return {Object} object containing width and height properties + */ + getViewSize: function() { + return { + width: window.innerWidth, + height: window.innerHeight + }; + }, + + /** + * Retrieves the current orientation of the window. This is calculated by + * determing if the height is greater than the width. + * @static + * @return {String} Orientation of window: 'portrait' or 'landscape' + */ + getOrientation: function() { + if (Ext.supports.OrientationChange) { + return (window.orientation == 0) ? 'portrait' : 'landscape'; + } + + return (window.innerHeight > window.innerWidth) ? 'portrait' : 'landscape'; + }, + + /** + * Returns the top Element that is located at the passed coordinates + * @static + * @param {Number} x The x coordinate + * @param {Number} y The y coordinate + * @return {String} The found Element + */ + fromPoint: function(x, y) { + return Ext.get(document.elementFromPoint(x, y)); + }, + + /** + * Converts a CSS string into an object with a property for each style. + * + * The sample code below would return an object with 2 properties, one + * for background-color and one for color. + * + * var css = 'background-color: red;color: blue; '; + * console.log(Ext.dom.Element.parseStyles(css)); + * + * @static + * @param {String} styles A CSS string + * @return {Object} styles + */ + parseStyles: function(styles){ + var out = {}, + cssRe = this.cssRe, + matches; + + if (styles) { + // Since we're using the g flag on the regex, we need to set the lastIndex. + // This automatically happens on some implementations, but not others, see: + // http://stackoverflow.com/questions/2645273/javascript-regular-expression-literal-persists-between-function-calls + // http://blog.stevenlevithan.com/archives/fixing-javascript-regexp + cssRe.lastIndex = 0; + while ((matches = cssRe.exec(styles))) { + out[matches[1]] = matches[2]||''; + } + } + return out; + } + } +}, +function () { + var doc = document, + activeElement = null, + isCSS1 = doc.compatMode == "CSS1Compat"; + + // If the browser does not support document.activeElement we need some assistance. + // This covers old Safari 3.2 (4.0 added activeElement along with just about all + // other browsers). We need this support to handle issues with old Safari. + if (!('activeElement' in doc) && doc.addEventListener) { + doc.addEventListener('focus', + function (ev) { + if (ev && ev.target) { + activeElement = (ev.target == doc) ? null : ev.target; + } + }, true); + } + + /* + * Helper function to create the function that will restore the selection. + */ + function makeSelectionRestoreFn (activeEl, start, end) { + return function () { + activeEl.selectionStart = start; + activeEl.selectionEnd = end; + }; + } + + this.addInheritableStatics({ + /** + * Returns the active element in the DOM. If the browser supports activeElement + * on the document, this is returned. If not, the focus is tracked and the active + * element is maintained internally. + * @return {HTMLElement} The active (focused) element in the document. + */ + getActiveElement: function () { + var active; + // In IE 6/7, calling activeElement can sometimes throw an Unspecified Error, + // so we need to wrap it in a try catch + + try { + active = doc.activeElement; + } catch(e) {} + + // Default to the body if we can't find anything + // https://developer.mozilla.org/en-US/docs/DOM/document.activeElement + active = active || activeElement; + if (!active) { + active = activeElement = document.body; + } + return active; + }, + + /** + * Creates a function to call to clean up problems with the work-around for the + * WebKit RightMargin bug. The work-around is to add "display: 'inline-block'" to + * the element before calling getComputedStyle and then to restore its original + * display value. The problem with this is that it corrupts the selection of an + * INPUT or TEXTAREA element (as in the "I-beam" goes away but ths focus remains). + * To cleanup after this, we need to capture the selection of any such element and + * then restore it after we have restored the display style. + * + * @param {Ext.dom.Element} target The top-most element being adjusted. + * @private + */ + getRightMarginFixCleaner: function (target) { + var supports = Ext.supports, + hasInputBug = supports.DisplayChangeInputSelectionBug, + hasTextAreaBug = supports.DisplayChangeTextAreaSelectionBug, + activeEl, + tag, + start, + end; + + if (hasInputBug || hasTextAreaBug) { + activeEl = doc.activeElement || activeElement; // save a call + tag = activeEl && activeEl.tagName; + + if ((hasTextAreaBug && tag == 'TEXTAREA') || + (hasInputBug && tag == 'INPUT' && activeEl.type == 'text')) { + if (Ext.dom.Element.isAncestor(target, activeEl)) { + start = activeEl.selectionStart; + end = activeEl.selectionEnd; + + if (Ext.isNumber(start) && Ext.isNumber(end)) { // to be safe... + // We don't create the raw closure here inline because that + // will be costly even if we don't want to return it (nested + // function decls and exprs are often instantiated on entry + // regardless of whether execution ever reaches them): + return makeSelectionRestoreFn(activeEl, start, end); + } + } + } + } + + return Ext.emptyFn; // avoid special cases, just return a nop + }, + + getViewWidth: function(full) { + return full ? Ext.dom.Element.getDocumentWidth() : Ext.dom.Element.getViewportWidth(); + }, + + getViewHeight: function(full) { + return full ? Ext.dom.Element.getDocumentHeight() : Ext.dom.Element.getViewportHeight(); + }, + + getDocumentHeight: function() { + return Math.max(!isCSS1 ? doc.body.scrollHeight : doc.documentElement.scrollHeight, Ext.dom.Element.getViewportHeight()); + }, + + getDocumentWidth: function() { + return Math.max(!isCSS1 ? doc.body.scrollWidth : doc.documentElement.scrollWidth, Ext.dom.Element.getViewportWidth()); + }, + + getViewportHeight: function(){ + return Ext.isIE9m ? + (Ext.isStrict ? doc.documentElement.clientHeight : doc.body.clientHeight) : + self.innerHeight; + }, + + getViewportWidth: function() { + return (!Ext.isStrict && !Ext.isOpera) ? doc.body.clientWidth : + Ext.isIE9m ? doc.documentElement.clientWidth : self.innerWidth; + }, + + /** + * Serializes a DOM form into a url encoded string + * @param {Object} form The form + * @return {String} The url encoded form + */ + serializeForm: function(form) { + var fElements = form.elements || (document.forms[form] || Ext.getDom(form)).elements, + hasSubmit = false, + encoder = encodeURIComponent, + data = '', + eLen = fElements.length, + element, name, type, options, hasValue, e, + o, oLen, opt; + + for (e = 0; e < eLen; e++) { + element = fElements[e]; + name = element.name; + type = element.type; + options = element.options; + + if (!element.disabled && name) { + if (/select-(one|multiple)/i.test(type)) { + oLen = options.length; + for (o = 0; o < oLen; o++) { + opt = options[o]; + if (opt.selected) { + hasValue = opt.hasAttribute ? opt.hasAttribute('value') : opt.getAttributeNode('value').specified; + data += Ext.String.format("{0}={1}&", encoder(name), encoder(hasValue ? opt.value : opt.text)); + } + } + } else if (!(/file|undefined|reset|button/i.test(type))) { + if (!(/radio|checkbox/i.test(type) && !element.checked) && !(type == 'submit' && hasSubmit)) { + data += encoder(name) + '=' + encoder(element.value) + '&'; + hasSubmit = /submit/i.test(type); + } + } + } + } + return data.substr(0, data.length - 1); + } + }); +}); + +//@tag dom,core +/** + */ +Ext.define('Ext.dom.AbstractElement_insertion', { + override: 'Ext.dom.AbstractElement', + + /** + * Appends the passed element(s) to this element + * @param {String/HTMLElement/Ext.dom.AbstractElement/Object} el The id or element to insert or a DomHelper config + * The id of the node, a DOM Node or an existing Element. + * @param {Boolean} [returnDom=false] True to return the raw DOM element instead of Ext.dom.AbstractElement + * @return {Ext.dom.AbstractElement} The inserted Element. + */ + appendChild: function(el, returnDom) { + var me = this, + insertEl, + eLen, e, oldUseDom; + + if (el.nodeType || el.dom || typeof el == 'string') { // element + el = Ext.getDom(el); + me.dom.appendChild(el); + return !returnDom ? Ext.get(el) : el; + } else if (el.length) { + // append all elements to a documentFragment + insertEl = Ext.fly(document.createDocumentFragment(), '_internal'); + eLen = el.length; + + // DocumentFragments cannot accept innerHTML + Ext.DomHelper.useDom = true; + for (e = 0; e < eLen; e++) { + insertEl.appendChild(el[e], returnDom); + } + Ext.DomHelper.useDom = oldUseDom; + me.dom.appendChild(insertEl.dom); + return returnDom ? insertEl.dom : insertEl; + } + else { // dh config + return me.createChild(el, null, returnDom); + } + }, + + /** + * Appends this element to the passed element + * @param {String/HTMLElement/Ext.dom.AbstractElement} el The new parent element. + * The id of the node, a DOM Node or an existing Element. + * @return {Ext.dom.AbstractElement} This element + */ + appendTo: function(el) { + Ext.getDom(el).appendChild(this.dom); + return this; + }, + + /** + * Inserts this element before the passed element in the DOM + * @param {String/HTMLElement/Ext.dom.AbstractElement} el The element before which this element will be inserted. + * The id of the node, a DOM Node or an existing Element. + * @return {Ext.dom.AbstractElement} This element + */ + insertBefore: function(el) { + el = Ext.getDom(el); + el.parentNode.insertBefore(this.dom, el); + return this; + }, + + /** + * Inserts this element after the passed element in the DOM + * @param {String/HTMLElement/Ext.dom.AbstractElement} el The element to insert after. + * The id of the node, a DOM Node or an existing Element. + * @return {Ext.dom.AbstractElement} This element + */ + insertAfter: function(el) { + el = Ext.getDom(el); + el.parentNode.insertBefore(this.dom, el.nextSibling); + return this; + }, + + /** + * Inserts (or creates) an element (or DomHelper config) as the first child of this element + * @param {String/HTMLElement/Ext.dom.AbstractElement/Object} el The id or element to insert or a DomHelper config + * to create and insert + * @return {Ext.dom.AbstractElement} The new child + */ + insertFirst: function(el, returnDom) { + el = el || {}; + if (el.nodeType || el.dom || typeof el == 'string') { // element + el = Ext.getDom(el); + this.dom.insertBefore(el, this.dom.firstChild); + return !returnDom ? Ext.get(el) : el; + } + else { // dh config + return this.createChild(el, this.dom.firstChild, returnDom); + } + }, + + /** + * Inserts (or creates) the passed element (or DomHelper config) as a sibling of this element + * @param {String/HTMLElement/Ext.dom.AbstractElement/Object/Array} el The id, element to insert or a DomHelper config + * to create and insert *or* an array of any of those. + * @param {String} [where='before'] 'before' or 'after' + * @param {Boolean} [returnDom=false] True to return the raw DOM element instead of Ext.dom.AbstractElement + * @return {Ext.dom.AbstractElement} The inserted Element. If an array is passed, the last inserted element is returned. + */ + insertSibling: function(el, where, returnDom) { + var me = this, + DomHelper = Ext.core.DomHelper, + oldUseDom = DomHelper.useDom, + isAfter = (where || 'before').toLowerCase() == 'after', + rt, insertEl, eLen, e; + + if (Ext.isArray(el)) { + // append all elements to a documentFragment + insertEl = Ext.fly(document.createDocumentFragment(), '_internal'); + eLen = el.length; + + // DocumentFragments cannot accept innerHTML + DomHelper.useDom = true; + for (e = 0; e < eLen; e++) { + rt = insertEl.appendChild(el[e], returnDom); + } + DomHelper.useDom = oldUseDom; + + // Insert fragment into document + me.dom.parentNode.insertBefore(insertEl.dom, isAfter ? me.dom.nextSibling : me.dom); + return rt; + } + + el = el || {}; + + if (el.nodeType || el.dom) { + rt = me.dom.parentNode.insertBefore(Ext.getDom(el), isAfter ? me.dom.nextSibling : me.dom); + if (!returnDom) { + rt = Ext.get(rt); + } + } else { + if (isAfter && !me.dom.nextSibling) { + rt = DomHelper.append(me.dom.parentNode, el, !returnDom); + } else { + rt = DomHelper[isAfter ? 'insertAfter' : 'insertBefore'](me.dom, el, !returnDom); + } + } + return rt; + }, + + /** + * Replaces the passed element with this element + * @param {String/HTMLElement/Ext.dom.AbstractElement} el The element to replace. + * The id of the node, a DOM Node or an existing Element. + * @return {Ext.dom.AbstractElement} This element + */ + replace: function(el) { + el = Ext.get(el); + this.insertBefore(el); + el.remove(); + return this; + }, + + /** + * Replaces this element with the passed element + * @param {String/HTMLElement/Ext.dom.AbstractElement/Object} el The new element (id of the node, a DOM Node + * or an existing Element) or a DomHelper config of an element to create + * @return {Ext.dom.AbstractElement} This element + */ + replaceWith: function(el){ + var me = this; + + if (el.nodeType || el.dom || typeof el == 'string') { + el = Ext.get(el); + me.dom.parentNode.insertBefore(el.dom, me.dom); + } else { + el = Ext.core.DomHelper.insertBefore(me.dom, el); + } + + delete Ext.cache[me.id]; + Ext.removeNode(me.dom); + me.id = Ext.id(me.dom = el); + Ext.dom.AbstractElement.addToCache(me.isFlyweight ? new Ext.dom.AbstractElement(me.dom) : me); + return me; + }, + + /** + * Creates the passed DomHelper config and appends it to this element or optionally inserts it before the passed child element. + * @param {Object} config DomHelper element config object. If no tag is specified (e.g., {tag:'input'}) then a div will be + * automatically generated with the specified attributes. + * @param {HTMLElement} [insertBefore] a child element of this element + * @param {Boolean} [returnDom=false] true to return the dom node instead of creating an Element + * @return {Ext.dom.AbstractElement} The new child element + */ + createChild: function(config, insertBefore, returnDom) { + config = config || {tag:'div'}; + if (insertBefore) { + return Ext.core.DomHelper.insertBefore(insertBefore, config, returnDom !== true); + } + else { + return Ext.core.DomHelper.append(this.dom, config, returnDom !== true); + } + }, + + /** + * Creates and wraps this element with another element + * @param {Object} [config] DomHelper element config object for the wrapper element or null for an empty div + * @param {Boolean} [returnDom=false] True to return the raw DOM element instead of Ext.dom.AbstractElement + * @param {String} [selector] A {@link Ext.dom.Query DomQuery} selector to select a descendant node within the created element to use as the wrapping element. + * @return {HTMLElement/Ext.dom.AbstractElement} The newly created wrapper element + */ + wrap: function(config, returnDom, selector) { + var newEl = Ext.core.DomHelper.insertBefore(this.dom, config || {tag: "div"}, true), + target = newEl; + + if (selector) { + target = Ext.DomQuery.selectNode(selector, newEl.dom); + } + + target.appendChild(this.dom); + return returnDom ? newEl.dom : newEl; + }, + + /** + * Inserts an html fragment into this element + * @param {String} where Where to insert the html in relation to this element - beforeBegin, afterBegin, beforeEnd, afterEnd. + * See {@link Ext.dom.Helper#insertHtml} for details. + * @param {String} html The HTML fragment + * @param {Boolean} [returnEl=false] True to return an Ext.dom.AbstractElement + * @return {HTMLElement/Ext.dom.AbstractElement} The inserted node (or nearest related if more than 1 inserted) + */ + insertHtml: function(where, html, returnEl) { + var el = Ext.core.DomHelper.insertHtml(where, this.dom, html); + return returnEl ? Ext.get(el) : el; + } +}); + +//@tag dom,core +/** + */ +Ext.define('Ext.dom.AbstractElement_style', { + + override: 'Ext.dom.AbstractElement' + +}, function() { + // local style camelizing for speed + var Element = this, + wordsRe = /\w/g, + spacesRe = /\s+/, + transparentRe = /^(?:transparent|(?:rgba[(](?:\s*\d+\s*[,]){3}\s*0\s*[)]))$/i, + // In some browsers, currently IE10 and older chrome versions, when ClassList is + // supported most elements will have the classList attribute, but some svg elements + // will still not have it present, so in a small amount of cases we'll still need + // to check at run time whether we can use it. + hasClassList = Ext.supports.ClassList, + PADDING = 'padding', + MARGIN = 'margin', + BORDER = 'border', + LEFT_SUFFIX = '-left', + RIGHT_SUFFIX = '-right', + TOP_SUFFIX = '-top', + BOTTOM_SUFFIX = '-bottom', + WIDTH = '-width', + // special markup used throughout Ext when box wrapping elements + borders = {l: BORDER + LEFT_SUFFIX + WIDTH, r: BORDER + RIGHT_SUFFIX + WIDTH, t: BORDER + TOP_SUFFIX + WIDTH, b: BORDER + BOTTOM_SUFFIX + WIDTH}, + paddings = {l: PADDING + LEFT_SUFFIX, r: PADDING + RIGHT_SUFFIX, t: PADDING + TOP_SUFFIX, b: PADDING + BOTTOM_SUFFIX}, + margins = {l: MARGIN + LEFT_SUFFIX, r: MARGIN + RIGHT_SUFFIX, t: MARGIN + TOP_SUFFIX, b: MARGIN + BOTTOM_SUFFIX}, + internalFly = new Element.Fly(); + + + Ext.override(Element, { + + /** + * This shared object is keyed by style name (e.g., 'margin-left' or 'marginLeft'). The + * values are objects with the following properties: + * + * * `name` (String) : The actual name to be presented to the DOM. This is typically the value + * returned by {@link #normalize}. + * * `get` (Function) : A hook function that will perform the get on this style. These + * functions receive "(dom, el)" arguments. The `dom` parameter is the DOM Element + * from which to get ths tyle. The `el` argument (may be null) is the Ext.Element. + * * `set` (Function) : A hook function that will perform the set on this style. These + * functions receive "(dom, value, el)" arguments. The `dom` parameter is the DOM Element + * from which to get ths tyle. The `value` parameter is the new value for the style. The + * `el` argument (may be null) is the Ext.Element. + * + * The `this` pointer is the object that contains `get` or `set`, which means that + * `this.name` can be accessed if needed. The hook functions are both optional. + * @private + */ + styleHooks: {}, + + // private + addStyles : function(sides, styles){ + var totalSize = 0, + sidesArr = (sides || '').match(wordsRe), + i, + len = sidesArr.length, + side, + styleSides = []; + + if (len == 1) { + totalSize = Math.abs(parseFloat(this.getStyle(styles[sidesArr[0]])) || 0); + } else if (len) { + for (i = 0; i < len; i++) { + side = sidesArr[i]; + styleSides.push(styles[side]); + } + //Gather all at once, returning a hash + styleSides = this.getStyle(styleSides); + + for (i=0; i < len; i++) { + side = sidesArr[i]; + totalSize += Math.abs(parseFloat(styleSides[styles[side]]) || 0); + } + } + + return totalSize; + }, + + /** + * Adds one or more CSS classes to the element. Duplicate classes are automatically filtered out. + * @param {String/String[]} className The CSS classes to add separated by space, or an array of classes + * @return {Ext.dom.Element} this + * @method + */ + addCls: (function(){ + var addWithClassList = function(className) { + if (String(className).indexOf('undefined') > -1) { + Ext.Logger.warn("called with an undefined className: " + className); + } + var me = this, + dom = me.dom, + trimRe = me.trimRe, + origClassName = className, + classList, + newCls, + i, + len, + cls; + + if (typeof(className) == 'string') { + // split string on spaces to make an array of className + className = className.replace(trimRe, '').split(spacesRe); + } + + // the gain we have here is that we can skip parsing className and use the + // classList.contains method, so now O(M) not O(M+N) + if (dom && className && !!(len = className.length)) { + if (!dom.className) { + dom.className = className.join(' '); + } else { + classList = dom.classList; + if (classList) { + for (i = 0; i < len; ++i) { + cls = className[i]; + if (cls) { + if (!classList.contains(cls)) { + if (newCls) { + newCls.push(cls); + } else { + newCls = dom.className.replace(trimRe, ''); + newCls = newCls ? [newCls, cls] : [cls]; + } + } + } + } + + if (newCls) { + dom.className = newCls.join(' '); // write to DOM once + } + } else { + addWithoutClassList(origClassName); + } + } + } + return me; + }, addWithoutClassList = function(className) { + if (String(className).indexOf('undefined') > -1) { + Ext.Logger.warn("called with an undefined className: '" + className + "'"); + } + var me = this, + dom = me.dom, + elClasses; + + if (dom && className && className.length) { + elClasses = Ext.Element.mergeClsList(dom.className, className); + if (elClasses.changed) { + dom.className = elClasses.join(' '); // write to DOM once + } + } + return me; + }; + + return hasClassList ? addWithClassList : addWithoutClassList; + })(), + + + /** + * Removes one or more CSS classes from the element. + * @param {String/String[]} className The CSS classes to remove separated by space, or an array of classes + * @return {Ext.dom.Element} this + */ + removeCls: function(className) { + var me = this, + dom = me.dom, + classList, + len, + elClasses; + + if (typeof(className) == 'string') { + // split string on spaces to make an array of className + className = className.replace(me.trimRe, '').split(spacesRe); + } + + if (dom && dom.className && className && !!(len = className.length)) { + classList = dom.classList; + if (len === 1 && classList) { + if (className[0]) { + classList.remove(className[0]); // one DOM write + } + } else { + elClasses = Ext.Element.removeCls(dom.className, className); + if (elClasses.changed) { + dom.className = elClasses.join(' '); + } + } + } + return me; + }, + + /** + * Adds one or more CSS classes to this element and removes the same class(es) from all siblings. + * @param {String/String[]} className The CSS class to add, or an array of classes + * @return {Ext.dom.Element} this + */ + radioCls: function(className) { + var cn = this.dom.parentNode.childNodes, + v, + i, len; + className = Ext.isArray(className) ? className: [className]; + for (i = 0, len = cn.length; i < len; i++) { + v = cn[i]; + if (v && v.nodeType == 1) { + internalFly.attach(v).removeCls(className); + } + } + return this.addCls(className); + }, + + /** + * Toggles the specified CSS class on this element (removes it if it already exists, otherwise adds it). + * @param {String} className The CSS class to toggle + * @return {Ext.dom.Element} this + * @method + */ + toggleCls: (function(){ + var toggleWithClassList = function(className){ + var me = this, + dom = me.dom, + classList; + + if (dom) { + className = className.replace(me.trimRe, ''); + if (className) { + classList = dom.classList; + if (classList) { + classList.toggle(className); + } else { + toggleWithoutClassList(className); + } + } + } + + return me; + }, toggleWithoutClassList = function(className){ + return this.hasCls(className) ? this.removeCls(className) : this.addCls(className); + }; + + return hasClassList ? toggleWithClassList : toggleWithoutClassList; + })(), + + /** + * Checks if the specified CSS class exists on this element's DOM node. + * @param {String} className The CSS class to check for + * @return {Boolean} True if the class exists, else false + * @method + */ + hasCls: (function(){ + var hasClsWithClassList = function(className) { + var dom = this.dom, + out = false, + classList; + + if (dom && className) { + classList = dom.classList; + if (classList) { + out = classList.contains(className); + } else { + out = hasClsWithoutClassList(className); + } + } + return out; + }, hasClsWithoutClassList = function(className){ + var dom = this.dom; + return dom ? className && (' '+dom.className+' ').indexOf(' '+className+' ') !== -1 : false; + }; + + return hasClassList ? hasClsWithClassList : hasClsWithoutClassList; + })(), + + /** + * Replaces a CSS class on the element with another. If the old name does not exist, the new name will simply be added. + * @param {String} oldClassName The CSS class to replace + * @param {String} newClassName The replacement CSS class + * @return {Ext.dom.Element} this + */ + replaceCls: function(oldClassName, newClassName){ + return this.removeCls(oldClassName).addCls(newClassName); + }, + + /** + * Checks if the current value of a style is equal to a given value. + * @param {String} style property whose value is returned. + * @param {String} value to check against. + * @return {Boolean} true for when the current value equals the given value. + */ + isStyle: function(style, val) { + return this.getStyle(style) == val; + }, + + /** + * Returns a named style property based on computed/currentStyle (primary) and + * inline-style if primary is not available. + * + * @param {String/String[]} property The style property (or multiple property names + * in an array) whose value is returned. + * @param {Boolean} [inline=false] if `true` only inline styles will be returned. + * @return {String/Object} The current value of the style property for this element + * (or a hash of named style values if multiple property arguments are requested). + * @method + */ + getStyle: function (property, inline) { + var me = this, + dom = me.dom, + multiple = typeof property != 'string', + hooks = me.styleHooks, + prop = property, + props = prop, + len = 1, + domStyle, camel, values, hook, out, style, i; + + if (multiple) { + values = {}; + prop = props[0]; + i = 0; + if (!(len = props.length)) { + return values; + } + } + + if (!dom || dom.documentElement) { + return values || ''; + } + + domStyle = dom.style; + + if (inline) { + style = domStyle; + } else { + // Caution: Firefox will not render "presentation" (ie. computed styles) in + // iframes that are display:none or those inheriting display:none. Similar + // issues with legacy Safari. + // + style = dom.ownerDocument.defaultView.getComputedStyle(dom, null); + + // fallback to inline style if rendering context not available + if (!style) { + inline = true; + style = domStyle; + } + } + + do { + hook = hooks[prop]; + + if (!hook) { + hooks[prop] = hook = { name: Element.normalize(prop) }; + } + + if (hook.get) { + out = hook.get(dom, me, inline, style); + } else { + camel = hook.name; + out = style[camel]; + } + + if (!multiple) { + return out; + } + + values[prop] = out; + prop = props[++i]; + } while (i < len); + + return values; + }, + + getStyles: function () { + var props = Ext.Array.slice(arguments), + len = props.length, + inline; + + if (len && typeof props[len-1] == 'boolean') { + inline = props.pop(); + } + + return this.getStyle(props, inline); + }, + + /** + * Returns true if the value of the given property is visually transparent. This + * may be due to a 'transparent' style value or an rgba value with 0 in the alpha + * component. + * @param {String} prop The style property whose value is to be tested. + * @return {Boolean} True if the style property is visually transparent. + */ + isTransparent: function (prop) { + var value = this.getStyle(prop); + return value ? transparentRe.test(value) : false; + }, + + /** + * Wrapper for setting style properties, also takes single object parameter of multiple styles. + * @param {String/Object} property The style property to be set, or an object of multiple styles. + * @param {String} [value] The value to apply to the given property, or null if an object was passed. + * @return {Ext.dom.Element} this + */ + setStyle: function(prop, value) { + var me = this, + dom = me.dom, + hooks = me.styleHooks, + style = dom.style, + name = prop, + hook; + + // we don't promote the 2-arg form to object-form to avoid the overhead... + if (typeof name == 'string') { + hook = hooks[name]; + if (!hook) { + hooks[name] = hook = { name: Element.normalize(name) }; + } + value = (value == null) ? '' : value; + if (hook.set) { + hook.set(dom, value, me); + } else { + style[hook.name] = value; + } + if (hook.afterSet) { + hook.afterSet(dom, value, me); + } + } else { + for (name in prop) { + if (prop.hasOwnProperty(name)) { + hook = hooks[name]; + if (!hook) { + hooks[name] = hook = { name: Element.normalize(name) }; + } + value = prop[name]; + value = (value == null) ? '' : value; + if (hook.set) { + hook.set(dom, value, me); + } else { + style[hook.name] = value; + } + if (hook.afterSet) { + hook.afterSet(dom, value, me); + } + } + } + } + + return me; + }, + + /** + * Returns the offset height of the element + * @param {Boolean} [contentHeight] true to get the height minus borders and padding + * @return {Number} The element's height + */ + getHeight: function(contentHeight) { + var dom = this.dom, + height = contentHeight ? (dom.clientHeight - this.getPadding("tb")) : dom.offsetHeight; + return height > 0 ? height: 0; + }, + + /** + * Returns the offset width of the element + * @param {Boolean} [contentWidth] true to get the width minus borders and padding + * @return {Number} The element's width + */ + getWidth: function(contentWidth) { + var dom = this.dom, + width = contentWidth ? (dom.clientWidth - this.getPadding("lr")) : dom.offsetWidth; + return width > 0 ? width: 0; + }, + + /** + * Set the width of this Element. + * @param {Number/String} width The new width. This may be one of: + * + * - A Number specifying the new width in this Element's {@link #defaultUnit}s (by default, pixels). + * - A String used to set the CSS width style. Animation may **not** be used. + * + * @return {Ext.dom.Element} this + */ + setWidth: function(width) { + var me = this; + me.dom.style.width = Element.addUnits(width); + return me; + }, + + /** + * Set the height of this Element. + * + * // change the height to 200px and animate with default configuration + * Ext.fly('elementId').setHeight(200, true); + * + * // change the height to 150px and animate with a custom configuration + * Ext.fly('elId').setHeight(150, { + * duration : 500, // animation will have a duration of .5 seconds + * // will change the content to "finished" + * callback: function(){ this.{@link #update}("finished"); } + * }); + * + * @param {Number/String} height The new height. This may be one of: + * + * - A Number specifying the new height in this Element's {@link #defaultUnit}s (by default, pixels.) + * - A String used to set the CSS height style. Animation may **not** be used. + * + * @return {Ext.dom.Element} this + */ + setHeight: function(height) { + var me = this; + me.dom.style.height = Element.addUnits(height); + return me; + }, + + /** + * Gets the width of the border(s) for the specified side(s) + * @param {String} side Can be t, l, r, b or any combination of those to add multiple values. For example, + * passing `'lr'` would get the border **l**eft width + the border **r**ight width. + * @return {Number} The width of the sides passed added together + */ + getBorderWidth: function(side){ + return this.addStyles(side, borders); + }, + + /** + * Gets the width of the padding(s) for the specified side(s) + * @param {String} side Can be t, l, r, b or any combination of those to add multiple values. For example, + * passing `'lr'` would get the padding **l**eft + the padding **r**ight. + * @return {Number} The padding of the sides passed added together + */ + getPadding: function(side){ + return this.addStyles(side, paddings); + }, + + margins : margins, + + /** + * More flexible version of {@link #setStyle} for setting style properties. + * @param {String/Object/Function} styles A style specification string, e.g. "width:100px", or object in the form {width:"100px"}, or + * a function which returns such a specification. + * @return {Ext.dom.Element} this + */ + applyStyles: function(styles) { + if (styles) { + var i, + len, + dom = this.dom; + + if (typeof styles == 'function') { + styles = styles.call(); + } + if (typeof styles == 'string') { + styles = Ext.util.Format.trim(styles).split(/\s*(?::|;)\s*/); + for (i = 0, len = styles.length; i < len;) { + dom.style[Element.normalize(styles[i++])] = styles[i++]; + } + } + else if (typeof styles == 'object') { + this.setStyle(styles); + } + } + }, + + /** + * Set the size of this Element. If animation is true, both width and height will be animated concurrently. + * @param {Number/String} width The new width. This may be one of: + * + * - A Number specifying the new width in this Element's {@link #defaultUnit}s (by default, pixels). + * - A String used to set the CSS width style. Animation may **not** be used. + * - A size object in the format `{width: widthValue, height: heightValue}`. + * + * @param {Number/String} height The new height. This may be one of: + * + * - A Number specifying the new height in this Element's {@link #defaultUnit}s (by default, pixels). + * - A String used to set the CSS height style. Animation may **not** be used. + * + * @return {Ext.dom.Element} this + */ + setSize: function(width, height) { + var me = this, + style = me.dom.style; + + if (Ext.isObject(width)) { + // in case of object from getSize() + height = width.height; + width = width.width; + } + + style.width = Element.addUnits(width); + style.height = Element.addUnits(height); + return me; + }, + + /** + * Returns the dimensions of the element available to lay content out in. + * + * If the element (or any ancestor element) has CSS style `display: none`, the dimensions will be zero. + * + * Example: + * + * var vpSize = Ext.getBody().getViewSize(); + * + * // all Windows created afterwards will have a default value of 90% height and 95% width + * Ext.Window.override({ + * width: vpSize.width * 0.9, + * height: vpSize.height * 0.95 + * }); + * // To handle window resizing you would have to hook onto onWindowResize. + * + * getViewSize utilizes clientHeight/clientWidth which excludes sizing of scrollbars. + * To obtain the size including scrollbars, use getStyleSize + * + * Sizing of the document body is handled at the adapter level which handles special cases for IE and strict modes, etc. + * + * @return {Object} Object describing width and height. + * @return {Number} return.width + * @return {Number} return.height + */ + getViewSize: function() { + var doc = document, + dom = this.dom; + + if (dom == doc || dom == doc.body) { + return { + width: Element.getViewportWidth(), + height: Element.getViewportHeight() + }; + } + else { + return { + width: dom.clientWidth, + height: dom.clientHeight + }; + } + }, + + /** + * Returns the size of the element. + * @param {Boolean} [contentSize] true to get the width/size minus borders and padding + * @return {Object} An object containing the element's size: + * @return {Number} return.width + * @return {Number} return.height + */ + getSize: function(contentSize) { + var dom = this.dom; + return { + width: Math.max(0, contentSize ? (dom.clientWidth - this.getPadding("lr")) : dom.offsetWidth), + height: Math.max(0, contentSize ? (dom.clientHeight - this.getPadding("tb")) : dom.offsetHeight) + }; + }, + + /** + * Forces the browser to repaint this element + * @return {Ext.dom.Element} this + */ + repaint: function() { + var dom = this.dom; + this.addCls(Ext.baseCSSPrefix + 'repaint'); + setTimeout(function(){ + internalFly.attach(dom).removeCls(Ext.baseCSSPrefix + 'repaint'); + }, 1); + return this; + }, + + /** + * Returns an object with properties top, left, right and bottom representing the margins of this element unless sides is passed, + * then it returns the calculated width of the sides (see getPadding) + * @param {String} [sides] Any combination of l, r, t, b to get the sum of those sides + * @return {Object/Number} + */ + getMargin: function(side){ + var me = this, + hash = {t:"top", l:"left", r:"right", b: "bottom"}, + key, + o, + margins; + + if (!side) { + margins = []; + for (key in me.margins) { + if(me.margins.hasOwnProperty(key)) { + margins.push(me.margins[key]); + } + } + o = me.getStyle(margins); + if(o && typeof o == 'object') { + //now mixin nomalized values (from hash table) + for (key in me.margins) { + if(me.margins.hasOwnProperty(key)) { + o[hash[key]] = parseFloat(o[me.margins[key]]) || 0; + } + } + } + + return o; + } else { + return me.addStyles(side, me.margins); + } + }, + + /** + * Puts a mask over this element to disable user interaction. Requires core.css. + * This method can only be applied to elements which accept child nodes. + * @param {String} [msg] A message to display in the mask + * @param {String} [msgCls] A css class to apply to the msg element + */ + mask: function(msg, msgCls, transparent) { + var me = this, + dom = me.dom, + data = (me.$cache || me.getCache()).data, + el = data.mask, + mask, + size, + cls = '', + prefix = Ext.baseCSSPrefix; + + me.addCls(prefix + 'masked'); + if (me.getStyle("position") == "static") { + me.addCls(prefix + 'masked-relative'); + } + if (el) { + el.remove(); + } + if (msgCls && typeof msgCls == 'string' ) { + cls = ' ' + msgCls; + } + else { + cls = ' ' + prefix + 'mask-gray'; + } + + mask = me.createChild({ + cls: prefix + 'mask' + ((transparent !== false) ? '' : (' ' + prefix + 'mask-gray')), + html: msg ? ('
    ' + msg + '
    ') : '' + }); + + size = me.getSize(); + + data.mask = mask; + + if (dom === document.body) { + size.height = window.innerHeight; + if (me.orientationHandler) { + Ext.EventManager.unOrientationChange(me.orientationHandler, me); + } + + me.orientationHandler = function() { + size = me.getSize(); + size.height = window.innerHeight; + mask.setSize(size); + }; + + Ext.EventManager.onOrientationChange(me.orientationHandler, me); + } + mask.setSize(size); + if (Ext.is.iPad) { + Ext.repaint(); + } + }, + + /** + * Removes a previously applied mask. + */ + unmask: function() { + var me = this, + data = (me.$cache || me.getCache()).data, + mask = data.mask, + prefix = Ext.baseCSSPrefix; + + if (mask) { + mask.remove(); + delete data.mask; + } + me.removeCls([prefix + 'masked', prefix + 'masked-relative']); + + if (me.dom === document.body) { + Ext.EventManager.unOrientationChange(me.orientationHandler, me); + delete me.orientationHandler; + } + } + }); + + + Ext.onReady(function () { + var supports = Ext.supports, + styleHooks, + colorStyles, i, name, camel; + + function fixTransparent (dom, el, inline, style) { + var value = style[this.name] || ''; + return transparentRe.test(value) ? 'transparent' : value; + } + + function fixRightMargin (dom, el, inline, style) { + var result = style.marginRight, + domStyle, display; + + // Ignore cases when the margin is correctly reported as 0, the bug only shows + // numbers larger. + if (result != '0px') { + domStyle = dom.style; + display = domStyle.display; + domStyle.display = 'inline-block'; + result = (inline ? style : dom.ownerDocument.defaultView.getComputedStyle(dom, null)).marginRight; + domStyle.display = display; + } + + return result; + } + + function fixRightMarginAndInputFocus (dom, el, inline, style) { + var result = style.marginRight, + domStyle, cleaner, display; + + if (result != '0px') { + domStyle = dom.style; + cleaner = Element.getRightMarginFixCleaner(dom); + display = domStyle.display; + domStyle.display = 'inline-block'; + result = (inline ? style : dom.ownerDocument.defaultView.getComputedStyle(dom, '')).marginRight; + domStyle.display = display; + cleaner(); + } + + return result; + } + + styleHooks = Element.prototype.styleHooks; + + // Ext.supports needs to be initialized (we run very early in the onready sequence), + // but it is OK to call Ext.supports.init() more times than necessary... + if (supports.init) { + supports.init(); + } + + // Fix bug caused by this: https://bugs.webkit.org/show_bug.cgi?id=13343 + if (!supports.RightMargin) { + styleHooks.marginRight = styleHooks['margin-right'] = { + name: 'marginRight', + // TODO - Touch should use conditional compilation here or ensure that the + // underlying Ext.supports flags are set correctly... + get: (supports.DisplayChangeInputSelectionBug || supports.DisplayChangeTextAreaSelectionBug) ? + fixRightMarginAndInputFocus : fixRightMargin + }; + } + + if (!supports.TransparentColor) { + colorStyles = ['background-color', 'border-color', 'color', 'outline-color']; + for (i = colorStyles.length; i--; ) { + name = colorStyles[i]; + camel = Element.normalize(name); + + styleHooks[name] = styleHooks[camel] = { + name: camel, + get: fixTransparent + }; + } + } + }); + +}); + +//@tag dom,core +/** + */ +Ext.define('Ext.dom.AbstractElement_traversal', { + override: 'Ext.dom.AbstractElement', + + /** + * Looks at this node and then at parent nodes for a match of the passed simple selector (e.g. div.some-class or span:first-child) + * @param {String} selector The simple selector to test + * @param {Number/String/HTMLElement/Ext.Element} [limit] + * The max depth to search as a number or an element which causes the upward traversal to stop + * and is not considered for inclusion as the result. (defaults to 50 || document.documentElement) + * @param {Boolean} [returnEl=false] True to return a Ext.Element object instead of DOM node + * @return {HTMLElement} The matching DOM node (or null if no match was found) + */ + findParent: function(simpleSelector, limit, returnEl) { + var target = this.dom, + topmost = document.documentElement, + depth = 0, + stopEl; + + limit = limit || 50; + if (isNaN(limit)) { + stopEl = Ext.getDom(limit); + limit = Number.MAX_VALUE; + } + while (target && target.nodeType == 1 && depth < limit && target != topmost && target != stopEl) { + if (Ext.DomQuery.is(target, simpleSelector)) { + return returnEl ? Ext.get(target) : target; + } + depth++; + target = target.parentNode; + } + return null; + }, + + /** + * Looks at parent nodes for a match of the passed simple selector (e.g. div.some-class or span:first-child) + * @param {String} selector The simple selector to test + * @param {Number/String/HTMLElement/Ext.Element} [limit] + * The max depth to search as a number or an element which causes the upward traversal to stop + * and is not considered for inclusion as the result. (defaults to 50 || document.documentElement) + * @param {Boolean} [returnEl=false] True to return a Ext.Element object instead of DOM node + * @return {HTMLElement} The matching DOM node (or null if no match was found) + */ + findParentNode: function(simpleSelector, limit, returnEl) { + var p = Ext.fly(this.dom.parentNode, '_internal'); + return p ? p.findParent(simpleSelector, limit, returnEl) : null; + }, + + /** + * Walks up the DOM looking for a parent node that matches the passed simple selector (e.g. div.some-class or span:first-child). + * This is a shortcut for findParentNode() that always returns an Ext.dom.Element. + * @param {String} selector The simple selector to test + * @param {Number/String/HTMLElement/Ext.Element} [limit] + * The max depth to search as a number or an element which causes the upward traversal to stop + * and is not considered for inclusion as the result. (defaults to 50 || document.documentElement) + * @param {Boolean} [returnDom=false] True to return the DOM node instead of Ext.dom.Element + * @return {Ext.Element} The matching DOM node (or null if no match was found) + */ + up: function(simpleSelector, limit, returnDom) { + return this.findParentNode(simpleSelector, limit, !returnDom); + }, + + /** + * Creates a {@link Ext.CompositeElement} for child nodes based on the passed CSS selector (the selector should not contain an id). + * @param {String} selector The CSS selector + * @param {Boolean} [unique] True to create a unique Ext.Element for each element. Defaults to a shared flyweight object. + * @return {Ext.CompositeElement} The composite element + */ + select: function(selector, composite) { + return Ext.dom.Element.select(selector, this.dom, composite); + }, + + /** + * Selects child nodes based on the passed CSS selector (the selector should not contain an id). + * @param {String} selector The CSS selector + * @return {HTMLElement[]} An array of the matched nodes + */ + query: function(selector) { + return Ext.DomQuery.select(selector, this.dom); + }, + + /** + * Selects a single child at any depth below this element based on the passed CSS selector (the selector should not contain an id). + * @param {String} selector The CSS selector + * @param {Boolean} [returnDom=false] True to return the DOM node instead of Ext.dom.Element + * @return {HTMLElement/Ext.dom.Element} The child Ext.dom.Element (or DOM node if returnDom = true) + */ + down: function(selector, returnDom) { + var n = Ext.DomQuery.selectNode(selector, this.dom); + return returnDom ? n : Ext.get(n); + }, + + /** + * Selects a single *direct* child based on the passed CSS selector (the selector should not contain an id). + * @param {String} selector The CSS selector + * @param {Boolean} [returnDom=false] True to return the DOM node instead of Ext.dom.Element. + * @return {HTMLElement/Ext.dom.Element} The child Ext.dom.Element (or DOM node if returnDom = true) + */ + child: function(selector, returnDom) { + var node, + me = this, + id; + + // Pull the ID from the DOM (Ext.id also ensures that there *is* an ID). + // If this object is a Flyweight, it will not have an ID + id = Ext.id(me.dom); + // Escape "invalid" chars + id = Ext.escapeId(id); + node = Ext.DomQuery.selectNode('#' + id + " > " + selector, me.dom); + return returnDom ? node : Ext.get(node); + }, + + /** + * Gets the parent node for this element, optionally chaining up trying to match a selector + * @param {String} [selector] Find a parent node that matches the passed simple selector + * @param {Boolean} [returnDom=false] True to return a raw dom node instead of an Ext.dom.Element + * @return {Ext.dom.Element/HTMLElement} The parent node or null + */ + parent: function(selector, returnDom) { + return this.matchNode('parentNode', 'parentNode', selector, returnDom); + }, + + /** + * Gets the next sibling, skipping text nodes + * @param {String} [selector] Find the next sibling that matches the passed simple selector + * @param {Boolean} [returnDom=false] True to return a raw dom node instead of an Ext.dom.Element + * @return {Ext.dom.Element/HTMLElement} The next sibling or null + */ + next: function(selector, returnDom) { + return this.matchNode('nextSibling', 'nextSibling', selector, returnDom); + }, + + /** + * Gets the previous sibling, skipping text nodes + * @param {String} [selector] Find the previous sibling that matches the passed simple selector + * @param {Boolean} [returnDom=false] True to return a raw dom node instead of an Ext.dom.Element + * @return {Ext.dom.Element/HTMLElement} The previous sibling or null + */ + prev: function(selector, returnDom) { + return this.matchNode('previousSibling', 'previousSibling', selector, returnDom); + }, + + + /** + * Gets the first child, skipping text nodes + * @param {String} [selector] Find the next sibling that matches the passed simple selector + * @param {Boolean} [returnDom=false] True to return a raw dom node instead of an Ext.dom.Element + * @return {Ext.dom.Element/HTMLElement} The first child or null + */ + first: function(selector, returnDom) { + return this.matchNode('nextSibling', 'firstChild', selector, returnDom); + }, + + /** + * Gets the last child, skipping text nodes + * @param {String} [selector] Find the previous sibling that matches the passed simple selector + * @param {Boolean} [returnDom=false] True to return a raw dom node instead of an Ext.dom.Element + * @return {Ext.dom.Element/HTMLElement} The last child or null + */ + last: function(selector, returnDom) { + return this.matchNode('previousSibling', 'lastChild', selector, returnDom); + }, + + matchNode: function(dir, start, selector, returnDom) { + if (!this.dom) { + return null; + } + + var n = this.dom[start]; + while (n) { + if (n.nodeType == 1 && (!selector || Ext.DomQuery.is(n, selector))) { + return !returnDom ? Ext.get(n) : n; + } + n = n[dir]; + } + return null; + }, + + isAncestor: function(element) { + return this.self.isAncestor.call(this.self, this.dom, element); + } +}); + +//@tag dom,core +//@require Ext.Supports + +/** + * @private + */ +Ext.define('Ext.dom.AbstractElement', { + + + + + + + + + trimRe: /^\s+|\s+$/g, + whitespaceRe: /\s/, + + inheritableStatics: { + trimRe: /^\s+|\s+$/g, + whitespaceRe: /\s/, + + /** + * Retrieves Ext.dom.Element objects. {@link Ext#get} is alias for {@link Ext.dom.Element#get}. + * + * **This method does not retrieve {@link Ext.Component Component}s.** This method retrieves Ext.dom.Element + * objects which encapsulate DOM elements. To retrieve a Component by its ID, use {@link Ext.ComponentManager#get}. + * + * Uses simple caching to consistently return the same object. Automatically fixes if an object was recreated with + * the same id via AJAX or DOM. + * + * @param {String/HTMLElement/Ext.Element} el The id of the node, a DOM Node or an existing Element. + * @return {Ext.dom.Element} The Element object (or null if no matching element was found) + * @static + * @inheritable + */ + get: function(el) { + var me = this, + document = window.document, + El = Ext.dom.Element, + cacheItem, + docEl, + extEl, + dom, + id; + + if (!el) { + return null; + } + + // Ext.get(flyweight) must return an Element instance, not the flyweight + if (el.isFly) { + el = el.dom; + } + + if (typeof el == "string") { // element id + if (el == Ext.windowId) { + return El.get(window); + } else if (el == Ext.documentId) { + return El.get(document); + } + + cacheItem = Ext.cache[el]; + // This code is here to catch the case where we've got a reference to a document of an iframe + // It getElementById will fail because it's not part of the document, so if we're skipping + // GC it means it's a window/document object that isn't the default window/document, which we have + // already handled above + if (cacheItem && cacheItem.skipGarbageCollection) { + extEl = cacheItem.el; + return extEl; + } + + if (!(dom = document.getElementById(el))) { + return null; + } + + if (cacheItem && cacheItem.el) { + extEl = Ext.updateCacheEntry(cacheItem, dom).el; + } else { + // Force new element if there's a cache but no el attached + extEl = new El(dom, !!cacheItem); + } + return extEl; + } else if (el.tagName) { // dom element + if (!(id = el.id)) { + id = Ext.id(el); + } + cacheItem = Ext.cache[id]; + if (cacheItem && cacheItem.el) { + extEl = Ext.updateCacheEntry(cacheItem, el).el; + } else { + // Force new element if there's a cache but no el attached + extEl = new El(el, !!cacheItem); + } + return extEl; + } else if (el instanceof me) { + if (el != me.docEl && el != me.winEl) { + id = el.id; + // refresh dom element in case no longer valid, + // catch case where it hasn't been appended + cacheItem = Ext.cache[id]; + if (cacheItem) { + Ext.updateCacheEntry(cacheItem, document.getElementById(id) || el.dom); + } + } + return el; + } else if (el.isComposite) { + return el; + } else if (Ext.isArray(el)) { + return me.select(el); + } else if (el === document) { + // create a bogus element object representing the document object + if (!me.docEl) { + docEl = me.docEl = Ext.Object.chain(El.prototype); + docEl.dom = document; + // set an "el" property on the element that references itself. + // This allows Ext.util.Positionable methods to operate on + // this.el.dom since it gets mixed into both Element and Component + docEl.el = docEl; + docEl.id = Ext.id(document); + me.addToCache(docEl); + } + return me.docEl; + } else if (el === window) { + if (!me.winEl) { + me.winEl = Ext.Object.chain(El.prototype); + me.winEl.dom = window; + me.winEl.id = Ext.id(window); + me.addToCache(me.winEl); + } + return me.winEl; + } + return null; + }, + + addToCache: function(el, id) { + if (el) { + Ext.addCacheEntry(id, el); + } + return el; + }, + + addMethods: function() { + this.override.apply(this, arguments); + }, + + /** + *

    Returns an array of unique class names based upon the input strings, or string arrays.

    + *

    The number of parameters is unlimited.

    + *

    Example

    
    +// Add x-invalid and x-mandatory classes, do not duplicate
    +myElement.dom.className = Ext.core.Element.mergeClsList(this.initialClasses, 'x-invalid x-mandatory');
    +
    + * @param {Mixed} clsList1 A string of class names, or an array of class names. + * @param {Mixed} clsList2 A string of class names, or an array of class names. + * @return {Array} An array of strings representing remaining unique, merged class names. If class names were added to the first list, the changed property will be true. + * @static + * @inheritable + */ + mergeClsList: function() { + var clsList, clsHash = {}, + i, length, j, listLength, clsName, result = [], + changed = false, + trimRe = this.trimRe, + whitespaceRe = this.whitespaceRe; + + for (i = 0, length = arguments.length; i < length; i++) { + clsList = arguments[i]; + if (Ext.isString(clsList)) { + clsList = clsList.replace(trimRe, '').split(whitespaceRe); + } + if (clsList) { + for (j = 0, listLength = clsList.length; j < listLength; j++) { + clsName = clsList[j]; + if (!clsHash[clsName]) { + if (i) { + changed = true; + } + clsHash[clsName] = true; + } + } + } + } + + for (clsName in clsHash) { + result.push(clsName); + } + result.changed = changed; + return result; + }, + + /** + *

    Returns an array of unique class names deom the first parameter with all class names + * from the second parameter removed.

    + *

    Example

    
    +// Remove x-invalid and x-mandatory classes if present.
    +myElement.dom.className = Ext.core.Element.removeCls(this.initialClasses, 'x-invalid x-mandatory');
    +
    + * @param {Mixed} existingClsList A string of class names, or an array of class names. + * @param {Mixed} removeClsList A string of class names, or an array of class names to remove from existingClsList. + * @return {Array} An array of strings representing remaining class names. If class names were removed, the changed property will be true. + * @static + * @inheritable + */ + removeCls: function(existingClsList, removeClsList) { + var clsHash = {}, + i, length, clsName, result = [], + changed = false, + whitespaceRe = this.whitespaceRe; + + if (existingClsList) { + if (Ext.isString(existingClsList)) { + existingClsList = existingClsList.replace(this.trimRe, '').split(whitespaceRe); + } + for (i = 0, length = existingClsList.length; i < length; i++) { + clsHash[existingClsList[i]] = true; + } + } + if (removeClsList) { + if (Ext.isString(removeClsList)) { + removeClsList = removeClsList.split(whitespaceRe); + } + for (i = 0, length = removeClsList.length; i < length; i++) { + clsName = removeClsList[i]; + if (clsHash[clsName]) { + changed = true; + delete clsHash[clsName]; + } + } + } + for (clsName in clsHash) { + result.push(clsName); + } + result.changed = changed; + return result; + }, + + /** + * @property {Number} + * Visibility mode constant for use with {@link Ext.dom.Element#setVisibilityMode}. + * Use the CSS 'visibility' property to hide the element. + * + * Note that in this mode, {@link Ext.dom.Element#isVisible isVisible} may return true + * for an element even though it actually has a parent element that is hidden. For this + * reason, and in most cases, using the {@link #OFFSETS} mode is a better choice. + * @static + * @inheritable + */ + VISIBILITY: 1, + + /** + * @property {Number} + * Visibility mode constant for use with {@link Ext.dom.Element#setVisibilityMode}. + * Use the CSS 'display' property to hide the element. + * @static + * @inheritable + */ + DISPLAY: 2, + + /** + * @property {Number} + * Visibility mode constant for use with {@link Ext.dom.Element#setVisibilityMode}. + * Use CSS absolute positioning and top/left offsets to hide the element. + * @static + * @inheritable + */ + OFFSETS: 3, + + /** + * @property {Number} + * Visibility mode constant for use with {@link Ext.dom.Element#setVisibilityMode}. + * Add or remove the {@link Ext.Layer#visibilityCls} class to hide the element. + * @static + * @inheritable + */ + ASCLASS: 4 + }, + + constructor: function(element, forceNew) { + var me = this, + dom = typeof element == 'string' + ? document.getElementById(element) + : element, + id; + + // set an "el" property that references "this". This allows + // Ext.util.Positionable methods to operate on this.el.dom since it + // gets mixed into both Element and Component + me.el = me; + + if (!dom) { + return null; + } + + id = dom.id; + if (!forceNew && id && Ext.cache[id]) { + // element object already exists + return Ext.cache[id].el; + } + + /** + * @property {HTMLElement} dom + * The DOM element + */ + me.dom = dom; + + /** + * @property {String} id + * The DOM element ID + */ + me.id = id || Ext.id(dom); + + me.self.addToCache(me); + }, + + /** + * Sets the passed attributes as attributes of this element (a style attribute can be a string, object or function) + * @param {Object} o The object with the attributes + * @param {Boolean} [useSet=true] false to override the default setAttribute to use expandos. + * @return {Ext.dom.Element} this + */ + set: function(o, useSet) { + var el = this.dom, + attr, + value; + + for (attr in o) { + if (o.hasOwnProperty(attr)) { + value = o[attr]; + if (attr == 'style') { + this.applyStyles(value); + } + else if (attr == 'cls') { + el.className = value; + } + else if (useSet !== false) { + if (value === undefined) { + el.removeAttribute(attr); + } else { + el.setAttribute(attr, value); + } + } + else { + el[attr] = value; + } + } + } + return this; + }, + + /** + * @property {String} defaultUnit + * The default unit to append to CSS values where a unit isn't provided. + */ + defaultUnit: "px", + + /** + * Returns true if this element matches the passed simple selector (e.g. div.some-class or span:first-child) + * @param {String} selector The simple selector to test + * @return {Boolean} True if this element matches the selector, else false + */ + is: function(simpleSelector) { + return Ext.DomQuery.is(this.dom, simpleSelector); + }, + + /** + * Returns the value of the "value" attribute + * @param {Boolean} asNumber true to parse the value as a number + * @return {String/Number} + */ + getValue: function(asNumber) { + var val = this.dom.value; + return asNumber ? parseInt(val, 10) : val; + }, + + /** + * Removes this element's dom reference. Note that event and cache removal is handled at {@link Ext#removeNode + * Ext.removeNode} + */ + remove: function() { + var me = this, + dom = me.dom; + + if (me.isAnimate) { + me.stopAnimation(); + } + + if (dom) { + Ext.removeNode(dom); + delete me.dom; + } + }, + + /** + * Returns true if this element is an ancestor of the passed element + * @param {HTMLElement/String} el The element to check + * @return {Boolean} True if this element is an ancestor of el, else false + */ + contains: function(el) { + if (!el) { + return false; + } + + var me = this, + dom = el.dom || el; + + // we need el-contains-itself logic here because isAncestor does not do that: + return (dom === me.dom) || Ext.dom.AbstractElement.isAncestor(me.dom, dom); + }, + + /** + * Returns the value of an attribute from the element's underlying DOM node. + * @param {String} name The attribute name + * @param {String} [namespace] The namespace in which to look for the attribute + * @return {String} The attribute value + */ + getAttribute: function(name, ns) { + var dom = this.dom; + return dom.getAttributeNS(ns, name) || dom.getAttribute(ns + ":" + name) || dom.getAttribute(name) || dom[name]; + }, + + /** + * Update the innerHTML of this element + * @param {String} html The new HTML + * @return {Ext.dom.Element} this + */ + update: function(html) { + if (this.dom) { + this.dom.innerHTML = html; + } + return this; + }, + + + /** + * Set the innerHTML of this element + * @param {String} html The new HTML + * @return {Ext.Element} this + */ + setHTML: function(html) { + if(this.dom) { + this.dom.innerHTML = html; + } + return this; + }, + + /** + * Returns the innerHTML of an Element or an empty string if the element's + * dom no longer exists. + */ + getHTML: function() { + return this.dom ? this.dom.innerHTML : ''; + }, + + /** + * Hide this element - Uses display mode to determine whether to use "display" or "visibility". See {@link #setVisible}. + * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object + * @return {Ext.Element} this + */ + hide: function() { + this.setVisible(false); + return this; + }, + + /** + * Show this element - Uses display mode to determine whether to use "display" or "visibility". See {@link #setVisible}. + * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object + * @return {Ext.Element} this + */ + show: function() { + this.setVisible(true); + return this; + }, + + /** + * Sets the visibility of the element (see details). If the visibilityMode is set to Element.DISPLAY, it will use + * the display property to hide the element, otherwise it uses visibility. The default is to hide and show using the visibility property. + * @param {Boolean} visible Whether the element is visible + * @param {Boolean/Object} animate (optional) True for the default animation, or a standard Element animation config object + * @return {Ext.Element} this + */ + setVisible: function(visible, animate) { + var me = this, + statics = me.self, + mode = me.getVisibilityMode(), + prefix = Ext.baseCSSPrefix; + + switch (mode) { + case statics.VISIBILITY: + me.removeCls([prefix + 'hidden-display', prefix + 'hidden-offsets']); + me[visible ? 'removeCls' : 'addCls'](prefix + 'hidden-visibility'); + break; + + case statics.DISPLAY: + me.removeCls([prefix + 'hidden-visibility', prefix + 'hidden-offsets']); + me[visible ? 'removeCls' : 'addCls'](prefix + 'hidden-display'); + break; + + case statics.OFFSETS: + me.removeCls([prefix + 'hidden-visibility', prefix + 'hidden-display']); + me[visible ? 'removeCls' : 'addCls'](prefix + 'hidden-offsets'); + break; + } + + return me; + }, + + getVisibilityMode: function() { + // Only flyweights won't have a $cache object, by calling getCache the cache + // will be created for future accesses. As such, we're eliminating the method + // call since it's mostly redundant + var data = (this.$cache || this.getCache()).data, + visMode = data.visibilityMode; + + if (visMode === undefined) { + data.visibilityMode = visMode = this.self.DISPLAY; + } + + return visMode; + }, + + /** + * Use this to change the visibility mode between {@link #VISIBILITY}, {@link #DISPLAY}, {@link #OFFSETS} or {@link #ASCLASS}. + */ + setVisibilityMode: function(mode) { + (this.$cache || this.getCache()).data.visibilityMode = mode; + return this; + }, + + getCache: function() { + var me = this, + id = me.dom.id || Ext.id(me.dom); + + // Note that we do not assign an ID to the calling object here. + // An Ext.dom.Element will have one assigned at construction, and an Ext.dom.Element.Fly must not have one. + // We assign an ID to the DOM element if it does not have one. + me.$cache = Ext.cache[id] || Ext.addCacheEntry(id, null, me.dom); + + return me.$cache; + } +}, +function() { + var AbstractElement = this; + + /** + * @private + * @member Ext + */ + Ext.getDetachedBody = function () { + var detachedEl = AbstractElement.detachedBodyEl; + + if (!detachedEl) { + detachedEl = document.createElement('div'); + AbstractElement.detachedBodyEl = detachedEl = new AbstractElement.Fly(detachedEl); + detachedEl.isDetachedBody = true; + } + + return detachedEl; + }; + + /** + * @private + * @member Ext + */ + Ext.getElementById = function (id) { + var el = document.getElementById(id), + detachedBodyEl; + + if (!el && (detachedBodyEl = AbstractElement.detachedBodyEl)) { + el = detachedBodyEl.dom.querySelector('#' + Ext.escapeId(id)); + } + + return el; + }; + + /** + * @member Ext + * @method get + * @inheritdoc Ext.dom.Element#get + */ + Ext.get = function(el) { + return Ext.dom.Element.get(el); + }; + + this.addStatics({ + /** + * @class Ext.dom.Element.Fly + * @alternateClassName Ext.dom.AbstractElement.Fly + * @extends Ext.dom.Element + * + * A non-persistent wrapper for a DOM element which may be used to execute methods of {@link Ext.dom.Element} + * upon a DOM element without creating an instance of {@link Ext.dom.Element}. + * + * A **singleton** instance of this class is returned when you use {@link Ext#fly} + * + * Because it is a singleton, this Flyweight does not have an ID, and must be used and discarded in a single line. + * You should not keep and use the reference to this singleton over multiple lines because methods that you call + * may themselves make use of {@link Ext#fly} and may change the DOM element to which the instance refers. + */ + Fly: new Ext.Class({ + // Although here the class is extending from AbstractElement, + // the class will be overwritten by Element definition with + // a class extending from Element instead. + // Therefore above we document it as extending Ext.Element. + extend: AbstractElement, + + /** + * @property {Boolean} isFly + * This is `true` to identify Element flyweights + */ + isFly: true, + + constructor: function(dom) { + this.dom = dom; + // set an "el" property that references "this". This allows + // Ext.util.Positionable methods to operate on this.el.dom since it + // gets mixed into both Element and Component + this.el = this; + }, + + /** + * @private + * Attach this fliyweight instance to the passed DOM element. + * + * Note that a flightweight does **not** have an ID, and does not acquire the ID of the DOM element. + */ + attach: function (dom) { + + // Attach to the passed DOM element. The same code as in Ext.Fly + this.dom = dom; + // Use cached data if there is existing cached data for the referenced DOM element, + // otherwise it will be created when needed by getCache. + this.$cache = dom.id ? Ext.cache[dom.id] : null; + return this; + } + }), + + _flyweights: {}, + + /** + * Gets the singleton {@link Ext.dom.Element.Fly flyweight} element, with the passed node as the active element. + * + * Because it is a singleton, this Flyweight does not have an ID, and must be used and discarded in a single line. + * You may not keep and use the reference to this singleton over multiple lines because methods that you call + * may themselves make use of {@link Ext#fly} and may change the DOM element to which the instance refers. + * + * {@link Ext#fly} is alias for {@link Ext.dom.AbstractElement#fly}. + * + * Use this to make one-time references to DOM elements which are not going to be accessed again either by + * application code, or by Ext's classes. If accessing an element which will be processed regularly, then {@link + * Ext#get Ext.get} will be more appropriate to take advantage of the caching provided by the Ext.dom.Element + * class. + * + * @param {String/HTMLElement} dom The dom node or id + * @param {String} [named] Allows for creation of named reusable flyweights to prevent conflicts (e.g. + * internally Ext uses "_global") + * @return {Ext.dom.Element.Fly} The singleton flyweight object (or null if no matching element was found) + * @static + * @member Ext.dom.AbstractElement + */ + fly: function(dom, named) { + var fly = null, + _flyweights = AbstractElement._flyweights; + + named = named || '_global'; + + dom = Ext.getDom(dom); + + if (dom) { + fly = _flyweights[named] || (_flyweights[named] = new AbstractElement.Fly()); + + // Attach to the passed DOM element. + // This code performs the same function as Fly.attach, but inline it for efficiency + fly.dom = dom; + // Use cached data if there is existing cached data for the referenced DOM element, + // otherwise it will be created when needed by getCache. + fly.$cache = dom.id ? Ext.cache[dom.id] : null; + } + return fly; + } + }); + + /** + * @member Ext + * @method fly + * @inheritdoc Ext.dom.AbstractElement#fly + */ + Ext.fly = function() { + return AbstractElement.fly.apply(AbstractElement, arguments); + }; + + (function (proto) { + /** + * @method destroy + * @member Ext.dom.AbstractElement + * @inheritdoc Ext.dom.AbstractElement#remove + * Alias to {@link #remove}. + */ + proto.destroy = proto.remove; + + /** + * Returns a child element of this element given its `id`. + * @method getById + * @member Ext.dom.AbstractElement + * @param {String} id The id of the desired child element. + * @param {Boolean} [asDom=false] True to return the DOM element, false to return a + * wrapped Element object. + */ + if (document.querySelector) { + proto.getById = function (id, asDom) { + // for normal elements getElementById is the best solution, but if the el is + // not part of the document.body, we have to resort to querySelector + var dom = document.getElementById(id) || + this.dom.querySelector('#'+Ext.escapeId(id)); + return asDom ? dom : (dom ? Ext.get(dom) : null); + }; + } else { + proto.getById = function (id, asDom) { + var dom = document.getElementById(id); + return asDom ? dom : (dom ? Ext.get(dom) : null); + }; + } + }(this.prototype)); +}); + +//@tag dom,core +//@define Ext.DomHelper + +//@define Ext.core.DomHelper + +/** + * @class Ext.DomHelper + * @extends Ext.dom.Helper + * @alternateClassName Ext.core.DomHelper + * @singleton + * + * The DomHelper class provides a layer of abstraction from DOM and transparently supports creating elements via DOM or + * using HTML fragments. It also has the ability to create HTML fragment templates from your DOM building code. + * + * # DomHelper element specification object + * + * A specification object is used when creating elements. Attributes of this object are assumed to be element + * attributes, except for 4 special attributes: + * + * - **tag** - The tag name of the element. + * - **children** or **cn** - An array of the same kind of element definition objects to be created and appended. + * These can be nested as deep as you want. + * - **cls** - The class attribute of the element. This will end up being either the "class" attribute on a HTML + * fragment or className for a DOM node, depending on whether DomHelper is using fragments or DOM. + * - **html** - The innerHTML for the element. + * + * **NOTE:** For other arbitrary attributes, the value will currently **not** be automatically HTML-escaped prior to + * building the element's HTML string. This means that if your attribute value contains special characters that would + * not normally be allowed in a double-quoted attribute value, you **must** manually HTML-encode it beforehand (see + * {@link Ext.String#htmlEncode}) or risk malformed HTML being created. This behavior may change in a future release. + * + * # Insertion methods + * + * Commonly used insertion methods: + * + * - **{@link #append}** + * - **{@link #insertBefore}** + * - **{@link #insertAfter}** + * - **{@link #overwrite}** + * - **{@link #createTemplate}** + * - **{@link #insertHtml}** + * + * # Example + * + * This is an example, where an unordered list with 3 children items is appended to an existing element with + * id 'my-div': + * + * var dh = Ext.DomHelper; // create shorthand alias + * // specification object + * var spec = { + * id: 'my-ul', + * tag: 'ul', + * cls: 'my-list', + * // append children after creating + * children: [ // may also specify 'cn' instead of 'children' + * {tag: 'li', id: 'item0', html: 'List Item 0'}, + * {tag: 'li', id: 'item1', html: 'List Item 1'}, + * {tag: 'li', id: 'item2', html: 'List Item 2'} + * ] + * }; + * var list = dh.append( + * 'my-div', // the context element 'my-div' can either be the id or the actual node + * spec // the specification object + * ); + * + * Element creation specification parameters in this class may also be passed as an Array of specification objects. This + * can be used to insert multiple sibling nodes into an existing container very efficiently. For example, to add more + * list items to the example above: + * + * dh.append('my-ul', [ + * {tag: 'li', id: 'item3', html: 'List Item 3'}, + * {tag: 'li', id: 'item4', html: 'List Item 4'} + * ]); + * + * # Templating + * + * The real power is in the built-in templating. Instead of creating or appending any elements, {@link #createTemplate} + * returns a Template object which can be used over and over to insert new elements. Revisiting the example above, we + * could utilize templating this time: + * + * // create the node + * var list = dh.append('my-div', {tag: 'ul', cls: 'my-list'}); + * // get template + * var tpl = dh.createTemplate({tag: 'li', id: 'item{0}', html: 'List Item {0}'}); + * + * for(var i = 0; i < 5, i++){ + * tpl.append(list, [i]); // use template to append to the actual node + * } + * + * An example using a template: + * + * var html = '{2}'; + * + * var tpl = new Ext.DomHelper.createTemplate(html); + * tpl.append('blog-roll', ['link1', 'http://www.edspencer.net/', "Ed's Site"]); + * tpl.append('blog-roll', ['link2', 'http://www.dustindiaz.com/', "Dustin's Site"]); + * + * The same example using named parameters: + * + * var html = '{text}'; + * + * var tpl = new Ext.DomHelper.createTemplate(html); + * tpl.append('blog-roll', { + * id: 'link1', + * url: 'http://www.edspencer.net/', + * text: "Ed's Site" + * }); + * tpl.append('blog-roll', { + * id: 'link2', + * url: 'http://www.dustindiaz.com/', + * text: "Dustin's Site" + * }); + * + * # Compiling Templates + * + * Templates are applied using regular expressions. The performance is great, but if you are adding a bunch of DOM + * elements using the same template, you can increase performance even further by {@link Ext.Template#compile + * "compiling"} the template. The way "{@link Ext.Template#compile compile()}" works is the template is parsed and + * broken up at the different variable points and a dynamic function is created and eval'ed. The generated function + * performs string concatenation of these parts and the passed variables instead of using regular expressions. + * + * var html = '{text}'; + * + * var tpl = new Ext.DomHelper.createTemplate(html); + * tpl.compile(); + * + * //... use template like normal + * + * # Performance Boost + * + * DomHelper will transparently create HTML fragments when it can. Using HTML fragments instead of DOM can significantly + * boost performance. + * + * Element creation specification parameters may also be strings. If {@link #useDom} is false, then the string is used + * as innerHTML. If {@link #useDom} is true, a string specification results in the creation of a text node. Usage: + * + * Ext.DomHelper.useDom = true; // force it to use DOM; reduces performance + * + */ +Ext.define('Ext.dom.Helper', (function() { + +// kill repeat to save bytes +var afterbegin = 'afterbegin', + afterend = 'afterend', + beforebegin = 'beforebegin', + beforeend = 'beforeend', + ts = '', + te = '
    ', + tbs = ts+'', + tbe = ''+te, + trs = tbs + '', + tre = ''+tbe, + detachedDiv = document.createElement('div'), + bbValues = ['BeforeBegin', 'previousSibling'], + aeValues = ['AfterEnd', 'nextSibling'], + bb_ae_PositionHash = { + beforebegin: bbValues, + afterend: aeValues + }, + fullPositionHash = { + beforebegin: bbValues, + afterend: aeValues, + afterbegin: ['AfterBegin', 'firstChild'], + beforeend: ['BeforeEnd', 'lastChild'] + }; + +/** + * @class Ext.dom.Helper + * @extends Ext.dom.AbstractHelper + * @requires Ext.dom.AbstractElement + * + * The actual class of which {@link Ext.DomHelper} is instance of. + * + * Use singleton {@link Ext.DomHelper} instead. + * + * @private + */ +return { + extend: Ext.dom.AbstractHelper , + + + tableRe: /^(?:table|thead|tbody|tr|td)$/i, + + tableElRe: /td|tr|tbody|thead/i, + + /** + * @property {Boolean} useDom + * True to force the use of DOM instead of html fragments. + */ + useDom : false, + + /** + * Creates new DOM element(s) without inserting them to the document. + * @param {Object/String} o The DOM object spec (and children) or raw HTML blob + * @return {HTMLElement} The new uninserted node + */ + createDom: function(o, parentNode){ + var el, + doc = document, + useSet, + attr, + val, + cn, + i, l; + + if (Ext.isArray(o)) { // Allow Arrays of siblings to be inserted + el = doc.createDocumentFragment(); // in one shot using a DocumentFragment + for (i = 0, l = o.length; i < l; i++) { + this.createDom(o[i], el); + } + } else if (typeof o == 'string') { // Allow a string as a child spec. + el = doc.createTextNode(o); + } else { + el = doc.createElement(o.tag || 'div'); + useSet = !!el.setAttribute; // In IE some elements don't have setAttribute + for (attr in o) { + if (!this.confRe.test(attr)) { + val = o[attr]; + if (attr == 'cls') { + el.className = val; + } else { + if (useSet) { + el.setAttribute(attr, val); + } else { + el[attr] = val; + } + } + } + } + Ext.DomHelper.applyStyles(el, o.style); + + if ((cn = o.children || o.cn)) { + this.createDom(cn, el); + } else if (o.html) { + el.innerHTML = o.html; + } + } + if (parentNode) { + parentNode.appendChild(el); + } + return el; + }, + + ieTable: function(depth, openingTags, htmlContent, closingTags){ + detachedDiv.innerHTML = [openingTags, htmlContent, closingTags].join(''); + + var i = -1, + el = detachedDiv, + ns; + + while (++i < depth) { + el = el.firstChild; + } + // If the result is multiple siblings, then encapsulate them into one fragment. + ns = el.nextSibling; + + if (ns) { + ns = el; + el = document.createDocumentFragment(); + + while (ns) { + nx = ns.nextSibling; + el.appendChild(ns); + ns = nx; + } + } + return el; + }, + + /** + * @private + * Nasty code for IE's broken table implementation + */ + insertIntoTable: function(tag, where, destinationEl, html) { + var node, + before, + bb = where == beforebegin, + ab = where == afterbegin, + be = where == beforeend, + ae = where == afterend; + + if (tag == 'td' && (ab || be) || !this.tableElRe.test(tag) && (bb || ae)) { + return null; + } + before = bb ? destinationEl : + ae ? destinationEl.nextSibling : + ab ? destinationEl.firstChild : null; + + if (bb || ae) { + destinationEl = destinationEl.parentNode; + } + + if (tag == 'td' || (tag == 'tr' && (be || ab))) { + node = this.ieTable(4, trs, html, tre); + } else if (((tag == 'tbody' || tag == 'thead') && (be || ab)) || + (tag == 'tr' && (bb || ae))) { + node = this.ieTable(3, tbs, html, tbe); + } else { + node = this.ieTable(2, ts, html, te); + } + destinationEl.insertBefore(node, before); + return node; + }, + + /** + * @private + * Fix for IE9 createContextualFragment missing method + */ + createContextualFragment: function(html) { + var fragment = document.createDocumentFragment(), + length, childNodes; + + detachedDiv.innerHTML = html; + childNodes = detachedDiv.childNodes; + length = childNodes.length; + + // Move nodes into fragment, don't clone: http://jsperf.com/create-fragment + while (length--) { + fragment.appendChild(childNodes[0]); + } + return fragment; + }, + + applyStyles: function(el, styles) { + if (styles) { + if (typeof styles == "function") { + styles = styles.call(); + } + if (typeof styles == "string") { + styles = Ext.dom.Element.parseStyles(styles); + } + if (typeof styles == "object") { + Ext.fly(el, '_applyStyles').setStyle(styles); + } + } + }, + + /** + * Alias for {@link #markup}. + * @inheritdoc Ext.dom.AbstractHelper#markup + */ + createHtml: function(spec) { + return this.markup(spec); + }, + + doInsert: function(el, o, returnElement, pos, sibling, append) { + + el = el.dom || Ext.getDom(el); + + var newNode; + + if (this.useDom) { + newNode = this.createDom(o, null); + + if (append) { + el.appendChild(newNode); + } + else { + (sibling == 'firstChild' ? el : el.parentNode).insertBefore(newNode, el[sibling] || el); + } + + } else { + newNode = this.insertHtml(pos, el, this.markup(o)); + } + return returnElement ? Ext.get(newNode, true) : newNode; + }, + + /** + * Creates new DOM element(s) and overwrites the contents of el with them. + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/String} o The DOM object spec (and children) or raw HTML blob + * @param {Boolean} [returnElement] true to return an Ext.Element + * @return {HTMLElement/Ext.Element} The new node + */ + overwrite: function(el, html, returnElement) { + var newNode; + + el = Ext.getDom(el); + html = this.markup(html); + + // IE Inserting HTML into a table/tbody/tr requires extra processing: http://www.ericvasilik.com/2006/07/code-karma.html + if (Ext.isIE && this.tableRe.test(el.tagName)) { + // Clearing table elements requires removal of all elements. + while (el.firstChild) { + el.removeChild(el.firstChild); + } + if (html) { + newNode = this.insertHtml('afterbegin', el, html); + return returnElement ? Ext.get(newNode) : newNode; + } + return null; + } + el.innerHTML = html; + return returnElement ? Ext.get(el.firstChild) : el.firstChild; + }, + + insertHtml: function(where, el, html) { + var hashVal, + range, + rangeEl, + setStart, + frag; + + where = where.toLowerCase(); + + // Has fast HTML insertion into existing DOM: http://www.w3.org/TR/html5/apis-in-html-documents.html#insertadjacenthtml + if (el.insertAdjacentHTML) { + + // IE's incomplete table implementation: http://www.ericvasilik.com/2006/07/code-karma.html + if (Ext.isIE && this.tableRe.test(el.tagName) && (frag = this.insertIntoTable(el.tagName.toLowerCase(), where, el, html))) { + return frag; + } + + if ((hashVal = fullPositionHash[where])) { + + if (Ext.global.MSApp && Ext.global.MSApp.execUnsafeLocalFunction) { + //ALLOW MS TO EXECUTE THIS CODE FOR NATIVE WINDOWS 8 DESKTOP APPS + MSApp.execUnsafeLocalFunction(function () { + el.insertAdjacentHTML(hashVal[0], html); + }); + } else { + el.insertAdjacentHTML(hashVal[0], html); + } + + return el[hashVal[1]]; + } + // if (not IE and context element is an HTMLElement) or TextNode + } else { + // we cannot insert anything inside a textnode so... + if (el.nodeType === 3) { + where = where === 'afterbegin' ? 'beforebegin' : where; + where = where === 'beforeend' ? 'afterend' : where; + } + range = Ext.supports.CreateContextualFragment ? el.ownerDocument.createRange() : undefined; + setStart = 'setStart' + (this.endRe.test(where) ? 'After' : 'Before'); + if (bb_ae_PositionHash[where]) { + if (range) { + range[setStart](el); + frag = range.createContextualFragment(html); + } else { + frag = this.createContextualFragment(html); + } + el.parentNode.insertBefore(frag, where == beforebegin ? el : el.nextSibling); + return el[(where == beforebegin ? 'previous' : 'next') + 'Sibling']; + } else { + rangeEl = (where == afterbegin ? 'first' : 'last') + 'Child'; + if (el.firstChild) { + if (range) { + range[setStart](el[rangeEl]); + frag = range.createContextualFragment(html); + } else { + frag = this.createContextualFragment(html); + } + + if (where == afterbegin) { + el.insertBefore(frag, el.firstChild); + } else { + el.appendChild(frag); + } + } else { + el.innerHTML = html; + } + return el[rangeEl]; + } + } + Ext.Error.raise({ + sourceClass: 'Ext.DomHelper', + sourceMethod: 'insertHtml', + htmlToInsert: html, + targetElement: el, + msg: 'Illegal insertion point reached: "' + where + '"' + }); + }, + + /** + * Creates a new Ext.Template from the DOM object spec. + * @param {Object} o The DOM object spec (and children) + * @return {Ext.Template} The new template + */ + createTemplate: function(o) { + var html = this.markup(o); + return new Ext.Template(html); + } + +}; +})(), function() { + Ext.ns('Ext.core'); + Ext.DomHelper = Ext.core.DomHelper = new this; +}); + +//@tag core +/** + * Represents an HTML fragment template. Templates may be {@link #compile precompiled} for greater performance. + * + * An instance of this class may be created by passing to the constructor either a single argument, or multiple + * arguments: + * + * # Single argument: String/Array + * + * The single argument may be either a String or an Array: + * + * - String: + * + * var t = new Ext.Template("
    Hello {0}.
    "); + * t.{@link #append}('some-element', ['foo']); + * + * - Array: + * + * An Array will be combined with `join('')`. + * + * var t = new Ext.Template([ + * '
    ', + * '{name:trim} {value:ellipsis(10)}', + * '
    ', + * ]); + * t.{@link #compile}(); + * t.{@link #append}('some-element', {id: 'myid', cls: 'myclass', name: 'foo', value: 'bar'}); + * + * # Multiple arguments: String, Object, Array, ... + * + * Multiple arguments will be combined with `join('')`. + * + * var t = new Ext.Template( + * '
    ', + * '{name} {value}', + * '
    ', + * // a configuration object: + * { + * compiled: true, // {@link #compile} immediately + * } + * ); + * + * # Notes + * + * - For a list of available format functions, see {@link Ext.util.Format}. + * - `disableFormats` reduces `{@link #apply}` time when no formatting is required. + */ +Ext.define('Ext.Template', { + + /* Begin Definitions */ + + + + inheritableStatics: { + /** + * Creates a template from the passed element's value (_display:none_ textarea, preferred) or innerHTML. + * @param {String/HTMLElement} el A DOM element or its id + * @param {Object} config (optional) Config object + * @return {Ext.Template} The created template + * @static + * @inheritable + */ + from: function(el, config) { + el = Ext.getDom(el); + return new this(el.value || el.innerHTML, config || ''); + } + }, + + /* End Definitions */ + + /** + * Creates new template. + * + * @param {String...} html List of strings to be concatenated into template. + * Alternatively an array of strings can be given, but then no config object may be passed. + * @param {Object} config (optional) Config object + */ + constructor: function(html) { + var me = this, + args = arguments, + buffer = [], + i = 0, + length = args.length, + value; + + me.initialConfig = {}; + + // Allow an array to be passed here so we can + // pass an array of strings and an object + // at the end + if (length === 1 && Ext.isArray(html)) { + args = html; + length = args.length; + } + + if (length > 1) { + for (; i < length; i++) { + value = args[i]; + if (typeof value == 'object') { + Ext.apply(me.initialConfig, value); + Ext.apply(me, value); + } else { + buffer.push(value); + } + } + } else { + buffer.push(html); + } + + // @private + me.html = buffer.join(''); + + if (me.compiled) { + me.compile(); + } + }, + + /** + * @property {Boolean} isTemplate + * `true` in this class to identify an object as an instantiated Template, or subclass thereof. + */ + isTemplate: true, + + /** + * @cfg {Boolean} compiled + * True to immediately compile the template. Defaults to false. + */ + + /** + * @cfg {Boolean} disableFormats + * True to disable format functions in the template. If the template doesn't contain + * format functions, setting disableFormats to true will reduce apply time. Defaults to false. + */ + disableFormats: false, + + re: /\{([\w\-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, + + /** + * Returns an HTML fragment of this template with the specified values applied. + * + * @param {Object/Array} values The template values. Can be an array if your params are numeric: + * + * var tpl = new Ext.Template('Name: {0}, Age: {1}'); + * tpl.apply(['John', 25]); + * + * or an object: + * + * var tpl = new Ext.Template('Name: {name}, Age: {age}'); + * tpl.apply({name: 'John', age: 25}); + * + * @return {String} The HTML fragment + */ + apply: function(values) { + var me = this, + useFormat = me.disableFormats !== true, + fm = Ext.util.Format, + tpl = me, + ret; + + if (me.compiled) { + return me.compiled(values).join(''); + } + + function fn(m, name, format, args) { + if (format && useFormat) { + if (args) { + args = [values[name]].concat(Ext.functionFactory('return ['+ args +'];')()); + } else { + args = [values[name]]; + } + if (format.substr(0, 5) == "this.") { + return tpl[format.substr(5)].apply(tpl, args); + } + else { + return fm[format].apply(fm, args); + } + } + else { + return values[name] !== undefined ? values[name] : ""; + } + } + + ret = me.html.replace(me.re, fn); + return ret; + }, + + /** + * Appends the result of this template to the provided output array. + * @param {Object/Array} values The template values. See {@link #apply}. + * @param {Array} out The array to which output is pushed. + * @return {Array} The given out array. + */ + applyOut: function(values, out) { + var me = this; + + if (me.compiled) { + out.push.apply(out, me.compiled(values)); + } else { + out.push(me.apply(values)); + } + + return out; + }, + + /** + * @method applyTemplate + * @member Ext.Template + * Alias for {@link #apply}. + * @inheritdoc Ext.Template#apply + */ + applyTemplate: function () { + return this.apply.apply(this, arguments); + }, + + /** + * Sets the HTML used as the template and optionally compiles it. + * @param {String} html + * @param {Boolean} compile (optional) True to compile the template. + * @return {Ext.Template} this + */ + set: function(html, compile) { + var me = this; + me.html = html; + me.compiled = null; + return compile ? me.compile() : me; + }, + + compileARe: /\\/g, + compileBRe: /(\r\n|\n)/g, + compileCRe: /'/g, + + /** + * Compiles the template into an internal function, eliminating the RegEx overhead. + * @return {Ext.Template} this + */ + compile: function() { + var me = this, + fm = Ext.util.Format, + useFormat = me.disableFormats !== true, + body, bodyReturn; + + function fn(m, name, format, args) { + if (format && useFormat) { + args = args ? ',' + args: ""; + if (format.substr(0, 5) != "this.") { + format = "fm." + format + '('; + } + else { + format = 'this.' + format.substr(5) + '('; + } + } + else { + args = ''; + format = "(values['" + name + "'] == undefined ? '' : "; + } + return "'," + format + "values['" + name + "']" + args + ") ,'"; + } + + bodyReturn = me.html.replace(me.compileARe, '\\\\').replace(me.compileBRe, '\\n').replace(me.compileCRe, "\\'").replace(me.re, fn); + body = "this.compiled = function(values){ return ['" + bodyReturn + "'];};"; + eval(body); + return me; + }, + + /** + * Applies the supplied values to the template and inserts the new node(s) as the first child of el. + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return a Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + insertFirst: function(el, values, returnElement) { + return this.doInsert('afterBegin', el, values, returnElement); + }, + + /** + * Applies the supplied values to the template and inserts the new node(s) before el. + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return a Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + insertBefore: function(el, values, returnElement) { + return this.doInsert('beforeBegin', el, values, returnElement); + }, + + /** + * Applies the supplied values to the template and inserts the new node(s) after el. + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return a Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + insertAfter: function(el, values, returnElement) { + return this.doInsert('afterEnd', el, values, returnElement); + }, + + /** + * Applies the supplied `values` to the template and appends the new node(s) to the specified `el`. + * + * For example usage see {@link Ext.Template Ext.Template class docs}. + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return an Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + append: function(el, values, returnElement) { + return this.doInsert('beforeEnd', el, values, returnElement); + }, + + doInsert: function(where, el, values, returnElement) { + var newNode = Ext.DomHelper.insertHtml(where, Ext.getDom(el), this.apply(values)); + return returnElement ? Ext.get(newNode) : newNode; + }, + + /** + * Applies the supplied values to the template and overwrites the content of el with the new node(s). + * + * @param {String/HTMLElement/Ext.Element} el The context element + * @param {Object/Array} values The template values. See {@link #applyTemplate} for details. + * @param {Boolean} returnElement (optional) true to return a Ext.Element. + * @return {HTMLElement/Ext.Element} The new node or Element + */ + overwrite: function(el, values, returnElement) { + var newNode = Ext.DomHelper.overwrite(Ext.getDom(el), this.apply(values)); + return returnElement ? Ext.get(newNode) : newNode; + } +}); + +//@tag core +/** + * This class parses the XTemplate syntax and calls abstract methods to process the parts. + * @private + */ +Ext.define('Ext.XTemplateParser', { + constructor: function (config) { + Ext.apply(this, config); + }, + + /** + * @property {Number} level The 'for' or 'foreach' loop context level. This is adjusted + * up by one prior to calling {@link #doFor} or {@link #doForEach} and down by one after + * calling the corresponding {@link #doEnd} that closes the loop. This will be 1 on the + * first {@link #doFor} or {@link #doForEach} call. + */ + + /** + * This method is called to process a piece of raw text from the tpl. + * @param {String} text + * @method doText + */ + // doText: function (text) + + /** + * This method is called to process expressions (like `{[expr]}`). + * @param {String} expr The body of the expression (inside "{[" and "]}"). + * @method doExpr + */ + // doExpr: function (expr) + + /** + * This method is called to process simple tags (like `{tag}`). + * @method doTag + */ + // doTag: function (tag) + + /** + * This method is called to process ``. + * @method doElse + */ + // doElse: function () + + /** + * This method is called to process `{% text %}`. + * @param {String} text + * @method doEval + */ + // doEval: function (text) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doIf + */ + // doIf: function (action, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doElseIf + */ + // doElseIf: function (action, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doSwitch + */ + // doSwitch: function (action, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doCase + */ + // doCase: function (action, actions) + + /** + * This method is called to process ``. + * @method doDefault + */ + // doDefault: function () + + /** + * This method is called to process ``. It is given the action type that started + * the tpl and the set of additional actions. + * @param {String} type The type of action that is being ended. + * @param {Object} actions The other actions keyed by the attribute name (such as 'exec'). + * @method doEnd + */ + // doEnd: function (type, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doFor + */ + // doFor: function (action, actions) + + /** + * This method is called to process ``. If there are other + * attributes, these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name (such as 'exec'). + * @method doForEach + */ + // doForEach: function (action, actions) + + /** + * This method is called to process ``. If there are other attributes, + * these are passed in the actions object. + * @param {String} action + * @param {Object} actions Other actions keyed by the attribute name. + * @method doExec + */ + // doExec: function (action, actions) + + /** + * This method is called to process an empty ``. This is unlikely to need to be + * implemented, so a default (do nothing) version is provided. + * @method + */ + doTpl: Ext.emptyFn, + + parse: function (str) { + var me = this, + len = str.length, + aliases = { elseif: 'elif' }, + topRe = me.topRe, + actionsRe = me.actionsRe, + index, stack, s, m, t, prev, frame, subMatch, begin, end, actions, + prop; + + me.level = 0; + me.stack = stack = []; + + for (index = 0; index < len; index = end) { + topRe.lastIndex = index; + m = topRe.exec(str); + + if (!m) { + me.doText(str.substring(index, len)); + break; + } + + begin = m.index; + end = topRe.lastIndex; + + if (index < begin) { + me.doText(str.substring(index, begin)); + } + + if (m[1]) { + end = str.indexOf('%}', begin+2); + me.doEval(str.substring(begin+2, end)); + end += 2; + } else if (m[2]) { + end = str.indexOf(']}', begin+2); + me.doExpr(str.substring(begin+2, end)); + end += 2; + } else if (m[3]) { // if ('{' token) + me.doTag(m[3]); + } else if (m[4]) { // content of a tag + actions = null; + while ((subMatch = actionsRe.exec(m[4])) !== null) { + s = subMatch[2] || subMatch[3]; + if (s) { + s = Ext.String.htmlDecode(s); // decode attr value + t = subMatch[1]; + t = aliases[t] || t; + actions = actions || {}; + prev = actions[t]; + + if (typeof prev == 'string') { + actions[t] = [prev, s]; + } else if (prev) { + actions[t].push(s); + } else { + actions[t] = s; + } + } + } + + if (!actions) { + if (me.elseRe.test(m[4])) { + me.doElse(); + } else if (me.defaultRe.test(m[4])) { + me.doDefault(); + } else { + me.doTpl(); + stack.push({ type: 'tpl' }); + } + } + else if (actions['if']) { + me.doIf(actions['if'], actions); + stack.push({ type: 'if' }); + } + else if (actions['switch']) { + me.doSwitch(actions['switch'], actions); + stack.push({ type: 'switch' }); + } + else if (actions['case']) { + me.doCase(actions['case'], actions); + } + else if (actions['elif']) { + me.doElseIf(actions['elif'], actions); + } + else if (actions['for']) { + ++me.level; + + // Extract property name to use from indexed item + if (prop = me.propRe.exec(m[4])) { + actions.propName = prop[1] || prop[2]; + } + me.doFor(actions['for'], actions); + stack.push({ type: 'for', actions: actions }); + } + else if (actions['foreach']) { + ++me.level; + + // Extract property name to use from indexed item + if (prop = me.propRe.exec(m[4])) { + actions.propName = prop[1] || prop[2]; + } + me.doForEach(actions['foreach'], actions); + stack.push({ type: 'foreach', actions: actions }); + } + else if (actions.exec) { + me.doExec(actions.exec, actions); + stack.push({ type: 'exec', actions: actions }); + } + /* + else { + // todo - error + } + */ + } else if (m[0].length === 5) { + // if the length of m[0] is 5, assume that we're dealing with an opening tpl tag with no attributes (e.g. ...) + // in this case no action is needed other than pushing it on to the stack + stack.push({ type: 'tpl' }); + } else { + frame = stack.pop(); + me.doEnd(frame.type, frame.actions); + if (frame.type == 'for' || frame.type == 'foreach') { + --me.level; + } + } + } + }, + + // Internal regexes + + topRe: /(?:(\{\%)|(\{\[)|\{([^{}]+)\})|(?:]*)\>)|(?:<\/tpl>)/g, + actionsRe: /\s*(elif|elseif|if|for|foreach|exec|switch|case|eval|between)\s*\=\s*(?:(?:"([^"]*)")|(?:'([^']*)'))\s*/g, + propRe: /prop=(?:(?:"([^"]*)")|(?:'([^']*)'))/, + defaultRe: /^\s*default\s*$/, + elseRe: /^\s*else\s*$/ +}); + +//@tag core +/** + * This class compiles the XTemplate syntax into a function object. The function is used + * like so: + * + * function (out, values, parent, xindex, xcount) { + * // out is the output array to store results + * // values, parent, xindex and xcount have their historical meaning + * } + * + * @markdown + * @private + */ +Ext.define('Ext.XTemplateCompiler', { + extend: Ext.XTemplateParser , + + // Chrome really likes "new Function" to realize the code block (as in it is + // 2x-3x faster to call it than using eval), but Firefox chokes on it badly. + // IE and Opera are also fine with the "new Function" technique. + useEval: Ext.isGecko, + + // See http://jsperf.com/nige-array-append for quickest way to append to an array of unknown length + // (Due to arbitrary code execution inside a template, we cannot easily track the length in var) + // On IE6 to 8, myArray[myArray.length]='foo' is better. On other browsers myArray.push('foo') is better. + useIndex: Ext.isIE8m, + + useFormat: true, + + propNameRe: /^[\w\d\$]*$/, + + compile: function (tpl) { + var me = this, + code = me.generate(tpl); + + // When using "new Function", we have to pass our "Ext" variable to it in order to + // support sandboxing. If we did not, the generated function would use the global + // "Ext", not the "Ext" from our sandbox (scope chain). + // + return me.useEval ? me.evalTpl(code) : (new Function('Ext', code))(Ext); + }, + + generate: function (tpl) { + var me = this, + // note: Ext here is properly sandboxed + definitions = 'var fm=Ext.util.Format,ts=Object.prototype.toString;', + code; + + // Track how many levels we use, so that we only "var" each level's variables once + me.maxLevel = 0; + + me.body = [ + 'var c0=values, a0=' + me.createArrayTest(0) + ', p0=parent, n0=xcount, i0=xindex, k0, v;\n' + ]; + if (me.definitions) { + if (typeof me.definitions === 'string') { + me.definitions = [me.definitions, definitions ]; + } else { + me.definitions.push(definitions); + } + } else { + me.definitions = [ definitions ]; + } + me.switches = []; + + me.parse(tpl); + + me.definitions.push( + (me.useEval ? '$=' : 'return') + ' function (' + me.fnArgs + ') {', + me.body.join(''), + '}' + ); + + code = me.definitions.join('\n'); + + // Free up the arrays. + me.definitions.length = me.body.length = me.switches.length = 0; + delete me.definitions; + delete me.body; + delete me.switches; + + return code; + }, + + //----------------------------------- + // XTemplateParser callouts + + doText: function (text) { + var me = this, + out = me.body; + + text = text.replace(me.aposRe, "\\'").replace(me.newLineRe, '\\n'); + if (me.useIndex) { + out.push('out[out.length]=\'', text, '\'\n'); + } else { + out.push('out.push(\'', text, '\')\n'); + } + }, + + doExpr: function (expr) { + var out = this.body; + out.push('if ((v=' + expr + ') != null) out'); + + // Coerce value to string using concatenation of an empty string literal. + // See http://jsperf.com/tostringvscoercion/5 + if (this.useIndex) { + out.push('[out.length]=v+\'\'\n'); + } else { + out.push('.push(v+\'\')\n'); + } + }, + + doTag: function (tag) { + var expr = this.parseTag(tag); + if (expr) { + this.doExpr(expr); + } else { + // if we cannot match on tagRe handle as plain text + this.doText('{' + tag + '}'); + } + }, + + doElse: function () { + this.body.push('} else {\n'); + }, + + doEval: function (text) { + this.body.push(text, '\n'); + }, + + doIf: function (action, actions) { + var me = this; + + // If it's just a propName, use it directly in the if + if (action === '.') { + me.body.push('if (values) {\n'); + } else if (me.propNameRe.test(action)) { + me.body.push('if (', me.parseTag(action), ') {\n'); + } + // Otherwise, it must be an expression, and needs to be returned from an fn which uses with(values) + else { + me.body.push('if (', me.addFn(action), me.callFn, ') {\n'); + } + if (actions.exec) { + me.doExec(actions.exec); + } + }, + + doElseIf: function (action, actions) { + var me = this; + + // If it's just a propName, use it directly in the else if + if (action === '.') { + me.body.push('else if (values) {\n'); + } else if (me.propNameRe.test(action)) { + me.body.push('} else if (', me.parseTag(action), ') {\n'); + } + // Otherwise, it must be an expression, and needs to be returned from an fn which uses with(values) + else { + me.body.push('} else if (', me.addFn(action), me.callFn, ') {\n'); + } + if (actions.exec) { + me.doExec(actions.exec); + } + }, + + doSwitch: function (action) { + var me = this; + + // If it's just a propName, use it directly in the switch + if (action === '.') { + me.body.push('switch (values) {\n'); + } else if (me.propNameRe.test(action)) { + me.body.push('switch (', me.parseTag(action), ') {\n'); + } + // Otherwise, it must be an expression, and needs to be returned from an fn which uses with(values) + else { + me.body.push('switch (', me.addFn(action), me.callFn, ') {\n'); + } + me.switches.push(0); + }, + + doCase: function (action) { + var me = this, + cases = Ext.isArray(action) ? action : [action], + n = me.switches.length - 1, + match, i; + + if (me.switches[n]) { + me.body.push('break;\n'); + } else { + me.switches[n]++; + } + + for (i = 0, n = cases.length; i < n; ++i) { + match = me.intRe.exec(cases[i]); + cases[i] = match ? match[1] : ("'" + cases[i].replace(me.aposRe,"\\'") + "'"); + } + + me.body.push('case ', cases.join(': case '), ':\n'); + }, + + doDefault: function () { + var me = this, + n = me.switches.length - 1; + + if (me.switches[n]) { + me.body.push('break;\n'); + } else { + me.switches[n]++; + } + + me.body.push('default:\n'); + }, + + doEnd: function (type, actions) { + var me = this, + L = me.level-1; + + if (type == 'for' || type == 'foreach') { + /* + To exit a for or foreach loop we must restore the outer loop's context. The + code looks like this (which goes with that produced by doFor or doForEach): + + for (...) { // the part generated by doFor or doForEach + ... // the body of the for loop + + // ... any tpl for exec statement goes here... + } + parent = p1; + values = r2; + xcount = n1; + xindex = i1 + */ + if (actions.exec) { + me.doExec(actions.exec); + } + + me.body.push('}\n'); + me.body.push('parent=p',L,';values=r',L+1,';xcount=n'+L+';xindex=i',L,'+1;xkey=k',L,';\n'); + } else if (type == 'if' || type == 'switch') { + me.body.push('}\n'); + } + }, + + doFor: function (action, actions) { + var me = this, + s, + L = me.level, + up = L-1, + parentAssignment; + + // If it's just a propName, use it directly in the switch + if (action === '.') { + s = 'values'; + } else if (me.propNameRe.test(action)) { + s = me.parseTag(action); + } + // Otherwise, it must be an expression, and needs to be returned from an fn which uses with(values) + else { + s = me.addFn(action) + me.callFn; + } + + /* + We are trying to produce a block of code that looks like below. We use the nesting + level to uniquely name the control variables. + + // Omit "var " if we have already been through level 2 + var i2 = 0, + n2 = 0, + c2 = values['propName'], + // c2 is the context object for the for loop + a2 = Array.isArray(c2); + r2 = values, + // r2 is the values object + p2, // p2 is the parent context (of the outer for loop) + k2; // object key - not used by for loop but doEnd needs this to be declared + + // If iterating over the current data, the parent is always set to c2 + p2 = parent = c2; + // If iterating over a property in an object, set the parent to the object + p2 = parent = a1 ? c1[i1] : c1 // set parent + if (c2) { + if (a2) { + n2 = c2.length; + } else if (c2.isMixedCollection) { + c2 = c2.items; + n2 = c2.length; + } else if (c2.isStore) { + c2 = c2.data.items; + n2 = c2.length; + } else { + c2 = [ c2 ]; + n2 = 1; + } + } + // i2 is the loop index and n2 is the number (xcount) of this for loop + for (xcount = n2; i2 < n2; ++i2) { + values = c2[i2] // adjust special vars to inner scope + xindex = i2 + 1 // xindex is 1-based + + The body of the loop is whatever comes between the tpl and /tpl statements (which + is handled by doEnd). + */ + + // Declare the vars for a particular level only if we have not already declared them. + if (me.maxLevel < L) { + me.maxLevel = L; + me.body.push('var '); + } + + if (action == '.') { + parentAssignment = 'c' + L; + } else { + parentAssignment = 'a' + up + '?c' + up + '[i' + up + ']:c' + up; + } + + me.body.push('i',L,'=0,n', L, '=0,c',L,'=',s,',a',L,'=', me.createArrayTest(L),',r',L,'=values,p',L,',k',L,';\n', + 'p',L,'=parent=',parentAssignment,'\n', + 'if (c',L,'){if(a',L,'){n', L,'=c', L, '.length;}else if (c', L, '.isMixedCollection){c',L,'=c',L,'.items;n',L,'=c',L,'.length;}else if(c',L,'.isStore){c',L,'=c',L,'.data.items;n',L,'=c',L,'.length;}else{c',L,'=[c',L,'];n',L,'=1;}}\n', + 'for (xcount=n',L,';i',L,'1){ out.push("',actions.between,'"); } \n'); + } + }, + + doForEach: function (action, actions) { + var me = this, + s, + L = me.level, + up = L-1, + parentAssignment; + + // If it's just a propName, use it directly in the switch + if (action === '.') { + s = 'values'; + } else if (me.propNameRe.test(action)) { + s = me.parseTag(action); + } + // Otherwise, it must be an expression, and needs to be returned from an fn which uses with(values) + else { + s = me.addFn(action) + me.callFn; + } + + /* + We are trying to produce a block of code that looks like below. We use the nesting + level to uniquely name the control variables. + + // Omit "var " if we have already been through level 2 + var i2 = -1, + n2 = 0, + c2 = values['propName'], // c2 is the context object for the for loop + a2 = Array.isArray(c2); + r2 = values, // r2 is the values object + p2, // p2 is the parent context (of the outer for loop) + k2; // k2 is the object key while looping + + // If iterating over the current data, the parent is always set to c2 + p2 = parent = c2; + // If iterating over a property in an object, set the parent to the object + p2 = parent = a1 ? c1[i1] : c1 // set parent + + for(k2 in c2){ + xindex = ++i + 1; // xindex is 1-based + xkey = k2; + values = c2[k2]; // values is the property value + + + The body of the loop is whatever comes between the tpl and /tpl statements (which + is handled by doEnd). + */ + + // Declare the vars for a particular level only if we have not already declared them. + if (me.maxLevel < L) { + me.maxLevel = L; + me.body.push('var '); + } + + if (action == '.') { + parentAssignment = 'c' + L; + } else { + parentAssignment = 'a' + up + '?c' + up + '[i' + up + ']:c' + up; + } + + me.body.push('i',L,'=-1,n',L,'=0,c',L,'=',s,',a',L,'=',me.createArrayTest(L),',r',L,'=values,p',L,',k',L,';\n', + 'p',L,'=parent=',parentAssignment,'\n', + 'for(k',L,' in c',L,'){\n', + 'xindex=++i',L,'+1;\n', + 'xkey=k',L,';\n', + 'values=c',L,'[k',L,'];'); + if (actions.propName) { + me.body.push('.', actions.propName); + } + + if (actions.between) { + me.body.push('if(xindex>1){ out.push("',actions.between,'"); } \n'); + } + }, + + createArrayTest: ('isArray' in Array) ? function(L) { + return 'Array.isArray(c' + L + ')'; + } : function(L) { + return 'ts.call(c' + L + ')==="[object Array]"'; + }, + + doExec: function (action, actions) { + var me = this, + name = 'f' + me.definitions.length; + + me.definitions.push('function ' + name + '(' + me.fnArgs + ') {', + ' try { with(values) {', + ' ' + action, + ' }} catch(e) {', + 'Ext.log("XTemplate Error: " + e.message);', + '}', + '}'); + + me.body.push(name + me.callFn + '\n'); + }, + + //----------------------------------- + // Internal + + addFn: function (body) { + var me = this, + name = 'f' + me.definitions.length; + + if (body === '.') { + me.definitions.push('function ' + name + '(' + me.fnArgs + ') {', + ' return values', + '}'); + } else if (body === '..') { + me.definitions.push('function ' + name + '(' + me.fnArgs + ') {', + ' return parent', + '}'); + } else { + me.definitions.push('function ' + name + '(' + me.fnArgs + ') {', + ' try { with(values) {', + ' return(' + body + ')', + ' }} catch(e) {', + 'Ext.log("XTemplate Error: " + e.message);', + '}', + '}'); + } + + return name; + }, + + parseTag: function (tag) { + var me = this, + m = me.tagRe.exec(tag), + name, format, args, math, v; + + if (!m) { + return null; + } + + name = m[1]; + format = m[2]; + args = m[3]; + math = m[4]; + + // name = "." - Just use the values object. + if (name == '.') { + // filter to not include arrays/objects/nulls + if (!me.validTypes) { + me.definitions.push('var validTypes={string:1,number:1,boolean:1};'); + me.validTypes = true; + } + v = 'validTypes[typeof values] || ts.call(values) === "[object Date]" ? values : ""'; + } + // name = "#" - Use the xindex + else if (name == '#') { + v = 'xindex'; + } + // name = "$" - Use the xkey + else if (name == '$') { + v = 'xkey'; + } + else if (name.substr(0, 7) == "parent.") { + v = name; + } + // compound Javascript property name (e.g., "foo.bar") + else if (isNaN(name) && name.indexOf('-') == -1 && name.indexOf('.') != -1) { + v = "values." + name; + } + // number or a '-' in it or a single word (maybe a keyword): use array notation + // (http://jsperf.com/string-property-access/4) + else { + v = "values['" + name + "']"; + } + + if (math) { + v = '(' + v + math + ')'; + } + + if (format && me.useFormat) { + args = args ? ',' + args : ""; + if (format.substr(0, 5) != "this.") { + format = "fm." + format + '('; + } else { + format += '('; + } + } else { + return v; + } + + return format + v + args + ')'; + }, + + // @private + evalTpl: function ($) { + + // We have to use eval to realize the code block and capture the inner func we also + // don't want a deep scope chain. We only do this in Firefox and it is also unhappy + // with eval containing a return statement, so instead we assign to "$" and return + // that. Because we use "eval", we are automatically sandboxed properly. + eval($); + return $; + }, + + newLineRe: /\r\n|\r|\n/g, + aposRe: /[']/g, + intRe: /^\s*(\d+)\s*$/, + tagRe: /^([\w-\.\#\$]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\/]\s?[\d\.\+\-\*\/\(\)]+)?$/ + +}, function () { + var proto = this.prototype; + + proto.fnArgs = 'out,values,parent,xindex,xcount,xkey'; + proto.callFn = '.call(this,' + proto.fnArgs + ')'; +}); + +//@tag core +/** + * A template class that supports advanced functionality like: + * + * - Autofilling arrays using templates and sub-templates + * - Conditional processing with basic comparison operators + * - Basic math function support + * - Execute arbitrary inline code with special built-in template variables + * - Custom member functions + * - Many special tags and built-in operators that aren't defined as part of the API, but are supported in the templates that can be created + * + * XTemplate provides the templating mechanism built into {@link Ext.view.View}. + * + * The {@link Ext.Template} describes the acceptable parameters to pass to the constructor. The following examples + * demonstrate all of the supported features. + * + * # Sample Data + * + * This is the data object used for reference in each code example: + * + * var data = { + * name: 'Don Griffin', + * title: 'Senior Technomage', + * company: 'Sencha Inc.', + * drinks: ['Coffee', 'Water', 'More Coffee'], + * kids: [ + * { name: 'Aubrey', age: 17 }, + * { name: 'Joshua', age: 13 }, + * { name: 'Cale', age: 10 }, + * { name: 'Nikol', age: 5 }, + * { name: 'Solomon', age: 0 } + * ] + * }; + * + * # Auto filling of arrays + * + * The **tpl** tag and the **for** operator are used to process the provided data object: + * + * - If the value specified in for is an array, it will auto-fill, repeating the template block inside the tpl + * tag for each item in the array. + * - If for="." is specified, the data object provided is examined. + * - If between="..." is specified, the provided value will be inserted between the items. + * This is also supported in the "foreach" looping template. + * - While processing an array, the special variable {#} will provide the current array index + 1 (starts at 1, not 0). + * + * Examples: + * + * ... // loop through array at root node + * ... // loop through array at foo node + * ... // loop through array at foo.bar node + * ... // loop through array at root node and insert ',' between each item + * + * Using the sample data above: + * + * var tpl = new Ext.XTemplate( + * '

    Kids: ', + * '', // process the data.kids node + * '

    {#}. {name}

    ', // use current array index to autonumber + * '

    ' + * ); + * tpl.overwrite(panel.body, data.kids); // pass the kids property of the data object + * + * An example illustrating how the **for** property can be leveraged to access specified members of the provided data + * object to populate the template: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Title: {title}

    ', + * '

    Company: {company}

    ', + * '

    Kids: ', + * '', // interrogate the kids property within the data + * '

    {name}

    ', + * '

    ' + * ); + * tpl.overwrite(panel.body, data); // pass the root node of the data object + * + * Flat arrays that contain values (and not objects) can be auto-rendered using the special **`{.}`** variable inside a + * loop. This variable will represent the value of the array at the current index: + * + * var tpl = new Ext.XTemplate( + * '

    {name}\'s favorite beverages:

    ', + * '', + * '
    - {.}
    ', + * '
    ' + * ); + * tpl.overwrite(panel.body, data); + * + * When processing a sub-template, for example while looping through a child array, you can access the parent object's + * members via the **parent** object: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '', + * '

    {name}

    ', + * '

    Dad: {parent.name}

    ', + * '
    ', + * '

    ' + * ); + * tpl.overwrite(panel.body, data); + * + * The **foreach** operator is used to loop over an object's properties. The following + * example demonstrates looping over the main data object's properties: + * + * var tpl = new Ext.XTemplate( + * '
    ', + * '', + * '
    {$}
    ', // the special **`{$}`** variable contains the property name + * '
    {.}
    ', // within the loop, the **`{.}`** variable is set to the property value + * '
    ', + * '
    ' + * ); + * tpl.overwrite(panel.body, data); + * + * # Conditional processing with basic comparison operators + * + * The **tpl** tag and the **if** operator are used to provide conditional checks for deciding whether or not to render + * specific parts of the template. + * + * Using the sample data above: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '', + * '

    {name}

    ', + * '
    ', + * '

    ' + * ); + * tpl.overwrite(panel.body, data); + * + * More advanced conditionals are also supported: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '

    {name} is a ', + * '', + * '

    teenager

    ', + * '', + * '

    kid

    ', + * '', + * '

    baby

    ', + * '
    ', + * '

    ' + * ); + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '

    {name} is a ', + * '', + * '', + * '

    girl

    ', + * '', + * '

    boy

    ', + * '
    ', + * '

    ' + * ); + * + * A `break` is implied between each case and default, however, multiple cases can be listed + * in a single <tpl> tag. + * + * # Using double quotes + * + * Examples: + * + * var tpl = new Ext.XTemplate( + * "Child", + * "Teenager", + * "...", + * '...', + * "", + * "Hello" + * ); + * + * # Basic math support + * + * The following basic math operators may be applied directly on numeric data values: + * + * + - * / + * + * For example: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '', // <-- Note that the > is encoded + * '

    {#}: {name}

    ', // <-- Auto-number each item + * '

    In 5 Years: {age+5}

    ', // <-- Basic math + * '

    Dad: {parent.name}

    ', + * '
    ', + * '

    ' + * ); + * tpl.overwrite(panel.body, data); + * + * # Execute arbitrary inline code with special built-in template variables + * + * Anything between `{[ ... ]}` is considered code to be executed in the scope of the template. + * The expression is evaluated and the result is included in the generated result. There are + * some special variables available in that code: + * + * - **out**: The output array into which the template is being appended (using `push` to later + * `join`). + * - **values**: The values in the current scope. If you are using scope changing sub-templates, + * you can change what values is. + * - **parent**: The scope (values) of the ancestor template. + * - **xindex**: If you are in a "for" or "foreach" looping template, the index of the loop you are in (1-based). + * - **xcount**: If you are in a "for" looping template, the total length of the array you are looping. + * - **xkey**: If you are in a "foreach" looping template, the key of the current property + * being examined. + * + * This example demonstrates basic row striping using an inline code block and the xindex variable: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Company: {[values.company.toUpperCase() + ", " + values.title]}

    ', + * '

    Kids: ', + * '', + * '

    ', + * '{name}', + * '
    ', + * '

    ' + * ); + * + * Any code contained in "verbatim" blocks (using "{% ... %}") will be inserted directly in + * the generated code for the template. These blocks are not included in the output. This + * can be used for simple things like break/continue in a loop, or control structures or + * method calls (when they don't produce output). The `this` references the template instance. + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Company: {[values.company.toUpperCase() + ", " + values.title]}

    ', + * '

    Kids: ', + * '', + * '{% if (xindex % 2 === 0) continue; %}', + * '{name}', + * '{% if (xindex > 100) break; %}', + * '', + * '

    ' + * ); + * + * # Template member functions + * + * One or more member functions can be specified in a configuration object passed into the XTemplate constructor for + * more complex processing: + * + * var tpl = new Ext.XTemplate( + * '

    Name: {name}

    ', + * '

    Kids: ', + * '', + * '', + * '

    Girl: {name} - {age}

    ', + * '', + * '

    Boy: {name} - {age}

    ', + * '
    ', + * '', + * '

    {name} is a baby!

    ', + * '
    ', + * '

    ', + * { + * // XTemplate configuration: + * disableFormats: true, + * // member functions: + * isGirl: function(name){ + * return name == 'Aubrey' || name == 'Nikol'; + * }, + * isBaby: function(age){ + * return age < 1; + * } + * } + * ); + * tpl.overwrite(panel.body, data); + */ +Ext.define('Ext.XTemplate', { + extend: Ext.Template , + + + + /** + * @private + */ + emptyObj: {}, + + /** + * @cfg {Boolean} compiled + * Only applies to {@link Ext.Template}, XTemplates are compiled automatically on the + * first call to {@link #apply} or {@link #applyOut}. + * @hide + */ + + /** + * @cfg {String/Array} definitions + * Optional. A statement, or array of statements which set up `var`s which may then + * be accessed within the scope of the generated function. + */ + + apply: function(values, parent) { + return this.applyOut(values, [], parent).join(''); + }, + + applyOut: function(values, out, parent) { + var me = this, + compiler; + + if (!me.fn) { + compiler = new Ext.XTemplateCompiler({ + useFormat: me.disableFormats !== true, + definitions: me.definitions + }); + + me.fn = compiler.compile(me.html); + } + + try { + me.fn(out, values, parent || me.emptyObj, 1, 1); + } catch (e) { + Ext.log('Error: ' + e.message); + } + + return out; + }, + + /** + * Does nothing. XTemplates are compiled automatically, so this function simply returns this. + * @return {Ext.XTemplate} this + */ + compile: function() { + return this; + }, + + statics: { + /** + * Gets an `XTemplate` from an object (an instance of an {@link Ext#define}'d class). + * Many times, templates are configured high in the class hierarchy and are to be + * shared by all classes that derive from that base. To further complicate matters, + * these templates are seldom actual instances but are rather configurations. For + * example: + * + * Ext.define('MyApp.Class', { + * extraCls: 'extra-class', + * + * someTpl: [ + * '
    ', + * { + * // Member fn - outputs the owing class's extra CSS class + * emitClass: function(out) { + * out.push(this.owner.extraCls); + * } + * }] + * }); + * + * The goal being to share that template definition with all instances and even + * instances of derived classes, until `someTpl` is overridden. This method will + * "upgrade" these configurations to be real `XTemplate` instances *in place* (to + * avoid creating one instance per object). + * + * The resulting XTemplate will have an `owner` reference injected which refers back + * to the owning object whether that is an object which has an *own instance*, or a + * class prototype. Through this link, XTemplate member functions will be able to access + * prototype properties of its owning class. + * + * @param {Object} instance The object from which to get the `XTemplate` (must be + * an instance of an {@link Ext#define}'d class). + * @param {String} name The name of the property by which to get the `XTemplate`. + * @return {Ext.XTemplate} The `XTemplate` instance or null if not found. + * @protected + * @static + */ + getTpl: function (instance, name) { + var tpl = instance[name], // go for it! 99% of the time we will get it! + owner; + + if (tpl && !tpl.isTemplate) { // tpl is just a configuration (not an instance) + // create the template instance from the configuration: + tpl = Ext.ClassManager.dynInstantiate('Ext.XTemplate', tpl); + + // and replace the reference with the new instance: + if (instance.hasOwnProperty(name)) { // the tpl is on the instance + owner = instance; + } else { // must be somewhere in the prototype chain + for (owner = instance.self.prototype; owner && !owner.hasOwnProperty(name); owner = owner.superclass) { + } + } + owner[name] = tpl; + tpl.owner = owner; + } + // else !tpl (no such tpl) or the tpl is an instance already... either way, tpl + // is ready to return + + return tpl || null; + } + } +}); + +//@tag dom,core +//@require Helper.js +//@define Ext.dom.Query +//@define Ext.core.Query +//@define Ext.DomQuery + +/* + * This is code is also distributed under MIT license for use + * with jQuery and prototype JavaScript libraries. + */ +/** + * @class Ext.dom.Query + * @alternateClassName Ext.DomQuery + * @alternateClassName Ext.core.DomQuery + * @singleton + * + * Provides high performance selector/xpath processing by compiling queries into reusable functions. New pseudo classes + * and matchers can be plugged. It works on HTML and XML documents (if a content node is passed in). + * + * DomQuery supports most of the [CSS3 selectors spec][1], along with some custom selectors and basic XPath. + * + * All selectors, attribute filters and pseudos below can be combined infinitely in any order. For example + * `div.foo:nth-child(odd)[@foo=bar].bar:first` would be a perfectly valid selector. Node filters are processed + * in the order in which they appear, which allows you to optimize your queries for your document structure. + * + * ## Element Selectors: + * + * - **`*`** any element + * - **`E`** an element with the tag E + * - **`E F`** All descendent elements of E that have the tag F + * - **`E > F`** or **E/F** all direct children elements of E that have the tag F + * - **`E + F`** all elements with the tag F that are immediately preceded by an element with the tag E + * - **`E ~ F`** all elements with the tag F that are preceded by a sibling element with the tag E + * + * ## Attribute Selectors: + * + * The use of `@` and quotes are optional. For example, `div[@foo='bar']` is also a valid attribute selector. + * + * - **`E[foo]`** has an attribute "foo" + * - **`E[foo=bar]`** has an attribute "foo" that equals "bar" + * - **`E[foo^=bar]`** has an attribute "foo" that starts with "bar" + * - **`E[foo$=bar]`** has an attribute "foo" that ends with "bar" + * - **`E[foo*=bar]`** has an attribute "foo" that contains the substring "bar" + * - **`E[foo%=2]`** has an attribute "foo" that is evenly divisible by 2 + * - **`E[foo!=bar]`** attribute "foo" does not equal "bar" + * + * ## Pseudo Classes: + * + * - **`E:first-child`** E is the first child of its parent + * - **`E:last-child`** E is the last child of its parent + * - **`E:nth-child(_n_)`** E is the _n_th child of its parent (1 based as per the spec) + * - **`E:nth-child(odd)`** E is an odd child of its parent + * - **`E:nth-child(even)`** E is an even child of its parent + * - **`E:only-child`** E is the only child of its parent + * - **`E:checked`** E is an element that is has a checked attribute that is true (e.g. a radio or checkbox) + * - **`E:first`** the first E in the resultset + * - **`E:last`** the last E in the resultset + * - **`E:nth(_n_)`** the _n_th E in the resultset (1 based) + * - **`E:odd`** shortcut for :nth-child(odd) + * - **`E:even`** shortcut for :nth-child(even) + * - **`E:contains(foo)`** E's innerHTML contains the substring "foo" + * - **`E:nodeValue(foo)`** E contains a textNode with a nodeValue that equals "foo" + * - **`E:not(S)`** an E element that does not match simple selector S + * - **`E:has(S)`** an E element that has a descendent that matches simple selector S + * - **`E:next(S)`** an E element whose next sibling matches simple selector S + * - **`E:prev(S)`** an E element whose previous sibling matches simple selector S + * - **`E:any(S1|S2|S2)`** an E element which matches any of the simple selectors S1, S2 or S3 + * - **`E:visible(true)`** an E element which is deeply visible according to {@link Ext.dom.Element#isVisible} + * + * ## CSS Value Selectors: + * + * - **`E{display=none}`** css value "display" that equals "none" + * - **`E{display^=none}`** css value "display" that starts with "none" + * - **`E{display$=none}`** css value "display" that ends with "none" + * - **`E{display*=none}`** css value "display" that contains the substring "none" + * - **`E{display%=2}`** css value "display" that is evenly divisible by 2 + * - **`E{display!=none}`** css value "display" that does not equal "none" + * + * ## XML Namespaces: + * - **`ns|E`** an element with tag E and namespace prefix ns + * + * [1]: http://www.w3.org/TR/2005/WD-css3-selectors-20051215/#selectors + */ +Ext.ns('Ext.core'); + +Ext.dom.Query = Ext.core.DomQuery = Ext.DomQuery = (function() { + var DQ, + doc = document, + cache = {}, + simpleCache = {}, + valueCache = {}, + useClassList = !!doc.documentElement.classList, + useElementPointer = !!doc.documentElement.firstElementChild, + useChildrenCollection = (function() { + var d = doc.createElement('div'); + d.innerHTML = 'text'; + return d.children && (d.children.length === 0); + })(), + nonSpace = /\S/, + trimRe = /^\s+|\s+$/g, + tplRe = /\{(\d+)\}/g, + modeRe = /^(\s?[\/>+~]\s?|\s|$)/, + tagTokenRe = /^(#)?([\w\-\*\|\\]+)/, + nthRe = /(\d*)n\+?(\d*)/, + nthRe2 = /\D/, + startIdRe = /^\s*#/, + // This is for IE MSXML which does not support expandos. + // IE runs the same speed using setAttribute, however FF slows way down + // and Safari completely fails so they need to continue to use expandos. + isIE = window.ActiveXObject ? true : false, + key = 30803, + longHex = /\\([0-9a-fA-F]{6})/g, + shortHex = /\\([0-9a-fA-F]{1,6})\s{0,1}/g, + nonHex = /\\([^0-9a-fA-F]{1})/g, + escapes = /\\/g, + num, hasEscapes, + // True if the browser supports the following syntax: + // document.getElementsByTagName('namespacePrefix:tagName') + supportsColonNsSeparator = (function () { + var xmlDoc, + xmlString = ''; + + if (window.DOMParser) { + xmlDoc = (new DOMParser()).parseFromString(xmlString, "application/xml"); + } else { + xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.loadXML(xmlString); + } + + return !!xmlDoc.getElementsByTagName('a:b').length; + })(), + + // replaces a long hex regex match group with the appropriate ascii value + // $args indicate regex match pos + longHexToChar = function($0, $1) { + return String.fromCharCode(parseInt($1, 16)); + }, + + // converts a shortHex regex match to the long form + shortToLongHex = function($0, $1) { + while ($1.length < 6) { + $1 = '0' + $1; + } + return '\\' + $1; + }, + + // converts a single char escape to long escape form + charToLongHex = function($0, $1) { + num = $1.charCodeAt(0).toString(16); + if (num.length === 1) { + num = '0' + num; + } + return '\\0000' + num; + }, + + // Un-escapes an input selector string. Assumes all escape sequences have been + // normalized to the css '\\0000##' 6-hex-digit style escape sequence : + // will not handle any other escape formats + unescapeCssSelector = function(selector) { + return (hasEscapes) + ? selector.replace(longHex, longHexToChar) + : selector; + }, + + // checks if the path has escaping & does any appropriate replacements + setupEscapes = function(path) { + hasEscapes = (path.indexOf('\\') > -1); + if (hasEscapes) { + path = path + .replace(shortHex, shortToLongHex) + .replace(nonHex, charToLongHex) + .replace(escapes, '\\\\'); // double the '\' for js compilation + } + return path; + }; + + // this eval is stop the compressor from + // renaming the variable to something shorter + eval("var batch = 30803, child, next, prev, byClassName;"); + + // Retrieve the child node from a particular + // parent at the specified index. + child = useChildrenCollection ? + function child(parent, index) { + return parent.children[index] + } : + function child(parent, index) { + var i = 0, + n = parent.firstChild; + while (n) { + if (n.nodeType == 1) { + if (++i == index) { + return n; + } + } + n = n.nextSibling; + } + return null; + }; + + // retrieve the next element node + next = useElementPointer ? + function(n) { + return n.nextElementSibling; + } : + function(n) { + while ((n = n.nextSibling) && n.nodeType != 1); + return n; + }; + + // retrieve the previous element node + prev = useElementPointer ? + function(n) { + return n.previousElementSibling; + } : + function(n) { + while ((n = n.previousSibling) && n.nodeType != 1); + return n; + }; + + // Mark each child node with a nodeIndex skipping and + // removing empty text nodes. + function children(parent) { + var n = parent.firstChild, + nodeIndex = -1, + nextNode; + + while (n) { + nextNode = n.nextSibling; + // clean worthless empty nodes. + if (n.nodeType == 3 && !nonSpace.test(n.nodeValue)) { + parent.removeChild(n); + } else { + // add an expando nodeIndex + n.nodeIndex = ++nodeIndex; + } + n = nextNode; + } + return this; + } + + // nodeSet - array of nodes + // cls - CSS Class + byClassName = useClassList ? // Use classList API where available: http://jsperf.com/classlist-vs-old-school-check/ + function (nodeSet, cls) { + cls = unescapeCssSelector(cls); + if (!cls) { + return nodeSet; + } + var result = [], ri = -1, + i, ci, classList; + + for (i = 0; ci = nodeSet[i]; i++) { + classList = ci.classList; + if (classList) { + if (classList.contains(cls)) { + result[++ri] = ci; + } + } else if ((' ' + ci.className + ' ').indexOf(cls) !== -1) { + // Some elements types (SVG) may not always have a classList + // in some browsers, so fallback to the old style here + result[++ri] = ci; + } + } + return result; + } : + function (nodeSet, cls) { + cls = unescapeCssSelector(cls); + if (!cls) { + return nodeSet; + } + var result = [], ri = -1, + i, ci; + + for (i = 0; ci = nodeSet[i]; i++) { + if ((' ' + ci.className + ' ').indexOf(cls) !== -1) { + result[++ri] = ci; + } + } + return result; + }; + + function attrValue(n, attr) { + // if its an array, use the first node. + if (!n.tagName && typeof n.length != "undefined") { + n = n[0]; + } + if (!n) { + return null; + } + + if (attr == "for") { + return n.htmlFor; + } + if (attr == "class" || attr == "className") { + return n.className; + } + return n.getAttribute(attr) || n[attr]; + + } + + // ns - nodes + // mode - false, /, >, +, ~ + // tagName - defaults to "*" + function getNodes(ns, mode, tagName) { + var result = [], ri = -1, cs, + i, ni, j, ci, cn, utag, n, cj; + if (!ns) { + return result; + } + tagName = tagName.replace('|', ':') || "*"; + // convert to array + if (typeof ns.getElementsByTagName != "undefined") { + ns = [ns]; + } + + // no mode specified, grab all elements by tagName + // at any depth + if (!mode) { + tagName = unescapeCssSelector(tagName); + if (!supportsColonNsSeparator && DQ.isXml(ns[0]) && + tagName.indexOf(':') !== -1) { + // Some browsers (e.g. WebKit and Opera do not support the following syntax + // in xml documents: getElementsByTagName('ns:tagName'). To work around + // this, we remove the namespace prefix from the tagName, get the elements + // by tag name only, and then compare each element's tagName property to + // the tagName with namespace prefix attached to ensure that the tag is in + // the proper namespace. + for (i = 0; ni = ns[i]; i++) { + cs = ni.getElementsByTagName(tagName.split(':').pop()); + for (j = 0; ci = cs[j]; j++) { + if (ci.tagName === tagName) { + result[++ri] = ci; + } + } + } + } else { + for (i = 0; ni = ns[i]; i++) { + cs = ni.getElementsByTagName(tagName); + for (j = 0; ci = cs[j]; j++) { + result[++ri] = ci; + } + } + } + // Direct Child mode (/ or >) + // E > F or E/F all direct children elements of E that have the tag + } else if (mode == "/" || mode == ">") { + utag = tagName.toUpperCase(); + for (i = 0; ni = ns[i]; i++) { + cn = ni.childNodes; + for (j = 0; cj = cn[j]; j++) { + if (cj.nodeName == utag || cj.nodeName == tagName || tagName == '*') { + result[++ri] = cj; + } + } + } + // Immediately Preceding mode (+) + // E + F all elements with the tag F that are immediately preceded by an element with the tag E + } else if (mode == "+") { + utag = tagName.toUpperCase(); + for (i = 0; n = ns[i]; i++) { + while ((n = n.nextSibling) && n.nodeType != 1); + if (n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')) { + result[++ri] = n; + } + } + // Sibling mode (~) + // E ~ F all elements with the tag F that are preceded by a sibling element with the tag E + } else if (mode == "~") { + utag = tagName.toUpperCase(); + for (i = 0; n = ns[i]; i++) { + while ((n = n.nextSibling)) { + if (n.nodeName == utag || n.nodeName == tagName || tagName == '*') { + result[++ri] = n; + } + } + } + } + return result; + } + + function concat(a, b) { + a.push.apply(a, b); + return a; + } + + function byTag(cs, tagName) { + if (cs.tagName || cs === doc) { + cs = [cs]; + } + if (!tagName) { + return cs; + } + var result = [], ri = -1, + i, ci; + tagName = tagName.toLowerCase(); + for (i = 0; ci = cs[i]; i++) { + if (ci.nodeType == 1 && ci.tagName.toLowerCase() == tagName) { + result[++ri] = ci; + } + } + return result; + } + + function byId(cs, id) { + id = unescapeCssSelector(id); + if (cs.tagName || cs === doc) { + cs = [cs]; + } + if (!id) { + return cs; + } + var result = [], ri = -1, + i, ci; + for (i = 0; ci = cs[i]; i++) { + if (ci && ci.id == id) { + result[++ri] = ci; + return result; + } + } + return result; + } + + // operators are =, !=, ^=, $=, *=, %=, |= and ~= + // custom can be "{" + function byAttribute(cs, attr, value, op, custom) { + var result = [], + ri = -1, + useGetStyle = custom == "{", + fn = DQ.operators[op], + a, + xml, + hasXml, + i, ci; + + value = unescapeCssSelector(value); + + for (i = 0; ci = cs[i]; i++) { + // skip non-element nodes. + if (ci.nodeType === 1) { + // only need to do this for the first node + if (!hasXml) { + xml = DQ.isXml(ci); + hasXml = true; + } + + // we only need to change the property names if we're dealing with html nodes, not XML + if (!xml) { + if (useGetStyle) { + a = DQ.getStyle(ci, attr); + } else if (attr == "class" || attr == "className") { + a = ci.className; + } else if (attr == "for") { + a = ci.htmlFor; + } else if (attr == "href") { + // getAttribute href bug + // http://www.glennjones.net/Post/809/getAttributehrefbug.htm + a = ci.getAttribute("href", 2); + } else { + a = ci.getAttribute(attr); + } + } else { + a = ci.getAttribute(attr); + } + if ((fn && fn(a, value)) || (!fn && a)) { + result[++ri] = ci; + } + } + } + return result; + } + + function byPseudo(cs, name, value) { + value = unescapeCssSelector(value); + return DQ.pseudos[name](cs, value); + } + + function nodupIEXml(cs) { + var d = ++key, + r, + i, len, c; + cs[0].setAttribute("_nodup", d); + r = [cs[0]]; + for (i = 1, len = cs.length; i < len; i++) { + c = cs[i]; + if (!c.getAttribute("_nodup") != d) { + c.setAttribute("_nodup", d); + r[r.length] = c; + } + } + for (i = 0, len = cs.length; i < len; i++) { + cs[i].removeAttribute("_nodup"); + } + return r; + } + + function nodup(cs) { + if (!cs) { + return []; + } + var len = cs.length, c, i, r = cs, cj, ri = -1, d, j; + if (!len || typeof cs.nodeType != "undefined" || len == 1) { + return cs; + } + if (isIE && typeof cs[0].selectSingleNode != "undefined") { + return nodupIEXml(cs); + } + d = ++key; + cs[0]._nodup = d; + for (i = 1; c = cs[i]; i++) { + if (c._nodup != d) { + c._nodup = d; + } else { + r = []; + for (j = 0; j < i; j++) { + r[++ri] = cs[j]; + } + for (j = i + 1; cj = cs[j]; j++) { + if (cj._nodup != d) { + cj._nodup = d; + r[++ri] = cj; + } + } + return r; + } + } + return r; + } + + function quickDiffIEXml(c1, c2) { + var d = ++key, + r = [], + i, len; + for (i = 0, len = c1.length; i < len; i++) { + c1[i].setAttribute("_qdiff", d); + } + for (i = 0, len = c2.length; i < len; i++) { + if (c2[i].getAttribute("_qdiff") != d) { + r[r.length] = c2[i]; + } + } + for (i = 0, len = c1.length; i < len; i++) { + c1[i].removeAttribute("_qdiff"); + } + return r; + } + + function quickDiff(c1, c2) { + var len1 = c1.length, + d = ++key, + r = [], + i, len; + if (!len1) { + return c2; + } + if (isIE && typeof c1[0].selectSingleNode != "undefined") { + return quickDiffIEXml(c1, c2); + } + for (i = 0; i < len1; i++) { + c1[i]._qdiff = d; + } + for (i = 0, len = c2.length; i < len; i++) { + if (c2[i]._qdiff != d) { + r[r.length] = c2[i]; + } + } + return r; + } + + function quickId(ns, mode, root, id) { + if (ns == root) { + id = unescapeCssSelector(id); + var d = root.ownerDocument || root; + return d.getElementById(id); + } + ns = getNodes(ns, mode, "*"); + return byId(ns, id); + } + + return DQ = { + getStyle: function(el, name) { + return Ext.fly(el, '_DomQuery').getStyle(name); + }, + /** + * Compiles a selector/xpath query into a reusable function. The returned function + * takes one parameter "root" (optional), which is the context node from where the query should start. + * @param {String} selector The selector/xpath query + * @param {String} [type="select"] Either "select" or "simple" for a simple selector match + * @return {Function} + */ + compile: function(path, type) { + type = type || "select"; + + // setup fn preamble + var fn = ["var f = function(root) {\n var mode; ++batch; var n = root || document;\n"], + lastPath, + matchers = DQ.matchers, + matchersLn = matchers.length, + modeMatch, + // accept leading mode switch + lmode = path.match(modeRe), + tokenMatch, matched, j, t, m; + + path = setupEscapes(path); + + if (lmode && lmode[1]) { + fn[fn.length] = 'mode="' + lmode[1].replace(trimRe, "") + '";'; + path = path.replace(lmode[1], ""); + } + + // strip leading slashes + while (path.substr(0, 1) == "/") { + path = path.substr(1); + } + + while (path && lastPath != path) { + lastPath = path; + tokenMatch = path.match(tagTokenRe); + if (type == "select") { + if (tokenMatch) { + // ID Selector + if (tokenMatch[1] == "#") { + fn[fn.length] = 'n = quickId(n, mode, root, "' + tokenMatch[2] + '");'; + } else { + fn[fn.length] = 'n = getNodes(n, mode, "' + tokenMatch[2] + '");'; + } + path = path.replace(tokenMatch[0], ""); + } else if (path.substr(0, 1) != '@') { + fn[fn.length] = 'n = getNodes(n, mode, "*");'; + } + // type of "simple" + } else { + if (tokenMatch) { + if (tokenMatch[1] == "#") { + fn[fn.length] = 'n = byId(n, "' + tokenMatch[2] + '");'; + } else { + fn[fn.length] = 'n = byTag(n, "' + tokenMatch[2] + '");'; + } + path = path.replace(tokenMatch[0], ""); + } + } + while (!(modeMatch = path.match(modeRe))) { + matched = false; + for (j = 0; j < matchersLn; j++) { + t = matchers[j]; + m = path.match(t.re); + if (m) { + fn[fn.length] = t.select.replace(tplRe, function(x, i) { + return m[i]; + }); + path = path.replace(m[0], ""); + matched = true; + break; + } + } + // prevent infinite loop on bad selector + if (!matched) { + Ext.Error.raise({ + sourceClass:'Ext.DomQuery', + sourceMethod:'compile', + msg:'Error parsing selector. Parsing failed at "' + path + '"' + }); + } + } + if (modeMatch[1]) { + fn[fn.length] = 'mode="' + modeMatch[1].replace(trimRe, "") + '";'; + path = path.replace(modeMatch[1], ""); + } + } + // close fn out + fn[fn.length] = "return nodup(n);\n}"; + + // eval fn and return it + eval(fn.join("")); + return f; + }, + + /** + * Selects an array of DOM nodes using JavaScript-only implementation. + * + * Use {@link #select} to take advantage of browsers built-in support for CSS selectors. + * @param {String} selector The selector/xpath query (can be a comma separated list of selectors) + * @param {HTMLElement/String} [root=document] The start of the query. + * @return {HTMLElement[]} An Array of DOM elements which match the selector. If there are + * no matches, and empty Array is returned. + */ + jsSelect: function(path, root, type) { + // set root to doc if not specified. + root = root || doc; + + if (typeof root == "string") { + root = doc.getElementById(root); + } + var paths = path.split(","), + results = [], + i, len, subPath, result; + + // loop over each selector + for (i = 0, len = paths.length; i < len; i++) { + subPath = paths[i].replace(trimRe, ""); + // compile and place in cache + if (!cache[subPath]) { + // When we compile, escaping is handled inside the compile method + cache[subPath] = DQ.compile(subPath, type); + if (!cache[subPath]) { + Ext.Error.raise({ + sourceClass:'Ext.DomQuery', + sourceMethod:'jsSelect', + msg:subPath + ' is not a valid selector' + }); + } + } else { + // If we've already compiled, we still need to check if the + // selector has escaping and setup the appropriate flags + setupEscapes(subPath); + } + result = cache[subPath](root); + if (result && result !== doc) { + results = results.concat(result); + } + } + + // if there were multiple selectors, make sure dups + // are eliminated + if (paths.length > 1) { + return nodup(results); + } + return results; + }, + + isXml: function(el) { + var docEl = (el ? el.ownerDocument || el : 0).documentElement; + return docEl ? docEl.nodeName !== "HTML" : false; + }, + + /** + * Selects an array of DOM nodes by CSS/XPath selector. + * + * Uses [document.querySelectorAll][0] if browser supports that, otherwise falls back to + * {@link Ext.dom.Query#jsSelect} to do the work. + * + * Aliased as {@link Ext#query}. + * + * [0]: https://developer.mozilla.org/en/DOM/document.querySelectorAll + * + * @param {String} path The selector/xpath query + * @param {HTMLElement} [root=document] The start of the query. + * @return {HTMLElement[]} An array of DOM elements (not a NodeList as returned by `querySelectorAll`). + * @param {String} [type="select"] Either "select" or "simple" for a simple selector match (only valid when + * used when the call is deferred to the jsSelect method) + * @param {Boolean} [single] Pass `true` to select only the first matching node using `document.querySelector` (where available) + * @method + */ + select : doc.querySelectorAll ? function(path, root, type, single) { + root = root || doc; + if (!DQ.isXml(root)) { + try { + /* + * This checking here is to "fix" the behaviour of querySelectorAll + * for non root document queries. The way qsa works is intentional, + * however it's definitely not the expected way it should work. + * When descendant selectors are used, only the lowest selector must be inside the root! + * More info: http://ejohn.org/blog/thoughts-on-queryselectorall/ + * So we create a descendant selector by prepending the root's ID, and query the parent node. + * UNLESS the root has no parent in which qsa will work perfectly. + * + * We only modify the path for single selectors (ie, no multiples), + * without a full parser it makes it difficult to do this correctly. + */ + if (root.parentNode && (root.nodeType !== 9) && path.indexOf(',') === -1 && !startIdRe.test(path)) { + path = '#' + Ext.escapeId(Ext.id(root)) + ' ' + path; + root = root.parentNode; + } + return single ? [ root.querySelector(path) ] + : Ext.Array.toArray(root.querySelectorAll(path)); + } + catch (e) { + } + } + return DQ.jsSelect.call(this, path, root, type); + } : function(path, root, type) { + return DQ.jsSelect.call(this, path, root, type); + }, + + /** + * Selects a single element. + * @param {String} selector The selector/xpath query + * @param {HTMLElement} [root=document] The start of the query. + * @return {HTMLElement} The DOM element which matched the selector. + */ + selectNode : function(path, root){ + return Ext.DomQuery.select(path, root, null, true)[0]; + }, + + /** + * Selects the value of a node, optionally replacing null with the defaultValue. + * @param {String} selector The selector/xpath query + * @param {HTMLElement} [root=document] The start of the query. + * @param {String} [defaultValue] When specified, this is return as empty value. + * @return {String} + */ + selectValue: function(path, root, defaultValue) { + path = path.replace(trimRe, ""); + if (!valueCache[path]) { + valueCache[path] = DQ.compile(path, "select"); + } else { + setupEscapes(path); + } + + var n = valueCache[path](root), + v; + + n = n[0] ? n[0] : n; + + // overcome a limitation of maximum textnode size + // Rumored to potentially crash IE6 but has not been confirmed. + // http://reference.sitepoint.com/javascript/Node/normalize + // https://developer.mozilla.org/En/DOM/Node.normalize + if (typeof n.normalize == 'function') { + n.normalize(); + } + + v = (n && n.firstChild ? n.firstChild.nodeValue : null); + return ((v === null || v === undefined || v === '') ? defaultValue : v); + }, + + /** + * Selects the value of a node, parsing integers and floats. + * Returns the defaultValue, or 0 if none is specified. + * @param {String} selector The selector/xpath query + * @param {HTMLElement} [root=document] The start of the query. + * @param {Number} [defaultValue] When specified, this is return as empty value. + * @return {Number} + */ + selectNumber: function(path, root, defaultValue) { + var v = DQ.selectValue(path, root, defaultValue || 0); + return parseFloat(v); + }, + + /** + * Returns true if the passed element(s) match the passed simple selector + * (e.g. `div.some-class` or `span:first-child`) + * @param {String/HTMLElement/HTMLElement[]} el An element id, element or array of elements + * @param {String} selector The simple selector to test + * @return {Boolean} + */ + is: function(el, ss) { + if (typeof el == "string") { + el = doc.getElementById(el); + } + var isArray = Ext.isArray(el), + result = DQ.filter(isArray ? el : [el], ss); + return isArray ? (result.length == el.length) : (result.length > 0); + }, + + /** + * Filters an array of elements to only include matches of a simple selector + * (e.g. `div.some-class` or `span:first-child`) + * @param {HTMLElement[]} el An array of elements to filter + * @param {String} selector The simple selector to test + * @param {Boolean} nonMatches If true, it returns the elements that DON'T match the selector instead of the + * ones that match + * @return {HTMLElement[]} An Array of DOM elements which match the selector. If there are no matches, and empty + * Array is returned. + */ + filter: function(els, ss, nonMatches) { + ss = ss.replace(trimRe, ""); + if (!simpleCache[ss]) { + simpleCache[ss] = DQ.compile(ss, "simple"); + } else { + setupEscapes(ss); + } + + var result = simpleCache[ss](els); + return nonMatches ? quickDiff(result, els) : result; + }, + + /** + * Collection of matching regular expressions and code snippets. + * Each capture group within `()` will be replace the `{}` in the select + * statement as specified by their index. + */ + matchers: [{ + re: /^\.([\w\-\\]+)/, + select: useClassList ? 'n = byClassName(n, "{1}");' : 'n = byClassName(n, " {1} ");' + }, { + re: /^\:([\w\-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/, + select: 'n = byPseudo(n, "{1}", "{2}");' + }, { + re: /^(?:([\[\{])(?:@)?([\w\-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/, + select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");' + }, { + re: /^#([\w\-\\]+)/, + select: 'n = byId(n, "{1}");' + }, { + re: /^@([\w\-\.]+)/, + select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};' + }], + + /** + * Collection of operator comparison functions. + * The default operators are `=`, `!=`, `^=`, `$=`, `*=`, `%=`, `|=` and `~=`. + * + * New operators can be added as long as the match the format *c*`=` where *c* + * is any character other than space, `>`, or `<`. + * + * Operator functions are passed the following parameters: + * + * * `propValue` : The property value to test. + * * `compareTo` : The value to compare to. + */ + operators: { + "=": function(a, v) { + return a == v; + }, + "!=": function(a, v) { + return a != v; + }, + "^=": function(a, v) { + return a && a.substr(0, v.length) == v; + }, + "$=": function(a, v) { + return a && a.substr(a.length - v.length) == v; + }, + "*=": function(a, v) { + return a && a.indexOf(v) !== -1; + }, + "%=": function(a, v) { + return (a % v) == 0; + }, + "|=": function(a, v) { + return a && (a == v || a.substr(0, v.length + 1) == v + '-'); + }, + "~=": function(a, v) { + return a && (' ' + a + ' ').indexOf(' ' + v + ' ') != -1; + } + }, + + /** + * Object hash of "pseudo class" filter functions which are used when filtering selections. + * Each function is passed two parameters: + * + * - **c** : Array + * An Array of DOM elements to filter. + * + * - **v** : String + * The argument (if any) supplied in the selector. + * + * A filter function returns an Array of DOM elements which conform to the pseudo class. + * In addition to the provided pseudo classes listed above such as `first-child` and `nth-child`, + * developers may add additional, custom psuedo class filters to select elements according to application-specific requirements. + * + * For example, to filter `a` elements to only return links to __external__ resources: + * + * Ext.DomQuery.pseudos.external = function(c, v) { + * var r = [], ri = -1; + * for(var i = 0, ci; ci = c[i]; i++) { + * // Include in result set only if it's a link to an external resource + * if (ci.hostname != location.hostname) { + * r[++ri] = ci; + * } + * } + * return r; + * }; + * + * Then external links could be gathered with the following statement: + * + * var externalLinks = Ext.select("a:external"); + */ + pseudos: { + "first-child": function(c) { + var r = [], ri = -1, n, + i, ci; + for (i = 0; (ci = n = c[i]); i++) { + while ((n = n.previousSibling) && n.nodeType != 1); + if (!n) { + r[++ri] = ci; + } + } + return r; + }, + + "last-child": function(c) { + var r = [], ri = -1, n, + i, ci; + for (i = 0; (ci = n = c[i]); i++) { + while ((n = n.nextSibling) && n.nodeType != 1); + if (!n) { + r[++ri] = ci; + } + } + return r; + }, + + "nth-child": function(c, a) { + var r = [], ri = -1, + m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a), + f = (m[1] || 1) - 0, l = m[2] - 0, + i, n, j, cn, pn; + for (i = 0; n = c[i]; i++) { + pn = n.parentNode; + if (batch != pn._batch) { + j = 0; + for (cn = pn.firstChild; cn; cn = cn.nextSibling) { + if (cn.nodeType == 1) { + cn.nodeIndex = ++j; + } + } + pn._batch = batch; + } + if (f == 1) { + if (l == 0 || n.nodeIndex == l) { + r[++ri] = n; + } + } else if ((n.nodeIndex + l) % f == 0) { + r[++ri] = n; + } + } + + return r; + }, + + "only-child": function(c) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (!prev(ci) && !next(ci)) { + r[++ri] = ci; + } + } + return r; + }, + + "empty": function(c) { + var r = [], ri = -1, + i, ci, cns, j, cn, empty; + for (i = 0; ci = c[i]; i++) { + cns = ci.childNodes; + j = 0; + empty = true; + while (cn = cns[j]) { + ++j; + if (cn.nodeType == 1 || cn.nodeType == 3) { + empty = false; + break; + } + } + if (empty) { + r[++ri] = ci; + } + } + return r; + }, + + "contains": function(c, v) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if ((ci.textContent || ci.innerText || ci.text || '').indexOf(v) != -1) { + r[++ri] = ci; + } + } + return r; + }, + + "nodeValue": function(c, v) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (ci.firstChild && ci.firstChild.nodeValue == v) { + r[++ri] = ci; + } + } + return r; + }, + + "checked": function(c) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (ci.checked == true) { + r[++ri] = ci; + } + } + return r; + }, + + "not": function(c, ss) { + return DQ.filter(c, ss, true); + }, + + "any": function(c, selectors) { + var ss = selectors.split('|'), + r = [], ri = -1, s, + i, ci, j; + for (i = 0; ci = c[i]; i++) { + for (j = 0; s = ss[j]; j++) { + if (DQ.is(ci, s)) { + r[++ri] = ci; + break; + } + } + } + return r; + }, + + "odd": function(c) { + return this["nth-child"](c, "odd"); + }, + + "even": function(c) { + return this["nth-child"](c, "even"); + }, + + "nth": function(c, a) { + return c[a - 1] || []; + }, + + "first": function(c) { + return c[0] || []; + }, + + "last": function(c) { + return c[c.length - 1] || []; + }, + + "has": function(c, ss) { + var s = DQ.select, + r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (s(ss, ci).length > 0) { + r[++ri] = ci; + } + } + return r; + }, + + "next": function(c, ss) { + var is = DQ.is, + r = [], ri = -1, + i, ci, n; + for (i = 0; ci = c[i]; i++) { + n = next(ci); + if (n && is(n, ss)) { + r[++ri] = ci; + } + } + return r; + }, + + "prev": function(c, ss) { + var is = DQ.is, + r = [], ri = -1, + i, ci, n; + for (i = 0; ci = c[i]; i++) { + n = prev(ci); + if (n && is(n, ss)) { + r[++ri] = ci; + } + } + return r; + }, + + focusable: function(candidates) { + var len = candidates.length, + results = [], + i = 0, + c; + + for (; i < len; i++) { + c = candidates[i]; + if (Ext.fly(c, '_DomQuery').isFocusable()) { + results.push(c); + } + } + + return results; + }, + + visible: function(candidates, deep) { + var len = candidates.length, + results = [], + i = 0, + c; + + for (; i < len; i++) { + c = candidates[i]; + if (Ext.fly(c, '_DomQuery').isVisible(deep)) { + results.push(c); + } + } + + return results; + } + } + }; +}()); + +/** +* Shorthand of {@link Ext.dom.Query#select} +* @member Ext +* @method query +* @inheritdoc Ext.dom.Query#select +*/ +Ext.query = Ext.DomQuery.select; + +//@tag dom,core +/* ================================ + * A Note About Wrapped Animations + * ================================ + * A few of the effects below implement two different animations per effect, one wrapping + * animation that performs the visual effect and a "no-op" animation on this Element where + * no attributes of the element itself actually change. The purpose for this is that the + * wrapper is required for the effect to work and so it does the actual animation work, but + * we always animate `this` so that the element's events and callbacks work as expected to + * the callers of this API. + * + * Because of this, we always want each wrap animation to complete first (we don't want to + * cut off the visual effect early). To ensure that, we arbitrarily increase the duration of + * the element's no-op animation, also ensuring that it has a decent minimum value -- on slow + * systems, too-low durations can cause race conditions between the wrap animation and the + * element animation being removed out of order. Note that in each wrap's `afteranimate` + * callback it will explicitly terminate the element animation as soon as the wrap is complete, + * so there's no real danger in making the duration too long. + * + * This applies to all effects that get wrapped, including slideIn, slideOut, switchOff and frame. + */ + +/** + */ +Ext.define('Ext.dom.Element_anim', { + override: 'Ext.dom.Element', + + /** + * Performs custom animation on this Element. + * + * The following properties may be specified in `from`, `to`, and `keyframe` objects: + * + * - `x` - The page X position in pixels. + * + * - `y` - The page Y position in pixels + * + * - `left` - The element's CSS `left` value. Units must be supplied. + * + * - `top` - The element's CSS `top` value. Units must be supplied. + * + * - `width` - The element's CSS `width` value. Units must be supplied. + * + * - `height` - The element's CSS `height` value. Units must be supplied. + * + * - `scrollLeft` - The element's `scrollLeft` value. + * + * - `scrollTop` - The element's `scrollTop` value. + * + * - `opacity` - The element's `opacity` value. This must be a value between `0` and `1`. + * + * **Be aware** that animating an Element which is being used by an Ext Component without in some way informing the + * Component about the changed element state will result in incorrect Component behaviour. This is because the + * Component will be using the old state of the element. To avoid this problem, it is now possible to directly + * animate certain properties of Components. + * + * @param {Object} config Configuration for {@link Ext.fx.Anim}. + * Note that the {@link Ext.fx.Anim#to to} config is required. + * @return {Ext.dom.Element} this + */ + animate: function(config) { + var me = this, + listeners, + anim, + animId = me.dom.id || Ext.id(me.dom); + + if (!Ext.fx.Manager.hasFxBlock(animId)) { + // Bit of gymnastics here to ensure our internal listeners get bound first + if (config.listeners) { + listeners = config.listeners; + delete config.listeners; + } + if (config.internalListeners) { + config.listeners = config.internalListeners; + delete config.internalListeners; + } + anim = new Ext.fx.Anim(me.anim(config)); + if (listeners) { + anim.on(listeners); + } + Ext.fx.Manager.queueFx(anim); + } + return me; + }, + + // @private - process the passed fx configuration. + anim: function(config) { + if (!Ext.isObject(config)) { + return (config) ? {} : false; + } + + var me = this, + duration = config.duration || Ext.fx.Anim.prototype.duration, + easing = config.easing || 'ease', + animConfig; + + if (config.stopAnimation) { + me.stopAnimation(); + } + + Ext.applyIf(config, Ext.fx.Manager.getFxDefaults(me.id)); + + // Clear any 'paused' defaults. + Ext.fx.Manager.setFxDefaults(me.id, { + delay: 0 + }); + + animConfig = { + // Pass the DOM reference. That's tested first so will be converted to an Ext.fx.Target fastest. + target: me.dom, + remove: config.remove, + alternate: config.alternate || false, + duration: duration, + easing: easing, + callback: config.callback, + listeners: config.listeners, + iterations: config.iterations || 1, + scope: config.scope, + block: config.block, + concurrent: config.concurrent, + delay: config.delay || 0, + paused: true, + keyframes: config.keyframes, + from: config.from || {}, + to: Ext.apply({}, config) + }; + Ext.apply(animConfig.to, config.to); + + // Anim API properties - backward compat + delete animConfig.to.to; + delete animConfig.to.from; + delete animConfig.to.remove; + delete animConfig.to.alternate; + delete animConfig.to.keyframes; + delete animConfig.to.iterations; + delete animConfig.to.listeners; + delete animConfig.to.target; + delete animConfig.to.paused; + delete animConfig.to.callback; + delete animConfig.to.scope; + delete animConfig.to.duration; + delete animConfig.to.easing; + delete animConfig.to.concurrent; + delete animConfig.to.block; + delete animConfig.to.stopAnimation; + delete animConfig.to.delay; + return animConfig; + }, + + /** + * Slides the element into view. An anchor point can be optionally passed to set the point of origin for the slide + * effect. This function automatically handles wrapping the element with a fixed-size container if needed. See the + * Fx class overview for valid anchor point options. Usage: + * + * // default: slide the element in from the top + * el.slideIn(); + * + * // custom: slide the element in from the right with a 2-second duration + * el.slideIn('r', { duration: 2000 }); + * + * // common config options shown with default values + * el.slideIn('t', { + * easing: 'easeOut', + * duration: 500 + * }); + * + * @param {String} anchor (optional) One of the valid Fx anchor positions (defaults to top: 't') + * @param {Object} options (optional) Object literal with any of the Fx config options + * @param {Boolean} options.preserveScroll Set to true if preservation of any descendant elements' + * `scrollTop` values is required. By default the DOM wrapping operation performed by `slideIn` and + * `slideOut` causes the browser to lose all scroll positions. + * @return {Ext.dom.Element} The Element + */ + slideIn: function(anchor, obj, slideOut) { + var me = this, + dom = me.dom, + elStyle = dom.style, + beforeAnim, + wrapAnim, + restoreScroll, + wrapDomParentNode; + + anchor = anchor || "t"; + obj = obj || {}; + + beforeAnim = function() { + var animScope = this, + listeners = obj.listeners, + el = Ext.fly(dom, '_anim'), + box, originalStyles, anim, wrap; + + if (!slideOut) { + el.fixDisplay(); + } + + box = el.getBox(); + if ((anchor == 't' || anchor == 'b') && box.height === 0) { + box.height = dom.scrollHeight; + } + else if ((anchor == 'l' || anchor == 'r') && box.width === 0) { + box.width = dom.scrollWidth; + } + + originalStyles = el.getStyles('width', 'height', 'left', 'right', 'top', 'bottom', 'position', 'z-index', true); + el.setSize(box.width, box.height); + + // Cache all descendants' scrollTop & scrollLeft values if configured to preserve scroll. + if (obj.preserveScroll) { + restoreScroll = el.cacheScrollValues(); + } + + wrap = el.wrap({ + id: Ext.id() + '-anim-wrap-for-' + el.dom.id, + style: { + visibility: slideOut ? 'visible' : 'hidden' + } + }); + wrapDomParentNode = wrap.dom.parentNode; + wrap.setPositioning(el.getPositioning(true)); + if (wrap.isStyle('position', 'static')) { + wrap.position('relative'); + } + el.clearPositioning('auto'); + wrap.clip(); + + // The wrap will have reset all descendant scrollTops. Restore them if we cached them. + if (restoreScroll) { + restoreScroll(); + } + + // This element is temporarily positioned absolute within its wrapper. + // Restore to its default, CSS-inherited visibility setting. + // We cannot explicitly poke visibility:visible into its style because that overrides the visibility of the wrap. + el.setStyle({ + visibility: '', + position: 'absolute' + }); + if (slideOut) { + wrap.setSize(box.width, box.height); + } + + switch (anchor) { + case 't': + anim = { + from: { + width: box.width + 'px', + height: '0px' + }, + to: { + width: box.width + 'px', + height: box.height + 'px' + } + }; + elStyle.bottom = '0px'; + break; + case 'l': + anim = { + from: { + width: '0px', + height: box.height + 'px' + }, + to: { + width: box.width + 'px', + height: box.height + 'px' + } + }; + me.anchorAnimX(anchor); + break; + case 'r': + anim = { + from: { + x: box.x + box.width, + width: '0px', + height: box.height + 'px' + }, + to: { + x: box.x, + width: box.width + 'px', + height: box.height + 'px' + } + }; + me.anchorAnimX(anchor); + break; + case 'b': + anim = { + from: { + y: box.y + box.height, + width: box.width + 'px', + height: '0px' + }, + to: { + y: box.y, + width: box.width + 'px', + height: box.height + 'px' + } + }; + break; + case 'tl': + anim = { + from: { + x: box.x, + y: box.y, + width: '0px', + height: '0px' + }, + to: { + width: box.width + 'px', + height: box.height + 'px' + } + }; + elStyle.bottom = '0px'; + me.anchorAnimX('l'); + break; + case 'bl': + anim = { + from: { + y: box.y + box.height, + width: '0px', + height: '0px' + }, + to: { + y: box.y, + width: box.width + 'px', + height: box.height + 'px' + } + }; + me.anchorAnimX('l'); + break; + case 'br': + anim = { + from: { + x: box.x + box.width, + y: box.y + box.height, + width: '0px', + height: '0px' + }, + to: { + x: box.x, + y: box.y, + width: box.width + 'px', + height: box.height + 'px' + } + }; + me.anchorAnimX('r'); + break; + case 'tr': + anim = { + from: { + x: box.x + box.width, + width: '0px', + height: '0px' + }, + to: { + x: box.x, + width: box.width + 'px', + height: box.height + 'px' + } + }; + elStyle.bottom = '0px'; + me.anchorAnimX('r'); + break; + } + + wrap.show(); + wrapAnim = Ext.apply({}, obj); + delete wrapAnim.listeners; + wrapAnim = new Ext.fx.Anim(Ext.applyIf(wrapAnim, { + target: wrap, + duration: 500, + easing: 'ease-out', + from: slideOut ? anim.to : anim.from, + to: slideOut ? anim.from : anim.to + })); + + // In the absence of a callback, this listener MUST be added first + wrapAnim.on('afteranimate', function() { + var el = Ext.fly(dom, '_anim'); + + el.setStyle(originalStyles); + if (slideOut) { + if (obj.useDisplay) { + el.setDisplayed(false); + } else { + el.hide(); + } + } + if (wrap.dom) { + if (wrap.dom.parentNode) { + wrap.dom.parentNode.insertBefore(el.dom, wrap.dom); + } else { + wrapDomParentNode.appendChild(el.dom); + } + wrap.remove(); + } + // The unwrap will have reset all descendant scrollTops. Restore them if we cached them. + if (restoreScroll) { + restoreScroll(); + } + // kill the no-op element animation created below + animScope.end(); + }); + // Add configured listeners after + if (listeners) { + wrapAnim.on(listeners); + } + }; + + me.animate({ + // See "A Note About Wrapped Animations" at the top of this class: + duration: obj.duration ? Math.max(obj.duration, 500) * 2 : 1000, + listeners: { + beforeanimate: beforeAnim // kick off the wrap animation + } + }); + return me; + }, + + + /** + * Slides the element out of view. An anchor point can be optionally passed to set the end point for the slide + * effect. When the effect is completed, the element will be hidden (visibility = 'hidden') but block elements will + * still take up space in the document. The element must be removed from the DOM using the 'remove' config option if + * desired. This function automatically handles wrapping the element with a fixed-size container if needed. See the + * Fx class overview for valid anchor point options. Usage: + * + * // default: slide the element out to the top + * el.slideOut(); + * + * // custom: slide the element out to the right with a 2-second duration + * el.slideOut('r', { duration: 2000 }); + * + * // common config options shown with default values + * el.slideOut('t', { + * easing: 'easeOut', + * duration: 500, + * remove: false, + * useDisplay: false + * }); + * + * @param {String} anchor (optional) One of the valid Fx anchor positions (defaults to top: 't') + * @param {Object} options (optional) Object literal with any of the Fx config options + * @return {Ext.dom.Element} The Element + */ + slideOut: function(anchor, o) { + return this.slideIn(anchor, o, true); + }, + + /** + * Fades the element out while slowly expanding it in all directions. When the effect is completed, the element will + * be hidden (visibility = 'hidden') but block elements will still take up space in the document. Usage: + * + * // default + * el.puff(); + * + * // common config options shown with default values + * el.puff({ + * easing: 'easeOut', + * duration: 500, + * useDisplay: false + * }); + * + * @param {Object} options (optional) Object literal with any of the Fx config options + * @return {Ext.dom.Element} The Element + */ + puff: function(obj) { + var me = this, + dom = me.dom, + beforeAnim, + box = me.getBox(), + originalStyles = me.getStyles('width', 'height', 'left', 'right', 'top', 'bottom', 'position', 'z-index', 'font-size', 'opacity', true); + + obj = Ext.applyIf(obj || {}, { + easing: 'ease-out', + duration: 500, + useDisplay: false + }); + + beforeAnim = function() { + var el = Ext.fly(dom, '_anim'); + + el.clearOpacity(); + el.show(); + this.to = { + width: box.width * 2, + height: box.height * 2, + x: box.x - (box.width / 2), + y: box.y - (box.height /2), + opacity: 0, + fontSize: '200%' + }; + this.on('afteranimate',function() { + var el = Ext.fly(dom, '_anim'); + if (el) { + if (obj.useDisplay) { + el.setDisplayed(false); + } else { + el.hide(); + } + el.setStyle(originalStyles); + Ext.callback(obj.callback, obj.scope); + } + }); + }; + + me.animate({ + duration: obj.duration, + easing: obj.easing, + listeners: { + beforeanimate: { + fn: beforeAnim + } + } + }); + return me; + }, + + /** + * Blinks the element as if it was clicked and then collapses on its center (similar to switching off a television). + * When the effect is completed, the element will be hidden (visibility = 'hidden') but block elements will still + * take up space in the document. The element must be removed from the DOM using the 'remove' config option if + * desired. Usage: + * + * // default + * el.switchOff(); + * + * // all config options shown with default values + * el.switchOff({ + * easing: 'easeIn', + * duration: .3, + * remove: false, + * useDisplay: false + * }); + * + * @param {Object} options (optional) Object literal with any of the Fx config options + * @return {Ext.dom.Element} The Element + */ + switchOff: function(obj) { + var me = this, + dom = me.dom, + beforeAnim; + + obj = Ext.applyIf(obj || {}, { + easing: 'ease-in', + duration: 500, + remove: false, + useDisplay: false + }); + + beforeAnim = function() { + var el = Ext.fly(dom, '_anim'), + animScope = this, + size = el.getSize(), + xy = el.getXY(), + keyframe, position; + + el.clearOpacity(); + el.clip(); + position = el.getPositioning(); + + keyframe = new Ext.fx.Animator({ + target: dom, + duration: obj.duration, + easing: obj.easing, + keyframes: { + 33: { + opacity: 0.3 + }, + 66: { + height: 1, + y: xy[1] + size.height / 2 + }, + 100: { + width: 1, + x: xy[0] + size.width / 2 + } + } + }); + keyframe.on('afteranimate', function() { + var el = Ext.fly(dom, '_anim'); + if (obj.useDisplay) { + el.setDisplayed(false); + } else { + el.hide(); + } + el.clearOpacity(); + el.setPositioning(position); + el.setSize(size); + // kill the no-op element animation created below + animScope.end(); + }); + }; + + me.animate({ + // See "A Note About Wrapped Animations" at the top of this class: + duration: (Math.max(obj.duration, 500) * 2), + listeners: { + beforeanimate: { + fn: beforeAnim + } + } + }); + return me; + }, + + /** + * Shows a ripple of exploding, attenuating borders to draw attention to an Element. Usage: + * + * // default: a single light blue ripple + * el.frame(); + * + * // custom: 3 red ripples lasting 3 seconds total + * el.frame("#ff0000", 3, { duration: 3000 }); + * + * // common config options shown with default values + * el.frame("#C3DAF9", 1, { + * duration: 1000 // duration of each individual ripple. + * // Note: Easing is not configurable and will be ignored if included + * }); + * + * @param {String} [color='#C3DAF9'] The hex color value for the border. + * @param {Number} [count=1] The number of ripples to display. + * @param {Object} [options] Object literal with any of the Fx config options + * @return {Ext.dom.Element} The Element + */ + frame : function(color, count, obj){ + var me = this, + dom = me.dom, + beforeAnim; + + color = color || '#C3DAF9'; + count = count || 1; + obj = obj || {}; + + beforeAnim = function() { + var el = Ext.fly(dom, '_anim'), + animScope = this, + box, + proxy, proxyAnim; + + el.show(); + box = el.getBox(); + proxy = Ext.getBody().createChild({ + id: el.dom.id + '-anim-proxy', + style: { + position : 'absolute', + 'pointer-events': 'none', + 'z-index': 35000, + border : '0px solid ' + color + } + }); + + proxyAnim = new Ext.fx.Anim({ + target: proxy, + duration: obj.duration || 1000, + iterations: count, + from: { + top: box.y, + left: box.x, + borderWidth: 0, + opacity: 1, + height: box.height, + width: box.width + }, + to: { + top: box.y - 20, + left: box.x - 20, + borderWidth: 10, + opacity: 0, + height: box.height + 40, + width: box.width + 40 + } + }); + proxyAnim.on('afteranimate', function() { + proxy.remove(); + // kill the no-op element animation created below + animScope.end(); + }); + }; + + me.animate({ + // See "A Note About Wrapped Animations" at the top of this class: + duration: (Math.max(obj.duration, 500) * 2) || 2000, + listeners: { + beforeanimate: { + fn: beforeAnim + } + } + }); + return me; + }, + + /** + * Slides the element while fading it out of view. An anchor point can be optionally passed to set the ending point + * of the effect. Usage: + * + * // default: slide the element downward while fading out + * el.ghost(); + * + * // custom: slide the element out to the right with a 2-second duration + * el.ghost('r', { duration: 2000 }); + * + * // common config options shown with default values + * el.ghost('b', { + * easing: 'easeOut', + * duration: 500 + * }); + * + * @param {String} anchor (optional) One of the valid Fx anchor positions (defaults to bottom: 'b') + * @param {Object} options (optional) Object literal with any of the Fx config options + * @return {Ext.dom.Element} The Element + */ + ghost: function(anchor, obj) { + var me = this, + dom = me.dom, + beforeAnim; + + anchor = anchor || "b"; + beforeAnim = function() { + var el = Ext.fly(dom, '_anim'), + width = el.getWidth(), + height = el.getHeight(), + xy = el.getXY(), + position = el.getPositioning(), + to = { + opacity: 0 + }; + switch (anchor) { + case 't': + to.y = xy[1] - height; + break; + case 'l': + to.x = xy[0] - width; + break; + case 'r': + to.x = xy[0] + width; + break; + case 'b': + to.y = xy[1] + height; + break; + case 'tl': + to.x = xy[0] - width; + to.y = xy[1] - height; + break; + case 'bl': + to.x = xy[0] - width; + to.y = xy[1] + height; + break; + case 'br': + to.x = xy[0] + width; + to.y = xy[1] + height; + break; + case 'tr': + to.x = xy[0] + width; + to.y = xy[1] - height; + break; + } + this.to = to; + this.on('afteranimate', function () { + var el = Ext.fly(dom, '_anim'); + if (el) { + el.hide(); + el.clearOpacity(); + el.setPositioning(position); + } + }); + }; + + me.animate(Ext.applyIf(obj || {}, { + duration: 500, + easing: 'ease-out', + listeners: { + beforeanimate: beforeAnim + } + })); + return me; + }, + + /** + * Highlights the Element by setting a color (applies to the background-color by default, but can be changed using + * the "attr" config option) and then fading back to the original color. If no original color is available, you + * should provide the "endColor" config option which will be cleared after the animation. Usage: + * + * // default: highlight background to yellow + * el.highlight(); + * + * // custom: highlight foreground text to blue for 2 seconds + * el.highlight("0000ff", { attr: 'color', duration: 2000 }); + * + * // common config options shown with default values + * el.highlight("ffff9c", { + * attr: "backgroundColor", //can be any valid CSS property (attribute) that supports a color value + * endColor: (current color) or "ffffff", + * easing: 'easeIn', + * duration: 1000 + * }); + * + * @param {String} color (optional) The highlight color. Should be a 6 char hex color without the leading # + * (defaults to yellow: 'ffff9c') + * @param {Object} options (optional) Object literal with any of the Fx config options + * @return {Ext.dom.Element} The Element + */ + highlight: function(color, o) { + var me = this, + dom = me.dom, + from = {}, + restore, to, attr, lns, event, fn; + + // Cannot set bckground-color on table elements. Find div elements to highlight. + if (dom.tagName.match(me.tableTagRe)) { + return me.select('div').highlight(color, o); + } + + o = o || {}; + lns = o.listeners || {}; + attr = o.attr || 'backgroundColor'; + from[attr] = color || 'ffff9c'; + + if (!o.to) { + to = {}; + to[attr] = o.endColor || me.getColor(attr, 'ffffff', ''); + } + else { + to = o.to; + } + + // Don't apply directly on lns, since we reference it in our own callbacks below + o.listeners = Ext.apply(Ext.apply({}, lns), { + beforeanimate: function() { + restore = dom.style[attr]; + var el = Ext.fly(dom, '_anim'); + el.clearOpacity(); + el.show(); + + event = lns.beforeanimate; + if (event) { + fn = event.fn || event; + return fn.apply(event.scope || lns.scope || window, arguments); + } + }, + afteranimate: function() { + if (dom) { + dom.style[attr] = restore; + } + + event = lns.afteranimate; + if (event) { + fn = event.fn || event; + fn.apply(event.scope || lns.scope || window, arguments); + } + } + }); + + me.animate(Ext.apply({}, o, { + duration: 1000, + easing: 'ease-in', + from: from, + to: to + })); + return me; + }, + + /** + * Creates a pause before any subsequent queued effects begin. If there are no effects queued after the pause it will + * have no effect. Usage: + * + * el.pause(1); + * + * @deprecated 4.0 Use the `delay` config to {@link #animate} instead. + * @param {Number} seconds The length of time to pause (in seconds) + * @return {Ext.Element} The Element + */ + pause: function(ms) { + var me = this; + Ext.fx.Manager.setFxDefaults(me.id, { + delay: ms + }); + return me; + }, + + /** + * Fade an element in (from transparent to opaque). The ending opacity can be specified using the `opacity` + * config option. Usage: + * + * // default: fade in from opacity 0 to 100% + * el.fadeIn(); + * + * // custom: fade in from opacity 0 to 75% over 2 seconds + * el.fadeIn({ opacity: .75, duration: 2000}); + * + * // common config options shown with default values + * el.fadeIn({ + * opacity: 1, //can be any value between 0 and 1 (e.g. .5) + * easing: 'easeOut', + * duration: 500 + * }); + * + * @param {Object} options (optional) Object literal with any of the Fx config options + * @return {Ext.Element} The Element + */ + fadeIn: function(o) { + var me = this, + dom = me.dom; + + me.animate(Ext.apply({}, o, { + opacity: 1, + internalListeners: { + beforeanimate: function(anim){ + // restore any visibility/display that may have + // been applied by a fadeout animation + var el = Ext.fly(dom, '_anim'); + if (el.isStyle('display', 'none')) { + el.setDisplayed(''); + } else { + el.show(); + } + } + } + })); + return this; + }, + + /** + * Fade an element out (from opaque to transparent). The ending opacity can be specified using the `opacity` + * config option. Note that IE may require `useDisplay:true` in order to redisplay correctly. + * Usage: + * + * // default: fade out from the element's current opacity to 0 + * el.fadeOut(); + * + * // custom: fade out from the element's current opacity to 25% over 2 seconds + * el.fadeOut({ opacity: .25, duration: 2000}); + * + * // common config options shown with default values + * el.fadeOut({ + * opacity: 0, //can be any value between 0 and 1 (e.g. .5) + * easing: 'easeOut', + * duration: 500, + * remove: false, + * useDisplay: false + * }); + * + * @param {Object} options (optional) Object literal with any of the Fx config options + * @return {Ext.Element} The Element + */ + fadeOut: function(o) { + var me = this, + dom = me.dom; + + o = Ext.apply({ + opacity: 0, + internalListeners: { + afteranimate: function(anim){ + if (dom && anim.to.opacity === 0) { + var el = Ext.fly(dom, '_anim'); + if (o.useDisplay) { + el.setDisplayed(false); + } else { + el.hide(); + } + } + } + } + }, o); + me.animate(o); + return me; + }, + + /** + * Animates the transition of an element's dimensions from a starting height/width to an ending height/width. This + * method is a convenience implementation of {@link #shift}. Usage: + * + * // change height and width to 100x100 pixels + * el.scale(100, 100); + * + * // common config options shown with default values. The height and width will default to + * // the element's existing values if passed as null. + * el.scale( + * [element's width], + * [element's height], { + * easing: 'easeOut', + * duration: 350 + * } + * ); + * + * @deprecated 4.0 Just use {@link #animate} instead. + * @param {Number} width The new width (pass undefined to keep the original width) + * @param {Number} height The new height (pass undefined to keep the original height) + * @param {Object} options (optional) Object literal with any of the Fx config options + * @return {Ext.Element} The Element + */ + scale: function(w, h, o) { + this.animate(Ext.apply({}, o, { + width: w, + height: h + })); + return this; + }, + + /** + * Animates the transition of any combination of an element's dimensions, xy position and/or opacity. Any of these + * properties not specified in the config object will not be changed. This effect requires that at least one new + * dimension, position or opacity setting must be passed in on the config object in order for the function to have + * any effect. Usage: + * + * // slide the element horizontally to x position 200 while changing the height and opacity + * el.shift({ x: 200, height: 50, opacity: .8 }); + * + * // common config options shown with default values. + * el.shift({ + * width: [element's width], + * height: [element's height], + * x: [element's x position], + * y: [element's y position], + * opacity: [element's opacity], + * easing: 'easeOut', + * duration: 350 + * }); + * + * @deprecated 4.0 Just use {@link #animate} instead. + * @param {Object} options Object literal with any of the Fx config options + * @return {Ext.Element} The Element + */ + shift: function(config) { + this.animate(config); + return this; + }, + + /** + * @private + */ + anchorAnimX: function(anchor) { + var xName = (anchor === 'l') ? 'right' : 'left'; + this.dom.style[xName] = '0px'; + } +}); + +//@tag dom,core +/** + */ +Ext.define('Ext.dom.Element_dd', { + override: 'Ext.dom.Element', + + /** + * Initializes a {@link Ext.dd.DD} drag drop object for this element. + * @param {String} group The group the DD object is member of + * @param {Object} config The DD config object + * @param {Object} overrides An object containing methods to override/implement on the DD object + * @return {Ext.dd.DD} The DD object + */ + initDD : function(group, config, overrides){ + var dd = new Ext.dd.DD(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + /** + * Initializes a {@link Ext.dd.DDProxy} object for this element. + * @param {String} group The group the DDProxy object is member of + * @param {Object} config The DDProxy config object + * @param {Object} overrides An object containing methods to override/implement on the DDProxy object + * @return {Ext.dd.DDProxy} The DDProxy object + */ + initDDProxy : function(group, config, overrides){ + var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + /** + * Initializes a {@link Ext.dd.DDTarget} object for this element. + * @param {String} group The group the DDTarget object is member of + * @param {Object} config The DDTarget config object + * @param {Object} overrides An object containing methods to override/implement on the DDTarget object + * @return {Ext.dd.DDTarget} The DDTarget object + */ + initDDTarget : function(group, config, overrides){ + var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + } +}); + +//@tag dom,core +/** + */ +Ext.define('Ext.dom.Element_fx', { + override: 'Ext.dom.Element' +}, +function() { + +var Element = Ext.dom.Element, + VISIBILITY = "visibility", + DISPLAY = "display", + NONE = "none", + HIDDEN = 'hidden', + VISIBLE = 'visible', + OFFSETS = "offsets", + ASCLASS = "asclass", + NOSIZE = 'nosize', + ORIGINALDISPLAY = 'originalDisplay', + VISMODE = 'visibilityMode', + ISVISIBLE = 'isVisible', + OFFSETCLASS = Ext.baseCSSPrefix + 'hide-offsets', + getDisplay = function(el) { + var data = (el.$cache || el.getCache()).data, + display = data[ORIGINALDISPLAY]; + + if (display === undefined) { + data[ORIGINALDISPLAY] = display = ''; + } + return display; + }, + getVisMode = function(el){ + var data = (el.$cache || el.getCache()).data, + visMode = data[VISMODE]; + + if (visMode === undefined) { + data[VISMODE] = visMode = Element.VISIBILITY; + } + return visMode; + }; + +Element.override({ + /** + * The element's default display mode. + */ + originalDisplay : "", + visibilityMode : 1, + + /** + * Sets the visibility of the element (see details). If the visibilityMode is set to Element.DISPLAY, it will use + * the display property to hide the element, otherwise it uses visibility. The default is to hide and show using the visibility property. + * @param {Boolean} visible Whether the element is visible + * @param {Boolean/Object} [animate] True for the default animation, or a standard Element animation config object + * @return {Ext.dom.Element} this + */ + setVisible : function(visible, animate) { + var me = this, + dom = me.dom, + visMode = getVisMode(me); + + // hideMode string override + if (typeof animate == 'string') { + switch (animate) { + case DISPLAY: + visMode = Element.DISPLAY; + break; + case VISIBILITY: + visMode = Element.VISIBILITY; + break; + case OFFSETS: + visMode = Element.OFFSETS; + break; + case NOSIZE: + case ASCLASS: + visMode = Element.ASCLASS; + break; + } + me.setVisibilityMode(visMode); + animate = false; + } + + if (!animate || !me.anim) { + if (visMode == Element.DISPLAY) { + return me.setDisplayed(visible); + } else if (visMode == Element.OFFSETS) { + me[visible?'removeCls':'addCls'](OFFSETCLASS); + } else if (visMode == Element.VISIBILITY) { + me.fixDisplay(); + // Show by clearing visibility style. Explicitly setting to "visible" overrides parent visibility setting + dom.style.visibility = visible ? '' : HIDDEN; + } else if (visMode == Element.ASCLASS) { + me[visible?'removeCls':'addCls'](me.visibilityCls || Element.visibilityCls); + } + } else { + // closure for composites + if (visible) { + me.setOpacity(0.01); + me.setVisible(true); + } + if (!Ext.isObject(animate)) { + animate = { + duration: 350, + easing: 'ease-in' + }; + } + me.animate(Ext.applyIf({ + callback: function() { + if (!visible) { + + // Grab the dom again, since the reference may have changed if we use fly + Ext.fly(dom, '_internal').setVisible(false).setOpacity(1); + } + }, + to: { + opacity: (visible) ? 1 : 0 + } + }, animate)); + } + (me.$cache || me.getCache()).data[ISVISIBLE] = visible; + return me; + }, + + /** + * @private + * Determine if the Element has a relevant height and width available based + * upon current logical visibility state + */ + hasMetrics : function(){ + var visMode = getVisMode(this); + return this.isVisible() || (visMode == Element.OFFSETS) || (visMode == Element.VISIBILITY); + }, + + /** + * Toggles the element's visibility or display, depending on visibility mode. + * @param {Boolean/Object} [animate] True for the default animation, or a standard Element animation config object + * @return {Ext.dom.Element} this + */ + toggle : function(animate){ + var me = this; + me.setVisible(!me.isVisible(), me.anim(animate)); + return me; + }, + + /** + * Sets the CSS display property. Uses originalDisplay if the specified value is a boolean true. + * @param {Boolean/String} value Boolean value to display the element using its default display, or a string to set the display directly. + * @return {Ext.dom.Element} this + */ + setDisplayed : function(value) { + if(typeof value == "boolean"){ + value = value ? getDisplay(this) : NONE; + } + this.setStyle(DISPLAY, value); + return this; + }, + + // private + fixDisplay : function(){ + var me = this; + if (me.isStyle(DISPLAY, NONE)) { + me.setStyle(VISIBILITY, HIDDEN); + me.setStyle(DISPLAY, getDisplay(me)); // first try reverting to default + if (me.isStyle(DISPLAY, NONE)) { // if that fails, default to block + me.setStyle(DISPLAY, "block"); + } + } + }, + + /** + * Hide this element - Uses display mode to determine whether to use "display" or "visibility". See {@link #setVisible}. + * @param {Boolean/Object} [animate] true for the default animation or a standard Element animation config object + * @return {Ext.dom.Element} this + */ + hide : function(animate){ + // hideMode override + if (typeof animate == 'string'){ + this.setVisible(false, animate); + return this; + } + this.setVisible(false, this.anim(animate)); + return this; + }, + + /** + * Show this element - Uses display mode to determine whether to use "display" or "visibility". See {@link #setVisible}. + * @param {Boolean/Object} [animate] true for the default animation or a standard Element animation config object + * @return {Ext.dom.Element} this + */ + show : function(animate){ + // hideMode override + if (typeof animate == 'string'){ + this.setVisible(true, animate); + return this; + } + this.setVisible(true, this.anim(animate)); + return this; + } +}); + +}); + +//@tag dom,core +/** + */ +Ext.define('Ext.dom.Element_position', { + override: 'Ext.dom.Element' +}, +function() { + +var flyInstance, + Element = this, + LEFT = "left", + RIGHT = "right", + TOP = "top", + BOTTOM = "bottom", + POSITION = "position", + STATIC = "static", + RELATIVE = "relative", + ZINDEX = "z-index", + BODY = 'BODY', + + PADDING = 'padding', + BORDER = 'border', + SLEFT = '-left', + SRIGHT = '-right', + STOP = '-top', + SBOTTOM = '-bottom', + SWIDTH = '-width', + // special markup used throughout Ext when box wrapping elements + borders = {l: BORDER + SLEFT + SWIDTH, r: BORDER + SRIGHT + SWIDTH, t: BORDER + STOP + SWIDTH, b: BORDER + SBOTTOM + SWIDTH}, + paddings = {l: PADDING + SLEFT, r: PADDING + SRIGHT, t: PADDING + STOP, b: PADDING + SBOTTOM}, + paddingsTLRB = [paddings.l, paddings.r, paddings.t, paddings.b], + bordersTLRB = [borders.l, borders.r, borders.t, borders.b], + round = Math.round, + doc = document, + fly = function (el) { + if (!flyInstance) { + flyInstance = new Ext.Element.Fly(); + } + flyInstance.attach(el); + return flyInstance; + }; + + Element.override({ + + pxRe: /^\d+(?:\.\d*)?px$/i, + + inheritableStatics: { + getX: function(el) { + return Element.getXY(el)[0]; + }, + + getXY: function(el) { + var bd = doc.body, + docEl = doc.documentElement, + leftBorder = 0, + topBorder = 0, + ret = [0,0], + box, + scroll; + + el = Ext.getDom(el); + + if(el != doc && el != bd){ + // IE has the potential to throw when getBoundingClientRect + // is called on an element not attached to dom + if (Ext.isIE) { + try { + box = el.getBoundingClientRect(); + // In some versions of IE, the documentElement (HTML element) + // will have a 2px border that gets included, so subtract it off + topBorder = docEl.clientTop || bd.clientTop; + leftBorder = docEl.clientLeft || bd.clientLeft; + } catch (ex) { + box = { left: 0, top: 0 }; + } + } else { + box = el.getBoundingClientRect(); + } + + scroll = fly(doc).getScroll(); + ret = [ + round(box.left + scroll.left - leftBorder), + round(box.top + scroll.top - topBorder) + ]; + } + return ret; + }, + + getY: function(el) { + return Element.getXY(el)[1]; + }, + + setX: function(el, x) { + Element.setXY(el, [x, false]); + }, + + setXY: function(el, xy) { + (el = Ext.fly(el, '_setXY')).position(); + + var pts = el.translatePoints(xy), + style = el.dom.style, + pos; + + // right position may have been previously set by rtlSetXY or + // rtlSetLocalXY so clear it here just in case. + style.right = 'auto'; + for (pos in pts) { + if (!isNaN(pts[pos])) { + style[pos] = pts[pos] + "px"; + } + } + }, + + setY: function(el, y) { + Element.setXY(el, [false, y]); + } + }, + + /** + * Centers the Element in either the viewport, or another Element. + * @param {String/HTMLElement/Ext.dom.Element} centerIn element in + * which to center the element. + */ + center: function(centerIn){ + return this.alignTo(centerIn || doc, 'c-c'); + }, + + /** + * Clears positioning back to the default when the document was loaded. + * @param {String} [value=''] The value to use for the left, right, top, bottom. + * You could use 'auto'. + * @return {Ext.dom.Element} this + */ + clearPositioning: function(value) { + value = value || ''; + return this.setStyle({ + left : value, + right : value, + top : value, + bottom : value, + 'z-index' : '', + position : STATIC + }); + }, + + getAnchorToXY: function(el, anchor, local, mySize) { + return el.getAnchorXY(anchor, local, mySize); + }, + + /** + * Gets the bottom Y coordinate of the element (element Y position + element height) + * @param {Boolean} local True to get the local css position instead of page + * coordinate + * @return {Number} + * @deprecated + */ + getBottom: function(local) { + return (local ? this.getLocalY() : this.getY()) + this.getHeight(); + }, + + getBorderPadding: function() { + var paddingWidth = this.getStyle(paddingsTLRB), + bordersWidth = this.getStyle(bordersTLRB); + + return { + beforeX: (parseFloat(bordersWidth[borders.l]) || 0) + (parseFloat(paddingWidth[paddings.l]) || 0), + afterX: (parseFloat(bordersWidth[borders.r]) || 0) + (parseFloat(paddingWidth[paddings.r]) || 0), + beforeY: (parseFloat(bordersWidth[borders.t]) || 0) + (parseFloat(paddingWidth[paddings.t]) || 0), + afterY: (parseFloat(bordersWidth[borders.b]) || 0) + (parseFloat(paddingWidth[paddings.b]) || 0) + }; + }, + + /** + * Calculates the x, y to center this element on the screen + * @return {Number[]} The x, y values [x, y] + * @deprecated + */ + getCenterXY: function(){ + return this.getAlignToXY(doc, 'c-c'); + }, + + /** + * Gets the left X coordinate + * @param {Boolean} local True to get the local css position instead of + * page coordinate + * @return {Number} + * @deprecated Use {@link #getX} or {@link #getLocalX} + */ + getLeft: function(local) { + return local ? this.getLocalX() : this.getX(); + }, + + /** + * Gets the local CSS X position for the element + * + * @return {Number} + */ + getLocalX: function() { + var me = this, + offsetParent = me.dom.offsetParent, + x = me.getStyle('left'); + + if (!x || x === 'auto') { + x = 0; + } else if (me.pxRe.test(x)) { + x = parseFloat(x); + } else { + x = me.getX(); + if (offsetParent) { + x -= Element.getX(offsetParent); + } + } + + return x; + }, + + /** + * Gets the local CSS X and Y position for the element + * + * @return {Array} [x, y] + */ + getLocalXY: function() { + var me = this, + offsetParent = me.dom.offsetParent, + style = me.getStyle(['left', 'top']), + x = style.left, + y = style.top; + + if (!x || x === 'auto') { + x = 0; + } else if (me.pxRe.test(x)) { + x = parseFloat(x); + } else { + x = me.getX(); + if (offsetParent) { + x -= Element.getX(offsetParent); + } + } + + if (!y || y === 'auto') { + y = 0; + } else if (me.pxRe.test(y)) { + y = parseFloat(y); + } else { + y = me.getY(); + if (offsetParent) { + y -= Element.getY(offsetParent); + } + } + + return [x, y]; + }, + + /** + * Gets the local CSS Y position for the element + * + * @return {Number} + */ + getLocalY: function() { + var me = this, + offsetParent = me.dom.offsetParent, + y = me.getStyle('top'); + + if (!y || y === 'auto') { + y = 0; + } else if (me.pxRe.test(y)) { + y = parseFloat(y); + } else { + y = me.getY(); + if (offsetParent) { + y -= Element.getY(offsetParent); + } + } + + return y; + }, + + /** + * Returns an object defining the area of this Element which can be passed to + * {@link Ext.util.Positionable#setBox} to set another Element's size/location to match this element. + * + * @param {Boolean} [asRegion] If true an Ext.util.Region will be returned + * @return {Object/Ext.util.Region} box An object in the following format: + * + * { + * left: , + * top: , + * width: , + * height: , + * bottom: , + * right: + * } + * + * The returned object may also be addressed as an Array where index 0 contains + * the X position and index 1 contains the Y position. So the result may also be + * used for {@link #setXY} + * @deprecated use {@link Ext.util.Positionable#getBox} to get a box object, and + * {@link Ext.util.Positionable#getRegion} to get a {@link Ext.util.Region Region}. + */ + getPageBox: function(getRegion) { + var me = this, + dom = me.dom, + isDoc = dom.nodeName == BODY, + w = isDoc ? Ext.Element.getViewWidth() : dom.offsetWidth, + h = isDoc ? Ext.Element.getViewHeight() : dom.offsetHeight, + xy = me.getXY(), + t = xy[1], + r = xy[0] + w, + b = xy[1] + h, + l = xy[0]; + + if (getRegion) { + return new Ext.util.Region(t, r, b, l); + } + else { + return { + left: l, + top: t, + width: w, + height: h, + right: r, + bottom: b + }; + } + }, + + /** + * Gets an object with all CSS positioning properties. Useful along with + * #setPostioning to get snapshot before performing an update and then restoring + * the element. + * @param {Boolean} [autoPx=false] true to return pixel values for "auto" styles. + * @return {Object} + */ + getPositioning: function(autoPx){ + var styles = this.getStyle(['left', 'top', 'position', 'z-index']), + dom = this.dom; + + if(autoPx) { + if(styles.left === 'auto') { + styles.left = dom.offsetLeft + 'px'; + } + if(styles.top === 'auto') { + styles.top = dom.offsetTop + 'px'; + } + } + + return styles; + }, + + /** + * Gets the right X coordinate of the element (element X position + element width) + * @param {Boolean} local True to get the local css position instead of page + * coordinates + * @return {Number} + * @deprecated + */ + getRight: function(local) { + return (local ? this.getLocalX() : this.getX()) + this.getWidth(); + }, + + /** + * Gets the top Y coordinate + * @param {Boolean} local True to get the local css position instead of page + * coordinates + * @return {Number} + * @deprecated Use {@link #getY} or {@link #getLocalY} + */ + getTop: function(local) { + return local ? this.getLocalY() : this.getY(); + }, + + /** + * Gets element X position in page coordinates + * + * @return {Number} + */ + getX: function() { + return Element.getX(this.dom); + }, + + /** + * Gets element X and Y positions in page coordinates + * + * @return {Array} [x, y] + */ + getXY: function() { + return Element.getXY(this.dom); + }, + + /** + * Gets element Y position in page coordinates + * + * @return {Number} + */ + getY: function() { + return Element.getY(this.dom); + }, + + /** + * Sets the position of the element in page coordinates. + * @param {Number} x X value for new position (coordinates are page-based) + * @param {Number} y Y value for new position (coordinates are page-based) + * @param {Boolean/Object} [animate] True for the default animation, or a standard + * Element animation config object + * @return {Ext.dom.Element} this + * @deprecated Use {@link #setXY} instead. + */ + moveTo: function(x, y, animate) { + return this.setXY([x, y], animate); + }, + + /** + * Initializes positioning on this element. If a desired position is not passed, + * it will make the the element positioned relative IF it is not already positioned. + * @param {String} [pos] Positioning to use "relative", "absolute" or "fixed" + * @param {Number} [zIndex] The zIndex to apply + * @param {Number} [x] Set the page X position + * @param {Number} [y] Set the page Y position + */ + position: function(pos, zIndex, x, y) { + var me = this; + + if (!pos && me.isStyle(POSITION, STATIC)) { + me.setStyle(POSITION, RELATIVE); + } else if (pos) { + me.setStyle(POSITION, pos); + } + if (zIndex) { + me.setStyle(ZINDEX, zIndex); + } + if (x || y) { + me.setXY([x || false, y || false]); + } + }, + + /** + * Sets the element's CSS bottom style. + * @param {Number/String} bottom Number of pixels or CSS string value to set as + * the bottom CSS property value + * @return {Ext.dom.Element} this + * @deprecated + */ + setBottom: function(bottom) { + this.dom.style[BOTTOM] = this.addUnits(bottom); + return this; + }, + + /** + * Sets the element's position and size in one shot. If animation is true then + * width, height, x and y will be animated concurrently. + * + * @param {Number} x X value for new position (coordinates are page-based) + * @param {Number} y Y value for new position (coordinates are page-based) + * @param {Number/String} width The new width. This may be one of: + * + * - A Number specifying the new width in this Element's + * {@link #defaultUnit}s (by default, pixels) + * - A String used to set the CSS width style. Animation may **not** be used. + * + * @param {Number/String} height The new height. This may be one of: + * + * - A Number specifying the new height in this Element's + * {@link #defaultUnit}s (by default, pixels) + * - A String used to set the CSS height style. Animation may **not** be used. + * + * @param {Boolean/Object} [animate] true for the default animation or + * a standard Element animation config object + * + * @return {Ext.dom.Element} this + * @deprecated Use {@link Ext.util.Positionable#setBox} instead. + */ + setBounds: function(x, y, width, height, animate) { + return this.setBox({ + x: x, + y: y, + width: width, + height: height + }, animate); + }, + + /** + * Sets the element's left position directly using CSS style + * (instead of {@link #setX}). + * @param {Number/String} left Number of pixels or CSS string value to + * set as the left CSS property value + * @return {Ext.dom.Element} this + * @deprecated + */ + setLeft: function(left) { + this.dom.style[LEFT] = this.addUnits(left); + return this; + }, + + /** + * Sets the element's left and top positions directly using CSS style + * @param {Number/String} left Number of pixels or CSS string value to + * set as the left CSS property value + * @param {Number/String} top Number of pixels or CSS string value to + * set as the top CSS property value + * @return {Ext.dom.Element} this + * @deprecated + */ + setLeftTop: function(left, top) { + var me = this, + style = me.dom.style; + + style.left = me.addUnits(left); + style.top = me.addUnits(top); + + return me; + }, + + setLocalX: function(x) { + var style = this.dom.style; + + // clear right style just in case it was previously set by rtlSetXY/rtlSetLocalXY + style.right = 'auto'; + style.left = (x === null) ? 'auto' : x + 'px'; + }, + + setLocalXY: function(x, y) { + var style = this.dom.style; + + // clear right style just in case it was previously set by rtlSetXY/rtlSetLocalXY + style.right = 'auto'; + + if (x && x.length) { + y = x[1]; + x = x[0]; + } + + if (x === null) { + style.left = 'auto'; + } else if (x !== undefined) { + style.left = x + 'px'; + } + + if (y === null) { + style.top = 'auto'; + } else if (y !== undefined) { + style.top = y + 'px'; + } + }, + + setLocalY: function(y) { + this.dom.style.top = (y === null) ? 'auto' : y + 'px'; + }, + + /** + * Sets the position of the element in page coordinates. + * @param {Number} x X value for new position + * @param {Number} y Y value for new position + * @param {Boolean/Object} [animate] True for the default animation, or a standard + * Element animation config object + * @return {Ext.dom.Element} this + * @deprecated Use {@link #setXY} instead. + */ + setLocation: function(x, y, animate) { + return this.setXY([x, y], animate); + }, + + /** + * Set positioning with an object returned by #getPositioning. + * @param {Object} posCfg + * @return {Ext.dom.Element} this + */ + setPositioning: function(pc) { + return this.setStyle(pc); + }, + + /** + * Sets the element's CSS right style. + * @param {Number/String} right Number of pixels or CSS string value to + * set as the right CSS property value + * @return {Ext.dom.Element} this + * @deprecated + */ + setRight: function(right) { + this.dom.style[RIGHT] = this.addUnits(right); + return this; + }, + + /** + * Sets the element's top position directly using CSS style + * (instead of {@link #setY}). + * @param {Number/String} top Number of pixels or CSS string value to + * set as the top CSS property value + * @return {Ext.dom.Element} this + * @deprecated + */ + setTop: function(top) { + this.dom.style[TOP] = this.addUnits(top); + return this; + }, + + setX: function(x, animate) { + return this.setXY([x, this.getY()], animate); + }, + + setXY: function(xy, animate) { + var me = this; + + if (!animate || !me.anim) { + Element.setXY(me.dom, xy); + } else { + if (!Ext.isObject(animate)) { + animate = {}; + } + me.animate(Ext.applyIf({ to: { x: xy[0], y: xy[1] } }, animate)); + } + return this; + }, + + setY: function(y, animate) { + return this.setXY([this.getX(), y], animate); + } + }); + + /** + * @private + * Returns the `X,Y` position of the passed element in browser document space without regard + * to any RTL direction settings. + */ + Element.getTrueXY = Element.getXY; + +}); + +//@tag dom,core +/** + */ +Ext.define('Ext.dom.Element_scroll', { + override: 'Ext.dom.Element', + + /** + * Returns true if this element is scrollable. + * @return {Boolean} + */ + isScrollable: function() { + var dom = this.dom; + return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth; + }, + + /** + * Returns the current scroll position of the element. + * @return {Object} An object containing the scroll position in the format + * `{left: (scrollLeft), top: (scrollTop)}` + */ + getScroll: function() { + var me = this, + dom = me.dom, + doc = document, + body = doc.body, + docElement = doc.documentElement, + left, top; + + if (dom === doc || dom === body) { + // the scrollLeft/scrollTop may be either on the body or documentElement, + // depending on browser. It is possible to use window.pageXOffset/pageYOffset + // in most modern browsers but this complicates things when in rtl mode because + // pageXOffset does not always behave the same as scrollLeft when direction is + // rtl. (e.g. pageXOffset can be an offset from the right, while scrollLeft + // is offset from the left, one can be positive and the other negative, etc.) + // To avoid adding an extra layer of feature detection in rtl mode to deal with + // these differences, it's best just to always use scrollLeft/scrollTop + left = docElement.scrollLeft || (body ? body.scrollLeft : 0); + top = docElement.scrollTop || (body ? body.scrollTop : 0); + } else { + left = dom.scrollLeft; + top = dom.scrollTop; + } + + return { + left: left, + top: top + }; + }, + + /** + * Gets the left scroll position + * @return {Number} The left scroll position + */ + getScrollLeft: function() { + var dom = this.dom, + doc = document; + + if (dom === doc || dom === doc.body) { + return this.getScroll().left; + } else { + return dom.scrollLeft; + } + }, + + /** + * Gets the top scroll position + * @return {Number} The top scroll position + */ + getScrollTop: function(){ + var dom = this.dom, + doc = document; + + if (dom === doc || dom === doc.body) { + return this.getScroll().top; + } else { + return dom.scrollTop; + } + }, + + /** + * Sets the left scroll position + * @param {Number} left The left scroll position + * @return {Ext.dom.Element} this + */ + setScrollLeft: function(left){ + this.dom.scrollLeft = this.normalizeScrollLeft(left); + return this; + }, + + /** + * @private + * Normalize the scroll left pos for setting. + * @param {Number} left The new left scroll position. + * @return {Number} The normalized scroll left position. + */ + normalizeScrollLeft: Ext.identityFn, + + /** + * Sets the top scroll position + * @param {Number} top The top scroll position + * @return {Ext.dom.Element} this + */ + setScrollTop: function(top) { + this.dom.scrollTop = top; + return this; + }, + + /** + * Scrolls this element by the passed delta values, optionally animating. + * + * All of the following are equivalent: + * + * el.scrollBy(10, 10, true); + * el.scrollBy([10, 10], true); + * el.scrollBy({ x: 10, y: 10 }, true); + * + * @param {Number/Number[]/Object} deltaX Either the x delta, an Array specifying x and y deltas or + * an object with "x" and "y" properties. + * @param {Number/Boolean/Object} deltaY Either the y delta, or an animate flag or config object. + * @param {Boolean/Object} animate Animate flag/config object if the delta values were passed separately. + * @return {Ext.Element} this + */ + scrollBy: function(deltaX, deltaY, animate) { + var me = this, + dom = me.dom; + + // Extract args if deltas were passed as an Array. + if (deltaX.length) { + animate = deltaY; + deltaY = deltaX[1]; + deltaX = deltaX[0]; + } else if (typeof deltaX != 'number') { // or an object + animate = deltaY; + deltaY = deltaX.y; + deltaX = deltaX.x; + } + + if (deltaX) { + me.scrollTo('left', Math.max(Math.min(me.getScrollLeft() + deltaX, dom.scrollWidth - dom.clientWidth), 0), animate); + } + if (deltaY) { + me.scrollTo('top', Math.max(Math.min(dom.scrollTop + deltaY, dom.scrollHeight - dom.clientHeight), 0), animate); + } + + return me; + }, + + /** + * Scrolls this element the specified scroll point. It does NOT do bounds checking so + * if you scroll to a weird value it will try to do it. For auto bounds checking, use #scroll. + * @param {String} side Either "left" for scrollLeft values or "top" for scrollTop values. + * @param {Number} value The new scroll value + * @param {Boolean/Object} [animate] true for the default animation or a standard Element + * animation config object + * @return {Ext.Element} this + */ + scrollTo: function(side, value, animate) { + //check if we're scrolling top or left + var top = /top/i.test(side), + prop = 'scroll' + (top ? 'Top' : 'Left'), + me = this, + dom = me.dom, + animCfg, + prop; + + if (!top) { + value = me.normalizeScrollLeft(value); + } + if (!animate || !me.anim) { + // just setting the value, so grab the direction + dom[prop] = value; + // corrects IE, other browsers will ignore + dom[prop] = value; + } + else { + animCfg = { + to: {} + }; + animCfg.to[prop] = value; + if (Ext.isObject(animate)) { + Ext.applyIf(animCfg, animate); + } + me.animate(animCfg); + } + return me; + }, + + /** + * Scrolls this element into view within the passed container. + * @param {String/HTMLElement/Ext.Element} [container=document.body] The container element + * to scroll. Should be a string (id), dom node, or Ext.Element. + * @param {Boolean} [hscroll=true] False to disable horizontal scroll. + * @param {Boolean/Object} [animate] true for the default animation or a standard Element + * animation config object + * @return {Ext.dom.Element} this + */ + scrollIntoView: function(container, hscroll, animate) { + var me = this, + dom = me.dom, + offsets = me.getOffsetsTo(container = Ext.getDom(container) || Ext.getBody().dom), + // el's box + left = offsets[0] + container.scrollLeft, + top = offsets[1] + container.scrollTop, + bottom = top + dom.offsetHeight, + right = left + dom.offsetWidth, + // ct's box + ctClientHeight = container.clientHeight, + ctScrollTop = parseInt(container.scrollTop, 10), + ctScrollLeft = parseInt(container.scrollLeft, 10), + ctBottom = ctScrollTop + ctClientHeight, + ctRight = ctScrollLeft + container.clientWidth, + newPos; + + // Highlight upon end of scroll + if (animate) { + animate = Ext.apply({ + listeners: { + afteranimate: function() { + me.scrollChildFly.attach(dom).highlight(); + } + } + }, animate); + } + + if (dom.offsetHeight > ctClientHeight || top < ctScrollTop) { + newPos = top; + } else if (bottom > ctBottom) { + newPos = bottom - ctClientHeight; + } + if (newPos != null) { + me.scrollChildFly.attach(container).scrollTo('top', newPos, animate); + } + + if (hscroll !== false) { + newPos = null; + if (dom.offsetWidth > container.clientWidth || left < ctScrollLeft) { + newPos = left; + } else if (right > ctRight) { + newPos = right - container.clientWidth; + } + if (newPos != null) { + me.scrollChildFly.attach(container).scrollTo('left', newPos, animate); + } + } + return me; + }, + + // @private + scrollChildIntoView: function(child, hscroll) { + this.scrollChildFly.attach(Ext.getDom(child)).scrollIntoView(this, hscroll); + }, + + /** + * Scrolls this element the specified direction. Does bounds checking to make sure the scroll is + * within this element's scrollable range. + * @param {String} direction Possible values are: + * + * - `"l"` (or `"left"`) + * - `"r"` (or `"right"`) + * - `"t"` (or `"top"`, or `"up"`) + * - `"b"` (or `"bottom"`, or `"down"`) + * + * @param {Number} distance How far to scroll the element in pixels + * @param {Boolean/Object} [animate] true for the default animation or a standard Element + * animation config object + * @return {Boolean} Returns true if a scroll was triggered or false if the element + * was scrolled as far as it could go. + */ + scroll: function(direction, distance, animate) { + if (!this.isScrollable()) { + return false; + } + var el = this.dom, + l = el.scrollLeft, t = el.scrollTop, + w = el.scrollWidth, h = el.scrollHeight, + cw = el.clientWidth, ch = el.clientHeight, + scrolled = false, v, + hash = { + l: Math.min(l + distance, w - cw), + r: v = Math.max(l - distance, 0), + t: Math.max(t - distance, 0), + b: Math.min(t + distance, h - ch) + }; + + hash.d = hash.b; + hash.u = hash.t; + + direction = direction.substr(0, 1); + if ((v = hash[direction]) > -1) { + scrolled = true; + this.scrollTo(direction == 'l' || direction == 'r' ? 'left' : 'top', v, this.anim(animate)); + } + return scrolled; + } +}, function() { + this.prototype.scrollChildFly = new this.Fly(); + this.prototype.scrolltoFly = new this.Fly(); +}); + +//@tag dom,core +/** + */ +Ext.define('Ext.dom.Element_style', { + override: 'Ext.dom.Element' +}, +function() { + +var Element = this, + view = document.defaultView, + adjustDirect2DTableRe = /table-row|table-.*-group/, + INTERNAL = '_internal', + HIDDEN = 'hidden', + HEIGHT = 'height', + WIDTH = 'width', + ISCLIPPED = 'isClipped', + OVERFLOW = 'overflow', + OVERFLOWX = 'overflow-x', + OVERFLOWY = 'overflow-y', + ORIGINALCLIP = 'originalClip', + DOCORBODYRE = /#document|body/i, + // This reduces the lookup of 'me.styleHooks' by one hop in the prototype chain. It is + // the same object. + styleHooks, verticalStyleHooks90, verticalStyleHooks270, + edges, k, edge, borderWidth; + +if (!view || !view.getComputedStyle) { + Element.prototype.getStyle = function (property, inline) { + var me = this, + dom = me.dom, + multiple = typeof property != 'string', + hooks = me.styleHooks, + prop = property, + props = prop, + len = 1, + isInline = inline, + camel, domStyle, values, hook, out, style, i; + + if (multiple) { + values = {}; + prop = props[0]; + i = 0; + if (!(len = props.length)) { + return values; + } + } + + if (!dom || dom.documentElement) { + return values || ''; + } + + domStyle = dom.style; + + if (inline) { + style = domStyle; + } else { + style = dom.currentStyle; + + // fallback to inline style if rendering context not available + if (!style) { + isInline = true; + style = domStyle; + } + } + + do { + hook = hooks[prop]; + + if (!hook) { + hooks[prop] = hook = { name: Element.normalize(prop) }; + } + + if (hook.get) { + out = hook.get(dom, me, isInline, style); + } else { + camel = hook.name; + + // In some cases, IE6 will throw Invalid Argument exceptions for properties + // like fontSize (/examples/tabs/tabs.html in 4.0 used to exhibit this but + // no longer does due to font style changes). There is a real cost to a try + // block, so we avoid it where possible... + if (hook.canThrow) { + try { + out = style[camel]; + } catch (e) { + out = ''; + } + } else { + // EXTJSIV-5657 - In IE9 quirks mode there is a chance that VML root element + // has neither `currentStyle` nor `style`. Return '' this case. + out = style ? style[camel] : ''; + } + } + + if (!multiple) { + return out; + } + + values[prop] = out; + prop = props[++i]; + } while (i < len); + + return values; + }; +} + +Element.override({ + getHeight: function(contentHeight, preciseHeight) { + var me = this, + hidden = me.isStyle('display', 'none'), + height, + floating; + + if (hidden) { + return 0; + } + + height = me.dom.offsetHeight; + + // IE9/10 Direct2D dimension rounding bug + if (Ext.supports.Direct2DBug) { + floating = me.adjustDirect2DDimension(HEIGHT); + if (preciseHeight) { + height += floating; + } + else if (floating > 0 && floating < 0.5) { + height++; + } + } + + if (contentHeight) { + height -= me.getBorderWidth("tb") + me.getPadding("tb"); + } + + return (height < 0) ? 0 : height; + }, + + getWidth: function(contentWidth, preciseWidth) { + var me = this, + dom = me.dom, + hidden = me.isStyle('display', 'none'), + rect, width, floating; + + if (hidden) { + return 0; + } + + // Gecko will in some cases report an offsetWidth that is actually less than the width of the + // text contents, because it measures fonts with sub-pixel precision but rounds the calculated + // value down. Using getBoundingClientRect instead of offsetWidth allows us to get the precise + // subpixel measurements so we can force them to always be rounded up. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=458617 + // Rounding up ensures that the width includes the full width of the text contents. + if (preciseWidth && Ext.supports.BoundingClientRect) { + rect = dom.getBoundingClientRect(); + // IE9 is the only browser that supports getBoundingClientRect() and + // uses a filter to rotate the element vertically. When a filter + // is used to rotate the element, the getHeight/getWidth functions + // are not inverted (see setVertical). + width = (me.vertical && !Ext.isIE9 && !Ext.supports.RotatedBoundingClientRect) ? + (rect.bottom - rect.top) : (rect.right - rect.left); + } else { + width = dom.offsetWidth; + } + + // IE9/10 Direct2D dimension rounding bug + // there is no need make adjustments for this bug when the element is vertically + // rotated because the width of a vertical element is its rotated height + if (Ext.supports.Direct2DBug && !me.vertical) { + // get the fractional portion of the sub-pixel precision width of the element's text contents + floating = me.adjustDirect2DDimension(WIDTH); + if (preciseWidth) { + width += floating; + } + // IE9 also measures fonts with sub-pixel precision, but unlike Gecko, instead of rounding the offsetWidth down, + // it rounds to the nearest integer. This means that in order to ensure that the width includes the full + // width of the text contents we need to increment the width by 1 only if the fractional portion is less than 0.5 + else if (floating > 0 && floating < 0.5) { + width++; + } + } + + if (contentWidth) { + width -= me.getBorderWidth("lr") + me.getPadding("lr"); + } + + return (width < 0) ? 0 : width; + }, + + setWidth: function(width, animate) { + var me = this; + width = me.adjustWidth(width); + if (!animate || !me.anim) { + me.dom.style.width = me.addUnits(width); + } + else { + if (!Ext.isObject(animate)) { + animate = {}; + } + me.animate(Ext.applyIf({ + to: { + width: width + } + }, animate)); + } + return me; + }, + + setHeight : function(height, animate) { + var me = this; + + height = me.adjustHeight(height); + if (!animate || !me.anim) { + me.dom.style.height = me.addUnits(height); + } + else { + if (!Ext.isObject(animate)) { + animate = {}; + } + me.animate(Ext.applyIf({ + to: { + height: height + } + }, animate)); + } + + return me; + }, + + applyStyles: function(style) { + Ext.DomHelper.applyStyles(this.dom, style); + return this; + }, + + setSize: function(width, height, animate) { + var me = this; + + if (Ext.isObject(width)) { // in case of object from getSize() + animate = height; + height = width.height; + width = width.width; + } + + width = me.adjustWidth(width); + height = me.adjustHeight(height); + + if (!animate || !me.anim) { + me.dom.style.width = me.addUnits(width); + me.dom.style.height = me.addUnits(height); + } + else { + if (animate === true) { + animate = {}; + } + me.animate(Ext.applyIf({ + to: { + width: width, + height: height + } + }, animate)); + } + + return me; + }, + + getViewSize : function() { + var me = this, + dom = me.dom, + isDoc = DOCORBODYRE.test(dom.nodeName), + ret; + + // If the body, use static methods + if (isDoc) { + ret = { + width : Element.getViewWidth(), + height : Element.getViewHeight() + }; + } else { + ret = { + width : dom.clientWidth, + height : dom.clientHeight + }; + } + + return ret; + }, + + getSize: function(contentSize) { + return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)}; + }, + + // TODO: Look at this + + // private ==> used by Fx + adjustWidth : function(width) { + var me = this, + isNum = (typeof width == 'number'); + + if (isNum && me.autoBoxAdjust && !me.isBorderBox()) { + width -= (me.getBorderWidth("lr") + me.getPadding("lr")); + } + return (isNum && width < 0) ? 0 : width; + }, + + // private ==> used by Fx + adjustHeight : function(height) { + var me = this, + isNum = (typeof height == "number"); + + if (isNum && me.autoBoxAdjust && !me.isBorderBox()) { + height -= (me.getBorderWidth("tb") + me.getPadding("tb")); + } + return (isNum && height < 0) ? 0 : height; + }, + + /** + * Return the CSS color for the specified CSS attribute. rgb, 3 digit (like `#fff`) and valid values + * are convert to standard 6 digit hex color. + * @param {String} attr The css attribute + * @param {String} defaultValue The default value to use when a valid color isn't found + * @param {String} [prefix] defaults to #. Use an empty string when working with + * color anims. + */ + getColor : function(attr, defaultValue, prefix) { + var v = this.getStyle(attr), + color = prefix || prefix === '' ? prefix : '#', + h, len, i=0; + + if (!v || (/transparent|inherit/.test(v))) { + return defaultValue; + } + if (/^r/.test(v)) { + v = v.slice(4, v.length - 1).split(','); + len = v.length; + for (; i 5 ? color.toLowerCase() : defaultValue); + }, + + /** + * Set the opacity of the element + * @param {Number} opacity The new opacity. 0 = transparent, .5 = 50% visibile, 1 = fully visible, etc + * @param {Boolean/Object} [animate] a standard Element animation config object or `true` for + * the default animation (`{duration: 350, easing: 'easeIn'}`) + * @return {Ext.dom.Element} this + */ + setOpacity: function(opacity, animate) { + var me = this; + + if (!me.dom) { + return me; + } + + if (!animate || !me.anim) { + me.setStyle('opacity', opacity); + } + else { + if (typeof animate != 'object') { + animate = { + duration: 350, + easing: 'ease-in' + }; + } + + me.animate(Ext.applyIf({ + to: { + opacity: opacity + } + }, animate)); + } + return me; + }, + + /** + * Clears any opacity settings from this element. Required in some cases for IE. + * @return {Ext.dom.Element} this + */ + clearOpacity : function() { + return this.setOpacity(''); + }, + + /** + * @private + * Returns 1 if the browser returns the subpixel dimension rounded to the lowest pixel. + * @return {Number} 0 or 1 + */ + adjustDirect2DDimension: function(dimension) { + var me = this, + dom = me.dom, + display = me.getStyle('display'), + inlineDisplay = dom.style.display, + inlinePosition = dom.style.position, + originIndex = dimension === WIDTH ? 0 : 1, + currentStyle = dom.currentStyle, + floating; + + if (display === 'inline') { + dom.style.display = 'inline-block'; + } + + dom.style.position = display.match(adjustDirect2DTableRe) ? 'absolute' : 'static'; + + // floating will contain digits that appears after the decimal point + // if height or width are set to auto we fallback to msTransformOrigin calculation + + // Use currentStyle here instead of getStyle. In some difficult to reproduce + // instances it resets the scrollWidth of the element + floating = (parseFloat(currentStyle[dimension]) || parseFloat(currentStyle.msTransformOrigin.split(' ')[originIndex]) * 2) % 1; + + dom.style.position = inlinePosition; + + if (display === 'inline') { + dom.style.display = inlineDisplay; + } + + return floating; + }, + + /** + * Store the current overflow setting and clip overflow on the element - use {@link #unclip} to remove + * @return {Ext.dom.Element} this + */ + clip : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + style; + + if (!data[ISCLIPPED]) { + data[ISCLIPPED] = true; + style = me.getStyle([OVERFLOW, OVERFLOWX, OVERFLOWY]); + data[ORIGINALCLIP] = { + o: style[OVERFLOW], + x: style[OVERFLOWX], + y: style[OVERFLOWY] + }; + me.setStyle(OVERFLOW, HIDDEN); + me.setStyle(OVERFLOWX, HIDDEN); + me.setStyle(OVERFLOWY, HIDDEN); + } + return me; + }, + + /** + * Return clipping (overflow) to original clipping before {@link #clip} was called + * @return {Ext.dom.Element} this + */ + unclip : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + clip; + + if (data[ISCLIPPED]) { + data[ISCLIPPED] = false; + clip = data[ORIGINALCLIP]; + if (clip.o) { + me.setStyle(OVERFLOW, clip.o); + } + if (clip.x) { + me.setStyle(OVERFLOWX, clip.x); + } + if (clip.y) { + me.setStyle(OVERFLOWY, clip.y); + } + } + return me; + }, + + /** + * Wraps the specified element with a special 9 element markup/CSS block that renders by default as + * a gray container with a gradient background, rounded corners and a 4-way shadow. + * + * This special markup is used throughout Ext when box wrapping elements ({@link Ext.button.Button}, + * {@link Ext.panel.Panel} when {@link Ext.panel.Panel#frame frame=true}, {@link Ext.window.Window}). + * The markup is of this form: + * + * Ext.dom.Element.boxMarkup = + * '
    + *
    + *
    '; + * + * Example usage: + * + * // Basic box wrap + * Ext.get("foo").boxWrap(); + * + * // You can also add a custom class and use CSS inheritance rules to customize the box look. + * // 'x-box-blue' is a built-in alternative -- look at the related CSS definitions as an example + * // for how to create a custom box wrap style. + * Ext.get("foo").boxWrap().addCls("x-box-blue"); + * + * @param {String} [class='x-box'] A base CSS class to apply to the containing wrapper element. + * Note that there are a number of CSS rules that are dependent on this name to make the overall effect work, + * so if you supply an alternate base class, make sure you also supply all of the necessary rules. + * @return {Ext.dom.Element} The outermost wrapping element of the created box structure. + */ + boxWrap : function(cls) { + cls = cls || Ext.baseCSSPrefix + 'box'; + var el = Ext.get(this.insertHtml("beforeBegin", "
    " + Ext.String.format(Element.boxMarkup, cls) + "
    ")); + Ext.DomQuery.selectNode('.' + cls + '-mc', el.dom).appendChild(this.dom); + return el; + }, + + /** + * Returns either the offsetHeight or the height of this element based on CSS height adjusted by padding or borders + * when needed to simulate offsetHeight when offsets aren't available. This may not work on display:none elements + * if a height has not been set using CSS. + * @return {Number} + */ + getComputedHeight : function() { + var me = this, + h = Math.max(me.dom.offsetHeight, me.dom.clientHeight); + if (!h) { + h = parseFloat(me.getStyle(HEIGHT)) || 0; + if (!me.isBorderBox()) { + h += me.getFrameWidth('tb'); + } + } + return h; + }, + + /** + * Returns either the offsetWidth or the width of this element based on CSS width adjusted by padding or borders + * when needed to simulate offsetWidth when offsets aren't available. This may not work on display:none elements + * if a width has not been set using CSS. + * @return {Number} + */ + getComputedWidth : function() { + var me = this, + w = Math.max(me.dom.offsetWidth, me.dom.clientWidth); + + if (!w) { + w = parseFloat(me.getStyle(WIDTH)) || 0; + if (!me.isBorderBox()) { + w += me.getFrameWidth('lr'); + } + } + return w; + }, + + /** + * Returns the sum width of the padding and borders for the passed "sides". See getBorderWidth() + * for more information about the sides. + * @param {String} sides + * @return {Number} + */ + getFrameWidth : function(sides, onlyContentBox) { + return (onlyContentBox && this.isBorderBox()) ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides)); + }, + + /** + * Sets up event handlers to add and remove a css class when the mouse is over this element + * @param {String} className The class to add + * @param {Function} [testFn] A test function to execute before adding the class. The passed parameter + * will be the Element instance. If this functions returns false, the class will not be added. + * @param {Object} [scope] The scope to execute the testFn in. + * @return {Ext.dom.Element} this + */ + addClsOnOver : function(className, testFn, scope) { + var me = this, + dom = me.dom, + hasTest = Ext.isFunction(testFn); + + me.hover( + function() { + if (hasTest && testFn.call(scope || me, me) === false) { + return; + } + Ext.fly(dom, INTERNAL).addCls(className); + }, + function() { + Ext.fly(dom, INTERNAL).removeCls(className); + } + ); + return me; + }, + + /** + * Sets up event handlers to add and remove a css class when this element has the focus + * @param {String} className The class to add + * @param {Function} [testFn] A test function to execute before adding the class. The passed parameter + * will be the Element instance. If this functions returns false, the class will not be added. + * @param {Object} [scope] The scope to execute the testFn in. + * @return {Ext.dom.Element} this + */ + addClsOnFocus : function(className, testFn, scope) { + var me = this, + dom = me.dom, + hasTest = Ext.isFunction(testFn); + + me.on("focus", function() { + if (hasTest && testFn.call(scope || me, me) === false) { + return false; + } + Ext.fly(dom, INTERNAL).addCls(className); + }); + me.on("blur", function() { + Ext.fly(dom, INTERNAL).removeCls(className); + }); + return me; + }, + + /** + * Sets up event handlers to add and remove a css class when the mouse is down and then up on this element (a click effect) + * @param {String} className The class to add + * @param {Function} [testFn] A test function to execute before adding the class. The passed parameter + * will be the Element instance. If this functions returns false, the class will not be added. + * @param {Object} [scope] The scope to execute the testFn in. + * @return {Ext.dom.Element} this + */ + addClsOnClick : function(className, testFn, scope) { + var me = this, + dom = me.dom, + hasTest = Ext.isFunction(testFn); + + me.on("mousedown", function() { + if (hasTest && testFn.call(scope || me, me) === false) { + return false; + } + Ext.fly(dom, INTERNAL).addCls(className); + var d = Ext.getDoc(), + fn = function() { + Ext.fly(dom, INTERNAL).removeCls(className); + d.removeListener("mouseup", fn); + }; + d.on("mouseup", fn); + }); + return me; + }, + + /** + * Returns the dimensions of the element available to lay content out in. + * + * getStyleSize utilizes prefers style sizing if present, otherwise it chooses the larger of offsetHeight/clientHeight and + * offsetWidth/clientWidth. To obtain the size excluding scrollbars, use getViewSize. + * + * Sizing of the document body is handled at the adapter level which handles special cases for IE and strict modes, etc. + * + * @return {Object} Object describing width and height. + * @return {Number} return.width + * @return {Number} return.height + */ + getStyleSize : function() { + var me = this, + d = this.dom, + isDoc = DOCORBODYRE.test(d.nodeName), + s , + w, h; + + // If the body, use static methods + if (isDoc) { + return { + width : Element.getViewWidth(), + height : Element.getViewHeight() + }; + } + + s = me.getStyle([HEIGHT, WIDTH], true); //seek inline + // Use Styles if they are set + if (s.width && s.width != 'auto') { + w = parseFloat(s.width); + if (me.isBorderBox()) { + w -= me.getFrameWidth('lr'); + } + } + // Use Styles if they are set + if (s.height && s.height != 'auto') { + h = parseFloat(s.height); + if (me.isBorderBox()) { + h -= me.getFrameWidth('tb'); + } + } + // Use getWidth/getHeight if style not set. + return {width: w || me.getWidth(true), height: h || me.getHeight(true)}; + }, + + statics: { + selectableCls: Ext.baseCSSPrefix + 'selectable', + unselectableCls: Ext.baseCSSPrefix + 'unselectable' + }, + + /** + * Enable text selection for this element (normalized across browsers) + * @return {Ext.Element} this + */ + selectable : function() { + var me = this; + + // We clear this property for all browsers, not just Opera. This is so that rendering templates don't need to + // condition on Opera when making elements unselectable. + me.dom.unselectable = ''; + + me.removeCls(Element.unselectableCls); + me.addCls(Element.selectableCls); + + return me; + }, + + /** + * Disables text selection for this element (normalized across browsers) + * @return {Ext.dom.Element} this + */ + unselectable : function() { + // The approach used to disable text selection combines CSS, HTML attributes and DOM events. Importantly the + // strategy is designed to be expressible in markup, so that elements can be rendered unselectable without + // needing modifications post-render. e.g.: + // + //
    + // + // Changes to this method may need to be reflected elsewhere, e.g. ProtoElement. + var me = this; + + // The unselectable property (or similar) is supported by various browsers but Opera is the only browser that + // doesn't support any of the other techniques. The problem with it is that it isn't inherited by child + // elements. Theoretically we could add it to all children but the performance would be terrible. In certain + // key locations (e.g. panel headers) we add unselectable="on" to extra elements during rendering just for + // Opera's benefit. + if (Ext.isOpera) { + me.dom.unselectable = 'on'; + } + + // In Mozilla and WebKit the CSS properties -moz-user-select and -webkit-user-select prevent a selection + // originating in an element. These are inherited, which is what we want. + // + // In IE we rely on a listener for the selectstart event instead. We don't need to register a listener on the + // individual element, instead we use a single listener and rely on event propagation to listen for the event at + // the document level. That listener will walk up the DOM looking for nodes that have either of the classes + // x-selectable or x-unselectable. This simulates the CSS inheritance approach. + // + // IE 10 is expected to support -ms-user-select so the listener may not be required. + me.removeCls(Element.selectableCls); + me.addCls(Element.unselectableCls); + + return me; + }, + + /** + * Changes this Element's state to "vertical" (rotated 90 or 270 degrees). + * This involves inverting the getters and setters for height and width, + * and applying hooks for rotating getters and setters for border/margin/padding. + * (getWidth becomes getHeight and vice versa), setStyle and getStyle will + * also return the inverse when height or width are being operated on. + * + * @param {Number} angle the angle of rotation - either 90 or 270 + * @param {String} cls an optional css class that contains the required + * styles for switching the element to vertical orientation. Omit this if + * the element already contains vertical styling. If cls is provided, + * it will be removed from the element when {@link #setHorizontal} is called. + * @private + */ + setVertical: function(angle, cls) { + var me = this, + proto = Element.prototype, + hooks; + + me.vertical = true; + if (cls) { + me.addCls(me.verticalCls = cls); + } + + me.setWidth = proto.setHeight; + me.setHeight = proto.setWidth; + if (!Ext.isIE9m) { + // In browsers that use CSS3 transforms we must invert getHeight and + // get Width. In IE9 and below no adjustment is needed because we use + // a BasicImage filter to rotate the element and the element's + // offsetWidth and offsetHeight are automatically inverted. + me.getWidth = proto.getHeight; + me.getHeight = proto.getWidth; + } + + // Switch to using the appropriate vertical style hooks + me.styleHooks = (angle === 270) ? + Element.prototype.verticalStyleHooks270 : Element.prototype.verticalStyleHooks90; + }, + + /** + * Removes "vertical" state from this element (reverses everything done + * by {@link #setVertical}). + * @private + */ + setHorizontal: function() { + var me = this, + cls = me.verticalCls; + + delete me.vertical; + if (cls) { + delete me.verticalCls; + me.removeCls(cls); + } + + // delete the inverted methods and revert to inheriting from the prototype + delete me.setWidth; + delete me.setHeight; + if (!Ext.isIE9m) { + delete me.getWidth; + delete me.getHeight; + } + + // revert to inheriting styleHooks from the prototype + delete me.styleHooks; + } +}); + +Element.prototype.styleHooks = styleHooks = Ext.dom.AbstractElement.prototype.styleHooks; + +// When elements are rotated 80 or 270 degrees, their border, margin and padding hooks +// need to be rotated as well. +Element.prototype.verticalStyleHooks90 = verticalStyleHooks90 = Ext.Object.chain(Element.prototype.styleHooks); +Element.prototype.verticalStyleHooks270 = verticalStyleHooks270 = Ext.Object.chain(Element.prototype.styleHooks); + +verticalStyleHooks90.width = { name: 'height' }; +verticalStyleHooks90.height = { name: 'width' }; +verticalStyleHooks90['margin-top'] = { name: 'marginLeft' }; +verticalStyleHooks90['margin-right'] = { name: 'marginTop' }; +verticalStyleHooks90['margin-bottom'] = { name: 'marginRight' }; +verticalStyleHooks90['margin-left'] = { name: 'marginBottom' }; +verticalStyleHooks90['padding-top'] = { name: 'paddingLeft' }; +verticalStyleHooks90['padding-right'] = { name: 'paddingTop' }; +verticalStyleHooks90['padding-bottom'] = { name: 'paddingRight' }; +verticalStyleHooks90['padding-left'] = { name: 'paddingBottom' }; +verticalStyleHooks90['border-top'] = { name: 'borderLeft' }; +verticalStyleHooks90['border-right'] = { name: 'borderTop' }; +verticalStyleHooks90['border-bottom'] = { name: 'borderRight' }; +verticalStyleHooks90['border-left'] = { name: 'borderBottom' }; + +verticalStyleHooks270.width = { name: 'height' }; +verticalStyleHooks270.height = { name: 'width' }; +verticalStyleHooks270['margin-top'] = { name: 'marginRight' }; +verticalStyleHooks270['margin-right'] = { name: 'marginBottom' }; +verticalStyleHooks270['margin-bottom'] = { name: 'marginLeft' }; +verticalStyleHooks270['margin-left'] = { name: 'marginTop' }; +verticalStyleHooks270['padding-top'] = { name: 'paddingRight' }; +verticalStyleHooks270['padding-right'] = { name: 'paddingBottom' }; +verticalStyleHooks270['padding-bottom'] = { name: 'paddingLeft' }; +verticalStyleHooks270['padding-left'] = { name: 'paddingTop' }; +verticalStyleHooks270['border-top'] = { name: 'borderRight' }; +verticalStyleHooks270['border-right'] = { name: 'borderBottom' }; +verticalStyleHooks270['border-bottom'] = { name: 'borderLeft' }; +verticalStyleHooks270['border-left'] = { name: 'borderTop' }; + +if (Ext.isIE7m) { + styleHooks.fontSize = styleHooks['font-size'] = { + name: 'fontSize', + canThrow: true + }; + + styleHooks.fontStyle = styleHooks['font-style'] = { + name: 'fontStyle', + canThrow: true + }; + + styleHooks.fontFamily = styleHooks['font-family'] = { + name: 'fontFamily', + canThrow: true + }; +} + +// override getStyle for border-*-width +if (Ext.isIEQuirks || Ext.isIE && Ext.ieVersion <= 8) { + function getBorderWidth (dom, el, inline, style) { + if (style[this.styleName] == 'none') { + return '0px'; + } + return style[this.name]; + } + + edges = ['Top','Right','Bottom','Left']; + k = edges.length; + + while (k--) { + edge = edges[k]; + borderWidth = 'border' + edge + 'Width'; + + styleHooks['border-'+edge.toLowerCase()+'-width'] = styleHooks[borderWidth] = { + name: borderWidth, + styleName: 'border' + edge + 'Style', + get: getBorderWidth + }; + } +} + +// The following hack is needed to support padding on dom elements with display:table. +// It was added because at one point auto layout's "outerCt" element had padding applied +// to it. The padding is now appplied to the innerCt which is display:table-cell, so this +// hack is not currently needed. +//if (Ext.isIE9 && Ext.isStrict) { +// // In IE9, getComputedStyle always returns 0px for padding if the element has +// // "display:table", so we use currentStyle instead. +// var names = { +// padding: 'padding', +// paddingTop: 'padding-top', +// paddingRight: 'padding-right', +// paddingBottom: 'padding-bottom', +// paddingLeft: 'padding-left' +// }, +// createHook = function(name, camelCaseName) { +// styleHooks[name] = styleHooks[camelCaseName] = { +// name: name, +// get: function(dom) { +// return dom.currentStyle[name]; +// } +// } +// }, +// camelCaseName; +// +// for (camelCaseName in names) { +// createHook(names[camelCaseName], camelCaseName); +// } +//} + +// Element.unselectable relies on this listener to prevent selection in IE. Some other browsers support the event too +// but it is only strictly required for IE. In WebKit this listener causes subtle differences to how the browser handles +// the non-selection, e.g. whether or not the mouse cursor changes when attempting to select text. +Ext.getDoc().on('selectstart', function(ev, dom) { + var doc = document.documentElement, + selectableCls = Element.selectableCls, + unselectableCls = Element.unselectableCls, + tagName = dom && dom.tagName; + + tagName = tagName && tagName.toLowerCase(); + + // Element.unselectable is not really intended to handle selection within text fields and it is important that + // fields inside menus or panel headers don't inherit the unselectability. In most browsers this is automatic but in + // IE 9 the selectstart event can bubble up from text fields so we have to explicitly handle that case. + if (tagName === 'input' || tagName === 'textarea') { + return; + } + + // Walk up the DOM checking the nodes. This may be 'slow' but selectstart events don't fire very often + while (dom && dom.nodeType === 1 && dom !== doc) { + var el = Ext.fly(dom); + + // If the node has the class x-selectable then stop looking, the text selection is allowed + if (el.hasCls(selectableCls)) { + return; + } + + // If the node has class x-unselectable then the text selection needs to be stopped + if (el.hasCls(unselectableCls)) { + ev.stopEvent(); + return; + } + + dom = dom.parentNode; + } +}); + +}); + +Ext.onReady(function () { + var opacityRe = /alpha\(opacity=(.*)\)/i, + trimRe = /^\s+|\s+$/g, + hooks = Ext.dom.Element.prototype.styleHooks; + + // Ext.supports flags are not populated until onReady... + hooks.opacity = { + name: 'opacity', + afterSet: function(dom, value, el) { + if (el.isLayer) { + el.onOpacitySet(value); + } + } + }; + if (!Ext.supports.Opacity && Ext.isIE) { + Ext.apply(hooks.opacity, { + get: function (dom) { + var filter = dom.style.filter, + match, opacity; + if (filter.match) { + match = filter.match(opacityRe); + if (match) { + opacity = parseFloat(match[1]); + if (!isNaN(opacity)) { + return opacity ? opacity / 100 : 0; + } + } + } + return 1; + }, + set: function (dom, value) { + var style = dom.style, + val = style.filter.replace(opacityRe, '').replace(trimRe, ''); + + style.zoom = 1; // ensure dom.hasLayout + + // value can be a number or '' or null... so treat falsey as no opacity + if (typeof(value) == 'number' && value >= 0 && value < 1) { + value *= 100; + style.filter = val + (val.length ? ' ' : '') + 'alpha(opacity='+value+')'; + } else { + style.filter = val; + } + } + }); + } + // else there is no work around for the lack of opacity support. Should not be a + // problem given that this has been supported for a long time now... +}); + +//@tag core +/** + * This mixin provides a common interface for objects that can be positioned, e.g. + * {@link Ext.Component Components} and {@link Ext.dom.Element Elements} + */ +Ext.define('Ext.util.Positionable', { + + _positionTopLeft: ['position', 'top', 'left'], + + _alignRe: /^([a-z]+)-([a-z]+)(\?)?$/, + + // Stub implementation called after positioning. + // May be implemented in subclasses. AbstractComponent has an implementation. + afterSetPosition: Ext.emptyFn, + + // *********************** + // Begin Abstract Methods + // *********************** + + /** + * Gets the x,y coordinates of an element specified by the anchor position on the + * element. + * @param {Ext.dom.Element} el The element + * @param {String} [anchor='tl'] The specified anchor position. + * See {@link #alignTo} for details on supported anchor positions. + * @param {Boolean} [local] True to get the local (element top/left-relative) anchor + * position instead of page coordinates + * @param {Object} [size] An object containing the size to use for calculating anchor + * position {width: (target width), height: (target height)} (defaults to the + * element's current size) + * @return {Number[]} [x, y] An array containing the element's x and y coordinates + * @private + */ + getAnchorToXY: function() { + Ext.Error.raise("getAnchorToXY is not implemented in " + this.$className); + }, + + /** + * Returns the size of the element's borders and padding. + * @return {Object} an object with the following numeric properties + * - beforeX + * - afterX + * - beforeY + * - afterY + * @private + */ + getBorderPadding: function() { + Ext.Error.raise("getBorderPadding is not implemented in " + this.$className); + }, + + /** + * Returns the x coordinate of this element reletive to its `offsetParent`. + * @return {Number} The local x coordinate + */ + getLocalX: function() { + Ext.Error.raise("getLocalX is not implemented in " + this.$className); + }, + + /** + * Returns the x and y coordinates of this element relative to its `offsetParent`. + * @return {Number[]} The local XY position of the element + */ + getLocalXY: function() { + Ext.Error.raise("getLocalXY is not implemented in " + this.$className); + }, + + /** + * Returns the y coordinate of this element reletive to its `offsetParent`. + * @return {Number} The local y coordinate + */ + getLocalY: function() { + Ext.Error.raise("getLocalY is not implemented in " + this.$className); + }, + + /** + * Gets the current X position of the DOM element based on page coordinates. + * @return {Number} The X position of the element + */ + getX: function() { + Ext.Error.raise("getX is not implemented in " + this.$className); + }, + + /** + * Gets the current position of the DOM element based on page coordinates. + * @return {Number[]} The XY position of the element + */ + getXY: function() { + Ext.Error.raise("getXY is not implemented in " + this.$className); + }, + + /** + * Gets the current Y position of the DOM element based on page coordinates. + * @return {Number} The Y position of the element + */ + getY: function() { + Ext.Error.raise("getY is not implemented in " + this.$className); + }, + + /** + * Sets the local x coordinate of this element using CSS style. When used on an + * absolute positioned element this method is symmetrical with {@link #getLocalX}, but + * may not be symmetrical when used on a relatively positioned element. + * @param {Number} x The x coordinate. A value of `null` sets the left style to 'auto'. + * @return {Ext.util.Positionable} this + */ + setLocalX: function() { + Ext.Error.raise("setLocalX is not implemented in " + this.$className); + }, + + /** + * Sets the local x and y coordinates of this element using CSS style. When used on an + * absolute positioned element this method is symmetrical with {@link #getLocalXY}, but + * may not be symmetrical when used on a relatively positioned element. + * @param {Number/Array} x The x coordinate or an array containing [x, y]. A value of + * `null` sets the left style to 'auto' + * @param {Number} [y] The y coordinate, required if x is not an array. A value of + * `null` sets the top style to 'auto' + * @return {Ext.util.Positionable} this + */ + setLocalXY: function() { + Ext.Error.raise("setLocalXY is not implemented in " + this.$className); + }, + + /** + * Sets the local y coordinate of this element using CSS style. When used on an + * absolute positioned element this method is symmetrical with {@link #getLocalY}, but + * may not be symmetrical when used on a relatively positioned element. + * @param {Number} y The y coordinate. A value of `null` sets the top style to 'auto'. + * @return {Ext.util.Positionable} this + */ + setLocalY: function() { + Ext.Error.raise("setLocalY is not implemented in " + this.$className); + }, + + /** + * Sets the X position of the DOM element based on page coordinates. + * @param {Number} The X position + * @param {Boolean/Object} [animate] True for the default animation, or a standard + * Element animation config object + * @return {Ext.util.Positionable} this + */ + setX: function() { + Ext.Error.raise("setX is not implemented in " + this.$className); + }, + + /** + * Sets the position of the DOM element in page coordinates. + * @param {Number[]} pos Contains X & Y [x, y] values for new position (coordinates + * are page-based) + * @param {Boolean/Object} [animate] True for the default animation, or a standard + * Element animation config object + * @return {Ext.util.Positionable} this + */ + setXY: function() { + Ext.Error.raise("setXY is not implemented in " + this.$className); + }, + + /** + * Sets the Y position of the DOM element based on page coordinates. + * @param {Number} The Y position + * @param {Boolean/Object} [animate] True for the default animation, or a standard + * Element animation config object + * @return {Ext.util.Positionable} this + */ + setY: function() { + Ext.Error.raise("setY is not implemented in " + this.$className); + }, + + // *********************** + // End Abstract Methods + // *********************** + + // private ==> used outside of core + // TODO: currently only used by ToolTip. does this method belong here? + adjustForConstraints: function(xy, parent) { + var vector = this.getConstrainVector(parent, xy); + if (vector) { + xy[0] += vector[0]; + xy[1] += vector[1]; + } + return xy; + }, + + /** + * Aligns the element with another element relative to the specified anchor points. If + * the other element is the document it aligns it to the viewport. The position + * parameter is optional, and can be specified in any one of the following formats: + * + * - **Blank**: Defaults to aligning the element's top-left corner to the target's + * bottom-left corner ("tl-bl"). + * - **One anchor (deprecated)**: The passed anchor position is used as the target + * element's anchor point. The element being aligned will position its top-left + * corner (tl) to that point. *This method has been deprecated in favor of the newer + * two anchor syntax below*. + * - **Two anchors**: If two values from the table below are passed separated by a dash, + * the first value is used as the element's anchor point, and the second value is + * used as the target's anchor point. + * + * In addition to the anchor points, the position parameter also supports the "?" + * character. If "?" is passed at the end of the position string, the element will + * attempt to align as specified, but the position will be adjusted to constrain to + * the viewport if necessary. Note that the element being aligned might be swapped to + * align to a different position than that specified in order to enforce the viewport + * constraints. Following are all of the supported anchor positions: + * + *
    +     * Value  Description
    +     * -----  -----------------------------
    +     * tl     The top left corner (default)
    +     * t      The center of the top edge
    +     * tr     The top right corner
    +     * l      The center of the left edge
    +     * c      In the center of the element
    +     * r      The center of the right edge
    +     * bl     The bottom left corner
    +     * b      The center of the bottom edge
    +     * br     The bottom right corner
    +     * 
    + * + * Example Usage: + * + * // align el to other-el using the default positioning + * // ("tl-bl", non-constrained) + * el.alignTo("other-el"); + * + * // align the top left corner of el with the top right corner of other-el + * // (constrained to viewport) + * el.alignTo("other-el", "tr?"); + * + * // align the bottom right corner of el with the center left edge of other-el + * el.alignTo("other-el", "br-l?"); + * + * // align the center of el with the bottom left corner of other-el and + * // adjust the x position by -6 pixels (and the y position by 0) + * el.alignTo("other-el", "c-bl", [-6, 0]); + * + * @param {Ext.util.Positionable/HTMLElement/String} element The Positionable, + * HTMLElement, or id of the element to align to. + * @param {String} [position="tl-bl?"] The position to align to + * @param {Number[]} [offsets] Offset the positioning by [x, y] + * @param {Boolean/Object} [animate] true for the default animation or a standard + * Element animation config object + * @return {Ext.util.Positionable} this + */ + alignTo: function(element, position, offsets, animate) { + var me = this, + el = me.el; + + return me.setXY(me.getAlignToXY(element, position, offsets), + el.anim && !!animate ? el.anim(animate) : false); + }, + + /** + * Anchors an element to another element and realigns it when the window is resized. + * @param {Ext.util.Positionable/HTMLElement/String} element The Positionable, + * HTMLElement, or id of the element to align to. + * @param {String} [position="tl-bl?"] The position to align to + * @param {Number[]} [offsets] Offset the positioning by [x, y] + * @param {Boolean/Object} [animate] true for the default animation or a standard + * Element animation config object + * @param {Boolean/Number} [monitorScroll=50] True to monitor body scroll and + * reposition. If this parameter is a number, it is used as the buffer delay in + * milliseconds. + * @param {Function} [callback] The function to call after the animation finishes + * @return {Ext.util.Positionable} this + */ + anchorTo: function(anchorToEl, alignment, offsets, animate, monitorScroll, callback) { + var me = this, + scroll = !Ext.isEmpty(monitorScroll), + action = function() { + me.alignTo(anchorToEl, alignment, offsets, animate); + Ext.callback(callback, me); + }, + anchor = me.getAnchor(); + + // previous listener anchor, remove it + me.removeAnchor(); + Ext.apply(anchor, { + fn: action, + scroll: scroll + }); + + Ext.EventManager.onWindowResize(action, null); + + if (scroll) { + Ext.EventManager.on(window, 'scroll', action, null, + {buffer: !isNaN(monitorScroll) ? monitorScroll : 50}); + } + action(); // align immediately + return me; + }, + + /** + * Calculates x,y coordinates specified by the anchor position on the element, adding + * extraX and extraY values. + * @param {String} [anchor='tl'] The specified anchor position. + * See {@link #alignTo} for details on supported anchor positions. + * @param {Number} [extraX] value to be added to the x coordinate + * @param {Number} [extraY] value to be added to the y coordinate + * @param {Object} [size] An object containing the size to use for calculating anchor + * position {width: (target width), height: (target height)} (defaults to the + * element's current size) + * @return {Number[]} [x, y] An array containing the element's x and y coordinates + * @private + */ + calculateAnchorXY: function(anchor, extraX, extraY, mySize) { + //Passing a different size is useful for pre-calculating anchors, + //especially for anchored animations that change the el size. + var me = this, + el = me.el, + doc = document, + isViewport = el.dom == doc.body || el.dom == doc, + round = Math.round, + xy, myWidth, myHeight; + + anchor = (anchor || "tl").toLowerCase(); + mySize = mySize || {}; + + myWidth = mySize.width || isViewport ? Ext.Element.getViewWidth() : me.getWidth(); + myHeight = mySize.height || isViewport ? Ext.Element.getViewHeight() : me.getHeight(); + + // Calculate anchor position. + // Test most common cases for picker alignment first. + switch (anchor) { + case 'tl' : xy = [0, 0]; + break; + case 'bl' : xy = [0, myHeight]; + break; + case 'tr' : xy = [myWidth, 0]; + break; + case 'c' : xy = [round(myWidth * 0.5), round(myHeight * 0.5)]; + break; + case 't' : xy = [round(myWidth * 0.5), 0]; + break; + case 'l' : xy = [0, round(myHeight * 0.5)]; + break; + case 'r' : xy = [myWidth, round(myHeight * 0.5)]; + break; + case 'b' : xy = [round(myWidth * 0.5), myHeight]; + break; + case 'tc' : xy = [round(myWidth * 0.5), 0]; + break; + case 'bc' : xy = [round(myWidth * 0.5), myHeight]; + break; + case 'br' : xy = [myWidth, myHeight]; + } + return [xy[0] + extraX, xy[1] + extraY]; + }, + + /** + * By default this method does nothing but return the position spec passed to it. In + * rtl mode it is overridden to convert "l" to "r" and vice versa when required. + * @private + */ + convertPositionSpec: function(posSpec) { + return posSpec; + }, + + /** + * Gets the x,y coordinates to align this element with another element. See + * {@link #alignTo} for more info on the supported position values. + * @param {Ext.util.Positionable/HTMLElement/String} element The Positionable, + * HTMLElement, or id of the element to align to. + * @param {String} [position="tl-bl?"] The position to align to + * @param {Number[]} [offsets] Offset the positioning by [x, y] + * @return {Number[]} [x, y] + */ + getAlignToXY: function(alignToEl, posSpec, offset) { + var me = this, + viewportWidth = Ext.Element.getViewWidth() - 10, // 10px of margin for ie + viewportHeight = Ext.Element.getViewHeight() - 10, // 10px of margin for ie + doc = document, + docElement = doc.documentElement, + docBody = doc.body, + scrollX = (docElement.scrollLeft || docBody.scrollLeft || 0), + scrollY = (docElement.scrollTop || docBody.scrollTop || 0), + alignMatch, myPosition, alignToElPosition, myWidth, myHeight, + alignToElRegion, swapY, swapX, constrain, align1, align2, + p1y, p1x, p2y, p2x, x, y; + + alignToEl = Ext.get(alignToEl.el || alignToEl); + + if (!alignToEl || !alignToEl.dom) { + Ext.Error.raise({ + sourceClass: 'Ext.util.Positionable', + sourceMethod: 'getAlignToXY', + msg: 'Attempted to align an element that doesn\'t exist' + }); + } + + offset = offset || [0,0]; + posSpec = (!posSpec || posSpec == "?" ? "tl-bl?" : + (!(/-/).test(posSpec) && posSpec !== "" ? "tl-" + posSpec : posSpec || "tl-bl")).toLowerCase(); + + posSpec = me.convertPositionSpec(posSpec); + + alignMatch = posSpec.match(me._alignRe); + + if (!alignMatch) { + Ext.Error.raise({ + sourceClass: 'Ext.util.Positionable', + sourceMethod: 'getAlignToXY', + el: alignToEl, + position: posSpec, + offset: offset, + msg: 'Attemmpted to align an element with an invalid position: "' + posSpec + '"' + }); + } + + align1 = alignMatch[1]; + align2 = alignMatch[2]; + constrain = !!alignMatch[3]; + + //Subtract the aligned el's internal xy from the target's offset xy + //plus custom offset to get this Element's new offset xy + myPosition = me.getAnchorXY(align1, true); + alignToElPosition = me.getAnchorToXY(alignToEl, align2, false); + + x = alignToElPosition[0] - myPosition[0] + offset[0]; + y = alignToElPosition[1] - myPosition[1] + offset[1]; + + // If position spec ended with a "?", then constrain to viewport is necessary + if (constrain) { + myWidth = me.getWidth(); + myHeight = me.getHeight(); + alignToElRegion = alignToEl.getRegion(); + // If we are at a viewport boundary and the aligned el is anchored + // on a target border that is perpendicular to the vp border, + // allow the aligned el to slide on that border, otherwise swap + // the aligned el to the opposite border of the target. + p1y = align1.charAt(0); + p1x = align1.charAt(align1.length - 1); + p2y = align2.charAt(0); + p2x = align2.charAt(align2.length - 1); + swapY = ((p1y == "t" && p2y == "b") || (p1y == "b" && p2y == "t")); + swapX = ((p1x == "r" && p2x == "l") || (p1x == "l" && p2x == "r")); + + if (x + myWidth > viewportWidth + scrollX) { + x = swapX ? alignToElRegion.left - myWidth : viewportWidth + scrollX - myWidth; + } + if (x < scrollX) { + x = swapX ? alignToElRegion.right : scrollX; + } + if (y + myHeight > viewportHeight + scrollY) { + y = swapY ? alignToElRegion.top - myHeight : viewportHeight + scrollY - myHeight; + } + if (y < scrollY) { + y = swapY ? alignToElRegion.bottom : scrollY; + } + } + return [x,y]; + }, + + // private + getAnchor: function(){ + var el = this.el, + data = (el.$cache || el.getCache()).data, + anchor; + + if (!el.dom) { + return; + } + anchor = data._anchor; + + if(!anchor){ + anchor = data._anchor = {}; + } + return anchor; + }, + + /** + * Gets the x,y coordinates specified by the anchor position on the element. + * @param {String} [anchor='tl'] The specified anchor position. + * See {@link #alignTo} for details on supported anchor positions. + * @param {Boolean} [local] True to get the local (element top/left-relative) anchor + * position instead of page coordinates + * @param {Object} [size] An object containing the size to use for calculating anchor + * position {width: (target width), height: (target height)} (defaults to the + * element's current size) + * @return {Number[]} [x, y] An array containing the element's x and y coordinates + */ + getAnchorXY: function(anchor, local, mySize) { + var me = this, + myPos = me.getXY(), + el = me.el, + doc = document, + isViewport = el.dom == doc.body || el.dom == doc, + scroll = el.getScroll(), + extraX = isViewport ? scroll.left : local ? 0 : myPos[0], + extraY = isViewport ? scroll.top : local ? 0 : myPos[1]; + + return me.calculateAnchorXY(anchor, extraX, extraY, mySize); + }, + + /** + * Return an object defining the area of this Element which can be passed to + * {@link #setBox} to set another Element's size/location to match this element. + * + * @param {Boolean} [contentBox] If true a box for the content of the element is + * returned. + * @param {Boolean} [local] If true the element's left and top relative to its + * `offsetParent` are returned instead of page x/y. + * @return {Object} box An object in the format: + * + * { + * x: , + * y: , + * left: , + * top: , + * width: , + * height: , + * bottom: , + * right: + * } + * + * The returned object may also be addressed as an Array where index 0 contains the X + * position and index 1 contains the Y position. The result may also be used for + * {@link #setXY} + */ + getBox: function(contentBox, local) { + var me = this, + xy = local ? me.getLocalXY() : me.getXY(), + x = xy[0], + y = xy[1], + w = me.getWidth(), + h = me.getHeight(), + borderPadding, beforeX, beforeY; + + if (contentBox) { + borderPadding = me.getBorderPadding(); + beforeX = borderPadding.beforeX; + beforeY = borderPadding.beforeY; + + x += beforeX; + y += beforeY; + w -= (beforeX + borderPadding.afterX); + h -= (beforeY + borderPadding.afterY); + } + + return { + x: x, + left: x, + 0: x, + y: y, + top: y, + 1: y, + width: w, + height: h, + right: x + w, + bottom: y + h + }; + }, + + /** + * Calculates the new [x,y] position to move this Positionable into a constrain region. + * + * By default, this Positionable is constrained to be within the container it was added to, or the element it was + * rendered to. + * + * Priority is given to constraining the top and left within the constraint. + * + * An alternative constraint may be passed. + * @param {String/HTMLElement/Ext.Element/Ext.util.Region} [constrainTo] The Element or {@link Ext.util.Region Region} + * into which this Component is to be constrained. Defaults to the element into which this Positionable + * was rendered, or this Component's {@link Ext.Component#constrainTo. + * @param {Number[]} [proposedPosition] A proposed `[X, Y]` position to test for validity + * and to coerce into constraints instead of using this Positionable's current position. + * @param {Boolean} [local] The proposedPosition is local *(relative to floatParent if a floating Component)* + * @param {Number[]} [proposedSize] A proposed `[width, height]` size to use when calculating + * constraints instead of using this Positionable's current size. + * @return {Number[]} **If** the element *needs* to be translated, the new `[X, Y]` position within + * constraints if possible, giving priority to keeping the top and left edge in the constrain region. + * Otherwise, `false`. + */ + calculateConstrainedPosition: function(constrainTo, proposedPosition, local, proposedSize) { + var me = this, + vector, + fp = me.floatParent, + parentNode = fp ? fp.getTargetEl() : null, + parentOffset, + borderPadding, + proposedConstrainPosition, + xy = false; + + if (local && fp) { + parentOffset = parentNode.getXY(); + borderPadding = parentNode.getBorderPadding(); + parentOffset[0] += borderPadding.beforeX; + parentOffset[1] += borderPadding.beforeY; + if (proposedPosition) { + proposedConstrainPosition = [proposedPosition[0] + parentOffset[0], proposedPosition[1] + parentOffset[1]]; + } + } else { + proposedConstrainPosition = proposedPosition; + } + // Calculate the constrain vector to coerce our position to within our + // constrainTo setting. getConstrainVector will provide a default constraint + // region if there is no explicit constrainTo, *and* there is no floatParent owner Component. + constrainTo = constrainTo || me.constrainTo || parentNode || me.container || me.el.parent(); + vector = (me.constrainHeader ? me.header.el : me.el).getConstrainVector(constrainTo, proposedConstrainPosition, proposedSize); + + // false is returned if no movement is needed + if (vector) { + xy = proposedPosition || me.getPosition(local); + xy[0] += vector[0]; + xy[1] += vector[1]; + } + return xy; + }, + + /** + * Returns the `[X, Y]` vector by which this Positionable's element must be translated to make a best + * attempt to constrain within the passed constraint. Returns `false` if the element + * does not need to be moved. + * + * Priority is given to constraining the top and left within the constraint. + * + * The constraint may either be an existing element into which the element is to be + * constrained, or a {@link Ext.util.Region Region} into which this element is to be + * constrained. + * + * By default, any extra shadow around the element is **not** included in the constrain calculations - the edges + * of the element are used as the element bounds. To constrain the shadow within the constrain region, set the + * `constrainShadow` property on this element to `true`. + * + * @param {Ext.util.Positionable/HTMLElement/String/Ext.util.Region} [constrainTo] The + * Positionable, HTMLElement, element id, or Region into which the element is to be + * constrained. + * @param {Number[]} [proposedPosition] A proposed `[X, Y]` position to test for validity + * and to produce a vector for instead of using the element's current position + * @param {Number[]} [proposedSize] A proposed `[width, height]` size to constrain + * instead of using the element's current size + * @return {Number[]/Boolean} **If** the element *needs* to be translated, an `[X, Y]` + * vector by which this element must be translated. Otherwise, `false`. + */ + getConstrainVector: function(constrainTo, proposedPosition, proposedSize) { + var thisRegion = this.getRegion(), + vector = [0, 0], + shadowSize = (this.shadow && this.constrainShadow && !this.shadowDisabled) ? this.shadow.getShadowSize() : undefined, + overflowed = false; + + if (!(constrainTo instanceof Ext.util.Region)) { + constrainTo = Ext.get(constrainTo.el || constrainTo).getViewRegion(); + } + + // Shift this region to occupy the proposed position + if (proposedPosition) { + thisRegion.translateBy(proposedPosition[0] - thisRegion.x, proposedPosition[1] - thisRegion.y); + } + // Set the size of this region to the proposed size + if (proposedSize) { + thisRegion.right = thisRegion.left + proposedSize[0]; + thisRegion.bottom = thisRegion.top + proposedSize[1]; + } + + // Reduce the constrain region to allow for shadow + if (shadowSize) { + constrainTo.adjust(shadowSize[0], -shadowSize[1], -shadowSize[2], shadowSize[3]); + } + + // Constrain the X coordinate by however much this Element overflows + if (thisRegion.right > constrainTo.right) { + overflowed = true; + vector[0] = (constrainTo.right - thisRegion.right); // overflowed the right + } + if (thisRegion.left + vector[0] < constrainTo.left) { + overflowed = true; + vector[0] = (constrainTo.left - thisRegion.left); // overflowed the left + } + + // Constrain the Y coordinate by however much this Element overflows + if (thisRegion.bottom > constrainTo.bottom) { + overflowed = true; + vector[1] = (constrainTo.bottom - thisRegion.bottom); // overflowed the bottom + } + if (thisRegion.top + vector[1] < constrainTo.top) { + overflowed = true; + vector[1] = (constrainTo.top - thisRegion.top); // overflowed the top + } + return overflowed ? vector : false; + }, + + /** + * Returns the offsets of this element from the passed element. The element must both + * be part of the DOM tree and not have display:none to have page coordinates. + * @param {Ext.util.Positionable/HTMLElement/String} offsetsTo The Positionable, + * HTMLElement, or element id to get get the offsets from. + * @return {Number[]} The XY page offsets (e.g. `[100, -200]`) + */ + getOffsetsTo: function(offsetsTo) { + var o = this.getXY(), + e = Ext.fly(offsetsTo.el || offsetsTo, '_internal').getXY(); + return [o[0] - e[0],o[1] - e[1]]; + }, + + /** + * Returns a region object that defines the area of this element. + * @return {Ext.util.Region} A Region containing "top, left, bottom, right" properties. + */ + getRegion: function() { + var box = this.getBox(); + return new Ext.util.Region(box.top, box.right, box.bottom, box.left); + }, + + /** + * Returns the **content** region of this element. That is the region within the borders + * and padding. + * @return {Ext.util.Region} A Region containing "top, left, bottom, right" member data. + */ + getViewRegion: function() { + var me = this, + el = me.el, + isBody = el.dom.nodeName === 'BODY', + borderPadding, scroll, pos, top, left, width, height; + + // For the body we want to do some special logic + if (isBody) { + scroll = el.getScroll(); + left = scroll.left; + top = scroll.top; + width = Ext.dom.AbstractElement.getViewportWidth(); + height = Ext.dom.AbstractElement.getViewportHeight(); + } + else { + borderPadding = me.getBorderPadding(); + pos = me.getXY(); + left = pos[0] + borderPadding.beforeX; + top = pos[1] + borderPadding.beforeY; + width = me.getWidth(true); + height = me.getHeight(true); + } + + return new Ext.util.Region(top, left + width, top + height, left); + }, + + /** + * Move the element relative to its current position. + * @param {String} direction Possible values are: + * + * - `"l"` (or `"left"`) + * - `"r"` (or `"right"`) + * - `"t"` (or `"top"`, or `"up"`) + * - `"b"` (or `"bottom"`, or `"down"`) + * + * @param {Number} distance How far to move the element in pixels + * @param {Boolean/Object} [animate] true for the default animation or a standard + * Element animation config object + */ + move: function(direction, distance, animate) { + var me = this, + xy = me.getXY(), + x = xy[0], + y = xy[1], + left = [x - distance, y], + right = [x + distance, y], + top = [x, y - distance], + bottom = [x, y + distance], + hash = { + l: left, + left: left, + r: right, + right: right, + t: top, + top: top, + up: top, + b: bottom, + bottom: bottom, + down: bottom + }; + + direction = direction.toLowerCase(); + me.setXY([hash[direction][0], hash[direction][1]], animate); + }, + + /** + * Remove any anchor to this element. See {@link #anchorTo}. + * @return {Ext.util.Positionable} this + */ + removeAnchor: function() { + var anchor = this.getAnchor(); + + if (anchor && anchor.fn) { + Ext.EventManager.removeResizeListener(anchor.fn); + if (anchor.scroll) { + Ext.EventManager.un(window, 'scroll', anchor.fn); + } + delete anchor.fn; + } + return this; + }, + + /** + * Sets the element's box. If animate is true then x, y, width, and height will be + * animated concurrently. + * @param {Object} box The box to fill {x, y, width, height} + * @param {Boolean/Object} [animate] true for the default animation or a standard + * Element animation config object + * @return {Ext.util.Positionable} this + */ + setBox: function(box, animate) { + var me = this, + el = me.el, + x = box.x, + y = box.y, + xy = [x, y], + w = box.width, + h = box.height, + constrainedPos = me.constrain && me.calculateConstrainedPosition(null, [x, y], false, [w, h]); + + // Position to the contrained + if (constrainedPos) { + x = constrainedPos[0]; + y = constrainedPos[1]; + } + if (!animate || !el.anim) { + me.setSize(w, h); + me.setXY([x, y]); + me.afterSetPosition(x, y); + } else { + me.animate(Ext.applyIf({ + to: { + x: x, + y: y, + width: el.adjustWidth(w), + height: el.adjustHeight(h) + }, + listeners: { + afteranimate: Ext.Function.bind(me.afterSetPosition, me, [x, y]) + } + }, animate)); + } + return me; + }, + + /** + * Sets the element's position and size to the specified region. If animation is true + * then width, height, x and y will be animated concurrently. + * + * @param {Ext.util.Region} region The region to fill + * @param {Boolean/Object} [animate] true for the default animation or a standard + * Element animation config object + * @return {Ext.util.Positionable} this + */ + setRegion: function(region, animate) { + return this.setBox({ + x: region.left, + y: region.top, + width: region.right - region.left, + height: region.bottom - region.top + }, animate); + }, + + /** + * Translates the passed page coordinates into left/top css values for the element + * @param {Number/Array} x The page x or an array containing [x, y] + * @param {Number} [y] The page y, required if x is not an array + * @return {Object} An object with left and top properties. e.g. + * {left: (value), top: (value)} + */ + translatePoints: function(x, y) { + var pos = this.translateXY(x, y); + + return { + left: pos.x, + top: pos.y + }; + }, + + /** + * Translates the passed page coordinates into x and y css values for the element + * @param {Number/Array} x The page x or an array containing [x, y] + * @param {Number} [y] The page y, required if x is not an array + * @return {Object} An object with x and y properties. e.g. + * {x: (value), y: (value)} + * @private + */ + translateXY: function(x, y) { + var me = this, + el = me.el, + styles = el.getStyle(me._positionTopLeft), + relative = styles.position == 'relative', + left = parseFloat(styles.left), + top = parseFloat(styles.top), + xy = me.getXY(); + + if (Ext.isArray(x)) { + y = x[1]; + x = x[0]; + } + if (isNaN(left)) { + left = relative ? 0 : el.dom.offsetLeft; + } + if (isNaN(top)) { + top = relative ? 0 : el.dom.offsetTop; + } + left = (typeof x == 'number') ? x - xy[0] + left : undefined; + top = (typeof y == 'number') ? y - xy[1] + top : undefined; + return { + x: left, + y: top + }; + } +}); + +//@tag dom,core +/** + * @class Ext.dom.Element + * @alternateClassName Ext.Element + * @alternateClassName Ext.core.Element + * @extends Ext.dom.AbstractElement + * + * Encapsulates a DOM element, adding simple DOM manipulation facilities, normalizing for browser differences. + * + * All instances of this class inherit the methods of {@link Ext.fx.Anim} making visual effects easily available to all + * DOM elements. + * + * Note that the events documented in this class are not Ext events, they encapsulate browser events. Some older browsers + * may not support the full range of events. Which events are supported is beyond the control of Ext JS. + * + * Usage: + * + * // by id + * var el = Ext.get("my-div"); + * + * // by DOM element reference + * var el = Ext.get(myDivElement); + * + * # Animations + * + * When an element is manipulated, by default there is no animation. + * + * var el = Ext.get("my-div"); + * + * // no animation + * el.setWidth(100); + * + * Many of the functions for manipulating an element have an optional "animate" parameter. This parameter can be + * specified as boolean (true) for default animation effects. + * + * // default animation + * el.setWidth(100, true); + * + * To configure the effects, an object literal with animation options to use as the Element animation configuration + * object can also be specified. Note that the supported Element animation configuration options are a subset of the + * {@link Ext.fx.Anim} animation options specific to Fx effects. The supported Element animation configuration options + * are: + * + * Option Default Description + * --------- -------- --------------------------------------------- + * {@link Ext.fx.Anim#duration duration} 350 The duration of the animation in milliseconds + * {@link Ext.fx.Anim#easing easing} easeOut The easing method + * {@link Ext.fx.Anim#callback callback} none A function to execute when the anim completes + * {@link Ext.fx.Anim#scope scope} this The scope (this) of the callback function + * + * Usage: + * + * // Element animation options object + * var opt = { + * {@link Ext.fx.Anim#duration duration}: 1000, + * {@link Ext.fx.Anim#easing easing}: 'elasticIn', + * {@link Ext.fx.Anim#callback callback}: this.foo, + * {@link Ext.fx.Anim#scope scope}: this + * }; + * // animation with some options set + * el.setWidth(100, opt); + * + * The Element animation object being used for the animation will be set on the options object as "anim", which allows + * you to stop or manipulate the animation. Here is an example: + * + * // using the "anim" property to get the Anim object + * if(opt.anim.isAnimated()){ + * opt.anim.stop(); + * } + * + * # Composite (Collections of) Elements + * + * For working with collections of Elements, see {@link Ext.CompositeElement} + * + * @constructor + * Creates new Element directly. + * @param {String/HTMLElement} element + * @param {Boolean} [forceNew] By default the constructor checks to see if there is already an instance of this + * element in the cache and if there is it returns the same instance. This will skip that check (useful for extending + * this class). + * @return {Object} + */ +Ext.define('Ext.dom.Element', function(Element) { + var HIDDEN = 'hidden', + DOC = document, + VISIBILITY = "visibility", + DISPLAY = "display", + NONE = "none", + XMASKED = Ext.baseCSSPrefix + "masked", + XMASKEDRELATIVE = Ext.baseCSSPrefix + "masked-relative", + EXTELMASKMSG = Ext.baseCSSPrefix + "mask-msg", + bodyRe = /^body/i, + visFly, + + // speedy lookup for elements never to box adjust + noBoxAdjust = Ext.isStrict ? { + select: 1 + }: { + input: 1, + select: 1, + textarea: 1 + }, + + // Pseudo for use by cacheScrollValues + isScrolled = function(c) { + var r = [], ri = -1, + i, ci; + for (i = 0; ci = c[i]; i++) { + if (ci.scrollTop > 0 || ci.scrollLeft > 0) { + r[++ri] = ci; + } + } + return r; + }; + + return { + + extend: Ext.dom.AbstractElement , + + alternateClassName: ['Ext.Element', 'Ext.core.Element'], + + + + + + + + + + + + tableTagRe: /^(?:tr|td|table|tbody)$/i, + + mixins: [ + Ext.util.Positionable + ], + + addUnits: function() { + return Element.addUnits.apply(Element, arguments); + }, + + /** + * Tries to focus the element. Any exceptions are caught and ignored. + * @param {Number} [defer] Milliseconds to defer the focus + * @return {Ext.dom.Element} this + */ + focus: function(defer, /* private */ dom) { + var me = this; + + dom = dom || me.dom; + try { + if (Number(defer)) { + Ext.defer(me.focus, defer, me, [null, dom]); + } else { + dom.focus(); + } + } catch(e) { + } + return me; + }, + + /** + * Tries to blur the element. Any exceptions are caught and ignored. + * @return {Ext.dom.Element} this + */ + blur: function() { + var me = this, + dom = me.dom; + // In IE, blurring the body can cause the browser window to hide. + // Blurring the body is redundant, so instead we just focus it + if (dom !== document.body) { + try { + dom.blur(); + } catch(e) { + } + return me; + } else { + return me.focus(undefined, dom); + } + }, + + /** + * Tests various css rules/browsers to determine if this element uses a border box + * @return {Boolean} + */ + isBorderBox: function() { + var box = Ext.isBorderBox; + + // IE6/7 force input elements to content-box even if border-box is set explicitly + if (box && Ext.isIE7m) { + box = !((this.dom.tagName || "").toLowerCase() in noBoxAdjust); + } + return box; + }, + + /** + * Sets up event handlers to call the passed functions when the mouse is moved into and out of the Element. + * @param {Function} overFn The function to call when the mouse enters the Element. + * @param {Function} outFn The function to call when the mouse leaves the Element. + * @param {Object} [scope] The scope (`this` reference) in which the functions are executed. Defaults + * to the Element's DOM element. + * @param {Object} [options] Options for the listener. See {@link Ext.util.Observable#addListener the + * options parameter}. + * @return {Ext.dom.Element} this + */ + hover: function(overFn, outFn, scope, options) { + var me = this; + me.on('mouseenter', overFn, scope || me.dom, options); + me.on('mouseleave', outFn, scope || me.dom, options); + return me; + }, + + /** + * Returns the value of a namespaced attribute from the element's underlying DOM node. + * @param {String} namespace The namespace in which to look for the attribute + * @param {String} name The attribute name + * @return {String} The attribute value + */ + getAttributeNS: function(ns, name) { + return this.getAttribute(name, ns); + }, + + getAttribute: (Ext.isIE && !(Ext.isIE9p && DOC.documentMode >= 9)) ? + + // Essentially all web browsers (Firefox, Internet Explorer, recent versions of Opera, Safari, Konqueror, and iCab, + // as a non-exhaustive list) return null when the specified attribute does not exist on the specified element. + // The DOM specification says that the correct return value in this case is actually the empty string, and some + // DOM implementations implement this behavior. The implementation of getAttribute in XUL (Gecko) actually follows + // the specification and returns an empty string. Consequently, you should use hasAttribute to check for an attribute's + // existence prior to calling getAttribute() if it is possible that the requested attribute does not exist on the specified element. + // + // https://developer.mozilla.org/en-US/docs/DOM/element.getAttribute + // http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-745549614 + + function(name, ns) { + var d = this.dom, + type; + if (ns) { + type = typeof d[ns + ":" + name]; + if (type != 'undefined' && type != 'unknown') { + return d[ns + ":" + name] || null; + } + return null; + } + if (name === "for") { + name = "htmlFor"; + } + return d[name] || null; + } : function(name, ns) { + var d = this.dom; + if (ns) { + return d.getAttributeNS(ns, name) || d.getAttribute(ns + ":" + name); + } + return d.getAttribute(name) || d[name] || null; + }, + + /** + * When an element is moved around in the DOM, or is hidden using `display:none`, it loses layout, and therefore + * all scroll positions of all descendant elements are lost. + * + * This function caches them, and returns a function, which when run will restore the cached positions. + * In the following example, the Panel is moved from one Container to another which will cause it to lose all scroll positions: + * + * var restoreScroll = myPanel.el.cacheScrollValues(); + * myOtherContainer.add(myPanel); + * restoreScroll(); + * + * @return {Function} A function which will restore all descentant elements of this Element to their scroll + * positions recorded when this function was executed. Be aware that the returned function is a closure which has + * captured the scope of `cacheScrollValues`, so take care to derefence it as soon as not needed - if is it is a `var` + * it will drop out of scope, and the reference will be freed. + */ + cacheScrollValues: function() { + var me = this, + scrolledDescendants, + el, i, + scrollValues = [], + result = function() { + for (i = 0; i < scrolledDescendants.length; i++) { + el = scrolledDescendants[i]; + el.scrollLeft = scrollValues[i][0]; + el.scrollTop = scrollValues[i][1]; + } + }; + + if (!Ext.DomQuery.pseudos.isScrolled) { + Ext.DomQuery.pseudos.isScrolled = isScrolled; + } + scrolledDescendants = me.query(':isScrolled'); + for (i = 0; i < scrolledDescendants.length; i++) { + el = scrolledDescendants[i]; + scrollValues[i] = [el.scrollLeft, el.scrollTop]; + } + return result; + }, + + /** + * @property {Boolean} autoBoxAdjust + * True to automatically adjust width and height settings for box-model issues. + */ + autoBoxAdjust: true, + + /** + * Checks whether the element is currently visible using both visibility and display properties. + * @param {Boolean} [deep=false] True to walk the dom and see if parent elements are hidden. + * If false, the function only checks the visibility of the element itself and it may return + * `true` even though a parent is not visible. + * @return {Boolean} `true` if the element is currently visible, else `false` + */ + isVisible : function(deep) { + var me = this, + dom = me.dom, + stopNode = dom.ownerDocument.documentElement; + + if (!visFly) { + visFly = new Element.Fly(); + } + + while (dom !== stopNode) { + // We're invisible if we hit a nonexistent parentNode or a document + // fragment or computed style visibility:hidden or display:none + if (!dom || dom.nodeType === 11 || (visFly.attach(dom)).isStyle(VISIBILITY, HIDDEN) || visFly.isStyle(DISPLAY, NONE)) { + return false; + } + // Quit now unless we are being asked to check parent nodes. + if (!deep) { + break; + } + dom = dom.parentNode; + } + return true; + }, + + /** + * Returns true if display is not "none" + * @return {Boolean} + */ + isDisplayed : function() { + return !this.isStyle(DISPLAY, NONE); + }, + + /** + * Convenience method for setVisibilityMode(Element.DISPLAY) + * @param {String} [display] What to set display to when visible + * @return {Ext.dom.Element} this + */ + enableDisplayMode : function(display) { + var me = this; + + me.setVisibilityMode(Element.DISPLAY); + + if (!Ext.isEmpty(display)) { + (me.$cache || me.getCache()).data.originalDisplay = display; + } + + return me; + }, + + /** + * Puts a mask over this element to disable user interaction. Requires core.css. + * This method can only be applied to elements which accept child nodes. + * @param {String} [msg] A message to display in the mask + * @param {String} [msgCls] A css class to apply to the msg element + * @return {Ext.dom.Element} The mask element + */ + mask : function(msg, msgCls /* private - passed by AbstractComponent.mask to avoid the need to interrogate the DOM to get the height*/, elHeight) { + var me = this, + dom = me.dom, + // In some cases, setExpression will exist but not be of a function type, + // so we check it explicitly here to stop IE throwing errors + setExpression = dom.style.setExpression, + data = (me.$cache || me.getCache()).data, + maskShimEl = data.maskShimEl, + maskEl = data.maskEl, + maskMsg = data.maskMsg, + widthExpression, heightExpression; + + if (!(bodyRe.test(dom.tagName) && me.getStyle('position') == 'static')) { + me.addCls(XMASKEDRELATIVE); + } + + // We always needs to recreate the mask since the DOM element may have been re-created + if (maskEl) { + maskEl.remove(); + } + + if (maskMsg) { + maskMsg.remove(); + } + + if (maskShimEl) { + maskShimEl.remove(); + } + + if (Ext.isIE6) { + maskShimEl = Ext.DomHelper.append(dom, { + tag: 'iframe', + cls : Ext.baseCSSPrefix + 'shim ' + Ext.baseCSSPrefix + 'mask-shim' + }, true); + data.maskShimEl = maskShimEl; + maskShimEl.setDisplayed(true); + } + + Ext.DomHelper.append(dom, [{ + cls : Ext.baseCSSPrefix + "mask", + style: 'top:0;left:0;' + }, { + cls : msgCls ? EXTELMASKMSG + " " + msgCls : EXTELMASKMSG, + cn : { + tag: 'div', + cls: Ext.baseCSSPrefix + 'mask-msg-inner', + cn: { + tag: 'div', + cls: Ext.baseCSSPrefix + 'mask-msg-text', + html: msg || '' + } + } + }]); + + maskMsg = Ext.get(dom.lastChild); + maskEl = Ext.get(maskMsg.dom.previousSibling); + data.maskMsg = maskMsg; + data.maskEl = maskEl; + + me.addCls(XMASKED); + maskEl.setDisplayed(true); + + if (typeof msg == 'string') { + maskMsg.setDisplayed(true); + maskMsg.center(me); + } else { + maskMsg.setDisplayed(false); + } + // NOTE: CSS expressions are resource intensive and to be used only as a last resort + // These expressions are removed as soon as they are no longer necessary - in the unmask method. + // In normal use cases an element will be masked for a limited period of time. + // Fix for https://sencha.jira.com/browse/EXTJSIV-19. + // IE6 strict mode and IE6-9 quirks mode takes off left+right padding when calculating width! + if (!Ext.supports.IncludePaddingInWidthCalculation && setExpression) { + // In an occasional case setExpression will throw an exception + try { + maskEl.dom.style.setExpression('width', 'this.parentNode.clientWidth + "px"'); + widthExpression = 'this.parentNode.clientWidth + "px"'; + if (maskShimEl) { + maskShimEl.dom.style.setExpression('width', widthExpression); + } + maskEl.dom.style.setExpression('width', widthExpression); + } catch (e) {} + } + + // Some versions and modes of IE subtract top+bottom padding when calculating height. + // Different versions from those which make the same error for width! + if (!Ext.supports.IncludePaddingInHeightCalculation && setExpression) { + // In an occasional case setExpression will throw an exception + try { + heightExpression = 'this.parentNode.' + (dom == DOC.body ? 'scrollHeight' : 'offsetHeight') + ' + "px"'; + if (maskShimEl) { + maskShimEl.dom.style.setExpression('height', heightExpression); + } + maskEl.dom.style.setExpression('height', heightExpression); + } catch (e) {} + } + // ie will not expand full height automatically + else if (Ext.isIE9m && !(Ext.isIE7 && Ext.isStrict) && me.getStyle('height') == 'auto') { + if (maskShimEl) { + maskShimEl.setSize(undefined, elHeight || me.getHeight()); + } + maskEl.setSize(undefined, elHeight || me.getHeight()); + } + return maskEl; + }, + + /** + * Hides a previously applied mask. + */ + unmask : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + maskEl = data.maskEl, + maskShimEl = data.maskShimEl, + maskMsg = data.maskMsg, + style; + + if (maskEl) { + style = maskEl.dom.style; + // Remove resource-intensive CSS expressions as soon as they are not required. + if (style.clearExpression) { + style.clearExpression('width'); + style.clearExpression('height'); + } + + if (maskEl) { + maskEl.remove(); + delete data.maskEl; + } + + if (maskMsg) { + maskMsg.remove(); + delete data.maskMsg; + } + + me.removeCls([XMASKED, XMASKEDRELATIVE]); + + if (maskShimEl) { + style = maskShimEl.dom.style; + // Remove resource-intensive CSS expressions as soon as they are not required. + if (style.clearExpression) { + style.clearExpression('width'); + style.clearExpression('height'); + } + + maskShimEl.remove(); + delete data.maskShimEl; + } + } + }, + + /** + * Returns true if this element is masked. Also re-centers any displayed message within the mask. + * @return {Boolean} + */ + isMasked : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + maskEl = data.maskEl, + maskMsg = data.maskMsg, + hasMask = false; + + if (maskEl && maskEl.isVisible()) { + if (maskMsg) { + maskMsg.center(me); + } + hasMask = true; + } + return hasMask; + }, + + /** + * Creates an iframe shim for this element to keep selects and other windowed objects from + * showing through. + * @return {Ext.dom.Element} The new shim element + */ + createShim : function() { + var el = DOC.createElement('iframe'), + shim; + + el.frameBorder = '0'; + el.className = Ext.baseCSSPrefix + 'shim'; + el.src = Ext.SSL_SECURE_URL; + shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom)); + shim.autoBoxAdjust = false; + return shim; + }, + + /** + * Convenience method for constructing a KeyMap + * @param {String/Number/Number[]/Object} key Either a string with the keys to listen for, the numeric key code, + * array of key codes or an object with the following options: + * @param {Number/Array} key.key + * @param {Boolean} key.shift + * @param {Boolean} key.ctrl + * @param {Boolean} key.alt + * @param {Function} fn The function to call + * @param {Object} [scope] The scope (`this` reference) in which the specified function is executed. Defaults to this Element. + * @return {Ext.util.KeyMap} The KeyMap created + */ + addKeyListener : function(key, fn, scope){ + var config; + if(typeof key != 'object' || Ext.isArray(key)){ + config = { + target: this, + key: key, + fn: fn, + scope: scope + }; + }else{ + config = { + target: this, + key : key.key, + shift : key.shift, + ctrl : key.ctrl, + alt : key.alt, + fn: fn, + scope: scope + }; + } + return new Ext.util.KeyMap(config); + }, + + /** + * Creates a KeyMap for this element + * @param {Object} config The KeyMap config. See {@link Ext.util.KeyMap} for more details + * @return {Ext.util.KeyMap} The KeyMap created + */ + addKeyMap : function(config) { + return new Ext.util.KeyMap(Ext.apply({ + target: this + }, config)); + }, + + // Mouse events + /** + * @event click + * Fires when a mouse click is detected within the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event contextmenu + * Fires when a right click is detected within the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event dblclick + * Fires when a mouse double click is detected within the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event mousedown + * Fires when a mousedown is detected within the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event mouseup + * Fires when a mouseup is detected within the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event mouseover + * Fires when a mouseover is detected within the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event mousemove + * Fires when a mousemove is detected with the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event mouseout + * Fires when a mouseout is detected with the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event mouseenter + * Fires when the mouse enters the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event mouseleave + * Fires when the mouse leaves the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + + // Keyboard events + /** + * @event keypress + * Fires when a keypress is detected within the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event keydown + * Fires when a keydown is detected within the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event keyup + * Fires when a keyup is detected within the element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + + // HTML frame/object events + /** + * @event load + * Fires when the user agent finishes loading all content within the element. Only supported by window, frames, + * objects and images. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event unload + * Fires when the user agent removes all content from a window or frame. For elements, it fires when the target + * element or any of its content has been removed. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event abort + * Fires when an object/image is stopped from loading before completely loaded. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event error + * Fires when an object/image/frame cannot be loaded properly. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event resize + * Fires when a document view is resized. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event scroll + * Fires when a document view is scrolled. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + + // Form events + /** + * @event select + * Fires when a user selects some text in a text field, including input and textarea. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event change + * Fires when a control loses the input focus and its value has been modified since gaining focus. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event submit + * Fires when a form is submitted. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event reset + * Fires when a form is reset. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event focus + * Fires when an element receives focus either via the pointing device or by tab navigation. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event blur + * Fires when an element loses focus either via the pointing device or by tabbing navigation. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + + // User Interface events + /** + * @event DOMFocusIn + * Where supported. Similar to HTML focus event, but can be applied to any focusable element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event DOMFocusOut + * Where supported. Similar to HTML blur event, but can be applied to any focusable element. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event DOMActivate + * Where supported. Fires when an element is activated, for instance, through a mouse click or a keypress. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + + // DOM Mutation events + /** + * @event DOMSubtreeModified + * Where supported. Fires when the subtree is modified. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event DOMNodeInserted + * Where supported. Fires when a node has been added as a child of another node. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event DOMNodeRemoved + * Where supported. Fires when a descendant node of the element is removed. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event DOMNodeRemovedFromDocument + * Where supported. Fires when a node is being removed from a document. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event DOMNodeInsertedIntoDocument + * Where supported. Fires when a node is being inserted into a document. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event DOMAttrModified + * Where supported. Fires when an attribute has been modified. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + /** + * @event DOMCharacterDataModified + * Where supported. Fires when the character data has been modified. + * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event. + * @param {HTMLElement} t The target of the event. + */ + + /** + * Appends an event handler to this element. + * + * @param {String} eventName The name of event to handle. + * + * @param {Function} fn The handler function the event invokes. This function is passed the following parameters: + * + * - **evt** : EventObject + * + * The {@link Ext.EventObject EventObject} describing the event. + * + * - **el** : HtmlElement + * + * The DOM element which was the target of the event. Note that this may be filtered by using the delegate option. + * + * - **o** : Object + * + * The options object from the call that setup the listener. + * + * @param {Object} scope (optional) The scope (**this** reference) in which the handler function is executed. **If + * omitted, defaults to this Element.** + * + * @param {Object} options (optional) An object containing handler configuration properties. This may contain any of + * the following properties: + * + * - **scope** Object : + * + * The scope (**this** reference) in which the handler function is executed. **If omitted, defaults to this + * Element.** + * + * - **delegate** String: + * + * A simple selector to filter the target or look for a descendant of the target. See below for additional details. + * + * - **stopEvent** Boolean: + * + * True to stop the event. That is stop propagation, and prevent the default action. + * + * - **preventDefault** Boolean: + * + * True to prevent the default action + * + * - **stopPropagation** Boolean: + * + * True to prevent event propagation + * + * - **normalized** Boolean: + * + * False to pass a browser event to the handler function instead of an Ext.EventObject + * + * - **target** Ext.dom.Element: + * + * Only call the handler if the event was fired on the target Element, _not_ if the event was bubbled up from a + * child node. + * + * - **delay** Number: + * + * The number of milliseconds to delay the invocation of the handler after the event fires. + * + * - **single** Boolean: + * + * True to add a handler to handle just the next firing of the event, and then remove itself. + * + * - **buffer** Number: + * + * Causes the handler to be scheduled to run in an {@link Ext.util.DelayedTask} delayed by the specified number of + * milliseconds. If the event fires again within that time, the original handler is _not_ invoked, but the new + * handler is scheduled in its place. + * + * **Combining Options** + * + * Using the options argument, it is possible to combine different types of listeners: + * + * A delayed, one-time listener that auto stops the event and adds a custom argument (forumId) to the options + * object. The options object is available as the third parameter in the handler function. + * + * Code: + * + * el.on('click', this.onClick, this, { + * single: true, + * delay: 100, + * stopEvent : true, + * forumId: 4 + * }); + * + * **Attaching multiple handlers in 1 call** + * + * The method also allows for a single argument to be passed which is a config object containing properties which + * specify multiple handlers. + * + * Code: + * + * el.on({ + * 'click' : { + * fn: this.onClick, + * scope: this, + * delay: 100 + * }, + * 'mouseover' : { + * fn: this.onMouseOver, + * scope: this + * }, + * 'mouseout' : { + * fn: this.onMouseOut, + * scope: this + * } + * }); + * + * Or a shorthand syntax: + * + * Code: + * + * el.on({ + * 'click' : this.onClick, + * 'mouseover' : this.onMouseOver, + * 'mouseout' : this.onMouseOut, + * scope: this + * }); + * + * **delegate** + * + * This is a configuration option that you can pass along when registering a handler for an event to assist with + * event delegation. Event delegation is a technique that is used to reduce memory consumption and prevent exposure + * to memory-leaks. By registering an event for a container element as opposed to each element within a container. + * By setting this configuration option to a simple selector, the target element will be filtered to look for a + * descendant of the target. For example: + * + * // using this markup: + *
    + *

    paragraph one

    + *

    paragraph two

    + *

    paragraph three

    + *
    + * + * // utilize event delegation to registering just one handler on the container element: + * el = Ext.get('elId'); + * el.on( + * 'click', + * function(e,t) { + * // handle click + * console.info(t.id); // 'p2' + * }, + * this, + * { + * // filter the target element to be a descendant with the class 'clickable' + * delegate: '.clickable' + * } + * ); + * + * @return {Ext.dom.Element} this + */ + on: function(eventName, fn, scope, options) { + Ext.EventManager.on(this, eventName, fn, scope || this, options); + return this; + }, + + /** + * Removes an event handler from this element. + * + * **Note**: if a *scope* was explicitly specified when {@link #on adding} the listener, + * the same scope must be specified here. + * + * Example: + * + * el.un('click', this.handlerFn); + * // or + * el.removeListener('click', this.handlerFn); + * + * @param {String} eventName The name of the event from which to remove the handler. + * @param {Function} fn The handler function to remove. **This must be a reference to the function passed into the + * {@link #on} call.** + * @param {Object} scope If a scope (**this** reference) was specified when the listener was added, then this must + * refer to the same object. + * @return {Ext.dom.Element} this + */ + un: function(eventName, fn, scope) { + Ext.EventManager.un(this, eventName, fn, scope || this); + return this; + }, + + /** + * Removes all previous added listeners from this element + * @return {Ext.dom.Element} this + */ + removeAllListeners: function() { + Ext.EventManager.removeAll(this); + return this; + }, + + /** + * Recursively removes all previous added listeners from this element and its children + * @return {Ext.dom.Element} this + */ + purgeAllListeners: function() { + Ext.EventManager.purgeElement(this); + return this; + }, + + select: function(selector) { + return Element.select(selector, false, this.dom); + } + }; +}, function() { + + var DOC = document, + EC = Ext.cache, + Element = this, + AbstractElement = Ext.dom.AbstractElement, + focusRe = /^a|button|embed|iframe|input|object|select|textarea$/i, + nonSpaceRe = /\S/, + scriptTagRe = /(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig, + replaceScriptTagRe = /(?:)((\n|\r|.)*?)(?:<\/script>)/ig, + srcRe = /\ssrc=([\'\"])(.*?)\1/i, + typeRe = /\stype=([\'\"])(.*?)\1/i, + useDocForId = !Ext.isIE8m, + internalFly; + + Element.boxMarkup = '
    '; + // + + // private + // Garbage collection - uncache elements/purge listeners on orphaned elements + // so we don't hold a reference and cause the browser to retain them + function garbageCollect() { + if (!Ext.enableGarbageCollector) { + clearInterval(Element.collectorThreadId); + } else { + var eid, + d, + o, + t; + + for (eid in EC) { + if (!EC.hasOwnProperty(eid)) { + continue; + } + + o = EC[eid]; + + // Skip document and window elements + if (o.skipGarbageCollection) { + continue; + } + + d = o.dom; + + // Should always have a DOM node + if (!d) { + Ext.Error.raise('Missing DOM node in element garbage collection: ' + eid); + } + + // Check that document and window elements haven't got through + if (d && (d.getElementById || d.navigator)) { + Ext.Error.raise('Unexpected document or window element in element garbage collection'); + } + + // ------------------------------------------------------- + // Determining what is garbage: + // ------------------------------------------------------- + // !d.parentNode + // no parentNode == direct orphan, definitely garbage + // ------------------------------------------------------- + // !d.offsetParent && !document.getElementById(eid) + // display none elements have no offsetParent so we will + // also try to look it up by it's id. However, check + // offsetParent first so we don't do unneeded lookups. + // This enables collection of elements that are not orphans + // directly, but somewhere up the line they have an orphan + // parent. + // ------------------------------------------------------- + if (!d.parentNode || (!d.offsetParent && !Ext.getElementById(eid))) { + if (d && Ext.enableListenerCollection) { + Ext.EventManager.removeAll(d); + } + delete EC[eid]; + } + } + // Cleanup IE Object leaks + if (Ext.isIE) { + t = {}; + for (eid in EC) { + if (!EC.hasOwnProperty(eid)) { + continue; + } + t[eid] = EC[eid]; + } + EC = Ext.cache = t; + } + } + } + + Element.collectorThreadId = setInterval(garbageCollect, 30000); + + //Stuff from Element-more.js + Element.addMethods({ + + /** + * Monitors this Element for the mouse leaving. Calls the function after the specified delay only if + * the mouse was not moved back into the Element within the delay. If the mouse *was* moved + * back in, the function is not called. + * @param {Number} delay The delay **in milliseconds** to wait for possible mouse re-entry before calling the handler function. + * @param {Function} handler The function to call if the mouse remains outside of this Element for the specified time. + * @param {Object} [scope] The scope (`this` reference) in which the handler function executes. Defaults to this Element. + * @return {Object} The listeners object which was added to this element so that monitoring can be stopped. Example usage: + * + * // Hide the menu if the mouse moves out for 250ms or more + * this.mouseLeaveMonitor = this.menuEl.monitorMouseLeave(250, this.hideMenu, this); + * + * ... + * // Remove mouseleave monitor on menu destroy + * this.menuEl.un(this.mouseLeaveMonitor); + * + */ + monitorMouseLeave: function(delay, handler, scope) { + var me = this, + timer, + listeners = { + mouseleave: function(e) { + timer = setTimeout(Ext.Function.bind(handler, scope||me, [e]), delay); + }, + mouseenter: function() { + clearTimeout(timer); + }, + freezeEvent: true + }; + + me.on(listeners); + return listeners; + }, + + /** + * Stops the specified event(s) from bubbling and optionally prevents the default action + * @param {String/String[]} eventName an event / array of events to stop from bubbling + * @param {Boolean} [preventDefault] true to prevent the default action too + * @return {Ext.dom.Element} this + */ + swallowEvent : function(eventName, preventDefault) { + var me = this, + e, eLen, + fn = function(e) { + e.stopPropagation(); + if (preventDefault) { + e.preventDefault(); + } + }; + + if (Ext.isArray(eventName)) { + eLen = eventName.length; + + for (e = 0; e < eLen; e++) { + me.on(eventName[e], fn); + } + + return me; + } + me.on(eventName, fn); + return me; + }, + + /** + * Create an event handler on this element such that when the event fires and is handled by this element, + * it will be relayed to another object (i.e., fired again as if it originated from that object instead). + * @param {String} eventName The type of event to relay + * @param {Object} observable Any object that extends {@link Ext.util.Observable} that will provide the context + * for firing the relayed event + */ + relayEvent : function(eventName, observable) { + this.on(eventName, function(e) { + observable.fireEvent(eventName, e); + }); + }, + + /** + * Removes Empty, or whitespace filled text nodes. Combines adjacent text nodes. + * @param {Boolean} [forceReclean=false] By default the element keeps track if it has been cleaned already + * so you can call this over and over. However, if you update the element and need to force a reclean, you + * can pass true. + */ + clean : function(forceReclean) { + var me = this, + dom = me.dom, + data = (me.$cache || me.getCache()).data, + n = dom.firstChild, + ni = -1, + nx; + + if (data.isCleaned && forceReclean !== true) { + return me; + } + + while (n) { + nx = n.nextSibling; + if (n.nodeType == 3) { + // Remove empty/whitespace text nodes + if (!(nonSpaceRe.test(n.nodeValue))) { + dom.removeChild(n); + // Combine adjacent text nodes + } else if (nx && nx.nodeType == 3) { + n.appendData(Ext.String.trim(nx.data)); + dom.removeChild(nx); + nx = n.nextSibling; + n.nodeIndex = ++ni; + } + } else { + // Recursively clean + internalFly.attach(n).clean(); + n.nodeIndex = ++ni; + } + n = nx; + } + + data.isCleaned = true; + return me; + }, + + /** + * Direct access to the Ext.ElementLoader {@link Ext.ElementLoader#method-load} method. The method takes the same object + * parameter as {@link Ext.ElementLoader#method-load} + * @return {Ext.dom.Element} this + */ + load : function(options) { + this.getLoader().load(options); + return this; + }, + + /** + * Gets this element's {@link Ext.ElementLoader ElementLoader} + * @return {Ext.ElementLoader} The loader + */ + getLoader : function() { + var me = this, + data = (me.$cache || me.getCache()).data, + loader = data.loader; + + if (!loader) { + data.loader = loader = new Ext.ElementLoader({ + target: me + }); + } + return loader; + }, + + /** + * @private. + * Currently used for updating grid cells without modifying DOM structure + * + * Synchronizes content of this Element with the content of the passed element. + * + * Style and CSS class are copied from source into this Element, and contents are synched + * recursively. If a child node is a text node, the textual data is copied. + */ + syncContent: function(source) { + source = Ext.getDom(source); + var sourceNodes = source.childNodes, + sourceLen = sourceNodes.length, + dest = this.dom, + destNodes = dest.childNodes, + destLen = destNodes.length, + i, destNode, sourceNode, + nodeType, newAttrs, attLen, attName; + + // Copy top node's attributes across. Use IE-specific method if possible. + if (dest.mergeAttributes) { + dest.mergeAttributes(source, true); + + // EXTJSIV-6803. IE's mergeAttributes appears not to make the source's "src" value available until after the image is ready. + // So programatically copy any src attribute. + dest.src = source.src; + } else { + newAttrs = source.attributes; + attLen = newAttrs.length; + for (i = 0; i < attLen; i++) { + attName = newAttrs[i].name; + if (attName !== 'id') { + dest.setAttribute(attName, newAttrs[i].value); + } + } + } + + // If the number of child nodes does not match, fall back to replacing innerHTML + if (sourceLen !== destLen) { + dest.innerHTML = source.innerHTML; + return; + } + + // Loop through source nodes. + // If there are fewer, we must remove excess + for (i = 0; i < sourceLen; i++) { + sourceNode = sourceNodes[i]; + destNode = destNodes[i]; + nodeType = sourceNode.nodeType; + + // If node structure is out of sync, just drop innerHTML in and return + if (nodeType !== destNode.nodeType || (nodeType === 1 && sourceNode.tagName !== destNode.tagName)) { + dest.innerHTML = source.innerHTML; + return; + } + + // Update text node + if (nodeType === 3) { + destNode.data = sourceNode.data; + } + // Sync element content + else { + if (sourceNode.id && destNode.id !== sourceNode.id) { + destNode.id = sourceNode.id; + } + destNode.style.cssText = sourceNode.style.cssText; + destNode.className = sourceNode.className; + internalFly.attach(destNode).syncContent(sourceNode); + } + } + }, + + /** + * Updates the innerHTML of this element, optionally searching for and processing scripts. + * @param {String} html The new HTML + * @param {Boolean} [loadScripts] True to look for and process scripts (defaults to false) + * @param {Function} [callback] For async script loading you can be notified when the update completes + * @return {Ext.dom.Element} this + */ + update : function(html, loadScripts, callback) { + var me = this, + id, + dom, + interval; + + if (!me.dom) { + return me; + } + html = html || ''; + dom = me.dom; + + if (loadScripts !== true) { + dom.innerHTML = html; + Ext.callback(callback, me); + return me; + } + + id = Ext.id(); + html += ''; + + interval = setInterval(function() { + var hd, + match, + attrs, + srcMatch, + typeMatch, + el, + s; + if (!(el = DOC.getElementById(id))) { + return false; + } + clearInterval(interval); + Ext.removeNode(el); + hd = Ext.getHead().dom; + + while ((match = scriptTagRe.exec(html))) { + attrs = match[1]; + srcMatch = attrs ? attrs.match(srcRe) : false; + if (srcMatch && srcMatch[2]) { + s = DOC.createElement("script"); + s.src = srcMatch[2]; + typeMatch = attrs.match(typeRe); + if (typeMatch && typeMatch[2]) { + s.type = typeMatch[2]; + } + hd.appendChild(s); + } else if (match[2] && match[2].length > 0) { + if (window.execScript) { + window.execScript(match[2]); + } else { + window.eval(match[2]); + } + } + } + Ext.callback(callback, me); + }, 20); + dom.innerHTML = html.replace(replaceScriptTagRe, ''); + return me; + }, + + // inherit docs, overridden so we can add removeAnchor + removeAllListeners : function() { + this.removeAnchor(); + Ext.EventManager.removeAll(this.dom); + return this; + }, + + /** + * Creates a proxy element of this element + * @param {String/Object} config The class name of the proxy element or a DomHelper config object + * @param {String/HTMLElement} [renderTo] The element or element id to render the proxy to. Defaults to: document.body. + * @param {Boolean} [matchBox=false] True to align and size the proxy to this element now. + * @return {Ext.dom.Element} The new proxy element + */ + createProxy : function(config, renderTo, matchBox) { + config = (typeof config == 'object') ? config : {tag : "div", cls: config}; + + var me = this, + proxy = renderTo ? Ext.DomHelper.append(renderTo, config, true) : + Ext.DomHelper.insertBefore(me.dom, config, true); + + proxy.setVisibilityMode(Element.DISPLAY); + proxy.hide(); + if (matchBox && me.setBox && me.getBox) { // check to make sure Element.position.js is loaded + proxy.setBox(me.getBox()); + } + return proxy; + }, + + /** + * Returns true if this element needs an explicit tabIndex to make it focusable. Input fields, text areas, buttons + * anchors elements **with an href** etc do not need a tabIndex, but structural elements do. + */ + needsTabIndex: function() { + if (this.dom) { + if ((this.dom.nodeName === 'a') && (!this.dom.href)) { + return true; + } + return !focusRe.test(this.dom.nodeName); + } + }, + + /** + * Checks whether this element can be focused. + * @return {Boolean} True if the element is focusable + */ + isFocusable: function (/* private - assume it's the focusEl of a Component */ asFocusEl) { + var dom = this.dom, + tabIndexAttr = dom.getAttributeNode('tabIndex'), + tabIndex, + nodeName = dom.nodeName, + canFocus = false; + + // Certain browsers always report zero in the absence of the tabIndex attribute. + // Testing the specified property (Standards: http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-862529273) + // Should filter out these cases. + // The exceptions are IE6 to IE8. In these browsers all elements will yield a tabIndex + // and therefore all elements will appear to be focusable. + // This adversely affects modal Floating components. + // These listen for the TAB key, and then test whether the event target === last focusable + // or first focusable element, and forcibly to a circular navigation. + // We cannot know the true first or last focusable element, so this problem still exists for IE6,7,8 + // See Ext.util.Floating + if (tabIndexAttr && tabIndexAttr.specified) { + tabIndex = tabIndexAttr.value; + } + if (dom && !dom.disabled) { + // A tabIndex of -1 means it has to be programatically focused, so that needs FocusManager, + // and it has to be the focus holding el of a Component within the Component tree. + if (tabIndex == -1) { // note that the value is a string + canFocus = Ext.FocusManager && Ext.FocusManager.enabled && asFocusEl; + } + else { + // See if it's a naturally focusable element + if (focusRe.test(nodeName)) { + if ((nodeName !== 'a') || dom.href) { + canFocus = true; + } + } + // A non naturally focusable element is in the navigation flow if it has a positive numeric tab index. + else { + canFocus = tabIndex != null && tabIndex >= 0; + } + } + canFocus = canFocus && this.isVisible(true); + } + return canFocus; + } + }); + + if (Ext.isIE) { + Element.prototype.getById = function (id, asDom) { + var dom = this.dom, + cacheItem, el, ret; + + if (dom) { + // for normal elements getElementById is the best solution, but if the el is + // not part of the document.body, we need to use all[] + el = (useDocForId && DOC.getElementById(id)) || dom.all[id]; + if (el) { + if (asDom) { + ret = el; + } else { + // calling Element.get here is a real hit (2x slower) because it has to + // redetermine that we are giving it a dom el. + cacheItem = EC[id]; + if (cacheItem && cacheItem.el) { + ret = Ext.updateCacheEntry(cacheItem, el).el; + } else { + ret = new Element(el); + } + } + return ret; + } + } + + return asDom ? Ext.getDom(id) : Element.get(id); + }; + } + + Element.createAlias({ + /** + * @method + * @inheritdoc Ext.dom.Element#on + * Shorthand for {@link #on}. + */ + addListener: 'on', + /** + * @method + * @inheritdoc Ext.dom.Element#un + * Shorthand for {@link #un}. + */ + removeListener: 'un', + /** + * @method + * @inheritdoc Ext.dom.Element#removeAllListeners + * Alias for {@link #removeAllListeners}. + */ + clearListeners: 'removeAllListeners', + /** + * @method + * @inheritdoc Ext.dom.Element#isFocusable + * Alias for {@link #isFocusable}. + */ + focusable: 'isFocusable' + }); + + Element.Fly = AbstractElement.Fly = new Ext.Class({ + extend: Element, + + isFly: true, + + constructor: function(dom) { + this.dom = dom; + // set an "el" property that references "this". This allows + // Ext.util.Positionable methods to operate on this.el.dom since it + // gets mixed into both Element and Component + this.el = this; + }, + + attach: AbstractElement.Fly.prototype.attach + }); + + internalFly = new Element.Fly(); + + if (Ext.isIE) { + Ext.getElementById = function (id) { + var el = DOC.getElementById(id), + detachedBodyEl; + + if (!el && (detachedBodyEl = AbstractElement.detachedBodyEl)) { + el = detachedBodyEl.dom.all[id]; + } + + return el; + }; + } else if (!DOC.querySelector) { + Ext.getDetachedBody = Ext.getBody; + + Ext.getElementById = function (id) { + return DOC.getElementById(id); + }; + } +}); + +//@tag dom,core +/** + * This class encapsulates a *collection* of DOM elements, providing methods to filter members, or to perform collective + * actions upon the whole set. + * + * Although they are not listed, this class supports all of the methods of {@link Ext.dom.Element} and + * {@link Ext.fx.Anim}. The methods from these classes will be performed on all the elements in this collection. + * + * Example: + * + * var els = Ext.select("#some-el div.some-class"); + * // or select directly from an existing element + * var el = Ext.get('some-el'); + * el.select('div.some-class'); + * + * els.setWidth(100); // all elements become 100 width + * els.hide(true); // all elements fade out and hide + * // or + * els.setWidth(100).hide(true); + */ +Ext.define('Ext.dom.CompositeElementLite', { + alternateClassName: 'Ext.CompositeElementLite', + + + + statics: { + /** + * @private + * Copies all of the functions from Ext.dom.Element's prototype onto CompositeElementLite's prototype. + * This is called twice - once immediately below, and once again after additional Ext.dom.Element + * are added in Ext JS + */ + importElementMethods: function() { + var name, + elementPrototype = Ext.dom.Element.prototype, + prototype = this.prototype; + + for (name in elementPrototype) { + if (typeof elementPrototype[name] == 'function'){ + (function(key) { + prototype[key] = prototype[key] || function() { + return this.invoke(key, arguments); + }; + }).call(prototype, name); + + } + } + } + }, + + constructor: function(elements, root) { + /** + * @property {HTMLElement[]} elements + * The Array of DOM elements which this CompositeElement encapsulates. + * + * This will not *usually* be accessed in developers' code, but developers wishing to augment the capabilities + * of the CompositeElementLite class may use it when adding methods to the class. + * + * For example to add the `nextAll` method to the class to **add** all following siblings of selected elements, + * the code would be + * + * Ext.override(Ext.dom.CompositeElementLite, { + * nextAll: function() { + * var elements = this.elements, i, l = elements.length, n, r = [], ri = -1; + * + * // Loop through all elements in this Composite, accumulating + * // an Array of all siblings. + * for (i = 0; i < l; i++) { + * for (n = elements[i].nextSibling; n; n = n.nextSibling) { + * r[++ri] = n; + * } + * } + * + * // Add all found siblings to this Composite + * return this.add(r); + * } + * }); + * + * @readonly + */ + this.elements = []; + this.add(elements, root); + this.el = new Ext.dom.AbstractElement.Fly(); + }, + + /** + * @property {Boolean} isComposite + * `true` in this class to identify an object as an instantiated CompositeElement, or subclass thereof. + */ + isComposite: true, + + // private + getElement: function(el) { + // Set the shared flyweight dom property to the current element + return this.el.attach(el); + }, + + // private + transformElement: function(el) { + return Ext.getDom(el); + }, + + /** + * Returns the number of elements in this Composite. + * @return {Number} + */ + getCount: function() { + return this.elements.length; + }, + + /** + * Adds elements to this Composite object. + * @param {HTMLElement[]/Ext.dom.CompositeElement} els Either an Array of DOM elements to add, or another Composite + * object who's elements should be added. + * @return {Ext.dom.CompositeElement} This Composite object. + */ + add: function(els, root) { + var elements = this.elements, + i, ln; + + if (!els) { + return this; + } + + if (typeof els == "string") { + els = Ext.dom.Element.selectorFunction(els, root); + } + else if (els.isComposite) { + els = els.elements; + } + else if (!Ext.isIterable(els)) { + els = [els]; + } + + for (i = 0, ln = els.length; i < ln; ++i) { + elements.push(this.transformElement(els[i])); + } + + return this; + }, + + invoke: function(fn, args) { + var elements = this.elements, + ln = elements.length, + element, + i; + + fn = Ext.dom.Element.prototype[fn]; + for (i = 0; i < ln; i++) { + element = elements[i]; + + if (element) { + fn.apply(this.getElement(element), args); + } + } + return this; + }, + + /** + * Returns a flyweight Element of the dom element object at the specified index + * @param {Number} index + * @return {Ext.dom.Element} + */ + item: function(index) { + var el = this.elements[index], + out = null; + + if (el) { + out = this.getElement(el); + } + + return out; + }, + + /** + * Gets a range nodes. + * @param {Number} start (optional) The index of the first node in the range + * @param {Number} end (optional) The index of the last node in the range + * @return {HTMLElement[]} An array of nodes + */ + slice: function() { + return this.elements.slice.apply(this.elements, arguments); + }, + + // fixes scope with flyweight + addListener: function(eventName, handler, scope, opt) { + var els = this.elements, + len = els.length, + i, e; + + for (i = 0; i < len; i++) { + e = els[i]; + if (e) { + Ext.EventManager.on(e, eventName, handler, scope || e, opt); + } + } + return this; + }, + /** + * Calls the passed function for each element in this composite. + * @param {Function} fn The function to call. + * @param {Ext.dom.Element} fn.el The current Element in the iteration. **This is the flyweight + * (shared) Ext.dom.Element instance, so if you require a a reference to the dom node, use el.dom.** + * @param {Ext.dom.CompositeElement} fn.c This Composite object. + * @param {Number} fn.index The zero-based index in the iteration. + * @param {Object} [scope] The scope (this reference) in which the function is executed. + * Defaults to the Element. + * @return {Ext.dom.CompositeElement} this + */ + each: function(fn, scope) { + var me = this, + els = me.elements, + len = els.length, + i, e; + + for (i = 0; i < len; i++) { + e = els[i]; + if (e) { + e = this.getElement(e); + if (fn.call(scope || e, e, me, i) === false) { + break; + } + } + } + return me; + }, + + /** + * Clears this Composite and adds the elements passed. + * @param {HTMLElement[]/Ext.dom.CompositeElement} els Either an array of DOM elements, or another Composite from which + * to fill this Composite. + * @return {Ext.dom.CompositeElement} this + */ + fill: function(els) { + var me = this; + me.elements = []; + me.add(els); + return me; + }, + + insert: function(index, nodes) { + Ext.Array.insert(this.elements, index, nodes); + }, + + /** + * Filters this composite to only elements that match the passed selector. + * @param {String/Function} selector A string CSS selector or a comparison function. The comparison function will be + * called with the following arguments: + * @param {Ext.dom.Element} selector.el The current DOM element. + * @param {Number} selector.index The current index within the collection. + * @return {Ext.dom.CompositeElement} this + */ + filter: function(selector) { + var me = this, + els = me.elements, + len = els.length, + out = [], + i = 0, + isFunc = typeof selector == 'function', + add, + el; + + for (; i < len; i++) { + el = els[i]; + add = false; + if (el) { + el = me.getElement(el); + + if (isFunc) { + add = selector.call(el, el, me, i) !== false; + } else { + add = el.is(selector); + } + + if (add) { + out.push(me.transformElement(el)); + } + } + } + + me.elements = out; + return me; + }, + + /** + * Find the index of the passed element within the composite collection. + * @param {String/HTMLElement/Ext.Element/Number} el The id of an element, or an Ext.dom.Element, or an HtmlElement + * to find within the composite collection. + * @return {Number} The index of the passed Ext.dom.Element in the composite collection, or -1 if not found. + */ + indexOf: function(el) { + return Ext.Array.indexOf(this.elements, this.transformElement(el)); + }, + + /** + * Replaces the specified element with the passed element. + * @param {String/HTMLElement/Ext.Element/Number} el The id of an element, the Element itself, the index of the + * element in this composite to replace. + * @param {String/Ext.Element} replacement The id of an element or the Element itself. + * @param {Boolean} [domReplace] True to remove and replace the element in the document too. + * @return {Ext.dom.CompositeElement} this + */ + replaceElement: function(el, replacement, domReplace) { + var index = !isNaN(el) ? el : this.indexOf(el), + d; + if (index > -1) { + replacement = Ext.getDom(replacement); + if (domReplace) { + d = this.elements[index]; + d.parentNode.insertBefore(replacement, d); + Ext.removeNode(d); + } + Ext.Array.splice(this.elements, index, 1, replacement); + } + return this; + }, + + /** + * Removes all elements from this Composite. + * @param {Boolean} [removeDom] True to also remove the elements from the document. + */ + clear: function(removeDom) { + var me = this, + els = me.elements, + i = els.length - 1; + + if (removeDom) { + for (; i >= 0; i--) { + Ext.removeNode(els[i]); + } + } + this.elements = []; + }, + + addElements: function(els, root) { + if (!els) { + return this; + } + + if (typeof els == "string") { + els = Ext.dom.Element.selectorFunction(els, root); + } + + var yels = this.elements, + eLen = els.length, + e; + + for (e = 0; e < eLen; e++) { + yels.push(Ext.get(els[e])); + } + + return this; + }, + + /** + * Returns the first Element + * @return {Ext.dom.Element} + */ + first: function() { + return this.item(0); + }, + + /** + * Returns the last Element + * @return {Ext.dom.Element} + */ + last: function() { + return this.item(this.getCount() - 1); + }, + + /** + * Returns true if this composite contains the passed element. + * @param {String/HTMLElement/Ext.Element/Number} el The id of an element, or an Ext.Element, or an HtmlElement to + * find within the composite collection. + * @return {Boolean} + */ + contains: function(el) { + return this.indexOf(el) != -1; + }, + + /** + * Removes the specified element(s). + * @param {String/HTMLElement/Ext.Element/Number} el The id of an element, the Element itself, the index of the + * element in this composite or an array of any of those. + * @param {Boolean} [removeDom] True to also remove the element from the document. + * @return {Ext.dom.CompositeElement} this + */ + removeElement: function(keys, removeDom) { + keys = [].concat(keys); + + var me = this, + elements = me.elements, + kLen = keys.length, + val, el, k; + + for (k = 0; k < kLen; k++) { + val = keys[k]; + + if ((el = (elements[val] || elements[val = me.indexOf(val)]))) { + if (removeDom) { + if (el.dom) { + el.remove(); + } else { + Ext.removeNode(el); + } + } + Ext.Array.erase(elements, val, 1); + } + } + + return me; + } + +}, function() { + this.importElementMethods(); + + this.prototype.on = this.prototype.addListener; + + if (Ext.DomQuery){ + Ext.dom.Element.selectorFunction = Ext.DomQuery.select; + } + + /** + * Selects elements based on the passed CSS selector to enable {@link Ext.Element Element} methods + * to be applied to many related elements in one statement through the returned + * {@link Ext.dom.CompositeElement CompositeElement} or + * {@link Ext.dom.CompositeElementLite CompositeElementLite} object. + * @param {String/HTMLElement[]} selector The CSS selector or an array of elements + * @param {HTMLElement/String} [root] The root element of the query or id of the root + * @return {Ext.dom.CompositeElementLite/Ext.dom.CompositeElement} + * @member Ext.dom.Element + * @method select + * @static + * @ignore + */ + Ext.dom.Element.select = function(selector, root) { + var elements; + + if (typeof selector == "string") { + elements = Ext.dom.Element.selectorFunction(selector, root); + } + else if (selector.length !== undefined) { + elements = selector; + } + else { + throw new Error("[Ext.select] Invalid selector specified: " + selector); + } + + return new Ext.CompositeElementLite(elements); + }; + + /** + * @member Ext + * @method select + * @inheritdoc Ext.dom.Element#select + * @ignore + */ + Ext.select = function() { + return Ext.dom.Element.select.apply(Ext.dom.Element, arguments); + }; +}); + +//@tag dom,core +/** + * @class Ext.dom.CompositeElement + *

    This class encapsulates a collection of DOM elements, providing methods to filter + * members, or to perform collective actions upon the whole set.

    + *

    Although they are not listed, this class supports all of the methods of {@link Ext.dom.Element} and + * {@link Ext.fx.Anim}. The methods from these classes will be performed on all the elements in this collection.

    + *

    All methods return this and can be chained.

    + * Usage: +
    
    + var els = Ext.select("#some-el div.some-class", true);
    + // or select directly from an existing element
    + var el = Ext.get('some-el');
    + el.select('div.some-class', true);
    +
    + els.setWidth(100); // all elements become 100 width
    + els.hide(true); // all elements fade out and hide
    + // or
    + els.setWidth(100).hide(true);
    + 
    + */ +Ext.define('Ext.dom.CompositeElement', { + alternateClassName: 'Ext.CompositeElement', + + extend: Ext.dom.CompositeElementLite , + + // private + getElement: function(el) { + // In this case just return it, since we already have a reference to it + return el; + }, + + // private + transformElement: function(el) { + return Ext.get(el); + } + +}, function() { + /** + * Selects elements based on the passed CSS selector to enable {@link Ext.Element Element} methods + * to be applied to many related elements in one statement through the returned {@link Ext.CompositeElement CompositeElement} or + * {@link Ext.CompositeElementLite CompositeElementLite} object. + * @param {String/HTMLElement[]} selector The CSS selector or an array of elements + * @param {Boolean} [unique] true to create a unique Ext.Element for each element (defaults to a shared flyweight object) + * @param {HTMLElement/String} [root] The root element of the query or id of the root + * @return {Ext.CompositeElementLite/Ext.CompositeElement} + * @member Ext.dom.Element + * @method select + * @static + */ + + Ext.dom.Element.select = function(selector, unique, root) { + var elements; + + if (typeof selector == "string") { + elements = Ext.dom.Element.selectorFunction(selector, root); + } + else if (selector.length !== undefined) { + elements = selector; + } + else { + throw new Error("[Ext.select] Invalid selector specified: " + selector); + } + return (unique === true) ? new Ext.CompositeElement(elements) : new Ext.CompositeElementLite(elements); + }; +}); + +/** + * Shorthand of {@link Ext.Element#method-select}. + * @member Ext + * @method select + * @inheritdoc Ext.Element#select + */ +Ext.select = Ext.Element.select; + +Ext.ClassManager.addNameAlternateMappings({ + "Ext.draw.engine.ImageExporter": [], + "Ext.layout.component.Auto": [], + "Ext.grid.property.Store": [ + "Ext.grid.PropertyStore" + ], + "Ext.layout.container.Box": [ + "Ext.layout.BoxLayout" + ], + "Ext.rtl.resizer.BorderSplitterTracker": [], + "Ext.direct.JsonProvider": [], + "Ext.tree.Panel": [ + "Ext.tree.TreePanel", + "Ext.TreePanel" + ], + "Ext.data.Model": [ + "Ext.data.Record" + ], + "Ext.data.reader.Reader": [ + "Ext.data.Reader", + "Ext.data.DataReader" + ], + "Ext.tab.Tab": [], + "Ext.button.Button": [ + "Ext.Button" + ], + "Ext.util.Grouper": [], + "Ext.direct.RemotingProvider": [], + "Ext.data.NodeInterface": [], + "Ext.view.NodeCache": [], + "Ext.grid.column.Date": [ + "Ext.grid.DateColumn" + ], + "Ext.form.field.Trigger": [ + "Ext.form.TriggerField", + "Ext.form.TwinTriggerField", + "Ext.form.Trigger" + ], + "Ext.grid.plugin.RowEditing": [], + "Ext.tip.QuickTip": [ + "Ext.QuickTip" + ], + "Ext.rtl.grid.plugin.HeaderResizer": [], + "Ext.form.action.Load": [ + "Ext.form.Action.Load" + ], + "Ext.form.field.ComboBox": [ + "Ext.form.ComboBox" + ], + "Ext.layout.container.Border": [ + "Ext.layout.BorderLayout" + ], + "Ext.rtl.layout.container.Column": [], + "Ext.data.JsonPStore": [], + "Ext.layout.component.field.TextArea": [], + "Ext.layout.container.Container": [ + "Ext.layout.ContainerLayout" + ], + "Ext.util.Sortable": [], + "Ext.selection.Model": [ + "Ext.AbstractSelectionModel" + ], + "Ext.draw.CompositeSprite": [], + "Ext.fx.Queue": [], + "Ext.dd.StatusProxy": [], + "Ext.form.field.Checkbox": [ + "Ext.form.Checkbox" + ], + "Ext.direct.Transaction": [ + "Ext.Direct.Transaction" + ], + "Ext.util.Offset": [], + "Ext.container.Monitor": [], + "Ext.view.DragZone": [], + "Ext.util.KeyNav": [ + "Ext.KeyNav" + ], + "Ext.rtl.dom.Element_static": [], + "Ext.form.field.File": [ + "Ext.form.FileUploadField", + "Ext.ux.form.FileUploadField", + "Ext.form.File" + ], + "Ext.slider.Single": [ + "Ext.Slider", + "Ext.form.SliderField", + "Ext.slider.SingleSlider", + "Ext.slider.Slider" + ], + "Ext.panel.Proxy": [ + "Ext.dd.PanelProxy" + ], + "Ext.fx.target.Target": [], + "Ext.ComponentManager": [ + "Ext.ComponentMgr" + ], + "Ext.grid.feature.GroupingSummary": [], + "Ext.grid.property.HeaderContainer": [ + "Ext.grid.PropertyColumnModel" + ], + "Ext.layout.component.BoundList": [], + "Ext.tab.Bar": [], + "Ext.app.Application": [], + "Ext.ShadowPool": [], + "Ext.layout.container.Accordion": [ + "Ext.layout.AccordionLayout" + ], + "Ext.grid.locking.HeaderContainer": [], + "Ext.resizer.ResizeTracker": [], + "Ext.panel.Tool": [], + "Ext.layout.container.boxOverflow.None": [ + "Ext.layout.boxOverflow.None" + ], + "Ext.tree.View": [], + "Ext.ElementLoader": [], + "Ext.grid.ColumnComponentLayout": [], + "Ext.toolbar.Separator": [ + "Ext.Toolbar.Separator" + ], + "Ext.dd.DragZone": [], + "Ext.util.Renderable": [], + "Ext.layout.component.FieldSet": [], + "Ext.util.Bindable": [], + "Ext.data.SortTypes": [], + "Ext.rtl.layout.container.HBox": [], + "Ext.util.Animate": [], + "Ext.data.flash.BinaryXhr": [], + "Ext.form.field.Date": [ + "Ext.form.DateField", + "Ext.form.Date" + ], + "Ext.Component": [], + "Ext.chart.axis.Axis": [ + "Ext.chart.Axis" + ], + "Ext.menu.DatePicker": [], + "Ext.fx.target.CompositeSprite": [], + "Ext.form.field.Picker": [ + "Ext.form.Picker" + ], + "Ext.fx.Animator": [], + "Ext.Ajax": [], + "Ext.layout.component.Dock": [ + "Ext.layout.component.AbstractDock" + ], + "Ext.util.Filter": [], + "Ext.dd.DragDrop": [], + "Ext.view.View": [ + "Ext.DataView" + ], + "Ext.data.association.BelongsTo": [ + "Ext.data.BelongsToAssociation" + ], + "Ext.fx.target.Element": [], + "Ext.draw.Surface": [], + "Ext.dd.DDProxy": [], + "Ext.data.AbstractStore": [], + "Ext.grid.plugin.BufferedRendererTreeView": [], + "Ext.grid.locking.View": [ + "Ext.grid.LockingView" + ], + "Ext.form.action.StandardSubmit": [], + "Ext.dd.Registry": [], + "Ext.picker.Month": [ + "Ext.MonthPicker" + ], + "Ext.menu.Manager": [ + "Ext.menu.MenuMgr" + ], + "Ext.container.Container": [ + "Ext.Container" + ], + "Ext.rtl.form.field.Spinner": [], + "Ext.util.KeyMap": [ + "Ext.KeyMap" + ], + "Ext.data.Batch": [], + "Ext.resizer.Handle": [], + "Ext.util.ElementContainer": [], + "Ext.grid.feature.Grouping": [], + "Ext.tab.Panel": [ + "Ext.TabPanel" + ], + "Ext.layout.Context": [], + "Ext.layout.component.Body": [], + "Ext.layout.component.field.ComboBox": [], + "Ext.dd.DDTarget": [], + "Ext.chart.Chart": [], + "Ext.data.Field": [], + "Ext.form.field.FileButton": [], + "Ext.chart.series.Gauge": [], + "Ext.data.StoreManager": [ + "Ext.StoreMgr", + "Ext.data.StoreMgr", + "Ext.StoreManager" + ], + "Ext.data.IdGenerator": [], + "Ext.tip.QuickTipManager": [ + "Ext.QuickTips" + ], + "Ext.grid.plugin.Editing": [], + "Ext.state.LocalStorageProvider": [], + "Ext.grid.RowEditor": [], + "Ext.app.EventDomain": [], + "Ext.form.action.Action": [ + "Ext.form.Action" + ], + "Ext.fx.Easing": [], + "Ext.ProgressBar": [], + "Ext.tree.ViewDragZone": [], + "Ext.data.reader.Array": [ + "Ext.data.ArrayReader" + ], + "Ext.picker.Date": [ + "Ext.DatePicker" + ], + "Ext.rtl.grid.column.Column": [], + "Ext.data.proxy.JsonP": [ + "Ext.data.ScriptTagProxy" + ], + "Ext.chart.series.Area": [], + "Ext.fx.Anim": [], + "Ext.menu.Item": [ + "Ext.menu.TextItem" + ], + "Ext.rtl.dom.Element_position": [], + "Ext.chart.Legend": [], + "Ext.grid.plugin.HeaderReorderer": [], + "Ext.rtl.view.Table": [], + "Ext.layout.container.VBox": [ + "Ext.layout.VBoxLayout" + ], + "Ext.rtl.util.Floating": [], + "Ext.view.DropZone": [], + "Ext.rtl.tree.Column": [], + "Ext.layout.component.Button": [], + "Ext.form.field.Hidden": [ + "Ext.form.Hidden" + ], + "Ext.form.FieldContainer": [], + "Ext.rtl.grid.plugin.RowEditing": [], + "Ext.data.proxy.Server": [ + "Ext.data.ServerProxy" + ], + "Ext.chart.series.Cartesian": [ + "Ext.chart.CartesianSeries", + "Ext.chart.CartesianChart" + ], + "Ext.rtl.layout.component.Dock": [], + "Ext.grid.column.Column": [ + "Ext.grid.Column" + ], + "Ext.data.ResultSet": [], + "Ext.data.association.HasMany": [ + "Ext.data.HasManyAssociation" + ], + "Ext.layout.container.Fit": [ + "Ext.layout.FitLayout" + ], + "Ext.util.CSS": [], + "Ext.rtl.AbstractComponent": [], + "Ext.layout.component.field.Field": [], + "Ext.data.proxy.Ajax": [ + "Ext.data.HttpProxy", + "Ext.data.AjaxProxy" + ], + "Ext.rtl.EventObjectImpl": [], + "Ext.app.domain.Component": [], + "Ext.form.Label": [], + "Ext.data.writer.Writer": [ + "Ext.data.DataWriter", + "Ext.data.Writer" + ], + "Ext.view.BoundListKeyNav": [], + "Ext.form.FieldSet": [], + "Ext.form.field.VTypes": [ + "Ext.form.VTypes" + ], + "Ext.fx.PropertyHandler": [], + "Ext.form.CheckboxGroup": [], + "Ext.data.JsonP": [], + "Ext.draw.engine.Vml": [], + "Ext.layout.container.CheckboxGroup": [], + "Ext.app.domain.Direct": [], + "Ext.panel.Header": [], + "Ext.app.Controller": [], + "Ext.rtl.dom.Layer": [], + "Ext.grid.plugin.CellEditing": [], + "Ext.form.field.Time": [ + "Ext.form.TimeField", + "Ext.form.Time" + ], + "Ext.fx.CubicBezier": [], + "Ext.button.Cycle": [ + "Ext.CycleButton" + ], + "Ext.app.domain.Global": [], + "Ext.data.Tree": [], + "Ext.ModelManager": [ + "Ext.ModelMgr" + ], + "Ext.data.XmlStore": [], + "Ext.grid.ViewDropZone": [], + "Ext.rtl.slider.Multi": [], + "Ext.grid.header.DropZone": [], + "Ext.rtl.layout.component.field.Text": [], + "Ext.util.HashMap": [], + "Ext.grid.column.Template": [ + "Ext.grid.TemplateColumn" + ], + "Ext.ComponentLoader": [], + "Ext.form.FieldAncestor": [], + "Ext.app.domain.Controller": [], + "Ext.chart.axis.Gauge": [], + "Ext.data.validations": [], + "Ext.data.Connection": [], + "Ext.resizer.Splitter": [], + "Ext.dd.DropZone": [], + "Ext.direct.ExceptionEvent": [], + "Ext.form.RadioManager": [], + "Ext.data.association.HasOne": [ + "Ext.data.HasOneAssociation" + ], + "Ext.draw.Text": [], + "Ext.window.MessageBox": [], + "Ext.fx.target.CompositeElementCSS": [], + "Ext.rtl.layout.ContextItem": [], + "Ext.chart.series.Line": [ + "Ext.chart.LineSeries", + "Ext.chart.LineChart" + ], + "Ext.view.Table": [], + "Ext.fx.target.CompositeElement": [], + "Ext.fx.Manager": [], + "Ext.data.writer.Json": [ + "Ext.data.JsonWriter" + ], + "Ext.chart.Label": [], + "Ext.grid.View": [], + "Ext.Action": [], + "Ext.form.Basic": [ + "Ext.form.BasicForm" + ], + "Ext.container.Viewport": [ + "Ext.Viewport" + ], + "Ext.state.Stateful": [], + "Ext.grid.feature.RowBody": [], + "Ext.form.field.Text": [ + "Ext.form.TextField", + "Ext.form.Text" + ], + "Ext.rtl.layout.component.field.Trigger": [], + "Ext.data.reader.Xml": [ + "Ext.data.XmlReader" + ], + "Ext.grid.feature.AbstractSummary": [], + "Ext.chart.axis.Category": [ + "Ext.chart.CategoryAxis" + ], + "Ext.rtl.layout.container.boxOverflow.Scroller": [], + "Ext.grid.plugin.BufferedRendererTableView": [], + "Ext.layout.container.Absolute": [ + "Ext.layout.AbsoluteLayout" + ], + "Ext.rtl.layout.container.Box": [], + "Ext.data.reader.Json": [ + "Ext.data.JsonReader" + ], + "Ext.util.TextMetrics": [], + "Ext.data.TreeStore": [], + "Ext.view.BoundList": [ + "Ext.BoundList" + ], + "Ext.form.field.HtmlEditor": [ + "Ext.form.HtmlEditor" + ], + "Ext.layout.container.Form": [ + "Ext.layout.FormLayout" + ], + "Ext.chart.MaskLayer": [], + "Ext.resizer.BorderSplitterTracker": [], + "Ext.util.LruCache": [], + "Ext.tip.Tip": [ + "Ext.Tip" + ], + "Ext.grid.column.CheckColumn": [ + "Ext.ux.CheckColumn" + ], + "Ext.rtl.resizer.SplitterTracker": [], + "Ext.grid.feature.RowWrap": [], + "Ext.data.proxy.Client": [ + "Ext.data.ClientProxy" + ], + "Ext.data.Types": [], + "Ext.draw.SpriteDD": [], + "Ext.layout.container.boxOverflow.Menu": [ + "Ext.layout.boxOverflow.Menu" + ], + "Ext.LoadMask": [], + "Ext.rtl.grid.RowEditor": [], + "Ext.toolbar.Paging": [ + "Ext.PagingToolbar" + ], + "Ext.data.association.Association": [ + "Ext.data.Association" + ], + "Ext.tree.ViewDropZone": [], + "Ext.toolbar.Toolbar": [ + "Ext.Toolbar" + ], + "Ext.tip.ToolTip": [ + "Ext.ToolTip" + ], + "Ext.chart.Highlight": [], + "Ext.state.Manager": [], + "Ext.util.Inflector": [], + "Ext.grid.Panel": [ + "Ext.list.ListView", + "Ext.ListView", + "Ext.grid.GridPanel" + ], + "Ext.data.NodeStore": [], + "Ext.Shadow": [], + "Ext.form.action.Submit": [ + "Ext.form.Action.Submit" + ], + "Ext.form.Panel": [ + "Ext.FormPanel", + "Ext.form.FormPanel" + ], + "Ext.chart.series.Series": [], + "Ext.data.Request": [], + "Ext.dd.DD": [], + "Ext.toolbar.Fill": [ + "Ext.Toolbar.Fill" + ], + "Ext.grid.RowNumberer": [], + "Ext.data.proxy.WebStorage": [ + "Ext.data.WebStorageProxy" + ], + "Ext.util.Floating": [], + "Ext.form.action.DirectSubmit": [ + "Ext.form.Action.DirectSubmit" + ], + "Ext.util.Cookies": [], + "Ext.data.UuidGenerator": [], + "Ext.util.Point": [], + "Ext.fx.target.Component": [], + "Ext.form.CheckboxManager": [], + "Ext.form.field.Field": [], + "Ext.form.field.Display": [ + "Ext.form.DisplayField", + "Ext.form.Display" + ], + "Ext.layout.container.Anchor": [ + "Ext.layout.AnchorLayout" + ], + "Ext.layout.component.field.Text": [], + "Ext.data.DirectStore": [], + "Ext.dom.Layer": [ + "Ext.Layer" + ], + "Ext.grid.RowEditorButtons": [], + "Ext.data.BufferStore": [], + "Ext.grid.plugin.DivRenderer": [], + "Ext.grid.ColumnLayout": [], + "Ext.chart.series.Column": [ + "Ext.chart.ColumnSeries", + "Ext.chart.ColumnChart", + "Ext.chart.StackedColumnChart" + ], + "Ext.AbstractComponent": [], + "Ext.flash.Component": [ + "Ext.FlashComponent" + ], + "Ext.form.field.Base": [ + "Ext.form.Field", + "Ext.form.BaseField" + ], + "Ext.grid.feature.GroupStore": [], + "Ext.data.SequentialIdGenerator": [], + "Ext.grid.header.Container": [], + "Ext.container.ButtonGroup": [ + "Ext.ButtonGroup" + ], + "Ext.grid.column.Action": [ + "Ext.grid.ActionColumn" + ], + "Ext.layout.component.field.Trigger": [], + "Ext.layout.component.field.FieldContainer": [], + "Ext.chart.Shape": [], + "Ext.panel.DD": [], + "Ext.container.AbstractContainer": [], + "Ext.data.ArrayStore": [], + "Ext.window.Window": [ + "Ext.Window" + ], + "Ext.picker.Color": [ + "Ext.ColorPalette" + ], + "Ext.grid.feature.Feature": [], + "Ext.chart.theme.Theme": [], + "Ext.util.ClickRepeater": [], + "Ext.form.field.Spinner": [ + "Ext.form.Spinner" + ], + "Ext.container.DockingContainer": [], + "Ext.selection.DataViewModel": [], + "Ext.dd.DragTracker": [], + "Ext.data.Group": [], + "Ext.dd.DragDropManager": [ + "Ext.dd.DragDropMgr", + "Ext.dd.DDM" + ], + "Ext.selection.CheckboxModel": [], + "Ext.menu.KeyNav": [], + "Ext.layout.container.Column": [ + "Ext.layout.ColumnLayout" + ], + "Ext.draw.Matrix": [], + "Ext.form.field.Number": [ + "Ext.form.NumberField", + "Ext.form.Number" + ], + "Ext.rtl.util.Renderable": [], + "Ext.data.proxy.Direct": [ + "Ext.data.DirectProxy" + ], + "Ext.chart.Navigation": [], + "Ext.slider.Tip": [], + "Ext.chart.theme.Base": [], + "Ext.form.field.TextArea": [ + "Ext.form.TextArea" + ], + "Ext.rtl.layout.container.VBox": [], + "Ext.form.field.Radio": [ + "Ext.form.Radio" + ], + "Ext.layout.component.ProgressBar": [], + "Ext.chart.series.Pie": [ + "Ext.chart.PieSeries", + "Ext.chart.PieChart" + ], + "Ext.tree.plugin.TreeViewDragDrop": [], + "Ext.direct.Provider": [], + "Ext.data.TreeModel": [], + "Ext.layout.Layout": [], + "Ext.toolbar.TextItem": [ + "Ext.Toolbar.TextItem" + ], + "Ext.rtl.button.Button": [], + "Ext.util.AbstractMixedCollection": [], + "Ext.data.JsonStore": [], + "Ext.button.Split": [ + "Ext.SplitButton" + ], + "Ext.dd.DropTarget": [], + "Ext.direct.RemotingEvent": [], + "Ext.draw.Sprite": [], + "Ext.fx.target.Sprite": [], + "Ext.data.proxy.LocalStorage": [ + "Ext.data.LocalStorageProxy" + ], + "Ext.layout.component.Draw": [], + "Ext.AbstractPlugin": [], + "Ext.Editor": [], + "Ext.chart.axis.Radial": [], + "Ext.chart.Tip": [], + "Ext.layout.container.Table": [ + "Ext.layout.TableLayout" + ], + "Ext.chart.axis.Abstract": [], + "Ext.data.proxy.Rest": [ + "Ext.data.RestProxy" + ], + "Ext.util.Queue": [], + "Ext.rtl.layout.container.Absolute": [], + "Ext.state.CookieProvider": [], + "Ext.Img": [], + "Ext.dd.DragSource": [], + "Ext.grid.CellEditor": [], + "Ext.layout.ClassList": [], + "Ext.button.Manager": [ + "Ext.ButtonToggleManager" + ], + "Ext.util.Sorter": [], + "Ext.resizer.SplitterTracker": [], + "Ext.panel.Table": [], + "Ext.draw.Color": [], + "Ext.chart.series.Bar": [ + "Ext.chart.BarSeries", + "Ext.chart.BarChart", + "Ext.chart.StackedBarChart" + ], + "Ext.PluginManager": [ + "Ext.PluginMgr" + ], + "Ext.util.ComponentDragger": [], + "Ext.chart.series.Scatter": [], + "Ext.chart.Callout": [], + "Ext.data.Store": [], + "Ext.grid.feature.Summary": [], + "Ext.util.ProtoElement": [], + "Ext.layout.component.Component": [], + "Ext.direct.Manager": [], + "Ext.data.proxy.Proxy": [ + "Ext.data.DataProxy", + "Ext.data.Proxy" + ], + "Ext.menu.CheckItem": [], + "Ext.layout.container.Card": [ + "Ext.layout.CardLayout" + ], + "Ext.draw.Component": [], + "Ext.toolbar.Item": [ + "Ext.Toolbar.Item" + ], + "Ext.form.RadioGroup": [], + "Ext.rtl.tab.Bar": [], + "Ext.rtl.form.field.Trigger": [], + "Ext.slider.Thumb": [], + "Ext.grid.header.DragZone": [], + "Ext.rtl.resizer.ResizeTracker": [], + "Ext.form.action.DirectLoad": [ + "Ext.form.Action.DirectLoad" + ], + "Ext.picker.Time": [], + "Ext.grid.plugin.BufferedRenderer": [], + "Ext.resizer.BorderSplitter": [], + "Ext.menu.ColorPicker": [], + "Ext.ZIndexManager": [ + "Ext.WindowGroup" + ], + "Ext.menu.Menu": [], + "Ext.chart.LegendItem": [], + "Ext.toolbar.Spacer": [ + "Ext.Toolbar.Spacer" + ], + "Ext.rtl.dd.DD": [], + "Ext.panel.Panel": [ + "Ext.Panel" + ], + "Ext.util.Memento": [], + "Ext.data.proxy.Memory": [ + "Ext.data.MemoryProxy" + ], + "Ext.app.domain.Store": [], + "Ext.chart.axis.Time": [ + "Ext.chart.TimeAxis" + ], + "Ext.grid.plugin.DragDrop": [], + "Ext.ComponentQuery": [], + "Ext.draw.engine.SvgExporter": [], + "Ext.layout.container.Auto": [], + "Ext.grid.locking.Lockable": [ + "Ext.grid.Lockable" + ], + "Ext.view.AbstractView": [], + "Ext.util.Region": [], + "Ext.draw.Draw": [], + "Ext.fx.target.ElementCSS": [], + "Ext.rtl.panel.Panel": [], + "Ext.layout.component.field.HtmlEditor": [], + "Ext.data.proxy.SessionStorage": [ + "Ext.data.SessionStorageProxy" + ], + "Ext.app.EventBus": [], + "Ext.menu.Separator": [], + "Ext.util.History": [ + "Ext.History" + ], + "Ext.direct.Event": [], + "Ext.direct.RemotingMethod": [], + "Ext.dd.ScrollManager": [], + "Ext.chart.Mask": [], + "Ext.rtl.dom.Element_anim": [], + "Ext.selection.CellModel": [], + "Ext.view.TableLayout": [], + "Ext.rtl.panel.Header": [], + "Ext.rtl.dom.Element_scroll": [], + "Ext.state.Provider": [], + "Ext.layout.container.Editor": [], + "Ext.data.Errors": [], + "Ext.grid.plugin.RowExpander": [], + "Ext.selection.TreeModel": [], + "Ext.form.Labelable": [], + "Ext.grid.column.Number": [ + "Ext.grid.NumberColumn" + ], + "Ext.draw.engine.Svg": [], + "Ext.grid.property.Grid": [ + "Ext.grid.PropertyGrid" + ], + "Ext.FocusManager": [ + "Ext.FocusMgr" + ], + "Ext.AbstractManager": [], + "Ext.chart.series.Radar": [], + "Ext.rtl.dom.Element_insertion": [], + "Ext.grid.property.Property": [ + "Ext.PropGridProperty" + ], + "Ext.chart.TipSurface": [], + "Ext.layout.SizeModel": [], + "Ext.grid.column.Boolean": [ + "Ext.grid.BooleanColumn" + ], + "Ext.direct.PollingProvider": [], + "Ext.grid.plugin.HeaderResizer": [], + "Ext.tree.Column": [], + "Ext.data.writer.Xml": [ + "Ext.data.XmlWriter" + ], + "Ext.slider.Multi": [ + "Ext.slider.MultiSlider" + ], + "Ext.panel.AbstractPanel": [], + "Ext.layout.component.field.Slider": [], + "Ext.chart.axis.Numeric": [ + "Ext.chart.NumericAxis" + ], + "Ext.layout.container.boxOverflow.Scroller": [ + "Ext.layout.boxOverflow.Scroller" + ], + "Ext.data.Operation": [], + "Ext.resizer.Resizer": [ + "Ext.Resizable" + ], + "Ext.layout.container.HBox": [ + "Ext.layout.HBoxLayout" + ], + "Ext.selection.RowModel": [], + "Ext.layout.ContextItem": [], + "Ext.util.MixedCollection": [] +}); +Ext.ClassManager.addNameAliasMappings({ + "Ext.draw.engine.ImageExporter": [], + "Ext.layout.component.Auto": [ + "layout.autocomponent" + ], + "Ext.grid.property.Store": [], + "Ext.layout.container.Box": [ + "layout.box" + ], + "Ext.rtl.resizer.BorderSplitterTracker": [], + "Ext.direct.JsonProvider": [ + "direct.jsonprovider" + ], + "Ext.tree.Panel": [ + "widget.treepanel" + ], + "Ext.data.Model": [], + "Ext.data.reader.Reader": [], + "Ext.tab.Tab": [ + "widget.tab" + ], + "Ext.button.Button": [ + "widget.button" + ], + "Ext.util.Grouper": [], + "Ext.direct.RemotingProvider": [ + "direct.remotingprovider" + ], + "Ext.data.NodeInterface": [], + "Ext.view.NodeCache": [], + "Ext.grid.column.Date": [ + "widget.datecolumn" + ], + "Ext.form.field.Trigger": [ + "widget.trigger", + "widget.triggerfield" + ], + "Ext.grid.plugin.RowEditing": [ + "plugin.rowediting" + ], + "Ext.tip.QuickTip": [ + "widget.quicktip" + ], + "Ext.rtl.grid.plugin.HeaderResizer": [], + "Ext.form.action.Load": [ + "formaction.load" + ], + "Ext.form.field.ComboBox": [ + "widget.combo", + "widget.combobox" + ], + "Ext.layout.container.Border": [ + "layout.border" + ], + "Ext.rtl.layout.container.Column": [], + "Ext.data.JsonPStore": [ + "store.jsonp" + ], + "Ext.layout.component.field.TextArea": [ + "layout.textareafield" + ], + "Ext.layout.container.Container": [ + "layout.container" + ], + "Ext.util.Sortable": [], + "Ext.selection.Model": [], + "Ext.draw.CompositeSprite": [], + "Ext.fx.Queue": [], + "Ext.dd.StatusProxy": [], + "Ext.form.field.Checkbox": [ + "widget.checkbox", + "widget.checkboxfield" + ], + "Ext.direct.Transaction": [ + "direct.transaction" + ], + "Ext.util.Offset": [], + "Ext.container.Monitor": [], + "Ext.view.DragZone": [], + "Ext.util.KeyNav": [], + "Ext.rtl.dom.Element_static": [], + "Ext.form.field.File": [ + "widget.filefield", + "widget.fileuploadfield" + ], + "Ext.slider.Single": [ + "widget.slider", + "widget.sliderfield" + ], + "Ext.panel.Proxy": [], + "Ext.fx.target.Target": [], + "Ext.ComponentManager": [], + "Ext.grid.feature.GroupingSummary": [ + "feature.groupingsummary" + ], + "Ext.grid.property.HeaderContainer": [], + "Ext.layout.component.BoundList": [ + "layout.boundlist" + ], + "Ext.tab.Bar": [ + "widget.tabbar" + ], + "Ext.app.Application": [], + "Ext.ShadowPool": [], + "Ext.layout.container.Accordion": [ + "layout.accordion" + ], + "Ext.grid.locking.HeaderContainer": [], + "Ext.resizer.ResizeTracker": [], + "Ext.panel.Tool": [ + "widget.tool" + ], + "Ext.layout.container.boxOverflow.None": [], + "Ext.tree.View": [ + "widget.treeview" + ], + "Ext.ElementLoader": [], + "Ext.grid.ColumnComponentLayout": [ + "layout.columncomponent" + ], + "Ext.toolbar.Separator": [ + "widget.tbseparator" + ], + "Ext.dd.DragZone": [], + "Ext.util.Renderable": [], + "Ext.layout.component.FieldSet": [ + "layout.fieldset" + ], + "Ext.util.Bindable": [], + "Ext.data.SortTypes": [], + "Ext.rtl.layout.container.HBox": [], + "Ext.util.Animate": [], + "Ext.data.flash.BinaryXhr": [], + "Ext.form.field.Date": [ + "widget.datefield" + ], + "Ext.Component": [ + "widget.box", + "widget.component" + ], + "Ext.chart.axis.Axis": [], + "Ext.menu.DatePicker": [ + "widget.datemenu" + ], + "Ext.fx.target.CompositeSprite": [], + "Ext.form.field.Picker": [ + "widget.pickerfield" + ], + "Ext.fx.Animator": [], + "Ext.Ajax": [], + "Ext.layout.component.Dock": [ + "layout.dock" + ], + "Ext.util.Filter": [], + "Ext.dd.DragDrop": [], + "Ext.view.View": [ + "widget.dataview" + ], + "Ext.data.association.BelongsTo": [ + "association.belongsto" + ], + "Ext.fx.target.Element": [], + "Ext.draw.Surface": [], + "Ext.dd.DDProxy": [], + "Ext.data.AbstractStore": [], + "Ext.grid.plugin.BufferedRendererTreeView": [], + "Ext.grid.locking.View": [], + "Ext.form.action.StandardSubmit": [ + "formaction.standardsubmit" + ], + "Ext.dd.Registry": [], + "Ext.picker.Month": [ + "widget.monthpicker" + ], + "Ext.menu.Manager": [], + "Ext.container.Container": [ + "widget.container" + ], + "Ext.rtl.form.field.Spinner": [], + "Ext.util.KeyMap": [], + "Ext.data.Batch": [], + "Ext.resizer.Handle": [], + "Ext.util.ElementContainer": [], + "Ext.grid.feature.Grouping": [ + "feature.grouping" + ], + "Ext.tab.Panel": [ + "widget.tabpanel" + ], + "Ext.layout.Context": [], + "Ext.layout.component.Body": [ + "layout.body" + ], + "Ext.layout.component.field.ComboBox": [ + "layout.combobox" + ], + "Ext.dd.DDTarget": [], + "Ext.chart.Chart": [ + "widget.chart" + ], + "Ext.data.Field": [ + "data.field" + ], + "Ext.form.field.FileButton": [ + "widget.filebutton" + ], + "Ext.chart.series.Gauge": [ + "series.gauge" + ], + "Ext.data.StoreManager": [], + "Ext.data.IdGenerator": [], + "Ext.tip.QuickTipManager": [], + "Ext.grid.plugin.Editing": [ + "editing.editing" + ], + "Ext.state.LocalStorageProvider": [ + "state.localstorage" + ], + "Ext.grid.RowEditor": [ + "widget.roweditor" + ], + "Ext.app.EventDomain": [], + "Ext.form.action.Action": [], + "Ext.fx.Easing": [], + "Ext.ProgressBar": [ + "widget.progressbar" + ], + "Ext.tree.ViewDragZone": [], + "Ext.data.reader.Array": [ + "reader.array" + ], + "Ext.picker.Date": [ + "widget.datepicker" + ], + "Ext.rtl.grid.column.Column": [], + "Ext.data.proxy.JsonP": [ + "proxy.jsonp", + "proxy.scripttag" + ], + "Ext.chart.series.Area": [ + "series.area" + ], + "Ext.fx.Anim": [], + "Ext.menu.Item": [ + "widget.menuitem" + ], + "Ext.rtl.dom.Element_position": [], + "Ext.chart.Legend": [], + "Ext.grid.plugin.HeaderReorderer": [ + "plugin.gridheaderreorderer" + ], + "Ext.rtl.view.Table": [], + "Ext.layout.container.VBox": [ + "layout.vbox" + ], + "Ext.rtl.util.Floating": [], + "Ext.view.DropZone": [], + "Ext.rtl.tree.Column": [], + "Ext.layout.component.Button": [ + "layout.button" + ], + "Ext.form.field.Hidden": [ + "widget.hidden", + "widget.hiddenfield" + ], + "Ext.form.FieldContainer": [ + "widget.fieldcontainer" + ], + "Ext.rtl.grid.plugin.RowEditing": [], + "Ext.data.proxy.Server": [ + "proxy.server" + ], + "Ext.chart.series.Cartesian": [], + "Ext.rtl.layout.component.Dock": [], + "Ext.grid.column.Column": [ + "widget.gridcolumn" + ], + "Ext.data.ResultSet": [], + "Ext.data.association.HasMany": [ + "association.hasmany" + ], + "Ext.layout.container.Fit": [ + "layout.fit" + ], + "Ext.util.CSS": [], + "Ext.rtl.AbstractComponent": [], + "Ext.layout.component.field.Field": [ + "layout.field" + ], + "Ext.data.proxy.Ajax": [ + "proxy.ajax" + ], + "Ext.rtl.EventObjectImpl": [], + "Ext.app.domain.Component": [], + "Ext.form.Label": [ + "widget.label" + ], + "Ext.data.writer.Writer": [ + "writer.base" + ], + "Ext.view.BoundListKeyNav": [], + "Ext.form.FieldSet": [ + "widget.fieldset" + ], + "Ext.form.field.VTypes": [], + "Ext.fx.PropertyHandler": [], + "Ext.form.CheckboxGroup": [ + "widget.checkboxgroup" + ], + "Ext.data.JsonP": [], + "Ext.draw.engine.Vml": [], + "Ext.layout.container.CheckboxGroup": [ + "layout.checkboxgroup" + ], + "Ext.app.domain.Direct": [], + "Ext.panel.Header": [ + "widget.header" + ], + "Ext.app.Controller": [], + "Ext.rtl.dom.Layer": [], + "Ext.grid.plugin.CellEditing": [ + "plugin.cellediting" + ], + "Ext.form.field.Time": [ + "widget.timefield" + ], + "Ext.fx.CubicBezier": [], + "Ext.button.Cycle": [ + "widget.cycle" + ], + "Ext.app.domain.Global": [], + "Ext.data.Tree": [ + "data.tree" + ], + "Ext.ModelManager": [], + "Ext.data.XmlStore": [ + "store.xml" + ], + "Ext.grid.ViewDropZone": [], + "Ext.rtl.slider.Multi": [], + "Ext.grid.header.DropZone": [], + "Ext.rtl.layout.component.field.Text": [], + "Ext.util.HashMap": [], + "Ext.grid.column.Template": [ + "widget.templatecolumn" + ], + "Ext.ComponentLoader": [], + "Ext.form.FieldAncestor": [], + "Ext.app.domain.Controller": [], + "Ext.chart.axis.Gauge": [ + "axis.gauge" + ], + "Ext.data.validations": [], + "Ext.data.Connection": [], + "Ext.resizer.Splitter": [ + "widget.splitter" + ], + "Ext.dd.DropZone": [], + "Ext.direct.ExceptionEvent": [ + "direct.exception" + ], + "Ext.form.RadioManager": [], + "Ext.data.association.HasOne": [ + "association.hasone" + ], + "Ext.draw.Text": [ + "widget.text" + ], + "Ext.window.MessageBox": [ + "widget.messagebox" + ], + "Ext.fx.target.CompositeElementCSS": [], + "Ext.rtl.layout.ContextItem": [], + "Ext.chart.series.Line": [ + "series.line" + ], + "Ext.view.Table": [ + "widget.tableview" + ], + "Ext.fx.target.CompositeElement": [], + "Ext.fx.Manager": [], + "Ext.data.writer.Json": [ + "writer.json" + ], + "Ext.chart.Label": [], + "Ext.grid.View": [ + "widget.gridview" + ], + "Ext.Action": [], + "Ext.form.Basic": [], + "Ext.container.Viewport": [ + "widget.viewport" + ], + "Ext.state.Stateful": [], + "Ext.grid.feature.RowBody": [ + "feature.rowbody" + ], + "Ext.form.field.Text": [ + "widget.textfield" + ], + "Ext.rtl.layout.component.field.Trigger": [], + "Ext.data.reader.Xml": [ + "reader.xml" + ], + "Ext.grid.feature.AbstractSummary": [ + "feature.abstractsummary" + ], + "Ext.chart.axis.Category": [ + "axis.category" + ], + "Ext.rtl.layout.container.boxOverflow.Scroller": [], + "Ext.grid.plugin.BufferedRendererTableView": [], + "Ext.layout.container.Absolute": [ + "layout.absolute" + ], + "Ext.rtl.layout.container.Box": [], + "Ext.data.reader.Json": [ + "reader.json" + ], + "Ext.util.TextMetrics": [], + "Ext.data.TreeStore": [ + "store.tree" + ], + "Ext.view.BoundList": [ + "widget.boundlist" + ], + "Ext.form.field.HtmlEditor": [ + "widget.htmleditor" + ], + "Ext.layout.container.Form": [ + "layout.form" + ], + "Ext.chart.MaskLayer": [], + "Ext.resizer.BorderSplitterTracker": [], + "Ext.util.LruCache": [], + "Ext.tip.Tip": [], + "Ext.grid.column.CheckColumn": [ + "widget.checkcolumn" + ], + "Ext.rtl.resizer.SplitterTracker": [], + "Ext.grid.feature.RowWrap": [ + "feature.rowwrap" + ], + "Ext.data.proxy.Client": [], + "Ext.data.Types": [], + "Ext.draw.SpriteDD": [], + "Ext.layout.container.boxOverflow.Menu": [], + "Ext.LoadMask": [ + "widget.loadmask" + ], + "Ext.rtl.grid.RowEditor": [], + "Ext.toolbar.Paging": [ + "widget.pagingtoolbar" + ], + "Ext.data.association.Association": [], + "Ext.tree.ViewDropZone": [], + "Ext.toolbar.Toolbar": [ + "widget.toolbar" + ], + "Ext.tip.ToolTip": [ + "widget.tooltip" + ], + "Ext.chart.Highlight": [], + "Ext.state.Manager": [], + "Ext.util.Inflector": [], + "Ext.grid.Panel": [ + "widget.grid", + "widget.gridpanel" + ], + "Ext.data.NodeStore": [ + "store.node" + ], + "Ext.Shadow": [], + "Ext.form.action.Submit": [ + "formaction.submit" + ], + "Ext.form.Panel": [ + "widget.form" + ], + "Ext.chart.series.Series": [], + "Ext.data.Request": [], + "Ext.dd.DD": [], + "Ext.toolbar.Fill": [ + "widget.tbfill" + ], + "Ext.grid.RowNumberer": [ + "widget.rownumberer" + ], + "Ext.data.proxy.WebStorage": [], + "Ext.util.Floating": [], + "Ext.form.action.DirectSubmit": [ + "formaction.directsubmit" + ], + "Ext.util.Cookies": [], + "Ext.data.UuidGenerator": [ + "idgen.uuid" + ], + "Ext.util.Point": [], + "Ext.fx.target.Component": [], + "Ext.form.CheckboxManager": [], + "Ext.form.field.Field": [], + "Ext.form.field.Display": [ + "widget.displayfield" + ], + "Ext.layout.container.Anchor": [ + "layout.anchor" + ], + "Ext.layout.component.field.Text": [ + "layout.textfield" + ], + "Ext.data.DirectStore": [ + "store.direct" + ], + "Ext.dom.Layer": [], + "Ext.grid.RowEditorButtons": [ + "widget.roweditorbuttons" + ], + "Ext.data.BufferStore": [ + "store.buffer" + ], + "Ext.grid.plugin.DivRenderer": [ + "plugin.divrenderer" + ], + "Ext.grid.ColumnLayout": [ + "layout.gridcolumn" + ], + "Ext.chart.series.Column": [ + "series.column" + ], + "Ext.AbstractComponent": [], + "Ext.flash.Component": [ + "widget.flash" + ], + "Ext.form.field.Base": [ + "widget.field" + ], + "Ext.grid.feature.GroupStore": [], + "Ext.data.SequentialIdGenerator": [ + "idgen.sequential" + ], + "Ext.grid.header.Container": [ + "widget.headercontainer" + ], + "Ext.container.ButtonGroup": [ + "widget.buttongroup" + ], + "Ext.grid.column.Action": [ + "widget.actioncolumn" + ], + "Ext.layout.component.field.Trigger": [ + "layout.triggerfield" + ], + "Ext.layout.component.field.FieldContainer": [ + "layout.fieldcontainer" + ], + "Ext.chart.Shape": [], + "Ext.panel.DD": [], + "Ext.container.AbstractContainer": [], + "Ext.data.ArrayStore": [ + "store.array" + ], + "Ext.window.Window": [ + "widget.window" + ], + "Ext.picker.Color": [ + "widget.colorpicker" + ], + "Ext.grid.feature.Feature": [ + "feature.feature" + ], + "Ext.chart.theme.Theme": [], + "Ext.util.ClickRepeater": [], + "Ext.form.field.Spinner": [ + "widget.spinnerfield" + ], + "Ext.container.DockingContainer": [], + "Ext.selection.DataViewModel": [], + "Ext.dd.DragTracker": [], + "Ext.data.Group": [], + "Ext.dd.DragDropManager": [], + "Ext.selection.CheckboxModel": [ + "selection.checkboxmodel" + ], + "Ext.menu.KeyNav": [], + "Ext.layout.container.Column": [ + "layout.column" + ], + "Ext.draw.Matrix": [], + "Ext.form.field.Number": [ + "widget.numberfield" + ], + "Ext.rtl.util.Renderable": [], + "Ext.data.proxy.Direct": [ + "proxy.direct" + ], + "Ext.chart.Navigation": [], + "Ext.slider.Tip": [ + "widget.slidertip" + ], + "Ext.chart.theme.Base": [], + "Ext.form.field.TextArea": [ + "widget.textarea", + "widget.textareafield" + ], + "Ext.rtl.layout.container.VBox": [], + "Ext.form.field.Radio": [ + "widget.radio", + "widget.radiofield" + ], + "Ext.layout.component.ProgressBar": [ + "layout.progressbar" + ], + "Ext.chart.series.Pie": [ + "series.pie" + ], + "Ext.tree.plugin.TreeViewDragDrop": [ + "plugin.treeviewdragdrop" + ], + "Ext.direct.Provider": [ + "direct.provider" + ], + "Ext.data.TreeModel": [], + "Ext.layout.Layout": [], + "Ext.toolbar.TextItem": [ + "widget.tbtext" + ], + "Ext.rtl.button.Button": [], + "Ext.util.AbstractMixedCollection": [], + "Ext.data.JsonStore": [ + "store.json" + ], + "Ext.button.Split": [ + "widget.splitbutton" + ], + "Ext.dd.DropTarget": [], + "Ext.direct.RemotingEvent": [ + "direct.rpc" + ], + "Ext.draw.Sprite": [], + "Ext.fx.target.Sprite": [], + "Ext.data.proxy.LocalStorage": [ + "proxy.localstorage" + ], + "Ext.layout.component.Draw": [ + "layout.draw" + ], + "Ext.AbstractPlugin": [], + "Ext.Editor": [ + "widget.editor" + ], + "Ext.chart.axis.Radial": [ + "axis.radial" + ], + "Ext.chart.Tip": [], + "Ext.layout.container.Table": [ + "layout.table" + ], + "Ext.chart.axis.Abstract": [], + "Ext.data.proxy.Rest": [ + "proxy.rest" + ], + "Ext.util.Queue": [], + "Ext.rtl.layout.container.Absolute": [], + "Ext.state.CookieProvider": [], + "Ext.Img": [ + "widget.image", + "widget.imagecomponent" + ], + "Ext.dd.DragSource": [], + "Ext.grid.CellEditor": [], + "Ext.layout.ClassList": [], + "Ext.button.Manager": [], + "Ext.util.Sorter": [], + "Ext.resizer.SplitterTracker": [], + "Ext.panel.Table": [ + "widget.tablepanel" + ], + "Ext.draw.Color": [], + "Ext.chart.series.Bar": [ + "series.bar" + ], + "Ext.PluginManager": [], + "Ext.util.ComponentDragger": [], + "Ext.chart.series.Scatter": [ + "series.scatter" + ], + "Ext.chart.Callout": [], + "Ext.data.Store": [ + "store.store" + ], + "Ext.grid.feature.Summary": [ + "feature.summary" + ], + "Ext.util.ProtoElement": [], + "Ext.layout.component.Component": [], + "Ext.direct.Manager": [], + "Ext.data.proxy.Proxy": [ + "proxy.proxy" + ], + "Ext.menu.CheckItem": [ + "widget.menucheckitem" + ], + "Ext.layout.container.Card": [ + "layout.card" + ], + "Ext.draw.Component": [ + "widget.draw" + ], + "Ext.toolbar.Item": [ + "widget.tbitem" + ], + "Ext.form.RadioGroup": [ + "widget.radiogroup" + ], + "Ext.rtl.tab.Bar": [], + "Ext.rtl.form.field.Trigger": [], + "Ext.slider.Thumb": [], + "Ext.grid.header.DragZone": [], + "Ext.rtl.resizer.ResizeTracker": [], + "Ext.form.action.DirectLoad": [ + "formaction.directload" + ], + "Ext.picker.Time": [ + "widget.timepicker" + ], + "Ext.grid.plugin.BufferedRenderer": [ + "plugin.bufferedrenderer" + ], + "Ext.resizer.BorderSplitter": [ + "widget.bordersplitter" + ], + "Ext.menu.ColorPicker": [ + "widget.colormenu" + ], + "Ext.ZIndexManager": [], + "Ext.menu.Menu": [ + "widget.menu" + ], + "Ext.chart.LegendItem": [], + "Ext.toolbar.Spacer": [ + "widget.tbspacer" + ], + "Ext.rtl.dd.DD": [], + "Ext.panel.Panel": [ + "widget.panel" + ], + "Ext.util.Memento": [], + "Ext.data.proxy.Memory": [ + "proxy.memory" + ], + "Ext.app.domain.Store": [], + "Ext.chart.axis.Time": [ + "axis.time" + ], + "Ext.grid.plugin.DragDrop": [ + "plugin.gridviewdragdrop" + ], + "Ext.ComponentQuery": [], + "Ext.draw.engine.SvgExporter": [], + "Ext.layout.container.Auto": [ + "layout.auto", + "layout.autocontainer" + ], + "Ext.grid.locking.Lockable": [], + "Ext.view.AbstractView": [], + "Ext.util.Region": [], + "Ext.draw.Draw": [], + "Ext.fx.target.ElementCSS": [], + "Ext.rtl.panel.Panel": [], + "Ext.layout.component.field.HtmlEditor": [ + "layout.htmleditor" + ], + "Ext.data.proxy.SessionStorage": [ + "proxy.sessionstorage" + ], + "Ext.app.EventBus": [], + "Ext.menu.Separator": [ + "widget.menuseparator" + ], + "Ext.util.History": [], + "Ext.direct.Event": [ + "direct.event" + ], + "Ext.direct.RemotingMethod": [], + "Ext.dd.ScrollManager": [], + "Ext.chart.Mask": [], + "Ext.rtl.dom.Element_anim": [], + "Ext.selection.CellModel": [ + "selection.cellmodel" + ], + "Ext.view.TableLayout": [ + "layout.tableview" + ], + "Ext.rtl.panel.Header": [], + "Ext.rtl.dom.Element_scroll": [], + "Ext.state.Provider": [], + "Ext.layout.container.Editor": [ + "layout.editor" + ], + "Ext.data.Errors": [], + "Ext.grid.plugin.RowExpander": [ + "plugin.rowexpander" + ], + "Ext.selection.TreeModel": [ + "selection.treemodel" + ], + "Ext.form.Labelable": [], + "Ext.grid.column.Number": [ + "widget.numbercolumn" + ], + "Ext.draw.engine.Svg": [], + "Ext.grid.property.Grid": [ + "widget.propertygrid" + ], + "Ext.FocusManager": [], + "Ext.AbstractManager": [], + "Ext.chart.series.Radar": [ + "series.radar" + ], + "Ext.rtl.dom.Element_insertion": [], + "Ext.grid.property.Property": [], + "Ext.chart.TipSurface": [], + "Ext.layout.SizeModel": [], + "Ext.grid.column.Boolean": [ + "widget.booleancolumn" + ], + "Ext.direct.PollingProvider": [ + "direct.pollingprovider" + ], + "Ext.grid.plugin.HeaderResizer": [ + "plugin.gridheaderresizer" + ], + "Ext.tree.Column": [ + "widget.treecolumn" + ], + "Ext.data.writer.Xml": [ + "writer.xml" + ], + "Ext.slider.Multi": [ + "widget.multislider" + ], + "Ext.panel.AbstractPanel": [], + "Ext.layout.component.field.Slider": [ + "layout.sliderfield" + ], + "Ext.chart.axis.Numeric": [ + "axis.numeric" + ], + "Ext.layout.container.boxOverflow.Scroller": [], + "Ext.data.Operation": [], + "Ext.resizer.Resizer": [], + "Ext.layout.container.HBox": [ + "layout.hbox" + ], + "Ext.selection.RowModel": [ + "selection.rowmodel" + ], + "Ext.layout.ContextItem": [], + "Ext.util.MixedCollection": [] +}); diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/ext-theme-gray-all.css b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/ext-theme-gray-all.css new file mode 100644 index 000000000..6cd1c4e5c --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/ext-theme-gray-all.css @@ -0,0 +1 @@ +.x-body{margin:0}img{border:0}.x-border-box,.x-border-box *{box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-rtl{direction:rtl}.x-ltr{direction:ltr}.x-clear{overflow:hidden;clear:both;font-size:0;line-height:0;display:table}.x-strict .x-ie7 .x-clear{height:0;width:0}.x-layer{position:absolute!important;overflow:hidden;zoom:1}.x-fixed-layer{position:fixed!important;overflow:hidden;zoom:1}.x-shim{position:absolute;left:0;top:0;overflow:hidden;filter:alpha(opacity=0);opacity:0}.x-hide-display{display:none!important}.x-hide-visibility{visibility:hidden!important}.x-ie6 .x-item-disabled{filter:none}.x-hidden,.x-hide-offsets{display:block!important;visibility:hidden!important;position:absolute!important;top:-10000px!important}.x-hide-nosize{height:0!important;width:0!important}.x-masked-relative{position:relative}.x-ie-shadow{background-color:#777;display:none;position:absolute;overflow:hidden;zoom:1}.x-unselectable{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;cursor:default}.x-selectable{cursor:auto;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text;user-select:text;-o-user-select:text}.x-list-plain{list-style-type:none;margin:0;padding:0}.x-table-plain{border-collapse:collapse;border-spacing:0;font-size:1em}.x-frame-tl,.x-frame-tr,.x-frame-tc,.x-frame-bl,.x-frame-br,.x-frame-bc{overflow:hidden;background-repeat:no-repeat}.x-frame-tc,.x-frame-bc{background-repeat:repeat-x}.x-frame-mc{background-repeat:repeat-x;overflow:hidden}.x-proxy-el{position:absolute;background:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-css-shadow{position:absolute;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}.x-item-disabled,.x-item-disabled *{cursor:default}.x-box-item{position:absolute!important;left:0;top:0}.x-mask{z-index:100;position:absolute;width:100%;height:100%;zoom:1}.x-mask-shim{z-index:100;position:absolute;top:0;left:0;width:100%;height:100%}.x-mask-msg{z-index:20001;position:absolute}.x-progress{position:relative;border-style:solid;overflow:hidden}.x-progress-bar{overflow:hidden;position:absolute;width:0;height:100%}.x-progress-text{overflow:hidden;position:absolute}.x-btn{display:inline-block;position:relative;zoom:1;*display:inline;cursor:pointer;white-space:nowrap;vertical-align:middle;text-decoration:none}.x-btn-wrap{position:relative}.x-btn-button{position:relative;display:block;text-decoration:none;overflow:hidden;outline:0;zoom:1}.x-btn-inner{display:block;white-space:nowrap;overflow:hidden;zoom:1}.x-btn-icon-el{top:0;right:0;bottom:0;left:0;position:absolute;background-repeat:no-repeat;text-align:center}.x-btn-inner-center{text-align:center}.x-btn-inner-left{text-align:left}.x-btn-inner-right{text-align:right}.x-box-layout-ct{overflow:hidden;zoom:1}.x-box-target{position:absolute;width:20000px;top:0;left:0;height:1px}.x-box-inner{overflow:hidden;zoom:1;position:relative;left:0;top:0}.x-horizontal-box-overflow-body{float:left}.x-box-scroller{position:relative;background-repeat:no-repeat}.x-box-scroller-left,.x-box-scroller-right{float:left;height:100%;z-index:5}.x-box-scroller-top .x-box-scroller,.x-box-scroller-bottom .x-box-scroller{line-height:0;font-size:0;background-position:center 0}.x-box-menu-after{float:right}.x-toolbar-text{white-space:nowrap}.x-toolbar-separator{display:block;font-size:1px;overflow:hidden;cursor:default;border:0;width:0;height:0;line-height:0}.x-quirks .x-ie .x-toolbar .x-toolbar-separator-horizontal{width:2px}.x-toolbar-scroller{padding-left:0}.x-toolbar-plain{border:0}.x-docked{position:absolute!important;z-index:1}.x-docked-vertical{position:static}.x-docked-top{border-bottom-width:0!important}.x-docked-bottom{border-top-width:0!important}.x-docked-left{border-right-width:0!important}.x-docked-right{border-left-width:0!important}.x-docked-noborder-top{border-top-width:0!important}.x-docked-noborder-right{border-right-width:0!important}.x-docked-noborder-bottom{border-bottom-width:0!important}.x-docked-noborder-left{border-left-width:0!important}.x-noborder-l{border-left-width:0!important}.x-noborder-b{border-bottom-width:0!important}.x-noborder-bl{border-bottom-width:0!important;border-left-width:0!important}.x-noborder-r{border-right-width:0!important}.x-noborder-rl{border-right-width:0!important;border-left-width:0!important}.x-noborder-rb{border-right-width:0!important;border-bottom-width:0!important}.x-noborder-rbl{border-right-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-t{border-top-width:0!important}.x-noborder-tl{border-top-width:0!important;border-left-width:0!important}.x-noborder-tb{border-top-width:0!important;border-bottom-width:0!important}.x-noborder-tbl{border-top-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-tr{border-top-width:0!important;border-right-width:0!important}.x-noborder-trl{border-top-width:0!important;border-right-width:0!important;border-left-width:0!important}.x-noborder-trb{border-top-width:0!important;border-right-width:0!important;border-bottom-width:0!important}.x-noborder-trbl{border-width:0!important}.x-header-icon{background-repeat:no-repeat;background-position:0 0;vertical-align:middle;text-align:center}.x-header-text-container{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.x-dd-drag-proxy,.x-dd-drag-current{z-index:1000000!important;pointer-events:none}.x-dd-drag-repair .x-dd-drag-ghost{filter:alpha(opacity=60);opacity:.6}.x-dd-drag-repair .x-dd-drop-icon{display:none}.x-dd-drag-ghost{filter:alpha(opacity=85);opacity:.85;padding:5px;padding-left:20px;white-space:nowrap;color:#000;font:normal 11px tahoma,arial,verdana,sans-serif;border:1px solid;border-color:#ddd #bbb #bbb #ddd;background-color:#fff}.x-dd-drop-icon{position:absolute;top:3px;left:3px;display:block;width:16px;height:16px;background-color:transparent;background-position:center;background-repeat:no-repeat;z-index:1}.x-dd-drop-ok .x-dd-drop-icon{background-image:url(images/dd/drop-yes.gif)}.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(images/dd/drop-add.gif)}.x-dd-drop-nodrop div.x-dd-drop-icon{background-image:url(images/dd/drop-no.gif)}.x-panel,.x-plain{overflow:hidden;position:relative}.x-panel{outline:0}.x-ie .x-panel-header,.x-ie .x-panel-header-tl,.x-ie .x-panel-header-tc,.x-ie .x-panel-header-tr,.x-ie .x-panel-header-ml,.x-ie .x-panel-header-mc,.x-ie .x-panel-header-mr,.x-ie .x-panel-header-bl,.x-ie .x-panel-header-bc,.x-ie .x-panel-header-br{zoom:1}.x-ie8 td.x-frame-mc{vertical-align:top}.x-panel-body{overflow:hidden;position:relative}.x-nlg .x-panel-header-vertical .x-frame-mc{background-repeat:repeat-y}.x-panel-header-plain,.x-panel-body-plain{border:0;padding:0}.x-tip{position:absolute;overflow:visible}.x-tip-body{overflow:hidden;position:relative}.x-tip-anchor{position:absolute;overflow:hidden;border-style:solid}.x-table-layout{font-size:1em}.x-btn-group{position:relative;overflow:hidden}.x-btn-group-body{position:relative;zoom:1}.x-btn-group-body .x-table-layout-cell{vertical-align:top}.x-viewport,.x-viewport body{margin:0;padding:0;border:0 none;overflow:hidden;height:100%;position:static}.x-window{outline:0;overflow:hidden}.x-window .x-window-wrap{position:relative}.x-window-body{position:relative;overflow:hidden}.x-window-body-plain{background:transparent}.x-form-item-label{display:block}.x-form-item-label-right{text-align:right}.x-form-item-label-top{display:block;zoom:1}.x-form-invalid-icon{overflow:hidden}.x-form-invalid-icon ul{display:none}.x-form-textarea{overflow:auto;resize:none}.x-safari.x-mac .x-form-textarea{margin-bottom:-2px}table.x-form-checkboxgroup{margin:0}.x-fieldset{display:block;position:relative}.x-fieldset-header{overflow:hidden}.x-fieldset-header .x-form-item,.x-fieldset-header .x-tool{float:left}.x-fieldset-header .x-form-cb-wrap{font-size:0;line-height:0}.x-fieldset-header .x-form-cb{margin:0}.x-fieldset-header-text{float:left}.x-webkit *:focus{outline:none!important}.x-form-item{vertical-align:top;table-layout:fixed}.x-form-item-body{position:relative}.x-form-form-item td{border-top:1px solid transparent}.x-form-cb{vertical-align:top;overflow:hidden;padding:0;border:0}.x-form-cb::-moz-focus-inner{padding:0;border:0}.x-form-cb-label{zoom:1}.x-form-trigger{cursor:pointer;overflow:hidden;background-repeat:no-repeat}.x-item-disabled .x-form-trigger{cursor:default}.x-trigger-noedit{cursor:default}.x-form-trigger-wrap{vertical-align:top}.x-form-spinner-up,.x-form-spinner-down{font-size:0;border-bottom:0}.x-datepicker{position:relative}.x-datepicker-inner{table-layout:fixed;width:100%;border-collapse:separate}.x-datepicker-cell{padding:0}.x-datepicker-header{position:relative;zoom:1}.x-datepicker-arrow{position:absolute;outline:0;font-size:0}.x-datepicker-column-header{padding:0}.x-datepicker-date{display:block;zoom:1;text-decoration:none}.x-monthpicker{position:absolute;left:0;top:0}.x-monthpicker-body{height:100%}.x-monthpicker-months,.x-monthpicker-years{float:left;height:100%}.x-monthpicker-item{float:left}.x-monthpicker-item-inner{display:block;text-decoration:none}.x-monthpicker-yearnav-button-ct{float:left;text-align:center}.x-monthpicker-yearnav-button{display:inline-block;outline:0;font-size:0}.x-monthpicker-buttons{position:absolute;bottom:0;width:100%}.x-strict .x-ie6 .x-monthpicker-buttons{bottom:-1px}.x-form-file-wrap .x-form-file-input{position:absolute;top:-4px;right:-2px;height:30px;filter:alpha(opacity=0);opacity:0;font-size:100px}.x-form-item-hidden{margin:0}.x-color-picker-item{float:left;text-decoration:none}.x-color-picker-item-inner{display:block;font-size:1px}.x-html-editor-tb .x-toolbar{position:static!important}.x-htmleditor-iframe{display:block;overflow:auto}.x-fit-item{position:relative}.x-grid-row{outline:0}.x-abs-layout-ct{position:relative}.x-abs-layout-item{position:absolute!important}.x-splitter{font-size:1px}.x-splitter-horizontal{cursor:e-resize;cursor:row-resize}.x-splitter-vertical{cursor:e-resize;cursor:col-resize}.x-splitter-collapsed,.x-splitter-horizontal-noresize,.x-splitter-vertical-noresize{cursor:default}.x-splitter-active{z-index:4}.x-collapse-el{position:absolute;background-repeat:no-repeat}.x-border-layout-ct{overflow:hidden;zoom:1}.x-border-layout-ct{position:relative}.x-border-region-slide-in{z-index:5}.x-region-collapsed-placeholder{z-index:4}.x-column{float:left}.x-ie6 .x-column{display:inline}.x-quirks .x-ie .x-form-layout-table,.x-quirks .x-ie .x-form-layout-table tbody tr.x-form-item{position:relative}.x-form-layout-table{border-collapse:separate;border-spacing:0 2px}.x-ie6 .x-form-layout-table{border-collapse:collapse;border-spacing:0}.x-menu{outline:0}.x-menu-item{white-space:nowrap;overflow:hidden}.x-menu-item-cmp .x-field-label-cell{vertical-align:middle}.x-menu-icon-separator{position:absolute;top:0;z-index:0;height:100%;overflow:hidden}.x-menu-plain .x-menu-icon-separator{display:none}.x-menu-item-link{text-decoration:none;outline:0;zoom:1}.x-menu-item-text{zoom:1}.x-menu-item-icon,.x-menu-item-icon-right,.x-menu-item-arrow{position:absolute;text-align:center}.x-resizable-overlay{position:absolute;left:0;top:0;width:100%;height:100%;display:none;z-index:200000;background-color:#fff;filter:alpha(opacity=0);opacity:0}.x-slider{outline:0;zoom:1;position:relative}.x-slider-inner{position:relative;left:0;top:0;overflow:visible;zoom:1}.x-slider-vert .x-slider-inner{background:repeat-y 0 0}.x-slider-end{zoom:1}.x-slider-thumb{position:absolute;background:no-repeat 0 0}.x-slider-horz .x-slider-thumb{left:0}.x-slider-vert .x-slider-thumb{bottom:0}.x-tab{display:block;white-space:nowrap;z-index:1}.x-tab-active{z-index:3}.x-tab-wrap{display:block;position:relative}.x-tab-button{zoom:1;display:block;outline:0}.x-tab-inner{display:block;text-align:center;white-space:nowrap;text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow:hidden;zoom:1}.x-btn-icon-el{top:0;right:0;bottom:0;left:0;position:absolute;background-repeat:no-repeat;text-align:center}.x-tab-bar{z-index:1}.x-tab-bar-body{z-index:2;position:relative}.x-tab-bar-strip{position:absolute;line-height:0;font-size:0;z-index:1}.x-tab-bar-horizontal .x-tab-bar-strip{width:100%;left:0}.x-tab-bar-vertical .x-tab-bar-strip{height:100%;top:0}.x-tab-bar-strip-top{bottom:0}.x-tab-bar-strip-bottom{top:0}.x-tab-bar-strip-left{right:0}.x-tab-bar-strip-right{left:0}.x-tab-bar-plain{background:transparent!important}.x-tab-icon-el{position:absolute;background-repeat:no-repeat;top:0;left:0;right:auto;bottom:0}.x-tab-close-btn{position:absolute;font-size:0;line-height:0;background:no-repeat}.x-tab-mc{overflow:visible}.x-surface{display:-moz-inline-stack;display:inline-block;vertical-align:middle;*vertical-align:auto;zoom:1;*display:inline;overflow:hidden}.rvml{behavior:url(#default#VML)}.x-surface tspan{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;cursor:default}.x-vml-sprite{position:absolute;left:0;top:0;width:1px;height:1px}.x-vml-group{position:absolute;left:0;top:0;width:1000px;height:1000px}.x-vml-measure-span{position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;display:inline}.x-vml-base{position:relative;top:0;left:0;overflow:hidden;display:inline-block}.x-vml-base{position:relative;top:0;left:0;overflow:hidden;display:inline-block}svg,vml{overflow:hidden}.x-body{color:black;font-size:12px;font-family:tahoma,arial,verdana,sans-serif}.x-animating-size,.x-collapsed{overflow:hidden!important}.x-editor .x-form-item-body{padding-bottom:0}.x-focus-element{position:absolute;top:-10px;left:-10px;width:0;height:0}.x-focus-frame{position:absolute;left:0;top:0;z-index:100000000;width:0;height:0}.x-focus-frame-top,.x-focus-frame-bottom,.x-focus-frame-left,.x-focus-frame-right{position:absolute;top:0;left:0}.x-focus-frame-top,.x-focus-frame-bottom{border-top:solid 2px #15428b;height:2px}.x-focus-frame-left,.x-focus-frame-right{border-left:solid 2px #15428b;width:2px}.x-mask{filter:alpha(opacity=50);opacity:.5;background:#ccc}.x-mask-msg{padding:2px;border-style:solid;border-width:1px;border-color:#bcb0b0;background-image:none;background-color:#e0e0e0}.x-mask-msg-inner{padding:0 5px;border-style:solid;border-width:1px;border-color:#b3b3b3;background-color:#eee;color:#222;font:normal 11px tahoma,arial,verdana,sans-serif}.x-mask-msg-text{padding:5px 5px 5px 20px;background-image:url(images/grid/loading.gif);background-repeat:no-repeat;background-position:0 center}.x-progress-default{background-color:#f1f1f1;border-width:1px;height:20px;border-color:#8e8e8e}.x-strict .x-ie7m .x-progress-default{height:18px}.x-progress-default .x-progress-bar-default{background-image:none;background-color:#ababab;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d1d1d1),color-stop(50%,#b8b8b8),color-stop(51%,#ababab),color-stop(100%,#9e9e9e));background-image:-webkit-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:-moz-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:-o-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e)}.x-nlg .x-progress-default .x-progress-bar-default{background:repeat-x;background-image:url(images/progress/progress-default-bg.gif)}.x-progress-default .x-progress-text{color:white;font-weight:bold;font-size:11px;text-align:center;line-height:18px}.x-progress-default .x-progress-text-back{color:#5d5d5d;line-height:18px}.x-progress-default .x-progress-bar-default:after{display:none;content:"x-slicer:bg:url(images/progress/progress-default-bg.gif)"}.x-btn-default-small{border-color:#bbb}.x-btn-default-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-image:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:linear-gradient(top,#fff,#eee)}.x-btn-default-small-mc{background-image:url(images/btn/btn-default-small-fbg.gif);background-position:0 top;background-color:#f8f8f8}.x-nlg .x-btn-default-small{background-image:url(images/btn/btn-default-small-bg.gif);background-position:0 top}.x-nbr .x-btn-default-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-small{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2")}.x-btn-default-small-tl{background-position:0 -6px}.x-btn-default-small-tr{background-position:right -9px}.x-btn-default-small-bl{background-position:0 -12px}.x-btn-default-small-br{background-position:right -15px}.x-btn-default-small-ml{background-position:0 top}.x-btn-default-small-mr{background-position:right top}.x-btn-default-small-tc{background-position:0 0}.x-btn-default-small-bc{background-position:0 -3px}.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-mr{padding-right:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-ml{padding-left:3px}.x-btn-default-small-tc{height:3px}.x-btn-default-small-bc{height:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-tc,.x-btn-default-small-bc,.x-btn-default-small-ml,.x-btn-default-small-mr{zoom:1;background-image:url(images/btn/btn-default-small-corners.gif)}.x-btn-default-small-ml,.x-btn-default-small-mr{zoom:1;background-image:url(images/btn/btn-default-small-sides.gif)}.x-btn-default-small-mc{padding:0}.x-strict .x-ie7 .x-btn-default-small-tl,.x-strict .x-ie7 .x-btn-default-small-bl{position:relative;right:0}.x-btn-default-small:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-small-fbg.gif), bg:url(images/btn/btn-default-small-bg.gif), corners:url(images/btn/btn-default-small-corners.gif), sides:url(images/btn/btn-default-small-sides.gif)"}.x-btn-default-small .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px}.x-btn-default-small .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-small .x-btn-arrow-right{padding-right:12px}.x-btn-default-small .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-small .x-btn-glyph{font-size:16px;line-height:16px;color:#333;opacity:.5}.x-ie8m .x-btn-default-small .x-btn-glyph{color:#959595}.x-btn-default-small-disabled{border-color:#d7d7d7;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f4f4f4),color-stop(100%,#e2e2e2));background-image:-webkit-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-moz-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-o-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:linear-gradient(top,#f4f4f4,#e2e2e2)}.x-btn-default-small-icon .x-btn-button,.x-btn-default-small-noicon .x-btn-button{height:16px}.x-btn-default-small-icon .x-btn-inner,.x-btn-default-small-noicon .x-btn-inner{line-height:16px}.x-btn-default-small-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-small-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-small-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-small-icon .x-btn-inner{width:16px;padding:0}.x-btn-default-small-icon .x-btn-icon-el{width:16px;height:16px}.x-btn-default-small-icon-text-left .x-btn-button{height:16px}.x-btn-default-small-icon-text-left .x-btn-inner{line-height:16px;padding-left:20px}.x-btn-default-small-icon-text-left .x-btn-icon-el{width:16px;right:auto}.x-ie6 .x-btn-default-small-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-small-icon-text-left .x-btn-icon-el{height:16px}.x-btn-default-small-icon-text-right .x-btn-button{height:16px}.x-btn-default-small-icon-text-right .x-btn-inner{line-height:16px;padding-right:20px}.x-btn-default-small-icon-text-right .x-btn-icon-el{width:16px;left:auto}.x-ie6 .x-btn-default-small-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-small-icon-text-right .x-btn-icon-el{height:16px}.x-btn-default-small-icon-text-top .x-btn-inner{padding-top:20px}.x-btn-default-small-icon-text-top .x-btn-icon-el{height:16px;bottom:auto}.x-ie6 .x-btn-default-small-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-small-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-small-icon-text-bottom .x-btn-inner{padding-bottom:20px}.x-btn-default-small-icon-text-bottom .x-btn-icon-el{height:16px;top:auto}.x-ie6 .x-btn-default-small-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-small-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-small-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-small-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-small-menu-active,.x-btn-default-small-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn-default-small-over .x-frame-tl,.x-btn-default-small-over .x-frame-bl,.x-btn-default-small-over .x-frame-tr,.x-btn-default-small-over .x-frame-br,.x-btn-default-small-over .x-frame-tc,.x-btn-default-small-over .x-frame-bc{background-image:url(images/btn/btn-default-small-over-corners.gif)}.x-btn-default-small-over .x-frame-ml,.x-btn-default-small-over .x-frame-mr{background-image:url(images/btn/btn-default-small-over-sides.gif)}.x-btn-default-small-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-small-over-fbg.gif)}.x-btn-default-small-focus .x-frame-tl,.x-btn-default-small-focus .x-frame-bl,.x-btn-default-small-focus .x-frame-tr,.x-btn-default-small-focus .x-frame-br,.x-btn-default-small-focus .x-frame-tc,.x-btn-default-small-focus .x-frame-bc{background-image:url(images/btn/btn-default-small-focus-corners.gif)}.x-btn-default-small-focus .x-frame-ml,.x-btn-default-small-focus .x-frame-mr{background-image:url(images/btn/btn-default-small-focus-sides.gif)}.x-btn-default-small-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-small-focus-fbg.gif)}.x-btn-default-small-menu-active .x-frame-tl,.x-btn-default-small-menu-active .x-frame-bl,.x-btn-default-small-menu-active .x-frame-tr,.x-btn-default-small-menu-active .x-frame-br,.x-btn-default-small-menu-active .x-frame-tc,.x-btn-default-small-menu-active .x-frame-bc,.x-btn-default-small-pressed .x-frame-tl,.x-btn-default-small-pressed .x-frame-bl,.x-btn-default-small-pressed .x-frame-tr,.x-btn-default-small-pressed .x-frame-br,.x-btn-default-small-pressed .x-frame-tc,.x-btn-default-small-pressed .x-frame-bc{background-image:url(images/btn/btn-default-small-pressed-corners.gif)}.x-btn-default-small-menu-active .x-frame-ml,.x-btn-default-small-menu-active .x-frame-mr,.x-btn-default-small-pressed .x-frame-ml,.x-btn-default-small-pressed .x-frame-mr{background-image:url(images/btn/btn-default-small-pressed-sides.gif)}.x-btn-default-small-menu-active .x-frame-mc,.x-btn-default-small-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-small-pressed-fbg.gif)}.x-btn-default-small-disabled .x-frame-tl,.x-btn-default-small-disabled .x-frame-bl,.x-btn-default-small-disabled .x-frame-tr,.x-btn-default-small-disabled .x-frame-br,.x-btn-default-small-disabled .x-frame-tc,.x-btn-default-small-disabled .x-frame-bc{background-image:url(images/btn/btn-default-small-disabled-corners.gif)}.x-btn-default-small-disabled .x-frame-ml,.x-btn-default-small-disabled .x-frame-mr{background-image:url(images/btn/btn-default-small-disabled-sides.gif)}.x-btn-default-small-disabled .x-frame-mc{background-color:#ececec;background-image:url(images/btn/btn-default-small-disabled-fbg.gif)}.x-nlg .x-btn-default-small{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-bg.gif)}.x-nlg .x-btn-default-small-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-over-bg.gif)}.x-nlg .x-btn-default-small-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-focus-bg.gif)}.x-nlg .x-btn-default-small-menu-active,.x-nlg .x-btn-default-small-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-pressed-bg.gif)}.x-nlg .x-btn-default-small-disabled{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-disabled-bg.gif)}.x-btn-default-small .x-btn-split-right{background-image:url(images/button/s-arrow.gif);padding-right:14px}.x-btn-default-small .x-btn-split-bottom{background-image:url(images/button/s-arrow-b.gif);padding-bottom:14px}.x-btn-default-small-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-small-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-small-disabled .x-btn-inner,.x-btn-default-small-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-small-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-over-corners.gif), sides:url(images/btn/btn-default-small-over-sides.gif), frame-bg:url(images/btn/btn-default-small-over-fbg.gif), bg:url(images/btn/btn-default-small-over-bg.gif)"}.x-btn-default-small-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-focus-corners.gif), sides:url(images/btn/btn-default-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-small-focus-fbg.gif), bg:url(images/btn/btn-default-small-focus-bg.gif)"}.x-btn-default-small-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-pressed-corners.gif), sides:url(images/btn/btn-default-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-small-pressed-fbg.gif), bg:url(images/btn/btn-default-small-pressed-bg.gif)"}.x-btn-default-small-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-disabled-corners.gif), sides:url(images/btn/btn-default-small-disabled-sides.gif), frame-bg:url(images/btn/btn-default-small-disabled-fbg.gif), bg:url(images/btn/btn-default-small-disabled-bg.gif)"}.x-btn-default-medium{border-color:#bbb}.x-btn-default-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:linear-gradient(top,#fff,#eee)}.x-btn-default-medium-mc{background-image:url(images/btn/btn-default-medium-fbg.gif);background-position:0 top;background-color:#f8f8f8}.x-nlg .x-btn-default-medium{background-image:url(images/btn/btn-default-medium-bg.gif);background-position:0 top}.x-nbr .x-btn-default-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-medium{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3")}.x-btn-default-medium-tl{background-position:0 -6px}.x-btn-default-medium-tr{background-position:right -9px}.x-btn-default-medium-bl{background-position:0 -12px}.x-btn-default-medium-br{background-position:right -15px}.x-btn-default-medium-ml{background-position:0 top}.x-btn-default-medium-mr{background-position:right top}.x-btn-default-medium-tc{background-position:0 0}.x-btn-default-medium-bc{background-position:0 -3px}.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-mr{padding-right:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-ml{padding-left:3px}.x-btn-default-medium-tc{height:3px}.x-btn-default-medium-bc{height:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-tc,.x-btn-default-medium-bc,.x-btn-default-medium-ml,.x-btn-default-medium-mr{zoom:1;background-image:url(images/btn/btn-default-medium-corners.gif)}.x-btn-default-medium-ml,.x-btn-default-medium-mr{zoom:1;background-image:url(images/btn/btn-default-medium-sides.gif)}.x-btn-default-medium-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-medium-tl,.x-strict .x-ie7 .x-btn-default-medium-bl{position:relative;right:0}.x-btn-default-medium:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-medium-fbg.gif), bg:url(images/btn/btn-default-medium-bg.gif), corners:url(images/btn/btn-default-medium-corners.gif), sides:url(images/btn/btn-default-medium-sides.gif)"}.x-btn-default-medium .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-medium .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-medium .x-btn-arrow-right{padding-right:12px}.x-btn-default-medium .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-medium .x-btn-glyph{font-size:24px;line-height:24px;color:#333;opacity:.5}.x-ie8m .x-btn-default-medium .x-btn-glyph{color:#959595}.x-btn-default-medium-disabled{border-color:#d7d7d7;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f4f4f4),color-stop(100%,#e2e2e2));background-image:-webkit-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-moz-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-o-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:linear-gradient(top,#f4f4f4,#e2e2e2)}.x-btn-default-medium-icon .x-btn-button,.x-btn-default-medium-noicon .x-btn-button{height:24px}.x-btn-default-medium-icon .x-btn-inner,.x-btn-default-medium-noicon .x-btn-inner{line-height:24px}.x-btn-default-medium-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-medium-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-medium-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-medium-icon .x-btn-inner{width:24px;padding:0}.x-btn-default-medium-icon .x-btn-icon-el{width:24px;height:24px}.x-btn-default-medium-icon-text-left .x-btn-button{height:24px}.x-btn-default-medium-icon-text-left .x-btn-inner{line-height:24px;padding-left:28px}.x-btn-default-medium-icon-text-left .x-btn-icon-el{width:24px;right:auto}.x-ie6 .x-btn-default-medium-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-medium-icon-text-left .x-btn-icon-el{height:24px}.x-btn-default-medium-icon-text-right .x-btn-button{height:24px}.x-btn-default-medium-icon-text-right .x-btn-inner{line-height:24px;padding-right:28px}.x-btn-default-medium-icon-text-right .x-btn-icon-el{width:24px;left:auto}.x-ie6 .x-btn-default-medium-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-medium-icon-text-right .x-btn-icon-el{height:24px}.x-btn-default-medium-icon-text-top .x-btn-inner{padding-top:28px}.x-btn-default-medium-icon-text-top .x-btn-icon-el{height:24px;bottom:auto}.x-ie6 .x-btn-default-medium-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-medium-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-medium-icon-text-bottom .x-btn-inner{padding-bottom:28px}.x-btn-default-medium-icon-text-bottom .x-btn-icon-el{height:24px;top:auto}.x-ie6 .x-btn-default-medium-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-medium-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-medium-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-medium-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-medium-menu-active,.x-btn-default-medium-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn-default-medium-over .x-frame-tl,.x-btn-default-medium-over .x-frame-bl,.x-btn-default-medium-over .x-frame-tr,.x-btn-default-medium-over .x-frame-br,.x-btn-default-medium-over .x-frame-tc,.x-btn-default-medium-over .x-frame-bc{background-image:url(images/btn/btn-default-medium-over-corners.gif)}.x-btn-default-medium-over .x-frame-ml,.x-btn-default-medium-over .x-frame-mr{background-image:url(images/btn/btn-default-medium-over-sides.gif)}.x-btn-default-medium-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-medium-over-fbg.gif)}.x-btn-default-medium-focus .x-frame-tl,.x-btn-default-medium-focus .x-frame-bl,.x-btn-default-medium-focus .x-frame-tr,.x-btn-default-medium-focus .x-frame-br,.x-btn-default-medium-focus .x-frame-tc,.x-btn-default-medium-focus .x-frame-bc{background-image:url(images/btn/btn-default-medium-focus-corners.gif)}.x-btn-default-medium-focus .x-frame-ml,.x-btn-default-medium-focus .x-frame-mr{background-image:url(images/btn/btn-default-medium-focus-sides.gif)}.x-btn-default-medium-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-medium-focus-fbg.gif)}.x-btn-default-medium-menu-active .x-frame-tl,.x-btn-default-medium-menu-active .x-frame-bl,.x-btn-default-medium-menu-active .x-frame-tr,.x-btn-default-medium-menu-active .x-frame-br,.x-btn-default-medium-menu-active .x-frame-tc,.x-btn-default-medium-menu-active .x-frame-bc,.x-btn-default-medium-pressed .x-frame-tl,.x-btn-default-medium-pressed .x-frame-bl,.x-btn-default-medium-pressed .x-frame-tr,.x-btn-default-medium-pressed .x-frame-br,.x-btn-default-medium-pressed .x-frame-tc,.x-btn-default-medium-pressed .x-frame-bc{background-image:url(images/btn/btn-default-medium-pressed-corners.gif)}.x-btn-default-medium-menu-active .x-frame-ml,.x-btn-default-medium-menu-active .x-frame-mr,.x-btn-default-medium-pressed .x-frame-ml,.x-btn-default-medium-pressed .x-frame-mr{background-image:url(images/btn/btn-default-medium-pressed-sides.gif)}.x-btn-default-medium-menu-active .x-frame-mc,.x-btn-default-medium-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-medium-pressed-fbg.gif)}.x-btn-default-medium-disabled .x-frame-tl,.x-btn-default-medium-disabled .x-frame-bl,.x-btn-default-medium-disabled .x-frame-tr,.x-btn-default-medium-disabled .x-frame-br,.x-btn-default-medium-disabled .x-frame-tc,.x-btn-default-medium-disabled .x-frame-bc{background-image:url(images/btn/btn-default-medium-disabled-corners.gif)}.x-btn-default-medium-disabled .x-frame-ml,.x-btn-default-medium-disabled .x-frame-mr{background-image:url(images/btn/btn-default-medium-disabled-sides.gif)}.x-btn-default-medium-disabled .x-frame-mc{background-color:#ececec;background-image:url(images/btn/btn-default-medium-disabled-fbg.gif)}.x-nlg .x-btn-default-medium{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-bg.gif)}.x-nlg .x-btn-default-medium-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-over-bg.gif)}.x-nlg .x-btn-default-medium-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-focus-bg.gif)}.x-nlg .x-btn-default-medium-menu-active,.x-nlg .x-btn-default-medium-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-pressed-bg.gif)}.x-nlg .x-btn-default-medium-disabled{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-disabled-bg.gif)}.x-btn-default-medium .x-btn-split-right{background-image:url(images/button/s-arrow.gif);padding-right:14px}.x-btn-default-medium .x-btn-split-bottom{background-image:url(images/button/s-arrow-b.gif);padding-bottom:14px}.x-btn-default-medium-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-medium-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-medium-disabled .x-btn-inner,.x-btn-default-medium-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-medium-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-over-corners.gif), sides:url(images/btn/btn-default-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-medium-over-fbg.gif), bg:url(images/btn/btn-default-medium-over-bg.gif)"}.x-btn-default-medium-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-focus-corners.gif), sides:url(images/btn/btn-default-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-medium-focus-fbg.gif), bg:url(images/btn/btn-default-medium-focus-bg.gif)"}.x-btn-default-medium-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-pressed-corners.gif), sides:url(images/btn/btn-default-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-medium-pressed-bg.gif)"}.x-btn-default-medium-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-disabled-corners.gif), sides:url(images/btn/btn-default-medium-disabled-sides.gif), frame-bg:url(images/btn/btn-default-medium-disabled-fbg.gif), bg:url(images/btn/btn-default-medium-disabled-bg.gif)"}.x-btn-default-large{border-color:#bbb}.x-btn-default-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:linear-gradient(top,#fff,#eee)}.x-btn-default-large-mc{background-image:url(images/btn/btn-default-large-fbg.gif);background-position:0 top;background-color:#f8f8f8}.x-nlg .x-btn-default-large{background-image:url(images/btn/btn-default-large-bg.gif);background-position:0 top}.x-nbr .x-btn-default-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-large{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3")}.x-btn-default-large-tl{background-position:0 -6px}.x-btn-default-large-tr{background-position:right -9px}.x-btn-default-large-bl{background-position:0 -12px}.x-btn-default-large-br{background-position:right -15px}.x-btn-default-large-ml{background-position:0 top}.x-btn-default-large-mr{background-position:right top}.x-btn-default-large-tc{background-position:0 0}.x-btn-default-large-bc{background-position:0 -3px}.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-mr{padding-right:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-ml{padding-left:3px}.x-btn-default-large-tc{height:3px}.x-btn-default-large-bc{height:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-tc,.x-btn-default-large-bc,.x-btn-default-large-ml,.x-btn-default-large-mr{zoom:1;background-image:url(images/btn/btn-default-large-corners.gif)}.x-btn-default-large-ml,.x-btn-default-large-mr{zoom:1;background-image:url(images/btn/btn-default-large-sides.gif)}.x-btn-default-large-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-large-tl,.x-strict .x-ie7 .x-btn-default-large-bl{position:relative;right:0}.x-btn-default-large:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-large-fbg.gif), bg:url(images/btn/btn-default-large-bg.gif), corners:url(images/btn/btn-default-large-corners.gif), sides:url(images/btn/btn-default-large-sides.gif)"}.x-btn-default-large .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-large .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-large .x-btn-arrow-right{padding-right:12px}.x-btn-default-large .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-large .x-btn-glyph{font-size:32px;line-height:32px;color:#333;opacity:.5}.x-ie8m .x-btn-default-large .x-btn-glyph{color:#959595}.x-btn-default-large-disabled{border-color:#d7d7d7;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f4f4f4),color-stop(100%,#e2e2e2));background-image:-webkit-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-moz-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-o-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:linear-gradient(top,#f4f4f4,#e2e2e2)}.x-btn-default-large-icon .x-btn-button,.x-btn-default-large-noicon .x-btn-button{height:32px}.x-btn-default-large-icon .x-btn-inner,.x-btn-default-large-noicon .x-btn-inner{line-height:32px}.x-btn-default-large-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-large-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-large-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-large-icon .x-btn-inner{width:32px;padding:0}.x-btn-default-large-icon .x-btn-icon-el{width:32px;height:32px}.x-btn-default-large-icon-text-left .x-btn-button{height:32px}.x-btn-default-large-icon-text-left .x-btn-inner{line-height:32px;padding-left:36px}.x-btn-default-large-icon-text-left .x-btn-icon-el{width:32px;right:auto}.x-ie6 .x-btn-default-large-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-large-icon-text-left .x-btn-icon-el{height:32px}.x-btn-default-large-icon-text-right .x-btn-button{height:32px}.x-btn-default-large-icon-text-right .x-btn-inner{line-height:32px;padding-right:36px}.x-btn-default-large-icon-text-right .x-btn-icon-el{width:32px;left:auto}.x-ie6 .x-btn-default-large-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-large-icon-text-right .x-btn-icon-el{height:32px}.x-btn-default-large-icon-text-top .x-btn-inner{padding-top:36px}.x-btn-default-large-icon-text-top .x-btn-icon-el{height:32px;bottom:auto}.x-ie6 .x-btn-default-large-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-large-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-large-icon-text-bottom .x-btn-inner{padding-bottom:36px}.x-btn-default-large-icon-text-bottom .x-btn-icon-el{height:32px;top:auto}.x-ie6 .x-btn-default-large-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-large-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-large-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-large-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-large-menu-active,.x-btn-default-large-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn-default-large-over .x-frame-tl,.x-btn-default-large-over .x-frame-bl,.x-btn-default-large-over .x-frame-tr,.x-btn-default-large-over .x-frame-br,.x-btn-default-large-over .x-frame-tc,.x-btn-default-large-over .x-frame-bc{background-image:url(images/btn/btn-default-large-over-corners.gif)}.x-btn-default-large-over .x-frame-ml,.x-btn-default-large-over .x-frame-mr{background-image:url(images/btn/btn-default-large-over-sides.gif)}.x-btn-default-large-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-large-over-fbg.gif)}.x-btn-default-large-focus .x-frame-tl,.x-btn-default-large-focus .x-frame-bl,.x-btn-default-large-focus .x-frame-tr,.x-btn-default-large-focus .x-frame-br,.x-btn-default-large-focus .x-frame-tc,.x-btn-default-large-focus .x-frame-bc{background-image:url(images/btn/btn-default-large-focus-corners.gif)}.x-btn-default-large-focus .x-frame-ml,.x-btn-default-large-focus .x-frame-mr{background-image:url(images/btn/btn-default-large-focus-sides.gif)}.x-btn-default-large-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-large-focus-fbg.gif)}.x-btn-default-large-menu-active .x-frame-tl,.x-btn-default-large-menu-active .x-frame-bl,.x-btn-default-large-menu-active .x-frame-tr,.x-btn-default-large-menu-active .x-frame-br,.x-btn-default-large-menu-active .x-frame-tc,.x-btn-default-large-menu-active .x-frame-bc,.x-btn-default-large-pressed .x-frame-tl,.x-btn-default-large-pressed .x-frame-bl,.x-btn-default-large-pressed .x-frame-tr,.x-btn-default-large-pressed .x-frame-br,.x-btn-default-large-pressed .x-frame-tc,.x-btn-default-large-pressed .x-frame-bc{background-image:url(images/btn/btn-default-large-pressed-corners.gif)}.x-btn-default-large-menu-active .x-frame-ml,.x-btn-default-large-menu-active .x-frame-mr,.x-btn-default-large-pressed .x-frame-ml,.x-btn-default-large-pressed .x-frame-mr{background-image:url(images/btn/btn-default-large-pressed-sides.gif)}.x-btn-default-large-menu-active .x-frame-mc,.x-btn-default-large-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-large-pressed-fbg.gif)}.x-btn-default-large-disabled .x-frame-tl,.x-btn-default-large-disabled .x-frame-bl,.x-btn-default-large-disabled .x-frame-tr,.x-btn-default-large-disabled .x-frame-br,.x-btn-default-large-disabled .x-frame-tc,.x-btn-default-large-disabled .x-frame-bc{background-image:url(images/btn/btn-default-large-disabled-corners.gif)}.x-btn-default-large-disabled .x-frame-ml,.x-btn-default-large-disabled .x-frame-mr{background-image:url(images/btn/btn-default-large-disabled-sides.gif)}.x-btn-default-large-disabled .x-frame-mc{background-color:#ececec;background-image:url(images/btn/btn-default-large-disabled-fbg.gif)}.x-nlg .x-btn-default-large{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-bg.gif)}.x-nlg .x-btn-default-large-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-over-bg.gif)}.x-nlg .x-btn-default-large-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-focus-bg.gif)}.x-nlg .x-btn-default-large-menu-active,.x-nlg .x-btn-default-large-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-pressed-bg.gif)}.x-nlg .x-btn-default-large-disabled{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-disabled-bg.gif)}.x-btn-default-large .x-btn-split-right{background-image:url(images/button/s-arrow.gif);padding-right:14px}.x-btn-default-large .x-btn-split-bottom{background-image:url(images/button/s-arrow-b.gif);padding-bottom:14px}.x-btn-default-large-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-large-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-large-disabled .x-btn-inner,.x-btn-default-large-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-large-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-over-corners.gif), sides:url(images/btn/btn-default-large-over-sides.gif), frame-bg:url(images/btn/btn-default-large-over-fbg.gif), bg:url(images/btn/btn-default-large-over-bg.gif)"}.x-btn-default-large-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-focus-corners.gif), sides:url(images/btn/btn-default-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-large-focus-fbg.gif), bg:url(images/btn/btn-default-large-focus-bg.gif)"}.x-btn-default-large-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-pressed-corners.gif), sides:url(images/btn/btn-default-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-large-pressed-fbg.gif), bg:url(images/btn/btn-default-large-pressed-bg.gif)"}.x-btn-default-large-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-disabled-corners.gif), sides:url(images/btn/btn-default-large-disabled-sides.gif), frame-bg:url(images/btn/btn-default-large-disabled-fbg.gif), bg:url(images/btn/btn-default-large-disabled-bg.gif)"}.x-btn-default-toolbar-small{border-color:transparent}.x-btn-default-toolbar-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-small-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-toolbar-small{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2")}.x-btn-default-toolbar-small-tl{background-position:0 -6px}.x-btn-default-toolbar-small-tr{background-position:right -9px}.x-btn-default-toolbar-small-bl{background-position:0 -12px}.x-btn-default-toolbar-small-br{background-position:right -15px}.x-btn-default-toolbar-small-ml{background-position:0 top}.x-btn-default-toolbar-small-mr{background-position:right top}.x-btn-default-toolbar-small-tc{background-position:0 0}.x-btn-default-toolbar-small-bc{background-position:0 -3px}.x-btn-default-toolbar-small-tr,.x-btn-default-toolbar-small-br,.x-btn-default-toolbar-small-mr{padding-right:3px}.x-btn-default-toolbar-small-tl,.x-btn-default-toolbar-small-bl,.x-btn-default-toolbar-small-ml{padding-left:3px}.x-btn-default-toolbar-small-tc{height:3px}.x-btn-default-toolbar-small-bc{height:3px}.x-btn-default-toolbar-small-tl,.x-btn-default-toolbar-small-bl,.x-btn-default-toolbar-small-tr,.x-btn-default-toolbar-small-br,.x-btn-default-toolbar-small-tc,.x-btn-default-toolbar-small-bc,.x-btn-default-toolbar-small-ml,.x-btn-default-toolbar-small-mr{zoom:1}.x-btn-default-toolbar-small-ml,.x-btn-default-toolbar-small-mr{zoom:1}.x-btn-default-toolbar-small-mc{padding:0}.x-strict .x-ie7 .x-btn-default-toolbar-small-tl,.x-strict .x-ie7 .x-btn-default-toolbar-small-bl{position:relative;right:0}.x-btn-default-toolbar-small .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px}.x-btn-default-toolbar-small .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-toolbar-small .x-btn-arrow-right{padding-right:12px}.x-btn-default-toolbar-small .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-toolbar-small .x-btn-glyph{font-size:16px;line-height:16px;color:#333;opacity:.5}.x-ie8m .x-btn-default-toolbar-small .x-btn-glyph{color:#999}.x-btn-default-toolbar-small-disabled{border-color:#d7d7d7;background-image:none;background-color:transparent}.x-btn-default-toolbar-small-disabled .x-btn-inner{color:#8c8c8c}.x-btn-default-toolbar-small-icon .x-btn-button,.x-btn-default-toolbar-small-noicon .x-btn-button{height:16px}.x-btn-default-toolbar-small-icon .x-btn-inner,.x-btn-default-toolbar-small-noicon .x-btn-inner{line-height:16px}.x-btn-default-toolbar-small-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-small-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-small-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-toolbar-small-icon .x-btn-inner{width:16px;padding:0}.x-btn-default-toolbar-small-icon .x-btn-icon-el{width:16px;height:16px}.x-btn-default-toolbar-small-icon-text-left .x-btn-button{height:16px}.x-btn-default-toolbar-small-icon-text-left .x-btn-inner{line-height:16px;padding-left:20px}.x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el{width:16px;right:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el{height:16px}.x-btn-default-toolbar-small-icon-text-right .x-btn-button{height:16px}.x-btn-default-toolbar-small-icon-text-right .x-btn-inner{line-height:16px;padding-right:20px}.x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el{width:16px;left:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el{height:16px}.x-btn-default-toolbar-small-icon-text-top .x-btn-inner{padding-top:20px}.x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el{height:16px;bottom:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-toolbar-small-icon-text-bottom .x-btn-inner{padding-bottom:20px}.x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el{height:16px;top:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-toolbar-small-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-small-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-small-menu-active,.x-btn-default-toolbar-small-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d6d6d6),color-stop(48%,#dcdcdc),color-stop(52%,#deb6b7),color-stop(100%,#e1bebf));background-image:-webkit-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-moz-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-o-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf)}.x-btn-default-toolbar-small-over .x-frame-tl,.x-btn-default-toolbar-small-over .x-frame-bl,.x-btn-default-toolbar-small-over .x-frame-tr,.x-btn-default-toolbar-small-over .x-frame-br,.x-btn-default-toolbar-small-over .x-frame-tc,.x-btn-default-toolbar-small-over .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-over-corners.gif)}.x-btn-default-toolbar-small-over .x-frame-ml,.x-btn-default-toolbar-small-over .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-over-sides.gif)}.x-btn-default-toolbar-small-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-small-over-fbg.gif)}.x-btn-default-toolbar-small-focus .x-frame-tl,.x-btn-default-toolbar-small-focus .x-frame-bl,.x-btn-default-toolbar-small-focus .x-frame-tr,.x-btn-default-toolbar-small-focus .x-frame-br,.x-btn-default-toolbar-small-focus .x-frame-tc,.x-btn-default-toolbar-small-focus .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-focus-corners.gif)}.x-btn-default-toolbar-small-focus .x-frame-ml,.x-btn-default-toolbar-small-focus .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-focus-sides.gif)}.x-btn-default-toolbar-small-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-small-focus-fbg.gif)}.x-btn-default-toolbar-small-menu-active .x-frame-tl,.x-btn-default-toolbar-small-menu-active .x-frame-bl,.x-btn-default-toolbar-small-menu-active .x-frame-tr,.x-btn-default-toolbar-small-menu-active .x-frame-br,.x-btn-default-toolbar-small-menu-active .x-frame-tc,.x-btn-default-toolbar-small-menu-active .x-frame-bc,.x-btn-default-toolbar-small-pressed .x-frame-tl,.x-btn-default-toolbar-small-pressed .x-frame-bl,.x-btn-default-toolbar-small-pressed .x-frame-tr,.x-btn-default-toolbar-small-pressed .x-frame-br,.x-btn-default-toolbar-small-pressed .x-frame-tc,.x-btn-default-toolbar-small-pressed .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-pressed-corners.gif)}.x-btn-default-toolbar-small-menu-active .x-frame-ml,.x-btn-default-toolbar-small-menu-active .x-frame-mr,.x-btn-default-toolbar-small-pressed .x-frame-ml,.x-btn-default-toolbar-small-pressed .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-pressed-sides.gif)}.x-btn-default-toolbar-small-menu-active .x-frame-mc,.x-btn-default-toolbar-small-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif)}.x-btn-default-toolbar-small-disabled .x-frame-tl,.x-btn-default-toolbar-small-disabled .x-frame-bl,.x-btn-default-toolbar-small-disabled .x-frame-tr,.x-btn-default-toolbar-small-disabled .x-frame-br,.x-btn-default-toolbar-small-disabled .x-frame-tc,.x-btn-default-toolbar-small-disabled .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-disabled-corners.gif)}.x-btn-default-toolbar-small-disabled .x-frame-ml,.x-btn-default-toolbar-small-disabled .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)}.x-btn-default-toolbar-small-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-small-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-small-over-bg.gif)}.x-nlg .x-btn-default-toolbar-small-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-small-focus-bg.gif)}.x-nlg .x-btn-default-toolbar-small-menu-active,.x-nlg .x-btn-default-toolbar-small-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-small-pressed-bg.gif)}.x-btn-default-toolbar-small .x-btn-split-right{background-image:url(images/button/s-arrow-noline.gif);padding-right:14px}.x-btn-default-toolbar-small .x-btn-split-bottom{background-image:url(images/button/s-arrow-b-noline.gif);padding-bottom:14px}.x-btn-default-toolbar-small-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-toolbar-small-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-toolbar-small-disabled{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-small-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-over-corners.gif), sides:url(images/btn/btn-default-toolbar-small-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-over-bg.gif)"}.x-btn-default-toolbar-small-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-focus-bg.gif)"}.x-btn-default-toolbar-small-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-pressed-bg.gif)"}.x-btn-default-toolbar-small-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)"}.x-btn-default-toolbar-medium{border-color:transparent}.x-btn-default-toolbar-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-medium-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-toolbar-medium{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3")}.x-btn-default-toolbar-medium-tl{background-position:0 -6px}.x-btn-default-toolbar-medium-tr{background-position:right -9px}.x-btn-default-toolbar-medium-bl{background-position:0 -12px}.x-btn-default-toolbar-medium-br{background-position:right -15px}.x-btn-default-toolbar-medium-ml{background-position:0 top}.x-btn-default-toolbar-medium-mr{background-position:right top}.x-btn-default-toolbar-medium-tc{background-position:0 0}.x-btn-default-toolbar-medium-bc{background-position:0 -3px}.x-btn-default-toolbar-medium-tr,.x-btn-default-toolbar-medium-br,.x-btn-default-toolbar-medium-mr{padding-right:3px}.x-btn-default-toolbar-medium-tl,.x-btn-default-toolbar-medium-bl,.x-btn-default-toolbar-medium-ml{padding-left:3px}.x-btn-default-toolbar-medium-tc{height:3px}.x-btn-default-toolbar-medium-bc{height:3px}.x-btn-default-toolbar-medium-tl,.x-btn-default-toolbar-medium-bl,.x-btn-default-toolbar-medium-tr,.x-btn-default-toolbar-medium-br,.x-btn-default-toolbar-medium-tc,.x-btn-default-toolbar-medium-bc,.x-btn-default-toolbar-medium-ml,.x-btn-default-toolbar-medium-mr{zoom:1}.x-btn-default-toolbar-medium-ml,.x-btn-default-toolbar-medium-mr{zoom:1}.x-btn-default-toolbar-medium-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-toolbar-medium-tl,.x-strict .x-ie7 .x-btn-default-toolbar-medium-bl{position:relative;right:0}.x-btn-default-toolbar-medium .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-toolbar-medium .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-toolbar-medium .x-btn-arrow-right{padding-right:12px}.x-btn-default-toolbar-medium .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-toolbar-medium .x-btn-glyph{font-size:24px;line-height:24px;color:#333;opacity:.5}.x-ie8m .x-btn-default-toolbar-medium .x-btn-glyph{color:#999}.x-btn-default-toolbar-medium-disabled{border-color:#d7d7d7;background-image:none;background-color:transparent}.x-btn-default-toolbar-medium-disabled .x-btn-inner{color:#8c8c8c}.x-btn-default-toolbar-medium-icon .x-btn-button,.x-btn-default-toolbar-medium-noicon .x-btn-button{height:24px}.x-btn-default-toolbar-medium-icon .x-btn-inner,.x-btn-default-toolbar-medium-noicon .x-btn-inner{line-height:24px}.x-btn-default-toolbar-medium-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-medium-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-medium-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-toolbar-medium-icon .x-btn-inner{width:24px;padding:0}.x-btn-default-toolbar-medium-icon .x-btn-icon-el{width:24px;height:24px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-button{height:24px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-inner{line-height:24px;padding-left:28px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el{width:24px;right:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el{height:24px}.x-btn-default-toolbar-medium-icon-text-right .x-btn-button{height:24px}.x-btn-default-toolbar-medium-icon-text-right .x-btn-inner{line-height:24px;padding-right:28px}.x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el{width:24px;left:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el{height:24px}.x-btn-default-toolbar-medium-icon-text-top .x-btn-inner{padding-top:28px}.x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el{height:24px;bottom:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-inner{padding-bottom:28px}.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el{height:24px;top:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-toolbar-medium-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-medium-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-medium-menu-active,.x-btn-default-toolbar-medium-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d6d6d6),color-stop(48%,#dcdcdc),color-stop(52%,#deb6b7),color-stop(100%,#e1bebf));background-image:-webkit-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-moz-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-o-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf)}.x-btn-default-toolbar-medium-over .x-frame-tl,.x-btn-default-toolbar-medium-over .x-frame-bl,.x-btn-default-toolbar-medium-over .x-frame-tr,.x-btn-default-toolbar-medium-over .x-frame-br,.x-btn-default-toolbar-medium-over .x-frame-tc,.x-btn-default-toolbar-medium-over .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-over-corners.gif)}.x-btn-default-toolbar-medium-over .x-frame-ml,.x-btn-default-toolbar-medium-over .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-over-sides.gif)}.x-btn-default-toolbar-medium-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-medium-over-fbg.gif)}.x-btn-default-toolbar-medium-focus .x-frame-tl,.x-btn-default-toolbar-medium-focus .x-frame-bl,.x-btn-default-toolbar-medium-focus .x-frame-tr,.x-btn-default-toolbar-medium-focus .x-frame-br,.x-btn-default-toolbar-medium-focus .x-frame-tc,.x-btn-default-toolbar-medium-focus .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-focus-corners.gif)}.x-btn-default-toolbar-medium-focus .x-frame-ml,.x-btn-default-toolbar-medium-focus .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-focus-sides.gif)}.x-btn-default-toolbar-medium-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif)}.x-btn-default-toolbar-medium-menu-active .x-frame-tl,.x-btn-default-toolbar-medium-menu-active .x-frame-bl,.x-btn-default-toolbar-medium-menu-active .x-frame-tr,.x-btn-default-toolbar-medium-menu-active .x-frame-br,.x-btn-default-toolbar-medium-menu-active .x-frame-tc,.x-btn-default-toolbar-medium-menu-active .x-frame-bc,.x-btn-default-toolbar-medium-pressed .x-frame-tl,.x-btn-default-toolbar-medium-pressed .x-frame-bl,.x-btn-default-toolbar-medium-pressed .x-frame-tr,.x-btn-default-toolbar-medium-pressed .x-frame-br,.x-btn-default-toolbar-medium-pressed .x-frame-tc,.x-btn-default-toolbar-medium-pressed .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif)}.x-btn-default-toolbar-medium-menu-active .x-frame-ml,.x-btn-default-toolbar-medium-menu-active .x-frame-mr,.x-btn-default-toolbar-medium-pressed .x-frame-ml,.x-btn-default-toolbar-medium-pressed .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif)}.x-btn-default-toolbar-medium-menu-active .x-frame-mc,.x-btn-default-toolbar-medium-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif)}.x-btn-default-toolbar-medium-disabled .x-frame-tl,.x-btn-default-toolbar-medium-disabled .x-frame-bl,.x-btn-default-toolbar-medium-disabled .x-frame-tr,.x-btn-default-toolbar-medium-disabled .x-frame-br,.x-btn-default-toolbar-medium-disabled .x-frame-tc,.x-btn-default-toolbar-medium-disabled .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif)}.x-btn-default-toolbar-medium-disabled .x-frame-ml,.x-btn-default-toolbar-medium-disabled .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)}.x-btn-default-toolbar-medium-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-medium-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-medium-over-bg.gif)}.x-nlg .x-btn-default-toolbar-medium-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-medium-focus-bg.gif)}.x-nlg .x-btn-default-toolbar-medium-menu-active,.x-nlg .x-btn-default-toolbar-medium-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-medium-pressed-bg.gif)}.x-btn-default-toolbar-medium .x-btn-split-right{background-image:url(images/button/s-arrow-noline.gif);padding-right:14px}.x-btn-default-toolbar-medium .x-btn-split-bottom{background-image:url(images/button/s-arrow-b-noline.gif);padding-bottom:14px}.x-btn-default-toolbar-medium-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-toolbar-medium-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-toolbar-medium-disabled{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-medium-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-over-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-over-bg.gif)"}.x-btn-default-toolbar-medium-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-focus-bg.gif)"}.x-btn-default-toolbar-medium-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-pressed-bg.gif)"}.x-btn-default-toolbar-medium-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)"}.x-btn-default-toolbar-large{border-color:transparent}.x-btn-default-toolbar-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-large-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-toolbar-large{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3")}.x-btn-default-toolbar-large-tl{background-position:0 -6px}.x-btn-default-toolbar-large-tr{background-position:right -9px}.x-btn-default-toolbar-large-bl{background-position:0 -12px}.x-btn-default-toolbar-large-br{background-position:right -15px}.x-btn-default-toolbar-large-ml{background-position:0 top}.x-btn-default-toolbar-large-mr{background-position:right top}.x-btn-default-toolbar-large-tc{background-position:0 0}.x-btn-default-toolbar-large-bc{background-position:0 -3px}.x-btn-default-toolbar-large-tr,.x-btn-default-toolbar-large-br,.x-btn-default-toolbar-large-mr{padding-right:3px}.x-btn-default-toolbar-large-tl,.x-btn-default-toolbar-large-bl,.x-btn-default-toolbar-large-ml{padding-left:3px}.x-btn-default-toolbar-large-tc{height:3px}.x-btn-default-toolbar-large-bc{height:3px}.x-btn-default-toolbar-large-tl,.x-btn-default-toolbar-large-bl,.x-btn-default-toolbar-large-tr,.x-btn-default-toolbar-large-br,.x-btn-default-toolbar-large-tc,.x-btn-default-toolbar-large-bc,.x-btn-default-toolbar-large-ml,.x-btn-default-toolbar-large-mr{zoom:1}.x-btn-default-toolbar-large-ml,.x-btn-default-toolbar-large-mr{zoom:1}.x-btn-default-toolbar-large-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-toolbar-large-tl,.x-strict .x-ie7 .x-btn-default-toolbar-large-bl{position:relative;right:0}.x-btn-default-toolbar-large .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-toolbar-large .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-toolbar-large .x-btn-arrow-right{padding-right:12px}.x-btn-default-toolbar-large .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-toolbar-large .x-btn-glyph{font-size:32px;line-height:32px;color:#333;opacity:.5}.x-ie8m .x-btn-default-toolbar-large .x-btn-glyph{color:#999}.x-btn-default-toolbar-large-disabled{border-color:#d7d7d7;background-image:none;background-color:transparent}.x-btn-default-toolbar-large-disabled .x-btn-inner{color:#8c8c8c}.x-btn-default-toolbar-large-icon .x-btn-button,.x-btn-default-toolbar-large-noicon .x-btn-button{height:32px}.x-btn-default-toolbar-large-icon .x-btn-inner,.x-btn-default-toolbar-large-noicon .x-btn-inner{line-height:32px}.x-btn-default-toolbar-large-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-large-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-large-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-toolbar-large-icon .x-btn-inner{width:32px;padding:0}.x-btn-default-toolbar-large-icon .x-btn-icon-el{width:32px;height:32px}.x-btn-default-toolbar-large-icon-text-left .x-btn-button{height:32px}.x-btn-default-toolbar-large-icon-text-left .x-btn-inner{line-height:32px;padding-left:36px}.x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el{width:32px;right:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el{height:32px}.x-btn-default-toolbar-large-icon-text-right .x-btn-button{height:32px}.x-btn-default-toolbar-large-icon-text-right .x-btn-inner{line-height:32px;padding-right:36px}.x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el{width:32px;left:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el{height:32px}.x-btn-default-toolbar-large-icon-text-top .x-btn-inner{padding-top:36px}.x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el{height:32px;bottom:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-toolbar-large-icon-text-bottom .x-btn-inner{padding-bottom:36px}.x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el{height:32px;top:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-toolbar-large-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-large-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-large-menu-active,.x-btn-default-toolbar-large-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d6d6d6),color-stop(48%,#dcdcdc),color-stop(52%,#deb6b7),color-stop(100%,#e1bebf));background-image:-webkit-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-moz-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-o-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf)}.x-btn-default-toolbar-large-over .x-frame-tl,.x-btn-default-toolbar-large-over .x-frame-bl,.x-btn-default-toolbar-large-over .x-frame-tr,.x-btn-default-toolbar-large-over .x-frame-br,.x-btn-default-toolbar-large-over .x-frame-tc,.x-btn-default-toolbar-large-over .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-over-corners.gif)}.x-btn-default-toolbar-large-over .x-frame-ml,.x-btn-default-toolbar-large-over .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-over-sides.gif)}.x-btn-default-toolbar-large-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-large-over-fbg.gif)}.x-btn-default-toolbar-large-focus .x-frame-tl,.x-btn-default-toolbar-large-focus .x-frame-bl,.x-btn-default-toolbar-large-focus .x-frame-tr,.x-btn-default-toolbar-large-focus .x-frame-br,.x-btn-default-toolbar-large-focus .x-frame-tc,.x-btn-default-toolbar-large-focus .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-focus-corners.gif)}.x-btn-default-toolbar-large-focus .x-frame-ml,.x-btn-default-toolbar-large-focus .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-focus-sides.gif)}.x-btn-default-toolbar-large-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-large-focus-fbg.gif)}.x-btn-default-toolbar-large-menu-active .x-frame-tl,.x-btn-default-toolbar-large-menu-active .x-frame-bl,.x-btn-default-toolbar-large-menu-active .x-frame-tr,.x-btn-default-toolbar-large-menu-active .x-frame-br,.x-btn-default-toolbar-large-menu-active .x-frame-tc,.x-btn-default-toolbar-large-menu-active .x-frame-bc,.x-btn-default-toolbar-large-pressed .x-frame-tl,.x-btn-default-toolbar-large-pressed .x-frame-bl,.x-btn-default-toolbar-large-pressed .x-frame-tr,.x-btn-default-toolbar-large-pressed .x-frame-br,.x-btn-default-toolbar-large-pressed .x-frame-tc,.x-btn-default-toolbar-large-pressed .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-pressed-corners.gif)}.x-btn-default-toolbar-large-menu-active .x-frame-ml,.x-btn-default-toolbar-large-menu-active .x-frame-mr,.x-btn-default-toolbar-large-pressed .x-frame-ml,.x-btn-default-toolbar-large-pressed .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-pressed-sides.gif)}.x-btn-default-toolbar-large-menu-active .x-frame-mc,.x-btn-default-toolbar-large-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif)}.x-btn-default-toolbar-large-disabled .x-frame-tl,.x-btn-default-toolbar-large-disabled .x-frame-bl,.x-btn-default-toolbar-large-disabled .x-frame-tr,.x-btn-default-toolbar-large-disabled .x-frame-br,.x-btn-default-toolbar-large-disabled .x-frame-tc,.x-btn-default-toolbar-large-disabled .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-disabled-corners.gif)}.x-btn-default-toolbar-large-disabled .x-frame-ml,.x-btn-default-toolbar-large-disabled .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)}.x-btn-default-toolbar-large-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-large-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-large-over-bg.gif)}.x-nlg .x-btn-default-toolbar-large-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-large-focus-bg.gif)}.x-nlg .x-btn-default-toolbar-large-menu-active,.x-nlg .x-btn-default-toolbar-large-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-large-pressed-bg.gif)}.x-btn-default-toolbar-large .x-btn-split-right{background-image:url(images/button/s-arrow-noline.gif);padding-right:14px}.x-btn-default-toolbar-large .x-btn-split-bottom{background-image:url(images/button/s-arrow-b-noline.gif);padding-bottom:14px}.x-btn-default-toolbar-large-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-toolbar-large-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-toolbar-large-disabled{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-large-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-over-corners.gif), sides:url(images/btn/btn-default-toolbar-large-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-over-bg.gif)"}.x-btn-default-toolbar-large-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-focus-bg.gif)"}.x-btn-default-toolbar-large-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-pressed-bg.gif)"}.x-btn-default-toolbar-large-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)"}.x-btn-icon-text-left .x-btn-icon-el{background-position:left center}.x-btn-icon-text-right .x-btn-icon-el{background-position:right center}.x-btn-icon-text-top .x-btn-icon-el{background-position:center top}.x-btn-icon-text-bottom .x-btn-icon-el{background-position:center bottom}.x-btn-arrow-right{background-position:right center}.x-btn-arrow-bottom{background-position:center bottom}.x-btn-arrow{background-repeat:no-repeat}.x-btn-split{display:block;background-repeat:no-repeat}.x-btn-split-right{background-position:right center}.x-btn-split-bottom{background-position:center bottom}.x-cycle-fixed-width .x-btn-inner{text-align:inherit}.x-toolbar{font-size:11px;border-style:solid;padding:2px 0 2px 2px}.x-toolbar .x-toolbar-item{margin:0 2px 0 0}.x-toolbar .x-toolbar-text{margin:0 6px 0 4px;color:black;line-height:16px;font-family:tahoma,arial,verdana,sans-serif;font-size:11px;font-weight:normal}.x-toolbar .x-toolbar-separator-horizontal{margin:0 2px 0 0;height:14px;border-style:none solid;border-width:0 1px;border-left-color:#aca899;border-right-color:white}.x-toolbar-footer{background:transparent;border:0;margin:3px 0 0;padding:2px 0 2px 6px}.x-toolbar-footer .x-toolbar-item{margin:0 6px 0 0}.x-toolbar-spacer{width:2px}.x-toolbar-more-icon{background-image:url(images/toolbar/more.gif)!important;background-position:center center!important;background-repeat:no-repeat}.x-toolbar-default{border-color:#bcb0b0;border-width:1px;background-image:none;background-color:#d8d8d8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e6e6e6),color-stop(100%,#efefef));background-image:-webkit-linear-gradient(top,#e6e6e6,#efefef);background-image:-moz-linear-gradient(top,#e6e6e6,#efefef);background-image:-o-linear-gradient(top,#e6e6e6,#efefef);background-image:linear-gradient(top,#e6e6e6,#efefef)}.x-toolbar-default .x-box-scroller{cursor:pointer}.x-toolbar-default .x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-nlg .x-toolbar-default{background-image:url(images/toolbar/toolbar-default-bg.gif)!important;background-repeat:repeat-x}.x-toolbar-default:after{display:none;content:"x-slicer:bg:url(images/toolbar/toolbar-default-bg.gif)"}.x-toolbar-scroll-left{background-image:url(images/toolbar/scroll-left.gif);background-position:-14px 0;width:14px;height:22px;border-style:solid;border-color:#8db2e3;border-width:0 0 1px;margin-top:0}.x-toolbar-scroll-left-hover{background-position:0 0}.x-toolbar-scroll-right{background-image:url(images/toolbar/scroll-right.gif);width:14px;height:22px;border-style:solid;border-color:#8db2e3;border-width:0 0 1px;margin-top:0}.x-toolbar-scroll-right-hover{background-position:-14px 0}.x-toolbar .x-box-menu-after{margin:0 2px 0 2px}.x-toolbar-vertical{padding:2px 2px 0 2px}.x-toolbar-vertical .x-toolbar-item{margin:0 0 2px 0}.x-toolbar-vertical .x-toolbar-text{margin:4px 0 6px 0}.x-toolbar-vertical .x-toolbar-separator-vertical{margin:0 5px 2px;border-style:solid none;border-width:1px 0;border-top-color:#aca899;border-bottom-color:white}.x-toolbar-vertical .x-box-menu-after{margin:2px 0 2px 0;display:block;float:none}.x-header-draggable .x-header-body,.x-header-ghost{cursor:move}.x-header-text{white-space:nowrap}.x-panel-ghost{filter:alpha(opacity=65);opacity:.65}.x-panel-default{border-color:#d0d0d0;padding:0}.x-panel-header-default{font-size:11px;border:1px solid #d0d0d0}.x-panel-header-default-horizontal{padding:4px 5px 4px 5px}.x-panel-header-default-horizontal-noborder{padding:5px 6px 4px 6px}.x-panel-header-default-vertical{padding:5px 4px 5px 4px}.x-panel-header-default-vertical-noborder{padding:6px 5px 6px 4px}.x-panel-header-text-container-default{color:#333;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;line-height:15px;padding:0 2px 1px;text-transform:none}.x-panel-body-default{background:white;border-color:#d0d0d0;color:black;font-size:12px;font-size:normal;border-width:1px;border-style:solid}.x-panel-header-default{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-vertical{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-nlg .x-panel-header-default-top{background:url(images/panel-header/panel-header-default-top-bg.gif)}.x-nlg .x-panel-header-default-bottom{background:url(images/panel-header/panel-header-default-bottom-bg.gif)}.x-nlg .x-panel-header-default-left{background:url(images/panel-header/panel-header-default-left-bg.gif) top right}.x-nlg .x-panel-header-default-right{background:url(images/panel-header/panel-header-default-right-bg.gif) top right}.x-panel .x-panel-header-default-collapsed-border-top{border-bottom-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-right{border-left-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-bottom{border-top-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-left{border-right-width:1px!important}.x-panel-header-default-top:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-top-bg.gif)"}.x-panel-header-default-bottom:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-bottom-bg.gif), stretch:top"}.x-panel-header-default-left:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-left-bg.gif), stretch:right"}.x-panel-header-default-right:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-right-bg.gif)"}.x-panel-header-default-vertical .x-panel-header-text-container{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-panel-header-default-vertical .x-panel-header-text-container{background-color:#d7d2d2;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1),progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2)}.x-panel-header-default-top{-webkit-box-shadow:#ececec 0 1px 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset}.x-panel-header-default-right{-webkit-box-shadow:#ececec -1px 0 0 0 inset;-moz-box-shadow:#ececec -1px 0 0 0 inset;box-shadow:#ececec -1px 0 0 0 inset}.x-panel-header-default-bottom{-webkit-box-shadow:#ececec 0 -1px 0 0 inset;-moz-box-shadow:#ececec 0 -1px 0 0 inset;box-shadow:#ececec 0 -1px 0 0 inset}.x-panel-header-default-left{-webkit-box-shadow:#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 1px 0 0 0 inset;box-shadow:#ececec 1px 0 0 0 inset}.x-panel-header-default .x-panel-header-icon{width:16px;height:16px;background-position:center center}.x-panel-header-default .x-panel-header-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8m .x-panel-header-default .x-panel-header-glyph{color:#858282}.x-panel-header-default-horizontal .x-panel-header-icon-before-title{margin:0 2px 0 0}.x-panel-header-default-horizontal .x-panel-header-icon-after-title{margin:0 0 0 2px}.x-panel-header-default-vertical .x-panel-header-icon-before-title{margin:0 0 2px 0}.x-panel-header-default-vertical .x-panel-header-icon-after-title{margin:2px 0 0 0}.x-panel-header-default-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-panel-header-default-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-panel-header-default-vertical .x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-vertical .x-tool-before-title{margin:0 0 2px 0}.x-panel-default-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-panel-default-framed{border-color:#d0d0d0;padding:4px}.x-panel-header-default-framed{font-size:11px;border:1px solid #d0d0d0}.x-panel-header-default-framed-horizontal{padding:4px 5px 4px 5px}.x-panel-header-default-framed-horizontal-noborder{padding:5px 6px 4px 6px}.x-panel-header-default-framed-vertical{padding:5px 4px 5px 4px}.x-panel-header-default-framed-vertical-noborder{padding:6px 5px 6px 4px}.x-panel-header-text-container-default-framed{color:#333;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;line-height:15px;padding:0 2px 1px;text-transform:none}.x-panel-body-default-framed{background:#f1f1f1;border-color:#d0d0d0;color:black;font-size:12px;font-size:normal;border-width:0;border-style:solid}.x-panel-default-framed{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#f1f1f1}.x-panel-default-framed-mc{background-color:#f1f1f1}.x-nbr .x-panel-default-framed{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-default-framed{background-image:url("about:blank#dh-4-4-4-4-1-1-1-1-4-4-4-4")}.x-panel-default-framed-tl{background-position:0 -8px}.x-panel-default-framed-tr{background-position:right -12px}.x-panel-default-framed-bl{background-position:0 -16px}.x-panel-default-framed-br{background-position:right -20px}.x-panel-default-framed-ml{background-position:0 top}.x-panel-default-framed-mr{background-position:right top}.x-panel-default-framed-tc{background-position:0 0}.x-panel-default-framed-bc{background-position:0 -4px}.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-mr{padding-right:4px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-ml{padding-left:4px}.x-panel-default-framed-tc{height:4px}.x-panel-default-framed-bc{height:4px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-tc,.x-panel-default-framed-bc,.x-panel-default-framed-ml,.x-panel-default-framed-mr{zoom:1;background-image:url(images/panel/panel-default-framed-corners.gif)}.x-panel-default-framed-ml,.x-panel-default-framed-mr{zoom:1;background-image:url(images/panel/panel-default-framed-sides.gif);background-repeat:repeat-y}.x-panel-default-framed-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-panel-default-framed-tl,.x-strict .x-ie7 .x-panel-default-framed-bl{position:relative;right:0}.x-panel-default-framed:after{display:none;content:"x-slicer:corners:url(images/panel/panel-default-framed-corners.gif), sides:url(images/panel/panel-default-framed-sides.gif)"}.x-panel-header-default-framed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:4px 5px 4px 5px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-top-mc{background-image:url(images/panel-header/panel-header-default-framed-top-fbg.gif);background-position:0 top;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-top{background-image:url(images/panel-header/panel-header-default-framed-top-bg.gif);background-position:0 top}.x-nbr .x-panel-header-default-framed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-top{background-image:url("about:blank#dh-4-4-0-0-1-1-0-1-4-5-4-5")}.x-panel-header-default-framed-top-tl{background-position:0 -8px}.x-panel-header-default-framed-top-tr{background-position:right -12px}.x-panel-header-default-framed-top-bl{background-position:0 -16px}.x-panel-header-default-framed-top-br{background-position:right -20px}.x-panel-header-default-framed-top-ml{background-position:0 top}.x-panel-header-default-framed-top-mr{background-position:right top}.x-panel-header-default-framed-top-tc{background-position:0 0}.x-panel-header-default-framed-top-bc{background-position:0 -4px}.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-mr{padding-right:4px}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-ml{padding-left:4px}.x-panel-header-default-framed-top-tc{height:4px}.x-panel-header-default-framed-top-bc{height:0}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-tc,.x-panel-header-default-framed-top-bc,.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-top-corners.gif)}.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-top-sides.gif)}.x-panel-header-default-framed-top-mc{padding:1px 2px 4px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-top-tl,.x-strict .x-ie7 .x-panel-header-default-framed-top-bl{position:relative;right:0}.x-panel-header-default-framed-top:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-top-sides.gif)"}.x-panel-header-default-framed-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 4px 5px 4px;border-width:1px 1px 1px 0;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-right-fbg.gif);background-position:right 0;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-right{background-image:url(images/panel-header/panel-header-default-framed-right-bg.gif);background-position:right 0}.x-nbr .x-panel-header-default-framed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-right{background-image:url("about:blank#dv-0-4-4-0-1-1-1-0-5-4-5-4")}.x-panel-header-default-framed-right-tl{background-position:0 0}.x-panel-header-default-framed-right-tr{background-position:0 -4px}.x-panel-header-default-framed-right-bl{background-position:0 -8px}.x-panel-header-default-framed-right-br{background-position:0 -12px}.x-panel-header-default-framed-right-ml{background-position:-4px 0}.x-panel-header-default-framed-right-mr{background-position:right 0}.x-panel-header-default-framed-right-tc{background-position:right 0}.x-panel-header-default-framed-right-bc{background-position:right -4px}.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-mr{padding-right:4px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-ml{padding-left:0}.x-panel-header-default-framed-right-tc{height:4px}.x-panel-header-default-framed-right-bc{height:4px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-bc,.x-panel-header-default-framed-right-ml,.x-panel-header-default-framed-right-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-right-corners.gif)}.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-right-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-right-mc{padding:2px 1px 2px 4px}.x-strict .x-ie7 .x-panel-header-default-framed-right-tl,.x-strict .x-ie7 .x-panel-header-default-framed-right-bl{position:relative;right:0}.x-panel-header-default-framed-right:after{display:none;content:"x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-right-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-right-bg.gif), corners:url(images/panel-header/panel-header-default-framed-right-corners.gif), sides:url(images/panel-header/panel-header-default-framed-right-sides.gif)"}.x-panel-header-default-framed-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:0 1px 1px 1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-bottom-mc{background-image:url(images/panel-header/panel-header-default-framed-bottom-fbg.gif);background-position:0 bottom;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-bottom{background-image:url(images/panel-header/panel-header-default-framed-bottom-bg.gif);background-position:0 bottom}.x-nbr .x-panel-header-default-framed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-bottom{background-image:url("about:blank#dh-0-0-4-4-0-1-1-1-4-5-4-5")}.x-panel-header-default-framed-bottom-tl{background-position:0 -8px}.x-panel-header-default-framed-bottom-tr{background-position:right -12px}.x-panel-header-default-framed-bottom-bl{background-position:0 -16px}.x-panel-header-default-framed-bottom-br{background-position:right -20px}.x-panel-header-default-framed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-bottom-bc{background-position:0 -4px}.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-mr{padding-right:4px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-ml{padding-left:4px}.x-panel-header-default-framed-bottom-tc{height:0}.x-panel-header-default-framed-bottom-bc{height:4px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-tc,.x-panel-header-default-framed-bottom-bc,.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-bottom-corners.gif)}.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-bottom-sides.gif)}.x-panel-header-default-framed-bottom-mc{padding:4px 2px 1px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-bottom-tl,.x-strict .x-ie7 .x-panel-header-default-framed-bottom-bl{position:relative;right:0}.x-panel-header-default-framed-bottom:after{display:none;content:"x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-bottom-sides.gif)"}.x-panel-header-default-framed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 4px 5px 4px;border-width:1px 0 1px 1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-left-fbg.gif);background-position:left 0;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-left{background-image:url(images/panel-header/panel-header-default-framed-left-bg.gif);background-position:left 0}.x-nbr .x-panel-header-default-framed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-left{background-image:url("about:blank#dv-4-0-0-4-1-0-1-1-5-4-5-4")}.x-panel-header-default-framed-left-tl{background-position:0 0}.x-panel-header-default-framed-left-tr{background-position:0 -4px}.x-panel-header-default-framed-left-bl{background-position:0 -8px}.x-panel-header-default-framed-left-br{background-position:0 -12px}.x-panel-header-default-framed-left-ml{background-position:-4px 0}.x-panel-header-default-framed-left-mr{background-position:right 0}.x-panel-header-default-framed-left-tc{background-position:left 0}.x-panel-header-default-framed-left-bc{background-position:left -4px}.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-mr{padding-right:0}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-ml{padding-left:4px}.x-panel-header-default-framed-left-tc{height:4px}.x-panel-header-default-framed-left-bc{height:4px}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-tc,.x-panel-header-default-framed-left-bc,.x-panel-header-default-framed-left-ml,.x-panel-header-default-framed-left-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-left-corners.gif)}.x-panel-header-default-framed-left-tc,.x-panel-header-default-framed-left-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-left-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-left-mc{padding:2px 4px 2px 1px}.x-strict .x-ie7 .x-panel-header-default-framed-left-tl,.x-strict .x-ie7 .x-panel-header-default-framed-left-bl{position:relative;right:0}.x-panel-header-default-framed-left:after{display:none;content:"x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-left-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-left-bg.gif), corners:url(images/panel-header/panel-header-default-framed-left-corners.gif), sides:url(images/panel-header/panel-header-default-framed-left-sides.gif)"}.x-panel-header-default-framed-collapsed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-top-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif);background-position:0 top;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-collapsed-top{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif);background-position:0 top}.x-nbr .x-panel-header-default-framed-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-collapsed-top{background-image:url("about:blank#dh-4-4-4-4-1-1-1-1-4-5-4-5")}.x-panel-header-default-framed-collapsed-top-tl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-top-tr{background-position:right -12px}.x-panel-header-default-framed-collapsed-top-bl{background-position:0 -16px}.x-panel-header-default-framed-collapsed-top-br{background-position:right -20px}.x-panel-header-default-framed-collapsed-top-ml{background-position:0 top}.x-panel-header-default-framed-collapsed-top-mr{background-position:right top}.x-panel-header-default-framed-collapsed-top-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-top-bc{background-position:0 -4px}.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-top-tc{height:4px}.x-panel-header-default-framed-collapsed-top-bc{height:4px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-tc,.x-panel-header-default-framed-collapsed-top-bc,.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif)}.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif)}.x-panel-header-default-framed-collapsed-top-mc{padding:1px 2px 1px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-top:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif)"}.x-panel-header-default-framed-collapsed-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif);background-position:right 0;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-collapsed-right{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif);background-position:right 0}.x-nbr .x-panel-header-default-framed-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-collapsed-right{background-image:url("about:blank#dv-4-4-4-4-1-1-1-1-5-4-5-4")}.x-panel-header-default-framed-collapsed-right-tl{background-position:0 0}.x-panel-header-default-framed-collapsed-right-tr{background-position:0 -4px}.x-panel-header-default-framed-collapsed-right-bl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-right-br{background-position:0 -12px}.x-panel-header-default-framed-collapsed-right-ml{background-position:-4px 0}.x-panel-header-default-framed-collapsed-right-mr{background-position:right 0}.x-panel-header-default-framed-collapsed-right-tc{background-position:right 0}.x-panel-header-default-framed-collapsed-right-bc{background-position:right -4px}.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-right-tc{height:4px}.x-panel-header-default-framed-collapsed-right-bc{height:4px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-tc,.x-panel-header-default-framed-collapsed-right-bc,.x-panel-header-default-framed-collapsed-right-ml,.x-panel-header-default-framed-collapsed-right-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif)}.x-panel-header-default-framed-collapsed-right-tc,.x-panel-header-default-framed-collapsed-right-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-collapsed-right-mc{padding:2px 1px 2px 1px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-right:after{display:none;content:"x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif)"}.x-panel-header-default-framed-collapsed-bottom{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-bottom-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif);background-position:0 bottom;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-collapsed-bottom{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif);background-position:0 bottom}.x-nbr .x-panel-header-default-framed-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-collapsed-bottom{background-image:url("about:blank#dh-4-4-4-4-1-1-1-1-4-5-4-5")}.x-panel-header-default-framed-collapsed-bottom-tl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-bottom-tr{background-position:right -12px}.x-panel-header-default-framed-collapsed-bottom-bl{background-position:0 -16px}.x-panel-header-default-framed-collapsed-bottom-br{background-position:right -20px}.x-panel-header-default-framed-collapsed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-collapsed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-collapsed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-bottom-bc{background-position:0 -4px}.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-bottom-tc{height:4px}.x-panel-header-default-framed-collapsed-bottom-bc{height:4px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-tc,.x-panel-header-default-framed-collapsed-bottom-bc,.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif)}.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif)}.x-panel-header-default-framed-collapsed-bottom-mc{padding:1px 2px 1px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-bottom:after{display:none;content:"x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif)"}.x-panel-header-default-framed-collapsed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif);background-position:left 0;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-collapsed-left{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif);background-position:left 0}.x-nbr .x-panel-header-default-framed-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-collapsed-left{background-image:url("about:blank#dv-4-4-4-4-1-1-1-1-5-4-5-4")}.x-panel-header-default-framed-collapsed-left-tl{background-position:0 0}.x-panel-header-default-framed-collapsed-left-tr{background-position:0 -4px}.x-panel-header-default-framed-collapsed-left-bl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-left-br{background-position:0 -12px}.x-panel-header-default-framed-collapsed-left-ml{background-position:-4px 0}.x-panel-header-default-framed-collapsed-left-mr{background-position:right 0}.x-panel-header-default-framed-collapsed-left-tc{background-position:left 0}.x-panel-header-default-framed-collapsed-left-bc{background-position:left -4px}.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-left-tc{height:4px}.x-panel-header-default-framed-collapsed-left-bc{height:4px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-tc,.x-panel-header-default-framed-collapsed-left-bc,.x-panel-header-default-framed-collapsed-left-ml,.x-panel-header-default-framed-collapsed-left-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif)}.x-panel-header-default-framed-collapsed-left-tc,.x-panel-header-default-framed-collapsed-left-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-collapsed-left-mc{padding:2px 1px 2px 1px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-left:after{display:none;content:"x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif)"}.x-panel .x-panel-header-default-framed-top{border-bottom-width:1px!important}.x-panel .x-panel-header-default-framed-right{border-left-width:1px!important}.x-panel .x-panel-header-default-framed-bottom{border-top-width:1px!important}.x-panel .x-panel-header-default-framed-left{border-right-width:1px!important}.x-nbr .x-panel-header-default-framed-collapsed-top{border-bottom-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-right{border-left-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-bottom{border-top-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-left{border-right-width:0!important}.x-panel-header-default-framed-vertical .x-panel-header-text-container{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-panel-header-default-framed-vertical .x-panel-header-text-container{background-color:#d7d2d2;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1),progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2)}.x-panel-header-default-framed-top{-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-panel-header-default-framed-right{-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset}.x-panel-header-default-framed-bottom{-webkit-box-shadow:#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-panel-header-default-framed-left{-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec 1px 0 0 0 inset}.x-panel-header-default-framed .x-panel-header-icon{width:16px;height:16px;background-position:center center}.x-panel-header-default-framed .x-panel-header-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8m .x-panel-header-default-framed .x-panel-header-glyph{color:#858282}.x-panel-header-default-framed-horizontal .x-panel-header-icon-before-title{margin:0 2px 0 0}.x-panel-header-default-framed-horizontal .x-panel-header-icon-after-title{margin:0 0 0 2px}.x-panel-header-default-framed-vertical .x-panel-header-icon-before-title{margin:0 0 2px 0}.x-panel-header-default-framed-vertical .x-panel-header-icon-after-title{margin:2px 0 0 0}.x-panel-header-default-framed-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-panel-header-default-framed-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-panel-header-default-framed-vertical .x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-framed-vertical .x-tool-before-title{margin:0 0 2px 0}.x-panel-default-framed-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-tip-anchor{position:absolute;overflow:hidden;height:0;width:0;border-style:solid;border-width:5px;border-color:#868686;zoom:1}.x-border-box .x-tip-anchor{width:10px;height:10px}.x-tip-anchor-top{border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-bottom{border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-bottom-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-left{border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-left-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-right{border-top-color:transparent;border-bottom-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-default{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:#ccc}.x-tip-default-mc{background-color:#ccc}.x-nbr .x-tip-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tip-default{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2")}.x-tip-default-tl{background-position:0 -6px}.x-tip-default-tr{background-position:right -9px}.x-tip-default-bl{background-position:0 -12px}.x-tip-default-br{background-position:right -15px}.x-tip-default-ml{background-position:0 top}.x-tip-default-mr{background-position:right top}.x-tip-default-tc{background-position:0 0}.x-tip-default-bc{background-position:0 -3px}.x-tip-default-tr,.x-tip-default-br,.x-tip-default-mr{padding-right:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-ml{padding-left:3px}.x-tip-default-tc{height:3px}.x-tip-default-bc{height:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-tr,.x-tip-default-br,.x-tip-default-tc,.x-tip-default-bc,.x-tip-default-ml,.x-tip-default-mr{zoom:1;background-image:url(images/tip/tip-default-corners.gif)}.x-tip-default-ml,.x-tip-default-mr{zoom:1;background-image:url(images/tip/tip-default-sides.gif);background-repeat:repeat-y}.x-tip-default-mc{padding:0}.x-strict .x-ie7 .x-tip-default-tl,.x-strict .x-ie7 .x-tip-default-bl{position:relative;right:0}.x-tip-default:after{display:none;content:"x-slicer:corners:url(images/tip/tip-default-corners.gif), sides:url(images/tip/tip-default-sides.gif)"}.x-tip-default{border-color:#868686}.x-tip-default .x-tool-img{background-color:#ccc}.x-tip-header-default .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-default .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-body-default{padding:3px 3px 0 3px}.x-tip-header-text-container-default{color:#444;font-size:11px;font-weight:bold}.x-tip-body-default{padding:3px;color:#444;font-size:11px;font-weight:normal}.x-tip-body-default a{color:#2a2a2a}.x-tip-form-invalid{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:white}.x-tip-form-invalid-mc{background-color:white}.x-nbr .x-tip-form-invalid{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tip-form-invalid{background-image:url("about:blank#th-5-5-5-5-1-1-1-1-4-4-4-4")}.x-tip-form-invalid-tl{background-position:0 -10px}.x-tip-form-invalid-tr{background-position:right -15px}.x-tip-form-invalid-bl{background-position:0 -20px}.x-tip-form-invalid-br{background-position:right -25px}.x-tip-form-invalid-ml{background-position:0 top}.x-tip-form-invalid-mr{background-position:right top}.x-tip-form-invalid-tc{background-position:0 0}.x-tip-form-invalid-bc{background-position:0 -5px}.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-mr{padding-right:5px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-ml{padding-left:5px}.x-tip-form-invalid-tc{height:5px}.x-tip-form-invalid-bc{height:5px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-tc,.x-tip-form-invalid-bc,.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{zoom:1;background-image:url(images/tip/tip-form-invalid-corners.gif)}.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{zoom:1;background-image:url(images/tip/tip-form-invalid-sides.gif);background-repeat:repeat-y}.x-tip-form-invalid-mc{padding:0}.x-strict .x-ie7 .x-tip-form-invalid-tl,.x-strict .x-ie7 .x-tip-form-invalid-bl{position:relative;right:0}.x-tip-form-invalid:after{display:none;content:"x-slicer:corners:url(images/tip/tip-form-invalid-corners.gif), sides:url(images/tip/tip-form-invalid-sides.gif)"}.x-tip-form-invalid{border-color:#a1311f;-webkit-box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset;-moz-box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset;box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset}.x-tip-form-invalid .x-tool-img{background-color:white}.x-tip-header-form-invalid .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-form-invalid .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-body-form-invalid{padding:3px 3px 0 3px}.x-tip-header-text-container-form-invalid{color:#444;font-size:11px;font-weight:bold}.x-tip-body-form-invalid{padding:3px 3px 3px 22px;color:#444;font-size:11px;font-weight:normal}.x-tip-body-form-invalid a{color:#2a2a2a}.x-tip-body-form-invalid{background:1px 1px no-repeat;background-image:url(images/form/exclamation.gif)}.x-tip-body-form-invalid li{margin-bottom:4px}.x-tip-body-form-invalid li.last{margin-bottom:0}.x-btn-group-default{border-color:#d0d0d0;-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-btn-group-header-default{margin:2px 2px 0 2px;padding:1px 0;line-height:15px;background:#dfdfdf;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.x-btn-group-header-default .x-tool-img{background-color:#dfdfdf}.x-btn-group-header-text-container-default{font:normal 11px tahoma,arial,verdana,sans-serif;line-height:15px;color:#666}.x-btn-group-body-default{padding:0 1px}.x-btn-group-body-default .x-table-layout{border-spacing:0}.x-btn-group-default-framed{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;padding:1px 1px 1px 1px;border-width:1px;border-style:solid;background-color:#d6d6d6}.x-btn-group-default-framed-mc{background-color:#d6d6d6}.x-nbr .x-btn-group-default-framed{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-group-default-framed{background-image:url("about:blank#dh-2-2-2-2-1-1-1-1-1-1-1-1")}.x-btn-group-default-framed-tl{background-position:0 -4px}.x-btn-group-default-framed-tr{background-position:right -6px}.x-btn-group-default-framed-bl{background-position:0 -8px}.x-btn-group-default-framed-br{background-position:right -10px}.x-btn-group-default-framed-ml{background-position:0 top}.x-btn-group-default-framed-mr{background-position:right top}.x-btn-group-default-framed-tc{background-position:0 0}.x-btn-group-default-framed-bc{background-position:0 -2px}.x-btn-group-default-framed-tr,.x-btn-group-default-framed-br,.x-btn-group-default-framed-mr{padding-right:2px}.x-btn-group-default-framed-tl,.x-btn-group-default-framed-bl,.x-btn-group-default-framed-ml{padding-left:2px}.x-btn-group-default-framed-tc{height:2px}.x-btn-group-default-framed-bc{height:2px}.x-btn-group-default-framed-tl,.x-btn-group-default-framed-bl,.x-btn-group-default-framed-tr,.x-btn-group-default-framed-br,.x-btn-group-default-framed-tc,.x-btn-group-default-framed-bc,.x-btn-group-default-framed-ml,.x-btn-group-default-framed-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-corners.gif)}.x-btn-group-default-framed-ml,.x-btn-group-default-framed-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-sides.gif);background-repeat:repeat-y}.x-btn-group-default-framed-mc{padding:0}.x-strict .x-ie7 .x-btn-group-default-framed-tl,.x-strict .x-ie7 .x-btn-group-default-framed-bl{position:relative;right:0}.x-btn-group-default-framed:after{display:none;content:"x-slicer:corners:url(images/btn-group/btn-group-default-framed-corners.gif), sides:url(images/btn-group/btn-group-default-framed-sides.gif)"}.x-btn-group-default-framed-notitle{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;padding:1px 1px 1px 1px;border-width:1px;border-style:solid;background-color:#d6d6d6}.x-btn-group-default-framed-notitle-mc{background-color:#d6d6d6}.x-nbr .x-btn-group-default-framed-notitle{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-group-default-framed-notitle{background-image:url("about:blank#dh-2-2-2-2-1-1-1-1-1-1-1-1")}.x-btn-group-default-framed-notitle-tl{background-position:0 -4px}.x-btn-group-default-framed-notitle-tr{background-position:right -6px}.x-btn-group-default-framed-notitle-bl{background-position:0 -8px}.x-btn-group-default-framed-notitle-br{background-position:right -10px}.x-btn-group-default-framed-notitle-ml{background-position:0 top}.x-btn-group-default-framed-notitle-mr{background-position:right top}.x-btn-group-default-framed-notitle-tc{background-position:0 0}.x-btn-group-default-framed-notitle-bc{background-position:0 -2px}.x-btn-group-default-framed-notitle-tr,.x-btn-group-default-framed-notitle-br,.x-btn-group-default-framed-notitle-mr{padding-right:2px}.x-btn-group-default-framed-notitle-tl,.x-btn-group-default-framed-notitle-bl,.x-btn-group-default-framed-notitle-ml{padding-left:2px}.x-btn-group-default-framed-notitle-tc{height:2px}.x-btn-group-default-framed-notitle-bc{height:2px}.x-btn-group-default-framed-notitle-tl,.x-btn-group-default-framed-notitle-bl,.x-btn-group-default-framed-notitle-tr,.x-btn-group-default-framed-notitle-br,.x-btn-group-default-framed-notitle-tc,.x-btn-group-default-framed-notitle-bc,.x-btn-group-default-framed-notitle-ml,.x-btn-group-default-framed-notitle-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-notitle-corners.gif)}.x-btn-group-default-framed-notitle-ml,.x-btn-group-default-framed-notitle-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-notitle-sides.gif);background-repeat:repeat-y}.x-btn-group-default-framed-notitle-mc{padding:0}.x-strict .x-ie7 .x-btn-group-default-framed-notitle-tl,.x-strict .x-ie7 .x-btn-group-default-framed-notitle-bl{position:relative;right:0}.x-btn-group-default-framed-notitle:after{display:none;content:"x-slicer:corners:url(images/btn-group/btn-group-default-framed-notitle-corners.gif), sides:url(images/btn-group/btn-group-default-framed-notitle-sides.gif)"}.x-btn-group-default-framed{border-color:#d0d0d0;-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-btn-group-header-default-framed{margin:2px 2px 0 2px;padding:1px 0;line-height:15px;background:#dfdfdf;-moz-border-radius-topleft:2px;-webkit-border-top-left-radius:2px;border-top-left-radius:2px;-moz-border-radius-topright:2px;-webkit-border-top-right-radius:2px;border-top-right-radius:2px}.x-btn-group-header-default-framed .x-tool-img{background-color:#dfdfdf}.x-btn-group-header-text-container-default-framed{font:normal 11px tahoma,arial,verdana,sans-serif;line-height:15px;color:#666}.x-btn-group-body-default-framed{padding:0 1px 0 1px}.x-btn-group-body-default-framed .x-table-layout{border-spacing:0}.x-window-ghost{filter:alpha(opacity=65);opacity:.65}.x-window-default{border-color:#a9a9a9;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-default{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-default-mc{background-color:#e8e8e8}.x-nbr .x-window-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-default{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-4-4-4-4")}.x-window-default-tl{background-position:0 -10px}.x-window-default-tr{background-position:right -15px}.x-window-default-bl{background-position:0 -20px}.x-window-default-br{background-position:right -25px}.x-window-default-ml{background-position:0 top}.x-window-default-mr{background-position:right top}.x-window-default-tc{background-position:0 0}.x-window-default-bc{background-position:0 -5px}.x-window-default-tr,.x-window-default-br,.x-window-default-mr{padding-right:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-ml{padding-left:5px}.x-window-default-tc{height:5px}.x-window-default-bc{height:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-tr,.x-window-default-br,.x-window-default-tc,.x-window-default-bc,.x-window-default-ml,.x-window-default-mr{zoom:1;background-image:url(images/window/window-default-corners.gif)}.x-window-default-ml,.x-window-default-mr{zoom:1;background-image:url(images/window/window-default-sides.gif);background-repeat:repeat-y}.x-window-default-mc{padding:0}.x-strict .x-ie7 .x-window-default-tl,.x-strict .x-ie7 .x-window-default-bl{position:relative;right:0}.x-window-default:after{display:none;content:"x-slicer:corners:url(images/window/window-default-corners.gif), sides:url(images/window/window-default-sides.gif)"}.x-window-body-default{border-color:#bcb1b0;border-width:1px;border-style:solid;background:#e0e0e0;color:black}.x-window-header-default{font-size:11px;border-color:#a9a9a9;zoom:1;background-color:#e8e8e8}.x-window-header-default .x-tool-img{background-color:#e8e8e8}.x-window-header-default-vertical .x-window-header-text-container{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-window-header-default-vertical .x-window-header-text-container{background-color:#e8e8e8;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1),progid:DXImageTransform.Microsoft.Chroma(color=#e8e8e8)}.x-window-header-text-container-default{color:#333;font-weight:bold;line-height:15px;font-family:tahoma,arial,verdana,sans-serif;font-size:11px;padding:0 2px 1px;text-transform:none}.x-window-header-default-top{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:4px 5px 0 5px;border-width:1px 1px 0 1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-top-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-top{background-image:url("about:blank#dh-5-5-0-0-1-1-0-1-4-5-0-5")}.x-window-header-default-top-tl{background-position:0 -10px}.x-window-header-default-top-tr{background-position:right -15px}.x-window-header-default-top-bl{background-position:0 -20px}.x-window-header-default-top-br{background-position:right -25px}.x-window-header-default-top-ml{background-position:0 top}.x-window-header-default-top-mr{background-position:right top}.x-window-header-default-top-tc{background-position:0 0}.x-window-header-default-top-bc{background-position:0 -5px}.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-mr{padding-right:5px}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-ml{padding-left:5px}.x-window-header-default-top-tc{height:5px}.x-window-header-default-top-bc{height:0}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-tc,.x-window-header-default-top-bc,.x-window-header-default-top-ml,.x-window-header-default-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-top-corners.gif)}.x-window-header-default-top-ml,.x-window-header-default-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-top-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-top-tl,.x-strict .x-ie7 .x-window-header-default-top-bl{position:relative;right:0}.x-window-header-default-top:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-top-corners.gif), sides:url(images/window-header/window-header-default-top-sides.gif)"}.x-window-header-default-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 4px 5px 0;border-width:1px 1px 1px 0;border-style:solid;background-color:#e8e8e8}.x-window-header-default-right-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-right{background-image:url("about:blank#dh-0-5-5-0-1-1-1-0-5-4-5-0")}.x-window-header-default-right-tl{background-position:0 -10px}.x-window-header-default-right-tr{background-position:right -15px}.x-window-header-default-right-bl{background-position:0 -20px}.x-window-header-default-right-br{background-position:right -25px}.x-window-header-default-right-ml{background-position:0 top}.x-window-header-default-right-mr{background-position:right top}.x-window-header-default-right-tc{background-position:0 0}.x-window-header-default-right-bc{background-position:0 -5px}.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-mr{padding-right:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-ml{padding-left:0}.x-window-header-default-right-tc{height:5px}.x-window-header-default-right-bc{height:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-tc,.x-window-header-default-right-bc,.x-window-header-default-right-ml,.x-window-header-default-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-right-corners.gif)}.x-window-header-default-right-ml,.x-window-header-default-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-right-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-right-tl,.x-strict .x-ie7 .x-window-header-default-right-bl{position:relative;right:0}.x-window-header-default-right:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-right-corners.gif), sides:url(images/window-header/window-header-default-right-sides.gif)"}.x-window-header-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:0 5px 4px 5px;border-width:0 1px 1px 1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-bottom-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-bottom{background-image:url("about:blank#dh-0-0-5-5-0-1-1-1-0-5-4-5")}.x-window-header-default-bottom-tl{background-position:0 -10px}.x-window-header-default-bottom-tr{background-position:right -15px}.x-window-header-default-bottom-bl{background-position:0 -20px}.x-window-header-default-bottom-br{background-position:right -25px}.x-window-header-default-bottom-ml{background-position:0 top}.x-window-header-default-bottom-mr{background-position:right top}.x-window-header-default-bottom-tc{background-position:0 0}.x-window-header-default-bottom-bc{background-position:0 -5px}.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-mr{padding-right:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-ml{padding-left:5px}.x-window-header-default-bottom-tc{height:0}.x-window-header-default-bottom-bc{height:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-tc,.x-window-header-default-bottom-bc,.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-bottom-corners.gif)}.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-bottom-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-bottom-tl,.x-strict .x-ie7 .x-window-header-default-bottom-bl{position:relative;right:0}.x-window-header-default-bottom:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-bottom-corners.gif), sides:url(images/window-header/window-header-default-bottom-sides.gif)"}.x-window-header-default-left{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:5px 0 5px 4px;border-width:1px 0 1px 1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-left-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-left{background-image:url("about:blank#dh-5-0-0-5-1-0-1-1-5-0-5-4")}.x-window-header-default-left-tl{background-position:0 -10px}.x-window-header-default-left-tr{background-position:right -15px}.x-window-header-default-left-bl{background-position:0 -20px}.x-window-header-default-left-br{background-position:right -25px}.x-window-header-default-left-ml{background-position:0 top}.x-window-header-default-left-mr{background-position:right top}.x-window-header-default-left-tc{background-position:0 0}.x-window-header-default-left-bc{background-position:0 -5px}.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-mr{padding-right:0}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-ml{padding-left:5px}.x-window-header-default-left-tc{height:5px}.x-window-header-default-left-bc{height:5px}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-tc,.x-window-header-default-left-bc,.x-window-header-default-left-ml,.x-window-header-default-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-left-corners.gif)}.x-window-header-default-left-ml,.x-window-header-default-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-left-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-left-tl,.x-strict .x-ie7 .x-window-header-default-left-bl{position:relative;right:0}.x-window-header-default-left:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-left-corners.gif), sides:url(images/window-header/window-header-default-left-sides.gif)"}.x-window-header-default-collapsed-top{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-top-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-top{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-4-5-4-5")}.x-window-header-default-collapsed-top-tl{background-position:0 -10px}.x-window-header-default-collapsed-top-tr{background-position:right -15px}.x-window-header-default-collapsed-top-bl{background-position:0 -20px}.x-window-header-default-collapsed-top-br{background-position:right -25px}.x-window-header-default-collapsed-top-ml{background-position:0 top}.x-window-header-default-collapsed-top-mr{background-position:right top}.x-window-header-default-collapsed-top-tc{background-position:0 0}.x-window-header-default-collapsed-top-bc{background-position:0 -5px}.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-mr{padding-right:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-ml{padding-left:5px}.x-window-header-default-collapsed-top-tc{height:5px}.x-window-header-default-collapsed-top-bc{height:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-tc,.x-window-header-default-collapsed-top-bc,.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-top-corners.gif)}.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-top-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-collapsed-top-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-top-bl{position:relative;right:0}.x-window-header-default-collapsed-top:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-top-corners.gif), sides:url(images/window-header/window-header-default-collapsed-top-sides.gif)"}.x-window-header-default-collapsed-right{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-right-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-right{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-5-4-5-4")}.x-window-header-default-collapsed-right-tl{background-position:0 -10px}.x-window-header-default-collapsed-right-tr{background-position:right -15px}.x-window-header-default-collapsed-right-bl{background-position:0 -20px}.x-window-header-default-collapsed-right-br{background-position:right -25px}.x-window-header-default-collapsed-right-ml{background-position:0 top}.x-window-header-default-collapsed-right-mr{background-position:right top}.x-window-header-default-collapsed-right-tc{background-position:0 0}.x-window-header-default-collapsed-right-bc{background-position:0 -5px}.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-mr{padding-right:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-ml{padding-left:5px}.x-window-header-default-collapsed-right-tc{height:5px}.x-window-header-default-collapsed-right-bc{height:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-tc,.x-window-header-default-collapsed-right-bc,.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-right-corners.gif)}.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-right-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-collapsed-right-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-right-bl{position:relative;right:0}.x-window-header-default-collapsed-right:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-right-corners.gif), sides:url(images/window-header/window-header-default-collapsed-right-sides.gif)"}.x-window-header-default-collapsed-bottom{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-bottom-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-bottom{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-4-5-4-5")}.x-window-header-default-collapsed-bottom-tl{background-position:0 -10px}.x-window-header-default-collapsed-bottom-tr{background-position:right -15px}.x-window-header-default-collapsed-bottom-bl{background-position:0 -20px}.x-window-header-default-collapsed-bottom-br{background-position:right -25px}.x-window-header-default-collapsed-bottom-ml{background-position:0 top}.x-window-header-default-collapsed-bottom-mr{background-position:right top}.x-window-header-default-collapsed-bottom-tc{background-position:0 0}.x-window-header-default-collapsed-bottom-bc{background-position:0 -5px}.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-mr{padding-right:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-ml{padding-left:5px}.x-window-header-default-collapsed-bottom-tc{height:5px}.x-window-header-default-collapsed-bottom-bc{height:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-tc,.x-window-header-default-collapsed-bottom-bc,.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-bottom-corners.gif)}.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-bottom-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-bl{position:relative;right:0}.x-window-header-default-collapsed-bottom:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-bottom-corners.gif), sides:url(images/window-header/window-header-default-collapsed-bottom-sides.gif)"}.x-window-header-default-collapsed-left{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-left-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-left{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-5-4-5-4")}.x-window-header-default-collapsed-left-tl{background-position:0 -10px}.x-window-header-default-collapsed-left-tr{background-position:right -15px}.x-window-header-default-collapsed-left-bl{background-position:0 -20px}.x-window-header-default-collapsed-left-br{background-position:right -25px}.x-window-header-default-collapsed-left-ml{background-position:0 top}.x-window-header-default-collapsed-left-mr{background-position:right top}.x-window-header-default-collapsed-left-tc{background-position:0 0}.x-window-header-default-collapsed-left-bc{background-position:0 -5px}.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-mr{padding-right:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-ml{padding-left:5px}.x-window-header-default-collapsed-left-tc{height:5px}.x-window-header-default-collapsed-left-bc{height:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-tc,.x-window-header-default-collapsed-left-bc,.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-left-corners.gif)}.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-left-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-collapsed-left-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-left-bl{position:relative;right:0}.x-window-header-default-collapsed-left:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-left-corners.gif), sides:url(images/window-header/window-header-default-collapsed-left-sides.gif)"}.x-window-header-default-top{-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-header-default-right{-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset}.x-window-header-default-bottom{-webkit-box-shadow:#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-header-default-left{-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-header-default .x-window-header-icon{width:16px;height:16px;color:#333;font-size:16px;line-height:16px;background-position:center center}.x-window-header-default .x-window-header-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8m .x-window-header-default .x-window-header-glyph{color:#8d8d8d}.x-window-header-default-horizontal .x-window-header-icon-before-title{margin:0 2px 0 0}.x-window-header-default-horizontal .x-window-header-icon-after-title{margin:0 0 0 2px}.x-window-header-default-vertical .x-window-header-icon-before-title{margin:0 0 2px 0}.x-window-header-default-vertical .x-window-header-icon-after-title{margin:2px 0 0 0}.x-window-header-default-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-window-header-default-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-window-header-default-vertical .x-tool-after-title{margin:2px 0 0 0}.x-window-header-default-vertical .x-tool-before-title{margin:0 0 2px 0}.x-window-default-collapsed .x-window-header{border-width:1px!important}.x-nbr .x-window-default-collapsed .x-window-header{border-width:0!important}.x-form-invalid-under{padding:2px 2px 2px 20px;color:#c0272b;font:normal 11px tahoma,arial,verdana,sans-serif;line-height:16px;background:no-repeat 0 2px;background-image:url(images/form/exclamation.gif)}div.x-lbl-top-err-icon{margin-bottom:3px}.x-form-invalid-icon{width:16px;height:16px;margin:0 1px;background-image:url(images/form/exclamation.gif);background-repeat:no-repeat}.x-form-item-label{color:black;font:normal 12px/22px tahoma,arial,verdana,sans-serif}.x-toolbar-item .x-form-item-label{font-size:11px;line-height:20px}.x-autocontainer-form-item,.x-anchor-form-item,.x-vbox-form-item,.x-checkboxgroup-form-item,.x-table-form-item{margin-bottom:5px}.x-ie6 .x-form-form-item td{border-top-width:0}.x-ie6 td.x-form-item-pad{height:5px}.x-form-field{color:black}.x-form-item,.x-form-field{font:normal 12px tahoma,arial,verdana,sans-serif}input.x-form-invalid-field,textarea.x-form-invalid-field{background-color:white;background-image:url(images/grid/invalid_line.gif);background-repeat:repeat-x;background-position:bottom;border-color:#c30}.x-item-disabled .x-form-item-label,.x-item-disabled .x-form-field,.x-item-disabled .x-form-display-field,.x-item-disabled .x-form-cb-label,.x-item-disabled .x-form-trigger{filter:alpha(opacity=30);opacity:.3}.x-form-text{color:black;padding:1px 3px 1px 3px;background:white repeat-x 0 0;border-width:1px;border-style:solid;border-color:#b5b8c8;background-image:url(images/form/text-bg.gif);height:22px;line-height:17px}.x-field-default-toolbar .x-form-text{height:20px;line-height:15px}.x-strict .x-ie6 .x-form-text,.x-strict .x-ie7 .x-form-text{height:18px}.x-strict .x-ie6 .x-field-default-toolbar .x-form-text,.x-strict .x-ie7 .x-field-default-toolbar .x-form-text{height:16px}.x-form-focus{border-color:#a1a1a1}.x-form-empty-field,textarea.x-form-empty-field{color:gray}.x-quirks .x-ie9p .x-form-text,.x-ie7m .x-form-text{margin-top:-1px;margin-bottom:-1px}.x-form-textarea{line-height:normal;height:auto;background-image:url(images/form/text-bg.gif)}.x-form-display-field{font:normal 12px tahoma,arial,verdana,sans-serif;color:black;line-height:22px}.x-toolbar-item .x-form-display-field{line-height:20px}.x-message-box .x-window-body{background-color:#e8e8e8;border-width:0}.x-message-box-info,.x-message-box-warning,.x-message-box-question,.x-message-box-error{background-position:top left;background-repeat:no-repeat}.x-message-box-info{background-image:url(images/shared/icon-info.gif)}.x-message-box-warning{background-image:url(images/shared/icon-warning.gif)}.x-message-box-question{background-image:url(images/shared/icon-question.gif)}.x-message-box-error{background-image:url(images/shared/icon-error.gif)}.x-form-checkboxgroup-body{padding:0 4px}.x-form-invalid .x-form-checkboxgroup-body{border:1px solid #c30;background-image:url(images/grid/invalid_line.gif);background-repeat:repeat-x;background-position:bottom}.x-check-group-alt{background:#d5d5d5;border-top:1px dotted #b4b4b4;border-bottom:1px dotted #b4b4b4}.x-form-check-group-label{color:black;padding:2px;margin:0 30px 5px 0;border-width:0 0 1px 0;border-style:solid;border-color:black}.x-fieldset{border:1px solid #b5b8c8;padding:0 10px;margin:0 0 10px}.x-ie8m .x-fieldset,.x-quirks .x-ie .x-fieldset{padding-top:0}.x-ie8m .x-fieldset .x-fieldset-body,.x-quirks .x-ie .x-fieldset .x-fieldset-body{padding-top:0}.x-fieldset-header-checkbox{line-height:14px;margin:1px 3px 0 0}.x-fieldset-header{padding:0 3px 1px}.x-fieldset-header .x-tool{margin-top:1px;padding:0}.x-fieldset-header .x-form-cb-wrap{padding:1px 0}.x-fieldset-header-text{font:11px/14px bold tahoma,arial,verdana,sans-serif;color:#333;padding:1px 0}.x-fieldset-header-text-collapsible{cursor:pointer}.x-fieldset-with-title .x-fieldset-header-checkbox,.x-fieldset-with-title .x-tool{margin:1px 3px 0 0}.x-webkit .x-fieldset-header{-webkit-padding-start:3px;-webkit-padding-end:3px}.x-opera .x-fieldset-with-legend{margin-top:-1px}.x-opera.x-mac .x-fieldset-header-text{padding:2px 0 0}.x-strict .x-ie8 .x-fieldset-header{margin-bottom:-1px}.x-strict .x-ie8 .x-fieldset-header .x-tool,.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-text,.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-checkbox{position:relative;top:-1px}.x-quirks .x-ie .x-fieldset-header,.x-ie8m .x-fieldset-header{padding-left:1px;padding-right:1px}.x-fieldset-collapsed .x-fieldset-body{display:none}.x-fieldset-collapsed{padding-bottom:0!important;border-width:1px 1px 0 1px!important;border-left-color:transparent!important;border-right-color:transparent!important}.x-ie6 .x-fieldset-collapsed{border-width:1px 0 0 0!important;padding-bottom:0!important;margin-left:1px;margin-right:1px}.x-ie .x-fieldset-bwrap{zoom:1}.x-fieldset .x-tool-toggle{background-position:0 -60px}.x-fieldset .x-tool-over .x-tool-toggle{background-position:-15px -60px}.x-fieldset-collapsed .x-tool-toggle{background-position:0 -75px}.x-fieldset-collapsed .x-tool-over .x-tool-toggle{background-position:-15px -75px}.x-ie .x-fieldset-noborder legend{position:relative;margin-bottom:23px}.x-ie .x-fieldset-noborder legend span{position:absolute;left:16px}.x-fieldset{overflow:hidden}.x-fieldset-bwrap{overflow:hidden;zoom:1}.x-fieldset-body{overflow:hidden}.x-form-cb-wrap{line-height:22px}.x-toolbar-item .x-form-cb-wrap{line-height:20px}.x-form-cb{margin-top:5px}.x-toolbar-item .x-form-cb{margin-top:4px}.x-form-checkbox{width:13px;height:13px;background:url(images/form/checkbox.gif) no-repeat}.x-form-cb-checked .x-form-checkbox{background-position:0 -13px}.x-form-checkbox-focus{background-position:-13px 0}.x-form-cb-checked .x-form-checkbox-focus{background-position:-13px -13px}.x-form-cb-label-before{margin-right:4px}.x-form-cb-label-after{margin-left:4px}.x-form-trigger{background:url(images/form/trigger.gif);width:17px}.x-trigger-cell{background-color:white;width:17px}.x-form-trigger-over{background-position:-17px 0}.x-form-trigger-wrap-focus .x-form-trigger{background-position:-51px 0}.x-form-trigger-wrap-focus .x-form-trigger-over{background-position:-68px 0}.x-form-trigger-click,.x-form-trigger-wrap-focus .x-form-trigger-click{background-position:-34px 0}.x-form-clear-trigger{background-image:url(images/form/clear-trigger.gif)}.x-form-search-trigger{background-image:url(images/form/search-trigger.gif)}.x-quirks .prefixie6 .x-form-trigger-input-cell{height:22px}.x-quirks .prefixie6 .x-field-default-toolbar .x-form-trigger-input-cell{height:20px}.x-form-spinner-up,.x-form-spinner-down{background-image:url(images/form/spinner.gif);background-color:white;width:17px!important;height:11px!important}.x-form-spinner-down{background-position:0 -11px}.x-form-trigger-wrap-focus .x-form-spinner-down{background-position:-51px -11px}.x-form-trigger-wrap .x-form-spinner-down-over{background-position:-17px -11px}.x-form-trigger-wrap-focus .x-form-spinner-down-over{background-position:-68px -11px}.x-form-trigger-wrap .x-form-spinner-down-click{background-position:-34px -11px}.x-toolbar-item .x-form-spinner-up,.x-toolbar-item .x-form-spinner-down{background-image:url(images/form/spinner-small.gif);height:10px!important}.x-toolbar-item .x-form-spinner-down{background-position:0 -10px}.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down{background-position:-51px -10px}.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-over{background-position:-17px -10px}.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down-over{background-position:-68px -10px}.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-click{background-position:-34px -10px}.x-tbar-page-number{width:30px}.x-tbar-page-first{background-image:url(images/grid/page-first.gif)}.x-tbar-page-prev{background-image:url(images/grid/page-prev.gif)}.x-tbar-page-next{background-image:url(images/grid/page-next.gif)}.x-tbar-page-last{background-image:url(images/grid/page-last.gif)}.x-tbar-loading{background-image:url(images/grid/refresh.gif)}.x-item-disabled .x-tbar-page-first{background-image:url(images/grid/page-first-disabled.gif)}.x-item-disabled .x-tbar-page-prev{background-image:url(images/grid/page-prev-disabled.gif)}.x-item-disabled .x-tbar-page-next{background-image:url(images/grid/page-next-disabled.gif)}.x-item-disabled .x-tbar-page-last{background-image:url(images/grid/page-last-disabled.gif)}.x-item-disabled .x-tbar-loading{background-image:url(images/grid/refresh-disabled.gif)}.x-boundlist{border-width:1px;border-style:solid;border-color:#b5b8c8;background:white}.x-strict .x-ie6 .x-boundlist-list-ct,.x-strict .x-ie7 .x-boundlist-list-ct{position:relative}.x-boundlist-item{padding:0 3px;line-height:20px;cursor:pointer;cursor:hand;position:relative;zoom:1;border-width:1px;border-style:dotted;border-color:white}.x-boundlist-selected{background:#d3d3d3;border-color:#b3abaa}.x-boundlist-item-over{background:#e0e0e0;border-color:#bfb8b8}.x-boundlist-floating{border-top-width:0}.x-boundlist-above{border-top-width:1px;border-bottom-width:1px}.x-datepicker{border-width:1px;border-style:solid;border-color:#585858;background-color:white;width:177px}.x-datepicker-header{padding:3px 6px;text-align:center;background-image:none;background-color:#6f6f6f;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#777),color-stop(100%,#656565));background-image:-webkit-linear-gradient(top,#777,#656565);background-image:-moz-linear-gradient(top,#777,#656565);background-image:-o-linear-gradient(top,#777,#656565);background-image:linear-gradient(top,#777,#656565)}.x-datepicker-arrow{width:15px;height:15px;top:6px;cursor:pointer;background-color:#6f6f6f;filter:alpha(opacity=70);opacity:.7}a.x-datepicker-arrow:hover{filter:alpha(opacity=100);opacity:1}.x-datepicker-next{right:6px;background-image:url(images/shared/right-btn.gif)}.x-datepicker-prev{left:6px;background-image:url(images/shared/left-btn.gif)}.x-datepicker-month .x-btn,.x-datepicker-month .x-btn .x-btn-tc,.x-datepicker-month .x-btn .x-btn-tl,.x-datepicker-month .x-btn .x-btn-tr,.x-datepicker-month .x-btn .x-btn-mc,.x-datepicker-month .x-btn .x-btn-ml,.x-datepicker-month .x-btn .x-btn-mr,.x-datepicker-month .x-btn .x-btn-bc,.x-datepicker-month .x-btn .x-btn-bl,.x-datepicker-month .x-btn .x-btn-br{background:transparent;border-width:0!important}.x-datepicker-month .x-btn-inner{color:white}.x-datepicker-month .x-btn-split-right{background-image:url(images/button/s-arrow-light.gif);padding-right:12px}.x-datepicker-column-header{width:25px;color:#3e3e3e;font:normal 10px tahoma,arial,verdana,sans-serif;text-align:right;border-width:0 0 1px;border-style:solid;border-color:#d0d0d0;background-image:none;background-color:#e9e9e9;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f1f1f1),color-stop(100%,#dfdfdf));background-image:-webkit-linear-gradient(top,#f1f1f1,#dfdfdf);background-image:-moz-linear-gradient(top,#f1f1f1,#dfdfdf);background-image:-o-linear-gradient(top,#f1f1f1,#dfdfdf);background-image:linear-gradient(top,#f1f1f1,#dfdfdf)}.x-datepicker-column-header-inner{line-height:19px;padding:0 7px 0 0}.x-datepicker-cell{text-align:right;border-width:1px;border-style:solid;border-color:white}.x-datepicker-date{padding:0 4px 0 0;font:normal 11px tahoma,arial,verdana,sans-serif;color:black;cursor:pointer;line-height:18px}a.x-datepicker-date:hover{color:black;background-color:transparent}.x-datepicker-selected{border-style:solid;border-color:#b2aaa9}.x-datepicker-selected .x-datepicker-date{background-color:#d8d8d8;font-weight:bold}.x-datepicker-today{border-color:darkred;border-style:solid}.x-datepicker-prevday .x-datepicker-date,.x-datepicker-nextday .x-datepicker-date{color:#aaa}.x-datepicker-disabled a.x-datepicker-date{background-color:#eee;cursor:default;color:#bbb}.x-datepicker-disabled a.x-datepicker-date:hover{background-color:#eee}.x-datepicker-footer,.x-monthpicker-buttons{padding:4px 0;border-width:1px 0 0;border-style:solid;border-color:#d0d0d0;background-image:none;background-color:#e9e9e9;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dfdfdf),color-stop(49%,#d6d6d6),color-stop(51%,#d0d0d0),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(top,#dfdfdf,#d6d6d6 49%,#d0d0d0 51%,#d2d2d2);background-image:-moz-linear-gradient(top,#dfdfdf,#d6d6d6 49%,#d0d0d0 51%,#d2d2d2);background-image:-o-linear-gradient(top,#dfdfdf,#d6d6d6 49%,#d0d0d0 51%,#d2d2d2);background-image:linear-gradient(top,#dfdfdf,#d6d6d6 49%,#d0d0d0 51%,#d2d2d2);text-align:center}.x-datepicker-footer .x-btn,.x-monthpicker-buttons .x-btn{margin:0 2px 0 2px}.x-monthpicker{width:177px;border-width:1px;border-style:solid;border-color:#585858;background-color:white}.x-monthpicker-months{border-width:0 1px 0 0;border-color:#585858;border-style:solid;width:87px}.x-monthpicker-months .x-monthpicker-item{width:43px}.x-monthpicker-years{width:88px}.x-monthpicker-years .x-monthpicker-item{width:44px}.x-monthpicker-item{margin:5px 0 4px;font:normal 11px tahoma,arial,verdana,sans-serif;text-align:center}.x-monthpicker-item-inner{margin:0 5px 0 5px;color:#523a39;border-width:1px;border-style:solid;border-color:white;line-height:16px;cursor:pointer}a.x-monthpicker-item-inner:hover{background-color:transparent}.x-monthpicker-selected{background-color:#d8d8d8;border-style:solid;border-color:#b2aaa9}.x-monthpicker-yearnav{height:27px}.x-monthpicker-yearnav-button-ct{width:44px}.x-monthpicker-yearnav-button{height:15px;width:15px;cursor:pointer;margin-top:6px;background-color:white}.x-monthpicker-yearnav-next{background-image:url(images/tools/tool-sprites.gif);background-position:0 -120px}.x-monthpicker-yearnav-next-over{background-position:-15px -120px}.x-monthpicker-yearnav-prev{background-image:url(images/tools/tool-sprites.gif);background-position:0 -105px}.x-monthpicker-yearnav-prev-over{background-position:-15px -105px}.x-monthpicker-small .x-monthpicker-item{margin:2px 0 2px}.x-monthpicker-small .x-monthpicker-item-inner{margin:0 5px 0 5px}.x-monthpicker-small .x-monthpicker-yearnav{height:22px}.x-monthpicker-small .x-monthpicker-yearnav-button{margin-top:3px}.x-nlg .x-datepicker-header{background-image:url(images/datepicker/datepicker-header-bg.gif);background-repeat:repeat-x;background-position:top left}.x-nlg .x-datepicker-footer,.x-nlg .x-monthpicker-buttons{background-image:url(images/datepicker/datepicker-footer-bg.gif);background-repeat:repeat-x;background-position:top left}.x-datepicker-header:after{display:none;content:"x-slicer:bg:url(images/datepicker/datepicker-header-bg.gif)"}.x-datepicker-footer:after{display:none;content:"x-slicer:bg:url(images/datepicker/datepicker-footer-bg.gif)"}.x-form-date-trigger{background-image:url(images/form/date-trigger.gif)}.x-form-file-wrap .x-form-text{color:gray}.x-color-picker{width:144px;height:90px;background-color:white;border-color:white;border-width:0;border-style:solid}.x-color-picker-item{width:18px;height:18px;border-width:1px;border-color:white;border-style:solid;background-color:white;cursor:pointer;padding:2px}.x-strict .x-ie7 .x-color-picker-item{width:12px;height:12px}a.x-color-picker-item:hover{border-color:#8bb8f3;background-color:#deecfd}.x-color-picker-selected{border-color:#8bb8f3;background-color:#deecfd}.x-color-picker-item-inner{line-height:10px;border-color:#aca899;border-width:1px;border-style:solid}.x-html-editor-tb .x-btn-text{background:transparent no-repeat;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-bold,.x-menu-item div.x-edit-bold{background-position:0 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-italic,.x-menu-item div.x-edit-italic{background-position:-16px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-underline,.x-menu-item div.x-edit-underline{background-position:-32px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-forecolor,.x-menu-item div.x-edit-forecolor{background-position:-160px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-backcolor,.x-menu-item div.x-edit-backcolor{background-position:-176px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-justifyleft,.x-menu-item div.x-edit-justifyleft{background-position:-112px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-justifycenter,.x-menu-item div.x-edit-justifycenter{background-position:-128px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-justifyright,.x-menu-item div.x-edit-justifyright{background-position:-144px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-insertorderedlist,.x-menu-item div.x-edit-insertorderedlist{background-position:-80px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-insertunorderedlist,.x-menu-item div.x-edit-insertunorderedlist{background-position:-96px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-increasefontsize,.x-menu-item div.x-edit-increasefontsize{background-position:-48px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-decreasefontsize,.x-menu-item div.x-edit-decreasefontsize{background-position:-64px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-sourceedit,.x-menu-item div.x-edit-sourceedit{background-position:-192px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-createlink,.x-menu-item div.x-edit-createlink{background-position:-208px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tip .x-tip-bd .x-tip-bd-inner{padding:5px;padding-bottom:1px}.x-html-editor-tb .x-font-select{font-size:11px;font-family:inherit}.x-html-editor-wrap textarea{font:normal 12px tahoma,arial,verdana,sans-serif;background-color:white;resize:none}.x-form-radio{width:13px;height:13px;background:url(images/form/radio.gif) no-repeat}.x-form-cb-checked .x-form-radio{background-position:0 -13px}.x-form-radio-focus{background-position:-13px 0}.x-form-cb-checked .x-form-radio-focus{background-position:-13px -13px}.x-grid-body{background:white;border-width:1px;border-style:solid;border-color:#d0d0d0}.x-grid-empty{padding:10px;color:gray;font:normal 11px tahoma,arial,helvetica,sans-serif}.x-grid-view{overflow:hidden;position:relative}.x-grid-table{table-layout:fixed;border-collapse:separate}.x-grid-row .x-grid-cell{color:null;font:normal 11px/13px tahoma,arial,verdana,sans-serif;background-color:white;border-color:white;border-style:solid;border-width:1px 0}.x-grid-with-row-lines .x-grid-cell{border-width:1px 0;border-top-color:#fafafa;border-bottom-color:#ededed}.x-grid-row-alt .x-grid-td{background-color:#fafafa}.x-grid-row-over .x-grid-td{border-color:#ddd;background-color:#efefef}.x-grid-row-focused .x-grid-td{border-top:1px dotted #464646!important;border-bottom:1px dotted #464646!important;background-color:#efefef}.x-grid-row-selected .x-grid-td{border-style:dotted;border-color:#bfb8b8;background-color:#e0e0e0!important}.x-grid-row-selected .x-grid-row-summary .x-grid-td{border-bottom-color:#e0e0e0!important;border-top-width:0!important}.x-grid-row-focused .x-grid-row-summary .x-grid-td{border-bottom-color:#efefef!important;border-top-width:0!important}.x-grid-cell{overflow:hidden;border-color:white;vertical-align:middle}.x-grid-cell-special,.x-grid-cell-checkcolumn,.x-action-col-cell{vertical-align:top}.x-grid-cell-inner{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;line-height:13px;padding:2px 6px 4px;white-space:nowrap}.x-grid-row .x-grid-cell-special{padding:0;border-right:1px solid #c6c6c6;background-image:none;background-color:#f6f6f6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:-moz-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:-o-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:linear-gradient(top,#f6f6f6,#e9e9e9)}.x-grid-row-selected .x-grid-cell-special{border-right:1px solid #d4b7b7;background-image:none;background-color:#e0e0e0;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#e0e0e0),color-stop(100%,#d3d3d3));background-image:-webkit-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:-moz-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:-o-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:linear-gradient(left,#e0e0e0,#d3d3d3)}.x-grid-cell-special .x-grid-cell-inner{padding-left:4px;padding-right:4px;zoom:1}.x-nlg .x-grid-cell-special{background-repeat:repeat-y;background-position:top right}.x-nlg .x-grid-row .x-grid-cell-special,.x-nlg .x-grid-row-over .x-grid-cell-special{background-image:url(images/grid/cell-special-bg.gif)}.x-nlg .x-grid-row-focused .x-grid-cell-special,.x-nlg .x-grid-row-selected .x-grid-cell-special{background-image:url(images/grid/cell-special-selected-bg.gif)}.x-grid-dirty-cell{background-image:url(images/grid/dirty.gif);background-position:0 0;background-repeat:no-repeat}.x-grid-cell-selected{background-color:#b8cfee!important}.x-grid-with-col-lines .x-grid-cell{padding-right:0;border-right:1px solid #c6c6c6}.x-grid-resize-marker{position:absolute;z-index:5;top:0;width:1px;background-color:#0f0f0f}.col-move-top,.col-move-bottom{width:9px;height:9px;position:absolute;top:0;line-height:0;font-size:0;overflow:hidden;z-index:20000;background:no-repeat center top transparent}.col-move-top{background-image:url(images/grid/col-move-top.gif)}.col-move-bottom{background-image:url(images/grid/col-move-bottom.gif)}.x-grid-header-ct{cursor:default;zoom:1;padding:0;border:1px solid #d0d0d0;border-bottom-color:#c5c5c5;background-image:none;background-color:#c5c5c5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f9f9f9),color-stop(100%,#e3e4e6));background-image:-webkit-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-moz-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-o-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:linear-gradient(top,#f9f9f9,#e3e4e6)}.x-accordion-item .x-grid-header-ct{border-width:0 0 1px!important}.x-accordion-item .x-grid-header-ct-hidden{border:0!important}.x-grid-body{border-top-color:#c5c5c5}.x-hmenu-sort-asc .x-menu-item-icon{background-image:url(images/grid/hmenu-asc.gif)}.x-hmenu-sort-desc .x-menu-item-icon{background-image:url(images/grid/hmenu-desc.gif)}.x-cols-icon .x-menu-item-icon{background-image:url(images/grid/columns.gif)}.x-column-header{padding:0;position:absolute;overflow:hidden;border:0 none;border-right:1px solid #c5c5c5;text-shadow:0 1px 0 rgba(255,255,255,0.3);color:black;font:normal 11px tahoma,arial,verdana,sans-serif;background-image:none;background-color:#c5c5c5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f9f9f9),color-stop(100%,#e3e4e6));background-image:-webkit-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-moz-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-o-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:linear-gradient(top,#f9f9f9,#e3e4e6)}.x-group-header{padding:0;border-left-width:0}.x-group-sub-header{background:transparent;border-top:1px solid #c5c5c5;border-left-width:0}.x-group-sub-header .x-column-header-inner{padding:4px 6px 5px 6px}.x-column-header-inner{zoom:1;white-space:nowrap;padding:5px 6px 5px 6px;position:relative}.x-column-header-inner .x-column-header-text{white-space:nowrap}.x-column-header-over,.x-column-header-sort-ASC,.x-column-header-sort-DESC{background-image:none;background-color:#f0f0f0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#f0f0f0));background-image:-webkit-linear-gradient(top,#fff,#f0f0f0);background-image:-moz-linear-gradient(top,#fff,#f0f0f0);background-image:-o-linear-gradient(top,#fff,#f0f0f0);background-image:linear-gradient(top,#fff,#f0f0f0)}.x-nlg .x-grid-header-ct,.x-nlg .x-column-header{background:repeat-x 0 top;background-image:url(images/grid/column-header-bg.gif)}.x-nlg .x-column-header-over,.x-nlg .x-column-header-sort-ASC,.x-nlg .x-column-header-sort-DESC{background:#ebf3fd repeat-x 0 top;background-image:url(images/grid/column-header-over-bg.gif)}.x-column-header-trigger{display:none;height:100%;width:14px;background-repeat:no-repeat;position:absolute;right:0;top:0;z-index:2;cursor:pointer}.x-column-header-over .x-column-header-trigger,.x-column-header-open .x-column-header-trigger{display:block}.x-column-header-align-right{text-align:right}.x-column-header-align-right .x-column-header-text{margin-right:10px}.x-column-header-align-center{text-align:center}.x-column-header-align-left{text-align:left}.x-column-header-sort-ASC .x-column-header-text,.x-column-header-sort-DESC .x-column-header-text{padding-right:12px;background-repeat:no-repeat;background-position:right center}.x-column-header-sort-ASC .x-column-header-text{background-image:url(images/grid/sort_asc.gif)}.x-column-header-sort-DESC .x-column-header-text{background-image:url(images/grid/sort_desc.gif)}.x-column-header:after{display:none;content:"x-slicer:bg:url(images/grid/column-header-bg.gif)"}.x-column-header-over:after{display:none;content:"x-slicer:bg:url(images/grid/column-header-over-bg.gif)"}.x-grid-drop-indicator{position:absolute;height:1px;line-height:0;background-color:#77bc71;overflow:visible;pointer-events:none}.x-grid-drop-indicator .x-grid-drop-indicator-left{position:absolute;top:-8px;left:-12px;background-image:url(images/grid/dd-insert-arrow-right.png);height:16px;width:16px}.x-grid-drop-indicator .x-grid-drop-indicator-right{position:absolute;top:-8px;right:-11px;background-image:url(images/grid/dd-insert-arrow-left.png);height:16px;width:16px}.x-ie6 .x-grid-drop-indicator-left{background-image:url(images/grid/dd-insert-arrow-right.gif)}.x-ie6 .x-grid-drop-indicator-right{background-image:url(images/grid/dd-insert-arrow-left.gif)}.x-action-col-cell .x-grid-cell-inner{padding:1px 2px 0 4px!important}.x-action-col-cell .x-item-disabled{filter:alpha(opacity=30);opacity:.3}.x-grid-with-row-lines .x-action-col-cell .x-grid-cell-inner{padding-top:1px}.x-action-col-icon{height:16px;width:16px;cursor:pointer}.x-grid-cell-checkcolumn .x-grid-cell-inner{padding-top:3px!important;padding-bottom:0!important}.x-grid-checkcolumn{width:13px;height:13px;background:url(images/form/checkbox.gif) 0 0 no-repeat}.x-item-disabled .x-grid-checkcolumn{filter:alpha(opacity=30);opacity:.3}.x-grid-checkcolumn-checked{background-position:0 -13px}.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1}.x-grid-group-hd{padding:10px 4px 4px 4px;background:white;border-width:0 0 2px 0;border-style:solid;border-color:#bcb1b0;cursor:pointer;white-space:nowrap}.x-grid-group-hd-not-collapsible{cursor:default}.x-grid-group-hd-collapsible .x-grid-group-title{background-color:transparent;background-repeat:no-repeat;background-position:left center;background-image:url(images/grid/group-collapse.gif);padding:0 0 0 14px}.x-grid-group-title{color:#616161;font:bold 11px tahoma,arial,verdana,sans-serif}.x-grid-group-hd-collapsed .x-grid-group-title{background-image:url(images/grid/group-expand.gif)}.x-grid-group-collapsed .x-grid-group-title{background-image:url(images/grid/group-expand.gif)}.x-grid-row-body-hidden,.x-grid-group-collapsed{display:none}.x-group-by-icon{background-image:url(images/grid/group-by.gif)}.x-show-groups-icon{background-image:url(images/grid/group-by.gif)}.x-grid-rowbody{font:normal 11px/13px tahoma,arial,verdana,sans-serif;padding:0}.x-grid-rowbody p{margin:5px 5px 10px 5px}.x-ie6 .x-grid-rowbody{width:100%}.x-grid-row-body-hidden{display:none}.x-grid-row-selected .x-grid-rowbody{background-color:#e0e0e0!important}.x-grid-rowwrap{border-width:1px 0;border-color:#ededed;border-style:solid;border-top-color:#fafafa;overflow:hidden}.x-grid-rowwrap .x-grid-cell,.x-grid-rowwrap .x-grid-cell-inner{border-width:0;background-color:transparent}.x-grid-row-focused .x-grid-rowwrap .x-grid-cell{border-top-width:0!important;border-bottom-width:0!important}.x-summary-bottom{border-bottom-color:#c5c5c5}.x-docked-summary{border-width:1px;border-color:#d0d0d0;border-style:solid}.x-grid-row-summary .x-grid-cell,.x-grid-row-summary .x-grid-rowwrap,.x-grid-row-summary .x-grid-cell-rowbody{border-color:#ededed;background-color:transparent!important;border-top-width:0;font:normal 11px/13px tahoma,arial,verdana,sans-serif}.x-grid-locked .x-grid-inner-locked{border-width:0 1px 0 0;border-style:solid}.x-grid-inner-locked .x-column-header-last,.x-grid-inner-locked .x-grid-cell-last{border-right-width:0!important}.x-hmenu-lock .x-menu-item-icon{background-image:url(images/grid/hmenu-lock.gif)}.x-hmenu-unlock .x-menu-item-icon{background-image:url(images/grid/hmenu-unlock.gif)}.x-grid-editor .x-form-cb-wrap{text-align:center}.x-grid-editor .x-form-text{font:normal 11px/15px tahoma,arial,verdana,sans-serif}.x-grid-cell-editor .x-form-text{padding:0 4px}.x-grid-cell-editor .x-form-cb-wrap{padding-top:3px}.x-ie .x-grid-cell-editor .x-form-text{padding-left:5px}.x-opera .x-grid-cell-editor .x-form-text{padding-left:5px}.x-grid-editor-on-text-node .x-form-text{padding-left:1px;padding-right:1px}.x-ie .x-grid-editor-on-text-node .x-form-text{padding-left:2px;padding-right:2px}.x-opera .x-grid-editor-on-text-node .x-form-text{padding-left:2px;padding-right:2px}.x-grid-row-editor{position:absolute!important;z-index:1;zoom:1;overflow:visible!important}.x-grid-row-editor .x-form-display-field{font:normal 11px/15px tahoma,arial,verdana,sans-serif}.x-grid-row-editor .x-panel-body{border-top:1px solid #d0d0d0!important;border-bottom:1px solid #d0d0d0!important;padding:4px 0 4px 0;background-color:#ebe6e6}.x-grid-row-editor .x-form-cb{margin-top:0}.x-grid-row-editor-buttons{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:4px 4px 4px 4px;border-width:0 1px 1px 1px;border-style:solid;background-color:#ebe6e6}.x-grid-row-editor-buttons-mc{background-color:#ebe6e6}.x-nbr .x-grid-row-editor-buttons{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-grid-row-editor-buttons{background-image:url("about:blank#dh-0-0-5-5-0-1-1-1-4-4-4-4")}.x-grid-row-editor-buttons-tl{background-position:0 -10px}.x-grid-row-editor-buttons-tr{background-position:right -15px}.x-grid-row-editor-buttons-bl{background-position:0 -20px}.x-grid-row-editor-buttons-br{background-position:right -25px}.x-grid-row-editor-buttons-ml{background-position:0 top}.x-grid-row-editor-buttons-mr{background-position:right top}.x-grid-row-editor-buttons-tc{background-position:0 0}.x-grid-row-editor-buttons-bc{background-position:0 -5px}.x-grid-row-editor-buttons-tr,.x-grid-row-editor-buttons-br,.x-grid-row-editor-buttons-mr{padding-right:5px}.x-grid-row-editor-buttons-tl,.x-grid-row-editor-buttons-bl,.x-grid-row-editor-buttons-ml{padding-left:5px}.x-grid-row-editor-buttons-tc{height:0}.x-grid-row-editor-buttons-bc{height:5px}.x-grid-row-editor-buttons-tl,.x-grid-row-editor-buttons-bl,.x-grid-row-editor-buttons-tr,.x-grid-row-editor-buttons-br,.x-grid-row-editor-buttons-tc,.x-grid-row-editor-buttons-bc,.x-grid-row-editor-buttons-ml,.x-grid-row-editor-buttons-mr{zoom:1;background-image:url(images/grid-row-editor-buttons/null-corners.gif)}.x-grid-row-editor-buttons-ml,.x-grid-row-editor-buttons-mr{zoom:1;background-image:url(images/grid-row-editor-buttons/null-sides.gif);background-repeat:repeat-y}.x-grid-row-editor-buttons-mc{padding:4px 0 0 0}.x-strict .x-ie7 .x-grid-row-editor-buttons-tl,.x-strict .x-ie7 .x-grid-row-editor-buttons-bl{position:relative;right:0}.x-grid-row-editor-buttons:after{display:none;content:"x-slicer:corners:url(images/grid-row-editor-buttons/null-corners.gif), sides:url(images/grid-row-editor-buttons/null-sides.gif)"}.x-grid-row-editor-buttons{border-color:#d0d0d0}.x-row-editor-update-button{margin-right:2px}.x-row-editor-cancel-button{margin-left:2px}.x-grid-row-editor-errors ul{margin-left:5px}.x-grid-row-editor-errors li{list-style:disc;margin-left:15px}.x-grid-row-expander{background-image:url(images/grid/group-collapse.gif);width:9px;height:9px;float:left;line-height:0;margin:3px 5px 1px 3px}.x-grid-row-collapsed .x-grid-row-expander{background-image:url(images/grid/group-expand.gif)}.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner,.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner{padding-left:12px;background-image:url(images/grid/property-cell-bg.gif);background-repeat:no-repeat;background-position:-16px 2px}.x-grid-with-row-lines.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner,.x-grid-with-row-lines.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner{background-position:-16px 1px}.x-quirks .x-ie .x-grid-row .x-grid-property-name .x-grid-cell-inner{background-position:-16px 2px}.x-accordion-layout-ct{background-color:white;padding:0}.x-accordion-hd .x-panel-header-text-container{color:black;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;text-transform:none}.x-accordion-item{margin:0}.x-accordion-item .x-accordion-hd{background:#e5e5e5;border-top-color:#ececec;padding:4px 5px 5px 5px}.x-accordion-item .x-accordion-hd-sibling-expanded{border-top-color:#d0d0d0}.x-accordion-item .x-accordion-hd-last-collapsed{border-bottom-color:#e5e5e5}.x-accordion-item .x-accordion-body{border-width:0}.x-accordion-hd .x-tool-collapse-top,.x-accordion-hd .x-tool-collapse-bottom{background-position:0 -255px}.x-accordion-hd .x-tool-expand-top,.x-accordion-hd .x-tool-expand-bottom{background-position:0 -240px}.x-accordion-hd .x-tool-over .x-tool-collapse-top,.x-accordion-hd .x-tool-over .x-tool-collapse-bottom{background-position:-15px -255px}.x-accordion-hd .x-tool-over .x-tool-expand-top,.x-accordion-hd .x-tool-over .x-tool-expand-bottom{background-position:-15px -240px}.x-accordion-hd .x-tool-img{background-color:#e5e5e5}.x-collapse-el{cursor:pointer}.x-layout-split-left,.x-layout-split-right{top:50%;margin-top:-18px;width:5px;height:35px}.x-layout-split-top,.x-layout-split-bottom{left:50%;width:35px;height:5px;margin-left:-18px}.x-layout-split-left{background-image:url(images/util/splitter/mini-left.gif)}.x-layout-split-right{background-image:url(images/util/splitter/mini-right.gif)}.x-layout-split-top{background-image:url(images/util/splitter/mini-top.gif)}.x-layout-split-bottom{background-image:url(images/util/splitter/mini-bottom.gif)}.x-splitter-collapsed .x-layout-split-left{background-image:url(images/util/splitter/mini-right.gif)}.x-splitter-collapsed .x-layout-split-right{background-image:url(images/util/splitter/mini-left.gif)}.x-splitter-collapsed .x-layout-split-top{background-image:url(images/util/splitter/mini-bottom.gif)}.x-splitter-collapsed .x-layout-split-bottom{background-image:url(images/util/splitter/mini-top.gif)}.x-splitter-active{background-color:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-splitter-active .x-collapse-el{filter:alpha(opacity=30);opacity:.3}.x-border-layout-ct{background-color:#e0e0e0}.x-menu-body{background:#f0f0f0;padding:2px}.x-menu-icon-separator{left:24px;border-left:solid 1px #e0e0e0;background-color:white;width:2px}.x-menu-item{padding:1px;cursor:pointer}.x-menu-item-indent{margin-left:30px}.x-menu-item-active{background-image:none;background-color:#e6e6e6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#eee),color-stop(100%,#dcdcdc));background-image:-webkit-linear-gradient(top,#eee,#dcdcdc);background-image:-moz-linear-gradient(top,#eee,#dcdcdc);background-image:-o-linear-gradient(top,#eee,#dcdcdc);background-image:linear-gradient(top,#eee,#dcdcdc);border-color:#9d9d9d;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;border-width:1px;border-style:solid;padding:0}.x-nlg .x-menu-item-active{background:#e6e6e6 repeat-x left top;background-image:url(images/menu/menu-item-active-bg.gif)}.x-menu-item-link{line-height:22px;padding:0 0 0 30px;display:inline-block}.x-right-check-item-text{padding-right:22px}.x-menu-item-icon{width:16px;height:16px;top:4px;left:3px;background-position:center center}.x-menu-item-glyph{font-size:16px;line-height:16px;color:#222;opacity:.5}.x-ie8m .x-menu-item-glyph{color:#898989}.x-gecko .x-menu-item-active .x-menu-item-icon,.x-quirks .x-menu-item-active .x-menu-item-icon,.x-ie9m .x-menu-item-active .x-menu-item-icon{top:3px;left:2px}.x-menu-item-icon-right{width:16px;height:16px;top:3px;right:3px;background-position:center center}.x-menu-item-text{font-size:11px;color:#222;cursor:pointer;margin-right:16px}.x-menu-item-checked .x-menu-item-icon,.x-menu-item-checked .x-menu-item-icon-right{background-image:url(images/menu/checked.gif)}.x-menu-item-checked .x-menu-group-icon{background-image:url(images/menu/group-checked.gif)}.x-menu-item-unchecked .x-menu-item-icon,.x-menu-item-unchecked .x-menu-item-icon-right{background-image:url(images/menu/unchecked.gif)}.x-menu-item-unchecked .x-menu-group-icon{background-image:none}.x-menu-item-separator{height:2px;border-top:solid 1px #e0e0e0;background-color:white;margin:2px 0;padding:0}.x-menu-item-arrow{width:12px;height:9px;top:7px;right:0;background-image:url(images/menu/menu-parent.gif)}.x-gecko .x-menu-item-active .x-menu-item-arrow,.x-quirks .x-menu-item-active .x-menu-item-arrow,.x-ie9m .x-menu-item-active .x-menu-item-arrow{top:6px;right:-1px}.x-menu-item-disabled{filter:alpha(opacity=50);opacity:.5}.x-strict .x-ie7m .x-menu-icon-separator{width:1px}.x-strict .x-ie7m .x-menu-item-separator{height:1px}.x-ie .x-menu-item-disabled .x-menu-item-icon{filter:alpha(opacity=50);opacity:.5}.x-ie .x-menu-item-disabled .x-menu-item-text{background-color:transparent}.x-menu-date-item{border-color:#99bbe8}.x-menu-item .x-form-item-label{font-size:11px;color:#222}.x-menu-scroll-top{height:8px;background-image:url(images/menu/scroll-top.gif)}.x-menu-scroll-bottom{height:8px;background-image:url(images/menu/scroll-bottom.gif)}.x-menu-scroll-top,.x-menu-scroll-bottom{background-color:#f0f0f0}.x-menu-item-link:after{display:none;content:"x-slicer:bg:url(images/menu/menu-item-active-bg.gif)"}.x-tool{cursor:pointer}.x-tool-img{overflow:hidden;width:15px;height:15px;background-image:url(images/tools/tool-sprites.gif);margin:0}.x-tool-placeholder{visibility:hidden}.x-tool-close{background-position:0 0}.x-tool-minimize{background-position:0 -15px}.x-tool-maximize{background-position:0 -30px}.x-tool-restore{background-position:0 -45px}.x-tool-toggle{background-position:0 -60px}.x-panel-collapsed .x-tool-toggle{background-position:0 -75px}.x-tool-gear{background-position:0 -90px}.x-tool-prev{background-position:0 -105px}.x-tool-next{background-position:0 -120px}.x-tool-pin{background-position:0 -135px}.x-tool-unpin{background-position:0 -150px}.x-tool-right{background-position:0 -165px}.x-tool-left{background-position:0 -180px}.x-tool-down{background-position:0 -195px}.x-tool-up{background-position:0 -210px}.x-tool-refresh{background-position:0 -225px}.x-tool-plus{background-position:0 -240px}.x-tool-minus{background-position:0 -255px}.x-tool-search{background-position:0 -270px}.x-tool-save{background-position:0 -285px}.x-tool-help{background-position:0 -300px}.x-tool-print{background-position:0 -315px}.x-tool-expand{background-position:0 -330px}.x-tool-collapse{background-position:0 -345px}.x-tool-expand-bottom,.x-tool-collapse-bottom{background-position:0 -195px}.x-tool-expand-top,.x-tool-collapse-top{background-position:0 -210px}.x-tool-expand-left,.x-tool-collapse-left{background-position:0 -180px}.x-tool-expand-right,.x-tool-collapse-right{background-position:0 -165px}.x-tool-over .x-tool-close{background-position:-15px 0}.x-tool-over .x-tool-minimize{background-position:-15px -15px}.x-tool-over .x-tool-maximize{background-position:-15px -30px}.x-tool-over .x-tool-restore{background-position:-15px -45px}.x-tool-over .x-tool-toggle{background-position:-15px -60px}.x-panel-collapsed .x-tool-over .x-tool-toggle{background-position:-15px -75px}.x-tool-over .x-tool-gear{background-position:-15px -90px}.x-tool-over .x-tool-prev{background-position:-15px -105px}.x-tool-over .x-tool-next{background-position:-15px -120px}.x-tool-over .x-tool-pin{background-position:-15px -135px}.x-tool-over .x-tool-unpin{background-position:-15px -150px}.x-tool-over .x-tool-right{background-position:-15px -165px}.x-tool-over .x-tool-left{background-position:-15px -180px}.x-tool-over .x-tool-down{background-position:-15px -195px}.x-tool-over .x-tool-up{background-position:-15px -210px}.x-tool-over .x-tool-refresh{background-position:-15px -225px}.x-tool-over .x-tool-plus{background-position:-15px -240px}.x-tool-over .x-tool-minus{background-position:-15px -255px}.x-tool-over .x-tool-search{background-position:-15px -270px}.x-tool-over .x-tool-save{background-position:-15px -285px}.x-tool-over .x-tool-help{background-position:-15px -300px}.x-tool-over .x-tool-print{background-position:-15px -315px}.x-tool-over .x-tool-expand{background-position:-15px -330px}.x-tool-over .x-tool-collapse{background-position:-15px -345px}.x-tool-over .x-tool-expand-bottom,.x-tool-over .x-tool-collapse-bottom{background-position:-15px -195px}.x-tool-over .x-tool-expand-top,.x-tool-over .x-tool-collapse-top{background-position:-15px -210px}.x-tool-over .x-tool-expand-left,.x-tool-over .x-tool-collapse-left{background-position:-15px -180px}.x-tool-over .x-tool-expand-right,.x-tool-over .x-tool-collapse-right{background-position:-15px -165px}.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;zoom:1;filter:alpha(opacity=0);opacity:0;background-color:#fff}.x-collapsed .x-resizable-handle{display:none}.x-resizable-over .x-resizable-handle-north{cursor:n-resize}.x-resizable-over .x-resizable-handle-south{cursor:s-resize}.x-resizable-over .x-resizable-handle-east{cursor:e-resize}.x-resizable-over .x-resizable-handle-west{cursor:w-resize}.x-resizable-over .x-resizable-handle-southeast{cursor:se-resize}.x-resizable-over .x-resizable-handle-northwest{cursor:nw-resize}.x-resizable-over .x-resizable-handle-northeast{cursor:ne-resize}.x-resizable-over .x-resizable-handle-southwest{cursor:sw-resize}.x-resizable-handle-east{width:6px;height:100%;right:0;top:0}.x-resizable-handle-south{width:100%;height:6px;left:0;bottom:0}.x-resizable-handle-west{width:6px;height:100%;left:0;top:0}.x-resizable-handle-north{width:100%;height:6px;left:0;top:0}.x-resizable-handle-southeast{width:6px;height:6px;right:0;bottom:0;z-index:101}.x-resizable-handle-northwest{width:6px;height:6px;left:0;top:0;z-index:101}.x-resizable-handle-northeast{width:6px;height:6px;right:0;top:0;z-index:101}.x-resizable-handle-southwest{width:6px;height:6px;left:0;bottom:0;z-index:101}.x-ie .x-resizable-handle-east{margin-right:-1px}.x-ie .x-resizable-handle-south{margin-bottom:-1px}.x-resizable-pinned .x-resizable-handle{filter:alpha(opacity=100);opacity:1}.x-window .x-window-handle{filter:alpha(opacity=0);opacity:0}.x-window-collapsed .x-window-handle{display:none}.x-resizable-proxy{border:1px dashed #3b5a82;position:absolute;overflow:hidden;z-index:50000}.x-resizable-over .x-resizable-handle-east,.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-image:url(images/sizer/e-handle.gif)}.x-resizable-over .x-resizable-handle-south,.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-image:url(images/sizer/s-handle.gif)}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left;background-image:url(images/sizer/se-handle.gif)}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right;background-image:url(images/sizer/nw-handle.gif)}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left;background-image:url(images/sizer/ne-handle.gif)}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right;background-image:url(images/sizer/sw-handle.gif)}.x-slider-horz{padding-left:7px;background:no-repeat 0 -15px}.x-slider-horz .x-slider-end{padding-right:7px;background:no-repeat right -30px}.x-slider-horz .x-slider-inner{height:15px}.x-ie6 .x-form-item .x-slider-horz,.x-ie7 .x-form-item .x-slider-horz,.x-quirks .x-ie .x-form-item .x-slider-horz{margin-top:4px}.x-slider-horz .x-slider-thumb{width:14px;height:15px;margin-left:-7px;background-image:url(images/slider/slider-thumb.png)}.x-slider-horz .x-slider-thumb-over{background-position:-14px -15px}.x-slider-horz .x-slider-thumb-drag{background-position:-28px -30px}.x-slider-vert{padding-top:7px;background:no-repeat -30px 0}.x-slider-vert .x-slider-end{padding-bottom:7px;background:no-repeat -15px bottom;width:15px}.x-slider-vert .x-slider-inner{width:15px}.x-slider-vert .x-slider-thumb{width:15px;height:14px;margin-bottom:-7px;background-image:url(images/slider/slider-v-thumb.png)}.x-slider-vert .x-slider-thumb-over{background-position:-15px -14px}.x-slider-vert .x-slider-thumb-drag{background-position:-30px -28px}.x-slider-horz,.x-slider-horz .x-slider-end,.x-slider-horz .x-slider-inner{background-image:url(images/slider/slider-bg.png)}.x-slider-vert,.x-slider-vert .x-slider-end,.x-slider-vert .x-slider-inner{background-image:url(images/slider/slider-v-bg.png)}.x-grid-row .x-grid-cell-row-checker{vertical-align:middle}.x-column-header-checkbox .x-column-header-inner{padding:0;line-height:0;font-size:0}.x-grid-row-checker,.x-column-header-checkbox .x-column-header-text{height:13px;width:13px;line-height:0;font-size:0;background-image:url(images/form/checkbox.gif);background-repeat:no-repeat;background-color:transparent}.x-column-header-checkbox .x-column-header-text{display:block;margin-left:5px}.x-quirks .x-ie .x-grid-row-checker,.x-quirks .x-ie .x-column-header-checkbox .x-column-header-text,.x-ie7m .x-grid-row-checker,.x-ie7m .x-column-header-checkbox .x-column-header-text{line-height:13px}.x-grid-cell-row-checker .x-grid-cell-inner{padding:3px 5px;line-height:14px}.x-grid-hd-checker-on .x-column-header-text,.x-grid-row-selected .x-grid-row-checker,.x-grid-row-checked .x-grid-row-checker{background-position:0 -13px}.x-tab-default-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea)}.x-tab-default-top-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nlg .x-tab-default-top{background-image:url(images/tab/tab-default-top-bg.gif);background-position:0 top}.x-nbr .x-tab-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tab-default-top{background-image:url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9")}.x-tab-default-top-tl{background-position:0 -8px}.x-tab-default-top-tr{background-position:right -12px}.x-tab-default-top-bl{background-position:0 -16px}.x-tab-default-top-br{background-position:right -20px}.x-tab-default-top-ml{background-position:0 top}.x-tab-default-top-mr{background-position:right top}.x-tab-default-top-tc{background-position:0 0}.x-tab-default-top-bc{background-position:0 -4px}.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-mr{padding-right:4px}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-ml{padding-left:4px}.x-tab-default-top-tc{height:4px}.x-tab-default-top-bc{height:0}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-tc,.x-tab-default-top-bc,.x-tab-default-top-ml,.x-tab-default-top-mr{zoom:1;background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-top-ml,.x-tab-default-top-mr{zoom:1;background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-top-mc{padding:0 6px 3px 6px}.x-strict .x-ie7 .x-tab-default-top-tl,.x-strict .x-ie7 .x-tab-default-top-bl{position:relative;right:0}.x-tab-default-top:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"}.x-tab-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:3px 9px 3px 9px;border-width:0 1px 1px 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:linear-gradient(bottom,#dcdcdc,#eaeaea)}.x-tab-default-bottom-mc{background-image:url(images/tab/tab-default-bottom-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nlg .x-tab-default-bottom{background-image:url(images/tab/tab-default-bottom-bg.gif);background-position:0 top}.x-nbr .x-tab-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tab-default-bottom{background-image:url("about:blank#th-0-0-4-4-0-1-1-1-3-9-3-9")}.x-tab-default-bottom-tl{background-position:0 -8px}.x-tab-default-bottom-tr{background-position:right -12px}.x-tab-default-bottom-bl{background-position:0 -16px}.x-tab-default-bottom-br{background-position:right -20px}.x-tab-default-bottom-ml{background-position:0 top}.x-tab-default-bottom-mr{background-position:right top}.x-tab-default-bottom-tc{background-position:0 0}.x-tab-default-bottom-bc{background-position:0 -4px}.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-mr{padding-right:4px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-ml{padding-left:4px}.x-tab-default-bottom-tc{height:0}.x-tab-default-bottom-bc{height:4px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-tc,.x-tab-default-bottom-bc,.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{zoom:1;background-image:url(images/tab/tab-default-bottom-corners.gif)}.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{zoom:1;background-image:url(images/tab/tab-default-bottom-sides.gif)}.x-tab-default-bottom-mc{padding:3px 6px 0 6px}.x-strict .x-ie7 .x-tab-default-bottom-tl,.x-strict .x-ie7 .x-tab-default-bottom-bl{position:relative;right:0}.x-tab-default-bottom:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-bottom-fbg.gif), bg:url(images/tab/tab-default-bottom-bg.gif), corners:url(images/tab/tab-default-bottom-corners.gif), sides:url(images/tab/tab-default-bottom-sides.gif)"}.x-tab-default-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea)}.x-tab-default-left-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nlg .x-tab-default-left{background-image:url(images/tab/tab-default-top-bg.gif);background-position:0 top}.x-nbr .x-tab-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tab-default-left{background-image:url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9")}.x-tab-default-left-tl{background-position:0 -8px}.x-tab-default-left-tr{background-position:right -12px}.x-tab-default-left-bl{background-position:0 -16px}.x-tab-default-left-br{background-position:right -20px}.x-tab-default-left-ml{background-position:0 top}.x-tab-default-left-mr{background-position:right top}.x-tab-default-left-tc{background-position:0 0}.x-tab-default-left-bc{background-position:0 -4px}.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-mr{padding-right:4px}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-ml{padding-left:4px}.x-tab-default-left-tc{height:4px}.x-tab-default-left-bc{height:0}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-tc,.x-tab-default-left-bc,.x-tab-default-left-ml,.x-tab-default-left-mr{zoom:1;background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-left-ml,.x-tab-default-left-mr{zoom:1;background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-left-mc{padding:0 6px 3px 6px}.x-strict .x-ie7 .x-tab-default-left-tl,.x-strict .x-ie7 .x-tab-default-left-bl{position:relative;right:0}.x-tab-default-left:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"}.x-tab-default-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea)}.x-tab-default-right-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nlg .x-tab-default-right{background-image:url(images/tab/tab-default-top-bg.gif);background-position:0 top}.x-nbr .x-tab-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tab-default-right{background-image:url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9")}.x-tab-default-right-tl{background-position:0 -8px}.x-tab-default-right-tr{background-position:right -12px}.x-tab-default-right-bl{background-position:0 -16px}.x-tab-default-right-br{background-position:right -20px}.x-tab-default-right-ml{background-position:0 top}.x-tab-default-right-mr{background-position:right top}.x-tab-default-right-tc{background-position:0 0}.x-tab-default-right-bc{background-position:0 -4px}.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-mr{padding-right:4px}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-ml{padding-left:4px}.x-tab-default-right-tc{height:4px}.x-tab-default-right-bc{height:0}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-tc,.x-tab-default-right-bc,.x-tab-default-right-ml,.x-tab-default-right-mr{zoom:1;background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-right-ml,.x-tab-default-right-mr{zoom:1;background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-right-mc{padding:0 6px 3px 6px}.x-strict .x-ie7 .x-tab-default-right-tl,.x-strict .x-ie7 .x-tab-default-right-bl{position:relative;right:0}.x-tab-default-right:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"}.x-tab-default{border-color:#b5b5b5;margin:0 0 0 2px;cursor:pointer}.x-tab-default .x-tab-inner{font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;color:#6f6f6f;line-height:13px}.x-tab-default .x-tab-icon-el{width:16px;height:16px;line-height:16px;background-position:center center}.x-tab-default .x-tab-glyph{font-size:16px;color:#6f6f6f;opacity:.5}.x-ie8m .x-tab-default .x-tab-glyph{color:#acacac}.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default{padding-left:0}.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-button{padding-left:9px}.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-icon-el{left:9px}.x-tab-default-icon .x-tab-inner{width:16px}.x-tab-default-left{margin:0 2px 0 0}.x-tab-default-top,.x-tab-default-left,.x-tab-default-right{border-bottom:1px solid #d0d0d0;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea);-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-nlg .x-tab-default-top,.x-nlg .x-tab-default-left,.x-nlg .x-tab-default-right{background-image:url(images/tab/tab-default-top-bg.gif)}.x-tab-default-bottom{border-top:1px solid #d0d0d0;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:linear-gradient(bottom,#dcdcdc,#eaeaea);-webkit-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-nlg .x-tab-default-bottom{background-image:url(images/tab/tab-default-bottom-bg.gif)}.x-tab-default-left{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie9m .x-tab-default-left{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.x-tab-default-right{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-tab-default-right{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.x-tab-default-icon-text-left .x-tab-inner{padding-left:20px}.x-tab-default-over{background-color:#f2eeee}.x-tab-default-over .x-tab-glyph{color:#6f6f6f}.x-ie8m .x-tab-default-over .x-tab-glyph{color:#b0aeae}.x-tab-default-top-over,.x-tab-default-left-over,.x-tab-default-right-over{background-image:none;background-color:#f2eeee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#f0f0f0));background-image:-webkit-linear-gradient(top,#fff,#f0f0f0);background-image:-moz-linear-gradient(top,#fff,#f0f0f0);background-image:-o-linear-gradient(top,#fff,#f0f0f0);background-image:linear-gradient(top,#fff,#f0f0f0)}.x-nlg .x-tab-default-top-over,.x-nlg .x-tab-default-left-over,.x-nlg .x-tab-default-right-over{background-image:url(images/tab/tab-default-top-over-bg.gif)}.x-tab-default-bottom-over{background-image:none;background-color:#f2eeee;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#fff),color-stop(100%,#f0f0f0));background-image:-webkit-linear-gradient(bottom,#fff,#f0f0f0);background-image:-moz-linear-gradient(bottom,#fff,#f0f0f0);background-image:-o-linear-gradient(bottom,#fff,#f0f0f0);background-image:linear-gradient(bottom,#fff,#f0f0f0)}.x-nlg .x-tab-default-bottom-over{background-image:url(images/tab/tab-default-bottom-over-bg.gif)}.x-tab-default-active{background-color:#eaeaea}.x-tab-default-active .x-tab-inner{color:#333}.x-tab-default-active .x-tab-glyph{color:#333}.x-ie8m .x-tab-default-active .x-tab-glyph{color:#8e8e8e}.x-tab-default-top-active,.x-tab-default-left-active,.x-tab-default-right-active{border-bottom-color:#eaeaea;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#fff,#eaeaea);background-image:-moz-linear-gradient(top,#fff,#eaeaea);background-image:-o-linear-gradient(top,#fff,#eaeaea);background-image:linear-gradient(top,#fff,#eaeaea)}.x-nlg .x-tab-default-top-active,.x-nlg .x-tab-default-left-active,.x-nlg .x-tab-default-right-active{background-image:url(images/tab/tab-default-top-active-bg.gif)}.x-tab-default-bottom-active{border-top-color:#eaeaea;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#fff),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(bottom,#fff,#eaeaea);background-image:-moz-linear-gradient(bottom,#fff,#eaeaea);background-image:-o-linear-gradient(bottom,#fff,#eaeaea);background-image:linear-gradient(bottom,#fff,#eaeaea)}.x-nlg .x-tab-default-bottom-active{background-image:url(images/tab/tab-default-bottom-active-bg.gif)}.x-tab-default-disabled{border-color:#dadada;cursor:default}.x-tab-default-disabled .x-tab-inner{color:#b7b7b7}.x-tab-default-disabled .x-tab-icon-el{filter:alpha(opacity=50);opacity:.5}.x-tab-default-disabled .x-tab-glyph{color:#b7b7b7;opacity:.3;filter:none}.x-ie8m .x-tab-default-disabled .x-tab-glyph{color:#ddd}.x-tab-default-top-disabled,.x-tab-default-left-disabled,.x-tab-default-right-disabled{background-image:none;background-color:#eee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#eee),color-stop(100%,#f4f4f4));background-image:-webkit-linear-gradient(top,#eee,#f4f4f4);background-image:-moz-linear-gradient(top,#eee,#f4f4f4);background-image:-o-linear-gradient(top,#eee,#f4f4f4);background-image:linear-gradient(top,#eee,#f4f4f4)}.x-nlg .x-tab-default-top-disabled,.x-nlg .x-tab-default-left-disabled,.x-nlg .x-tab-default-right-disabled{background-image:url(images/tab/tab-default-top-disabled-bg.gif)}.x-tab-default-bottom-disabled{background-image:none;background-color:#eee;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#eee),color-stop(100%,#f4f4f4));background-image:-webkit-linear-gradient(bottom,#eee,#f4f4f4);background-image:-moz-linear-gradient(bottom,#eee,#f4f4f4);background-image:-o-linear-gradient(bottom,#eee,#f4f4f4);background-image:linear-gradient(bottom,#eee,#f4f4f4)}.x-nlg .x-tab-default-bottom-disabled{background-image:url(images/tab/tab-default-bottom-disabled-bg.gif)}.x-tab-default-top-over .x-frame-tl,.x-tab-default-top-over .x-frame-bl,.x-tab-default-top-over .x-frame-tr,.x-tab-default-top-over .x-frame-br,.x-tab-default-top-over .x-frame-tc,.x-tab-default-top-over .x-frame-bc,.x-tab-default-left-over .x-frame-tl,.x-tab-default-left-over .x-frame-bl,.x-tab-default-left-over .x-frame-tr,.x-tab-default-left-over .x-frame-br,.x-tab-default-left-over .x-frame-tc,.x-tab-default-left-over .x-frame-bc,.x-tab-default-right-over .x-frame-tl,.x-tab-default-right-over .x-frame-bl,.x-tab-default-right-over .x-frame-tr,.x-tab-default-right-over .x-frame-br,.x-tab-default-right-over .x-frame-tc,.x-tab-default-right-over .x-frame-bc{background-image:url(images/tab/tab-default-top-over-corners.gif)}.x-tab-default-top-over .x-frame-ml,.x-tab-default-top-over .x-frame-mr,.x-tab-default-left-over .x-frame-ml,.x-tab-default-left-over .x-frame-mr,.x-tab-default-right-over .x-frame-ml,.x-tab-default-right-over .x-frame-mr{background-image:url(images/tab/tab-default-top-over-sides.gif)}.x-tab-default-top-over .x-frame-mc,.x-tab-default-left-over .x-frame-mc,.x-tab-default-right-over .x-frame-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-over-fbg.gif)}.x-tab-default-bottom-over .x-frame-tl,.x-tab-default-bottom-over .x-frame-bl,.x-tab-default-bottom-over .x-frame-tr,.x-tab-default-bottom-over .x-frame-br,.x-tab-default-bottom-over .x-frame-tc,.x-tab-default-bottom-over .x-frame-bc{background-image:url(images/tab/tab-default-bottom-over-corners.gif)}.x-tab-default-bottom-over .x-frame-ml,.x-tab-default-bottom-over .x-frame-mr{background-image:url(images/tab/tab-default-bottom-over-sides.gif)}.x-tab-default-bottom-over .x-frame-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-over-fbg.gif)}.x-tab-default-top-active .x-frame-tl,.x-tab-default-top-active .x-frame-bl,.x-tab-default-top-active .x-frame-tr,.x-tab-default-top-active .x-frame-br,.x-tab-default-top-active .x-frame-tc,.x-tab-default-top-active .x-frame-bc,.x-tab-default-left-active .x-frame-tl,.x-tab-default-left-active .x-frame-bl,.x-tab-default-left-active .x-frame-tr,.x-tab-default-left-active .x-frame-br,.x-tab-default-left-active .x-frame-tc,.x-tab-default-left-active .x-frame-bc,.x-tab-default-right-active .x-frame-tl,.x-tab-default-right-active .x-frame-bl,.x-tab-default-right-active .x-frame-tr,.x-tab-default-right-active .x-frame-br,.x-tab-default-right-active .x-frame-tc,.x-tab-default-right-active .x-frame-bc{background-image:url(images/tab/tab-default-top-active-corners.gif)}.x-tab-default-top-active .x-frame-ml,.x-tab-default-top-active .x-frame-mr,.x-tab-default-left-active .x-frame-ml,.x-tab-default-left-active .x-frame-mr,.x-tab-default-right-active .x-frame-ml,.x-tab-default-right-active .x-frame-mr{background-image:url(images/tab/tab-default-top-active-sides.gif)}.x-tab-default-top-active .x-frame-mc,.x-tab-default-left-active .x-frame-mc,.x-tab-default-right-active .x-frame-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-active-fbg.gif)}.x-tab-default-bottom-active .x-frame-tl,.x-tab-default-bottom-active .x-frame-bl,.x-tab-default-bottom-active .x-frame-tr,.x-tab-default-bottom-active .x-frame-br,.x-tab-default-bottom-active .x-frame-tc,.x-tab-default-bottom-active .x-frame-bc{background-image:url(images/tab/tab-default-bottom-active-corners.gif)}.x-tab-default-bottom-active .x-frame-ml,.x-tab-default-bottom-active .x-frame-mr{background-image:url(images/tab/tab-default-bottom-active-sides.gif)}.x-tab-default-bottom-active .x-frame-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-active-fbg.gif)}.x-tab-default-top-disabled .x-frame-tl,.x-tab-default-top-disabled .x-frame-bl,.x-tab-default-top-disabled .x-frame-tr,.x-tab-default-top-disabled .x-frame-br,.x-tab-default-top-disabled .x-frame-tc,.x-tab-default-top-disabled .x-frame-bc,.x-tab-default-left-disabled .x-frame-tl,.x-tab-default-left-disabled .x-frame-bl,.x-tab-default-left-disabled .x-frame-tr,.x-tab-default-left-disabled .x-frame-br,.x-tab-default-left-disabled .x-frame-tc,.x-tab-default-left-disabled .x-frame-bc,.x-tab-default-right-disabled .x-frame-tl,.x-tab-default-right-disabled .x-frame-bl,.x-tab-default-right-disabled .x-frame-tr,.x-tab-default-right-disabled .x-frame-br,.x-tab-default-right-disabled .x-frame-tc,.x-tab-default-right-disabled .x-frame-bc{background-image:url(images/tab/tab-default-top-disabled-corners.gif)}.x-tab-default-top-disabled .x-frame-ml,.x-tab-default-top-disabled .x-frame-mr,.x-tab-default-left-disabled .x-frame-ml,.x-tab-default-left-disabled .x-frame-mr,.x-tab-default-right-disabled .x-frame-ml,.x-tab-default-right-disabled .x-frame-mr{background-image:url(images/tab/tab-default-top-disabled-sides.gif)}.x-tab-default-top-disabled .x-frame-mc,.x-tab-default-left-disabled .x-frame-mc,.x-tab-default-right-disabled .x-frame-mc{background-color:#eee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-disabled-fbg.gif)}.x-tab-default-bottom-disabled .x-frame-tl,.x-tab-default-bottom-disabled .x-frame-bl,.x-tab-default-bottom-disabled .x-frame-tr,.x-tab-default-bottom-disabled .x-frame-br,.x-tab-default-bottom-disabled .x-frame-tc,.x-tab-default-bottom-disabled .x-frame-bc{background-image:url(images/tab/tab-default-bottom-disabled-corners.gif)}.x-tab-default-bottom-disabled .x-frame-ml,.x-tab-default-bottom-disabled .x-frame-mr{background-image:url(images/tab/tab-default-bottom-disabled-sides.gif)}.x-tab-default-bottom-disabled .x-frame-mc{background-color:#eee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-disabled-fbg.gif)}.x-nbr .x-tab-default-top,.x-nbr .x-tab-default-left,.x-nbr .x-tab-default-right{border-bottom-width:1px!important}.x-nbr .x-tab-default-bottom{border-top-width:1px!important}.x-tab-bar-default{border-style:solid;border-color:#d0d0d0}.x-tab-bar-default-top{padding:1px 0 0;border-width:1px 1px 0}.x-tab-bar-default-bottom{padding:0 0 1px 0;border-width:0 1px 1px 1px}.x-tab-bar-default-left{padding:0 0 0 1px;border-width:1px 0 1px 1px}.x-tab-bar-default-right{padding:0 1px 0 0;border-width:1px 1px 1px 0}.x-tab-bar-body-default-horizontal{height:23px}.x-strict .x-ie6 .x-tab-bar-body-default-horizontal,.x-strict .x-ie7 .x-tab-bar-body-default-horizontal{height:21px}.x-tab-bar-body-default-vertical{width:23px}.x-strict .x-ie6 .x-tab-bar-body-default-vertical,.x-strict .x-ie7 .x-tab-bar-body-default-vertical{width:21px}.x-tab-bar-body-default-top{padding-bottom:2px}.x-tab-bar-body-default-bottom{padding-top:2px}.x-tab-bar-body-default-left{padding-right:2px}.x-tab-bar-body-default-right{padding-left:2px}.x-tab-bar-strip-default{border-style:solid;border-color:#d0d0d0;background-color:#eaeaea}.x-strict .x-ie6 .x-tab-bar-strip-default-horizontal,.x-strict .x-ie7 .x-tab-bar-strip-default-horizontal{height:2px}.x-strict .x-ie6 .x-tab-bar-strip-default-vertical,.x-strict .x-ie7 .x-tab-bar-strip-default-vertical{width:2px}.x-tab-bar-strip-default-top{border-width:1px 0 0 0;height:3px}.x-tab-bar-plain .x-tab-bar-strip-default-top{border-width:1px 1px 0}.x-tab-bar-strip-default-bottom{border-width:0 0 1px 0;height:3px}.x-tab-bar-plain .x-tab-bar-strip-default-bottom{border-width:0 1px 1px 1px}.x-tab-bar-strip-default-left{border-width:0 0 0 1px;width:3px}.x-tab-bar-plain .x-tab-bar-strip-default-left{border-width:1px 0 1px 1px}.x-tab-bar-strip-default-right{border-width:0 1px 0 0;width:3px}.x-tab-bar-plain .x-tab-bar-strip-default-right{border-width:1px 1px 1px 0}.x-tab-bar-default{background-color:#d2d2d2}.x-tab-bar-default-top{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(top,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(top,#dfdede,#d2d2d2);background-image:-o-linear-gradient(top,#dfdede,#d2d2d2);background-image:linear-gradient(top,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-top{background-image:url(images/tab-bar/tab-bar-default-top-bg.gif)}.x-tab-bar-default-bottom{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:-o-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:linear-gradient(bottom,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-bottom{background-image:url(images/tab-bar/tab-bar-default-bottom-bg.gif)}.x-tab-bar-default-left{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(left,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(left,#dfdede,#d2d2d2);background-image:-o-linear-gradient(left,#dfdede,#d2d2d2);background-image:linear-gradient(left,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-left{background-image:url(images/tab-bar/tab-bar-default-left-bg.gif)}.x-tab-bar-default-right{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(right,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(right,#dfdede,#d2d2d2);background-image:-o-linear-gradient(right,#dfdede,#d2d2d2);background-image:linear-gradient(right,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-right{background-image:url(images/tab-bar/tab-bar-default-right-bg.gif)}.x-tab-default .x-tab-close-btn{width:11px;height:11px;background-image:url(images/tab/tab-default-close.gif);filter:alpha(opacity=60);opacity:.6}.x-tab-default a.x-tab-close-btn:hover{filter:alpha(opacity=100);opacity:1}.x-tab-default .x-tab-close-btn{top:2px;right:2px}.x-tab-bar .x-tab-default-disabled a.x-tab-close-btn{filter:alpha(opacity=30);opacity:.3}.x-tab-default-closable .x-tab-wrap{padding-right:14px}.x-tab-bar-default .x-box-scroller{cursor:pointer}.x-tab-bar-default .x-tabbar-scroll-left,.x-tab-bar-default .x-tabbar-scroll-right{height:20px;width:18px}.x-tab-bar-default .x-tabbar-scroll-top,.x-tab-bar-default .x-tabbar-scroll-bottom{width:20px;height:18px}.x-tab-bar-default-bottom .x-box-scroller{margin-top:1px}.x-tab-bar-default-right .x-box-scroller{margin-left:1px}.x-tab-bar-default-top .x-tabbar-scroll-left{background-image:url(images/tab-bar/default-scroll-left-top.gif)}.x-tab-bar-default-top .x-tabbar-scroll-right{background-image:url(images/tab-bar/default-scroll-right-top.gif)}.x-tab-bar-default-bottom .x-tabbar-scroll-left{background-image:url(images/tab-bar/default-scroll-left-bottom.gif)}.x-tab-bar-default-bottom .x-tabbar-scroll-right{background-image:url(images/tab-bar/default-scroll-right-bottom.gif)}.x-tab-bar-default-left .x-tabbar-scroll-top{background-image:url(images/tab-bar/default-scroll-top-left.gif)}.x-tab-bar-default-left .x-tabbar-scroll-bottom{background-image:url(images/tab-bar/default-scroll-bottom-left.gif)}.x-tab-bar-default-right .x-tabbar-scroll-top{background-image:url(images/tab-bar/default-scroll-top-right.gif)}.x-tab-bar-default-right .x-tabbar-scroll-bottom{background-image:url(images/tab-bar/default-scroll-bottom-right.gif)}.x-tab-bar-default .x-tabbar-scroll-left-hover,.x-tab-bar-default .x-tabbar-scroll-right-hover{background-position:-18px 0}.x-tab-bar-default .x-tabbar-scroll-top-hover,.x-tab-bar-default .x-tabbar-scroll-bottom-hover{background-position:0 -18px}.x-tab-bar-default .x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-tab-default-top-over:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-top-over-bg.gif), corners:url(images/tab/tab-default-top-over-corners.gif), sides:url(images/tab/tab-default-top-over-sides.gif), frame-bg:url(images/tab/tab-default-top-over-fbg.gif)"}.x-tab-default-bottom-over:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-bottom-over-bg.gif), corners:url(images/tab/tab-default-bottom-over-corners.gif), sides:url(images/tab/tab-default-bottom-over-sides.gif), frame-bg:url(images/tab/tab-default-bottom-over-fbg.gif)"}.x-tab-default-top-active:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-top-active-bg.gif), corners:url(images/tab/tab-default-top-active-corners.gif), sides:url(images/tab/tab-default-top-active-sides.gif), frame-bg:url(images/tab/tab-default-top-active-fbg.gif)"}.x-tab-default-bottom-active:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-bottom-active-bg.gif), corners:url(images/tab/tab-default-bottom-active-corners.gif), sides:url(images/tab/tab-default-bottom-active-sides.gif), frame-bg:url(images/tab/tab-default-bottom-active-fbg.gif)"}.x-tab-default-top-disabled:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-top-disabled-bg.gif), corners:url(images/tab/tab-default-top-disabled-corners.gif), sides:url(images/tab/tab-default-top-disabled-sides.gif), frame-bg:url(images/tab/tab-default-top-disabled-fbg.gif)"}.x-tab-default-bottom-disabled:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-bottom-disabled-bg.gif), corners:url(images/tab/tab-default-bottom-disabled-corners.gif), sides:url(images/tab/tab-default-bottom-disabled-sides.gif), frame-bg:url(images/tab/tab-default-bottom-disabled-fbg.gif)"}.x-tab-bar-default-top:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-top-bg.gif)"}.x-tab-bar-default-bottom:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-bottom-bg.gif)"}.x-tab-bar-default-left:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-left-bg.gif)"}.x-tab-bar-default-right:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-right-bg.gif)"}.x-tab-bar-plain{border-width:0;padding:0}.x-autowidth-table table.x-grid-table{table-layout:auto;width:auto!important}.x-tree-expander{cursor:pointer;position:relative;top:-2px}.x-tree-arrows .x-tree-expander{background:url(images/tree/arrows.gif) no-repeat 0 0}.x-tree-arrows .x-tree-expander-over .x-tree-expander{background-position:-32px 0}.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander{background-position:-16px 0}.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-expander{background-position:-48px 0}.x-tree-lines .x-tree-elbow{background-image:url(images/tree/elbow.gif)}.x-tree-lines .x-tree-elbow-end{background-image:url(images/tree/elbow-end.gif)}.x-tree-lines .x-tree-elbow-plus{background-image:url(images/tree/elbow-plus.gif)}.x-tree-lines .x-tree-elbow-end-plus{background-image:url(images/tree/elbow-end-plus.gif)}.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-plus{background-image:url(images/tree/elbow-minus.gif)}.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus{background-image:url(images/tree/elbow-end-minus.gif)}.x-tree-lines .x-tree-elbow-line{background-image:url(images/tree/elbow-line.gif)}.x-tree-no-lines .x-tree-expander{background-image:url(images/tree/elbow-plus-nl.gif)}.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-expander{background-image:url(images/tree/elbow-minus-nl.gif)}.x-tree-icon{margin:1px 3px 0 0;vertical-align:top;background-repeat:no-repeat}.x-tree-elbow,.x-tree-elbow-end,.x-tree-elbow-plus,.x-tree-elbow-end-plus,.x-tree-elbow-empty,.x-tree-elbow-line{height:19px;width:16px;vertical-align:top}.x-tree-icon-leaf{width:16px;background-image:url(images/tree/leaf.gif)}.x-tree-icon-parent{width:16px;background-image:url(images/tree/folder.gif)}.x-grid-tree-node-expanded .x-tree-icon-parent{background-image:url(images/tree/folder-open.gif)}.x-tree-view{overflow:hidden}.x-tree-view .x-grid-cell-inner{cursor:pointer;vertical-align:top;padding:0 6px 0 6px}.x-grid-cell-treecolumn .x-grid-cell-inner{padding-left:0;overflow:visible}.x-tree-node-text{vertical-align:middle;line-height:19px}.x-ie .x-tree-view .x-tree-elbow,.x-ie .x-tree-view .x-tree-elbow-end,.x-ie .x-tree-view .x-tree-elbow-plus,.x-ie .x-tree-view .x-tree-elbow-end-plus,.x-ie .x-tree-view .x-tree-elbow-empty,.x-ie .x-tree-view .x-tree-elbow-line{vertical-align:-6px}.x-tree-checkbox{margin:3px 3px 0 0;display:inline-block;vertical-align:top;width:13px;height:13px;background:no-repeat;background-image:url(images/form/checkbox.gif);overflow:hidden;padding:0;border:0}.x-tree-checkbox::-moz-focus-inner{padding:0;border:0}.x-tree-checkbox-checked{background-position:0 -13px}.x-grid-tree-loading .x-tree-icon{background-image:url(images/tree/loading.gif)}.x-grid-tree-loading span{font-style:italic;color:#444}.x-tree-animator-wrap{overflow:hidden}.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(images/tree/drop-append.gif)}.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(images/tree/drop-above.gif)}.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(images/tree/drop-below.gif)}.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(images/tree/drop-between.gif)}.x-tree-ddindicator{height:1px;border-width:1px 0 0;border-style:dotted;border-color:green}.x-box-tl{background:transparent no-repeat 0 0;zoom:1}.x-box-tc{height:8px;background:transparent repeat-x 0 0;overflow:hidden}.x-box-tr{background:transparent no-repeat right -8px}.x-box-ml{background:transparent repeat-y 0;padding-left:4px;overflow:hidden;zoom:1}.x-box-mc{background:repeat-x 0 -16px;padding:4px 10px}.x-box-mc h3{margin:0 0 4px 0;zoom:1}.x-box-mr{background:transparent repeat-y right;padding-right:4px;overflow:hidden}.x-box-bl{background:transparent no-repeat 0 -16px;zoom:1}.x-box-bc{background:transparent repeat-x 0 -8px;height:8px;overflow:hidden}.x-box-br{background:transparent no-repeat right -24px}.x-box-tl,.x-box-bl{padding-left:8px;overflow:hidden}.x-box-tr,.x-box-br{padding-right:8px;overflow:hidden}.x-box-tl{background-image:url(images/box/corners.gif)}.x-box-tc{background-image:url(images/box/tb.gif)}.x-box-tr{background-image:url(images/box/corners.gif)}.x-box-ml{background-image:url(images/box/l.gif)}.x-box-mc{background-color:#eee;background-image:url(images/box/tb.gif);font-family:"Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;color:#393939;font-size:15px}.x-box-mc h3{font-size:18px;font-weight:bold}.x-box-mr{background-image:url(images/box/r.gif)}.x-box-bl{background-image:url(images/box/corners.gif)}.x-box-bc{background-image:url(images/box/tb.gif)}.x-box-br{background-image:url(images/box/corners.gif)}.x-box-blue .x-box-bl,.x-box-blue .x-box-br,.x-box-blue .x-box-tl,.x-box-blue .x-box-tr{background-image:url(images/box/corners-blue.gif)}.x-box-blue .x-box-bc,.x-box-blue .x-box-mc,.x-box-blue .x-box-tc{background-image:url(images/box/tb-blue.gif)}.x-box-blue .x-box-mc{background-color:#c3daf9}.x-box-blue .x-box-mc h3{color:#17385b}.x-box-blue .x-box-ml{background-image:url(images/box/l-blue.gif)}.x-box-blue .x-box-mr{background-image:url(images/box/r-blue.gif)}.x-message-box .x-msg-box-wait{background-image:url(images/shared/blue-loading.gif)}.x-form-trigger{border-bottom:1px solid #b5b8c8;height:21px}.x-border-box .x-form-trigger{height:22px}.x-toolbar-item .x-form-trigger{height:19px}.x-border-box .x-field-default-toolbar .x-form-trigger{height:20px}.x-form-trigger-over{border-bottom-color:#a1a1a1}.x-form-trigger-wrap-focus .x-form-trigger{border-bottom-color:#a1a1a1}.x-strict .x-ie6 .x-toolbar-item .x-form-spinner-up,.x-strict .x-ie7 .x-toolbar-item .x-form-spinner-up,.x-strict .x-ie6 .x-toolbar-item .x-form-spinner-down,.x-strict .x-ie7 .x-toolbar-item .x-form-spinner-down{height:9px!important}.x-html-editor-wrap .x-toolbar{border-left-color:#b5b8c8;border-top-color:#b5b8c8;border-right-color:#b5b8c8}.x-html-editor-input{border:1px solid #b5b8c8;border-top-width:0}.x-column-header-trigger{background:no-repeat left center;background-color:#c5c5c5;background-image:url(images/grid/grid3-hd-btn.gif)}.x-grid-editor .x-form-trigger{height:19px}.x-grid-editor .x-form-trigger-wrap .x-form-spinner-up,.x-grid-editor .x-form-trigger-wrap .x-form-spinner-down{background-image:url(images/form/spinner-small.gif);height:10px!important}.x-border-box .x-grid-editor .x-form-trigger{height:20px}.x-border-box .x-grid-editor .x-form-text{height:20px;padding-bottom:1px}.x-grid-editor .x-form-text{height:18px}.x-ie8m .x-grid-editor .x-form-text{padding-top:1px}.x-strict .x-ie6 .x-grid-editor .x-form-text,.x-strict .x-ie7 .x-grid-editor .x-form-text{height:17px}.x-grid-editor .x-form-text .x-quirks .x-ie9{line-height:17px}.x-grid-row-editor .x-form-text{padding:0 2px}.x-grid-row-editor .x-form-display-field{padding-top:1px}.x-ie .x-grid-row-editor .x-form-text{padding-left:3px}.x-opera .x-grid-row-editor .x-form-text{padding-left:3px}.x-accordion-hd{border-width:1px 0!important;-webkit-box-shadow:inset 0 0 0 0 #e5e5e5;-moz-box-shadow:inset 0 0 0 0 #e5e5e5;box-shadow:inset 0 0 0 0 #e5e5e5}.x-accordion-hd-sibling-expanded{-webkit-box-shadow:inset 0 1px 0 0 #ececec;-moz-box-shadow:inset 0 1px 0 0 #ececec;box-shadow:inset 0 1px 0 0 #ececec}.x-resizable-over .x-resizable-handle-east,.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-position:left}.x-resizable-over .x-resizable-handle-south,.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-position:top}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right}.x-ie6 .x-slider-horz,.x-ie6 .x-slider-horz .x-slider-end,.x-ie6 .x-slider-horz .x-slider-inner{background-image:url(images/slider/slider-bg.gif)}.x-ie6 .x-slider-horz .x-slider-thumb{background-image:url(images/slider/slider-thumb.gif)}.x-ie6 .x-slider-vert,.x-ie6 .x-slider-vert .x-slider-end,.x-ie6 .x-slider-vert .x-slider-inner{background-image:url(images/slider/slider-v-bg.gif)}.x-ie6 .x-slider-vert .x-slider-thumb{background-image:url(images/slider/slider-v-thumb.gif)}.x-tab-icon-el{top:-1px}.x-tab-noicon .x-tab-icon{display:none} \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/boundlist/trigger-arrow.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/boundlist/trigger-arrow.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/boundlist/trigger-arrow.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/boundlist/trigger-arrow.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/corners-blue.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/corners-blue.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/corners-blue.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/corners-blue.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/corners.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/corners.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/corners.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/l-blue.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/l-blue.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/l-blue.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/l-blue.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/l.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/l.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/l.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/l.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/r-blue.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/r-blue.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/r-blue.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/r-blue.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/r.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/r.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/r.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/r.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/tb-blue.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/tb-blue.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/tb-blue.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/tb-blue.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/tb.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/tb.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/box/tb.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/box/tb.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/arrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/arrow.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/arrow.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/arrow.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/btn-arrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/btn-arrow.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/btn-arrow.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/btn-arrow.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/btn-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/btn-sprite.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/btn-sprite.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/btn-sprite.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/btn.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/btn.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/btn.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/btn.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/group-cs.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/group-cs.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/group-cs.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/group-cs.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/group-lr.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/group-lr.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/group-lr.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/group-lr.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/group-tb.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/group-tb.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/group-tb.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/group-tb.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-b-noline.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-b-noline.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-b-noline.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-b-noline.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-b.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-b.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-b.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-b.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-bo.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-bo.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-bo.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-bo.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-light-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-light-rtl.gif new file mode 100644 index 000000000..cfa5ca3b1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-light-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-light.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-light.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-light.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-light.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-noline-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-noline-rtl.gif new file mode 100644 index 000000000..c242ef2f0 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-noline-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-noline.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-noline.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-noline.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-noline.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-o-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-o-rtl.gif new file mode 100644 index 000000000..3fc6ae2c5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-o-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-o.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-o.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow-o.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-o.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-rtl.gif new file mode 100644 index 000000000..8f556c520 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/button/s-arrow.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/button/s-arrow.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/dd/drop-add.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/dd/drop-add.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/dd/drop-add.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/dd/drop-add.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/dd/drop-no.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/dd/drop-no.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/dd/drop-no.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/dd/drop-no.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/dd/drop-yes.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/dd/drop-yes.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/dd/drop-yes.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/dd/drop-yes.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/editor/tb-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/editor/tb-sprite.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/editor/tb-sprite.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/editor/tb-sprite.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/checkbox.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/checkbox.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/checkbox.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/checkbox.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/clear-trigger-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/clear-trigger-rtl.gif new file mode 100644 index 000000000..940399aab Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/clear-trigger-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/clear-trigger.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/clear-trigger.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/clear-trigger.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/clear-trigger.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/date-trigger-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/date-trigger-rtl.gif new file mode 100644 index 000000000..63597658d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/date-trigger-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/date-trigger.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/date-trigger.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/date-trigger.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/date-trigger.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/error-tip-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/error-tip-corners.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/error-tip-corners.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/error-tip-corners.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/exclamation.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/exclamation.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/exclamation.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/exclamation.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/radio.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/radio.gif new file mode 100644 index 000000000..db3a5305e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/radio.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/search-trigger-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/search-trigger-rtl.gif new file mode 100644 index 000000000..3ff38462e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/search-trigger-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/search-trigger.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/search-trigger.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/search-trigger.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/search-trigger.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner-rtl.gif new file mode 100644 index 000000000..ff14c0665 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner-small-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner-small-rtl.gif new file mode 100644 index 000000000..70c536e6a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner-small-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/spinner-small.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner-small.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/spinner-small.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner-small.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/spinner.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/spinner.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/spinner.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/text-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/text-bg.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/text-bg.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/text-bg.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-rtl.gif new file mode 100644 index 000000000..65205d655 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-square-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-square-rtl.gif new file mode 100644 index 000000000..a86f6ce25 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-square-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/trigger-square.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-square.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/trigger-square.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-square.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/trigger-tpl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-tpl.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/trigger-tpl.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger-tpl.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/trigger.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/form/trigger.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/form/trigger.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/arrow-left-white.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/arrow-left-white.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/arrow-left-white.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/arrow-left-white.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/arrow-right-white.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/arrow-right-white.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/arrow-right-white.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/arrow-right-white.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/cell-special-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/cell-special-bg.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/cell-special-bg.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/cell-special-bg.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/cell-special-bg.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/cell-special-bg.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/cell-special-bg.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/cell-special-bg.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/cell-special-selected-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/cell-special-selected-bg.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/cell-special-selected-bg.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/cell-special-selected-bg.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/cell-special-selected-bg.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/cell-special-selected-bg.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/cell-special-selected-bg.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/cell-special-selected-bg.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/col-move-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/col-move-bottom.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/col-move-bottom.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/col-move-bottom.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/col-move-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/col-move-top.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/col-move-top.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/col-move-top.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/columns.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/columns.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/columns.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/columns.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dd-insert-arrow-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dd-insert-arrow-left.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dd-insert-arrow-left.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dd-insert-arrow-left.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dd-insert-arrow-left.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dd-insert-arrow-left.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dd-insert-arrow-left.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dd-insert-arrow-left.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dd-insert-arrow-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dd-insert-arrow-right.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dd-insert-arrow-right.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dd-insert-arrow-right.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dd-insert-arrow-right.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dd-insert-arrow-right.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dd-insert-arrow-right.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dd-insert-arrow-right.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dirty-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dirty-rtl.gif new file mode 100644 index 000000000..22fa12a11 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dirty-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dirty.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dirty.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/dirty.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/dirty.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/done.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/done.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/done.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/done.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/drop-no.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/drop-no.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/drop-no.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/drop-no.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/drop-yes.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/drop-yes.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/drop-yes.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/drop-yes.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/footer-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/footer-bg.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/footer-bg.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/footer-bg.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-blue-hd.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-blue-hd.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-blue-hd.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-blue-hd.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-blue-split.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-blue-split.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-blue-split.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-blue-split.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-hrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-hrow.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-hrow.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-hrow.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-loading.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-loading.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-loading.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-split.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-split.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-split.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-split.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-vista-hd.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-vista-hd.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid-vista-hd.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid-vista-hd.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-hd-btn-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-hd-btn-left.gif new file mode 100644 index 000000000..789270534 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-hd-btn-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid3-hd-btn.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-hd-btn.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid3-hd-btn.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-hd-btn.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid3-hrow-over.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-hrow-over.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid3-hrow-over.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-hrow-over.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid3-hrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-hrow.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid3-hrow.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-hrow.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid3-rowheader.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-rowheader.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/grid3-rowheader.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/grid3-rowheader.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/group-by.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-by.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/group-by.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-by.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tab-bar/scroll-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-collapse.gif similarity index 50% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tab-bar/scroll-left.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-collapse.gif index bbb3e3d9d..ec9800384 100644 Binary files a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tab-bar/scroll-left.gif and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-collapse.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/group-expand-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-expand-sprite.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/group-expand-sprite.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-expand-sprite.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tab-bar/scroll-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-expand.gif similarity index 50% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tab-bar/scroll-right.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-expand.gif index feb6a76f0..71c8ac43b 100644 Binary files a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tab-bar/scroll-right.gif and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/group-expand.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hd-pop.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hd-pop.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hd-pop.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hd-pop.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-asc.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-asc.gif new file mode 100644 index 000000000..15058ff65 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-asc.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-desc.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-desc.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-desc.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-desc.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-lock.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-lock.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-lock.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-lock.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-lock.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-lock.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-lock.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-lock.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-unlock.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-unlock.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-unlock.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-unlock.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-unlock.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-unlock.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-unlock.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/hmenu-unlock.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/invalid_line.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/invalid_line.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/invalid_line.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/invalid_line.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/loading.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/loading.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/loading.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/mso-hd.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/mso-hd.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/mso-hd.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/mso-hd.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/nowait.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/nowait.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/nowait.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/nowait.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-first-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-first-disabled.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-first-disabled.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-first-disabled.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-first.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-first.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-first.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-first.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-last-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-last-disabled.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-last-disabled.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-last-disabled.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-last.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-last.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-last.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-last.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-next-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-next-disabled.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-next-disabled.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-next-disabled.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-next.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-next.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-next.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-next.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-prev-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-prev-disabled.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-prev-disabled.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-prev-disabled.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-prev.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-prev.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/page-prev.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/page-prev.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/pick-button.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/pick-button.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/pick-button.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/pick-button.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/property-cell-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/property-cell-bg.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/property-cell-bg.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/property-cell-bg.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/property-cell-selected-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/property-cell-selected-bg.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/property-cell-selected-bg.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/property-cell-selected-bg.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/refresh-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/refresh-disabled.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/refresh-disabled.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/refresh-disabled.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/refresh.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/refresh.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/refresh.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/refresh.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/row-check-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/row-check-sprite.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/row-check-sprite.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/row-check-sprite.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/row-expand-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/row-expand-sprite.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/row-expand-sprite.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/row-expand-sprite.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/row-over.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/row-over.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/row-over.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/row-over.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/row-sel.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/row-sel.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/row-sel.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/row-sel.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/sort-hd.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/sort-hd.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/sort-hd.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/sort-hd.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/sort_asc.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/sort_asc.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/sort_asc.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/sort_asc.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/sort_desc.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/sort_desc.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/sort_desc.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/sort_desc.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/wait.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/wait.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/wait.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/grid/wait.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/layout/mini-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/layout/mini-bottom.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/layout/mini-bottom.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/layout/mini-bottom.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/layout/mini-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/layout/mini-left.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/layout/mini-left.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/layout/mini-left.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/layout/mini-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/layout/mini-right.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/layout/mini-right.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/layout/mini-right.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/layout/mini-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/layout/mini-top.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/layout/mini-top.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/layout/mini-top.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/checked.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/checked.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/checked.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/checked.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/group-checked.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/group-checked.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/group-checked.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/group-checked.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/item-over-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/item-over-disabled.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/item-over-disabled.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/item-over-disabled.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/item-over.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/item-over.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/item-over.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/item-over.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/menu-parent-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/menu-parent-left.gif new file mode 100644 index 000000000..1ce2ccb4c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/menu-parent-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/menu-parent.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/menu-parent.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/menu-parent.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/menu-parent.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/menu.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/menu.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/menu.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/menu.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/unchecked.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/unchecked.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/unchecked.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/menu/unchecked.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/blue-loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/blue-loading.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/blue-loading.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/blue-loading.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/calendar.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/calendar.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/calendar.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/calendar.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/glass-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/glass-bg.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/glass-bg.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/glass-bg.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/hd-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/hd-sprite.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/hd-sprite.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/hd-sprite.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/icon-error.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/icon-error.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/icon-error.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/icon-error.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/icon-info.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/icon-info.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/icon-info.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/icon-info.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/icon-question.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/icon-question.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/icon-question.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/icon-question.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/icon-warning.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/icon-warning.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/icon-warning.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/icon-warning.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/large-loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/large-loading.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/large-loading.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/large-loading.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/left-btn.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/left-btn.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/left-btn.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/left-btn.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/loading-balls.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/loading-balls.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/loading-balls.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/loading-balls.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/right-btn.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/right-btn.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/right-btn.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/right-btn.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/shadow-c.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/shadow-c.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/shadow-c.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/shadow-c.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/shadow-lr.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/shadow-lr.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/shadow-lr.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/shadow-lr.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/shadow.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/shadow.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/shadow.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/shadow.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/warning.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/warning.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/shared/warning.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/shared/warning.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/e-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/e-handle-dark.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/e-handle-dark.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/e-handle-dark.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/e-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/e-handle.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/e-handle.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/e-handle.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/ne-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/ne-handle-dark.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/ne-handle-dark.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/ne-handle-dark.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/ne-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/ne-handle.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/ne-handle.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/ne-handle.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/nw-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/nw-handle-dark.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/nw-handle-dark.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/nw-handle-dark.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/nw-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/nw-handle.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/nw-handle.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/nw-handle.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/s-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/s-handle-dark.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/s-handle-dark.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/s-handle-dark.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/s-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/s-handle.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/s-handle.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/s-handle.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/se-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/se-handle-dark.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/se-handle-dark.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/se-handle-dark.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/se-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/se-handle.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/se-handle.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/se-handle.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/square.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/square.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/square.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/square.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/sw-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/sw-handle-dark.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/sw-handle-dark.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/sw-handle-dark.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/sw-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/sw-handle.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/sizer/sw-handle.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/sizer/sw-handle.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/slider/slider-thumb.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/slider/slider-thumb.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/slider/slider-thumb.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/slider/slider-thumb.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/slider/slider-thumb.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/slider/slider-thumb.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/slider/slider-thumb.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/slider/slider-thumb.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/slider/slider-v-thumb.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/slider/slider-v-thumb.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/slider/slider-v-thumb.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/slider/slider-v-thumb.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/slider/slider-v-thumb.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/slider/slider-v-thumb.png similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/slider/slider-v-thumb.png rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/slider/slider-v-thumb.png diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-bottom-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-bottom-left.gif new file mode 100644 index 000000000..e6525b97b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-bottom-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-bottom-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-bottom-right.gif new file mode 100644 index 000000000..be657af4c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-bottom-right.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-left-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-left-bottom.gif new file mode 100644 index 000000000..ecc3116ea Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-left-bottom.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-left-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-left-top.gif new file mode 100644 index 000000000..4610705bc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-left-top.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-right-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-right-bottom.gif new file mode 100644 index 000000000..737cc3ffb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-right-bottom.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-right-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-right-top.gif new file mode 100644 index 000000000..49bc1bf73 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-right-top.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-top-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-top-left.gif new file mode 100644 index 000000000..350480409 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-top-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-top-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-top-right.gif new file mode 100644 index 000000000..eee6080d1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab-bar/default-scroll-top-right.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tab/tab-default-close.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab/tab-default-close.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tab/tab-default-close.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tab/tab-default-close.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/more-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/more-left.gif new file mode 100644 index 000000000..8f8cbd428 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/more-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/toolbar/more.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/more.gif similarity index 84% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/toolbar/more.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/more.gif index 02c2509fe..82beafdac 100644 Binary files a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/toolbar/more.gif and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/more.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/toolbar/scroll-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/scroll-left.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/toolbar/scroll-left.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/scroll-left.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/toolbar/scroll-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/scroll-right.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/toolbar/scroll-right.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/toolbar/scroll-right.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tools/tool-sprite-tpl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tools/tool-sprite-tpl.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tools/tool-sprite-tpl.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tools/tool-sprite-tpl.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tools/tool-sprites.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tools/tool-sprites.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tools/tool-sprites.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tools/tool-sprites.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tools/tools-sprites-trans.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tools/tools-sprites-trans.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tools/tools-sprites-trans.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tools/tools-sprites-trans.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/arrows.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/arrows-rtl.gif similarity index 51% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/arrows.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/arrows-rtl.gif index 1dcb81084..7083d77d4 100644 Binary files a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/arrows.gif and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/arrows-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/arrows.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/arrows.gif new file mode 100644 index 000000000..f7b8b1ca7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/arrows.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-above.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-above.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-above.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-above.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-add.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-add.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-add.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-add.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-append.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-append.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-append.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-append.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-below.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-below.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-below.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-below.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-between.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-between.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-between.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-between.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-no.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-no.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-no.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-no.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-over.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-over.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-over.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-over.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-under.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-under.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-under.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-under.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-yes.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-yes.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/drop-yes.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/drop-yes.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-minus-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-minus-rtl.gif new file mode 100644 index 000000000..10227e60d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-minus-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end-minus.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-minus.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end-minus.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-minus.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-plus-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-plus-rtl.gif new file mode 100644 index 000000000..f4eef8931 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-plus-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end-plus.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-plus.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end-plus.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-plus.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-rtl.gif new file mode 100644 index 000000000..a5e7248c4 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-end.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-line-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-line-rtl.gif new file mode 100644 index 000000000..6e5b8b44e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-line-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-line.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-line.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-line.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-line.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus-nl-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus-nl-rtl.gif new file mode 100644 index 000000000..2d8dd984f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus-nl-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-minus-nl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus-nl.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-minus-nl.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus-nl.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus-rtl.gif new file mode 100644 index 000000000..ed3e5a0d6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-minus.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-minus.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-minus.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus-nl-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus-nl-rtl.gif new file mode 100644 index 000000000..2d1e91747 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus-nl-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-plus-nl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus-nl.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-plus-nl.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus-nl.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus-rtl.gif new file mode 100644 index 000000000..cb0cb4920 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-plus.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-plus.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-plus.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-rtl.gif new file mode 100644 index 000000000..1139cb024 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/elbow.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder-open-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder-open-rtl.gif new file mode 100644 index 000000000..a34c546c6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder-open-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/folder-open.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder-open.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/folder-open.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder-open.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder-rtl.gif new file mode 100644 index 000000000..4fab30f81 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/folder.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/folder.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/folder.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/leaf-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/leaf-rtl.gif new file mode 100644 index 000000000..ab0979a3a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/leaf-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/leaf.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/leaf.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/leaf.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/leaf.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/loading.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/loading.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/loading.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/s.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/s.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/s.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/tree/s.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/util/splitter/mini-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/util/splitter/mini-bottom.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/util/splitter/mini-bottom.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/util/splitter/mini-bottom.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/util/splitter/mini-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/util/splitter/mini-left.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/util/splitter/mini-left.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/util/splitter/mini-left.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/util/splitter/mini-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/util/splitter/mini-right.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/util/splitter/mini-right.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/util/splitter/mini-right.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/util/splitter/mini-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/util/splitter/mini-top.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/util/splitter/mini-top.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/util/splitter/mini-top.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/window/icon-error.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/window/icon-error.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/window/icon-error.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/window/icon-error.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/window/icon-info.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/window/icon-info.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/window/icon-info.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/window/icon-info.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/window/icon-question.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/window/icon-question.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/window/icon-question.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/window/icon-question.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/window/icon-warning.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/window/icon-warning.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/window/icon-warning.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/images/window/icon-warning.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/build-impl.xml b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/build-impl.xml new file mode 100644 index 000000000..b9e295ced --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/build-impl.xml @@ -0,0 +1,532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Using Sencha Cmd from ${cmd.dir} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sass + -etc=true + -vars=true + -rules=true + -class-name-vars=true + -variable=$image-search-path:'${image.search.path}' + -variable=$theme-name: '${package.name}' !default + -output=${build.all.rtl.scss} + and + sass + -ruby=true + -output=${build.all.ruby} + + + sass + -etc=true + -vars=true + -rules=true + -class-name-vars=true + -variable=$image-search-path:'${image.search.path}' + -variable=$theme-name: '${package.name}' !default + -output=${build.all.scss} + and + sass + -ruby=true + -output=${build.all.ruby} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/codegen.json b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/codegen.json new file mode 100644 index 000000000..763608339 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/codegen.json @@ -0,0 +1,4 @@ +{ + "sources": {}, + "targets": {} +} \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/plugin.xml b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/plugin.xml new file mode 100644 index 000000000..d57eba874 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/plugin.xml @@ -0,0 +1,32 @@ + + + + + + diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/sencha.cfg b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/sencha.cfg new file mode 100644 index 000000000..c6cac1e41 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/.sencha/package/sencha.cfg @@ -0,0 +1,19 @@ +#Mon, 11 Mar 2013 13:51:32 -0700 +package.name=ext-theme-gray + +package.sass.namespace=Ext + +package.classpath=${package.dir}/src +package.overrides=${package.dir}/overrides + +package.sass.srcpath=${package.dir}/sass/src +package.sass.varpath=${package.dir}/sass/var +package.sass.etcpath=${package.dir}/sass/etc/all.scss + +package.build.dir=${package.dir}/build + +#============================================================================== +# Custom Properties - Place customizations below this line to avoid merge +# conflicts with newer versions + +package.cmd.version=3.1.0.214 diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/Readme.md new file mode 100644 index 000000000..9322ee88f --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/Readme.md @@ -0,0 +1,2 @@ +# ext-theme-gray - Read Me + diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build.xml b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build.xml new file mode 100644 index 000000000..2cce478dd --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/config.rb b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/config.rb new file mode 100644 index 000000000..c4ba03029 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/config.rb @@ -0,0 +1,2 @@ +require '../../ext-theme-base/sass/utils.rb' +require '../sass/config.rb' diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/example/custom.js b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/example/custom.js new file mode 100644 index 000000000..28faf77ff --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/example/custom.js @@ -0,0 +1,32 @@ +/* +This file is part of Ext JS 4.2 + +Copyright (c) 2011-2013 Sencha Inc + +Contact: http://www.sencha.com/contact + +GNU General Public License Usage +This file may be used under the terms of the GNU General Public License version 3.0 as +published by the Free Software Foundation and appearing in the file LICENSE included in the +packaging of this file. + +Please review the following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you are unsure which license is appropriate for your use, please contact the sales department +at http://www.sencha.com/contact. + +Build date: 2013-03-11 22:33:40 (aed16176e68b5e8aa1433452b12805c0ad913836) +*/ +/* + * This file is generated as a starting point by Sencha Cmd - it will not be replaced or + * updated by "sencha package upgrade". + * + * This file can be removed and the script tag in theme.html removed if this theme does + * not need custom additional manifest or shortcut entries. These are documented in + * ./packages/ext-theme-base/sass/example/render.js. + */ + +//Ext.theme.addManifest(); + +//Ext.theme.addShortcuts(); diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/example/slicer.js b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/example/slicer.js new file mode 100644 index 000000000..3d9cfb04d --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/example/slicer.js @@ -0,0 +1,126 @@ +/* +This file is part of Ext JS 4.2 + +Copyright (c) 2011-2013 Sencha Inc + +Contact: http://www.sencha.com/contact + +GNU General Public License Usage +This file may be used under the terms of the GNU General Public License version 3.0 as +published by the Free Software Foundation and appearing in the file LICENSE included in the +packaging of this file. + +Please review the following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you are unsure which license is appropriate for your use, please contact the sales department +at http://www.sencha.com/contact. + +Build date: 2013-03-11 22:33:40 (aed16176e68b5e8aa1433452b12805c0ad913836) +*/ +/* + * This file is generated by Sencha Cmd and should NOT be edited. It will be replaced by + * "sencha package upgrade". + */ +if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', function () { + // This is very important for getting transparency on corners. + document.body.style.backgroundColor = 'transparent'; + }); +} + +// This variable is watched by the Slicer. Once it is set, the data is saved with the +// screenshot. +var slicerManifest; + +function generateSlicerManifest () { + var elements = document.body.querySelectorAll('.x-slicer-target'); + var widgets = []; + var slicesRe = /^'x-slicer\:(.+)'$/; + + function getData (el) { + var data = el.getAttribute('data-slicer'); + if (data) { + return JSON.parse(data); + } + return null; + } + + function getSlices (slices, src) { + var content = src && src.content; + if (content) { + var m = slicesRe.exec(content); + if (m && m[1]) { + slices.push(m[1]); + } + } + } + + function forEach (it, fn) { + for (var i = 0; i < it.length; ++i) { + fn(it[i]); + } + } + + forEach(elements, function (el) { + var view = el.ownerDocument.defaultView; + var style = view.getComputedStyle(el, null); + var bg = style['background-image']; + var box = el.getBoundingClientRect(); + + var entry = { + box: { + x: window.scrollX + box.left, + y: window.scrollY + box.top, + w: box.right - box.left, + h: box.bottom - box.top + }, + radius: { + tl: parseInt(style['border-top-left-radius'], 10) || 0, + tr: parseInt(style['border-top-right-radius'], 10) || 0, + br: parseInt(style['border-bottom-right-radius'], 10) || 0, + bl: parseInt(style['border-bottom-left-radius'], 10) || 0 + }, + border: { + t: parseInt(style['border-top-width'], 10) || 0, + r: parseInt(style['border-right-width'], 10) || 0, + b: parseInt(style['border-bottom-width'], 10) || 0, + l: parseInt(style['border-left-width'], 10) || 0 + } + }; + + if (el.id) { + entry.id = el.id; + } + + if (bg.indexOf('-gradient') !== -1) { + if (bg.indexOf('50% 0') !== -1 || bg.indexOf('top') !== -1 || + bg.indexOf('bottom') !== -1) { + entry.gradient = 'top'; + } else { + entry.gradient = 'left'; + } + } + + var slices = []; + getSlices(slices, view.getComputedStyle(el, ':before')); + getSlices(slices, view.getComputedStyle(el, ':after')); + + if (slices.length) { + entry.slices = slices.join(', ').split(', '); + } + var extra = getData(el); + if (extra) { + entry.extra = extra; + } + + widgets.push(entry); + }); + + slicerManifest = getData(document.body) || {}; + slicerManifest.widgets = widgets; + if (!slicerManifest.format) { + // legacy support sets format to "1.0" + slicerManifest.format = '2.0'; + } +} diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/example/theme.html b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/example/theme.html new file mode 100644 index 000000000..01f93ec48 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/example/theme.html @@ -0,0 +1,44 @@ + + + + + Ext JS Theme Harness + + + + + + + + + + + + + + + + + + + diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-all-debug.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-all-debug.scss new file mode 100644 index 000000000..184a651bb --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-all-debug.scss @@ -0,0 +1,697 @@ +$image-search-path: '/Users/teamcity/buildAgent/work/ac50a318f815c1e9/packages/ext-theme-gray/build/resources'; +$theme-name: 'ext-theme-gray' !default; +$include-ext-abstractcomponent: true; +$include-ext-abstractmanager: true; +$include-ext-abstractplugin: true; +$include-ext-action: true; +$include-ext-ajax: true; +$include-ext-component: true; +$include-ext-componentloader: true; +$include-ext-componentmanager: true; +$include-ext-componentquery: true; +$include-ext-editor: true; +$include-ext-elementloader: true; +$include-ext-eventobjectimpl: true; +$include-ext-focusmanager: true; +$include-ext-img: true; +$include-ext-loadmask: true; +$include-ext-modelmanager: true; +$include-ext-pluginmanager: true; +$include-ext-progressbar: true; +$include-ext-shadow: true; +$include-ext-shadowpool: true; +$include-ext-template: true; +$include-ext-xtemplate: true; +$include-ext-xtemplatecompiler: true; +$include-ext-xtemplateparser: true; +$include-ext-zindexmanager: true; +$include-ext-app-application: true; +$include-ext-app-controller: true; +$include-ext-app-eventbus: true; +$include-ext-app-eventdomain: true; +$include-ext-app-domain-component: true; +$include-ext-app-domain-controller: true; +$include-ext-app-domain-direct: true; +$include-ext-app-domain-global: true; +$include-ext-app-domain-store: true; +$include-ext-button-button: true; +$include-ext-button-cycle: true; +$include-ext-button-manager: true; +$include-ext-button-split: true; +$include-ext-chart-callout: true; +$include-ext-chart-chart: true; +$include-ext-chart-highlight: true; +$include-ext-chart-label: true; +$include-ext-chart-legend: true; +$include-ext-chart-legenditem: true; +$include-ext-chart-mask: true; +$include-ext-chart-masklayer: true; +$include-ext-chart-navigation: true; +$include-ext-chart-shape: true; +$include-ext-chart-tip: true; +$include-ext-chart-tipsurface: true; +$include-ext-chart-axis-abstract: true; +$include-ext-chart-axis-axis: true; +$include-ext-chart-axis-category: true; +$include-ext-chart-axis-gauge: true; +$include-ext-chart-axis-numeric: true; +$include-ext-chart-axis-radial: true; +$include-ext-chart-axis-time: true; +$include-ext-chart-series-area: true; +$include-ext-chart-series-bar: true; +$include-ext-chart-series-cartesian: true; +$include-ext-chart-series-column: true; +$include-ext-chart-series-gauge: true; +$include-ext-chart-series-line: true; +$include-ext-chart-series-pie: true; +$include-ext-chart-series-radar: true; +$include-ext-chart-series-scatter: true; +$include-ext-chart-series-series: true; +$include-ext-chart-theme-base: true; +$include-ext-chart-theme-theme: true; +$include-ext-container-abstractcontainer: true; +$include-ext-container-buttongroup: true; +$include-ext-container-container: true; +$include-ext-container-dockingcontainer: true; +$include-ext-container-monitor: true; +$include-ext-container-viewport: true; +$include-ext-data-abstractstore: true; +$include-ext-data-arraystore: true; +$include-ext-data-batch: true; +$include-ext-data-bufferstore: true; +$include-ext-data-connection: true; +$include-ext-data-directstore: true; +$include-ext-data-errors: true; +$include-ext-data-field: true; +$include-ext-data-group: true; +$include-ext-data-idgenerator: true; +$include-ext-data-jsonp: true; +$include-ext-data-jsonpstore: true; +$include-ext-data-jsonstore: true; +$include-ext-data-model: true; +$include-ext-data-nodeinterface: true; +$include-ext-data-nodestore: true; +$include-ext-data-operation: true; +$include-ext-data-request: true; +$include-ext-data-resultset: true; +$include-ext-data-sequentialidgenerator: true; +$include-ext-data-sorttypes: true; +$include-ext-data-store: true; +$include-ext-data-storemanager: true; +$include-ext-data-tree: true; +$include-ext-data-treemodel: true; +$include-ext-data-treestore: true; +$include-ext-data-types: true; +$include-ext-data-uuidgenerator: true; +$include-ext-data-xmlstore: true; +$include-ext-data-amf-encoder: true; +$include-ext-data-amf-packet: true; +$include-ext-data-amf-proxy: true; +$include-ext-data-amf-reader: true; +$include-ext-data-amf-remotingmessage: true; +$include-ext-data-amf-xmldecoder: true; +$include-ext-data-amf-xmlencoder: true; +$include-ext-data-association-association: true; +$include-ext-data-association-belongsto: true; +$include-ext-data-association-hasmany: true; +$include-ext-data-association-hasone: true; +$include-ext-data-flash-binaryxhr: true; +$include-ext-data-proxy-ajax: true; +$include-ext-data-proxy-client: true; +$include-ext-data-proxy-direct: true; +$include-ext-data-proxy-jsonp: true; +$include-ext-data-proxy-localstorage: true; +$include-ext-data-proxy-memory: true; +$include-ext-data-proxy-proxy: true; +$include-ext-data-proxy-rest: true; +$include-ext-data-proxy-server: true; +$include-ext-data-proxy-sessionstorage: true; +$include-ext-data-proxy-webstorage: true; +$include-ext-data-reader-array: true; +$include-ext-data-reader-json: true; +$include-ext-data-reader-reader: true; +$include-ext-data-reader-xml: true; +$include-ext-data-soap-proxy: true; +$include-ext-data-soap-reader: true; +$include-ext-data-validations: true; +$include-ext-data-writer-json: true; +$include-ext-data-writer-writer: true; +$include-ext-data-writer-xml: true; +$include-ext-dd-dd: true; +$include-ext-dd-ddproxy: true; +$include-ext-dd-ddtarget: true; +$include-ext-dd-dragdrop: true; +$include-ext-dd-dragdropmanager: true; +$include-ext-dd-dragsource: true; +$include-ext-dd-dragtracker: true; +$include-ext-dd-dragzone: true; +$include-ext-dd-droptarget: true; +$include-ext-dd-dropzone: true; +$include-ext-dd-registry: true; +$include-ext-dd-scrollmanager: true; +$include-ext-dd-statusproxy: true; +$include-ext-diag-layout-context: true; +$include-ext-diag-layout-contextitem: true; +$include-ext-direct-amfremotingprovider: true; +$include-ext-direct-event: true; +$include-ext-direct-exceptionevent: true; +$include-ext-direct-jsonprovider: true; +$include-ext-direct-manager: true; +$include-ext-direct-pollingprovider: true; +$include-ext-direct-provider: true; +$include-ext-direct-remotingevent: true; +$include-ext-direct-remotingmethod: true; +$include-ext-direct-remotingprovider: true; +$include-ext-direct-transaction: true; +$include-ext-dom-abstractelement: true; +$include-ext-dom-abstractelement_insertion: true; +$include-ext-dom-abstractelement_static: true; +$include-ext-dom-abstractelement_style: true; +$include-ext-dom-abstractelement_traversal: true; +$include-ext-dom-abstracthelper: true; +$include-ext-dom-abstractquery: true; +$include-ext-dom-compositeelement: true; +$include-ext-dom-compositeelementlite: true; +$include-ext-dom-element: true; +$include-ext-dom-element_anim: true; +$include-ext-dom-element_dd: true; +$include-ext-dom-element_fx: true; +$include-ext-dom-element_position: true; +$include-ext-dom-element_scroll: true; +$include-ext-dom-element_style: true; +$include-ext-dom-helper: true; +$include-ext-dom-layer: true; +$include-ext-draw-color: true; +$include-ext-draw-component: true; +$include-ext-draw-compositesprite: true; +$include-ext-draw-draw: true; +$include-ext-draw-matrix: true; +$include-ext-draw-sprite: true; +$include-ext-draw-spritedd: true; +$include-ext-draw-surface: true; +$include-ext-draw-text: true; +$include-ext-draw-engine-imageexporter: true; +$include-ext-draw-engine-svg: true; +$include-ext-draw-engine-svgexporter: true; +$include-ext-draw-engine-vml: true; +$include-ext-flash-component: true; +$include-ext-form-basic: true; +$include-ext-form-checkboxgroup: true; +$include-ext-form-checkboxmanager: true; +$include-ext-form-fieldancestor: true; +$include-ext-form-fieldcontainer: true; +$include-ext-form-fieldset: true; +$include-ext-form-label: true; +$include-ext-form-labelable: true; +$include-ext-form-panel: true; +$include-ext-form-radiogroup: true; +$include-ext-form-radiomanager: true; +$include-ext-form-action-action: true; +$include-ext-form-action-directload: true; +$include-ext-form-action-directsubmit: true; +$include-ext-form-action-load: true; +$include-ext-form-action-standardsubmit: true; +$include-ext-form-action-submit: true; +$include-ext-form-field-base: true; +$include-ext-form-field-checkbox: true; +$include-ext-form-field-combobox: true; +$include-ext-form-field-date: true; +$include-ext-form-field-display: true; +$include-ext-form-field-field: true; +$include-ext-form-field-file: true; +$include-ext-form-field-filebutton: true; +$include-ext-form-field-hidden: true; +$include-ext-form-field-htmleditor: true; +$include-ext-form-field-number: true; +$include-ext-form-field-picker: true; +$include-ext-form-field-radio: true; +$include-ext-form-field-spinner: true; +$include-ext-form-field-text: true; +$include-ext-form-field-textarea: true; +$include-ext-form-field-time: true; +$include-ext-form-field-trigger: true; +$include-ext-form-field-vtypes: true; +$include-ext-fx-anim: true; +$include-ext-fx-animator: true; +$include-ext-fx-cubicbezier: true; +$include-ext-fx-easing: true; +$include-ext-fx-manager: true; +$include-ext-fx-propertyhandler: true; +$include-ext-fx-queue: true; +$include-ext-fx-target-component: true; +$include-ext-fx-target-compositeelement: true; +$include-ext-fx-target-compositeelementcss: true; +$include-ext-fx-target-compositesprite: true; +$include-ext-fx-target-element: true; +$include-ext-fx-target-elementcss: true; +$include-ext-fx-target-sprite: true; +$include-ext-fx-target-target: true; +$include-ext-grid-celleditor: true; +$include-ext-grid-columncomponentlayout: true; +$include-ext-grid-columnlayout: true; +$include-ext-grid-panel: true; +$include-ext-grid-roweditor: true; +$include-ext-grid-roweditorbuttons: true; +$include-ext-grid-rownumberer: true; +$include-ext-grid-view: true; +$include-ext-grid-viewdropzone: true; +$include-ext-grid-column-action: true; +$include-ext-grid-column-boolean: true; +$include-ext-grid-column-checkcolumn: true; +$include-ext-grid-column-column: true; +$include-ext-grid-column-date: true; +$include-ext-grid-column-number: true; +$include-ext-grid-column-template: true; +$include-ext-grid-feature-abstractsummary: true; +$include-ext-grid-feature-feature: true; +$include-ext-grid-feature-groupstore: true; +$include-ext-grid-feature-grouping: true; +$include-ext-grid-feature-groupingsummary: true; +$include-ext-grid-feature-rowbody: true; +$include-ext-grid-feature-rowwrap: true; +$include-ext-grid-feature-summary: true; +$include-ext-grid-header-container: true; +$include-ext-grid-header-dragzone: true; +$include-ext-grid-header-dropzone: true; +$include-ext-grid-locking-headercontainer: true; +$include-ext-grid-locking-lockable: true; +$include-ext-grid-locking-view: true; +$include-ext-grid-plugin-bufferedrenderer: true; +$include-ext-grid-plugin-bufferedrenderertableview: true; +$include-ext-grid-plugin-bufferedrenderertreeview: true; +$include-ext-grid-plugin-cellediting: true; +$include-ext-grid-plugin-divrenderer: true; +$include-ext-grid-plugin-dragdrop: true; +$include-ext-grid-plugin-editing: true; +$include-ext-grid-plugin-headerreorderer: true; +$include-ext-grid-plugin-headerresizer: true; +$include-ext-grid-plugin-rowediting: true; +$include-ext-grid-plugin-rowexpander: true; +$include-ext-grid-property-grid: true; +$include-ext-grid-property-headercontainer: true; +$include-ext-grid-property-property: true; +$include-ext-grid-property-store: true; +$include-ext-layout-classlist: true; +$include-ext-layout-context: true; +$include-ext-layout-contextitem: true; +$include-ext-layout-layout: true; +$include-ext-layout-sizemodel: true; +$include-ext-layout-component-auto: true; +$include-ext-layout-component-body: true; +$include-ext-layout-component-boundlist: true; +$include-ext-layout-component-button: true; +$include-ext-layout-component-component: true; +$include-ext-layout-component-dock: true; +$include-ext-layout-component-draw: true; +$include-ext-layout-component-fieldset: true; +$include-ext-layout-component-progressbar: true; +$include-ext-layout-component-field-combobox: true; +$include-ext-layout-component-field-field: true; +$include-ext-layout-component-field-fieldcontainer: true; +$include-ext-layout-component-field-htmleditor: true; +$include-ext-layout-component-field-slider: true; +$include-ext-layout-component-field-text: true; +$include-ext-layout-component-field-textarea: true; +$include-ext-layout-component-field-trigger: true; +$include-ext-layout-container-absolute: true; +$include-ext-layout-container-accordion: true; +$include-ext-layout-container-anchor: true; +$include-ext-layout-container-auto: true; +$include-ext-layout-container-border: true; +$include-ext-layout-container-box: true; +$include-ext-layout-container-card: true; +$include-ext-layout-container-checkboxgroup: true; +$include-ext-layout-container-column: true; +$include-ext-layout-container-container: true; +$include-ext-layout-container-editor: true; +$include-ext-layout-container-fit: true; +$include-ext-layout-container-form: true; +$include-ext-layout-container-hbox: true; +$include-ext-layout-container-table: true; +$include-ext-layout-container-vbox: true; +$include-ext-layout-container-boxoverflow-menu: true; +$include-ext-layout-container-boxoverflow-none: true; +$include-ext-layout-container-boxoverflow-scroller: true; +$include-ext-menu-checkitem: true; +$include-ext-menu-colorpicker: true; +$include-ext-menu-datepicker: true; +$include-ext-menu-item: true; +$include-ext-menu-keynav: true; +$include-ext-menu-manager: true; +$include-ext-menu-menu: true; +$include-ext-menu-separator: true; +$include-ext-panel-abstractpanel: true; +$include-ext-panel-dd: true; +$include-ext-panel-header: true; +$include-ext-panel-panel: true; +$include-ext-panel-proxy: true; +$include-ext-panel-table: true; +$include-ext-panel-tool: true; +$include-ext-perf-accumulator: true; +$include-ext-perf-monitor: true; +$include-ext-picker-color: true; +$include-ext-picker-date: true; +$include-ext-picker-month: true; +$include-ext-picker-time: true; +$include-ext-resizer-bordersplitter: true; +$include-ext-resizer-bordersplittertracker: true; +$include-ext-resizer-handle: true; +$include-ext-resizer-resizetracker: true; +$include-ext-resizer-resizer: true; +$include-ext-resizer-splitter: true; +$include-ext-resizer-splittertracker: true; +$include-ext-rtl-abstractcomponent: false; +$include-ext-rtl-eventobjectimpl: false; +$include-ext-rtl-button-button: false; +$include-ext-rtl-dd-dd: false; +$include-ext-rtl-dom-element_anim: false; +$include-ext-rtl-dom-element_insertion: false; +$include-ext-rtl-dom-element_position: false; +$include-ext-rtl-dom-element_scroll: false; +$include-ext-rtl-dom-element_static: false; +$include-ext-rtl-dom-layer: false; +$include-ext-rtl-form-field-spinner: false; +$include-ext-rtl-form-field-trigger: false; +$include-ext-rtl-grid-roweditor: false; +$include-ext-rtl-grid-column-column: false; +$include-ext-rtl-grid-plugin-headerresizer: false; +$include-ext-rtl-grid-plugin-rowediting: false; +$include-ext-rtl-layout-contextitem: false; +$include-ext-rtl-layout-component-dock: false; +$include-ext-rtl-layout-component-field-text: false; +$include-ext-rtl-layout-component-field-trigger: false; +$include-ext-rtl-layout-container-absolute: false; +$include-ext-rtl-layout-container-box: false; +$include-ext-rtl-layout-container-column: false; +$include-ext-rtl-layout-container-hbox: false; +$include-ext-rtl-layout-container-vbox: false; +$include-ext-rtl-layout-container-boxoverflow-scroller: false; +$include-ext-rtl-panel-header: false; +$include-ext-rtl-panel-panel: false; +$include-ext-rtl-resizer-bordersplittertracker: false; +$include-ext-rtl-resizer-resizetracker: false; +$include-ext-rtl-resizer-splittertracker: false; +$include-ext-rtl-slider-multi: false; +$include-ext-rtl-tab-bar: false; +$include-ext-rtl-tree-column: false; +$include-ext-rtl-util-floating: false; +$include-ext-rtl-util-renderable: false; +$include-ext-rtl-view-table: false; +$include-ext-selection-cellmodel: true; +$include-ext-selection-checkboxmodel: true; +$include-ext-selection-dataviewmodel: true; +$include-ext-selection-model: true; +$include-ext-selection-rowmodel: true; +$include-ext-selection-treemodel: true; +$include-ext-slider-multi: true; +$include-ext-slider-single: true; +$include-ext-slider-thumb: true; +$include-ext-slider-tip: true; +$include-ext-state-cookieprovider: true; +$include-ext-state-localstorageprovider: true; +$include-ext-state-manager: true; +$include-ext-state-provider: true; +$include-ext-state-stateful: true; +$include-ext-tab-bar: true; +$include-ext-tab-panel: true; +$include-ext-tab-tab: true; +$include-ext-tip-quicktip: true; +$include-ext-tip-quicktipmanager: true; +$include-ext-tip-tip: true; +$include-ext-tip-tooltip: true; +$include-ext-toolbar-fill: true; +$include-ext-toolbar-item: true; +$include-ext-toolbar-paging: true; +$include-ext-toolbar-separator: true; +$include-ext-toolbar-spacer: true; +$include-ext-toolbar-textitem: true; +$include-ext-toolbar-toolbar: true; +$include-ext-tree-column: true; +$include-ext-tree-panel: true; +$include-ext-tree-view: true; +$include-ext-tree-viewdragzone: true; +$include-ext-tree-viewdropzone: true; +$include-ext-tree-plugin-treeviewdragdrop: true; +$include-ext-util-abstractmixedcollection: true; +$include-ext-util-animate: true; +$include-ext-util-bindable: true; +$include-ext-util-css: true; +$include-ext-util-clickrepeater: true; +$include-ext-util-componentdragger: true; +$include-ext-util-cookies: true; +$include-ext-util-elementcontainer: true; +$include-ext-util-event: true; +$include-ext-util-filter: true; +$include-ext-util-floating: true; +$include-ext-util-grouper: true; +$include-ext-util-hashmap: true; +$include-ext-util-history: true; +$include-ext-util-inflector: true; +$include-ext-util-keymap: true; +$include-ext-util-keynav: true; +$include-ext-util-lrucache: true; +$include-ext-util-memento: true; +$include-ext-util-mixedcollection: true; +$include-ext-util-observable: true; +$include-ext-util-offset: true; +$include-ext-util-point: true; +$include-ext-util-positionable: true; +$include-ext-util-protoelement: true; +$include-ext-util-queue: true; +$include-ext-util-region: true; +$include-ext-util-renderable: true; +$include-ext-util-sortable: true; +$include-ext-util-sorter: true; +$include-ext-util-taskmanager: true; +$include-ext-util-taskrunner: true; +$include-ext-util-textmetrics: true; +$include-ext-view-abstractview: true; +$include-ext-view-boundlist: true; +$include-ext-view-boundlistkeynav: true; +$include-ext-view-dragzone: true; +$include-ext-view-dropzone: true; +$include-ext-view-nodecache: true; +$include-ext-view-table: true; +$include-ext-view-tablelayout: true; +$include-ext-view-view: true; +$include-ext-window-messagebox: true; +$include-ext-window-window: true; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-base/sass/etc/all'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-classic/sass/etc/all'; +$relative-image-path-for-uis: 'images'; +@import '../sass/etc/all'; +$relative-image-path-for-uis: 'images'; +@import '../sass/var/Component'; +@import '../sass/var/ProgressBar'; +@import '../sass/var/button/Button'; +@import '../sass/var/toolbar/Toolbar'; +@import '../sass/var/panel/Panel'; +@import '../sass/var/tip/Tip'; +@import '../sass/var/container/ButtonGroup'; +@import '../sass/var/window/Window'; +@import '../sass/var/form/FieldSet'; +@import '../sass/var/view/BoundList'; +@import '../sass/var/picker/Date'; +@import '../sass/var/grid/column/Column'; +@import '../sass/var/layout/container/Accordion'; +@import '../sass/var/menu/Menu'; +@import '../sass/var/tab/Panel'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-classic/sass/var/Component'; +@import '../../ext-theme-classic/sass/var/LoadMask'; +@import '../../ext-theme-classic/sass/var/ProgressBar'; +@import '../../ext-theme-classic/sass/var/button/Button'; +@import '../../ext-theme-classic/sass/var/toolbar/Toolbar'; +@import '../../ext-theme-classic/sass/var/panel/Panel'; +@import '../../ext-theme-classic/sass/var/tip/Tip'; +@import '../../ext-theme-classic/sass/var/container/ButtonGroup'; +@import '../../ext-theme-classic/sass/var/window/Window'; +@import '../../ext-theme-classic/sass/var/form/Labelable'; +@import '../../ext-theme-classic/sass/var/form/field/Base'; +@import '../../ext-theme-classic/sass/var/window/MessageBox'; +@import '../../ext-theme-classic/sass/var/form/CheckboxGroup'; +@import '../../ext-theme-classic/sass/var/form/field/Trigger'; +@import '../../ext-theme-classic/sass/var/view/BoundList'; +@import '../../ext-theme-classic/sass/var/picker/Date'; +@import '../../ext-theme-classic/sass/var/picker/Color'; +@import '../../ext-theme-classic/sass/var/form/field/HtmlEditor'; +@import '../../ext-theme-classic/sass/var/panel/Table'; +@import '../../ext-theme-classic/sass/var/grid/header/Container'; +@import '../../ext-theme-classic/sass/var/grid/plugin/RowExpander'; +@import '../../ext-theme-classic/sass/var/grid/property/Grid'; +@import '../../ext-theme-classic/sass/var/layout/container/Accordion'; +@import '../../ext-theme-classic/sass/var/layout/container/Border'; +@import '../../ext-theme-classic/sass/var/menu/Menu'; +@import '../../ext-theme-classic/sass/var/panel/Tool'; +@import '../../ext-theme-classic/sass/var/resizer/Resizer'; +@import '../../ext-theme-classic/sass/var/slider/Multi'; +@import '../../ext-theme-classic/sass/var/tab/Panel'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-neutral/sass/var/Component'; +@import '../../ext-theme-neutral/sass/var/FocusManager'; +@import '../../ext-theme-neutral/sass/var/LoadMask'; +@import '../../ext-theme-neutral/sass/var/ProgressBar'; +@import '../../ext-theme-neutral/sass/var/button/Button'; +@import '../../ext-theme-neutral/sass/var/toolbar/Toolbar'; +@import '../../ext-theme-neutral/sass/var/panel/Header'; +@import '../../ext-theme-neutral/sass/var/panel/Panel'; +@import '../../ext-theme-neutral/sass/var/tip/Tip'; +@import '../../ext-theme-neutral/sass/var/container/ButtonGroup'; +@import '../../ext-theme-neutral/sass/var/window/Window'; +@import '../../ext-theme-neutral/sass/var/form/Labelable'; +@import '../../ext-theme-neutral/sass/var/form/field/Base'; +@import '../../ext-theme-neutral/sass/var/form/field/TextArea'; +@import '../../ext-theme-neutral/sass/var/form/field/Display'; +@import '../../ext-theme-neutral/sass/var/window/MessageBox'; +@import '../../ext-theme-neutral/sass/var/form/CheckboxGroup'; +@import '../../ext-theme-neutral/sass/var/form/FieldSet'; +@import '../../ext-theme-neutral/sass/var/form/field/Checkbox'; +@import '../../ext-theme-neutral/sass/var/form/field/Trigger'; +@import '../../ext-theme-neutral/sass/var/form/field/Spinner'; +@import '../../ext-theme-neutral/sass/var/toolbar/Paging'; +@import '../../ext-theme-neutral/sass/var/view/BoundList'; +@import '../../ext-theme-neutral/sass/var/picker/Date'; +@import '../../ext-theme-neutral/sass/var/picker/Color'; +@import '../../ext-theme-neutral/sass/var/form/field/HtmlEditor'; +@import '../../ext-theme-neutral/sass/var/form/field/Radio'; +@import '../../ext-theme-neutral/sass/var/panel/Table'; +@import '../../ext-theme-neutral/sass/var/grid/header/Container'; +@import '../../ext-theme-neutral/sass/var/grid/column/Column'; +@import '../../ext-theme-neutral/sass/var/grid/column/Action'; +@import '../../ext-theme-neutral/sass/var/grid/column/CheckColumn'; +@import '../../ext-theme-neutral/sass/var/grid/feature/Grouping'; +@import '../../ext-theme-neutral/sass/var/grid/feature/RowWrap'; +@import '../../ext-theme-neutral/sass/var/grid/plugin/Editing'; +@import '../../ext-theme-neutral/sass/var/grid/plugin/CellEditing'; +@import '../../ext-theme-neutral/sass/var/grid/plugin/RowEditing'; +@import '../../ext-theme-neutral/sass/var/grid/property/Grid'; +@import '../../ext-theme-neutral/sass/var/layout/container/Accordion'; +@import '../../ext-theme-neutral/sass/var/resizer/Splitter'; +@import '../../ext-theme-neutral/sass/var/layout/container/Border'; +@import '../../ext-theme-neutral/sass/var/menu/Menu'; +@import '../../ext-theme-neutral/sass/var/panel/Tool'; +@import '../../ext-theme-neutral/sass/var/slider/Multi'; +@import '../../ext-theme-neutral/sass/var/tab/Panel'; +@import '../../ext-theme-neutral/sass/var/tree/Panel'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-base/sass/var/Component'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-base/sass/src/Component'; +@import '../../ext-theme-base/sass/src/layout/container/Container'; +@import '../../ext-theme-base/sass/src/LoadMask'; +@import '../../ext-theme-base/sass/src/ProgressBar'; +@import '../../ext-theme-base/sass/src/button/Button'; +@import '../../ext-theme-base/sass/src/layout/container/Box'; +@import '../../ext-theme-base/sass/src/toolbar/Toolbar'; +@import '../../ext-theme-base/sass/src/layout/component/Dock'; +@import '../../ext-theme-base/sass/src/panel/Header'; +@import '../../ext-theme-base/sass/src/dd/DD'; +@import '../../ext-theme-base/sass/src/dd/StatusProxy'; +@import '../../ext-theme-base/sass/src/panel/Panel'; +@import '../../ext-theme-base/sass/src/tip/Tip'; +@import '../../ext-theme-base/sass/src/layout/container/Table'; +@import '../../ext-theme-base/sass/src/container/ButtonGroup'; +@import '../../ext-theme-base/sass/src/container/Viewport'; +@import '../../ext-theme-base/sass/src/window/Window'; +@import '../../ext-theme-base/sass/src/form/Labelable'; +@import '../../ext-theme-base/sass/src/form/field/TextArea'; +@import '../../ext-theme-base/sass/src/form/CheckboxGroup'; +@import '../../ext-theme-base/sass/src/form/FieldSet'; +@import '../../ext-theme-base/sass/src/form/Panel'; +@import '../../ext-theme-base/sass/src/form/field/Checkbox'; +@import '../../ext-theme-base/sass/src/form/field/Trigger'; +@import '../../ext-theme-base/sass/src/form/field/Spinner'; +@import '../../ext-theme-base/sass/src/view/BoundList'; +@import '../../ext-theme-base/sass/src/picker/Date'; +@import '../../ext-theme-base/sass/src/form/field/File'; +@import '../../ext-theme-base/sass/src/form/field/Hidden'; +@import '../../ext-theme-base/sass/src/picker/Color'; +@import '../../ext-theme-base/sass/src/form/field/HtmlEditor'; +@import '../../ext-theme-base/sass/src/layout/container/Fit'; +@import '../../ext-theme-base/sass/src/panel/Table'; +@import '../../ext-theme-base/sass/src/layout/container/Absolute'; +@import '../../ext-theme-base/sass/src/resizer/Splitter'; +@import '../../ext-theme-base/sass/src/layout/container/Border'; +@import '../../ext-theme-base/sass/src/layout/container/Column'; +@import '../../ext-theme-base/sass/src/layout/container/Form'; +@import '../../ext-theme-base/sass/src/menu/Menu'; +@import '../../ext-theme-base/sass/src/resizer/SplitterTracker'; +@import '../../ext-theme-base/sass/src/slider/Multi'; +@import '../../ext-theme-base/sass/src/tab/Panel'; +@import '../../ext-theme-base/sass/src/draw/Component'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-neutral/sass/src/Component'; +@import '../../ext-theme-neutral/sass/src/Editor'; +@import '../../ext-theme-neutral/sass/src/FocusManager'; +@import '../../ext-theme-neutral/sass/src/LoadMask'; +@import '../../ext-theme-neutral/sass/src/ProgressBar'; +@import '../../ext-theme-neutral/sass/src/button/Button'; +@import '../../ext-theme-neutral/sass/src/toolbar/Toolbar'; +@import '../../ext-theme-neutral/sass/src/panel/Header'; +@import '../../ext-theme-neutral/sass/src/panel/Panel'; +@import '../../ext-theme-neutral/sass/src/tip/Tip'; +@import '../../ext-theme-neutral/sass/src/container/ButtonGroup'; +@import '../../ext-theme-neutral/sass/src/window/Window'; +@import '../../ext-theme-neutral/sass/src/form/Labelable'; +@import '../../ext-theme-neutral/sass/src/form/field/Base'; +@import '../../ext-theme-neutral/sass/src/form/field/Text'; +@import '../../ext-theme-neutral/sass/src/form/field/TextArea'; +@import '../../ext-theme-neutral/sass/src/form/field/Display'; +@import '../../ext-theme-neutral/sass/src/window/MessageBox'; +@import '../../ext-theme-neutral/sass/src/form/CheckboxGroup'; +@import '../../ext-theme-neutral/sass/src/form/FieldSet'; +@import '../../ext-theme-neutral/sass/src/form/field/Checkbox'; +@import '../../ext-theme-neutral/sass/src/form/field/Trigger'; +@import '../../ext-theme-neutral/sass/src/form/field/Spinner'; +@import '../../ext-theme-neutral/sass/src/toolbar/Paging'; +@import '../../ext-theme-neutral/sass/src/view/BoundList'; +@import '../../ext-theme-neutral/sass/src/picker/Date'; +@import '../../ext-theme-neutral/sass/src/form/field/Date'; +@import '../../ext-theme-neutral/sass/src/form/field/File'; +@import '../../ext-theme-neutral/sass/src/picker/Color'; +@import '../../ext-theme-neutral/sass/src/form/field/HtmlEditor'; +@import '../../ext-theme-neutral/sass/src/form/field/Radio'; +@import '../../ext-theme-neutral/sass/src/panel/Table'; +@import '../../ext-theme-neutral/sass/src/grid/header/DropZone'; +@import '../../ext-theme-neutral/sass/src/grid/header/Container'; +@import '../../ext-theme-neutral/sass/src/grid/column/Column'; +@import '../../ext-theme-neutral/sass/src/view/DropZone'; +@import '../../ext-theme-neutral/sass/src/grid/column/Action'; +@import '../../ext-theme-neutral/sass/src/grid/column/CheckColumn'; +@import '../../ext-theme-neutral/sass/src/grid/feature/Grouping'; +@import '../../ext-theme-neutral/sass/src/grid/feature/RowBody'; +@import '../../ext-theme-neutral/sass/src/grid/feature/RowWrap'; +@import '../../ext-theme-neutral/sass/src/grid/feature/Summary'; +@import '../../ext-theme-neutral/sass/src/grid/locking/Lockable'; +@import '../../ext-theme-neutral/sass/src/grid/plugin/Editing'; +@import '../../ext-theme-neutral/sass/src/grid/plugin/CellEditing'; +@import '../../ext-theme-neutral/sass/src/grid/plugin/RowEditing'; +@import '../../ext-theme-neutral/sass/src/grid/plugin/RowExpander'; +@import '../../ext-theme-neutral/sass/src/grid/property/Grid'; +@import '../../ext-theme-neutral/sass/src/layout/container/Accordion'; +@import '../../ext-theme-neutral/sass/src/resizer/Splitter'; +@import '../../ext-theme-neutral/sass/src/layout/container/Border'; +@import '../../ext-theme-neutral/sass/src/menu/Menu'; +@import '../../ext-theme-neutral/sass/src/panel/Tool'; +@import '../../ext-theme-neutral/sass/src/resizer/Resizer'; +@import '../../ext-theme-neutral/sass/src/slider/Multi'; +@import '../../ext-theme-neutral/sass/src/selection/CheckboxModel'; +@import '../../ext-theme-neutral/sass/src/tab/Panel'; +@import '../../ext-theme-neutral/sass/src/tree/Panel'; +@import '../../ext-theme-neutral/sass/src/tree/ViewDropZone'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-classic/sass/src/dom/Element'; +@import '../../ext-theme-classic/sass/src/toolbar/Toolbar'; +@import '../../ext-theme-classic/sass/src/window/MessageBox'; +@import '../../ext-theme-classic/sass/src/form/field/Trigger'; +@import '../../ext-theme-classic/sass/src/form/field/Spinner'; +@import '../../ext-theme-classic/sass/src/form/field/HtmlEditor'; +@import '../../ext-theme-classic/sass/src/grid/column/Column'; +@import '../../ext-theme-classic/sass/src/grid/plugin/Editing'; +@import '../../ext-theme-classic/sass/src/grid/plugin/RowEditing'; +@import '../../ext-theme-classic/sass/src/layout/container/Accordion'; +@import '../../ext-theme-classic/sass/src/resizer/Resizer'; +@import '../../ext-theme-classic/sass/src/slider/Multi'; +@import '../../ext-theme-classic/sass/src/tab/Panel'; diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-all-rtl-debug.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-all-rtl-debug.scss new file mode 100644 index 000000000..0c77090e7 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-all-rtl-debug.scss @@ -0,0 +1,698 @@ +$image-search-path: '/Users/teamcity/buildAgent/work/ac50a318f815c1e9/packages/ext-theme-gray/build/resources'; +$theme-name: 'ext-theme-gray' !default; +$include-ext-abstractcomponent: true; +$include-ext-abstractmanager: true; +$include-ext-abstractplugin: true; +$include-ext-action: true; +$include-ext-ajax: true; +$include-ext-component: true; +$include-ext-componentloader: true; +$include-ext-componentmanager: true; +$include-ext-componentquery: true; +$include-ext-editor: true; +$include-ext-elementloader: true; +$include-ext-eventobjectimpl: true; +$include-ext-focusmanager: true; +$include-ext-img: true; +$include-ext-loadmask: true; +$include-ext-modelmanager: true; +$include-ext-pluginmanager: true; +$include-ext-progressbar: true; +$include-ext-shadow: true; +$include-ext-shadowpool: true; +$include-ext-template: true; +$include-ext-xtemplate: true; +$include-ext-xtemplatecompiler: true; +$include-ext-xtemplateparser: true; +$include-ext-zindexmanager: true; +$include-ext-app-application: true; +$include-ext-app-controller: true; +$include-ext-app-eventbus: true; +$include-ext-app-eventdomain: true; +$include-ext-app-domain-component: true; +$include-ext-app-domain-controller: true; +$include-ext-app-domain-direct: true; +$include-ext-app-domain-global: true; +$include-ext-app-domain-store: true; +$include-ext-button-button: true; +$include-ext-button-cycle: true; +$include-ext-button-manager: true; +$include-ext-button-split: true; +$include-ext-chart-callout: true; +$include-ext-chart-chart: true; +$include-ext-chart-highlight: true; +$include-ext-chart-label: true; +$include-ext-chart-legend: true; +$include-ext-chart-legenditem: true; +$include-ext-chart-mask: true; +$include-ext-chart-masklayer: true; +$include-ext-chart-navigation: true; +$include-ext-chart-shape: true; +$include-ext-chart-tip: true; +$include-ext-chart-tipsurface: true; +$include-ext-chart-axis-abstract: true; +$include-ext-chart-axis-axis: true; +$include-ext-chart-axis-category: true; +$include-ext-chart-axis-gauge: true; +$include-ext-chart-axis-numeric: true; +$include-ext-chart-axis-radial: true; +$include-ext-chart-axis-time: true; +$include-ext-chart-series-area: true; +$include-ext-chart-series-bar: true; +$include-ext-chart-series-cartesian: true; +$include-ext-chart-series-column: true; +$include-ext-chart-series-gauge: true; +$include-ext-chart-series-line: true; +$include-ext-chart-series-pie: true; +$include-ext-chart-series-radar: true; +$include-ext-chart-series-scatter: true; +$include-ext-chart-series-series: true; +$include-ext-chart-theme-base: true; +$include-ext-chart-theme-theme: true; +$include-ext-container-abstractcontainer: true; +$include-ext-container-buttongroup: true; +$include-ext-container-container: true; +$include-ext-container-dockingcontainer: true; +$include-ext-container-monitor: true; +$include-ext-container-viewport: true; +$include-ext-data-abstractstore: true; +$include-ext-data-arraystore: true; +$include-ext-data-batch: true; +$include-ext-data-bufferstore: true; +$include-ext-data-connection: true; +$include-ext-data-directstore: true; +$include-ext-data-errors: true; +$include-ext-data-field: true; +$include-ext-data-group: true; +$include-ext-data-idgenerator: true; +$include-ext-data-jsonp: true; +$include-ext-data-jsonpstore: true; +$include-ext-data-jsonstore: true; +$include-ext-data-model: true; +$include-ext-data-nodeinterface: true; +$include-ext-data-nodestore: true; +$include-ext-data-operation: true; +$include-ext-data-request: true; +$include-ext-data-resultset: true; +$include-ext-data-sequentialidgenerator: true; +$include-ext-data-sorttypes: true; +$include-ext-data-store: true; +$include-ext-data-storemanager: true; +$include-ext-data-tree: true; +$include-ext-data-treemodel: true; +$include-ext-data-treestore: true; +$include-ext-data-types: true; +$include-ext-data-uuidgenerator: true; +$include-ext-data-xmlstore: true; +$include-ext-data-amf-encoder: true; +$include-ext-data-amf-packet: true; +$include-ext-data-amf-proxy: true; +$include-ext-data-amf-reader: true; +$include-ext-data-amf-remotingmessage: true; +$include-ext-data-amf-xmldecoder: true; +$include-ext-data-amf-xmlencoder: true; +$include-ext-data-association-association: true; +$include-ext-data-association-belongsto: true; +$include-ext-data-association-hasmany: true; +$include-ext-data-association-hasone: true; +$include-ext-data-flash-binaryxhr: true; +$include-ext-data-proxy-ajax: true; +$include-ext-data-proxy-client: true; +$include-ext-data-proxy-direct: true; +$include-ext-data-proxy-jsonp: true; +$include-ext-data-proxy-localstorage: true; +$include-ext-data-proxy-memory: true; +$include-ext-data-proxy-proxy: true; +$include-ext-data-proxy-rest: true; +$include-ext-data-proxy-server: true; +$include-ext-data-proxy-sessionstorage: true; +$include-ext-data-proxy-webstorage: true; +$include-ext-data-reader-array: true; +$include-ext-data-reader-json: true; +$include-ext-data-reader-reader: true; +$include-ext-data-reader-xml: true; +$include-ext-data-soap-proxy: true; +$include-ext-data-soap-reader: true; +$include-ext-data-validations: true; +$include-ext-data-writer-json: true; +$include-ext-data-writer-writer: true; +$include-ext-data-writer-xml: true; +$include-ext-dd-dd: true; +$include-ext-dd-ddproxy: true; +$include-ext-dd-ddtarget: true; +$include-ext-dd-dragdrop: true; +$include-ext-dd-dragdropmanager: true; +$include-ext-dd-dragsource: true; +$include-ext-dd-dragtracker: true; +$include-ext-dd-dragzone: true; +$include-ext-dd-droptarget: true; +$include-ext-dd-dropzone: true; +$include-ext-dd-registry: true; +$include-ext-dd-scrollmanager: true; +$include-ext-dd-statusproxy: true; +$include-ext-diag-layout-context: true; +$include-ext-diag-layout-contextitem: true; +$include-ext-direct-amfremotingprovider: true; +$include-ext-direct-event: true; +$include-ext-direct-exceptionevent: true; +$include-ext-direct-jsonprovider: true; +$include-ext-direct-manager: true; +$include-ext-direct-pollingprovider: true; +$include-ext-direct-provider: true; +$include-ext-direct-remotingevent: true; +$include-ext-direct-remotingmethod: true; +$include-ext-direct-remotingprovider: true; +$include-ext-direct-transaction: true; +$include-ext-dom-abstractelement: true; +$include-ext-dom-abstractelement_insertion: true; +$include-ext-dom-abstractelement_static: true; +$include-ext-dom-abstractelement_style: true; +$include-ext-dom-abstractelement_traversal: true; +$include-ext-dom-abstracthelper: true; +$include-ext-dom-abstractquery: true; +$include-ext-dom-compositeelement: true; +$include-ext-dom-compositeelementlite: true; +$include-ext-dom-element: true; +$include-ext-dom-element_anim: true; +$include-ext-dom-element_dd: true; +$include-ext-dom-element_fx: true; +$include-ext-dom-element_position: true; +$include-ext-dom-element_scroll: true; +$include-ext-dom-element_style: true; +$include-ext-dom-helper: true; +$include-ext-dom-layer: true; +$include-ext-draw-color: true; +$include-ext-draw-component: true; +$include-ext-draw-compositesprite: true; +$include-ext-draw-draw: true; +$include-ext-draw-matrix: true; +$include-ext-draw-sprite: true; +$include-ext-draw-spritedd: true; +$include-ext-draw-surface: true; +$include-ext-draw-text: true; +$include-ext-draw-engine-imageexporter: true; +$include-ext-draw-engine-svg: true; +$include-ext-draw-engine-svgexporter: true; +$include-ext-draw-engine-vml: true; +$include-ext-flash-component: true; +$include-ext-form-basic: true; +$include-ext-form-checkboxgroup: true; +$include-ext-form-checkboxmanager: true; +$include-ext-form-fieldancestor: true; +$include-ext-form-fieldcontainer: true; +$include-ext-form-fieldset: true; +$include-ext-form-label: true; +$include-ext-form-labelable: true; +$include-ext-form-panel: true; +$include-ext-form-radiogroup: true; +$include-ext-form-radiomanager: true; +$include-ext-form-action-action: true; +$include-ext-form-action-directload: true; +$include-ext-form-action-directsubmit: true; +$include-ext-form-action-load: true; +$include-ext-form-action-standardsubmit: true; +$include-ext-form-action-submit: true; +$include-ext-form-field-base: true; +$include-ext-form-field-checkbox: true; +$include-ext-form-field-combobox: true; +$include-ext-form-field-date: true; +$include-ext-form-field-display: true; +$include-ext-form-field-field: true; +$include-ext-form-field-file: true; +$include-ext-form-field-filebutton: true; +$include-ext-form-field-hidden: true; +$include-ext-form-field-htmleditor: true; +$include-ext-form-field-number: true; +$include-ext-form-field-picker: true; +$include-ext-form-field-radio: true; +$include-ext-form-field-spinner: true; +$include-ext-form-field-text: true; +$include-ext-form-field-textarea: true; +$include-ext-form-field-time: true; +$include-ext-form-field-trigger: true; +$include-ext-form-field-vtypes: true; +$include-ext-fx-anim: true; +$include-ext-fx-animator: true; +$include-ext-fx-cubicbezier: true; +$include-ext-fx-easing: true; +$include-ext-fx-manager: true; +$include-ext-fx-propertyhandler: true; +$include-ext-fx-queue: true; +$include-ext-fx-target-component: true; +$include-ext-fx-target-compositeelement: true; +$include-ext-fx-target-compositeelementcss: true; +$include-ext-fx-target-compositesprite: true; +$include-ext-fx-target-element: true; +$include-ext-fx-target-elementcss: true; +$include-ext-fx-target-sprite: true; +$include-ext-fx-target-target: true; +$include-ext-grid-celleditor: true; +$include-ext-grid-columncomponentlayout: true; +$include-ext-grid-columnlayout: true; +$include-ext-grid-panel: true; +$include-ext-grid-roweditor: true; +$include-ext-grid-roweditorbuttons: true; +$include-ext-grid-rownumberer: true; +$include-ext-grid-view: true; +$include-ext-grid-viewdropzone: true; +$include-ext-grid-column-action: true; +$include-ext-grid-column-boolean: true; +$include-ext-grid-column-checkcolumn: true; +$include-ext-grid-column-column: true; +$include-ext-grid-column-date: true; +$include-ext-grid-column-number: true; +$include-ext-grid-column-template: true; +$include-ext-grid-feature-abstractsummary: true; +$include-ext-grid-feature-feature: true; +$include-ext-grid-feature-groupstore: true; +$include-ext-grid-feature-grouping: true; +$include-ext-grid-feature-groupingsummary: true; +$include-ext-grid-feature-rowbody: true; +$include-ext-grid-feature-rowwrap: true; +$include-ext-grid-feature-summary: true; +$include-ext-grid-header-container: true; +$include-ext-grid-header-dragzone: true; +$include-ext-grid-header-dropzone: true; +$include-ext-grid-locking-headercontainer: true; +$include-ext-grid-locking-lockable: true; +$include-ext-grid-locking-view: true; +$include-ext-grid-plugin-bufferedrenderer: true; +$include-ext-grid-plugin-bufferedrenderertableview: true; +$include-ext-grid-plugin-bufferedrenderertreeview: true; +$include-ext-grid-plugin-cellediting: true; +$include-ext-grid-plugin-divrenderer: true; +$include-ext-grid-plugin-dragdrop: true; +$include-ext-grid-plugin-editing: true; +$include-ext-grid-plugin-headerreorderer: true; +$include-ext-grid-plugin-headerresizer: true; +$include-ext-grid-plugin-rowediting: true; +$include-ext-grid-plugin-rowexpander: true; +$include-ext-grid-property-grid: true; +$include-ext-grid-property-headercontainer: true; +$include-ext-grid-property-property: true; +$include-ext-grid-property-store: true; +$include-ext-layout-classlist: true; +$include-ext-layout-context: true; +$include-ext-layout-contextitem: true; +$include-ext-layout-layout: true; +$include-ext-layout-sizemodel: true; +$include-ext-layout-component-auto: true; +$include-ext-layout-component-body: true; +$include-ext-layout-component-boundlist: true; +$include-ext-layout-component-button: true; +$include-ext-layout-component-component: true; +$include-ext-layout-component-dock: true; +$include-ext-layout-component-draw: true; +$include-ext-layout-component-fieldset: true; +$include-ext-layout-component-progressbar: true; +$include-ext-layout-component-field-combobox: true; +$include-ext-layout-component-field-field: true; +$include-ext-layout-component-field-fieldcontainer: true; +$include-ext-layout-component-field-htmleditor: true; +$include-ext-layout-component-field-slider: true; +$include-ext-layout-component-field-text: true; +$include-ext-layout-component-field-textarea: true; +$include-ext-layout-component-field-trigger: true; +$include-ext-layout-container-absolute: true; +$include-ext-layout-container-accordion: true; +$include-ext-layout-container-anchor: true; +$include-ext-layout-container-auto: true; +$include-ext-layout-container-border: true; +$include-ext-layout-container-box: true; +$include-ext-layout-container-card: true; +$include-ext-layout-container-checkboxgroup: true; +$include-ext-layout-container-column: true; +$include-ext-layout-container-container: true; +$include-ext-layout-container-editor: true; +$include-ext-layout-container-fit: true; +$include-ext-layout-container-form: true; +$include-ext-layout-container-hbox: true; +$include-ext-layout-container-table: true; +$include-ext-layout-container-vbox: true; +$include-ext-layout-container-boxoverflow-menu: true; +$include-ext-layout-container-boxoverflow-none: true; +$include-ext-layout-container-boxoverflow-scroller: true; +$include-ext-menu-checkitem: true; +$include-ext-menu-colorpicker: true; +$include-ext-menu-datepicker: true; +$include-ext-menu-item: true; +$include-ext-menu-keynav: true; +$include-ext-menu-manager: true; +$include-ext-menu-menu: true; +$include-ext-menu-separator: true; +$include-ext-panel-abstractpanel: true; +$include-ext-panel-dd: true; +$include-ext-panel-header: true; +$include-ext-panel-panel: true; +$include-ext-panel-proxy: true; +$include-ext-panel-table: true; +$include-ext-panel-tool: true; +$include-ext-perf-accumulator: true; +$include-ext-perf-monitor: true; +$include-ext-picker-color: true; +$include-ext-picker-date: true; +$include-ext-picker-month: true; +$include-ext-picker-time: true; +$include-ext-resizer-bordersplitter: true; +$include-ext-resizer-bordersplittertracker: true; +$include-ext-resizer-handle: true; +$include-ext-resizer-resizetracker: true; +$include-ext-resizer-resizer: true; +$include-ext-resizer-splitter: true; +$include-ext-resizer-splittertracker: true; +$include-ext-rtl-abstractcomponent: true; +$include-ext-rtl-eventobjectimpl: true; +$include-ext-rtl-button-button: true; +$include-ext-rtl-dd-dd: true; +$include-ext-rtl-dom-element_anim: true; +$include-ext-rtl-dom-element_insertion: true; +$include-ext-rtl-dom-element_position: true; +$include-ext-rtl-dom-element_scroll: true; +$include-ext-rtl-dom-element_static: true; +$include-ext-rtl-dom-layer: true; +$include-ext-rtl-form-field-spinner: true; +$include-ext-rtl-form-field-trigger: true; +$include-ext-rtl-grid-roweditor: true; +$include-ext-rtl-grid-column-column: true; +$include-ext-rtl-grid-plugin-headerresizer: true; +$include-ext-rtl-grid-plugin-rowediting: true; +$include-ext-rtl-layout-contextitem: true; +$include-ext-rtl-layout-component-dock: true; +$include-ext-rtl-layout-component-field-text: true; +$include-ext-rtl-layout-component-field-trigger: true; +$include-ext-rtl-layout-container-absolute: true; +$include-ext-rtl-layout-container-box: true; +$include-ext-rtl-layout-container-column: true; +$include-ext-rtl-layout-container-hbox: true; +$include-ext-rtl-layout-container-vbox: true; +$include-ext-rtl-layout-container-boxoverflow-scroller: true; +$include-ext-rtl-panel-header: true; +$include-ext-rtl-panel-panel: true; +$include-ext-rtl-resizer-bordersplittertracker: true; +$include-ext-rtl-resizer-resizetracker: true; +$include-ext-rtl-resizer-splittertracker: true; +$include-ext-rtl-slider-multi: true; +$include-ext-rtl-tab-bar: true; +$include-ext-rtl-tree-column: true; +$include-ext-rtl-util-floating: true; +$include-ext-rtl-util-renderable: true; +$include-ext-rtl-view-table: true; +$include-ext-selection-cellmodel: true; +$include-ext-selection-checkboxmodel: true; +$include-ext-selection-dataviewmodel: true; +$include-ext-selection-model: true; +$include-ext-selection-rowmodel: true; +$include-ext-selection-treemodel: true; +$include-ext-slider-multi: true; +$include-ext-slider-single: true; +$include-ext-slider-thumb: true; +$include-ext-slider-tip: true; +$include-ext-state-cookieprovider: true; +$include-ext-state-localstorageprovider: true; +$include-ext-state-manager: true; +$include-ext-state-provider: true; +$include-ext-state-stateful: true; +$include-ext-tab-bar: true; +$include-ext-tab-panel: true; +$include-ext-tab-tab: true; +$include-ext-tip-quicktip: true; +$include-ext-tip-quicktipmanager: true; +$include-ext-tip-tip: true; +$include-ext-tip-tooltip: true; +$include-ext-toolbar-fill: true; +$include-ext-toolbar-item: true; +$include-ext-toolbar-paging: true; +$include-ext-toolbar-separator: true; +$include-ext-toolbar-spacer: true; +$include-ext-toolbar-textitem: true; +$include-ext-toolbar-toolbar: true; +$include-ext-tree-column: true; +$include-ext-tree-panel: true; +$include-ext-tree-view: true; +$include-ext-tree-viewdragzone: true; +$include-ext-tree-viewdropzone: true; +$include-ext-tree-plugin-treeviewdragdrop: true; +$include-ext-util-abstractmixedcollection: true; +$include-ext-util-animate: true; +$include-ext-util-bindable: true; +$include-ext-util-css: true; +$include-ext-util-clickrepeater: true; +$include-ext-util-componentdragger: true; +$include-ext-util-cookies: true; +$include-ext-util-elementcontainer: true; +$include-ext-util-event: true; +$include-ext-util-filter: true; +$include-ext-util-floating: true; +$include-ext-util-grouper: true; +$include-ext-util-hashmap: true; +$include-ext-util-history: true; +$include-ext-util-inflector: true; +$include-ext-util-keymap: true; +$include-ext-util-keynav: true; +$include-ext-util-lrucache: true; +$include-ext-util-memento: true; +$include-ext-util-mixedcollection: true; +$include-ext-util-observable: true; +$include-ext-util-offset: true; +$include-ext-util-point: true; +$include-ext-util-positionable: true; +$include-ext-util-protoelement: true; +$include-ext-util-queue: true; +$include-ext-util-region: true; +$include-ext-util-renderable: true; +$include-ext-util-sortable: true; +$include-ext-util-sorter: true; +$include-ext-util-taskmanager: true; +$include-ext-util-taskrunner: true; +$include-ext-util-textmetrics: true; +$include-ext-view-abstractview: true; +$include-ext-view-boundlist: true; +$include-ext-view-boundlistkeynav: true; +$include-ext-view-dragzone: true; +$include-ext-view-dropzone: true; +$include-ext-view-nodecache: true; +$include-ext-view-table: true; +$include-ext-view-tablelayout: true; +$include-ext-view-view: true; +$include-ext-window-messagebox: true; +$include-ext-window-window: true; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-base/sass/etc/all'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-classic/sass/etc/all'; +$relative-image-path-for-uis: 'images'; +@import '../sass/etc/all'; +$relative-image-path-for-uis: 'images'; +@import '../sass/var/Component'; +@import '../sass/var/ProgressBar'; +@import '../sass/var/button/Button'; +@import '../sass/var/toolbar/Toolbar'; +@import '../sass/var/panel/Panel'; +@import '../sass/var/tip/Tip'; +@import '../sass/var/container/ButtonGroup'; +@import '../sass/var/window/Window'; +@import '../sass/var/form/FieldSet'; +@import '../sass/var/view/BoundList'; +@import '../sass/var/picker/Date'; +@import '../sass/var/grid/column/Column'; +@import '../sass/var/layout/container/Accordion'; +@import '../sass/var/menu/Menu'; +@import '../sass/var/tab/Panel'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-classic/sass/var/Component'; +@import '../../ext-theme-classic/sass/var/LoadMask'; +@import '../../ext-theme-classic/sass/var/ProgressBar'; +@import '../../ext-theme-classic/sass/var/button/Button'; +@import '../../ext-theme-classic/sass/var/toolbar/Toolbar'; +@import '../../ext-theme-classic/sass/var/panel/Panel'; +@import '../../ext-theme-classic/sass/var/tip/Tip'; +@import '../../ext-theme-classic/sass/var/container/ButtonGroup'; +@import '../../ext-theme-classic/sass/var/window/Window'; +@import '../../ext-theme-classic/sass/var/form/Labelable'; +@import '../../ext-theme-classic/sass/var/form/field/Base'; +@import '../../ext-theme-classic/sass/var/window/MessageBox'; +@import '../../ext-theme-classic/sass/var/form/CheckboxGroup'; +@import '../../ext-theme-classic/sass/var/form/field/Trigger'; +@import '../../ext-theme-classic/sass/var/view/BoundList'; +@import '../../ext-theme-classic/sass/var/picker/Date'; +@import '../../ext-theme-classic/sass/var/picker/Color'; +@import '../../ext-theme-classic/sass/var/form/field/HtmlEditor'; +@import '../../ext-theme-classic/sass/var/panel/Table'; +@import '../../ext-theme-classic/sass/var/grid/header/Container'; +@import '../../ext-theme-classic/sass/var/grid/plugin/RowExpander'; +@import '../../ext-theme-classic/sass/var/grid/property/Grid'; +@import '../../ext-theme-classic/sass/var/layout/container/Accordion'; +@import '../../ext-theme-classic/sass/var/layout/container/Border'; +@import '../../ext-theme-classic/sass/var/menu/Menu'; +@import '../../ext-theme-classic/sass/var/panel/Tool'; +@import '../../ext-theme-classic/sass/var/resizer/Resizer'; +@import '../../ext-theme-classic/sass/var/slider/Multi'; +@import '../../ext-theme-classic/sass/var/tab/Panel'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-neutral/sass/var/Component'; +@import '../../ext-theme-neutral/sass/var/FocusManager'; +@import '../../ext-theme-neutral/sass/var/LoadMask'; +@import '../../ext-theme-neutral/sass/var/ProgressBar'; +@import '../../ext-theme-neutral/sass/var/button/Button'; +@import '../../ext-theme-neutral/sass/var/toolbar/Toolbar'; +@import '../../ext-theme-neutral/sass/var/panel/Header'; +@import '../../ext-theme-neutral/sass/var/panel/Panel'; +@import '../../ext-theme-neutral/sass/var/tip/Tip'; +@import '../../ext-theme-neutral/sass/var/container/ButtonGroup'; +@import '../../ext-theme-neutral/sass/var/window/Window'; +@import '../../ext-theme-neutral/sass/var/form/Labelable'; +@import '../../ext-theme-neutral/sass/var/form/field/Base'; +@import '../../ext-theme-neutral/sass/var/form/field/TextArea'; +@import '../../ext-theme-neutral/sass/var/form/field/Display'; +@import '../../ext-theme-neutral/sass/var/window/MessageBox'; +@import '../../ext-theme-neutral/sass/var/form/CheckboxGroup'; +@import '../../ext-theme-neutral/sass/var/form/FieldSet'; +@import '../../ext-theme-neutral/sass/var/form/field/Checkbox'; +@import '../../ext-theme-neutral/sass/var/form/field/Trigger'; +@import '../../ext-theme-neutral/sass/var/form/field/Spinner'; +@import '../../ext-theme-neutral/sass/var/toolbar/Paging'; +@import '../../ext-theme-neutral/sass/var/view/BoundList'; +@import '../../ext-theme-neutral/sass/var/picker/Date'; +@import '../../ext-theme-neutral/sass/var/picker/Color'; +@import '../../ext-theme-neutral/sass/var/form/field/HtmlEditor'; +@import '../../ext-theme-neutral/sass/var/form/field/Radio'; +@import '../../ext-theme-neutral/sass/var/panel/Table'; +@import '../../ext-theme-neutral/sass/var/grid/header/Container'; +@import '../../ext-theme-neutral/sass/var/grid/column/Column'; +@import '../../ext-theme-neutral/sass/var/grid/column/Action'; +@import '../../ext-theme-neutral/sass/var/grid/column/CheckColumn'; +@import '../../ext-theme-neutral/sass/var/grid/feature/Grouping'; +@import '../../ext-theme-neutral/sass/var/grid/feature/RowWrap'; +@import '../../ext-theme-neutral/sass/var/grid/plugin/Editing'; +@import '../../ext-theme-neutral/sass/var/grid/plugin/CellEditing'; +@import '../../ext-theme-neutral/sass/var/grid/plugin/RowEditing'; +@import '../../ext-theme-neutral/sass/var/grid/property/Grid'; +@import '../../ext-theme-neutral/sass/var/layout/container/Accordion'; +@import '../../ext-theme-neutral/sass/var/resizer/Splitter'; +@import '../../ext-theme-neutral/sass/var/layout/container/Border'; +@import '../../ext-theme-neutral/sass/var/menu/Menu'; +@import '../../ext-theme-neutral/sass/var/panel/Tool'; +@import '../../ext-theme-neutral/sass/var/slider/Multi'; +@import '../../ext-theme-neutral/sass/var/tab/Panel'; +@import '../../ext-theme-neutral/sass/var/tree/Panel'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-base/sass/var/Component'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-base/sass/src/rtl/util/Renderable'; +@import '../../ext-theme-base/sass/src/Component'; +@import '../../ext-theme-base/sass/src/layout/container/Container'; +@import '../../ext-theme-base/sass/src/LoadMask'; +@import '../../ext-theme-base/sass/src/ProgressBar'; +@import '../../ext-theme-base/sass/src/button/Button'; +@import '../../ext-theme-base/sass/src/layout/container/Box'; +@import '../../ext-theme-base/sass/src/toolbar/Toolbar'; +@import '../../ext-theme-base/sass/src/layout/component/Dock'; +@import '../../ext-theme-base/sass/src/panel/Header'; +@import '../../ext-theme-base/sass/src/dd/DD'; +@import '../../ext-theme-base/sass/src/dd/StatusProxy'; +@import '../../ext-theme-base/sass/src/panel/Panel'; +@import '../../ext-theme-base/sass/src/tip/Tip'; +@import '../../ext-theme-base/sass/src/layout/container/Table'; +@import '../../ext-theme-base/sass/src/container/ButtonGroup'; +@import '../../ext-theme-base/sass/src/container/Viewport'; +@import '../../ext-theme-base/sass/src/window/Window'; +@import '../../ext-theme-base/sass/src/form/Labelable'; +@import '../../ext-theme-base/sass/src/form/field/TextArea'; +@import '../../ext-theme-base/sass/src/form/CheckboxGroup'; +@import '../../ext-theme-base/sass/src/form/FieldSet'; +@import '../../ext-theme-base/sass/src/form/Panel'; +@import '../../ext-theme-base/sass/src/form/field/Checkbox'; +@import '../../ext-theme-base/sass/src/form/field/Trigger'; +@import '../../ext-theme-base/sass/src/form/field/Spinner'; +@import '../../ext-theme-base/sass/src/view/BoundList'; +@import '../../ext-theme-base/sass/src/picker/Date'; +@import '../../ext-theme-base/sass/src/form/field/File'; +@import '../../ext-theme-base/sass/src/form/field/Hidden'; +@import '../../ext-theme-base/sass/src/picker/Color'; +@import '../../ext-theme-base/sass/src/form/field/HtmlEditor'; +@import '../../ext-theme-base/sass/src/layout/container/Fit'; +@import '../../ext-theme-base/sass/src/panel/Table'; +@import '../../ext-theme-base/sass/src/layout/container/Absolute'; +@import '../../ext-theme-base/sass/src/resizer/Splitter'; +@import '../../ext-theme-base/sass/src/layout/container/Border'; +@import '../../ext-theme-base/sass/src/layout/container/Column'; +@import '../../ext-theme-base/sass/src/layout/container/Form'; +@import '../../ext-theme-base/sass/src/menu/Menu'; +@import '../../ext-theme-base/sass/src/resizer/SplitterTracker'; +@import '../../ext-theme-base/sass/src/slider/Multi'; +@import '../../ext-theme-base/sass/src/tab/Panel'; +@import '../../ext-theme-base/sass/src/draw/Component'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-neutral/sass/src/Component'; +@import '../../ext-theme-neutral/sass/src/Editor'; +@import '../../ext-theme-neutral/sass/src/FocusManager'; +@import '../../ext-theme-neutral/sass/src/LoadMask'; +@import '../../ext-theme-neutral/sass/src/ProgressBar'; +@import '../../ext-theme-neutral/sass/src/button/Button'; +@import '../../ext-theme-neutral/sass/src/toolbar/Toolbar'; +@import '../../ext-theme-neutral/sass/src/panel/Header'; +@import '../../ext-theme-neutral/sass/src/panel/Panel'; +@import '../../ext-theme-neutral/sass/src/tip/Tip'; +@import '../../ext-theme-neutral/sass/src/container/ButtonGroup'; +@import '../../ext-theme-neutral/sass/src/window/Window'; +@import '../../ext-theme-neutral/sass/src/form/Labelable'; +@import '../../ext-theme-neutral/sass/src/form/field/Base'; +@import '../../ext-theme-neutral/sass/src/form/field/Text'; +@import '../../ext-theme-neutral/sass/src/form/field/TextArea'; +@import '../../ext-theme-neutral/sass/src/form/field/Display'; +@import '../../ext-theme-neutral/sass/src/window/MessageBox'; +@import '../../ext-theme-neutral/sass/src/form/CheckboxGroup'; +@import '../../ext-theme-neutral/sass/src/form/FieldSet'; +@import '../../ext-theme-neutral/sass/src/form/field/Checkbox'; +@import '../../ext-theme-neutral/sass/src/form/field/Trigger'; +@import '../../ext-theme-neutral/sass/src/form/field/Spinner'; +@import '../../ext-theme-neutral/sass/src/toolbar/Paging'; +@import '../../ext-theme-neutral/sass/src/view/BoundList'; +@import '../../ext-theme-neutral/sass/src/picker/Date'; +@import '../../ext-theme-neutral/sass/src/form/field/Date'; +@import '../../ext-theme-neutral/sass/src/form/field/File'; +@import '../../ext-theme-neutral/sass/src/picker/Color'; +@import '../../ext-theme-neutral/sass/src/form/field/HtmlEditor'; +@import '../../ext-theme-neutral/sass/src/form/field/Radio'; +@import '../../ext-theme-neutral/sass/src/panel/Table'; +@import '../../ext-theme-neutral/sass/src/grid/header/DropZone'; +@import '../../ext-theme-neutral/sass/src/grid/header/Container'; +@import '../../ext-theme-neutral/sass/src/grid/column/Column'; +@import '../../ext-theme-neutral/sass/src/view/DropZone'; +@import '../../ext-theme-neutral/sass/src/grid/column/Action'; +@import '../../ext-theme-neutral/sass/src/grid/column/CheckColumn'; +@import '../../ext-theme-neutral/sass/src/grid/feature/Grouping'; +@import '../../ext-theme-neutral/sass/src/grid/feature/RowBody'; +@import '../../ext-theme-neutral/sass/src/grid/feature/RowWrap'; +@import '../../ext-theme-neutral/sass/src/grid/feature/Summary'; +@import '../../ext-theme-neutral/sass/src/grid/locking/Lockable'; +@import '../../ext-theme-neutral/sass/src/grid/plugin/Editing'; +@import '../../ext-theme-neutral/sass/src/grid/plugin/CellEditing'; +@import '../../ext-theme-neutral/sass/src/grid/plugin/RowEditing'; +@import '../../ext-theme-neutral/sass/src/grid/plugin/RowExpander'; +@import '../../ext-theme-neutral/sass/src/grid/property/Grid'; +@import '../../ext-theme-neutral/sass/src/layout/container/Accordion'; +@import '../../ext-theme-neutral/sass/src/resizer/Splitter'; +@import '../../ext-theme-neutral/sass/src/layout/container/Border'; +@import '../../ext-theme-neutral/sass/src/menu/Menu'; +@import '../../ext-theme-neutral/sass/src/panel/Tool'; +@import '../../ext-theme-neutral/sass/src/resizer/Resizer'; +@import '../../ext-theme-neutral/sass/src/slider/Multi'; +@import '../../ext-theme-neutral/sass/src/selection/CheckboxModel'; +@import '../../ext-theme-neutral/sass/src/tab/Panel'; +@import '../../ext-theme-neutral/sass/src/tree/Panel'; +@import '../../ext-theme-neutral/sass/src/tree/ViewDropZone'; +$relative-image-path-for-uis: 'images'; +@import '../../ext-theme-classic/sass/src/dom/Element'; +@import '../../ext-theme-classic/sass/src/toolbar/Toolbar'; +@import '../../ext-theme-classic/sass/src/window/MessageBox'; +@import '../../ext-theme-classic/sass/src/form/field/Trigger'; +@import '../../ext-theme-classic/sass/src/form/field/Spinner'; +@import '../../ext-theme-classic/sass/src/form/field/HtmlEditor'; +@import '../../ext-theme-classic/sass/src/grid/column/Column'; +@import '../../ext-theme-classic/sass/src/grid/plugin/Editing'; +@import '../../ext-theme-classic/sass/src/grid/plugin/RowEditing'; +@import '../../ext-theme-classic/sass/src/layout/container/Accordion'; +@import '../../ext-theme-classic/sass/src/resizer/Resizer'; +@import '../../ext-theme-classic/sass/src/slider/Multi'; +@import '../../ext-theme-classic/sass/src/tab/Panel'; diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-debug.js b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-debug.js new file mode 100644 index 000000000..17f917076 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-debug.js @@ -0,0 +1,20 @@ +/* +This file is part of Ext JS 4.2 + +Copyright (c) 2011-2013 Sencha Inc + +Contact: http://www.sencha.com/contact + +GNU General Public License Usage +This file may be used under the terms of the GNU General Public License version 3.0 as +published by the Free Software Foundation and appearing in the file LICENSE included in the +packaging of this file. + +Please review the following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you are unsure which license is appropriate for your use, please contact the sales department +at http://www.sencha.com/contact. + +Build date: 2013-03-11 22:33:40 (aed16176e68b5e8aa1433452b12805c0ad913836) +*/ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-dev.js b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-dev.js new file mode 100644 index 000000000..17f917076 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray-dev.js @@ -0,0 +1,20 @@ +/* +This file is part of Ext JS 4.2 + +Copyright (c) 2011-2013 Sencha Inc + +Contact: http://www.sencha.com/contact + +GNU General Public License Usage +This file may be used under the terms of the GNU General Public License version 3.0 as +published by the Free Software Foundation and appearing in the file LICENSE included in the +packaging of this file. + +Please review the following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you are unsure which license is appropriate for your use, please contact the sales department +at http://www.sencha.com/contact. + +Build date: 2013-03-11 22:33:40 (aed16176e68b5e8aa1433452b12805c0ad913836) +*/ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray.js b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray.js new file mode 100644 index 000000000..17f917076 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/ext-theme-gray.js @@ -0,0 +1,20 @@ +/* +This file is part of Ext JS 4.2 + +Copyright (c) 2011-2013 Sencha Inc + +Contact: http://www.sencha.com/contact + +GNU General Public License Usage +This file may be used under the terms of the GNU General Public License version 3.0 as +published by the Free Software Foundation and appearing in the file LICENSE included in the +packaging of this file. + +Please review the following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you are unsure which license is appropriate for your use, please contact the sales department +at http://www.sencha.com/contact. + +Build date: 2013-03-11 22:33:40 (aed16176e68b5e8aa1433452b12805c0ad913836) +*/ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/Readme.md new file mode 100644 index 000000000..04c60d5d1 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/Readme.md @@ -0,0 +1,3 @@ +# ext-theme-gray/resources + +This folder contains static resources (typically an `"images"` folder as well). diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/ext-theme-gray-all-debug.css b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/ext-theme-gray-all-debug.css new file mode 100644 index 000000000..04d930fe3 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/ext-theme-gray-all-debug.css @@ -0,0 +1,14556 @@ +/** + * @class Global_CSS + * + * Global CSS variables and mixins of Ext JS. + */ +/** + * Creates a background gradient. + * + * @param {Color} $bg-color The background color of the gradient + * @param {String/List} [$type] The type of gradient to be used. Can either + * be a String which is a predefined gradient, or it can can be a list of + * color_stops. If none is set, it will still set the `background-color` + * to the $background-color. + * @param {String} [$direction=top] The direction of the gradient. Can either be + * `top` or `left`. + * @member Global_CSS + */ +/* + * Method which inserts a full background-image property for a theme image. + * It checks if the file exists and if it doesn't, it'll throw an error. + * By default it will not include the background-image property if it is not found, + * but this can be changed by changing the default value of $include-missing-images to + * be true. + */ +/** + * @class Ext.Component + */ +/** + * @var {color} $color + * The default text color to be used throughout the theme. + */ +/** + * @var {string} $font-family + * The default font-family to be used throughout the theme. + */ +/** + * @var {string} $font-size + * The default font-family to be used throughout the theme. + */ +/** + * @var {string} $base-gradient + * The base gradient to be used throughout the theme. + */ +/** + * @var {color} $base-color + * The base color to be used throughout the theme. + */ +/** + * @var {color} $neutral-color + * The neutral color to be used throughout the theme. + */ +/** + * @var {color} $body-background-color + * Background color to apply to the body element + */ +/** + * @class Ext.button.Button + */ +/** + * @var {boolean} $button-include-ui-menu-arrows + * True to use a different image url for the menu button arrows for each button UI + */ +/** + * @var {boolean} $button-include-ui-split-arrows + * True to use a different image url for the split button arrows for each button UI + */ +/** + * @var {boolean} $button-include-split-over-arrows + * True to include different split arrows for buttons' hover state. + */ +/** + * @var {boolean} $button-toolbar-include-split-noline-arrows + * True to include "noline" split arrows for toolbar buttons in their default state. + */ +/** + * @var {number} $button-opacity-disabled + * opacity to apply to the button's main element when the buton is disabled + */ +/** + * @var {number} $button-inner-opacity-disabled + * opacity to apply to the button's inner elements (icon and text) when the buton is disabled + */ +/** + * @var {number} $button-toolbar-opacity-disabled + * opacity to apply to the toolbar button's main element when the buton is disabled + */ +/** + * @var {number} $button-toolbar-inner-opacity-disabled + * opacity to apply to the toolbar button's inner elements (icon and text) when the buton is disabled + */ +/** + * @class Ext.panel.Panel + */ +/** + * @var {$border-width-threshold} + * The maximum width a Panel's border can be before resizer handles are embedded into the borders using negative absolute positions. + * + * This defaults to 2, so that in the classic theme which uses 1 pixel borders, resize handles are in the content area + * within the border as they always have been. + * + * In the Neptune theme, the handles are embedded into the 5 pixel wide borders of any framed panel. + */ +/** + * @class Ext.form.Labelable + */ +/** + * @var {measurement} $form-error-icon-width + * Width for form error icons. + */ +/** + * @var {measurement} $form-error-icon-right-margin + * Margin for error icons that are aligned to the side of the field + */ +/** + * @var {measurement} $form-error-under-icon-spacing + * The space between the icon and the message for errors that display under the field + */ +/** + * @var {measurement} $form-error-under-padding + * The space between the icon and the message for errors that display under the field + */ +/** + * @var {measurement} $form-item-margin-bottom + * The bottom margin to apply to form items when in auto, anchor, vbox, or table layout + */ +/** + * @class Ext.form.field.Base + */ +/** + * @var {measurement} $form-field-height + * Height for form fields. + */ +/** + * @var {measurement} $form-toolbar-field-height + * Height for form fields in toolbar. + */ +/** + * @var {measurement} $form-field-padding + * Padding around form fields. + */ +/** + * @var {measurement} $form-field-font-size + * Font size for form fields. + */ +/** + * @var {font-family} $form-field-font-family + * Font family for form fields. + */ +/** + * @var {font-weight} $form-field-font-weight + * Font weight for form fields. + */ +/** + * @var {font} $form-field-font + * Font for form fields. + */ +/** + * @var {color} $form-field-color + * Text color for form fields. + */ +/** + * @var {color} $form-field-empty-color + * Text color for empty form fields. + */ +/** + * @var {color} $form-field-border-color + * Border color for form fields. + */ +/** + * @var {measurement} $form-field-border-width + * Border width for form fields. + */ +/** + * @var {string} $form-field-border-style + * Border style for form fields. + */ +/** + * @var {color} $form-field-focus-border-color + * Border color for focused form fields. + */ +/** + * @var {color} $form-field-invalid-border-color + * Border color for invalid form fields. + */ +/** + * @var {color} $form-field-background-color + * Background color for form fields. + */ +/** + * @var {string} $form-field-background-image + * Background image for form fields. + */ +/** + * @var {color} $form-field-invalid-background-color + * Background color for invalid form fields. + */ +/** + * @var {string} $form-field-invalid-background-image + * Background image for invalid form fields. + */ +/** + * @var {background-repeat} $form-field-invalid-background-repeat + * Background repeat for invalid form fields. + */ +/** + * @var {background-position} $form-field-invalid-background-position + * Background position for invalid form fields. + */ +/** + * @var {number} $form-field-disabled-opacity + */ +/** + * @class Ext.form.field.Display + */ +/** + * @var {font} $form-display-field-font + * Font for form display fields. + */ +/** + * @var {color} $form-display-field-color + * Text color for form display fields. + */ +/** + * @class Ext.form.FieldSet + */ +/** + * @var {string} $fieldset-collapse-tool-background-image + * The background-image to use for the collapse tool. If null the default tool + * sprite will be used. Defaults to null. + */ +/** + * @class Ext.form.field.Checkbox + */ +/** + * @var {measurement} $form-checkbox-label-spacing + * The space between the label and the checkbox. + */ +/** + * @var {measurement} $form-checkbox-vertical-position-adjust + * adjustment for vertical positioning of checkbox. An adjustment of a pixel or two may + * be needed to achieve the desired vertical alignment of the checkbox with the label in + * cetain combinations of field-height and checkbox height + */ +/** + * @class Ext.menu.Menu + */ +/** + * @var {color} $menu-glyph-color + * The color to use for menu icons configured using {@link Ext.menu.Item#glyph glyph} + */ +/** + * @class Ext.tab.Panel + */ +/** + * var {boolean} $tabbar-closable-icon-include-hover-background-position + * true to change the x postition of the close icon background image on hover to allow for a + * horizonatlly alined background image sprite + */ +/** + * var {boolean} $tabbar-closable-icon-include-pressed-background-position + * true to change the x postition of the close icon background image on click to allow for a + * horizonatlly alined background image sprite + */ +/** + * var {boolean} $tabbar-scroller-include-hover-background-position + * true to change the x postition of the background image on hover to allow for a + * horizonatlly alined background image sprite + */ +/** + * var {boolean} $tabbar-scroller-include-plain-icon + * true to include separate scroller icons for "plain" tabbars + */ +/** + * var {boolean} $tabbar-scroller-symmetrical-icons + * if true, the tabbar will use symmetrical scroller icons. Top and bottom tabbars + * will share icons, and Left and right will share icons. + */ +/** + * var {number} $tab-opacity-disabled + * opacity to apply to the tab's main element when the tab is disabled + */ +/** + * var {number} $tab-text-opacity-disabled + * opacity to apply to the tab's text element when the tab is disabled + */ +/** + * var {number} $tab-icon-opacity-disabled + * opacity to apply to the tab's icon element when the tab is disabled + */ +/** + * var {string} $tab-left-rotate-direction + * @private + * Has issues with IE + * The direction to rotate the contents of a left-aligned tab. `right` to rotate + * clockwise or `left` to rotate counterclockwise. Defaults to `left`. + */ +/** + * var {string} $tab-right-rotate-direction + * @private + * Has issues with IE + * The direction to rotate the contents of a right-aligned tab. `right` to rotate + * clockwise or `left` to rotate counterclockwise. Defaults to `right`. + */ +/** + * @class Ext.Component + */ +/** + * @var {string} $prefix + * The prefix to be applied to all CSS selectors. If this is changed, it must also be changed in your + * JavaScript application. + */ +/** + * @var {boolean/string} $relative-image-path-for-uis + * True to use a relative image path for all new UIs. If true, the path will be "../images/". + * It can also be a string of the path value. + * It defaults to false, which means it will look for the images in the ExtJS SDK folder. + */ +/** + * @var {boolean} $include-not-found-images + * True to include files which are not found when compiling your SASS + */ +/** + * @var {boolean} $include-ie + * True to include Internet Explorer specific rules + */ +/** + * @var {boolean} $include-ff + * True to include Firefox specific rules + */ +/** + * @var {boolean} $include-chrome + * True to include Chrome specific rules + */ +/** + * @var {boolean} $include-safari + * True to include Safari specific rules + */ +/** + * @var {boolean} $include-opera + * True to include Opera specific rules + */ +/** + * @var {boolean} $include-webkit + * True to include Webkit specific rules + */ +/** + * @var {boolean} $compile-all + * True to copile all CSS, even if above include rules are false + */ +/** + * @var {measurement} $css-shadow-border-radius + * The border radius for CSS shadows + */ +/** + * @var {color} $include-shadow-images + * True to include all shadow images. + */ +/** + * @var {boolean} $include-rtl + * True to include right-to-left styles + */ +/** + * @var {string} $image-extension + * default file extension to use for images (defaults to 'png'). + */ +/** + * @var {string} $slicer-image-extension + * default file extension to use for slicer images (defaults to 'gif'). + */ +/** + * Default search path for images + */ +/* line 1, ../../../ext-theme-base/sass/src/Component.scss */ +.x-body { + margin: 0; +} + +/* line 5, ../../../ext-theme-base/sass/src/Component.scss */ +img { + border: 0; +} + +/* line 10, ../../../ext-theme-base/sass/src/Component.scss */ +.x-border-box, +.x-border-box * { + box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +/* line 17, ../../../ext-theme-base/sass/src/Component.scss */ +.x-rtl { + direction: rtl; +} + +/* line 21, ../../../ext-theme-base/sass/src/Component.scss */ +.x-ltr { + direction: ltr; +} + +/* line 25, ../../../ext-theme-base/sass/src/Component.scss */ +.x-clear { + overflow: hidden; + clear: both; + font-size: 0; + line-height: 0; + display: table; +} + +/* line 33, ../../../ext-theme-base/sass/src/Component.scss */ +.x-strict .x-ie7 .x-clear { + height: 0; + width: 0; +} + +/* line 41, ../../../ext-theme-base/sass/src/Component.scss */ +.x-layer { + position: absolute !important; + overflow: hidden; + zoom: 1; +} + +/* line 49, ../../../ext-theme-base/sass/src/Component.scss */ +.x-fixed-layer { + position: fixed !important; + overflow: hidden; + zoom: 1; +} + +/* line 55, ../../../ext-theme-base/sass/src/Component.scss */ +.x-shim { + position: absolute; + left: 0; + top: 0; + overflow: hidden; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 63, ../../../ext-theme-base/sass/src/Component.scss */ +.x-hide-display { + display: none !important; +} + +/* line 67, ../../../ext-theme-base/sass/src/Component.scss */ +.x-hide-visibility { + visibility: hidden !important; +} + +/* line 72, ../../../ext-theme-base/sass/src/Component.scss */ +.x-ie6 .x-item-disabled { + filter: none; +} + +/* line 78, ../../../ext-theme-base/sass/src/Component.scss */ +.x-hidden, +.x-hide-offsets { + display: block !important; + visibility: hidden !important; + position: absolute !important; + top: -10000px !important; +} + +/* line 88, ../../../ext-theme-base/sass/src/Component.scss */ +.x-hide-nosize { + height: 0 !important; + width: 0 !important; +} + +/* line 93, ../../../ext-theme-base/sass/src/Component.scss */ +.x-masked-relative { + position: relative; +} + +/* line 99, ../../../ext-theme-base/sass/src/Component.scss */ +.x-ie-shadow { + background-color: #777; + display: none; + position: absolute; + overflow: hidden; + zoom: 1; +} + +/* line 108, ../../../ext-theme-base/sass/src/Component.scss */ +.x-unselectable { + user-select: none; + -o-user-select: none; + -ms-user-select: none; + -moz-user-select: -moz-none; + -webkit-user-select: none; + cursor: default; +} + +/* line 112, ../../../ext-theme-base/sass/src/Component.scss */ +.x-selectable { + cursor: auto; + -moz-user-select: text; + -webkit-user-select: text; + -ms-user-select: text; + user-select: text; + -o-user-select: text; +} + +/* line 127, ../../../ext-theme-base/sass/src/Component.scss */ +.x-list-plain { + list-style-type: none; + margin: 0; + padding: 0; +} + +/* line 134, ../../../ext-theme-base/sass/src/Component.scss */ +.x-table-plain { + border-collapse: collapse; + border-spacing: 0; + font-size: 1em; +} + +/* line 147, ../../../ext-theme-base/sass/src/Component.scss */ +.x-frame-tl, +.x-frame-tr, +.x-frame-tc, +.x-frame-bl, +.x-frame-br, +.x-frame-bc { + overflow: hidden; + background-repeat: no-repeat; +} + +/* line 153, ../../../ext-theme-base/sass/src/Component.scss */ +.x-frame-tc, +.x-frame-bc { + background-repeat: repeat-x; +} + +/* line 157, ../../../ext-theme-base/sass/src/Component.scss */ +.x-frame-mc { + background-repeat: repeat-x; + overflow: hidden; +} + +/* line 162, ../../../ext-theme-base/sass/src/Component.scss */ +.x-proxy-el { + position: absolute; + background: #b4b4b4; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + opacity: 0.8; +} + +/* line 169, ../../../ext-theme-base/sass/src/Component.scss */ +.x-css-shadow { + position: absolute; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; +} + +/* line 175, ../../../ext-theme-base/sass/src/Component.scss */ +.x-item-disabled, +.x-item-disabled * { + cursor: default; +} + +/* line 3, ../../../ext-theme-base/sass/src/layout/container/Container.scss */ +.x-box-item { + position: absolute !important; + left: 0; + top: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/LoadMask.scss */ +.x-mask { + z-index: 100; + position: absolute; + width: 100%; + height: 100%; + zoom: 1; +} + +/* line 10, ../../../ext-theme-base/sass/src/LoadMask.scss */ +.x-mask-shim { + z-index: 100; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* line 20, ../../../ext-theme-base/sass/src/LoadMask.scss */ +.x-mask-msg { + z-index: 20001; + position: absolute; +} + +/* line 1, ../../../ext-theme-base/sass/src/ProgressBar.scss */ +.x-progress { + position: relative; + border-style: solid; + overflow: hidden; +} + +/* line 7, ../../../ext-theme-base/sass/src/ProgressBar.scss */ +.x-progress-bar { + overflow: hidden; + position: absolute; + width: 0; + height: 100%; +} + +/* line 14, ../../../ext-theme-base/sass/src/ProgressBar.scss */ +.x-progress-text { + overflow: hidden; + position: absolute; +} + +/* line 1, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn { + display: inline-block; + position: relative; + zoom: 1; + *display: inline; + cursor: pointer; + white-space: nowrap; + vertical-align: middle; + text-decoration: none; +} + +/* line 15, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-wrap { + position: relative; +} + +/* line 19, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-button { + position: relative; + display: block; + text-decoration: none; + overflow: hidden; + outline: 0; + zoom: 1; +} + +/* line 28, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-inner { + display: block; + white-space: nowrap; + overflow: hidden; + zoom: 1; +} + +/* line 35, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-icon-el { + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + background-repeat: no-repeat; + text-align: center; +} + +/* line 45, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-inner-center { + text-align: center; +} + +/* line 49, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-inner-left { + text-align: left; +} + +/* line 59, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-inner-right { + text-align: right; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-layout-ct { + overflow: hidden; + zoom: 1; +} + +/* line 6, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-target { + position: absolute; + width: 20000px; + top: 0; + left: 0; + height: 1px; +} + +/* line 31, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-inner { + overflow: hidden; + zoom: 1; + position: relative; + left: 0; + top: 0; +} + +/* line 41, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-horizontal-box-overflow-body { + float: left; +} + +/* line 45, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-scroller { + position: relative; + background-repeat: no-repeat; +} + +/* line 51, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-scroller-left, +.x-box-scroller-right { + float: left; + height: 100%; + z-index: 5; +} + +/* line 59, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-scroller-top .x-box-scroller, +.x-box-scroller-bottom .x-box-scroller { + line-height: 0; + font-size: 0; + background-position: center 0; +} + +/* line 66, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-menu-after { + float: right; +} + +/* line 1, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-text { + white-space: nowrap; +} + +/* line 5, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-separator { + display: block; + font-size: 1px; + overflow: hidden; + cursor: default; + border: 0; + width: 0; + height: 0; + line-height: 0px; +} + +/* line 17, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-quirks .x-ie .x-toolbar .x-toolbar-separator-horizontal { + width: 2px; +} + +/* line 22, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroller { + padding-left: 0; +} + +/* line 29, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-plain { + border: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked { + position: absolute !important; + z-index: 1; +} + +/* line 7, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-vertical { + position: static; +} + +/* line 11, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-top { + border-bottom-width: 0 !important; +} + +/* line 15, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-bottom { + border-top-width: 0 !important; +} + +/* line 19, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-left { + border-right-width: 0 !important; +} + +/* line 23, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-right { + border-left-width: 0 !important; +} + +/* line 27, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-noborder-top { + border-top-width: 0 !important; +} + +/* line 31, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-noborder-right { + border-right-width: 0 !important; +} + +/* line 35, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-noborder-bottom { + border-bottom-width: 0 !important; +} + +/* line 39, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-noborder-left { + border-left-width: 0 !important; +} + +/* line 45, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-l { + border-left-width: 0 !important; +} + +/* line 48, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-b { + border-bottom-width: 0 !important; +} + +/* line 51, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-bl { + border-bottom-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 55, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-r { + border-right-width: 0 !important; +} + +/* line 58, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-rl { + border-right-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 62, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-rb { + border-right-width: 0 !important; + border-bottom-width: 0 !important; +} + +/* line 66, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-rbl { + border-right-width: 0 !important; + border-bottom-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 71, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-t { + border-top-width: 0 !important; +} + +/* line 74, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-tl { + border-top-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 78, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-tb { + border-top-width: 0 !important; + border-bottom-width: 0 !important; +} + +/* line 82, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-tbl { + border-top-width: 0 !important; + border-bottom-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 87, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-tr { + border-top-width: 0 !important; + border-right-width: 0 !important; +} + +/* line 91, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-trl { + border-top-width: 0 !important; + border-right-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 96, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-trb { + border-top-width: 0 !important; + border-right-width: 0 !important; + border-bottom-width: 0 !important; +} + +/* line 101, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-trbl { + border-width: 0 !important; +} + +/* line 1, ../../../ext-theme-base/sass/src/panel/Header.scss */ +.x-header-icon { + background-repeat: no-repeat; + background-position: 0 0; + vertical-align: middle; + text-align: center; +} + +/* line 8, ../../../ext-theme-base/sass/src/panel/Header.scss */ +.x-header-text-container { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} + +/* line 4, ../../../ext-theme-base/sass/src/dd/DD.scss */ +.x-dd-drag-proxy, +.x-dd-drag-current { + z-index: 1000000!important; + pointer-events: none; +} + +/* line 2, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drag-repair .x-dd-drag-ghost { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); + opacity: 0.6; +} +/* line 6, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drag-repair .x-dd-drop-icon { + display: none; +} + +/* line 11, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drag-ghost { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85); + opacity: 0.85; + padding: 5px; + padding-left: 20px; + white-space: nowrap; + color: #000; + font: normal 11px tahoma, arial, verdana, sans-serif; + border: 1px solid; + border-color: #ddd #bbb #bbb #ddd; + background-color: #fff; +} + +/* line 28, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drop-icon { + position: absolute; + top: 3px; + left: 3px; + display: block; + width: 16px; + height: 16px; + background-color: transparent; + background-position: center; + background-repeat: no-repeat; + z-index: 1; +} + +/* line 66, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drop-ok .x-dd-drop-icon { + background-image: url(images/dd/drop-yes.gif); +} + +/* line 70, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drop-ok-add .x-dd-drop-icon { + background-image: url(images/dd/drop-add.gif); +} + +/* line 75, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drop-nodrop div.x-dd-drop-icon { + background-image: url(images/dd/drop-no.gif); +} + +/* line 2, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-panel, +.x-plain { + overflow: hidden; + position: relative; +} + +/* line 7, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-panel { + outline: none; +} + +/* line 23, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-ie .x-panel-header, +.x-ie .x-panel-header-tl, +.x-ie .x-panel-header-tc, +.x-ie .x-panel-header-tr, +.x-ie .x-panel-header-ml, +.x-ie .x-panel-header-mc, +.x-ie .x-panel-header-mr, +.x-ie .x-panel-header-bl, +.x-ie .x-panel-header-bc, +.x-ie .x-panel-header-br { + zoom: 1; +} + +/* line 29, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-ie8 td.x-frame-mc { + vertical-align: top; +} + +/* line 35, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-panel-body { + overflow: hidden; + position: relative; +} + +/* line 42, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-vertical .x-frame-mc { + background-repeat: repeat-y; +} + +/* line 49, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-panel-header-plain, +.x-panel-body-plain { + border: 0; + padding: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/tip/Tip.scss */ +.x-tip { + position: absolute; + overflow: visible; + /*pointer needs to be able to stick out*/ +} + +/* line 6, ../../../ext-theme-base/sass/src/tip/Tip.scss */ +.x-tip-body { + overflow: hidden; + position: relative; +} + +/* line 11, ../../../ext-theme-base/sass/src/tip/Tip.scss */ +.x-tip-anchor { + position: absolute; + overflow: hidden; + border-style: solid; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Table.scss */ +.x-table-layout { + font-size: 1em; +} + +/* line 1, ../../../ext-theme-base/sass/src/container/ButtonGroup.scss */ +.x-btn-group { + position: relative; + overflow: hidden; +} + +/* line 6, ../../../ext-theme-base/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body { + position: relative; + zoom: 1; +} +/* line 9, ../../../ext-theme-base/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body .x-table-layout-cell { + vertical-align: top; +} + +/* line 1, ../../../ext-theme-base/sass/src/container/Viewport.scss */ +.x-viewport, .x-viewport body { + margin: 0; + padding: 0; + border: 0 none; + overflow: hidden; + height: 100%; + position: static; +} + +/* line 1, ../../../ext-theme-base/sass/src/window/Window.scss */ +.x-window { + outline: none; + overflow: hidden; +} +/* line 5, ../../../ext-theme-base/sass/src/window/Window.scss */ +.x-window .x-window-wrap { + position: relative; +} + +/* line 10, ../../../ext-theme-base/sass/src/window/Window.scss */ +.x-window-body { + position: relative; + overflow: hidden; +} + +/* line 15, ../../../ext-theme-base/sass/src/window/Window.scss */ +.x-window-body-plain { + background: transparent; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-item-label { + display: block; +} + +/* line 5, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-item-label-right { + text-align: right; +} + +/* line 9, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-item-label-top { + display: block; + zoom: 1; +} + +/* line 15, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-invalid-icon { + overflow: hidden; +} +/* line 17, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-invalid-icon ul { + display: none; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/TextArea.scss */ +.x-form-textarea { + overflow: auto; + resize: none; +} +/* line 5, ../../../ext-theme-base/sass/src/form/field/TextArea.scss */ +.x-safari.x-mac .x-form-textarea { + margin-bottom: -2px; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/CheckboxGroup.scss */ +table.x-form-checkboxgroup { + margin: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset { + display: block; + /* preserve margins in IE */ + position: relative; +} + +/* line 6, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header { + overflow: hidden; +} +/* line 10, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-form-item, +.x-fieldset-header .x-tool { + float: left; +} +/* line 14, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-form-cb-wrap { + font-size: 0; + line-height: 0; +} +/* line 19, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-form-cb { + margin: 0; +} + +/* line 33, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header-text { + float: left; +} + +/*misc*/ +/* line 4, ../../../ext-theme-base/sass/src/form/Panel.scss */ +.x-webkit *:focus { + outline: none !important; +} + +/* line 11, ../../../ext-theme-base/sass/src/form/Panel.scss */ +.x-form-item { + vertical-align: top; + table-layout: fixed; +} + +/* line 17, ../../../ext-theme-base/sass/src/form/Panel.scss */ +.x-form-item-body { + position: relative; +} + +/* line 22, ../../../ext-theme-base/sass/src/form/Panel.scss */ +.x-form-form-item td { + border-top: 1px solid transparent; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/Checkbox.scss */ +.x-form-cb { + vertical-align: top; + overflow: hidden; + padding: 0; + border: 0; +} +/* line 6, ../../../ext-theme-base/sass/src/form/field/Checkbox.scss */ +.x-form-cb::-moz-focus-inner { + padding: 0; + border: 0; +} + +/* line 13, ../../../ext-theme-base/sass/src/form/field/Checkbox.scss */ +.x-form-cb-label { + zoom: 1; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/Trigger.scss */ +.x-form-trigger { + cursor: pointer; + overflow: hidden; + background-repeat: no-repeat; +} +/* line 5, ../../../ext-theme-base/sass/src/form/field/Trigger.scss */ +.x-item-disabled .x-form-trigger { + cursor: default; +} + +/* line 10, ../../../ext-theme-base/sass/src/form/field/Trigger.scss */ +.x-trigger-noedit { + cursor: default; +} + +/* line 14, ../../../ext-theme-base/sass/src/form/field/Trigger.scss */ +.x-form-trigger-wrap { + vertical-align: top; +} + +/* line 2, ../../../ext-theme-base/sass/src/form/field/Spinner.scss */ +.x-form-spinner-up, +.x-form-spinner-down { + font-size: 0; + /*for IE*/ + border-bottom: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker { + position: relative; +} + +/* line 5, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-inner { + table-layout: fixed; + width: 100%; + border-collapse: separate; +} + +/* line 11, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-cell { + padding: 0; +} + +/* line 15, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-header { + position: relative; + zoom: 1; +} + +/* line 20, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-arrow { + position: absolute; + outline: none; + font-size: 0; +} + +/* line 26, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-column-header { + padding: 0; +} + +/* line 30, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-date { + display: block; + zoom: 1; + text-decoration: none; +} + +/* line 36, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker { + position: absolute; + left: 0; + top: 0; +} + +/* line 42, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-body { + height: 100%; +} + +/* line 47, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-months, +.x-monthpicker-years { + float: left; + height: 100%; +} + +/* line 52, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-item { + float: left; +} + +/* line 56, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-item-inner { + display: block; + text-decoration: none; +} + +/* line 61, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-button-ct { + float: left; + text-align: center; +} + +/* line 66, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-button { + display: inline-block; + outline: none; + font-size: 0; +} + +/* line 72, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-buttons { + position: absolute; + bottom: 0; + width: 100%; +} +/* line 78, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-strict .x-ie6 .x-monthpicker-buttons { + bottom: -1px; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/File.scss */ +.x-form-file-wrap .x-form-file-input { + position: absolute; + top: -4px; + right: -2px; + height: 30px; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + /* Yes, there's actually a good reason for this... + * If the configured buttonText is set to something longer than the default, + * then it will quickly exceed the width of the hidden file input's "Browse..." + * button, so part of the custom button's clickable area will be covered by + * the hidden file input's text box instead. This results in a text-selection + * mouse cursor over that part of the button, at least in Firefox, which is + * confusing to a user. Giving the hidden file input a huge font-size makes + * the native button part very large so it will cover the whole clickable area. + */ + font-size: 100px; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/Hidden.scss */ +.x-form-item-hidden { + margin: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/picker/Color.scss */ +.x-color-picker-item { + float: left; + text-decoration: none; +} + +/* line 6, ../../../ext-theme-base/sass/src/picker/Color.scss */ +.x-color-picker-item-inner { + display: block; + font-size: 1px; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-toolbar { + position: static !important; +} + +/* line 5, ../../../ext-theme-base/sass/src/form/field/HtmlEditor.scss */ +.x-htmleditor-iframe { + display: block; + overflow: auto; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Fit.scss */ +.x-fit-item { + position: relative; +} + +/* line 1, ../../../ext-theme-base/sass/src/panel/Table.scss */ +.x-grid-row { + outline: none; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Absolute.scss */ +.x-abs-layout-ct { + position: relative; +} + +/* line 5, ../../../ext-theme-base/sass/src/layout/container/Absolute.scss */ +.x-abs-layout-item { + position: absolute !important; +} + +/* line 1, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter { + font-size: 1px; +} + +/* line 5, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter-horizontal { + cursor: e-resize; + cursor: row-resize; +} + +/* line 10, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter-vertical { + cursor: e-resize; + cursor: col-resize; +} + +/* line 17, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed, +.x-splitter-horizontal-noresize, +.x-splitter-vertical-noresize { + cursor: default; +} + +/* line 21, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter-active { + z-index: 4; +} + +/* line 25, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-collapse-el { + position: absolute; + background-repeat: no-repeat; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Border.scss */ +.x-border-layout-ct { + overflow: hidden; + zoom: 1; +} + +/* line 6, ../../../ext-theme-base/sass/src/layout/container/Border.scss */ +.x-border-layout-ct { + position: relative; +} + +/* line 10, ../../../ext-theme-base/sass/src/layout/container/Border.scss */ +.x-border-region-slide-in { + z-index: 5; +} + +/* line 14, ../../../ext-theme-base/sass/src/layout/container/Border.scss */ +.x-region-collapsed-placeholder { + z-index: 4; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Column.scss */ +.x-column { + float: left; +} + +/* line 21, ../../../ext-theme-base/sass/src/layout/container/Column.scss */ +.x-ie6 .x-column { + display: inline; + /*prevent IE6 double-margin bug*/ +} + +/* line 25, ../../../ext-theme-base/sass/src/layout/container/Column.scss */ +.x-quirks .x-ie .x-form-layout-table, .x-quirks .x-ie .x-form-layout-table tbody tr.x-form-item { + position: relative; +} + +/* line 2, ../../../ext-theme-base/sass/src/layout/container/Form.scss */ +.x-form-layout-table { + border-collapse: separate; + border-spacing: 0 2px; +} + +/* line 9, ../../../ext-theme-base/sass/src/layout/container/Form.scss */ +.x-ie6 .x-form-layout-table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu { + outline: none; +} + +/* line 5, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item { + white-space: nowrap; + overflow: hidden; +} + +/* line 14, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item-cmp .x-field-label-cell { + vertical-align: middle; +} + +/* line 22, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-icon-separator { + position: absolute; + top: 0px; + z-index: 0; + height: 100%; + overflow: hidden; +} +/* line 28, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-plain .x-menu-icon-separator { + display: none; +} + +/* line 33, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item-link { + text-decoration: none; + outline: 0; + zoom: 1; +} + +/* line 40, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item-text { + zoom: 1; +} + +/* line 47, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item-icon, +.x-menu-item-icon-right, +.x-menu-item-arrow { + position: absolute; + text-align: center; +} + +/* line 1, ../../../ext-theme-base/sass/src/resizer/SplitterTracker.scss */ +.x-resizable-overlay { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + display: none; + z-index: 200000; + background-color: #fff; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider { + outline: none; + zoom: 1; + position: relative; +} + +/* line 9, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-inner { + position: relative; + left: 0; + top: 0; + overflow: visible; + zoom: 1; +} +/* line 17, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-inner { + background: repeat-y 0 0; +} + +/* line 23, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-end { + zoom: 1; +} + +/* line 28, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-thumb { + position: absolute; + background: no-repeat 0 0; +} +/* line 31, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-thumb { + left: 0; +} +/* line 34, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-thumb { + bottom: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab { + display: block; + white-space: nowrap; + z-index: 1; +} + +/* line 7, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-active { + z-index: 3; +} + +/* line 11, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-wrap { + display: block; + position: relative; +} + +/* line 16, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-button { + zoom: 1; + display: block; + outline: none; +} + +/* line 22, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-inner { + display: block; + text-align: center; + white-space: nowrap; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + overflow: hidden; + zoom: 1; +} + +/* line 32, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-btn-icon-el { + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + background-repeat: no-repeat; + text-align: center; +} + +/* line 42, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar { + z-index: 1; +} + +/* line 46, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-body { + z-index: 2; + position: relative; +} + +/* line 51, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip { + position: absolute; + line-height: 0; + font-size: 0; + z-index: 1; +} + +/* line 58, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-horizontal .x-tab-bar-strip { + width: 100%; + left: 0; +} + +/* line 63, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-vertical .x-tab-bar-strip { + height: 100%; + top: 0; +} + +/* line 68, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-top { + bottom: 0; +} + +/* line 72, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-bottom { + top: 0; +} + +/* line 76, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-left { + right: 0; +} + +/* line 87, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-right { + left: 0; +} + +/* line 98, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-plain { + background: transparent !important; +} + +/* line 102, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-icon-el { + position: absolute; + background-repeat: no-repeat; + top: 0; + left: 0; + right: auto; + bottom: 0; +} + +/* line 118, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-close-btn { + position: absolute; + font-size: 0; + line-height: 0; + background: no-repeat; +} + +/* line 125, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-mc { + overflow: visible; +} + +/* line 1, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-surface { + display: -moz-inline-stack; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; + overflow: hidden; +} + +/* line 6, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.rvml { + behavior: url(#default#VML); +} + +/* line 10, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-surface tspan { + user-select: none; + -o-user-select: none; + -ms-user-select: none; + -moz-user-select: -moz-none; + -webkit-user-select: none; + cursor: default; +} + +/* line 14, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-sprite { + position: absolute; + left: 0; + top: 0; + width: 1px; + height: 1px; +} + +/* line 22, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-group { + position: absolute; + left: 0; + top: 0; + width: 1000px; + height: 1000px; +} + +/* line 30, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-measure-span { + position: absolute; + left: -9999em; + top: -9999em; + padding: 0; + margin: 0; + display: inline; +} + +/* line 39, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-base { + position: relative; + top: 0; + left: 0; + overflow: hidden; + display: inline-block; +} + +/* line 47, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-base { + position: relative; + top: 0; + left: 0; + overflow: hidden; + display: inline-block; +} + +/* line 55, ../../../ext-theme-base/sass/src/draw/Component.scss */ +svg, vml { + overflow: hidden; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/Component.scss */ +.x-body { + color: black; + font-size: 12px; + font-family: tahoma, arial, verdana, sans-serif; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/Component.scss */ +.x-animating-size, +.x-collapsed { + overflow: hidden!important; +} + +/* line 2, ../../../ext-theme-neutral/sass/src/Editor.scss */ +.x-editor .x-form-item-body { + padding-bottom: 0; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-element { + position: absolute; + top: -10px; + left: -10px; + width: 0px; + height: 0px; +} + +/* line 9, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-frame { + position: absolute; + left: 0px; + top: 0px; + z-index: 100000000; + width: 0px; + height: 0px; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-frame-top, +.x-focus-frame-bottom, +.x-focus-frame-left, +.x-focus-frame-right { + position: absolute; + top: 0px; + left: 0px; +} + +/* line 28, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-frame-top, +.x-focus-frame-bottom { + border-top: solid 2px #15428b; + height: 2px; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-frame-left, +.x-focus-frame-right { + border-left: solid 2px #15428b; + width: 2px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/LoadMask.scss */ +.x-mask { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + background: #cccccc; +} + +/* line 9, ../../../ext-theme-neutral/sass/src/LoadMask.scss */ +.x-mask-msg { + padding: 2px; + border-style: solid; + border-width: 1px; + border-color: #bcb0b0; + background-image: none; + background-color: #e0e0e0; +} + +/* line 29, ../../../ext-theme-neutral/sass/src/LoadMask.scss */ +.x-mask-msg-inner { + padding: 0 5px; + border-style: solid; + border-width: 1px; + border-color: #b3b3b3; + background-color: #eeeeee; + color: #222222; + font: normal 11px tahoma, arial, verdana, sans-serif; +} + +/* line 41, ../../../ext-theme-neutral/sass/src/LoadMask.scss */ +.x-mask-msg-text { + padding: 5px 5px 5px 20px; + background-image: url(images/grid/loading.gif); + background-repeat: no-repeat; + background-position: 0 center; +} + +/** + * Creates a visual theme for an Ext.ProgressBar + * @member Ext.ProgressBar + */ +/* line 24, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-progress-default { + background-color: #f1f1f1; + border-width: 1px; + height: 20px; + border-color: #8e8e8e; + /**/ + /**/ + /* */ +} +/* line 29, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-strict .x-ie7m .x-progress-default { + height: 18px; +} +/* line 41, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-progress-default .x-progress-bar-default { + background-image: none; + background-color: #ababab; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d1d1d1), color-stop(50%, #b8b8b8), color-stop(51%, #ababab), color-stop(100%, #9e9e9e)); + background-image: -webkit-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); + background-image: -moz-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); + background-image: -o-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); + background-image: linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); +} +/* line 49, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-nlg .x-progress-default .x-progress-bar-default { + background: repeat-x; + background-image: url(images/progress/progress-default-bg.gif); +} +/* line 56, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-progress-default .x-progress-text { + color: white; + font-weight: bold; + font-size: 11px; + text-align: center; + line-height: 18px; +} +/* line 64, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-progress-default .x-progress-text-back { + color: #5d5d5d; + line-height: 18px; +} +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-progress-default .x-progress-bar-default:after { + display: none; + content: "x-slicer:bg:url(images/progress/progress-default-bg.gif)"; +} + +/** + * Creates a visual theme of an Ext.Button + * @member Ext.button.Button + */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small { + border-color: #bbbbbb; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 2px 2px 2px 2px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #f8f8f8; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); + background-image: -moz-linear-gradient(top, #ffffff, #eeeeee); + background-image: -o-linear-gradient(top, #ffffff, #eeeeee); + background-image: linear-gradient(top, #ffffff, #eeeeee); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-mc { + background-image: url(images/btn/btn-default-small-fbg.gif); + background-position: 0 top; + background-color: #f8f8f8; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-btn-default-small { + background-image: url(images/btn/btn-default-small-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-small { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-small { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tr, +.x-btn-default-small-br, +.x-btn-default-small-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tl, +.x-btn-default-small-bl, +.x-btn-default-small-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tl, +.x-btn-default-small-bl, +.x-btn-default-small-tr, +.x-btn-default-small-br, +.x-btn-default-small-tc, +.x-btn-default-small-bc, +.x-btn-default-small-ml, +.x-btn-default-small-mr { + zoom: 1; + background-image: url(images/btn/btn-default-small-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-ml, +.x-btn-default-small-mr { + zoom: 1; + background-image: url(images/btn/btn-default-small-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-small-tl, +.x-strict .x-ie7 .x-btn-default-small-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-small-fbg.gif), bg:url(images/btn/btn-default-small-bg.gif), corners:url(images/btn/btn-default-small-corners.gif), sides:url(images/btn/btn-default-small-sides.gif)"; +} + +/**/ +/* */ +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 4px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-arrow-right { + padding-right: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-glyph { + font-size: 16px; + line-height: 16px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-small .x-btn-glyph { + color: #959595; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: #ececec; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #e2e2e2)); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -moz-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -o-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: linear-gradient(top, #f4f4f4, #e2e2e2); +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-button, +.x-btn-default-small-noicon .x-btn-button { + height: 16px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-inner, +.x-btn-default-small-noicon .x-btn-inner { + line-height: 16px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-small-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-small-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-inner { + width: 16px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-icon-el { + width: 16px; + height: 16px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-left .x-btn-button { + height: 16px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-left .x-btn-inner { + line-height: 16px; + padding-left: 20px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-left .x-btn-icon-el { + width: 16px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-small-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-small-icon-text-left .x-btn-icon-el { + height: 16px; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-right .x-btn-button { + height: 16px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-right .x-btn-inner { + line-height: 16px; + padding-right: 20px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-right .x-btn-icon-el { + width: 16px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-small-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-small-icon-text-right .x-btn-icon-el { + height: 16px; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-top .x-btn-inner { + padding-top: 20px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-top .x-btn-icon-el { + height: 16px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-small-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-small-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-bottom .x-btn-inner { + padding-bottom: 20px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-bottom .x-btn-icon-el { + height: 16px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-small-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-small-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-menu-active, +.x-btn-default-small-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: linear-gradient(top, #c7c7c7, #e0e0e0); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-frame-tl, +.x-btn-default-small-over .x-frame-bl, +.x-btn-default-small-over .x-frame-tr, +.x-btn-default-small-over .x-frame-br, +.x-btn-default-small-over .x-frame-tc, +.x-btn-default-small-over .x-frame-bc { + background-image: url(images/btn/btn-default-small-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-frame-ml, +.x-btn-default-small-over .x-frame-mr { + background-image: url(images/btn/btn-default-small-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-small-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-focus .x-frame-tl, +.x-btn-default-small-focus .x-frame-bl, +.x-btn-default-small-focus .x-frame-tr, +.x-btn-default-small-focus .x-frame-br, +.x-btn-default-small-focus .x-frame-tc, +.x-btn-default-small-focus .x-frame-bc { + background-image: url(images/btn/btn-default-small-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-focus .x-frame-ml, +.x-btn-default-small-focus .x-frame-mr { + background-image: url(images/btn/btn-default-small-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-small-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-menu-active .x-frame-tl, +.x-btn-default-small-menu-active .x-frame-bl, +.x-btn-default-small-menu-active .x-frame-tr, +.x-btn-default-small-menu-active .x-frame-br, +.x-btn-default-small-menu-active .x-frame-tc, +.x-btn-default-small-menu-active .x-frame-bc, +.x-btn-default-small-pressed .x-frame-tl, +.x-btn-default-small-pressed .x-frame-bl, +.x-btn-default-small-pressed .x-frame-tr, +.x-btn-default-small-pressed .x-frame-br, +.x-btn-default-small-pressed .x-frame-tc, +.x-btn-default-small-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-small-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-menu-active .x-frame-ml, +.x-btn-default-small-menu-active .x-frame-mr, +.x-btn-default-small-pressed .x-frame-ml, +.x-btn-default-small-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-small-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-menu-active .x-frame-mc, +.x-btn-default-small-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-small-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled .x-frame-tl, +.x-btn-default-small-disabled .x-frame-bl, +.x-btn-default-small-disabled .x-frame-tr, +.x-btn-default-small-disabled .x-frame-br, +.x-btn-default-small-disabled .x-frame-tc, +.x-btn-default-small-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-small-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled .x-frame-ml, +.x-btn-default-small-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-small-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled .x-frame-mc { + background-color: #ececec; + background-image: url(images/btn/btn-default-small-disabled-fbg.gif); +} + +/* line 484, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-bg.gif); +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small-menu-active, +.x-nlg .x-btn-default-small-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-pressed-bg.gif); +} + +/* line 521, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small-disabled { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-disabled-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-split-right { + background-image: url(images/button/s-arrow.gif); + padding-right: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 585, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled .x-btn-inner, +.x-btn-default-small-disabled .x-btn-icon-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-over-corners.gif), sides:url(images/btn/btn-default-small-over-sides.gif), frame-bg:url(images/btn/btn-default-small-over-fbg.gif), bg:url(images/btn/btn-default-small-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-focus-corners.gif), sides:url(images/btn/btn-default-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-small-focus-fbg.gif), bg:url(images/btn/btn-default-small-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-pressed-corners.gif), sides:url(images/btn/btn-default-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-small-pressed-fbg.gif), bg:url(images/btn/btn-default-small-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-disabled-corners.gif), sides:url(images/btn/btn-default-small-disabled-sides.gif), frame-bg:url(images/btn/btn-default-small-disabled-fbg.gif), bg:url(images/btn/btn-default-small-disabled-bg.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium { + border-color: #bbbbbb; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 3px 3px 3px 3px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #f8f8f8; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); + background-image: -moz-linear-gradient(top, #ffffff, #eeeeee); + background-image: -o-linear-gradient(top, #ffffff, #eeeeee); + background-image: linear-gradient(top, #ffffff, #eeeeee); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-mc { + background-image: url(images/btn/btn-default-medium-fbg.gif); + background-position: 0 top; + background-color: #f8f8f8; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-btn-default-medium { + background-image: url(images/btn/btn-default-medium-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-medium { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-medium { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tr, +.x-btn-default-medium-br, +.x-btn-default-medium-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tl, +.x-btn-default-medium-bl, +.x-btn-default-medium-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tl, +.x-btn-default-medium-bl, +.x-btn-default-medium-tr, +.x-btn-default-medium-br, +.x-btn-default-medium-tc, +.x-btn-default-medium-bc, +.x-btn-default-medium-ml, +.x-btn-default-medium-mr { + zoom: 1; + background-image: url(images/btn/btn-default-medium-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-ml, +.x-btn-default-medium-mr { + zoom: 1; + background-image: url(images/btn/btn-default-medium-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-medium-tl, +.x-strict .x-ie7 .x-btn-default-medium-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-medium-fbg.gif), bg:url(images/btn/btn-default-medium-bg.gif), corners:url(images/btn/btn-default-medium-corners.gif), sides:url(images/btn/btn-default-medium-sides.gif)"; +} + +/**/ +/* */ +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 3px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-arrow-right { + padding-right: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-glyph { + font-size: 24px; + line-height: 24px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-medium .x-btn-glyph { + color: #959595; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: #ececec; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #e2e2e2)); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -moz-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -o-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: linear-gradient(top, #f4f4f4, #e2e2e2); +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-button, +.x-btn-default-medium-noicon .x-btn-button { + height: 24px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-inner, +.x-btn-default-medium-noicon .x-btn-inner { + line-height: 24px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-medium-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-medium-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-inner { + width: 24px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-icon-el { + width: 24px; + height: 24px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-left .x-btn-button { + height: 24px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-left .x-btn-inner { + line-height: 24px; + padding-left: 28px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-left .x-btn-icon-el { + width: 24px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-medium-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-medium-icon-text-left .x-btn-icon-el { + height: 24px; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-right .x-btn-button { + height: 24px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-right .x-btn-inner { + line-height: 24px; + padding-right: 28px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-right .x-btn-icon-el { + width: 24px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-medium-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-medium-icon-text-right .x-btn-icon-el { + height: 24px; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-top .x-btn-inner { + padding-top: 28px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-top .x-btn-icon-el { + height: 24px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-medium-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-medium-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-bottom .x-btn-inner { + padding-bottom: 28px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-bottom .x-btn-icon-el { + height: 24px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-medium-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-medium-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-menu-active, +.x-btn-default-medium-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: linear-gradient(top, #c7c7c7, #e0e0e0); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-frame-tl, +.x-btn-default-medium-over .x-frame-bl, +.x-btn-default-medium-over .x-frame-tr, +.x-btn-default-medium-over .x-frame-br, +.x-btn-default-medium-over .x-frame-tc, +.x-btn-default-medium-over .x-frame-bc { + background-image: url(images/btn/btn-default-medium-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-frame-ml, +.x-btn-default-medium-over .x-frame-mr { + background-image: url(images/btn/btn-default-medium-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-medium-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-focus .x-frame-tl, +.x-btn-default-medium-focus .x-frame-bl, +.x-btn-default-medium-focus .x-frame-tr, +.x-btn-default-medium-focus .x-frame-br, +.x-btn-default-medium-focus .x-frame-tc, +.x-btn-default-medium-focus .x-frame-bc { + background-image: url(images/btn/btn-default-medium-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-focus .x-frame-ml, +.x-btn-default-medium-focus .x-frame-mr { + background-image: url(images/btn/btn-default-medium-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-medium-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-menu-active .x-frame-tl, +.x-btn-default-medium-menu-active .x-frame-bl, +.x-btn-default-medium-menu-active .x-frame-tr, +.x-btn-default-medium-menu-active .x-frame-br, +.x-btn-default-medium-menu-active .x-frame-tc, +.x-btn-default-medium-menu-active .x-frame-bc, +.x-btn-default-medium-pressed .x-frame-tl, +.x-btn-default-medium-pressed .x-frame-bl, +.x-btn-default-medium-pressed .x-frame-tr, +.x-btn-default-medium-pressed .x-frame-br, +.x-btn-default-medium-pressed .x-frame-tc, +.x-btn-default-medium-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-medium-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-menu-active .x-frame-ml, +.x-btn-default-medium-menu-active .x-frame-mr, +.x-btn-default-medium-pressed .x-frame-ml, +.x-btn-default-medium-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-medium-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-menu-active .x-frame-mc, +.x-btn-default-medium-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-medium-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled .x-frame-tl, +.x-btn-default-medium-disabled .x-frame-bl, +.x-btn-default-medium-disabled .x-frame-tr, +.x-btn-default-medium-disabled .x-frame-br, +.x-btn-default-medium-disabled .x-frame-tc, +.x-btn-default-medium-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-medium-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled .x-frame-ml, +.x-btn-default-medium-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-medium-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled .x-frame-mc { + background-color: #ececec; + background-image: url(images/btn/btn-default-medium-disabled-fbg.gif); +} + +/* line 484, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-bg.gif); +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium-menu-active, +.x-nlg .x-btn-default-medium-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-pressed-bg.gif); +} + +/* line 521, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium-disabled { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-disabled-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-split-right { + background-image: url(images/button/s-arrow.gif); + padding-right: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 585, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled .x-btn-inner, +.x-btn-default-medium-disabled .x-btn-icon-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-over-corners.gif), sides:url(images/btn/btn-default-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-medium-over-fbg.gif), bg:url(images/btn/btn-default-medium-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-focus-corners.gif), sides:url(images/btn/btn-default-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-medium-focus-fbg.gif), bg:url(images/btn/btn-default-medium-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-pressed-corners.gif), sides:url(images/btn/btn-default-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-medium-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-disabled-corners.gif), sides:url(images/btn/btn-default-medium-disabled-sides.gif), frame-bg:url(images/btn/btn-default-medium-disabled-fbg.gif), bg:url(images/btn/btn-default-medium-disabled-bg.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large { + border-color: #bbbbbb; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 3px 3px 3px 3px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #f8f8f8; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); + background-image: -moz-linear-gradient(top, #ffffff, #eeeeee); + background-image: -o-linear-gradient(top, #ffffff, #eeeeee); + background-image: linear-gradient(top, #ffffff, #eeeeee); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-mc { + background-image: url(images/btn/btn-default-large-fbg.gif); + background-position: 0 top; + background-color: #f8f8f8; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-btn-default-large { + background-image: url(images/btn/btn-default-large-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-large { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-large { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tr, +.x-btn-default-large-br, +.x-btn-default-large-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tl, +.x-btn-default-large-bl, +.x-btn-default-large-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tl, +.x-btn-default-large-bl, +.x-btn-default-large-tr, +.x-btn-default-large-br, +.x-btn-default-large-tc, +.x-btn-default-large-bc, +.x-btn-default-large-ml, +.x-btn-default-large-mr { + zoom: 1; + background-image: url(images/btn/btn-default-large-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-ml, +.x-btn-default-large-mr { + zoom: 1; + background-image: url(images/btn/btn-default-large-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-large-tl, +.x-strict .x-ie7 .x-btn-default-large-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-large-fbg.gif), bg:url(images/btn/btn-default-large-bg.gif), corners:url(images/btn/btn-default-large-corners.gif), sides:url(images/btn/btn-default-large-sides.gif)"; +} + +/**/ +/* */ +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 3px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-arrow-right { + padding-right: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-glyph { + font-size: 32px; + line-height: 32px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-large .x-btn-glyph { + color: #959595; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: #ececec; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #e2e2e2)); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -moz-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -o-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: linear-gradient(top, #f4f4f4, #e2e2e2); +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-button, +.x-btn-default-large-noicon .x-btn-button { + height: 32px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-inner, +.x-btn-default-large-noicon .x-btn-inner { + line-height: 32px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-large-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-large-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-inner { + width: 32px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-icon-el { + width: 32px; + height: 32px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-left .x-btn-button { + height: 32px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-left .x-btn-inner { + line-height: 32px; + padding-left: 36px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-left .x-btn-icon-el { + width: 32px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-large-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-large-icon-text-left .x-btn-icon-el { + height: 32px; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-right .x-btn-button { + height: 32px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-right .x-btn-inner { + line-height: 32px; + padding-right: 36px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-right .x-btn-icon-el { + width: 32px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-large-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-large-icon-text-right .x-btn-icon-el { + height: 32px; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-top .x-btn-inner { + padding-top: 36px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-top .x-btn-icon-el { + height: 32px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-large-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-large-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-bottom .x-btn-inner { + padding-bottom: 36px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-bottom .x-btn-icon-el { + height: 32px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-large-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-large-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-menu-active, +.x-btn-default-large-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: linear-gradient(top, #c7c7c7, #e0e0e0); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-frame-tl, +.x-btn-default-large-over .x-frame-bl, +.x-btn-default-large-over .x-frame-tr, +.x-btn-default-large-over .x-frame-br, +.x-btn-default-large-over .x-frame-tc, +.x-btn-default-large-over .x-frame-bc { + background-image: url(images/btn/btn-default-large-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-frame-ml, +.x-btn-default-large-over .x-frame-mr { + background-image: url(images/btn/btn-default-large-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-large-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-focus .x-frame-tl, +.x-btn-default-large-focus .x-frame-bl, +.x-btn-default-large-focus .x-frame-tr, +.x-btn-default-large-focus .x-frame-br, +.x-btn-default-large-focus .x-frame-tc, +.x-btn-default-large-focus .x-frame-bc { + background-image: url(images/btn/btn-default-large-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-focus .x-frame-ml, +.x-btn-default-large-focus .x-frame-mr { + background-image: url(images/btn/btn-default-large-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-large-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-menu-active .x-frame-tl, +.x-btn-default-large-menu-active .x-frame-bl, +.x-btn-default-large-menu-active .x-frame-tr, +.x-btn-default-large-menu-active .x-frame-br, +.x-btn-default-large-menu-active .x-frame-tc, +.x-btn-default-large-menu-active .x-frame-bc, +.x-btn-default-large-pressed .x-frame-tl, +.x-btn-default-large-pressed .x-frame-bl, +.x-btn-default-large-pressed .x-frame-tr, +.x-btn-default-large-pressed .x-frame-br, +.x-btn-default-large-pressed .x-frame-tc, +.x-btn-default-large-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-large-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-menu-active .x-frame-ml, +.x-btn-default-large-menu-active .x-frame-mr, +.x-btn-default-large-pressed .x-frame-ml, +.x-btn-default-large-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-large-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-menu-active .x-frame-mc, +.x-btn-default-large-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-large-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled .x-frame-tl, +.x-btn-default-large-disabled .x-frame-bl, +.x-btn-default-large-disabled .x-frame-tr, +.x-btn-default-large-disabled .x-frame-br, +.x-btn-default-large-disabled .x-frame-tc, +.x-btn-default-large-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-large-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled .x-frame-ml, +.x-btn-default-large-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-large-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled .x-frame-mc { + background-color: #ececec; + background-image: url(images/btn/btn-default-large-disabled-fbg.gif); +} + +/* line 484, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-bg.gif); +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large-menu-active, +.x-nlg .x-btn-default-large-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-pressed-bg.gif); +} + +/* line 521, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large-disabled { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-disabled-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-split-right { + background-image: url(images/button/s-arrow.gif); + padding-right: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 585, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled .x-btn-inner, +.x-btn-default-large-disabled .x-btn-icon-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-over-corners.gif), sides:url(images/btn/btn-default-large-over-sides.gif), frame-bg:url(images/btn/btn-default-large-over-fbg.gif), bg:url(images/btn/btn-default-large-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-focus-corners.gif), sides:url(images/btn/btn-default-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-large-focus-fbg.gif), bg:url(images/btn/btn-default-large-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-pressed-corners.gif), sides:url(images/btn/btn-default-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-large-pressed-fbg.gif), bg:url(images/btn/btn-default-large-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-disabled-corners.gif), sides:url(images/btn/btn-default-large-disabled-sides.gif), frame-bg:url(images/btn/btn-default-large-disabled-fbg.gif), bg:url(images/btn/btn-default-large-disabled-bg.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small { + border-color: transparent; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 2px 2px 2px 2px; + border-width: 1px; + border-style: solid; + background-color: transparent; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-mc { + background-color: transparent; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-toolbar-small { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-toolbar-small { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tr, +.x-btn-default-toolbar-small-br, +.x-btn-default-toolbar-small-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tl, +.x-btn-default-toolbar-small-bl, +.x-btn-default-toolbar-small-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tl, +.x-btn-default-toolbar-small-bl, +.x-btn-default-toolbar-small-tr, +.x-btn-default-toolbar-small-br, +.x-btn-default-toolbar-small-tc, +.x-btn-default-toolbar-small-bc, +.x-btn-default-toolbar-small-ml, +.x-btn-default-toolbar-small-mr { + zoom: 1; +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-ml, +.x-btn-default-toolbar-small-mr { + zoom: 1; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-toolbar-small-tl, +.x-strict .x-ie7 .x-btn-default-toolbar-small-bl { + position: relative; + right: 0; +} + +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 4px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-arrow-right { + padding-right: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-glyph { + font-size: 16px; + line-height: 16px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-toolbar-small .x-btn-glyph { + color: #999999; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: transparent; +} +/* line 142, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled .x-btn-inner { + color: #8c8c8c; +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-button, +.x-btn-default-toolbar-small-noicon .x-btn-button { + height: 16px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-inner, +.x-btn-default-toolbar-small-noicon .x-btn-inner { + line-height: 16px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-small-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-small-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-inner { + width: 16px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-icon-el { + width: 16px; + height: 16px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-left .x-btn-button { + height: 16px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-left .x-btn-inner { + line-height: 16px; + padding-left: 20px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el { + width: 16px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el { + height: 16px; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-right .x-btn-button { + height: 16px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-right .x-btn-inner { + line-height: 16px; + padding-right: 20px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el { + width: 16px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el { + height: 16px; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-top .x-btn-inner { + padding-top: 20px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el { + height: 16px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-bottom .x-btn-inner { + padding-bottom: 20px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el { + height: 16px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-menu-active, +.x-btn-default-toolbar-small-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d6d6d6), color-stop(48%, #dcdcdc), color-stop(52%, #deb6b7), color-stop(100%, #e1bebf)); + background-image: -webkit-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -moz-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -o-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-frame-tl, +.x-btn-default-toolbar-small-over .x-frame-bl, +.x-btn-default-toolbar-small-over .x-frame-tr, +.x-btn-default-toolbar-small-over .x-frame-br, +.x-btn-default-toolbar-small-over .x-frame-tc, +.x-btn-default-toolbar-small-over .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-small-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-frame-ml, +.x-btn-default-toolbar-small-over .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-small-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-small-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-focus .x-frame-tl, +.x-btn-default-toolbar-small-focus .x-frame-bl, +.x-btn-default-toolbar-small-focus .x-frame-tr, +.x-btn-default-toolbar-small-focus .x-frame-br, +.x-btn-default-toolbar-small-focus .x-frame-tc, +.x-btn-default-toolbar-small-focus .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-small-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-focus .x-frame-ml, +.x-btn-default-toolbar-small-focus .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-small-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-small-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-menu-active .x-frame-tl, +.x-btn-default-toolbar-small-menu-active .x-frame-bl, +.x-btn-default-toolbar-small-menu-active .x-frame-tr, +.x-btn-default-toolbar-small-menu-active .x-frame-br, +.x-btn-default-toolbar-small-menu-active .x-frame-tc, +.x-btn-default-toolbar-small-menu-active .x-frame-bc, +.x-btn-default-toolbar-small-pressed .x-frame-tl, +.x-btn-default-toolbar-small-pressed .x-frame-bl, +.x-btn-default-toolbar-small-pressed .x-frame-tr, +.x-btn-default-toolbar-small-pressed .x-frame-br, +.x-btn-default-toolbar-small-pressed .x-frame-tc, +.x-btn-default-toolbar-small-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-small-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-menu-active .x-frame-ml, +.x-btn-default-toolbar-small-menu-active .x-frame-mr, +.x-btn-default-toolbar-small-pressed .x-frame-ml, +.x-btn-default-toolbar-small-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-small-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-menu-active .x-frame-mc, +.x-btn-default-toolbar-small-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-toolbar-small-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled .x-frame-tl, +.x-btn-default-toolbar-small-disabled .x-frame-bl, +.x-btn-default-toolbar-small-disabled .x-frame-tr, +.x-btn-default-toolbar-small-disabled .x-frame-br, +.x-btn-default-toolbar-small-disabled .x-frame-tc, +.x-btn-default-toolbar-small-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-small-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled .x-frame-ml, +.x-btn-default-toolbar-small-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-small-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled .x-frame-mc { + background-color: transparent; +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-small-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-small-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-small-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-small-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-small-menu-active, +.x-nlg .x-btn-default-toolbar-small-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-small-pressed-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-split-right { + background-image: url(images/button/s-arrow-noline.gif); + padding-right: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b-noline.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 577, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-small-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-over-corners.gif), sides:url(images/btn/btn-default-toolbar-small-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-small-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-small-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-small-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium { + border-color: transparent; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 3px 3px 3px 3px; + border-width: 1px; + border-style: solid; + background-color: transparent; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-mc { + background-color: transparent; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-toolbar-medium { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-toolbar-medium { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tr, +.x-btn-default-toolbar-medium-br, +.x-btn-default-toolbar-medium-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tl, +.x-btn-default-toolbar-medium-bl, +.x-btn-default-toolbar-medium-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tl, +.x-btn-default-toolbar-medium-bl, +.x-btn-default-toolbar-medium-tr, +.x-btn-default-toolbar-medium-br, +.x-btn-default-toolbar-medium-tc, +.x-btn-default-toolbar-medium-bc, +.x-btn-default-toolbar-medium-ml, +.x-btn-default-toolbar-medium-mr { + zoom: 1; +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-ml, +.x-btn-default-toolbar-medium-mr { + zoom: 1; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-toolbar-medium-tl, +.x-strict .x-ie7 .x-btn-default-toolbar-medium-bl { + position: relative; + right: 0; +} + +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 3px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-arrow-right { + padding-right: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-glyph { + font-size: 24px; + line-height: 24px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-toolbar-medium .x-btn-glyph { + color: #999999; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: transparent; +} +/* line 142, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled .x-btn-inner { + color: #8c8c8c; +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-button, +.x-btn-default-toolbar-medium-noicon .x-btn-button { + height: 24px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-inner, +.x-btn-default-toolbar-medium-noicon .x-btn-inner { + line-height: 24px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-medium-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-medium-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-inner { + width: 24px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-icon-el { + width: 24px; + height: 24px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-left .x-btn-button { + height: 24px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-left .x-btn-inner { + line-height: 24px; + padding-left: 28px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el { + width: 24px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el { + height: 24px; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-right .x-btn-button { + height: 24px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-right .x-btn-inner { + line-height: 24px; + padding-right: 28px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el { + width: 24px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el { + height: 24px; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-top .x-btn-inner { + padding-top: 28px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el { + height: 24px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-inner { + padding-bottom: 28px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el { + height: 24px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-menu-active, +.x-btn-default-toolbar-medium-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d6d6d6), color-stop(48%, #dcdcdc), color-stop(52%, #deb6b7), color-stop(100%, #e1bebf)); + background-image: -webkit-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -moz-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -o-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-frame-tl, +.x-btn-default-toolbar-medium-over .x-frame-bl, +.x-btn-default-toolbar-medium-over .x-frame-tr, +.x-btn-default-toolbar-medium-over .x-frame-br, +.x-btn-default-toolbar-medium-over .x-frame-tc, +.x-btn-default-toolbar-medium-over .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-medium-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-frame-ml, +.x-btn-default-toolbar-medium-over .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-medium-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-medium-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-focus .x-frame-tl, +.x-btn-default-toolbar-medium-focus .x-frame-bl, +.x-btn-default-toolbar-medium-focus .x-frame-tr, +.x-btn-default-toolbar-medium-focus .x-frame-br, +.x-btn-default-toolbar-medium-focus .x-frame-tc, +.x-btn-default-toolbar-medium-focus .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-medium-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-focus .x-frame-ml, +.x-btn-default-toolbar-medium-focus .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-medium-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-medium-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-menu-active .x-frame-tl, +.x-btn-default-toolbar-medium-menu-active .x-frame-bl, +.x-btn-default-toolbar-medium-menu-active .x-frame-tr, +.x-btn-default-toolbar-medium-menu-active .x-frame-br, +.x-btn-default-toolbar-medium-menu-active .x-frame-tc, +.x-btn-default-toolbar-medium-menu-active .x-frame-bc, +.x-btn-default-toolbar-medium-pressed .x-frame-tl, +.x-btn-default-toolbar-medium-pressed .x-frame-bl, +.x-btn-default-toolbar-medium-pressed .x-frame-tr, +.x-btn-default-toolbar-medium-pressed .x-frame-br, +.x-btn-default-toolbar-medium-pressed .x-frame-tc, +.x-btn-default-toolbar-medium-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-medium-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-menu-active .x-frame-ml, +.x-btn-default-toolbar-medium-menu-active .x-frame-mr, +.x-btn-default-toolbar-medium-pressed .x-frame-ml, +.x-btn-default-toolbar-medium-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-medium-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-menu-active .x-frame-mc, +.x-btn-default-toolbar-medium-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled .x-frame-tl, +.x-btn-default-toolbar-medium-disabled .x-frame-bl, +.x-btn-default-toolbar-medium-disabled .x-frame-tr, +.x-btn-default-toolbar-medium-disabled .x-frame-br, +.x-btn-default-toolbar-medium-disabled .x-frame-tc, +.x-btn-default-toolbar-medium-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-medium-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled .x-frame-ml, +.x-btn-default-toolbar-medium-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-medium-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled .x-frame-mc { + background-color: transparent; +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-medium-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-medium-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-medium-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-medium-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-medium-menu-active, +.x-nlg .x-btn-default-toolbar-medium-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-medium-pressed-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-split-right { + background-image: url(images/button/s-arrow-noline.gif); + padding-right: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b-noline.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 577, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-medium-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-over-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-medium-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-medium-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-medium-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large { + border-color: transparent; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 3px 3px 3px 3px; + border-width: 1px; + border-style: solid; + background-color: transparent; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-mc { + background-color: transparent; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-toolbar-large { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-toolbar-large { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tr, +.x-btn-default-toolbar-large-br, +.x-btn-default-toolbar-large-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tl, +.x-btn-default-toolbar-large-bl, +.x-btn-default-toolbar-large-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tl, +.x-btn-default-toolbar-large-bl, +.x-btn-default-toolbar-large-tr, +.x-btn-default-toolbar-large-br, +.x-btn-default-toolbar-large-tc, +.x-btn-default-toolbar-large-bc, +.x-btn-default-toolbar-large-ml, +.x-btn-default-toolbar-large-mr { + zoom: 1; +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-ml, +.x-btn-default-toolbar-large-mr { + zoom: 1; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-toolbar-large-tl, +.x-strict .x-ie7 .x-btn-default-toolbar-large-bl { + position: relative; + right: 0; +} + +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 3px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-arrow-right { + padding-right: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-glyph { + font-size: 32px; + line-height: 32px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-toolbar-large .x-btn-glyph { + color: #999999; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: transparent; +} +/* line 142, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled .x-btn-inner { + color: #8c8c8c; +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-button, +.x-btn-default-toolbar-large-noicon .x-btn-button { + height: 32px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-inner, +.x-btn-default-toolbar-large-noicon .x-btn-inner { + line-height: 32px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-large-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-large-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-inner { + width: 32px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-icon-el { + width: 32px; + height: 32px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-left .x-btn-button { + height: 32px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-left .x-btn-inner { + line-height: 32px; + padding-left: 36px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el { + width: 32px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el { + height: 32px; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-right .x-btn-button { + height: 32px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-right .x-btn-inner { + line-height: 32px; + padding-right: 36px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el { + width: 32px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el { + height: 32px; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-top .x-btn-inner { + padding-top: 36px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el { + height: 32px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-bottom .x-btn-inner { + padding-bottom: 36px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el { + height: 32px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-menu-active, +.x-btn-default-toolbar-large-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d6d6d6), color-stop(48%, #dcdcdc), color-stop(52%, #deb6b7), color-stop(100%, #e1bebf)); + background-image: -webkit-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -moz-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -o-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-frame-tl, +.x-btn-default-toolbar-large-over .x-frame-bl, +.x-btn-default-toolbar-large-over .x-frame-tr, +.x-btn-default-toolbar-large-over .x-frame-br, +.x-btn-default-toolbar-large-over .x-frame-tc, +.x-btn-default-toolbar-large-over .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-large-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-frame-ml, +.x-btn-default-toolbar-large-over .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-large-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-large-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-focus .x-frame-tl, +.x-btn-default-toolbar-large-focus .x-frame-bl, +.x-btn-default-toolbar-large-focus .x-frame-tr, +.x-btn-default-toolbar-large-focus .x-frame-br, +.x-btn-default-toolbar-large-focus .x-frame-tc, +.x-btn-default-toolbar-large-focus .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-large-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-focus .x-frame-ml, +.x-btn-default-toolbar-large-focus .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-large-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-large-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-menu-active .x-frame-tl, +.x-btn-default-toolbar-large-menu-active .x-frame-bl, +.x-btn-default-toolbar-large-menu-active .x-frame-tr, +.x-btn-default-toolbar-large-menu-active .x-frame-br, +.x-btn-default-toolbar-large-menu-active .x-frame-tc, +.x-btn-default-toolbar-large-menu-active .x-frame-bc, +.x-btn-default-toolbar-large-pressed .x-frame-tl, +.x-btn-default-toolbar-large-pressed .x-frame-bl, +.x-btn-default-toolbar-large-pressed .x-frame-tr, +.x-btn-default-toolbar-large-pressed .x-frame-br, +.x-btn-default-toolbar-large-pressed .x-frame-tc, +.x-btn-default-toolbar-large-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-large-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-menu-active .x-frame-ml, +.x-btn-default-toolbar-large-menu-active .x-frame-mr, +.x-btn-default-toolbar-large-pressed .x-frame-ml, +.x-btn-default-toolbar-large-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-large-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-menu-active .x-frame-mc, +.x-btn-default-toolbar-large-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-toolbar-large-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled .x-frame-tl, +.x-btn-default-toolbar-large-disabled .x-frame-bl, +.x-btn-default-toolbar-large-disabled .x-frame-tr, +.x-btn-default-toolbar-large-disabled .x-frame-br, +.x-btn-default-toolbar-large-disabled .x-frame-tc, +.x-btn-default-toolbar-large-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-large-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled .x-frame-ml, +.x-btn-default-toolbar-large-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-large-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled .x-frame-mc { + background-color: transparent; +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-large-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-large-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-large-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-large-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-large-menu-active, +.x-nlg .x-btn-default-toolbar-large-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-large-pressed-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-split-right { + background-image: url(images/button/s-arrow-noline.gif); + padding-right: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b-noline.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 577, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-large-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-over-corners.gif), sides:url(images/btn/btn-default-toolbar-large-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-large-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-large-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-large-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)"; +} + +/**/ +/* */ +/* line 981, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-left .x-btn-icon-el { + background-position: left center; +} + +/* line 993, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-right .x-btn-icon-el { + background-position: right center; +} + +/* line 1004, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-top .x-btn-icon-el { + background-position: center top; +} + +/* line 1008, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-bottom .x-btn-icon-el { + background-position: center bottom; +} + +/* line 1012, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-arrow-right { + background-position: right center; +} + +/* line 1022, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-arrow-bottom { + background-position: center bottom; +} + +/* line 1026, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-arrow { + background-repeat: no-repeat; +} + +/* line 1031, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-split { + display: block; + background-repeat: no-repeat; +} + +/* line 1036, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-split-right { + background-position: right center; +} + +/* line 1046, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-split-bottom { + background-position: center bottom; +} + +/* line 1050, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-cycle-fixed-width .x-btn-inner { + text-align: inherit; +} + +/** + * Creates a visual theme for a Toolbar. + * @param {String} $ui The name of the UI + * @param {Color} $background-color The background color of the toolbar (defaults to transparent) + * @param {Gradient/color-stops} $background-gradient The background gradient of the toolbar (defaults to null) + * @param {Color} $border-color The border color of the toolbar (defaults to null) + * @member Ext.toolbar.Toolbar + */ +/* line 70, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar { + font-size: 11px; + border-style: solid; + padding: 2px 0 2px 2px; +} +/* line 78, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar .x-toolbar-item { + margin: 0 2px 0 0; +} +/* line 89, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar .x-toolbar-text { + margin: 0 6px 0 4px; + color: black; + line-height: 16px; + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + font-weight: normal; +} +/* line 98, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar .x-toolbar-separator-horizontal { + margin: 0 2px 0 0; + height: 14px; + border-style: none solid; + border-width: 0 1px; + border-left-color: #aca899; + border-right-color: white; +} + +/* line 115, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-footer { + background: transparent; + border: 0; + margin: 3px 0 0; + padding: 2px 0 2px 6px; +} +/* line 122, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-footer .x-toolbar-item { + margin: 0 6px 0 0; +} + +/* line 127, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-spacer { + width: 2px; +} + +/* line 132, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-more-icon { + background-image: url(images/toolbar/more.gif) !important; + background-position: center center !important; + background-repeat: no-repeat; +} + +/* line 22, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-default { + border-color: #bcb0b0; + border-width: 1px; + background-image: none; + background-color: #d8d8d8; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e6e6e6), color-stop(100%, #efefef)); + background-image: -webkit-linear-gradient(top, #e6e6e6, #efefef); + background-image: -moz-linear-gradient(top, #e6e6e6, #efefef); + background-image: -o-linear-gradient(top, #e6e6e6, #efefef); + background-image: linear-gradient(top, #e6e6e6, #efefef); +} +/* line 28, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-default .x-box-scroller { + cursor: pointer; +} +/* line 32, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-default .x-box-scroller-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + cursor: default; +} + +/* line 59, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-nlg .x-toolbar-default { + background-image: url(images/toolbar/toolbar-default-bg.gif) !important; + background-repeat: repeat-x; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-toolbar-default:after { + display: none; + content: "x-slicer:bg:url(images/toolbar/toolbar-default-bg.gif)"; +} + +/**/ +/* */ +/* line 145, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroll-left { + background-image: url(images/toolbar/scroll-left.gif); + background-position: -14px 0; + width: 14px; + height: 22px; + border-style: solid; + border-color: #8db2e3; + border-width: 0 0 1px; + margin-top: 0; +} + +/* line 156, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroll-left-hover { + background-position: 0 0; +} + +/* line 160, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroll-right { + background-image: url(images/toolbar/scroll-right.gif); + width: 14px; + height: 22px; + border-style: solid; + border-color: #8db2e3; + border-width: 0 0 1px; + margin-top: 0; +} + +/* line 170, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroll-right-hover { + background-position: -14px 0; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar .x-box-menu-after { + margin: 0 2px 0 2px; +} + +/* line 178, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical { + padding: 2px 2px 0 2px; +} +/* line 181, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical .x-toolbar-item { + margin: 0 0 2px 0; +} +/* line 185, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical .x-toolbar-text { + margin: 4px 0 6px 0; +} +/* line 189, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical .x-toolbar-separator-vertical { + margin: 0 5px 2px; + border-style: solid none; + border-width: 1px 0; + border-top-color: #aca899; + border-bottom-color: white; +} +/* line 197, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical .x-box-menu-after { + margin: 2px 0 2px 0; + display: block; + float: none; +} + +/* line 2, ../../../ext-theme-neutral/sass/src/panel/Header.scss */ +.x-header-draggable .x-header-body, +.x-header-ghost { + cursor: move; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/panel/Header.scss */ +.x-header-text { + white-space: nowrap; +} + +/** + * Creates a visual theme for a Panel + * + * @param {boolean} $ui-include-border-management-rules + * True to include neptune style border management rules. + * + * @param {color} $ui-wrap-border-color + * The color to apply to the border that wraps the body and docked items in a framed + * panel. The presence of the wrap border in a framed panel is controlled by the + * {@link Ext.panel.Panel#border border} config. Only applicable when + * $ui-include-border-management-rules is true. + * + * @param {color} $ui-wrap-border-width + * The width to apply to the border that wraps the body and docked items in a framed + * panel. The presence of the wrap border in a framed panel is controlled by the + * {@link Ext.panel.Panel#border border} config. Only applicable when + * $ui-include-border-management-rules is true. + * + * @member Ext.panel.Panel + */ +/* line 611, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-ghost { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=65); + opacity: 0.65; +} + +/* line 83, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-default { + border-color: #d0d0d0; + padding: 0; +} + +/* line 89, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default { + font-size: 11px; + border: 1px solid #d0d0d0; +} + +/* line 109, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal { + padding: 4px 5px 4px 5px; +} + +/* line 113, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal-noborder { + padding: 5px 6px 4px 6px; +} + +/* line 117, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical { + padding: 5px 4px 5px 4px; +} + +/* line 121, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical-noborder { + padding: 6px 5px 6px 4px; +} + +/* line 137, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-text-container-default { + color: #333333; + font-size: 11px; + font-weight: bold; + font-family: tahoma, arial, verdana, sans-serif; + line-height: 15px; + padding: 0 2px 1px; + text-transform: none; +} + +/* line 149, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-body-default { + background: white; + border-color: #d0d0d0; + color: black; + font-size: 12px; + font-size: normal; + border-width: 1px; + border-style: solid; +} + +/* line 309, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default { + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 313, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical { + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 331, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-default-top { + background: url(images/panel-header/panel-header-default-top-bg.gif); +} +/* line 336, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-default-bottom { + background: url(images/panel-header/panel-header-default-bottom-bg.gif); +} +/* line 341, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-default-left { + background: url(images/panel-header/panel-header-default-left-bg.gif) top right; +} +/* line 346, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-default-right { + background: url(images/panel-header/panel-header-default-right-bg.gif) top right; +} + +/* line 371, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-collapsed-border-top { + border-bottom-width: 1px !important; +} +/* line 375, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-collapsed-border-right { + border-left-width: 1px !important; +} +/* line 379, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-collapsed-border-bottom { + border-top-width: 1px !important; +} +/* line 383, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-collapsed-border-left { + border-right-width: 1px !important; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-top:after { + display: none; + content: "x-slicer:bg:url(images/panel-header/panel-header-default-top-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-bottom:after { + display: none; + content: "x-slicer:bg:url(images/panel-header/panel-header-default-bottom-bg.gif), stretch:top"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-left:after { + display: none; + content: "x-slicer:bg:url(images/panel-header/panel-header-default-left-bg.gif), stretch:right"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-right:after { + display: none; + content: "x-slicer:bg:url(images/panel-header/panel-header-default-right-bg.gif)"; +} + +/**/ +/* */ +/* line 397, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-panel-header-text-container { + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-panel-header-default-vertical .x-panel-header-text-container { + background-color: #d7d2d2; + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1), progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2); +} + +/* line 408, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-top { + -webkit-box-shadow: #ececec 0 1px 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset; +} + +/* line 412, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-right { + -webkit-box-shadow: #ececec -1px 0 0px 0 inset; + -moz-box-shadow: #ececec -1px 0 0px 0 inset; + box-shadow: #ececec -1px 0 0px 0 inset; +} + +/* line 416, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-bottom { + -webkit-box-shadow: #ececec 0 -1px 0px 0 inset; + -moz-box-shadow: #ececec 0 -1px 0px 0 inset; + box-shadow: #ececec 0 -1px 0px 0 inset; +} + +/* line 420, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-left { + -webkit-box-shadow: #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 1px 0 0px 0 inset; +} + +/* line 426, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default .x-panel-header-icon { + width: 16px; + height: 16px; + background-position: center center; +} +/* line 431, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default .x-panel-header-glyph { + color: #333333; + font-size: 16px; + line-height: 16px; + opacity: 0.5; +} +/* line 447, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-ie8m .x-panel-header-default .x-panel-header-glyph { + color: #858282; +} + +/* line 455, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-panel-header-icon-before-title { + margin: 0 2px 0 0; +} +/* line 465, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-panel-header-icon-after-title { + margin: 0 0 0 2px; +} + +/* line 477, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-panel-header-icon-before-title { + margin: 0 0 2px 0; +} +/* line 487, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-panel-header-icon-after-title { + margin: 2px 0 0 0; +} + +/* line 500, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-tool-after-title { + margin: 0 0 0 2px; +} +/* line 510, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-tool-before-title { + margin: 0 2px 0 0; +} + +/* line 522, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-tool-after-title { + margin: 2px 0 0 0; +} +/* line 532, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-tool-before-title { + margin: 0 0 2px 0; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-default-resizable .x-panel-handle { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 83, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-default-framed { + border-color: #d0d0d0; + padding: 4px; +} + +/* line 89, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed { + font-size: 11px; + border: 1px solid #d0d0d0; +} + +/* line 109, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal { + padding: 4px 5px 4px 5px; +} + +/* line 113, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal-noborder { + padding: 5px 6px 4px 6px; +} + +/* line 117, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical { + padding: 5px 4px 5px 4px; +} + +/* line 121, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical-noborder { + padding: 6px 5px 6px 4px; +} + +/* line 137, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-text-container-default-framed { + color: #333333; + font-size: 11px; + font-weight: bold; + font-family: tahoma, arial, verdana, sans-serif; + line-height: 15px; + padding: 0 2px 1px; + text-transform: none; +} + +/* line 149, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-body-default-framed { + background: #f1f1f1; + border-color: #d0d0d0; + color: black; + font-size: 12px; + font-size: normal; + border-width: 0; + border-style: solid; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + padding: 4px 4px 4px 4px; + border-width: 1px; + border-style: solid; + background-color: #f1f1f1; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-mc { + background-color: #f1f1f1; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-default-framed { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-default-framed { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-4-4-4-4-1-1-1-1-4-4-4-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tr, +.x-panel-default-framed-br, +.x-panel-default-framed-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tl, +.x-panel-default-framed-bl, +.x-panel-default-framed-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tl, +.x-panel-default-framed-bl, +.x-panel-default-framed-tr, +.x-panel-default-framed-br, +.x-panel-default-framed-tc, +.x-panel-default-framed-bc, +.x-panel-default-framed-ml, +.x-panel-default-framed-mr { + zoom: 1; + background-image: url(images/panel/panel-default-framed-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-ml, +.x-panel-default-framed-mr { + zoom: 1; + background-image: url(images/panel/panel-default-framed-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-default-framed-tl, +.x-strict .x-ie7 .x-panel-default-framed-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-default-framed:after { + display: none; + content: "x-slicer:corners:url(images/panel/panel-default-framed-corners.gif), sides:url(images/panel/panel-default-framed-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 4px 5px 4px 5px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-mc { + background-image: url(images/panel-header/panel-header-default-framed-top-fbg.gif); + background-position: 0 top; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-top { + background-image: url(images/panel-header/panel-header-default-framed-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-4-4-0-0-1-1-0-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tr, +.x-panel-header-default-framed-top-br, +.x-panel-header-default-framed-top-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tl, +.x-panel-header-default-framed-top-bl, +.x-panel-header-default-framed-top-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tl, +.x-panel-header-default-framed-top-bl, +.x-panel-header-default-framed-top-tr, +.x-panel-header-default-framed-top-br, +.x-panel-header-default-framed-top-tc, +.x-panel-header-default-framed-top-bc, +.x-panel-header-default-framed-top-ml, +.x-panel-header-default-framed-top-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-ml, +.x-panel-header-default-framed-top-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-mc { + padding: 1px 2px 4px 2px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-top-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-top:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 5px 4px 5px 4px; + border-width: 1px 1px 1px 0; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-mc { + background-image: url(images/panel-header/panel-header-default-framed-right-fbg.gif); + background-position: right 0; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-right { + background-image: url(images/panel-header/panel-header-default-framed-right-bg.gif); + background-position: right 0; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dv-0-4-4-0-1-1-1-0-5-4-5-4"); +} + +/* line 272, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tl { + background-position: 0 0; +} + +/* line 276, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tr { + background-position: 0 -4px; +} + +/* line 280, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-bl { + background-position: 0 -8px; +} + +/* line 284, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-br { + background-position: 0 -12px; +} + +/* line 288, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-ml { + background-position: -4px 0; +} + +/* line 292, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-mr { + background-position: right 0; +} + +/* line 296, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tc { + background-position: right 0; +} + +/* line 300, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-bc { + background-position: right -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tr, +.x-panel-header-default-framed-right-br, +.x-panel-header-default-framed-right-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tl, +.x-panel-header-default-framed-right-bl, +.x-panel-header-default-framed-right-ml { + padding-left: 0; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tl, +.x-panel-header-default-framed-right-bl, +.x-panel-header-default-framed-right-tr, +.x-panel-header-default-framed-right-br, +.x-panel-header-default-framed-right-tc, +.x-panel-header-default-framed-right-bc, +.x-panel-header-default-framed-right-ml, +.x-panel-header-default-framed-right-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-right-corners.gif); +} + +/* line 399, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tc, +.x-panel-header-default-framed-right-bc { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-right-sides.gif); + background-repeat: repeat-x; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-mc { + padding: 2px 1px 2px 4px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-right-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-right:after { + display: none; + content: "x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-right-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-right-bg.gif), corners:url(images/panel-header/panel-header-default-framed-right-corners.gif), sides:url(images/panel-header/panel-header-default-framed-right-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 4px 5px 4px 5px; + border-width: 0 1px 1px 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-mc { + background-image: url(images/panel-header/panel-header-default-framed-bottom-fbg.gif); + background-position: 0 bottom; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-bottom { + background-image: url(images/panel-header/panel-header-default-framed-bottom-bg.gif); + background-position: 0 bottom; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-0-0-4-4-0-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-ml { + background-position: 0 bottom; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-mr { + background-position: right bottom; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tr, +.x-panel-header-default-framed-bottom-br, +.x-panel-header-default-framed-bottom-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tl, +.x-panel-header-default-framed-bottom-bl, +.x-panel-header-default-framed-bottom-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tc { + height: 0; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tl, +.x-panel-header-default-framed-bottom-bl, +.x-panel-header-default-framed-bottom-tr, +.x-panel-header-default-framed-bottom-br, +.x-panel-header-default-framed-bottom-tc, +.x-panel-header-default-framed-bottom-bc, +.x-panel-header-default-framed-bottom-ml, +.x-panel-header-default-framed-bottom-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-ml, +.x-panel-header-default-framed-bottom-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-bottom-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-mc { + padding: 4px 2px 1px 2px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-bottom-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-bottom:after { + display: none; + content: "x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 5px 4px 5px 4px; + border-width: 1px 0 1px 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-mc { + background-image: url(images/panel-header/panel-header-default-framed-left-fbg.gif); + background-position: left 0; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-left { + background-image: url(images/panel-header/panel-header-default-framed-left-bg.gif); + background-position: left 0; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dv-4-0-0-4-1-0-1-1-5-4-5-4"); +} + +/* line 272, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tl { + background-position: 0 0; +} + +/* line 276, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tr { + background-position: 0 -4px; +} + +/* line 280, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-bl { + background-position: 0 -8px; +} + +/* line 284, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-br { + background-position: 0 -12px; +} + +/* line 288, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-ml { + background-position: -4px 0; +} + +/* line 292, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-mr { + background-position: right 0; +} + +/* line 296, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tc { + background-position: left 0; +} + +/* line 300, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-bc { + background-position: left -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tr, +.x-panel-header-default-framed-left-br, +.x-panel-header-default-framed-left-mr { + padding-right: 0; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tl, +.x-panel-header-default-framed-left-bl, +.x-panel-header-default-framed-left-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tl, +.x-panel-header-default-framed-left-bl, +.x-panel-header-default-framed-left-tr, +.x-panel-header-default-framed-left-br, +.x-panel-header-default-framed-left-tc, +.x-panel-header-default-framed-left-bc, +.x-panel-header-default-framed-left-ml, +.x-panel-header-default-framed-left-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-left-corners.gif); +} + +/* line 399, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tc, +.x-panel-header-default-framed-left-bc { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-left-sides.gif); + background-repeat: repeat-x; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-mc { + padding: 2px 4px 2px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-left-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-left:after { + display: none; + content: "x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-left-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-left-bg.gif), corners:url(images/panel-header/panel-header-default-framed-left-corners.gif), sides:url(images/panel-header/panel-header-default-framed-left-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 4px 5px 4px 5px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif); + background-position: 0 top; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-collapsed-top { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-collapsed-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-4-4-4-4-1-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tr, +.x-panel-header-default-framed-collapsed-top-br, +.x-panel-header-default-framed-collapsed-top-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tl, +.x-panel-header-default-framed-collapsed-top-bl, +.x-panel-header-default-framed-collapsed-top-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tl, +.x-panel-header-default-framed-collapsed-top-bl, +.x-panel-header-default-framed-collapsed-top-tr, +.x-panel-header-default-framed-collapsed-top-br, +.x-panel-header-default-framed-collapsed-top-tc, +.x-panel-header-default-framed-collapsed-top-bc, +.x-panel-header-default-framed-collapsed-top-ml, +.x-panel-header-default-framed-collapsed-top-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-ml, +.x-panel-header-default-framed-collapsed-top-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-mc { + padding: 1px 2px 1px 2px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-collapsed-top:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 5px 4px 5px 4px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif); + background-position: right 0; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-collapsed-right { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif); + background-position: right 0; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-collapsed-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dv-4-4-4-4-1-1-1-1-5-4-5-4"); +} + +/* line 272, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tl { + background-position: 0 0; +} + +/* line 276, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tr { + background-position: 0 -4px; +} + +/* line 280, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-bl { + background-position: 0 -8px; +} + +/* line 284, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-br { + background-position: 0 -12px; +} + +/* line 288, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-ml { + background-position: -4px 0; +} + +/* line 292, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-mr { + background-position: right 0; +} + +/* line 296, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tc { + background-position: right 0; +} + +/* line 300, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-bc { + background-position: right -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tr, +.x-panel-header-default-framed-collapsed-right-br, +.x-panel-header-default-framed-collapsed-right-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tl, +.x-panel-header-default-framed-collapsed-right-bl, +.x-panel-header-default-framed-collapsed-right-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tl, +.x-panel-header-default-framed-collapsed-right-bl, +.x-panel-header-default-framed-collapsed-right-tr, +.x-panel-header-default-framed-collapsed-right-br, +.x-panel-header-default-framed-collapsed-right-tc, +.x-panel-header-default-framed-collapsed-right-bc, +.x-panel-header-default-framed-collapsed-right-ml, +.x-panel-header-default-framed-collapsed-right-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif); +} + +/* line 399, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tc, +.x-panel-header-default-framed-collapsed-right-bc { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif); + background-repeat: repeat-x; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-mc { + padding: 2px 1px 2px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-collapsed-right:after { + display: none; + content: "x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 4px 5px 4px 5px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif); + background-position: 0 bottom; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-collapsed-bottom { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif); + background-position: 0 bottom; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-collapsed-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-4-4-4-4-1-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-ml { + background-position: 0 bottom; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-mr { + background-position: right bottom; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tr, +.x-panel-header-default-framed-collapsed-bottom-br, +.x-panel-header-default-framed-collapsed-bottom-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tl, +.x-panel-header-default-framed-collapsed-bottom-bl, +.x-panel-header-default-framed-collapsed-bottom-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tl, +.x-panel-header-default-framed-collapsed-bottom-bl, +.x-panel-header-default-framed-collapsed-bottom-tr, +.x-panel-header-default-framed-collapsed-bottom-br, +.x-panel-header-default-framed-collapsed-bottom-tc, +.x-panel-header-default-framed-collapsed-bottom-bc, +.x-panel-header-default-framed-collapsed-bottom-ml, +.x-panel-header-default-framed-collapsed-bottom-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-ml, +.x-panel-header-default-framed-collapsed-bottom-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-mc { + padding: 1px 2px 1px 2px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-collapsed-bottom:after { + display: none; + content: "x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 5px 4px 5px 4px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif); + background-position: left 0; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-collapsed-left { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif); + background-position: left 0; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-collapsed-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dv-4-4-4-4-1-1-1-1-5-4-5-4"); +} + +/* line 272, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tl { + background-position: 0 0; +} + +/* line 276, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tr { + background-position: 0 -4px; +} + +/* line 280, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-bl { + background-position: 0 -8px; +} + +/* line 284, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-br { + background-position: 0 -12px; +} + +/* line 288, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-ml { + background-position: -4px 0; +} + +/* line 292, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-mr { + background-position: right 0; +} + +/* line 296, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tc { + background-position: left 0; +} + +/* line 300, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-bc { + background-position: left -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tr, +.x-panel-header-default-framed-collapsed-left-br, +.x-panel-header-default-framed-collapsed-left-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tl, +.x-panel-header-default-framed-collapsed-left-bl, +.x-panel-header-default-framed-collapsed-left-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tl, +.x-panel-header-default-framed-collapsed-left-bl, +.x-panel-header-default-framed-collapsed-left-tr, +.x-panel-header-default-framed-collapsed-left-br, +.x-panel-header-default-framed-collapsed-left-tc, +.x-panel-header-default-framed-collapsed-left-bc, +.x-panel-header-default-framed-collapsed-left-ml, +.x-panel-header-default-framed-collapsed-left-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif); +} + +/* line 399, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tc, +.x-panel-header-default-framed-collapsed-left-bc { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif); + background-repeat: repeat-x; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-mc { + padding: 2px 1px 2px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-collapsed-left:after { + display: none; + content: "x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif)"; +} + +/**/ +/* */ +/* line 273, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-framed-top { + border-bottom-width: 1px !important; +} +/* line 277, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-framed-right { + border-left-width: 1px !important; +} +/* line 281, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-framed-bottom { + border-top-width: 1px !important; +} +/* line 285, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-framed-left { + border-right-width: 1px !important; +} + +/* line 291, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-top { + border-bottom-width: 0 !important; +} +/* line 295, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-right { + border-left-width: 0 !important; +} +/* line 299, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-bottom { + border-top-width: 0 !important; +} +/* line 303, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-left { + border-right-width: 0 !important; +} + +/* line 397, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-panel-header-text-container { + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-panel-header-default-framed-vertical .x-panel-header-text-container { + background-color: #d7d2d2; + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1), progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2); +} + +/* line 408, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-top { + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 412, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-right { + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset; +} + +/* line 416, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-bottom { + -webkit-box-shadow: #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 420, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-left { + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 426, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed .x-panel-header-icon { + width: 16px; + height: 16px; + background-position: center center; +} +/* line 431, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed .x-panel-header-glyph { + color: #333333; + font-size: 16px; + line-height: 16px; + opacity: 0.5; +} +/* line 447, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-ie8m .x-panel-header-default-framed .x-panel-header-glyph { + color: #858282; +} + +/* line 455, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-panel-header-icon-before-title { + margin: 0 2px 0 0; +} +/* line 465, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-panel-header-icon-after-title { + margin: 0 0 0 2px; +} + +/* line 477, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-panel-header-icon-before-title { + margin: 0 0 2px 0; +} +/* line 487, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-panel-header-icon-after-title { + margin: 2px 0 0 0; +} + +/* line 500, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-tool-after-title { + margin: 0 0 0 2px; +} +/* line 510, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-tool-before-title { + margin: 0 2px 0 0; +} + +/* line 522, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-tool-after-title { + margin: 2px 0 0 0; +} +/* line 532, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-tool-before-title { + margin: 0 0 2px 0; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-default-framed-resizable .x-panel-handle { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 103, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor { + position: absolute; + overflow: hidden; + height: 0; + width: 0; + border-style: solid; + border-width: 5px; + border-color: #868686; + zoom: 1; +} + +/* line 118, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-border-box .x-tip-anchor { + width: 10px; + height: 10px; +} + +/* line 123, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor-top { + border-top-color: transparent; + border-left-color: transparent; + border-right-color: transparent; + _border-top-color: pink; + _border-left-color: pink; + _border-right-color: pink; + _filter: chroma(color=pink); +} + +/* line 136, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor-bottom { + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: transparent; + _border-bottom-color: pink; + _border-left-color: pink; + _border-right-color: pink; + _filter: chroma(color=pink); +} + +/* line 149, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor-left { + border-top-color: transparent; + border-bottom-color: transparent; + border-left-color: transparent; + _border-top-color: pink; + _border-bottom-color: pink; + _border-left-color: pink; + _filter: chroma(color=pink); +} + +/* line 162, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor-right { + border-top-color: transparent; + border-bottom-color: transparent; + border-right-color: transparent; + _border-top-color: pink; + _border-bottom-color: pink; + _border-right-color: pink; + _filter: chroma(color=pink); +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 2px 2px 2px 2px; + border-width: 1px; + border-style: solid; + background-color: #cccccc; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-mc { + background-color: #cccccc; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tip-default { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tip-default { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tr, +.x-tip-default-br, +.x-tip-default-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tl, +.x-tip-default-bl, +.x-tip-default-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tl, +.x-tip-default-bl, +.x-tip-default-tr, +.x-tip-default-br, +.x-tip-default-tc, +.x-tip-default-bc, +.x-tip-default-ml, +.x-tip-default-mr { + zoom: 1; + background-image: url(images/tip/tip-default-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-ml, +.x-tip-default-mr { + zoom: 1; + background-image: url(images/tip/tip-default-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tip-default-tl, +.x-strict .x-ie7 .x-tip-default-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tip-default:after { + display: none; + content: "x-slicer:corners:url(images/tip/tip-default-corners.gif), sides:url(images/tip/tip-default-sides.gif)"; +} + +/**/ +/* */ +/* line 36, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-default { + border-color: #868686; +} +/* line 45, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-default .x-tool-img { + background-color: #cccccc; +} + +/* line 60, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-default .x-tool-after-title { + margin: 0 0 0 6px; +} +/* line 70, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-default .x-tool-before-title { + margin: 0 6px 0 0; +} + +/* line 81, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-body-default { + padding: 3px 3px 0 3px; +} + +/* line 85, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-text-container-default { + color: #444444; + font-size: 11px; + font-weight: bold; +} + +/* line 91, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-default { + padding: 3px; + color: #444444; + font-size: 11px; + font-weight: normal; +} +/* line 96, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-default a { + color: #2a2a2a; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 4px 4px 4px 4px; + border-width: 1px; + border-style: solid; + background-color: white; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-mc { + background-color: white; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tip-form-invalid { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tip-form-invalid { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-5-5-5-5-1-1-1-1-4-4-4-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tr, +.x-tip-form-invalid-br, +.x-tip-form-invalid-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tl, +.x-tip-form-invalid-bl, +.x-tip-form-invalid-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tl, +.x-tip-form-invalid-bl, +.x-tip-form-invalid-tr, +.x-tip-form-invalid-br, +.x-tip-form-invalid-tc, +.x-tip-form-invalid-bc, +.x-tip-form-invalid-ml, +.x-tip-form-invalid-mr { + zoom: 1; + background-image: url(images/tip/tip-form-invalid-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-ml, +.x-tip-form-invalid-mr { + zoom: 1; + background-image: url(images/tip/tip-form-invalid-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tip-form-invalid-tl, +.x-strict .x-ie7 .x-tip-form-invalid-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tip-form-invalid:after { + display: none; + content: "x-slicer:corners:url(images/tip/tip-form-invalid-corners.gif), sides:url(images/tip/tip-form-invalid-sides.gif)"; +} + +/**/ +/* */ +/* line 36, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-form-invalid { + border-color: #a1311f; + -webkit-box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; + -moz-box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; + box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; +} +/* line 45, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-form-invalid .x-tool-img { + background-color: white; +} + +/* line 60, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-form-invalid .x-tool-after-title { + margin: 0 0 0 6px; +} +/* line 70, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-form-invalid .x-tool-before-title { + margin: 0 6px 0 0; +} + +/* line 81, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-body-form-invalid { + padding: 3px 3px 0 3px; +} + +/* line 85, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-text-container-form-invalid { + color: #444444; + font-size: 11px; + font-weight: bold; +} + +/* line 91, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid { + padding: 3px 3px 3px 22px; + color: #444444; + font-size: 11px; + font-weight: normal; +} +/* line 96, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid a { + color: #2a2a2a; +} + +/* line 195, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid { + background: 1px 1px no-repeat; + background-image: url(images/form/exclamation.gif); +} +/* line 198, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid li { + margin-bottom: 4px; +} +/* line 200, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid li.last { + margin-bottom: 0; +} + +/** + * Creates a visual theme of a button group. + * @member Ext.container.ButtonGroup + */ +/* line 49, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-default { + border-color: #d0d0d0; + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 58, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-default { + margin: 2px 2px 0 2px; + padding: 1px 0; + line-height: 15px; + background: #dfdfdf; + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; +} +/* line 69, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-default .x-tool-img { + background-color: #dfdfdf; +} + +/* line 80, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-text-container-default { + font: normal 11px tahoma, arial, verdana, sans-serif; + line-height: 15px; + color: #666666; +} + +/* line 86, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body-default { + padding: 0 1px; +} +/* line 88, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body-default .x-table-layout { + border-spacing: 0; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + padding: 1px 1px 1px 1px; + border-width: 1px; + border-style: solid; + background-color: #d6d6d6; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-mc { + background-color: #d6d6d6; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-group-default-framed { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-group-default-framed { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-2-2-2-2-1-1-1-1-1-1-1-1"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tl { + background-position: 0 -4px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tr { + background-position: right -6px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-bl { + background-position: 0 -8px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-br { + background-position: right -10px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-bc { + background-position: 0 -2px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tr, +.x-btn-group-default-framed-br, +.x-btn-group-default-framed-mr { + padding-right: 2px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tl, +.x-btn-group-default-framed-bl, +.x-btn-group-default-framed-ml { + padding-left: 2px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tc { + height: 2px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-bc { + height: 2px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tl, +.x-btn-group-default-framed-bl, +.x-btn-group-default-framed-tr, +.x-btn-group-default-framed-br, +.x-btn-group-default-framed-tc, +.x-btn-group-default-framed-bc, +.x-btn-group-default-framed-ml, +.x-btn-group-default-framed-mr { + zoom: 1; + background-image: url(images/btn-group/btn-group-default-framed-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-ml, +.x-btn-group-default-framed-mr { + zoom: 1; + background-image: url(images/btn-group/btn-group-default-framed-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-group-default-framed-tl, +.x-strict .x-ie7 .x-btn-group-default-framed-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-group-default-framed:after { + display: none; + content: "x-slicer:corners:url(images/btn-group/btn-group-default-framed-corners.gif), sides:url(images/btn-group/btn-group-default-framed-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + padding: 1px 1px 1px 1px; + border-width: 1px; + border-style: solid; + background-color: #d6d6d6; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-mc { + background-color: #d6d6d6; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-group-default-framed-notitle { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-group-default-framed-notitle { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-2-2-2-2-1-1-1-1-1-1-1-1"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tl { + background-position: 0 -4px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tr { + background-position: right -6px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-bl { + background-position: 0 -8px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-br { + background-position: right -10px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-bc { + background-position: 0 -2px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tr, +.x-btn-group-default-framed-notitle-br, +.x-btn-group-default-framed-notitle-mr { + padding-right: 2px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tl, +.x-btn-group-default-framed-notitle-bl, +.x-btn-group-default-framed-notitle-ml { + padding-left: 2px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tc { + height: 2px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-bc { + height: 2px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tl, +.x-btn-group-default-framed-notitle-bl, +.x-btn-group-default-framed-notitle-tr, +.x-btn-group-default-framed-notitle-br, +.x-btn-group-default-framed-notitle-tc, +.x-btn-group-default-framed-notitle-bc, +.x-btn-group-default-framed-notitle-ml, +.x-btn-group-default-framed-notitle-mr { + zoom: 1; + background-image: url(images/btn-group/btn-group-default-framed-notitle-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-ml, +.x-btn-group-default-framed-notitle-mr { + zoom: 1; + background-image: url(images/btn-group/btn-group-default-framed-notitle-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-group-default-framed-notitle-tl, +.x-strict .x-ie7 .x-btn-group-default-framed-notitle-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-group-default-framed-notitle:after { + display: none; + content: "x-slicer:corners:url(images/btn-group/btn-group-default-framed-notitle-corners.gif), sides:url(images/btn-group/btn-group-default-framed-notitle-sides.gif)"; +} + +/**/ +/* */ +/* line 49, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-default-framed { + border-color: #d0d0d0; + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 58, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-default-framed { + margin: 2px 2px 0 2px; + padding: 1px 0; + line-height: 15px; + background: #dfdfdf; + -moz-border-radius-topleft: 2px; + -webkit-border-top-left-radius: 2px; + border-top-left-radius: 2px; + -moz-border-radius-topright: 2px; + -webkit-border-top-right-radius: 2px; + border-top-right-radius: 2px; +} +/* line 69, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-default-framed .x-tool-img { + background-color: #dfdfdf; +} + +/* line 80, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-text-container-default-framed { + font: normal 11px tahoma, arial, verdana, sans-serif; + line-height: 15px; + color: #666666; +} + +/* line 86, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body-default-framed { + padding: 0 1px 0 1px; +} +/* line 88, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body-default-framed .x-table-layout { + border-spacing: 0; +} + +/** + * Creates a visual theme for an Ext.Window + * + * @param {boolean} $ui-force-header-border + * True to force the window header to have a border on the side facing + * the window body. Overrides dock layout's border management border + * removal rules. + * + * @param {boolean} $ui-include-border-management-rules + * True to include neptune style border management rules. + * + * @param {color} $ui-wrap-border-color + * The color to apply to the border that wraps the body and docked items. + * The presence of the wrap border is controlled by the + * {@link Ext.window.Window#border border} config. Only applicable when + * $ui-include-border-management-rules is true. + * + * @param {color} $ui-wrap-border-width + * The width to apply to the border that wraps the body and docked items. + * The presence of the wrap border is controlled by the + * {@link Ext.window.Window#border border} config. Only applicable when + * $ui-include-border-management-rules is true. + * + * @member Ext.window.Window + */ +/* line 444, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-ghost { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=65); + opacity: 0.65; +} + +/* line 73, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-default { + border-color: #a9a9a9; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 4px 4px 4px 4px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-default { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-default { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-4-4-4-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tr, +.x-window-default-br, +.x-window-default-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tl, +.x-window-default-bl, +.x-window-default-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tl, +.x-window-default-bl, +.x-window-default-tr, +.x-window-default-br, +.x-window-default-tc, +.x-window-default-bc, +.x-window-default-ml, +.x-window-default-mr { + zoom: 1; + background-image: url(images/window/window-default-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-ml, +.x-window-default-mr { + zoom: 1; + background-image: url(images/window/window-default-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-default-tl, +.x-strict .x-ie7 .x-window-default-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-default:after { + display: none; + content: "x-slicer:corners:url(images/window/window-default-corners.gif), sides:url(images/window/window-default-sides.gif)"; +} + +/**/ +/* */ +/* line 94, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-body-default { + border-color: #bcb1b0; + border-width: 1px; + border-style: solid; + background: #e0e0e0; + color: black; +} + +/* line 105, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default { + font-size: 11px; + border-color: #a9a9a9; + zoom: 1; + background-color: #e8e8e8; +} +/* line 111, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default .x-tool-img { + background-color: #e8e8e8; +} + +/* line 122, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-window-header-text-container { + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-window-header-default-vertical .x-window-header-text-container { + background-color: #e8e8e8; + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1), progid:DXImageTransform.Microsoft.Chroma(color=#e8e8e8); +} + +/* line 132, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-text-container-default { + color: #333333; + font-weight: bold; + line-height: 15px; + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + padding: 0 2px 1px; + text-transform: none; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top { + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + border-top-left-radius: 5px; + -moz-border-radius-topright: 5px; + -webkit-border-top-right-radius: 5px; + border-top-right-radius: 5px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 4px 5px 0 5px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-0-0-1-1-0-1-4-5-0-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tr, +.x-window-header-default-top-br, +.x-window-header-default-top-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tl, +.x-window-header-default-top-bl, +.x-window-header-default-top-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tl, +.x-window-header-default-top-bl, +.x-window-header-default-top-tr, +.x-window-header-default-top-br, +.x-window-header-default-top-tc, +.x-window-header-default-top-bc, +.x-window-header-default-top-ml, +.x-window-header-default-top-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-ml, +.x-window-header-default-top-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-top-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-mc { + padding: 0px 1px 0 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-top-tl, +.x-strict .x-ie7 .x-window-header-default-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-top:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-top-corners.gif), sides:url(images/window-header/window-header-default-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 5px; + -webkit-border-top-right-radius: 5px; + border-top-right-radius: 5px; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-right-radius: 5px; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 5px 4px 5px 0; + border-width: 1px 1px 1px 0; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-0-5-5-0-1-1-1-0-5-4-5-0"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tr, +.x-window-header-default-right-br, +.x-window-header-default-right-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tl, +.x-window-header-default-right-bl, +.x-window-header-default-right-ml { + padding-left: 0; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tl, +.x-window-header-default-right-bl, +.x-window-header-default-right-tr, +.x-window-header-default-right-br, +.x-window-header-default-right-tc, +.x-window-header-default-right-bc, +.x-window-header-default-right-ml, +.x-window-header-default-right-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-right-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-ml, +.x-window-header-default-right-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-right-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-mc { + padding: 1px 0px 1px 0; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-right-tl, +.x-strict .x-ie7 .x-window-header-default-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-right:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-right-corners.gif), sides:url(images/window-header/window-header-default-right-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-right-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + border-bottom-left-radius: 5px; + padding: 0 5px 4px 5px; + border-width: 0 1px 1px 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-0-0-5-5-0-1-1-1-0-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tr, +.x-window-header-default-bottom-br, +.x-window-header-default-bottom-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tl, +.x-window-header-default-bottom-bl, +.x-window-header-default-bottom-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tc { + height: 0; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tl, +.x-window-header-default-bottom-bl, +.x-window-header-default-bottom-tr, +.x-window-header-default-bottom-br, +.x-window-header-default-bottom-tc, +.x-window-header-default-bottom-bc, +.x-window-header-default-bottom-ml, +.x-window-header-default-bottom-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-ml, +.x-window-header-default-bottom-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-bottom-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-mc { + padding: 0 1px 0px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-bottom-tl, +.x-strict .x-ie7 .x-window-header-default-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-bottom:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-bottom-corners.gif), sides:url(images/window-header/window-header-default-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left { + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + border-top-left-radius: 5px; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + border-bottom-left-radius: 5px; + padding: 5px 0 5px 4px; + border-width: 1px 0 1px 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-0-0-5-1-0-1-1-5-0-5-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tr, +.x-window-header-default-left-br, +.x-window-header-default-left-mr { + padding-right: 0; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tl, +.x-window-header-default-left-bl, +.x-window-header-default-left-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tl, +.x-window-header-default-left-bl, +.x-window-header-default-left-tr, +.x-window-header-default-left-br, +.x-window-header-default-left-tc, +.x-window-header-default-left-bc, +.x-window-header-default-left-ml, +.x-window-header-default-left-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-left-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-ml, +.x-window-header-default-left-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-left-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-mc { + padding: 1px 0 1px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-left-tl, +.x-strict .x-ie7 .x-window-header-default-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-left:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-left-corners.gif), sides:url(images/window-header/window-header-default-left-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 4px 5px 4px 5px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-collapsed-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-collapsed-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tr, +.x-window-header-default-collapsed-top-br, +.x-window-header-default-collapsed-top-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tl, +.x-window-header-default-collapsed-top-bl, +.x-window-header-default-collapsed-top-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tl, +.x-window-header-default-collapsed-top-bl, +.x-window-header-default-collapsed-top-tr, +.x-window-header-default-collapsed-top-br, +.x-window-header-default-collapsed-top-tc, +.x-window-header-default-collapsed-top-bc, +.x-window-header-default-collapsed-top-ml, +.x-window-header-default-collapsed-top-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-ml, +.x-window-header-default-collapsed-top-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-top-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-mc { + padding: 0px 1px 0px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-collapsed-top-tl, +.x-strict .x-ie7 .x-window-header-default-collapsed-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-collapsed-top:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-collapsed-top-corners.gif), sides:url(images/window-header/window-header-default-collapsed-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 5px 4px 5px 4px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-collapsed-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-collapsed-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-5-4-5-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tr, +.x-window-header-default-collapsed-right-br, +.x-window-header-default-collapsed-right-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tl, +.x-window-header-default-collapsed-right-bl, +.x-window-header-default-collapsed-right-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tl, +.x-window-header-default-collapsed-right-bl, +.x-window-header-default-collapsed-right-tr, +.x-window-header-default-collapsed-right-br, +.x-window-header-default-collapsed-right-tc, +.x-window-header-default-collapsed-right-bc, +.x-window-header-default-collapsed-right-ml, +.x-window-header-default-collapsed-right-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-right-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-ml, +.x-window-header-default-collapsed-right-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-right-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-mc { + padding: 1px 0px 1px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-collapsed-right-tl, +.x-strict .x-ie7 .x-window-header-default-collapsed-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-collapsed-right:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-collapsed-right-corners.gif), sides:url(images/window-header/window-header-default-collapsed-right-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 4px 5px 4px 5px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-collapsed-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-collapsed-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tr, +.x-window-header-default-collapsed-bottom-br, +.x-window-header-default-collapsed-bottom-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tl, +.x-window-header-default-collapsed-bottom-bl, +.x-window-header-default-collapsed-bottom-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tl, +.x-window-header-default-collapsed-bottom-bl, +.x-window-header-default-collapsed-bottom-tr, +.x-window-header-default-collapsed-bottom-br, +.x-window-header-default-collapsed-bottom-tc, +.x-window-header-default-collapsed-bottom-bc, +.x-window-header-default-collapsed-bottom-ml, +.x-window-header-default-collapsed-bottom-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-ml, +.x-window-header-default-collapsed-bottom-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-bottom-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-mc { + padding: 0px 1px 0px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-tl, +.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-collapsed-bottom:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-collapsed-bottom-corners.gif), sides:url(images/window-header/window-header-default-collapsed-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 5px 4px 5px 4px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-collapsed-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-collapsed-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-5-4-5-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tr, +.x-window-header-default-collapsed-left-br, +.x-window-header-default-collapsed-left-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tl, +.x-window-header-default-collapsed-left-bl, +.x-window-header-default-collapsed-left-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tl, +.x-window-header-default-collapsed-left-bl, +.x-window-header-default-collapsed-left-tr, +.x-window-header-default-collapsed-left-br, +.x-window-header-default-collapsed-left-tc, +.x-window-header-default-collapsed-left-bc, +.x-window-header-default-collapsed-left-ml, +.x-window-header-default-collapsed-left-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-left-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-ml, +.x-window-header-default-collapsed-left-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-left-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-mc { + padding: 1px 0px 1px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-collapsed-left-tl, +.x-strict .x-ie7 .x-window-header-default-collapsed-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-collapsed-left:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-collapsed-left-corners.gif), sides:url(images/window-header/window-header-default-collapsed-left-sides.gif)"; +} + +/**/ +/* */ +/* line 236, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-top { + -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; +} + +/* line 240, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-right { + -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; +} + +/* line 244, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-bottom { + -webkit-box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; +} + +/* line 248, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-left { + -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; +} + +/* line 254, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default .x-window-header-icon { + width: 16px; + height: 16px; + color: #333333; + font-size: 16px; + line-height: 16px; + background-position: center center; +} +/* line 263, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default .x-window-header-glyph { + color: #333333; + font-size: 16px; + line-height: 16px; + opacity: 0.5; +} +/* line 279, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-ie8m .x-window-header-default .x-window-header-glyph { + color: #8d8d8d; +} + +/* line 287, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-window-header-icon-before-title { + margin: 0 2px 0 0; +} +/* line 297, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-window-header-icon-after-title { + margin: 0 0 0 2px; +} + +/* line 309, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-window-header-icon-before-title { + margin: 0 0 2px 0; +} +/* line 319, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-window-header-icon-after-title { + margin: 2px 0 0 0; +} + +/* line 332, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-tool-after-title { + margin: 0 0 0 2px; +} +/* line 342, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-tool-before-title { + margin: 0 2px 0 0; +} + +/* line 354, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-tool-after-title { + margin: 2px 0 0 0; +} +/* line 364, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-tool-before-title { + margin: 0 0 2px 0; +} + +/* line 382, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-default-collapsed .x-window-header { + border-width: 1px !important; +} + +/* line 388, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-nbr .x-window-default-collapsed .x-window-header { + border-width: 0 !important; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-form-invalid-under { + padding: 2px 2px 2px 20px; + color: #c0272b; + font: normal 11px tahoma, arial, verdana, sans-serif; + line-height: 16px; + background: no-repeat 0 2px; + background-image: url(images/form/exclamation.gif); +} + +/* line 14, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +div.x-lbl-top-err-icon { + margin-bottom: 3px; +} + +/* line 18, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-form-invalid-icon { + width: 16px; + height: 16px; + margin: 0 1px; + background-image: url(images/form/exclamation.gif); + background-repeat: no-repeat; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-form-item-label { + color: black; + font: normal 12px/22px tahoma, arial, verdana, sans-serif; +} +/* line 30, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-toolbar-item .x-form-item-label { + font-size: 11px; + line-height: 20px; +} + +/* line 44, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-autocontainer-form-item, +.x-anchor-form-item, +.x-vbox-form-item, +.x-checkboxgroup-form-item, +.x-table-form-item { + margin-bottom: 5px; +} + +/* line 52, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-ie6 .x-form-form-item td { + border-top-width: 0; +} +/* line 58, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-ie6 td.x-form-item-pad { + height: 5px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Base.scss */ +.x-form-field { + color: black; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/form/field/Base.scss */ +.x-form-item, +.x-form-field { + font: normal 12px tahoma, arial, verdana, sans-serif; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/form/field/Base.scss */ +input.x-form-invalid-field, +textarea.x-form-invalid-field { + background-color: white; + background-image: url(images/grid/invalid_line.gif); + background-repeat: repeat-x; + background-position: bottom; + border-color: #cc3300; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/form/field/Base.scss */ +.x-item-disabled .x-form-item-label, +.x-item-disabled .x-form-field, +.x-item-disabled .x-form-display-field, +.x-item-disabled .x-form-cb-label, +.x-item-disabled .x-form-trigger { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-form-text { + color: black; + padding: 1px 3px 1px 3px; + background: white repeat-x 0 0; + border-width: 1px; + border-style: solid; + border-color: #b5b8c8; + background-image: url(images/form/text-bg.gif); + height: 22px; + line-height: 17px; +} +/* line 17, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-field-default-toolbar .x-form-text { + height: 20px; + line-height: 15px; +} +/* line 26, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-strict .x-ie6 .x-form-text, .x-strict .x-ie7 .x-form-text { + height: 18px; +} +/* line 32, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-strict .x-ie6 .x-field-default-toolbar .x-form-text, .x-strict .x-ie7 .x-field-default-toolbar .x-form-text { + height: 16px; +} + +/* line 40, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-form-focus { + border-color: #a1a1a1; +} + +/* line 45, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-form-empty-field, +textarea.x-form-empty-field { + color: gray; +} + + /* + In oldIE, text inputs get a mysterious extra pixel of spacing above and below. + This is targeted at IE6-IE7 (all modes) and IE9+ Quirks mode. + + IE8 quirks on Windows 7 requires this fix, but on + IE8 quirks on Windows XP, this is breaks the layout. + TODO: Check field input heights in IE8 quirks on Windows Vista. + + Since we can't specifically target a specific version of Windows via CSS, we default to fixing it the XP way, for now. + */ +/* line 61, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-quirks .x-ie9p .x-form-text, +.x-ie7m .x-form-text { + margin-top: -1px; + margin-bottom: -1px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/TextArea.scss */ +.x-form-textarea { + line-height: normal; + height: auto; + background-image: url(images/form/text-bg.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Display.scss */ +.x-form-display-field { + font: normal 12px tahoma, arial, verdana, sans-serif; + color: black; + line-height: 22px; +} +/* line 6, ../../../ext-theme-neutral/sass/src/form/field/Display.scss */ +.x-toolbar-item .x-form-display-field { + line-height: 20px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box .x-window-body { + background-color: #e8e8e8; + border-width: 0; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-info, +.x-message-box-warning, +.x-message-box-question, +.x-message-box-error { + background-position: top left; + background-repeat: no-repeat; +} + +/* line 29, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-info { + background-image: url(images/shared/icon-info.gif); +} + +/* line 33, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-warning { + background-image: url(images/shared/icon-warning.gif); +} + +/* line 37, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-question { + background-image: url(images/shared/icon-question.gif); +} + +/* line 41, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-error { + background-image: url(images/shared/icon-error.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/CheckboxGroup.scss */ +.x-form-checkboxgroup-body { + padding: 0 4px; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/form/CheckboxGroup.scss */ +.x-form-invalid .x-form-checkboxgroup-body { + border: 1px solid #cc3300; + background-image: url(images/grid/invalid_line.gif); + background-repeat: repeat-x; + background-position: bottom; +} + +/* line 16, ../../../ext-theme-neutral/sass/src/form/CheckboxGroup.scss */ +.x-check-group-alt { + background: #d5d5d5; + border-top: 1px dotted #b4b4b4; + border-bottom: 1px dotted #b4b4b4; +} + +/* line 22, ../../../ext-theme-neutral/sass/src/form/CheckboxGroup.scss */ +.x-form-check-group-label { + color: black; + padding: 2px; + margin: 0 30px 5px 0; + border-width: 0 0 1px 0; + border-style: solid; + border-color: black; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset { + border: 1px solid #b5b8c8; + padding: 0 10px; + margin: 0 0 10px; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie8m .x-fieldset, +.x-quirks .x-ie .x-fieldset { + padding-top: 0; +} +/* line 13, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie8m .x-fieldset .x-fieldset-body, +.x-quirks .x-ie .x-fieldset .x-fieldset-body { + padding-top: 0; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header-checkbox { + line-height: 14px; + margin: 1px 3px 0 0; +} + +/* line 24, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header { + padding: 0 3px 1px; +} +/* line 27, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-tool { + margin-top: 1px; + padding: 0; +} +/* line 33, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-form-cb-wrap { + padding: 1px 0; +} + +/* line 39, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header-text { + font: 11px/14px bold tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 1px 0; +} + +/* line 44, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header-text-collapsible { + cursor: pointer; +} + +/* line 50, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-with-title .x-fieldset-header-checkbox, +.x-fieldset-with-title .x-tool { + margin: 1px 3px 0 0; +} + +/* line 66, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-webkit .x-fieldset-header { + -webkit-padding-start: 3px; + -webkit-padding-end: 3px; +} + +/* line 76, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-opera .x-fieldset-with-legend { + margin-top: -1px; +} +/* line 79, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-opera.x-mac .x-fieldset-header-text { + padding: 2px 0 0; +} + +/* line 87, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-strict .x-ie8 .x-fieldset-header { + margin-bottom: -1px; +} +/* line 91, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-strict .x-ie8 .x-fieldset-header .x-tool, +.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-text, +.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-checkbox { + position: relative; + top: -1px; +} + +/* line 101, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-quirks .x-ie .x-fieldset-header, +.x-ie8m .x-fieldset-header { + padding-left: 1px; + padding-right: 1px; +} + +/* line 109, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-collapsed .x-fieldset-body { + display: none; +} + +/* line 114, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-collapsed { + padding-bottom: 0 !important; + border-width: 1px 1px 0 1px !important; + border-left-color: transparent !important; + border-right-color: transparent !important; +} + +/* line 123, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie6 .x-fieldset-collapsed { + border-width: 1px 0 0 0 !important; + padding-bottom: 0 !important; + margin-left: 1px; + margin-right: 1px; +} + +/* line 131, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie .x-fieldset-bwrap { + zoom: 1; +} + +/* line 137, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset .x-tool-toggle { + background-position: 0 -60px; +} +/* line 144, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset .x-tool-over .x-tool-toggle { + background-position: -15px -60px; +} + +/* line 151, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-collapsed .x-tool-toggle { + background-position: 0 -75px; +} +/* line 156, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-collapsed .x-tool-over .x-tool-toggle { + background-position: -15px -75px; +} + +/* IE legend positioning bug */ +/* line 164, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie .x-fieldset-noborder legend { + position: relative; + margin-bottom: 23px; +} + +/* line 170, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie .x-fieldset-noborder legend span { + position: absolute; + left: 16px; +} + +/* line 176, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset { + overflow: hidden; +} + +/* line 180, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-bwrap { + overflow: hidden; + zoom: 1; +} + +/* line 186, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-body { + overflow: hidden; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-wrap { + line-height: 22px; +} +/* line 4, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-toolbar-item .x-form-cb-wrap { + line-height: 20px; +} + +/* line 10, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb { + margin-top: 5px; +} +/* line 13, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-toolbar-item .x-form-cb { + margin-top: 4px; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-checkbox { + width: 13px; + height: 13px; + background: url(images/form/checkbox.gif) no-repeat; +} + +/* line 25, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-checked .x-form-checkbox { + background-position: 0 -13px; +} + +/* Focused */ +/* line 30, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-checkbox-focus { + background-position: -13px 0; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-checked .x-form-checkbox-focus { + background-position: -13px -13px; +} + +/* boxLabel */ +/* line 40, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-label-before { + margin-right: 4px; +} + +/* line 51, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-label-after { + margin-left: 4px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger { + background: url(images/form/trigger.gif); + width: 17px; +} + +/* line 12, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-trigger-cell { + background-color: white; + width: 17px; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger-over { + background-position: -17px 0; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger-wrap-focus .x-form-trigger { + background-position: -51px 0; +} + +/* line 25, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger-wrap-focus .x-form-trigger-over { + background-position: -68px 0; +} + +/* line 30, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger-click, +.x-form-trigger-wrap-focus .x-form-trigger-click { + background-position: -34px 0; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-clear-trigger { + background-image: url(images/form/clear-trigger.gif); +} + +/* line 44, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-search-trigger { + background-image: url(images/form/search-trigger.gif); +} + +/* line 58, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-quirks .prefixie6 .x-form-trigger-input-cell { + height: 22px; +} +/* line 62, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-quirks .prefixie6 .x-field-default-toolbar .x-form-trigger-input-cell { + height: 20px; +} + +/* line 2, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-spinner-up, +.x-form-spinner-down { + background-image: url(images/form/spinner.gif); + background-color: white; + width: 17px !important; + height: 11px !important; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-spinner-down { + background-position: 0 -11px; +} + +/* line 23, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-trigger-wrap-focus .x-form-spinner-down { + background-position: -51px -11px; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-trigger-wrap .x-form-spinner-down-over { + background-position: -17px -11px; +} + +/* line 29, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-trigger-wrap-focus .x-form-spinner-down-over { + background-position: -68px -11px; +} + +/* line 32, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-trigger-wrap .x-form-spinner-down-click { + background-position: -34px -11px; +} + +/* line 41, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-spinner-up, +.x-toolbar-item .x-form-spinner-down { + background-image: url(images/form/spinner-small.gif); + height: 10px !important; +} +/* line 45, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-spinner-down { + background-position: 0 -10px; +} +/* line 48, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down { + background-position: -51px -10px; +} +/* line 51, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-over { + background-position: -17px -10px; +} +/* line 54, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down-over { + background-position: -68px -10px; +} +/* line 57, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-click { + background-position: -34px -10px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-number { + width: 30px; +} + +/* line 5, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-first { + background-image: url(images/grid/page-first.gif); +} + +/* line 9, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-prev { + background-image: url(images/grid/page-prev.gif); +} + +/* line 13, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-next { + background-image: url(images/grid/page-next.gif); +} + +/* line 17, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-last { + background-image: url(images/grid/page-last.gif); +} + +/* line 21, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-loading { + background-image: url(images/grid/refresh.gif); +} + +/* line 27, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-page-first { + background-image: url(images/grid/page-first-disabled.gif); +} +/* line 31, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-page-prev { + background-image: url(images/grid/page-prev-disabled.gif); +} +/* line 35, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-page-next { + background-image: url(images/grid/page-next-disabled.gif); +} +/* line 39, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-page-last { + background-image: url(images/grid/page-last-disabled.gif); +} +/* line 43, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-loading { + background-image: url(images/grid/refresh-disabled.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist { + border-width: 1px; + border-style: solid; + border-color: #b5b8c8; + background: white; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-strict .x-ie6 .x-boundlist-list-ct, +.x-strict .x-ie7 .x-boundlist-list-ct { + position: relative; +} + +/* line 20, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-item { + padding: 0 3px; + line-height: 20px; + cursor: pointer; + cursor: hand; + position: relative; + /*allow hover in IE on empty items*/ + zoom: 1; + border-width: 1px; + border-style: dotted; + border-color: white; +} + +/* line 38, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-selected { + background: #d3d3d3; + border-color: #b3abaa; +} + +/* line 43, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-item-over { + background: #e0e0e0; + border-color: #bfb8b8; +} + +/* line 48, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-floating { + border-top-width: 0; +} + +/* line 52, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-above { + border-top-width: 1px; + border-bottom-width: 1px; +} + +/* line 9, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker { + border-width: 1px; + border-style: solid; + border-color: #585858; + background-color: white; + width: 177px; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-header { + padding: 3px 6px; + text-align: center; + background-image: none; + background-color: #6f6f6f; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #777777), color-stop(100%, #656565)); + background-image: -webkit-linear-gradient(top, #777777, #656565); + background-image: -moz-linear-gradient(top, #777777, #656565); + background-image: -o-linear-gradient(top, #777777, #656565); + background-image: linear-gradient(top, #777777, #656565); +} + +/* line 32, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-arrow { + width: 15px; + height: 15px; + top: 6px; + cursor: pointer; + background-color: #6f6f6f; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); + opacity: 0.7; +} + +/* line 50, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +a.x-datepicker-arrow:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +/* line 55, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-next { + right: 6px; + background-image: url(images/shared/right-btn.gif); +} + +/* line 60, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-prev { + left: 6px; + background-image: url(images/shared/left-btn.gif); +} + +/* line 76, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-month .x-btn, +.x-datepicker-month .x-btn .x-btn-tc, +.x-datepicker-month .x-btn .x-btn-tl, +.x-datepicker-month .x-btn .x-btn-tr, +.x-datepicker-month .x-btn .x-btn-mc, +.x-datepicker-month .x-btn .x-btn-ml, +.x-datepicker-month .x-btn .x-btn-mr, +.x-datepicker-month .x-btn .x-btn-bc, +.x-datepicker-month .x-btn .x-btn-bl, +.x-datepicker-month .x-btn .x-btn-br { + background: transparent; + border-width: 0 !important; +} +/* line 83, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-month .x-btn-inner { + color: white; +} +/* line 88, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-month .x-btn-split-right { + background-image: url(images/button/s-arrow-light.gif); + padding-right: 12px; +} + +/* line 94, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-column-header { + width: 25px; + color: #3e3e3e; + font: normal 10px tahoma, arial, verdana, sans-serif; + text-align: right; + border-width: 0 0 1px; + border-style: solid; + border-color: #d0d0d0; + background-image: none; + background-color: #e9e9e9; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f1f1f1), color-stop(100%, #dfdfdf)); + background-image: -webkit-linear-gradient(top, #f1f1f1, #dfdfdf); + background-image: -moz-linear-gradient(top, #f1f1f1, #dfdfdf); + background-image: -o-linear-gradient(top, #f1f1f1, #dfdfdf); + background-image: linear-gradient(top, #f1f1f1, #dfdfdf); +} + +/* line 113, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-column-header-inner { + line-height: 19px; + padding: 0 7px 0 0; +} + +/* line 118, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-cell { + text-align: right; + border-width: 1px; + border-style: solid; + border-color: white; +} + +/* line 128, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-date { + padding: 0 4px 0 0; + font: normal 11px tahoma, arial, verdana, sans-serif; + color: black; + cursor: pointer; + line-height: 18px; +} + +/* line 138, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +a.x-datepicker-date:hover { + color: black; + background-color: transparent; +} + +/* line 143, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-selected { + border-style: solid; + border-color: #b2aaa9; +} +/* line 146, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-selected .x-datepicker-date { + background-color: #d8d8d8; + font-weight: bold; +} + +/* line 152, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-today { + border-color: darkred; + border-style: solid; +} + +/* line 159, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-prevday .x-datepicker-date, +.x-datepicker-nextday .x-datepicker-date { + color: #aaaaaa; +} + +/* line 166, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-disabled a.x-datepicker-date { + background-color: #eeeeee; + cursor: default; + color: #bbbbbb; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-disabled a.x-datepicker-date:hover { + background-color: #eeeeee; +} + +/* line 179, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-footer, +.x-monthpicker-buttons { + padding: 4px 0; + border-width: 1px 0 0; + border-style: solid; + border-color: #d0d0d0; + background-image: none; + background-color: #e9e9e9; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dfdfdf), color-stop(49%, #d6d6d6), color-stop(51%, #d0d0d0), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); + background-image: -moz-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); + background-image: -o-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); + background-image: linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); + text-align: center; +} +/* line 195, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-footer .x-btn, +.x-monthpicker-buttons .x-btn { + margin: 0 2px 0 2px; +} + +/* line 201, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker { + width: 177px; + border-width: 1px; + border-style: solid; + border-color: #585858; + background-color: white; +} + +/* line 211, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-months { + border-width: 0 1px 0 0; + border-color: #585858; + border-style: solid; + width: 87px; +} +/* line 220, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-months .x-monthpicker-item { + width: 43px; +} + +/* line 225, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-years { + width: 88px; +} +/* line 228, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-years .x-monthpicker-item { + width: 44px; +} + +/* line 233, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-item { + margin: 5px 0 4px; + font: normal 11px tahoma, arial, verdana, sans-serif; + text-align: center; +} + +/* line 239, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-item-inner { + margin: 0 5px 0 5px; + color: #523a39; + border-width: 1px; + border-style: solid; + border-color: white; + line-height: 16px; + cursor: pointer; +} + +/* line 254, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +a.x-monthpicker-item-inner:hover { + background-color: transparent; +} + +/* line 258, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-selected { + background-color: #d8d8d8; + border-style: solid; + border-color: #b2aaa9; +} + +/* line 264, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav { + height: 27px; +} + +/* line 268, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-button-ct { + width: 44px; +} + +/* line 272, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-button { + height: 15px; + width: 15px; + cursor: pointer; + margin-top: 6px; + background-color: white; +} + +/* line 294, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-next { + background-image: url(images/tools/tool-sprites.gif); + background-position: 0 -120px; +} + +/* line 299, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-next-over { + background-position: -15px -120px; +} + +/* line 303, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-prev { + background-image: url(images/tools/tool-sprites.gif); + background-position: 0 -105px; +} + +/* line 308, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-prev-over { + background-position: -15px -105px; +} + +/* line 313, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-small .x-monthpicker-item { + margin: 2px 0 2px; +} +/* line 317, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-small .x-monthpicker-item-inner { + margin: 0 5px 0 5px; +} +/* line 321, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-small .x-monthpicker-yearnav { + height: 22px; +} +/* line 325, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-small .x-monthpicker-yearnav-button { + margin-top: 3px; +} + +/* line 334, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-nlg .x-datepicker-header { + background-image: url(images/datepicker/datepicker-header-bg.gif); + background-repeat: repeat-x; + background-position: top left; +} +/* line 343, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-nlg .x-datepicker-footer, +.x-nlg .x-monthpicker-buttons { + background-image: url(images/datepicker/datepicker-footer-bg.gif); + background-repeat: repeat-x; + background-position: top left; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-datepicker-header:after { + display: none; + content: "x-slicer:bg:url(images/datepicker/datepicker-header-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-datepicker-footer:after { + display: none; + content: "x-slicer:bg:url(images/datepicker/datepicker-footer-bg.gif)"; +} + +/**/ +/* */ +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Date.scss */ +.x-form-date-trigger { + background-image: url(images/form/date-trigger.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/File.scss */ +.x-form-file-wrap .x-form-text { + color: gray; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-color-picker { + width: 144px; + height: 90px; + background-color: white; + border-color: white; + border-width: 0; + border-style: solid; +} + +/* line 10, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-color-picker-item { + width: 18px; + height: 18px; + border-width: 1px; + border-color: white; + border-style: solid; + background-color: white; + cursor: pointer; + padding: 2px; +} +/* line 20, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-strict .x-ie7 .x-color-picker-item { + width: 12px; + height: 12px; +} + +/* line 28, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +a.x-color-picker-item:hover { + border-color: #8bb8f3; + background-color: #deecfd; +} + +/* line 33, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-color-picker-selected { + border-color: #8bb8f3; + background-color: #deecfd; +} + +/* line 38, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-color-picker-item-inner { + line-height: 10px; + border-color: #aca899; + border-width: 1px; + border-style: solid; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-btn-text { + background: transparent no-repeat; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 7, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-bold, +.x-menu-item div.x-edit-bold { + background-position: 0 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 13, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-italic, +.x-menu-item div.x-edit-italic { + background-position: -16px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 19, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-underline, +.x-menu-item div.x-edit-underline { + background-position: -32px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 25, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-forecolor, +.x-menu-item div.x-edit-forecolor { + background-position: -160px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 31, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-backcolor, +.x-menu-item div.x-edit-backcolor { + background-position: -176px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 37, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-justifyleft, +.x-menu-item div.x-edit-justifyleft { + background-position: -112px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 43, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-justifycenter, +.x-menu-item div.x-edit-justifycenter { + background-position: -128px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 49, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-justifyright, +.x-menu-item div.x-edit-justifyright { + background-position: -144px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 55, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-insertorderedlist, +.x-menu-item div.x-edit-insertorderedlist { + background-position: -80px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 61, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-insertunorderedlist, +.x-menu-item div.x-edit-insertunorderedlist { + background-position: -96px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 67, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-increasefontsize, +.x-menu-item div.x-edit-increasefontsize { + background-position: -48px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 73, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-decreasefontsize, +.x-menu-item div.x-edit-decreasefontsize { + background-position: -64px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 79, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-sourceedit, +.x-menu-item div.x-edit-sourceedit { + background-position: -192px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 85, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-createlink, +.x-menu-item div.x-edit-createlink { + background-position: -208px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 90, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tip .x-tip-bd .x-tip-bd-inner { + padding: 5px; + padding-bottom: 1px; +} + +/* line 95, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-font-select { + font-size: 11px; + font-family: inherit; +} + +/* line 100, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-wrap textarea { + font: normal 12px tahoma, arial, verdana, sans-serif; + background-color: white; + resize: none; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Radio.scss */ +.x-form-radio { + width: 13px; + height: 13px; + background: url(images/form/radio.gif) no-repeat; +} + +/* line 7, ../../../ext-theme-neutral/sass/src/form/field/Radio.scss */ +.x-form-cb-checked .x-form-radio { + background-position: 0 -13px; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/form/field/Radio.scss */ +.x-form-radio-focus { + background-position: -13px 0; +} + +/* line 15, ../../../ext-theme-neutral/sass/src/form/field/Radio.scss */ +.x-form-cb-checked .x-form-radio-focus { + background-position: -13px -13px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-body { + background: white; + border-width: 1px; + border-style: solid; + border-color: #d0d0d0; +} + +/* line 8, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-empty { + padding: 10px; + color: gray; + font: normal 11px tahoma, arial, helvetica, sans-serif; +} + +/* line 14, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-view { + overflow: hidden; + position: relative; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-table { + table-layout: fixed; + border-collapse: separate; +} + +/* line 25, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row .x-grid-cell { + color: null; + font: normal 11px/13px tahoma, arial, verdana, sans-serif; + background-color: white; + border-color: white; + border-style: solid; + border-width: 1px 0; +} + +/* line 37, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-with-row-lines .x-grid-cell { + border-width: 1px 0; + border-top-color: #fafafa; + border-bottom-color: #ededed; +} + +/* line 43, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-alt .x-grid-td { + background-color: #fafafa; +} + +/* line 47, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-over .x-grid-td { + border-color: #dddddd; + background-color: #efefef; +} + +/* line 52, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-focused .x-grid-td { + border-top: 1px dotted #464646 !important; + border-bottom: 1px dotted #464646 !important; + background-color: #efefef; +} + +/* line 59, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-selected .x-grid-td { + border-style: dotted; + border-color: #bfb8b8; + background-color: #e0e0e0 !important; +} + +/* line 68, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-selected .x-grid-row-summary .x-grid-td { + border-bottom-color: #e0e0e0 !important; + border-top-width: 0!important; +} + +/* line 72, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-focused .x-grid-row-summary .x-grid-td { + border-bottom-color: #efefef !important; + border-top-width: 0!important; +} + +/* line 77, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell { + overflow: hidden; + border-color: white; + vertical-align: middle; +} + +/* line 84, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell-special, .x-grid-cell-checkcolumn, .x-action-col-cell { + vertical-align: top; +} + +/* line 88, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell-inner { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + line-height: 13px; + padding: 2px 6px 4px; + white-space: nowrap; +} + +/* line 102, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row .x-grid-cell-special { + padding: 0; + border-right: 1px solid #c6c6c6; + background-image: none; + background-color: #f6f6f6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f6f6f6), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #f6f6f6, #e9e9e9); + background-image: -moz-linear-gradient(top, #f6f6f6, #e9e9e9); + background-image: -o-linear-gradient(top, #f6f6f6, #e9e9e9); + background-image: linear-gradient(top, #f6f6f6, #e9e9e9); +} + +/* line 123, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-selected .x-grid-cell-special { + border-right: 1px solid #d4b7b7; + background-image: none; + background-color: #e0e0e0; + background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #e0e0e0), color-stop(100%, #d3d3d3)); + background-image: -webkit-linear-gradient(left, #e0e0e0, #d3d3d3); + background-image: -moz-linear-gradient(left, #e0e0e0, #d3d3d3); + background-image: -o-linear-gradient(left, #e0e0e0, #d3d3d3); + background-image: linear-gradient(left, #e0e0e0, #d3d3d3); +} + +/* line 136, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell-special .x-grid-cell-inner { + padding-left: 4px; + padding-right: 4px; + zoom: 1; +} + +/* line 146, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-nlg .x-grid-cell-special { + background-repeat: repeat-y; + background-position: top right; +} +/* line 153, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-nlg .x-grid-row .x-grid-cell-special, +.x-nlg .x-grid-row-over .x-grid-cell-special { + background-image: url(images/grid/cell-special-bg.gif); +} +/* line 161, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-nlg .x-grid-row-focused .x-grid-cell-special, +.x-nlg .x-grid-row-selected .x-grid-cell-special { + background-image: url(images/grid/cell-special-selected-bg.gif); +} + +/* line 169, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-dirty-cell { + background-image: url(images/grid/dirty.gif); + background-position: 0 0; + background-repeat: no-repeat; +} + +/* line 182, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell-selected { + background-color: #B8CFEE !important; +} + +/* line 187, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-with-col-lines .x-grid-cell { + padding-right: 0; + border-right: 1px solid #c6c6c6; +} + +/* line 200, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-resize-marker { + position: absolute; + z-index: 5; + top: 0; + width: 1px; + background-color: #0f0f0f; +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/header/DropZone.scss */ +.col-move-top, +.col-move-bottom { + width: 9px; + height: 9px; + position: absolute; + top: 0; + line-height: 0; + font-size: 0; + overflow: hidden; + z-index: 20000; + background: no-repeat center top transparent; +} + +/* line 15, ../../../ext-theme-neutral/sass/src/grid/header/DropZone.scss */ +.col-move-top { + background-image: url(images/grid/col-move-top.gif); +} + +/* line 19, ../../../ext-theme-neutral/sass/src/grid/header/DropZone.scss */ +.col-move-bottom { + background-image: url(images/grid/col-move-bottom.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-grid-header-ct { + cursor: default; + zoom: 1; + padding: 0; + border: 1px solid #d0d0d0; + border-bottom-color: #c5c5c5; + background-image: none; + background-color: #c5c5c5; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f9f9f9), color-stop(100%, #e3e4e6)); + background-image: -webkit-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: -moz-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: -o-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: linear-gradient(top, #f9f9f9, #e3e4e6); +} + +/* line 16, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-accordion-item .x-grid-header-ct { + border-width: 0 0 1px !important; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-accordion-item .x-grid-header-ct-hidden { + border: 0 !important; +} + +/* line 30, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-grid-body { + border-top-color: #c5c5c5; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-hmenu-sort-asc .x-menu-item-icon { + background-image: url(images/grid/hmenu-asc.gif); +} + +/* line 38, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-hmenu-sort-desc .x-menu-item-icon { + background-image: url(images/grid/hmenu-desc.gif); +} + +/* line 42, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-cols-icon .x-menu-item-icon { + background-image: url(images/grid/columns.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header { + padding: 0; + position: absolute; + overflow: hidden; + border: 0 none; + border-right: 1px solid #c5c5c5; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.3); + color: black; + font: normal 11px tahoma, arial, verdana, sans-serif; + background-image: none; + background-color: #c5c5c5; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f9f9f9), color-stop(100%, #e3e4e6)); + background-image: -webkit-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: -moz-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: -o-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: linear-gradient(top, #f9f9f9, #e3e4e6); +} + +/* line 31, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-group-header { + padding: 0; + border-left-width: 0; +} + +/* line 35, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-group-sub-header { + background: transparent; + border-top: 1px solid #c5c5c5; + border-left-width: 0; +} +/* line 41, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-group-sub-header .x-column-header-inner { + padding: 4px 6px 5px 6px; +} + +/* line 46, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-inner { + zoom: 1; + white-space: nowrap; + padding: 5px 6px 5px 6px; + position: relative; +} +/* line 51, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-inner .x-column-header-text { + white-space: nowrap; +} + +/* line 72, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-over, +.x-column-header-sort-ASC, +.x-column-header-sort-DESC { + background-image: none; + background-color: #f0f0f0; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #f0f0f0)); + background-image: -webkit-linear-gradient(top, #ffffff, #f0f0f0); + background-image: -moz-linear-gradient(top, #ffffff, #f0f0f0); + background-image: -o-linear-gradient(top, #ffffff, #f0f0f0); + background-image: linear-gradient(top, #ffffff, #f0f0f0); +} + +/* line 80, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-nlg .x-grid-header-ct, +.x-nlg .x-column-header { + background: repeat-x 0 top; + background-image: url(images/grid/column-header-bg.gif); +} +/* line 87, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-nlg .x-column-header-over, +.x-nlg .x-column-header-sort-ASC, +.x-nlg .x-column-header-sort-DESC { + background: #ebf3fd repeat-x 0 top; + background-image: url(images/grid/column-header-over-bg.gif); +} + +/* line 94, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-trigger { + display: none; + height: 100%; + width: 14px; + background-repeat: no-repeat; + position: absolute; + right: 0; + top: 0; + z-index: 2; + cursor: pointer; +} + +/* line 114, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-over .x-column-header-trigger, .x-column-header-open .x-column-header-trigger { + display: block; +} + +/* line 119, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-align-right { + text-align: right; +} +/* line 122, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-align-right .x-column-header-text { + margin-right: 10px; +} + +/* line 140, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-align-center { + text-align: center; +} + +/* line 143, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-align-left { + text-align: left; +} + +/* line 150, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-sort-ASC .x-column-header-text, +.x-column-header-sort-DESC .x-column-header-text { + padding-right: 12px; + background-repeat: no-repeat; + background-position: right center; +} + +/* line 168, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-sort-ASC .x-column-header-text { + background-image: url(images/grid/sort_asc.gif); +} + +/* line 171, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-sort-DESC .x-column-header-text { + background-image: url(images/grid/sort_desc.gif); +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-column-header:after { + display: none; + content: "x-slicer:bg:url(images/grid/column-header-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-column-header-over:after { + display: none; + content: "x-slicer:bg:url(images/grid/column-header-over-bg.gif)"; +} + +/**/ +/* */ +/* line 1, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-grid-drop-indicator { + position: absolute; + height: 1px; + line-height: 0px; + background-color: #77BC71; + overflow: visible; + pointer-events: none; +} +/* line 9, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-grid-drop-indicator .x-grid-drop-indicator-left { + position: absolute; + top: -8px; + left: -12px; + background-image: url(images/grid/dd-insert-arrow-right.png); + height: 16px; + width: 16px; +} +/* line 18, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-grid-drop-indicator .x-grid-drop-indicator-right { + position: absolute; + top: -8px; + right: -11px; + background-image: url(images/grid/dd-insert-arrow-left.png); + height: 16px; + width: 16px; +} + +/* line 29, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-ie6 .x-grid-drop-indicator-left { + background-image: url(images/grid/dd-insert-arrow-right.gif); +} +/* line 33, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-ie6 .x-grid-drop-indicator-right { + background-image: url(images/grid/dd-insert-arrow-left.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/column/Action.scss */ +.x-action-col-cell .x-grid-cell-inner { + padding: 1px 2px 0 4px !important; +} + +/* line 7, ../../../ext-theme-neutral/sass/src/grid/column/Action.scss */ +.x-action-col-cell .x-item-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/grid/column/Action.scss */ +.x-grid-with-row-lines .x-action-col-cell .x-grid-cell-inner { + padding-top: 1px; +} + +/* line 15, ../../../ext-theme-neutral/sass/src/grid/column/Action.scss */ +.x-action-col-icon { + height: 16px; + width: 16px; + cursor: pointer; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/column/CheckColumn.scss */ +.x-grid-cell-checkcolumn .x-grid-cell-inner { + padding-top: 3px !important; + padding-bottom: 0!important; +} + +/* line 7, ../../../ext-theme-neutral/sass/src/grid/column/CheckColumn.scss */ +.x-grid-checkcolumn { + width: 13px; + height: 13px; + background: url(images/form/checkbox.gif) 0 0 no-repeat; +} +/* line 12, ../../../ext-theme-neutral/sass/src/grid/column/CheckColumn.scss */ +.x-item-disabled .x-grid-checkcolumn { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/grid/column/CheckColumn.scss */ +.x-grid-checkcolumn-checked { + background-position: 0 -13px; +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group, +.x-grid-group-body, +.x-grid-group-hd { + zoom: 1; +} + +/* line 7, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-hd { + padding: 10px 4px 4px 4px; + background: white; + border-width: 0 0 2px 0; + border-style: solid; + border-color: #bcb1b0; + cursor: pointer; + white-space: nowrap; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-hd-not-collapsible { + cursor: default; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-hd-collapsible .x-grid-group-title { + background-color: transparent; + background-repeat: no-repeat; + background-position: left center; + background-image: url(images/grid/group-collapse.gif); + padding: 0 0 0 14px; +} + +/* line 42, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-title { + color: #616161; + font: bold 11px tahoma, arial, verdana, sans-serif; +} + +/* line 48, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-hd-collapsed .x-grid-group-title { + background-image: url(images/grid/group-expand.gif); +} + +/* line 53, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-collapsed .x-grid-group-title { + background-image: url(images/grid/group-expand.gif); +} + +/* line 57, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-row-body-hidden, .x-grid-group-collapsed { + display: none; +} + +/* line 61, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-group-by-icon { + background-image: url(images/grid/group-by.gif); +} + +/* line 65, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-show-groups-icon { + background-image: url(images/grid/group-by.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-grid-rowbody { + font: normal 11px/13px tahoma, arial, verdana, sans-serif; + padding: 0; +} +/* line 6, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-grid-rowbody p { + margin: 5px 5px 10px 5px; +} + +/* line 12, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-ie6 .x-grid-rowbody { + width: 100%; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-grid-row-body-hidden { + display: none; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-grid-row-selected .x-grid-rowbody { + background-color: #e0e0e0 !important; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/feature/RowWrap.scss */ +.x-grid-rowwrap { + border-width: 1px 0; + border-color: #ededed; + border-style: solid; + border-top-color: #fafafa; + overflow: hidden; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/grid/feature/RowWrap.scss */ +.x-grid-rowwrap .x-grid-cell, +.x-grid-rowwrap .x-grid-cell-inner { + border-width: 0; + background-color: transparent; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/grid/feature/RowWrap.scss */ +.x-grid-row-focused .x-grid-rowwrap .x-grid-cell { + border-top-width: 0 !important; + border-bottom-width: 0 !important; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/feature/Summary.scss */ +.x-summary-bottom { + border-bottom-color: #c5c5c5; +} + +/* line 5, ../../../ext-theme-neutral/sass/src/grid/feature/Summary.scss */ +.x-docked-summary { + border-width: 1px; + border-color: #d0d0d0; + border-style: solid; +} + +/* line 14, ../../../ext-theme-neutral/sass/src/grid/feature/Summary.scss */ +.x-grid-row-summary .x-grid-cell, +.x-grid-row-summary .x-grid-rowwrap, +.x-grid-row-summary .x-grid-cell-rowbody { + border-color: #ededed; + background-color: transparent !important; + border-top-width: 0; + font: normal 11px/13px tahoma, arial, verdana, sans-serif; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-grid-locked .x-grid-inner-locked { + border-width: 0 1px 0 0; + border-style: solid; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-grid-inner-locked .x-column-header-last, +.x-grid-inner-locked .x-grid-cell-last { + border-right-width: 0!important; +} + +/* line 39, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-hmenu-lock .x-menu-item-icon { + background-image: url(images/grid/hmenu-lock.gif); +} + +/* line 43, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-hmenu-unlock .x-menu-item-icon { + background-image: url(images/grid/hmenu-unlock.gif); +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-cb-wrap { + text-align: center; +} +/* line 7, ../../../ext-theme-neutral/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-text { + font: normal 11px/15px tahoma, arial, verdana, sans-serif; +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-grid-cell-editor .x-form-text { + padding: 0 4px; +} +/* line 6, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-grid-cell-editor .x-form-cb-wrap { + padding-top: 3px; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-ie .x-grid-cell-editor .x-form-text { + padding-left: 5px; +} + +/* line 20, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-opera .x-grid-cell-editor .x-form-text { + padding-left: 5px; +} + +/* line 27, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-grid-editor-on-text-node .x-form-text { + padding-left: 1px; + padding-right: 1px; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-ie .x-grid-editor-on-text-node .x-form-text { + padding-left: 2px; + padding-right: 2px; +} + +/* line 40, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-opera .x-grid-editor-on-text-node .x-form-text { + padding-left: 2px; + padding-right: 2px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor { + position: absolute !important; + z-index: 1; + zoom: 1; + overflow: visible !important; +} +/* line 7, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-form-display-field { + font: normal 11px/15px tahoma, arial, verdana, sans-serif; +} +/* line 11, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-panel-body { + border-top: 1px solid #d0d0d0 !important; + border-bottom: 1px solid #d0d0d0 !important; + padding: 4px 0 4px 0; + background-color: #ebe6e6; +} +/* line 17, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-form-cb { + margin-top: 0; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-right-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + border-bottom-left-radius: 5px; + padding: 4px 4px 4px 4px; + border-width: 0 1px 1px 1px; + border-style: solid; + background-color: #ebe6e6; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-mc { + background-color: #ebe6e6; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-grid-row-editor-buttons { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-grid-row-editor-buttons { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-0-0-5-5-0-1-1-1-4-4-4-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tr, +.x-grid-row-editor-buttons-br, +.x-grid-row-editor-buttons-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tl, +.x-grid-row-editor-buttons-bl, +.x-grid-row-editor-buttons-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tc { + height: 0; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tl, +.x-grid-row-editor-buttons-bl, +.x-grid-row-editor-buttons-tr, +.x-grid-row-editor-buttons-br, +.x-grid-row-editor-buttons-tc, +.x-grid-row-editor-buttons-bc, +.x-grid-row-editor-buttons-ml, +.x-grid-row-editor-buttons-mr { + zoom: 1; + background-image: url(images/grid-row-editor-buttons/null-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-ml, +.x-grid-row-editor-buttons-mr { + zoom: 1; + background-image: url(images/grid-row-editor-buttons/null-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-mc { + padding: 4px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-grid-row-editor-buttons-tl, +.x-strict .x-ie7 .x-grid-row-editor-buttons-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-grid-row-editor-buttons:after { + display: none; + content: "x-slicer:corners:url(images/grid-row-editor-buttons/null-corners.gif), sides:url(images/grid-row-editor-buttons/null-sides.gif)"; +} + +/**/ +/* */ +/* line 33, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor-buttons { + border-color: #d0d0d0; +} + +/* line 37, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-row-editor-update-button { + margin-right: 2px; +} + +/* line 40, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-row-editor-cancel-button { + margin-left: 2px; +} + +/* line 63, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor-errors ul { + margin-left: 5px; +} +/* line 66, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor-errors li { + list-style: disc; + margin-left: 15px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/plugin/RowExpander.scss */ +.x-grid-row-expander { + background-image: url(images/grid/group-collapse.gif); + width: 9px; + height: 9px; + float: left; + line-height: 0; + margin: 3px 5px 1px 3px; +} + +/* line 20, ../../../ext-theme-neutral/sass/src/grid/plugin/RowExpander.scss */ +.x-grid-row-collapsed .x-grid-row-expander { + background-image: url(images/grid/group-expand.gif); +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/property/Grid.scss */ +.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner, +.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner { + padding-left: 12px; + background-image: url(images/grid/property-cell-bg.gif); + background-repeat: no-repeat; + background-position: -16px 2px; +} + +/* line 15, ../../../ext-theme-neutral/sass/src/grid/property/Grid.scss */ +.x-grid-with-row-lines.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner, +.x-grid-with-row-lines.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner { + background-position: -16px 1px; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/grid/property/Grid.scss */ +.x-quirks .x-ie .x-grid-row .x-grid-property-name .x-grid-cell-inner { + background-position: -16px 2px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-layout-ct { + background-color: white; + padding: 0; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-panel-header-text-container { + color: black; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + text-transform: none; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item { + margin: 0; +} +/* line 16, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item .x-accordion-hd { + background: #e5e5e5; + border-top-color: #ececec; + padding: 4px 5px 5px 5px; +} +/* line 22, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item .x-accordion-hd-sibling-expanded { + border-top-color: #d0d0d0; +} +/* line 26, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item .x-accordion-hd-last-collapsed { + border-bottom-color: #e5e5e5; +} +/* line 30, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item .x-accordion-body { + border-width: 0; +} + +/* line 37, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-collapse-top, +.x-accordion-hd .x-tool-collapse-bottom { + background-position: 0 -255px; +} +/* line 42, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-expand-top, +.x-accordion-hd .x-tool-expand-bottom { + background-position: 0 -240px; +} +/* line 50, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-over .x-tool-collapse-top, +.x-accordion-hd .x-tool-over .x-tool-collapse-bottom { + background-position: -15px -255px; +} +/* line 55, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-over .x-tool-expand-top, +.x-accordion-hd .x-tool-over .x-tool-expand-bottom { + background-position: -15px -240px; +} +/* line 61, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-img { + background-color: #e5e5e5; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-collapse-el { + cursor: pointer; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-left, +.x-layout-split-right { + top: 50%; + margin-top: -18px; + width: 5px; + height: 35px; +} + +/* line 14, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-top, +.x-layout-split-bottom { + left: 50%; + width: 35px; + height: 5px; + margin-left: -18px; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-left { + background-image: url(images/util/splitter/mini-left.gif); +} + +/* line 25, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-right { + background-image: url(images/util/splitter/mini-right.gif); +} + +/* line 41, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-top { + background-image: url(images/util/splitter/mini-top.gif); +} + +/* line 45, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-bottom { + background-image: url(images/util/splitter/mini-bottom.gif); +} + +/* line 50, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-layout-split-left { + background-image: url(images/util/splitter/mini-right.gif); +} +/* line 54, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-layout-split-right { + background-image: url(images/util/splitter/mini-left.gif); +} +/* line 70, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-layout-split-top { + background-image: url(images/util/splitter/mini-bottom.gif); +} +/* line 74, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-layout-split-bottom { + background-image: url(images/util/splitter/mini-top.gif); +} + +/* line 79, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-active { + background-color: #b4b4b4; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + opacity: 0.8; +} +/* line 83, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-active .x-collapse-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/layout/container/Border.scss */ +.x-border-layout-ct { + background-color: #e0e0e0; +} + +/* line 14, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-body { + background: #f0f0f0; + padding: 2px; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-icon-separator { + left: 24px; + border-left: solid 1px #e0e0e0; + background-color: white; + width: 2px; +} + +/* line 33, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item { + padding: 1px; + cursor: pointer; +} + +/* line 46, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-indent { + margin-left: 30px; +} + +/* line 57, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-active { + background-image: none; + background-color: #e6e6e6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dcdcdc)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dcdcdc); + background-image: -moz-linear-gradient(top, #eeeeee, #dcdcdc); + background-image: -o-linear-gradient(top, #eeeeee, #dcdcdc); + background-image: linear-gradient(top, #eeeeee, #dcdcdc); + border-color: #9d9d9d; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + border-width: 1px; + border-style: solid; + padding: 0; +} +/* line 75, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-nlg .x-menu-item-active { + background: #e6e6e6 repeat-x left top; + background-image: url(images/menu/menu-item-active-bg.gif); +} + +/* line 82, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-link { + line-height: 22px; + padding: 0 0 0 30px; + display: inline-block; +} + +/* line 98, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-right-check-item-text { + padding-right: 22px; +} + +/* line 108, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-icon { + width: 16px; + height: 16px; + top: 4px; + left: 3px; + background-position: center center; +} + +/* line 116, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-glyph { + font-size: 16px; + line-height: 16px; + color: #222222; + opacity: 0.5; +} +/* line 132, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-ie8m .x-menu-item-glyph { + color: #898989; +} + +/* line 142, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-gecko .x-menu-item-active .x-menu-item-icon, +.x-quirks .x-menu-item-active .x-menu-item-icon, +.x-ie9m .x-menu-item-active .x-menu-item-icon { + top: 3px; + left: 2px; +} + +/* line 168, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-icon-right { + width: 16px; + height: 16px; + top: 3px; + right: 3px; + background-position: center center; +} + +/* line 183, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-text { + font-size: 11px; + color: #222222; + cursor: pointer; + margin-right: 16px; +} + +/* line 201, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-checked .x-menu-item-icon, .x-menu-item-checked .x-menu-item-icon-right { + background-image: url(images/menu/checked.gif); +} +/* line 204, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-checked .x-menu-group-icon { + background-image: url(images/menu/group-checked.gif); +} + +/* line 210, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-unchecked .x-menu-item-icon, .x-menu-item-unchecked .x-menu-item-icon-right { + background-image: url(images/menu/unchecked.gif); +} +/* line 213, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-unchecked .x-menu-group-icon { + background-image: none; +} + +/* line 218, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-separator { + height: 2px; + border-top: solid 1px #e0e0e0; + background-color: white; + margin: 2px 0; + padding: 0; +} + +/* line 226, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-arrow { + width: 12px; + height: 9px; + top: 7px; + right: 0; + background-image: url(images/menu/menu-parent.gif); +} + +/* line 239, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-gecko .x-menu-item-active .x-menu-item-arrow, +.x-quirks .x-menu-item-active .x-menu-item-arrow, +.x-ie9m .x-menu-item-active .x-menu-item-arrow { + top: 6px; + right: -1px; +} + +/* line 264, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/* line 270, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-strict .x-ie7m .x-menu-icon-separator { + width: 1px; +} +/* line 274, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-strict .x-ie7m .x-menu-item-separator { + height: 1px; +} + +/* line 281, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-ie .x-menu-item-disabled .x-menu-item-icon { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} +/* line 285, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-ie .x-menu-item-disabled .x-menu-item-text { + background-color: transparent; +} + +/* line 294, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-date-item { + border-color: #99BBE8; +} + +/* line 300, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item .x-form-item-label { + font-size: 11px; + color: #222222; +} + +/* line 306, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-scroll-top { + height: 8px; + background-image: url(images/menu/scroll-top.gif); +} + +/* line 310, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-scroll-bottom { + height: 8px; + background-image: url(images/menu/scroll-bottom.gif); +} + +/* line 316, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-scroll-top, .x-menu-scroll-bottom { + background-color: #f0f0f0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-menu-item-link:after { + display: none; + content: "x-slicer:bg:url(images/menu/menu-item-active-bg.gif)"; +} + +/**/ +/* */ +/* line 1, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool { + cursor: pointer; +} + +/* line 5, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-img { + overflow: hidden; + width: 15px; + height: 15px; + background-image: url(images/tools/tool-sprites.gif); + margin: 0; +} + +/* line 30, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-placeholder { + visibility: hidden; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-close { + background-position: 0 0; +} + +/* line 38, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-minimize { + background-position: 0 -15px; +} + +/* line 42, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-maximize { + background-position: 0 -30px; +} + +/* line 46, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-restore { + background-position: 0 -45px; +} + +/* line 50, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-toggle { + background-position: 0 -60px; +} +/* line 53, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-panel-collapsed .x-tool-toggle { + background-position: 0 -75px; +} + +/* line 58, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-gear { + background-position: 0 -90px; +} + +/* line 62, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-prev { + background-position: 0 -105px; +} + +/* line 66, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-next { + background-position: 0 -120px; +} + +/* line 70, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-pin { + background-position: 0 -135px; +} + +/* line 74, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-unpin { + background-position: 0 -150px; +} + +/* line 78, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-right { + background-position: 0 -165px; +} + +/* line 82, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-left { + background-position: 0 -180px; +} + +/* line 86, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-down { + background-position: 0 -195px; +} + +/* line 90, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-up { + background-position: 0 -210px; +} + +/* line 94, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-refresh { + background-position: 0 -225px; +} + +/* line 98, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-plus { + background-position: 0 -240px; +} + +/* line 102, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-minus { + background-position: 0 -255px; +} + +/* line 106, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-search { + background-position: 0 -270px; +} + +/* line 110, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-save { + background-position: 0 -285px; +} + +/* line 114, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-help { + background-position: 0 -300px; +} + +/* line 118, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-print { + background-position: 0 -315px; +} + +/* line 122, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand { + background-position: 0 -330px; +} + +/* line 126, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-collapse { + background-position: 0 -345px; +} + +/* line 131, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand-bottom, +.x-tool-collapse-bottom { + background-position: 0 -195px; +} + +/* line 136, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand-top, +.x-tool-collapse-top { + background-position: 0 -210px; +} + +/* line 141, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand-left, +.x-tool-collapse-left { + background-position: 0 -180px; +} + +/* line 146, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand-right, +.x-tool-collapse-right { + background-position: 0 -165px; +} + +/* line 166, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-close { + background-position: -15px 0; +} +/* line 170, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-minimize { + background-position: -15px -15px; +} +/* line 174, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-maximize { + background-position: -15px -30px; +} +/* line 178, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-restore { + background-position: -15px -45px; +} +/* line 182, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-toggle { + background-position: -15px -60px; +} +/* line 187, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-panel-collapsed .x-tool-over .x-tool-toggle { + background-position: -15px -75px; +} +/* line 192, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-gear { + background-position: -15px -90px; +} +/* line 196, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-prev { + background-position: -15px -105px; +} +/* line 200, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-next { + background-position: -15px -120px; +} +/* line 204, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-pin { + background-position: -15px -135px; +} +/* line 208, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-unpin { + background-position: -15px -150px; +} +/* line 212, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-right { + background-position: -15px -165px; +} +/* line 216, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-left { + background-position: -15px -180px; +} +/* line 220, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-down { + background-position: -15px -195px; +} +/* line 224, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-up { + background-position: -15px -210px; +} +/* line 228, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-refresh { + background-position: -15px -225px; +} +/* line 232, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-plus { + background-position: -15px -240px; +} +/* line 236, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-minus { + background-position: -15px -255px; +} +/* line 240, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-search { + background-position: -15px -270px; +} +/* line 244, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-save { + background-position: -15px -285px; +} +/* line 248, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-help { + background-position: -15px -300px; +} +/* line 252, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-print { + background-position: -15px -315px; +} +/* line 256, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand { + background-position: -15px -330px; +} +/* line 260, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-collapse { + background-position: -15px -345px; +} +/* line 265, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand-bottom, +.x-tool-over .x-tool-collapse-bottom { + background-position: -15px -195px; +} +/* line 270, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand-top, +.x-tool-over .x-tool-collapse-top { + background-position: -15px -210px; +} +/* line 275, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand-left, +.x-tool-over .x-tool-collapse-left { + background-position: -15px -180px; +} +/* line 280, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand-right, +.x-tool-over .x-tool-collapse-right { + background-position: -15px -165px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle { + position: absolute; + z-index: 100; + font-size: 1px; + line-height: 6px; + overflow: hidden; + zoom: 1; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + background-color: #fff; +} + +/* line 18, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-collapsed .x-resizable-handle { + display: none; +} + +/* line 23, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-north { + cursor: n-resize; +} +/* line 26, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-south { + cursor: s-resize; +} +/* line 29, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-east { + cursor: e-resize; +} +/* line 32, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-west { + cursor: w-resize; +} +/* line 35, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southeast { + cursor: se-resize; +} +/* line 38, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northwest { + cursor: nw-resize; +} +/* line 41, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northeast { + cursor: ne-resize; +} +/* line 44, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southwest { + cursor: sw-resize; +} + +/* line 49, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-east { + width: 6px; + height: 100%; + right: 0; + top: 0; +} + +/* line 56, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-south { + width: 100%; + height: 6px; + left: 0; + bottom: 0; +} + +/* line 63, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-west { + width: 6px; + height: 100%; + left: 0; + top: 0; +} + +/* line 70, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-north { + width: 100%; + height: 6px; + left: 0; + top: 0; +} + +/* line 77, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-southeast { + width: 6px; + height: 6px; + right: 0; + bottom: 0; + z-index: 101; +} + +/* line 85, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-northwest { + width: 6px; + height: 6px; + left: 0; + top: 0; + z-index: 101; +} + +/* line 93, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-northeast { + width: 6px; + height: 6px; + right: 0; + top: 0; + z-index: 101; +} + +/* line 101, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-southwest { + width: 6px; + height: 6px; + left: 0; + bottom: 0; + z-index: 101; +} + +/*IE rounding error*/ +/* line 111, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-ie .x-resizable-handle-east { + margin-right: -1px; + /*IE rounding error*/ +} +/* line 115, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-ie .x-resizable-handle-south { + margin-bottom: -1px; +} + +/* line 121, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-pinned .x-resizable-handle { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +/* line 126, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-window .x-window-handle { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 130, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-window-collapsed .x-window-handle { + display: none; +} + +/* line 135, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-proxy { + border: 1px dashed #3b5a82; + position: absolute; + overflow: hidden; + z-index: 50000; +} + +/* line 147, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, +.x-resizable-pinned .x-resizable-handle-east, +.x-resizable-pinned .x-resizable-handle-west { + background-image: url(images/sizer/e-handle.gif); +} +/* line 153, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, +.x-resizable-pinned .x-resizable-handle-south, +.x-resizable-pinned .x-resizable-handle-north { + background-image: url(images/sizer/s-handle.gif); +} +/* line 158, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southeast, +.x-resizable-pinned .x-resizable-handle-southeast { + background-position: top left; + background-image: url(images/sizer/se-handle.gif); +} +/* line 163, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northwest, +.x-resizable-pinned .x-resizable-handle-northwest { + background-position: bottom right; + background-image: url(images/sizer/nw-handle.gif); +} +/* line 168, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northeast, +.x-resizable-pinned .x-resizable-handle-northeast { + background-position: bottom left; + background-image: url(images/sizer/ne-handle.gif); +} +/* line 173, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southwest, +.x-resizable-pinned .x-resizable-handle-southwest { + background-position: top right; + background-image: url(images/sizer/sw-handle.gif); +} + +/* Horizontal styles */ +/* line 2, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz { + padding-left: 7px; + background: no-repeat 0 -15px; +} +/* line 6, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-end { + padding-right: 7px; + background: no-repeat right -30px; +} + +/* line 12, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-inner { + height: 15px; +} + +/* line 20, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-ie6 .x-form-item .x-slider-horz, +.x-ie7 .x-form-item .x-slider-horz, +.x-quirks .x-ie .x-form-item .x-slider-horz { + margin-top: 4px; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-thumb { + width: 14px; + height: 15px; + margin-left: -7px; + background-image: url(images/slider/slider-thumb.png); +} + +/* line 33, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-thumb-over { + background-position: -14px -15px; +} + +/* line 37, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-thumb-drag { + background-position: -28px -30px; +} + +/* Vertical styles */ +/* line 60, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert { + padding-top: 7px; + background: no-repeat -30px 0; +} + +/* line 65, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-end { + padding-bottom: 7px; + background: no-repeat -15px bottom; + width: 15px; +} + +/* line 71, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-inner { + width: 15px; +} + +/* line 75, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-thumb { + width: 15px; + height: 14px; + margin-bottom: -7px; + background-image: url(images/slider/slider-v-thumb.png); +} + +/* line 82, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-thumb-over { + background-position: -15px -14px; +} + +/* line 86, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-thumb-drag { + background-position: -30px -28px; +} + +/* line 92, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz, +.x-slider-horz .x-slider-end, +.x-slider-horz .x-slider-inner { + background-image: url(images/slider/slider-bg.png); +} + +/* line 98, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert, +.x-slider-vert .x-slider-end, +.x-slider-vert .x-slider-inner { + background-image: url(images/slider/slider-v-bg.png); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-grid-row .x-grid-cell-row-checker { + vertical-align: middle; +} + +/* line 5, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-column-header-checkbox .x-column-header-inner { + padding: 0; + line-height: 0; + font-size: 0; +} + +/* line 12, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-grid-row-checker, +.x-column-header-checkbox .x-column-header-text { + height: 13px; + width: 13px; + line-height: 0; + font-size: 0; + background-image: url(images/form/checkbox.gif); + background-repeat: no-repeat; + background-color: transparent; +} + +/* line 24, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-column-header-checkbox .x-column-header-text { + display: block; + margin-left: 5px; +} + +/* IE6, IE7, and all IE Quirks mode need line-height to be the same as checkbox height or the header/row height will be too tall */ +/* line 40, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-quirks .x-ie .x-grid-row-checker, +.x-quirks .x-ie .x-column-header-checkbox .x-column-header-text, .x-ie7m .x-grid-row-checker, .x-ie7m .x-column-header-checkbox .x-column-header-text { + line-height: 13px; +} + +/* line 46, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-grid-cell-row-checker .x-grid-cell-inner { + padding: 3px 5px; + line-height: 14px; +} + +/* line 53, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-grid-hd-checker-on .x-column-header-text, +.x-grid-row-selected .x-grid-row-checker, +.x-grid-row-checked .x-grid-row-checker { + background-position: 0 -13px; +} + +/** + * Creates a visual theme for a Tab Panel + * @member Ext.tab.Panel +*/ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 3px 9px 3px 9px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: linear-gradient(top, #dcdcdc, #eaeaea); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-mc { + background-image: url(images/tab/tab-default-top-fbg.gif); + background-position: 0 top; + background-color: #eaeaea; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-tab-default-top { + background-image: url(images/tab/tab-default-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tab-default-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tab-default-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tr, +.x-tab-default-top-br, +.x-tab-default-top-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tl, +.x-tab-default-top-bl, +.x-tab-default-top-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tl, +.x-tab-default-top-bl, +.x-tab-default-top-tr, +.x-tab-default-top-br, +.x-tab-default-top-tc, +.x-tab-default-top-bc, +.x-tab-default-top-ml, +.x-tab-default-top-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-ml, +.x-tab-default-top-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-mc { + padding: 0px 6px 3px 6px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tab-default-top-tl, +.x-strict .x-ie7 .x-tab-default-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-top:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 3px 9px 3px 9px; + border-width: 0 1px 1px 1px; + border-style: solid; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: linear-gradient(bottom, #dcdcdc, #eaeaea); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-mc { + background-image: url(images/tab/tab-default-bottom-fbg.gif); + background-position: 0 top; + background-color: #eaeaea; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-tab-default-bottom { + background-image: url(images/tab/tab-default-bottom-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tab-default-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tab-default-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-0-0-4-4-0-1-1-1-3-9-3-9"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tr, +.x-tab-default-bottom-br, +.x-tab-default-bottom-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tl, +.x-tab-default-bottom-bl, +.x-tab-default-bottom-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tc { + height: 0; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tl, +.x-tab-default-bottom-bl, +.x-tab-default-bottom-tr, +.x-tab-default-bottom-br, +.x-tab-default-bottom-tc, +.x-tab-default-bottom-bc, +.x-tab-default-bottom-ml, +.x-tab-default-bottom-mr { + zoom: 1; + background-image: url(images/tab/tab-default-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-ml, +.x-tab-default-bottom-mr { + zoom: 1; + background-image: url(images/tab/tab-default-bottom-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-mc { + padding: 3px 6px 0px 6px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tab-default-bottom-tl, +.x-strict .x-ie7 .x-tab-default-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-bottom:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-bottom-fbg.gif), bg:url(images/tab/tab-default-bottom-bg.gif), corners:url(images/tab/tab-default-bottom-corners.gif), sides:url(images/tab/tab-default-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 3px 9px 3px 9px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: linear-gradient(top, #dcdcdc, #eaeaea); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-mc { + background-image: url(images/tab/tab-default-top-fbg.gif); + background-position: 0 top; + background-color: #eaeaea; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-tab-default-left { + background-image: url(images/tab/tab-default-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tab-default-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tab-default-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tr, +.x-tab-default-left-br, +.x-tab-default-left-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tl, +.x-tab-default-left-bl, +.x-tab-default-left-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tl, +.x-tab-default-left-bl, +.x-tab-default-left-tr, +.x-tab-default-left-br, +.x-tab-default-left-tc, +.x-tab-default-left-bc, +.x-tab-default-left-ml, +.x-tab-default-left-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-ml, +.x-tab-default-left-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-mc { + padding: 0px 6px 3px 6px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tab-default-left-tl, +.x-strict .x-ie7 .x-tab-default-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-left:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 3px 9px 3px 9px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: linear-gradient(top, #dcdcdc, #eaeaea); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-mc { + background-image: url(images/tab/tab-default-top-fbg.gif); + background-position: 0 top; + background-color: #eaeaea; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-tab-default-right { + background-image: url(images/tab/tab-default-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tab-default-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tab-default-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tr, +.x-tab-default-right-br, +.x-tab-default-right-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tl, +.x-tab-default-right-bl, +.x-tab-default-right-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tl, +.x-tab-default-right-bl, +.x-tab-default-right-tr, +.x-tab-default-right-br, +.x-tab-default-right-tc, +.x-tab-default-right-bc, +.x-tab-default-right-ml, +.x-tab-default-right-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-ml, +.x-tab-default-right-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-mc { + padding: 0px 6px 3px 6px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tab-default-right-tl, +.x-strict .x-ie7 .x-tab-default-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-right:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"; +} + +/**/ +/* */ +/* line 140, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default { + border-color: #b5b5b5; + margin: 0 0 0 2px; + cursor: pointer; +} +/* line 145, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-inner { + font-size: 11px; + font-weight: bold; + font-family: tahoma, arial, verdana, sans-serif; + color: #6f6f6f; + line-height: 13px; +} +/* line 155, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-icon-el { + width: 16px; + height: 16px; + line-height: 16px; + background-position: center center; +} +/* line 162, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-glyph { + font-size: 16px; + color: #6f6f6f; + opacity: 0.5; +} +/* line 176, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-ie8m .x-tab-default .x-tab-glyph { + color: #acacac; +} +/* line 184, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default { + padding-left: 0; +} +/* line 187, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-button { + padding-left: 9px; +} +/* line 191, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-icon-el { + left: 9px; +} + +/* line 199, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-icon .x-tab-inner { + width: 16px; +} + +/* line 217, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-left { + margin: 0 2px 0 0; +} + +/* line 229, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top, +.x-tab-default-left, +.x-tab-default-right { + border-bottom: 1px solid #d0d0d0; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: linear-gradient(top, #dcdcdc, #eaeaea); + -webkit-box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; + -moz-box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; + box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; +} +/* line 236, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-top, .x-nlg +.x-tab-default-left, .x-nlg +.x-tab-default-right { + background-image: url(images/tab/tab-default-top-bg.gif); +} + +/* line 250, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom { + border-top: 1px solid #d0d0d0; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: linear-gradient(bottom, #dcdcdc, #eaeaea); + -webkit-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; + -moz-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; + box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; +} +/* line 257, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-bottom { + background-image: url(images/tab/tab-default-bottom-bg.gif); +} + +/* line 271, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-left { + -webkit-transform: rotate(270deg); + -webkit-transform-origin: 100% 0; + -moz-transform: rotate(270deg); + -moz-transform-origin: 100% 0; + -o-transform: rotate(270deg); + -o-transform-origin: 100% 0; + transform: rotate(270deg); + transform-origin: 100% 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-tab-default-left { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +/* line 287, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-right { + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-tab-default-right { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} + +/* line 304, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-icon-text-left .x-tab-inner { + padding-left: 20px; +} + +/* line 318, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-over { + background-color: #f2eeee; +} +/* line 342, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-over .x-tab-glyph { + color: #6f6f6f; +} +/* line 349, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-ie8m .x-tab-default-over .x-tab-glyph { + color: #b0aeae; +} + +/* line 358, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-over, +.x-tab-default-left-over, +.x-tab-default-right-over { + background-image: none; + background-color: #f2eeee; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #f0f0f0)); + background-image: -webkit-linear-gradient(top, #ffffff, #f0f0f0); + background-image: -moz-linear-gradient(top, #ffffff, #f0f0f0); + background-image: -o-linear-gradient(top, #ffffff, #f0f0f0); + background-image: linear-gradient(top, #ffffff, #f0f0f0); +} +/* line 362, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-top-over, .x-nlg +.x-tab-default-left-over, .x-nlg +.x-tab-default-right-over { + background-image: url(images/tab/tab-default-top-over-bg.gif); +} + +/* line 367, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-over { + background-image: none; + background-color: #f2eeee; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ffffff), color-stop(100%, #f0f0f0)); + background-image: -webkit-linear-gradient(bottom, #ffffff, #f0f0f0); + background-image: -moz-linear-gradient(bottom, #ffffff, #f0f0f0); + background-image: -o-linear-gradient(bottom, #ffffff, #f0f0f0); + background-image: linear-gradient(bottom, #ffffff, #f0f0f0); +} +/* line 371, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-bottom-over { + background-image: url(images/tab/tab-default-bottom-over-bg.gif); +} + +/* line 378, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-active { + background-color: #eaeaea; +} +/* line 384, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-active .x-tab-inner { + color: #333333; +} +/* line 399, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-active .x-tab-glyph { + color: #333333; +} +/* line 406, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-ie8m .x-tab-default-active .x-tab-glyph { + color: #8e8e8e; +} + +/* line 414, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-active, +.x-tab-default-left-active, +.x-tab-default-right-active { + border-bottom-color: #eaeaea; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #ffffff, #eaeaea); + background-image: -moz-linear-gradient(top, #ffffff, #eaeaea); + background-image: -o-linear-gradient(top, #ffffff, #eaeaea); + background-image: linear-gradient(top, #ffffff, #eaeaea); +} +/* line 420, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-top-active, .x-nlg +.x-tab-default-left-active, .x-nlg +.x-tab-default-right-active { + background-image: url(images/tab/tab-default-top-active-bg.gif); +} + +/* line 427, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-active { + border-top-color: #eaeaea; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ffffff), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(bottom, #ffffff, #eaeaea); + background-image: -moz-linear-gradient(bottom, #ffffff, #eaeaea); + background-image: -o-linear-gradient(bottom, #ffffff, #eaeaea); + background-image: linear-gradient(bottom, #ffffff, #eaeaea); +} +/* line 433, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-bottom-active { + background-image: url(images/tab/tab-default-bottom-active-bg.gif); +} + +/* line 440, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-disabled { + border-color: #dadada; + cursor: default; +} +/* line 453, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-disabled .x-tab-inner { + color: #b7b7b7; +} +/* line 472, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-disabled .x-tab-icon-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} +/* line 477, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-disabled .x-tab-glyph { + color: #b7b7b7; + opacity: 0.3; + filter: none; +} +/* line 491, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-ie8m .x-tab-default-disabled .x-tab-glyph { + color: #dddddd; +} + +/* line 500, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-disabled, +.x-tab-default-left-disabled, +.x-tab-default-right-disabled { + background-image: none; + background-color: #eeeeee; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #f4f4f4)); + background-image: -webkit-linear-gradient(top, #eeeeee, #f4f4f4); + background-image: -moz-linear-gradient(top, #eeeeee, #f4f4f4); + background-image: -o-linear-gradient(top, #eeeeee, #f4f4f4); + background-image: linear-gradient(top, #eeeeee, #f4f4f4); +} +/* line 504, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-top-disabled, .x-nlg +.x-tab-default-left-disabled, .x-nlg +.x-tab-default-right-disabled { + background-image: url(images/tab/tab-default-top-disabled-bg.gif); +} + +/* line 509, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-disabled { + background-image: none; + background-color: #eeeeee; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #eeeeee), color-stop(100%, #f4f4f4)); + background-image: -webkit-linear-gradient(bottom, #eeeeee, #f4f4f4); + background-image: -moz-linear-gradient(bottom, #eeeeee, #f4f4f4); + background-image: -o-linear-gradient(bottom, #eeeeee, #f4f4f4); + background-image: linear-gradient(bottom, #eeeeee, #f4f4f4); +} +/* line 513, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-bottom-disabled { + background-image: url(images/tab/tab-default-bottom-disabled-bg.gif); +} + +/* line 529, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-over .x-frame-tl, +.x-tab-default-top-over .x-frame-bl, +.x-tab-default-top-over .x-frame-tr, +.x-tab-default-top-over .x-frame-br, +.x-tab-default-top-over .x-frame-tc, +.x-tab-default-top-over .x-frame-bc, +.x-tab-default-left-over .x-frame-tl, +.x-tab-default-left-over .x-frame-bl, +.x-tab-default-left-over .x-frame-tr, +.x-tab-default-left-over .x-frame-br, +.x-tab-default-left-over .x-frame-tc, +.x-tab-default-left-over .x-frame-bc, +.x-tab-default-right-over .x-frame-tl, +.x-tab-default-right-over .x-frame-bl, +.x-tab-default-right-over .x-frame-tr, +.x-tab-default-right-over .x-frame-br, +.x-tab-default-right-over .x-frame-tc, +.x-tab-default-right-over .x-frame-bc { + background-image: url(images/tab/tab-default-top-over-corners.gif); +} +/* line 533, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-over .x-frame-ml, +.x-tab-default-top-over .x-frame-mr, +.x-tab-default-left-over .x-frame-ml, +.x-tab-default-left-over .x-frame-mr, +.x-tab-default-right-over .x-frame-ml, +.x-tab-default-right-over .x-frame-mr { + background-image: url(images/tab/tab-default-top-over-sides.gif); +} +/* line 536, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-over .x-frame-mc, +.x-tab-default-left-over .x-frame-mc, +.x-tab-default-right-over .x-frame-mc { + background-color: #f2eeee; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-top-over-fbg.gif); +} + +/* line 551, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-over .x-frame-tl, +.x-tab-default-bottom-over .x-frame-bl, +.x-tab-default-bottom-over .x-frame-tr, +.x-tab-default-bottom-over .x-frame-br, +.x-tab-default-bottom-over .x-frame-tc, +.x-tab-default-bottom-over .x-frame-bc { + background-image: url(images/tab/tab-default-bottom-over-corners.gif); +} +/* line 555, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-over .x-frame-ml, +.x-tab-default-bottom-over .x-frame-mr { + background-image: url(images/tab/tab-default-bottom-over-sides.gif); +} +/* line 558, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-over .x-frame-mc { + background-color: #f2eeee; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-bottom-over-fbg.gif); +} + +/* line 575, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-active .x-frame-tl, +.x-tab-default-top-active .x-frame-bl, +.x-tab-default-top-active .x-frame-tr, +.x-tab-default-top-active .x-frame-br, +.x-tab-default-top-active .x-frame-tc, +.x-tab-default-top-active .x-frame-bc, +.x-tab-default-left-active .x-frame-tl, +.x-tab-default-left-active .x-frame-bl, +.x-tab-default-left-active .x-frame-tr, +.x-tab-default-left-active .x-frame-br, +.x-tab-default-left-active .x-frame-tc, +.x-tab-default-left-active .x-frame-bc, +.x-tab-default-right-active .x-frame-tl, +.x-tab-default-right-active .x-frame-bl, +.x-tab-default-right-active .x-frame-tr, +.x-tab-default-right-active .x-frame-br, +.x-tab-default-right-active .x-frame-tc, +.x-tab-default-right-active .x-frame-bc { + background-image: url(images/tab/tab-default-top-active-corners.gif); +} +/* line 579, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-active .x-frame-ml, +.x-tab-default-top-active .x-frame-mr, +.x-tab-default-left-active .x-frame-ml, +.x-tab-default-left-active .x-frame-mr, +.x-tab-default-right-active .x-frame-ml, +.x-tab-default-right-active .x-frame-mr { + background-image: url(images/tab/tab-default-top-active-sides.gif); +} +/* line 582, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-active .x-frame-mc, +.x-tab-default-left-active .x-frame-mc, +.x-tab-default-right-active .x-frame-mc { + background-color: #eaeaea; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-top-active-fbg.gif); +} + +/* line 597, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-active .x-frame-tl, +.x-tab-default-bottom-active .x-frame-bl, +.x-tab-default-bottom-active .x-frame-tr, +.x-tab-default-bottom-active .x-frame-br, +.x-tab-default-bottom-active .x-frame-tc, +.x-tab-default-bottom-active .x-frame-bc { + background-image: url(images/tab/tab-default-bottom-active-corners.gif); +} +/* line 601, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-active .x-frame-ml, +.x-tab-default-bottom-active .x-frame-mr { + background-image: url(images/tab/tab-default-bottom-active-sides.gif); +} +/* line 604, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-active .x-frame-mc { + background-color: #eaeaea; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-bottom-active-fbg.gif); +} + +/* line 621, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-disabled .x-frame-tl, +.x-tab-default-top-disabled .x-frame-bl, +.x-tab-default-top-disabled .x-frame-tr, +.x-tab-default-top-disabled .x-frame-br, +.x-tab-default-top-disabled .x-frame-tc, +.x-tab-default-top-disabled .x-frame-bc, +.x-tab-default-left-disabled .x-frame-tl, +.x-tab-default-left-disabled .x-frame-bl, +.x-tab-default-left-disabled .x-frame-tr, +.x-tab-default-left-disabled .x-frame-br, +.x-tab-default-left-disabled .x-frame-tc, +.x-tab-default-left-disabled .x-frame-bc, +.x-tab-default-right-disabled .x-frame-tl, +.x-tab-default-right-disabled .x-frame-bl, +.x-tab-default-right-disabled .x-frame-tr, +.x-tab-default-right-disabled .x-frame-br, +.x-tab-default-right-disabled .x-frame-tc, +.x-tab-default-right-disabled .x-frame-bc { + background-image: url(images/tab/tab-default-top-disabled-corners.gif); +} +/* line 625, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-disabled .x-frame-ml, +.x-tab-default-top-disabled .x-frame-mr, +.x-tab-default-left-disabled .x-frame-ml, +.x-tab-default-left-disabled .x-frame-mr, +.x-tab-default-right-disabled .x-frame-ml, +.x-tab-default-right-disabled .x-frame-mr { + background-image: url(images/tab/tab-default-top-disabled-sides.gif); +} +/* line 628, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-disabled .x-frame-mc, +.x-tab-default-left-disabled .x-frame-mc, +.x-tab-default-right-disabled .x-frame-mc { + background-color: #eeeeee; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-top-disabled-fbg.gif); +} + +/* line 643, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-disabled .x-frame-tl, +.x-tab-default-bottom-disabled .x-frame-bl, +.x-tab-default-bottom-disabled .x-frame-tr, +.x-tab-default-bottom-disabled .x-frame-br, +.x-tab-default-bottom-disabled .x-frame-tc, +.x-tab-default-bottom-disabled .x-frame-bc { + background-image: url(images/tab/tab-default-bottom-disabled-corners.gif); +} +/* line 647, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-disabled .x-frame-ml, +.x-tab-default-bottom-disabled .x-frame-mr { + background-image: url(images/tab/tab-default-bottom-disabled-sides.gif); +} +/* line 650, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-disabled .x-frame-mc { + background-color: #eeeeee; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-bottom-disabled-fbg.gif); +} + +/* line 670, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nbr .x-tab-default-top, +.x-nbr .x-tab-default-left, +.x-nbr .x-tab-default-right { + border-bottom-width: 1px !important; +} +/* line 673, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nbr .x-tab-default-bottom { + border-top-width: 1px !important; +} + +/* line 681, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default { + border-style: solid; + border-color: #d0d0d0; +} + +/* line 687, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-top { + padding: 1px 0 0; + border-width: 1px 1px 0; +} + +/* line 694, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom { + padding: 0 0 1px 0; + border-width: 0 1px 1px 1px; +} + +/* line 701, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-left { + padding: 0 0 0 1px; + border-width: 1px 0 1px 1px; +} + +/* line 708, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right { + padding: 0 1px 0 0; + border-width: 1px 1px 1px 0; +} + +/* line 719, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-horizontal { + height: 23px; +} +/* line 724, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie6 .x-tab-bar-body-default-horizontal, .x-strict .x-ie7 .x-tab-bar-body-default-horizontal { + height: 21px; +} + +/* line 730, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-vertical { + width: 23px; +} +/* line 735, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie6 .x-tab-bar-body-default-vertical, .x-strict .x-ie7 .x-tab-bar-body-default-vertical { + width: 21px; +} + +/* line 741, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-top { + padding-bottom: 2px; +} + +/* line 745, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-bottom { + padding-top: 2px; +} + +/* line 749, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-left { + padding-right: 2px; +} + +/* line 753, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-right { + padding-left: 2px; +} + +/* line 757, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default { + border-style: solid; + border-color: #d0d0d0; + background-color: #eaeaea; +} + +/* line 766, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie6 .x-tab-bar-strip-default-horizontal, .x-strict .x-ie7 .x-tab-bar-strip-default-horizontal { + height: 2px; +} + +/* line 775, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie6 .x-tab-bar-strip-default-vertical, .x-strict .x-ie7 .x-tab-bar-strip-default-vertical { + width: 2px; +} + +/* line 781, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default-top { + border-width: 1px 0 0 0; + height: 3px; +} +/* line 784, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain .x-tab-bar-strip-default-top { + border-width: 1px 1px 0; +} + +/* line 789, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default-bottom { + border-width: 0 0 1px 0; + height: 3px; +} +/* line 792, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain .x-tab-bar-strip-default-bottom { + border-width: 0 1px 1px 1px; +} + +/* line 797, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default-left { + border-width: 0 0 0 1px; + width: 3px; +} +/* line 800, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain .x-tab-bar-strip-default-left { + border-width: 1px 0 1px 1px; +} + +/* line 805, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default-right { + border-width: 0 1px 0 0; + width: 3px; +} +/* line 808, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain .x-tab-bar-strip-default-right { + border-width: 1px 1px 1px 0; +} + +/* line 813, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default { + background-color: #d2d2d2; +} + +/* line 818, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-top { + background-image: none; + background-color: #d2d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dfdede), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(top, #dfdede, #d2d2d2); + background-image: -moz-linear-gradient(top, #dfdede, #d2d2d2); + background-image: -o-linear-gradient(top, #dfdede, #d2d2d2); + background-image: linear-gradient(top, #dfdede, #d2d2d2); +} +/* line 822, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-bar-default-top { + background-image: url(images/tab-bar/tab-bar-default-top-bg.gif); +} + +/* line 828, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom { + background-image: none; + background-color: #d2d2d2; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dfdede), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(bottom, #dfdede, #d2d2d2); + background-image: -moz-linear-gradient(bottom, #dfdede, #d2d2d2); + background-image: -o-linear-gradient(bottom, #dfdede, #d2d2d2); + background-image: linear-gradient(bottom, #dfdede, #d2d2d2); +} +/* line 832, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-bar-default-bottom { + background-image: url(images/tab-bar/tab-bar-default-bottom-bg.gif); +} + +/* line 838, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-left { + background-image: none; + background-color: #d2d2d2; + background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #dfdede), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(left, #dfdede, #d2d2d2); + background-image: -moz-linear-gradient(left, #dfdede, #d2d2d2); + background-image: -o-linear-gradient(left, #dfdede, #d2d2d2); + background-image: linear-gradient(left, #dfdede, #d2d2d2); +} +/* line 842, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-bar-default-left { + background-image: url(images/tab-bar/tab-bar-default-left-bg.gif); +} + +/* line 848, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right { + background-image: none; + background-color: #d2d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #dfdede), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(right, #dfdede, #d2d2d2); + background-image: -moz-linear-gradient(right, #dfdede, #d2d2d2); + background-image: -o-linear-gradient(right, #dfdede, #d2d2d2); + background-image: linear-gradient(right, #dfdede, #d2d2d2); +} +/* line 852, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-bar-default-right { + background-image: url(images/tab-bar/tab-bar-default-right-bg.gif); +} + +/* line 860, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-close-btn { + width: 11px; + height: 11px; + background-image: url(images/tab/tab-default-close.gif); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); + opacity: 0.6; +} +/* line 870, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default a.x-tab-close-btn:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +/* line 880, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-close-btn { + top: 2px; + right: 2px; +} + +/* line 925, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar .x-tab-default-disabled a.x-tab-close-btn { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 941, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-closable .x-tab-wrap { + padding-right: 14px; +} + +/* line 987, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-box-scroller { + cursor: pointer; +} +/* line 1028, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-tabbar-scroll-left, +.x-tab-bar-default .x-tabbar-scroll-right { + height: 20px; + width: 18px; +} +/* line 1034, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-tabbar-scroll-top, +.x-tab-bar-default .x-tabbar-scroll-bottom { + width: 20px; + height: 18px; +} + +/* line 1042, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom .x-box-scroller { + margin-top: 1px; +} +/* line 1046, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right .x-box-scroller { + margin-left: 1px; +} + +/* line 1123, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-top .x-tabbar-scroll-left { + background-image: url(images/tab-bar/default-scroll-left-top.gif); +} +/* line 1126, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-top .x-tabbar-scroll-right { + background-image: url(images/tab-bar/default-scroll-right-top.gif); +} + +/* line 1143, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom .x-tabbar-scroll-left { + background-image: url(images/tab-bar/default-scroll-left-bottom.gif); +} +/* line 1146, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom .x-tabbar-scroll-right { + background-image: url(images/tab-bar/default-scroll-right-bottom.gif); +} + +/* line 1163, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-left .x-tabbar-scroll-top { + background-image: url(images/tab-bar/default-scroll-top-left.gif); +} +/* line 1166, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-left .x-tabbar-scroll-bottom { + background-image: url(images/tab-bar/default-scroll-bottom-left.gif); +} + +/* line 1172, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right .x-tabbar-scroll-top { + background-image: url(images/tab-bar/default-scroll-top-right.gif); +} +/* line 1175, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right .x-tabbar-scroll-bottom { + background-image: url(images/tab-bar/default-scroll-bottom-right.gif); +} + +/* line 1184, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-tabbar-scroll-left-hover, +.x-tab-bar-default .x-tabbar-scroll-right-hover { + background-position: -18px 0; +} +/* line 1189, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-tabbar-scroll-top-hover, +.x-tab-bar-default .x-tabbar-scroll-bottom-hover { + background-position: 0 -18px; +} +/* line 1194, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-box-scroller-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + cursor: default; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-top-over:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-top-over-bg.gif), corners:url(images/tab/tab-default-top-over-corners.gif), sides:url(images/tab/tab-default-top-over-sides.gif), frame-bg:url(images/tab/tab-default-top-over-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-bottom-over:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-bottom-over-bg.gif), corners:url(images/tab/tab-default-bottom-over-corners.gif), sides:url(images/tab/tab-default-bottom-over-sides.gif), frame-bg:url(images/tab/tab-default-bottom-over-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-top-active:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-top-active-bg.gif), corners:url(images/tab/tab-default-top-active-corners.gif), sides:url(images/tab/tab-default-top-active-sides.gif), frame-bg:url(images/tab/tab-default-top-active-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-bottom-active:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-bottom-active-bg.gif), corners:url(images/tab/tab-default-bottom-active-corners.gif), sides:url(images/tab/tab-default-bottom-active-sides.gif), frame-bg:url(images/tab/tab-default-bottom-active-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-top-disabled:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-top-disabled-bg.gif), corners:url(images/tab/tab-default-top-disabled-corners.gif), sides:url(images/tab/tab-default-top-disabled-sides.gif), frame-bg:url(images/tab/tab-default-top-disabled-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-bottom-disabled:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-bottom-disabled-bg.gif), corners:url(images/tab/tab-default-bottom-disabled-corners.gif), sides:url(images/tab/tab-default-bottom-disabled-sides.gif), frame-bg:url(images/tab/tab-default-bottom-disabled-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-bar-default-top:after { + display: none; + content: "x-slicer:bg:url(images/tab-bar/tab-bar-default-top-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-bar-default-bottom:after { + display: none; + content: "x-slicer:bg:url(images/tab-bar/tab-bar-default-bottom-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-bar-default-left:after { + display: none; + content: "x-slicer:bg:url(images/tab-bar/tab-bar-default-left-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-bar-default-right:after { + display: none; + content: "x-slicer:bg:url(images/tab-bar/tab-bar-default-right-bg.gif)"; +} + +/**/ +/* */ +/* line 1220, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain { + border-width: 0; + padding: 0; +} + +/* line 3, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-autowidth-table table.x-grid-table { + table-layout: auto; + width: auto !important; +} + +/* line 8, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-expander { + cursor: pointer; + position: relative; + top: -2px; +} + +/* line 16, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-tree-expander { + background: url(images/tree/arrows.gif) no-repeat 0 0; +} +/* line 20, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-tree-expander-over .x-tree-expander { + background-position: -32px 0; +} +/* line 24, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander { + background-position: -16px 0; +} +/* line 28, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-expander { + background-position: -48px 0; +} + +/* line 53, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow { + background-image: url(images/tree/elbow.gif); +} +/* line 57, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow-end { + background-image: url(images/tree/elbow-end.gif); +} +/* line 61, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow-plus { + background-image: url(images/tree/elbow-plus.gif); +} +/* line 65, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow-end-plus { + background-image: url(images/tree/elbow-end-plus.gif); +} +/* line 69, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-plus { + background-image: url(images/tree/elbow-minus.gif); +} +/* line 73, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus { + background-image: url(images/tree/elbow-end-minus.gif); +} +/* line 77, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow-line { + background-image: url(images/tree/elbow-line.gif); +} + +/* line 113, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-no-lines .x-tree-expander { + background-image: url(images/tree/elbow-plus-nl.gif); +} +/* line 117, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-expander { + background-image: url(images/tree/elbow-minus-nl.gif); +} + +/* line 132, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-icon { + margin: 1px 3px 0 0; + vertical-align: top; + background-repeat: no-repeat; +} + +/* line 149, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-elbow, +.x-tree-elbow-end, +.x-tree-elbow-plus, +.x-tree-elbow-end-plus, +.x-tree-elbow-empty, +.x-tree-elbow-line { + height: 19px; + width: 16px; + vertical-align: top; +} + +/* line 155, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-icon-leaf { + width: 16px; + background-image: url(images/tree/leaf.gif); +} + +/* line 166, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-icon-parent { + width: 16px; + background-image: url(images/tree/folder.gif); +} + +/* line 177, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-tree-node-expanded .x-tree-icon-parent { + background-image: url(images/tree/folder-open.gif); +} + +/* line 187, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-view { + overflow: hidden; +} + +/* line 191, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-view .x-grid-cell-inner { + cursor: pointer; + vertical-align: top; + padding: 0 6px 0 6px; +} + +/* line 199, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-cell-treecolumn .x-grid-cell-inner { + padding-left: 0; + overflow: visible; +} + +/* line 205, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-node-text { + vertical-align: middle; + line-height: 19px; +} + +/* line 217, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-ie .x-tree-view .x-tree-elbow, +.x-ie .x-tree-view .x-tree-elbow-end, +.x-ie .x-tree-view .x-tree-elbow-plus, +.x-ie .x-tree-view .x-tree-elbow-end-plus, +.x-ie .x-tree-view .x-tree-elbow-empty, +.x-ie .x-tree-view .x-tree-elbow-line { + vertical-align: -6px; +} + +/* line 224, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-checkbox { + margin: 3px 3px 0 0; + display: inline-block; + vertical-align: top; + width: 13px; + height: 13px; + background: no-repeat; + background-image: url(images/form/checkbox.gif); + overflow: hidden; + padding: 0; + border: 0; +} +/* line 237, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-checkbox::-moz-focus-inner { + padding: 0; + border: 0; +} + +/* line 249, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-checkbox-checked { + background-position: 0 -13px; +} + +/* line 253, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-tree-loading .x-tree-icon { + background-image: url(images/tree/loading.gif); +} + +/* line 263, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-tree-loading span { + font-style: italic; + color: #444444; +} + +/* line 268, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-animator-wrap { + overflow: hidden; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-drop-ok-append .x-dd-drop-icon { + background-image: url(images/tree/drop-append.gif); +} + +/* line 5, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-drop-ok-above .x-dd-drop-icon { + background-image: url(images/tree/drop-above.gif); +} + +/* line 9, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-drop-ok-below .x-dd-drop-icon { + background-image: url(images/tree/drop-below.gif); +} + +/* line 13, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-drop-ok-between .x-dd-drop-icon { + background-image: url(images/tree/drop-between.gif); +} + +/* line 17, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-ddindicator { + height: 1px; + border-width: 1px 0px 0px; + border-style: dotted; + border-color: green; +} + +/* line 2, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tl { + background: transparent no-repeat 0 0; + zoom: 1; +} + +/* line 7, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tc { + height: 8px; + background: transparent repeat-x 0 0; + overflow: hidden; +} + +/* line 13, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tr { + background: transparent no-repeat right -8px; +} + +/* line 17, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-ml { + background: transparent repeat-y 0; + padding-left: 4px; + overflow: hidden; + zoom: 1; +} + +/* line 24, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mc { + background: repeat-x 0 -16px; + padding: 4px 10px; +} + +/* line 29, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mc h3 { + margin: 0 0 4px 0; + zoom: 1; +} + +/* line 34, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mr { + background: transparent repeat-y right; + padding-right: 4px; + overflow: hidden; +} + +/* line 40, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-bl { + background: transparent no-repeat 0 -16px; + zoom: 1; +} + +/* line 45, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-bc { + background: transparent repeat-x 0 -8px; + height: 8px; + overflow: hidden; +} + +/* line 51, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-br { + background: transparent no-repeat right -24px; +} + +/* line 55, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tl, .x-box-bl { + padding-left: 8px; + overflow: hidden; +} + +/* line 60, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tr, .x-box-br { + padding-right: 8px; + overflow: hidden; +} + +/* line 65, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tl { + background-image: url(images/box/corners.gif); +} + +/* line 69, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tc { + background-image: url(images/box/tb.gif); +} + +/* line 73, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tr { + background-image: url(images/box/corners.gif); +} + +/* line 77, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-ml { + background-image: url(images/box/l.gif); +} + +/* line 81, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mc { + background-color: #eee; + background-image: url(images/box/tb.gif); + font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif; + color: #393939; + font-size: 15px; +} + +/* line 89, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mc h3 { + font-size: 18px; + font-weight: bold; +} + +/* line 94, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mr { + background-image: url(images/box/r.gif); +} + +/* line 98, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-bl { + background-image: url(images/box/corners.gif); +} + +/* line 102, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-bc { + background-image: url(images/box/tb.gif); +} + +/* line 106, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-br { + background-image: url(images/box/corners.gif); +} + +/* line 110, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr { + background-image: url(images/box/corners-blue.gif); +} + +/* line 114, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc { + background-image: url(images/box/tb-blue.gif); +} + +/* line 118, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-mc { + background-color: #c3daf9; +} + +/* line 122, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-mc h3 { + color: #17385b; +} + +/* line 126, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-ml { + background-image: url(images/box/l-blue.gif); +} + +/* line 130, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-mr { + background-image: url(images/box/r-blue.gif); +} + +/* line 2, ../../../ext-theme-classic/sass/src/window/MessageBox.scss */ +.x-message-box .x-msg-box-wait { + background-image: url(images/shared/blue-loading.gif); +} + +/* line 1, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-form-trigger { + border-bottom: 1px solid #b5b8c8; + height: 21px; +} + +/* line 6, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-border-box .x-form-trigger { + height: 22px; +} + +/* line 11, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-toolbar-item .x-form-trigger { + height: 19px; +} + +/* line 15, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-border-box .x-field-default-toolbar .x-form-trigger { + height: 20px; +} + +/* line 20, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-form-trigger-over { + border-bottom-color: #a1a1a1; +} + +/* line 24, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-form-trigger-wrap-focus .x-form-trigger { + border-bottom-color: #a1a1a1; +} + +/* line 7, ../../../ext-theme-classic/sass/src/form/field/Spinner.scss */ +.x-strict .x-ie6 .x-toolbar-item .x-form-spinner-up, .x-strict .x-ie7 .x-toolbar-item .x-form-spinner-up, .x-strict .x-ie6 +.x-toolbar-item .x-form-spinner-down, .x-strict .x-ie7 +.x-toolbar-item .x-form-spinner-down { + height: 9px !important; +} + +/* line 2, ../../../ext-theme-classic/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-wrap .x-toolbar { + border-left-color: #b5b8c8; + border-top-color: #b5b8c8; + border-right-color: #b5b8c8; +} + +/* line 9, ../../../ext-theme-classic/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-input { + border: 1px solid #b5b8c8; + border-top-width: 0; +} + +/* line 1, ../../../ext-theme-classic/sass/src/grid/column/Column.scss */ +.x-column-header-trigger { + background: no-repeat left center; + background-color: #c5c5c5; + background-image: url(images/grid/grid3-hd-btn.gif); +} + +/* line 4, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-trigger { + height: 19px; +} +/* line 10, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-trigger-wrap .x-form-spinner-up, .x-grid-editor .x-form-trigger-wrap .x-form-spinner-down { + background-image: url(images/form/spinner-small.gif); + height: 10px !important; +} +/* line 24, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-border-box .x-grid-editor .x-form-trigger { + height: 20px; +} +/* line 27, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-border-box .x-grid-editor .x-form-text { + height: 20px; + padding-bottom: 1px; +} +/* line 34, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-text { + height: 18px; +} + +/* line 43, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-ie8m .x-grid-editor .x-form-text { + padding-top: 1px; +} +/* line 49, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-strict .x-ie6 .x-grid-editor .x-form-text, .x-strict .x-ie7 .x-grid-editor .x-form-text { + height: 17px; +} +/* line 53, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-text .x-quirks .x-ie9 { + line-height: 17px; +} + +/* line 2, ../../../ext-theme-classic/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-form-text { + padding: 0 2px; +} +/* line 5, ../../../ext-theme-classic/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-form-display-field { + padding-top: 1px; +} + +/* line 12, ../../../ext-theme-classic/sass/src/grid/plugin/RowEditing.scss */ +.x-ie .x-grid-row-editor .x-form-text { + padding-left: 3px; +} + +/* line 19, ../../../ext-theme-classic/sass/src/grid/plugin/RowEditing.scss */ +.x-opera .x-grid-row-editor .x-form-text { + padding-left: 3px; +} + +/* line 1, ../../../ext-theme-classic/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd { + border-width: 1px 0 !important; + -webkit-box-shadow: inset 0 0 0 0 #e5e5e5; + -moz-box-shadow: inset 0 0 0 0 #e5e5e5; + box-shadow: inset 0 0 0 0 #e5e5e5; +} + +/* line 6, ../../../ext-theme-classic/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd-sibling-expanded { + -webkit-box-shadow: inset 0 1px 0 0 #ececec; + -moz-box-shadow: inset 0 1px 0 0 #ececec; + box-shadow: inset 0 1px 0 0 #ececec; +} + +/* line 5, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, +.x-resizable-pinned .x-resizable-handle-east, +.x-resizable-pinned .x-resizable-handle-west { + background-position: left; +} +/* line 10, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, +.x-resizable-pinned .x-resizable-handle-south, +.x-resizable-pinned .x-resizable-handle-north { + background-position: top; +} +/* line 14, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southeast, +.x-resizable-pinned .x-resizable-handle-southeast { + background-position: top left; +} +/* line 18, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northwest, +.x-resizable-pinned .x-resizable-handle-northwest { + background-position: bottom right; +} +/* line 22, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northeast, +.x-resizable-pinned .x-resizable-handle-northeast { + background-position: bottom left; +} +/* line 26, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southwest, +.x-resizable-pinned .x-resizable-handle-southwest { + background-position: top right; +} + +/* line 6, ../../../ext-theme-classic/sass/src/slider/Multi.scss */ +.x-ie6 .x-slider-horz, +.x-ie6 .x-slider-horz .x-slider-end, +.x-ie6 .x-slider-horz .x-slider-inner { + background-image: url(images/slider/slider-bg.gif); +} +/* line 10, ../../../ext-theme-classic/sass/src/slider/Multi.scss */ +.x-ie6 .x-slider-horz .x-slider-thumb { + background-image: url(images/slider/slider-thumb.gif); +} +/* line 16, ../../../ext-theme-classic/sass/src/slider/Multi.scss */ +.x-ie6 .x-slider-vert, +.x-ie6 .x-slider-vert .x-slider-end, +.x-ie6 .x-slider-vert .x-slider-inner { + background-image: url(images/slider/slider-v-bg.gif); +} +/* line 20, ../../../ext-theme-classic/sass/src/slider/Multi.scss */ +.x-ie6 .x-slider-vert .x-slider-thumb { + background-image: url(images/slider/slider-v-thumb.gif); +} + +/* line 1, ../../../ext-theme-classic/sass/src/tab/Panel.scss */ +.x-tab-icon-el { + top: -1px; +} + +/* line 6, ../../../ext-theme-classic/sass/src/tab/Panel.scss */ +.x-tab-noicon .x-tab-icon { + display: none; +} diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/ext-theme-gray-all-rtl-debug.css b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/ext-theme-gray-all-rtl-debug.css new file mode 100644 index 000000000..c7b3dbcb9 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/ext-theme-gray-all-rtl-debug.css @@ -0,0 +1,15872 @@ +/** + * @class Global_CSS + * + * Global CSS variables and mixins of Ext JS. + */ +/** + * Creates a background gradient. + * + * @param {Color} $bg-color The background color of the gradient + * @param {String/List} [$type] The type of gradient to be used. Can either + * be a String which is a predefined gradient, or it can can be a list of + * color_stops. If none is set, it will still set the `background-color` + * to the $background-color. + * @param {String} [$direction=top] The direction of the gradient. Can either be + * `top` or `left`. + * @member Global_CSS + */ +/* + * Method which inserts a full background-image property for a theme image. + * It checks if the file exists and if it doesn't, it'll throw an error. + * By default it will not include the background-image property if it is not found, + * but this can be changed by changing the default value of $include-missing-images to + * be true. + */ +/** + * @class Ext.Component + */ +/** + * @var {color} $color + * The default text color to be used throughout the theme. + */ +/** + * @var {string} $font-family + * The default font-family to be used throughout the theme. + */ +/** + * @var {string} $font-size + * The default font-family to be used throughout the theme. + */ +/** + * @var {string} $base-gradient + * The base gradient to be used throughout the theme. + */ +/** + * @var {color} $base-color + * The base color to be used throughout the theme. + */ +/** + * @var {color} $neutral-color + * The neutral color to be used throughout the theme. + */ +/** + * @var {color} $body-background-color + * Background color to apply to the body element + */ +/** + * @class Ext.button.Button + */ +/** + * @var {boolean} $button-include-ui-menu-arrows + * True to use a different image url for the menu button arrows for each button UI + */ +/** + * @var {boolean} $button-include-ui-split-arrows + * True to use a different image url for the split button arrows for each button UI + */ +/** + * @var {boolean} $button-include-split-over-arrows + * True to include different split arrows for buttons' hover state. + */ +/** + * @var {boolean} $button-toolbar-include-split-noline-arrows + * True to include "noline" split arrows for toolbar buttons in their default state. + */ +/** + * @var {number} $button-opacity-disabled + * opacity to apply to the button's main element when the buton is disabled + */ +/** + * @var {number} $button-inner-opacity-disabled + * opacity to apply to the button's inner elements (icon and text) when the buton is disabled + */ +/** + * @var {number} $button-toolbar-opacity-disabled + * opacity to apply to the toolbar button's main element when the buton is disabled + */ +/** + * @var {number} $button-toolbar-inner-opacity-disabled + * opacity to apply to the toolbar button's inner elements (icon and text) when the buton is disabled + */ +/** + * @class Ext.panel.Panel + */ +/** + * @var {$border-width-threshold} + * The maximum width a Panel's border can be before resizer handles are embedded into the borders using negative absolute positions. + * + * This defaults to 2, so that in the classic theme which uses 1 pixel borders, resize handles are in the content area + * within the border as they always have been. + * + * In the Neptune theme, the handles are embedded into the 5 pixel wide borders of any framed panel. + */ +/** + * @class Ext.form.Labelable + */ +/** + * @var {measurement} $form-error-icon-width + * Width for form error icons. + */ +/** + * @var {measurement} $form-error-icon-right-margin + * Margin for error icons that are aligned to the side of the field + */ +/** + * @var {measurement} $form-error-under-icon-spacing + * The space between the icon and the message for errors that display under the field + */ +/** + * @var {measurement} $form-error-under-padding + * The space between the icon and the message for errors that display under the field + */ +/** + * @var {measurement} $form-item-margin-bottom + * The bottom margin to apply to form items when in auto, anchor, vbox, or table layout + */ +/** + * @class Ext.form.field.Base + */ +/** + * @var {measurement} $form-field-height + * Height for form fields. + */ +/** + * @var {measurement} $form-toolbar-field-height + * Height for form fields in toolbar. + */ +/** + * @var {measurement} $form-field-padding + * Padding around form fields. + */ +/** + * @var {measurement} $form-field-font-size + * Font size for form fields. + */ +/** + * @var {font-family} $form-field-font-family + * Font family for form fields. + */ +/** + * @var {font-weight} $form-field-font-weight + * Font weight for form fields. + */ +/** + * @var {font} $form-field-font + * Font for form fields. + */ +/** + * @var {color} $form-field-color + * Text color for form fields. + */ +/** + * @var {color} $form-field-empty-color + * Text color for empty form fields. + */ +/** + * @var {color} $form-field-border-color + * Border color for form fields. + */ +/** + * @var {measurement} $form-field-border-width + * Border width for form fields. + */ +/** + * @var {string} $form-field-border-style + * Border style for form fields. + */ +/** + * @var {color} $form-field-focus-border-color + * Border color for focused form fields. + */ +/** + * @var {color} $form-field-invalid-border-color + * Border color for invalid form fields. + */ +/** + * @var {color} $form-field-background-color + * Background color for form fields. + */ +/** + * @var {string} $form-field-background-image + * Background image for form fields. + */ +/** + * @var {color} $form-field-invalid-background-color + * Background color for invalid form fields. + */ +/** + * @var {string} $form-field-invalid-background-image + * Background image for invalid form fields. + */ +/** + * @var {background-repeat} $form-field-invalid-background-repeat + * Background repeat for invalid form fields. + */ +/** + * @var {background-position} $form-field-invalid-background-position + * Background position for invalid form fields. + */ +/** + * @var {number} $form-field-disabled-opacity + */ +/** + * @class Ext.form.field.Display + */ +/** + * @var {font} $form-display-field-font + * Font for form display fields. + */ +/** + * @var {color} $form-display-field-color + * Text color for form display fields. + */ +/** + * @class Ext.form.FieldSet + */ +/** + * @var {string} $fieldset-collapse-tool-background-image + * The background-image to use for the collapse tool. If null the default tool + * sprite will be used. Defaults to null. + */ +/** + * @class Ext.form.field.Checkbox + */ +/** + * @var {measurement} $form-checkbox-label-spacing + * The space between the label and the checkbox. + */ +/** + * @var {measurement} $form-checkbox-vertical-position-adjust + * adjustment for vertical positioning of checkbox. An adjustment of a pixel or two may + * be needed to achieve the desired vertical alignment of the checkbox with the label in + * cetain combinations of field-height and checkbox height + */ +/** + * @class Ext.menu.Menu + */ +/** + * @var {color} $menu-glyph-color + * The color to use for menu icons configured using {@link Ext.menu.Item#glyph glyph} + */ +/** + * @class Ext.tab.Panel + */ +/** + * var {boolean} $tabbar-closable-icon-include-hover-background-position + * true to change the x postition of the close icon background image on hover to allow for a + * horizonatlly alined background image sprite + */ +/** + * var {boolean} $tabbar-closable-icon-include-pressed-background-position + * true to change the x postition of the close icon background image on click to allow for a + * horizonatlly alined background image sprite + */ +/** + * var {boolean} $tabbar-scroller-include-hover-background-position + * true to change the x postition of the background image on hover to allow for a + * horizonatlly alined background image sprite + */ +/** + * var {boolean} $tabbar-scroller-include-plain-icon + * true to include separate scroller icons for "plain" tabbars + */ +/** + * var {boolean} $tabbar-scroller-symmetrical-icons + * if true, the tabbar will use symmetrical scroller icons. Top and bottom tabbars + * will share icons, and Left and right will share icons. + */ +/** + * var {number} $tab-opacity-disabled + * opacity to apply to the tab's main element when the tab is disabled + */ +/** + * var {number} $tab-text-opacity-disabled + * opacity to apply to the tab's text element when the tab is disabled + */ +/** + * var {number} $tab-icon-opacity-disabled + * opacity to apply to the tab's icon element when the tab is disabled + */ +/** + * var {string} $tab-left-rotate-direction + * @private + * Has issues with IE + * The direction to rotate the contents of a left-aligned tab. `right` to rotate + * clockwise or `left` to rotate counterclockwise. Defaults to `left`. + */ +/** + * var {string} $tab-right-rotate-direction + * @private + * Has issues with IE + * The direction to rotate the contents of a right-aligned tab. `right` to rotate + * clockwise or `left` to rotate counterclockwise. Defaults to `right`. + */ +/** + * @class Ext.Component + */ +/** + * @var {string} $prefix + * The prefix to be applied to all CSS selectors. If this is changed, it must also be changed in your + * JavaScript application. + */ +/** + * @var {boolean/string} $relative-image-path-for-uis + * True to use a relative image path for all new UIs. If true, the path will be "../images/". + * It can also be a string of the path value. + * It defaults to false, which means it will look for the images in the ExtJS SDK folder. + */ +/** + * @var {boolean} $include-not-found-images + * True to include files which are not found when compiling your SASS + */ +/** + * @var {boolean} $include-ie + * True to include Internet Explorer specific rules + */ +/** + * @var {boolean} $include-ff + * True to include Firefox specific rules + */ +/** + * @var {boolean} $include-chrome + * True to include Chrome specific rules + */ +/** + * @var {boolean} $include-safari + * True to include Safari specific rules + */ +/** + * @var {boolean} $include-opera + * True to include Opera specific rules + */ +/** + * @var {boolean} $include-webkit + * True to include Webkit specific rules + */ +/** + * @var {boolean} $compile-all + * True to copile all CSS, even if above include rules are false + */ +/** + * @var {measurement} $css-shadow-border-radius + * The border radius for CSS shadows + */ +/** + * @var {color} $include-shadow-images + * True to include all shadow images. + */ +/** + * @var {boolean} $include-rtl + * True to include right-to-left styles + */ +/** + * @var {string} $image-extension + * default file extension to use for images (defaults to 'png'). + */ +/** + * @var {string} $slicer-image-extension + * default file extension to use for slicer images (defaults to 'gif'). + */ +/** + * Default search path for images + */ +/* + * Although this file only contains a variable, all vars are included by default + * in application sass builds, so this needs to be in the rule file section + * to allow javascript inclusion filtering to disable it. + */ +/** + * @var {boolean} $include-rtl + * True to include right-to-left styles + * @member Global_CSS + */ +/* line 1, ../../../ext-theme-base/sass/src/Component.scss */ +.x-body { + margin: 0; +} + +/* line 5, ../../../ext-theme-base/sass/src/Component.scss */ +img { + border: 0; +} + +/* line 10, ../../../ext-theme-base/sass/src/Component.scss */ +.x-border-box, +.x-border-box * { + box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +/* line 17, ../../../ext-theme-base/sass/src/Component.scss */ +.x-rtl { + direction: rtl; +} + +/* line 21, ../../../ext-theme-base/sass/src/Component.scss */ +.x-ltr { + direction: ltr; +} + +/* line 25, ../../../ext-theme-base/sass/src/Component.scss */ +.x-clear { + overflow: hidden; + clear: both; + font-size: 0; + line-height: 0; + display: table; +} + +/* line 33, ../../../ext-theme-base/sass/src/Component.scss */ +.x-strict .x-ie7 .x-clear { + height: 0; + width: 0; +} + +/* line 41, ../../../ext-theme-base/sass/src/Component.scss */ +.x-layer { + position: absolute !important; + overflow: hidden; + zoom: 1; +} + +/* line 49, ../../../ext-theme-base/sass/src/Component.scss */ +.x-fixed-layer { + position: fixed !important; + overflow: hidden; + zoom: 1; +} + +/* line 55, ../../../ext-theme-base/sass/src/Component.scss */ +.x-shim { + position: absolute; + left: 0; + top: 0; + overflow: hidden; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 63, ../../../ext-theme-base/sass/src/Component.scss */ +.x-hide-display { + display: none !important; +} + +/* line 67, ../../../ext-theme-base/sass/src/Component.scss */ +.x-hide-visibility { + visibility: hidden !important; +} + +/* line 72, ../../../ext-theme-base/sass/src/Component.scss */ +.x-ie6 .x-item-disabled { + filter: none; +} + +/* line 78, ../../../ext-theme-base/sass/src/Component.scss */ +.x-hidden, +.x-hide-offsets { + display: block !important; + visibility: hidden !important; + position: absolute !important; + top: -10000px !important; +} + +/* line 88, ../../../ext-theme-base/sass/src/Component.scss */ +.x-hide-nosize { + height: 0 !important; + width: 0 !important; +} + +/* line 93, ../../../ext-theme-base/sass/src/Component.scss */ +.x-masked-relative { + position: relative; +} + +/* line 99, ../../../ext-theme-base/sass/src/Component.scss */ +.x-ie-shadow { + background-color: #777; + display: none; + position: absolute; + overflow: hidden; + zoom: 1; +} + +/* line 108, ../../../ext-theme-base/sass/src/Component.scss */ +.x-unselectable { + user-select: none; + -o-user-select: none; + -ms-user-select: none; + -moz-user-select: -moz-none; + -webkit-user-select: none; + cursor: default; +} + +/* line 112, ../../../ext-theme-base/sass/src/Component.scss */ +.x-selectable { + cursor: auto; + -moz-user-select: text; + -webkit-user-select: text; + -ms-user-select: text; + user-select: text; + -o-user-select: text; +} + +/* line 127, ../../../ext-theme-base/sass/src/Component.scss */ +.x-list-plain { + list-style-type: none; + margin: 0; + padding: 0; +} + +/* line 134, ../../../ext-theme-base/sass/src/Component.scss */ +.x-table-plain { + border-collapse: collapse; + border-spacing: 0; + font-size: 1em; +} + +/* line 147, ../../../ext-theme-base/sass/src/Component.scss */ +.x-frame-tl, +.x-frame-tr, +.x-frame-tc, +.x-frame-bl, +.x-frame-br, +.x-frame-bc { + overflow: hidden; + background-repeat: no-repeat; +} + +/* line 153, ../../../ext-theme-base/sass/src/Component.scss */ +.x-frame-tc, +.x-frame-bc { + background-repeat: repeat-x; +} + +/* line 157, ../../../ext-theme-base/sass/src/Component.scss */ +.x-frame-mc { + background-repeat: repeat-x; + overflow: hidden; +} + +/* line 162, ../../../ext-theme-base/sass/src/Component.scss */ +.x-proxy-el { + position: absolute; + background: #b4b4b4; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + opacity: 0.8; +} + +/* line 169, ../../../ext-theme-base/sass/src/Component.scss */ +.x-css-shadow { + position: absolute; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; +} + +/* line 175, ../../../ext-theme-base/sass/src/Component.scss */ +.x-item-disabled, +.x-item-disabled * { + cursor: default; +} + +/* line 3, ../../../ext-theme-base/sass/src/layout/container/Container.scss */ +.x-box-item { + position: absolute !important; + left: 0; + top: 0; +} + +/* line 10, ../../../ext-theme-base/sass/src/layout/container/Container.scss */ +.x-rtl > .x-box-item { + right: 0; + left: auto; +} + +/* line 20, ../../../ext-theme-base/sass/src/layout/container/Container.scss */ +.x-ie6 .x-rtl .x-box-item, +.x-quirks .x-ie .x-rtl .x-box-item { + right: 0; + left: auto; +} + +/* line 1, ../../../ext-theme-base/sass/src/LoadMask.scss */ +.x-mask { + z-index: 100; + position: absolute; + width: 100%; + height: 100%; + zoom: 1; +} + +/* line 10, ../../../ext-theme-base/sass/src/LoadMask.scss */ +.x-mask-shim { + z-index: 100; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* line 20, ../../../ext-theme-base/sass/src/LoadMask.scss */ +.x-mask-msg { + z-index: 20001; + position: absolute; +} + +/* line 1, ../../../ext-theme-base/sass/src/ProgressBar.scss */ +.x-progress { + position: relative; + border-style: solid; + overflow: hidden; +} + +/* line 7, ../../../ext-theme-base/sass/src/ProgressBar.scss */ +.x-progress-bar { + overflow: hidden; + position: absolute; + width: 0; + height: 100%; +} + +/* line 14, ../../../ext-theme-base/sass/src/ProgressBar.scss */ +.x-progress-text { + overflow: hidden; + position: absolute; +} + +/* line 1, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn { + display: inline-block; + position: relative; + zoom: 1; + *display: inline; + cursor: pointer; + white-space: nowrap; + vertical-align: middle; + text-decoration: none; +} + +/* line 15, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-wrap { + position: relative; +} + +/* line 19, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-button { + position: relative; + display: block; + text-decoration: none; + overflow: hidden; + outline: 0; + zoom: 1; +} + +/* line 28, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-inner { + display: block; + white-space: nowrap; + overflow: hidden; + zoom: 1; +} + +/* line 35, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-icon-el { + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + background-repeat: no-repeat; + text-align: center; +} + +/* line 45, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-inner-center { + text-align: center; +} + +/* line 49, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-inner-left { + text-align: left; +} + +/* line 54, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-rtl.x-btn-inner-left { + text-align: right; +} + +/* line 59, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-btn-inner-right { + text-align: right; +} + +/* line 64, ../../../ext-theme-base/sass/src/button/Button.scss */ +.x-rtl.x-btn-inner-right { + text-align: left; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-layout-ct { + overflow: hidden; + zoom: 1; +} + +/* line 6, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-target { + position: absolute; + width: 20000px; + top: 0; + left: 0; + height: 1px; +} + +/* line 25, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-rtl.x-box-target { + left: auto; + right: 0; +} + +/* line 31, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-inner { + overflow: hidden; + zoom: 1; + position: relative; + left: 0; + top: 0; +} + +/* line 41, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-horizontal-box-overflow-body { + float: left; +} + +/* line 45, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-scroller { + position: relative; + background-repeat: no-repeat; +} + +/* line 51, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-scroller-left, +.x-box-scroller-right { + float: left; + height: 100%; + z-index: 5; +} + +/* line 59, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-scroller-top .x-box-scroller, +.x-box-scroller-bottom .x-box-scroller { + line-height: 0; + font-size: 0; + background-position: center 0; +} + +/* line 66, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-box-menu-after { + float: right; +} + +/* line 71, ../../../ext-theme-base/sass/src/layout/container/Box.scss */ +.x-rtl.x-box-menu-after { + float: left; +} + +/* line 1, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-text { + white-space: nowrap; +} + +/* line 5, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-separator { + display: block; + font-size: 1px; + overflow: hidden; + cursor: default; + border: 0; + width: 0; + height: 0; + line-height: 0px; +} + +/* line 17, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-quirks .x-ie .x-toolbar .x-toolbar-separator-horizontal { + width: 2px; +} + +/* line 22, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroller { + padding-left: 0; +} + +/* line 29, ../../../ext-theme-base/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-plain { + border: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked { + position: absolute !important; + z-index: 1; +} + +/* line 7, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-vertical { + position: static; +} + +/* line 11, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-top { + border-bottom-width: 0 !important; +} + +/* line 15, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-bottom { + border-top-width: 0 !important; +} + +/* line 19, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-left { + border-right-width: 0 !important; +} + +/* line 23, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-right { + border-left-width: 0 !important; +} + +/* line 27, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-noborder-top { + border-top-width: 0 !important; +} + +/* line 31, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-noborder-right { + border-right-width: 0 !important; +} + +/* line 35, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-noborder-bottom { + border-bottom-width: 0 !important; +} + +/* line 39, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-docked-noborder-left { + border-left-width: 0 !important; +} + +/* line 45, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-l { + border-left-width: 0 !important; +} + +/* line 48, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-b { + border-bottom-width: 0 !important; +} + +/* line 51, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-bl { + border-bottom-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 55, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-r { + border-right-width: 0 !important; +} + +/* line 58, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-rl { + border-right-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 62, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-rb { + border-right-width: 0 !important; + border-bottom-width: 0 !important; +} + +/* line 66, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-rbl { + border-right-width: 0 !important; + border-bottom-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 71, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-t { + border-top-width: 0 !important; +} + +/* line 74, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-tl { + border-top-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 78, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-tb { + border-top-width: 0 !important; + border-bottom-width: 0 !important; +} + +/* line 82, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-tbl { + border-top-width: 0 !important; + border-bottom-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 87, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-tr { + border-top-width: 0 !important; + border-right-width: 0 !important; +} + +/* line 91, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-trl { + border-top-width: 0 !important; + border-right-width: 0 !important; + border-left-width: 0 !important; +} + +/* line 96, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-trb { + border-top-width: 0 !important; + border-right-width: 0 !important; + border-bottom-width: 0 !important; +} + +/* line 101, ../../../ext-theme-base/sass/src/layout/component/Dock.scss */ +.x-noborder-trbl { + border-width: 0 !important; +} + +/* line 1, ../../../ext-theme-base/sass/src/panel/Header.scss */ +.x-header-icon { + background-repeat: no-repeat; + background-position: 0 0; + vertical-align: middle; + text-align: center; +} + +/* line 8, ../../../ext-theme-base/sass/src/panel/Header.scss */ +.x-header-text-container { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} + +/* line 15, ../../../ext-theme-base/sass/src/panel/Header.scss */ +.x-rtl.x-header-text-container { + -o-text-overflow: clip; + text-overflow: clip; +} + +/* line 4, ../../../ext-theme-base/sass/src/dd/DD.scss */ +.x-dd-drag-proxy, +.x-dd-drag-current { + z-index: 1000000!important; + pointer-events: none; +} + +/* line 2, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drag-repair .x-dd-drag-ghost { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); + opacity: 0.6; +} +/* line 6, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drag-repair .x-dd-drop-icon { + display: none; +} + +/* line 11, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drag-ghost { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85); + opacity: 0.85; + padding: 5px; + padding-left: 20px; + white-space: nowrap; + color: #000; + font: normal 11px tahoma, arial, verdana, sans-serif; + border: 1px solid; + border-color: #ddd #bbb #bbb #ddd; + background-color: #fff; +} + +/* line 28, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drop-icon { + position: absolute; + top: 3px; + left: 3px; + display: block; + width: 16px; + height: 16px; + background-color: transparent; + background-position: center; + background-repeat: no-repeat; + z-index: 1; +} + +/* line 51, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-rtl .x-dd-drag-ghost { + padding-left: 5px; + padding-right: 20px; +} +/* line 55, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-rtl .x-dd-drop-icon { + left: auto; + right: 3px; +} + +/* line 66, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drop-ok .x-dd-drop-icon { + background-image: url(images/dd/drop-yes.gif); +} + +/* line 70, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drop-ok-add .x-dd-drop-icon { + background-image: url(images/dd/drop-add.gif); +} + +/* line 75, ../../../ext-theme-base/sass/src/dd/StatusProxy.scss */ +.x-dd-drop-nodrop div.x-dd-drop-icon { + background-image: url(images/dd/drop-no.gif); +} + +/* line 2, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-panel, +.x-plain { + overflow: hidden; + position: relative; +} + +/* line 7, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-panel { + outline: none; +} + +/* line 23, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-ie .x-panel-header, +.x-ie .x-panel-header-tl, +.x-ie .x-panel-header-tc, +.x-ie .x-panel-header-tr, +.x-ie .x-panel-header-ml, +.x-ie .x-panel-header-mc, +.x-ie .x-panel-header-mr, +.x-ie .x-panel-header-bl, +.x-ie .x-panel-header-bc, +.x-ie .x-panel-header-br { + zoom: 1; +} + +/* line 29, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-ie8 td.x-frame-mc { + vertical-align: top; +} + +/* line 35, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-panel-body { + overflow: hidden; + position: relative; +} + +/* line 42, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-vertical .x-frame-mc { + background-repeat: repeat-y; +} + +/* line 49, ../../../ext-theme-base/sass/src/panel/Panel.scss */ +.x-panel-header-plain, +.x-panel-body-plain { + border: 0; + padding: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/tip/Tip.scss */ +.x-tip { + position: absolute; + overflow: visible; + /*pointer needs to be able to stick out*/ +} + +/* line 6, ../../../ext-theme-base/sass/src/tip/Tip.scss */ +.x-tip-body { + overflow: hidden; + position: relative; +} + +/* line 11, ../../../ext-theme-base/sass/src/tip/Tip.scss */ +.x-tip-anchor { + position: absolute; + overflow: hidden; + border-style: solid; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Table.scss */ +.x-table-layout { + font-size: 1em; +} + +/* line 1, ../../../ext-theme-base/sass/src/container/ButtonGroup.scss */ +.x-btn-group { + position: relative; + overflow: hidden; +} + +/* line 6, ../../../ext-theme-base/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body { + position: relative; + zoom: 1; +} +/* line 9, ../../../ext-theme-base/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body .x-table-layout-cell { + vertical-align: top; +} + +/* line 1, ../../../ext-theme-base/sass/src/container/Viewport.scss */ +.x-viewport, .x-viewport body { + margin: 0; + padding: 0; + border: 0 none; + overflow: hidden; + height: 100%; + position: static; +} + +/* line 1, ../../../ext-theme-base/sass/src/window/Window.scss */ +.x-window { + outline: none; + overflow: hidden; +} +/* line 5, ../../../ext-theme-base/sass/src/window/Window.scss */ +.x-window .x-window-wrap { + position: relative; +} + +/* line 10, ../../../ext-theme-base/sass/src/window/Window.scss */ +.x-window-body { + position: relative; + overflow: hidden; +} + +/* line 15, ../../../ext-theme-base/sass/src/window/Window.scss */ +.x-window-body-plain { + background: transparent; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-item-label { + display: block; +} + +/* line 5, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-item-label-right { + text-align: right; +} + +/* line 9, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-item-label-top { + display: block; + zoom: 1; +} + +/* line 15, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-invalid-icon { + overflow: hidden; +} +/* line 17, ../../../ext-theme-base/sass/src/form/Labelable.scss */ +.x-form-invalid-icon ul { + display: none; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/TextArea.scss */ +.x-form-textarea { + overflow: auto; + resize: none; +} +/* line 5, ../../../ext-theme-base/sass/src/form/field/TextArea.scss */ +.x-safari.x-mac .x-form-textarea { + margin-bottom: -2px; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/CheckboxGroup.scss */ +table.x-form-checkboxgroup { + margin: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset { + display: block; + /* preserve margins in IE */ + position: relative; +} + +/* line 6, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header { + overflow: hidden; +} +/* line 10, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-form-item, +.x-fieldset-header .x-tool { + float: left; +} +/* line 14, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-form-cb-wrap { + font-size: 0; + line-height: 0; +} +/* line 19, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-form-cb { + margin: 0; +} + +/* line 27, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-rtl.x-fieldset-header .x-form-item, +.x-rtl.x-fieldset-header .x-tool { + float: right; +} + +/* line 33, ../../../ext-theme-base/sass/src/form/FieldSet.scss */ +.x-fieldset-header-text { + float: left; +} + +/*misc*/ +/* line 4, ../../../ext-theme-base/sass/src/form/Panel.scss */ +.x-webkit *:focus { + outline: none !important; +} + +/* line 11, ../../../ext-theme-base/sass/src/form/Panel.scss */ +.x-form-item { + vertical-align: top; + table-layout: fixed; +} + +/* line 17, ../../../ext-theme-base/sass/src/form/Panel.scss */ +.x-form-item-body { + position: relative; +} + +/* line 22, ../../../ext-theme-base/sass/src/form/Panel.scss */ +.x-form-form-item td { + border-top: 1px solid transparent; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/Checkbox.scss */ +.x-form-cb { + vertical-align: top; + overflow: hidden; + padding: 0; + border: 0; +} +/* line 6, ../../../ext-theme-base/sass/src/form/field/Checkbox.scss */ +.x-form-cb::-moz-focus-inner { + padding: 0; + border: 0; +} + +/* line 13, ../../../ext-theme-base/sass/src/form/field/Checkbox.scss */ +.x-form-cb-label { + zoom: 1; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/Trigger.scss */ +.x-form-trigger { + cursor: pointer; + overflow: hidden; + background-repeat: no-repeat; +} +/* line 5, ../../../ext-theme-base/sass/src/form/field/Trigger.scss */ +.x-item-disabled .x-form-trigger { + cursor: default; +} + +/* line 10, ../../../ext-theme-base/sass/src/form/field/Trigger.scss */ +.x-trigger-noedit { + cursor: default; +} + +/* line 14, ../../../ext-theme-base/sass/src/form/field/Trigger.scss */ +.x-form-trigger-wrap { + vertical-align: top; +} + +/* line 2, ../../../ext-theme-base/sass/src/form/field/Spinner.scss */ +.x-form-spinner-up, +.x-form-spinner-down { + font-size: 0; + /*for IE*/ + border-bottom: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker { + position: relative; +} + +/* line 5, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-inner { + table-layout: fixed; + width: 100%; + border-collapse: separate; +} + +/* line 11, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-cell { + padding: 0; +} + +/* line 15, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-header { + position: relative; + zoom: 1; +} + +/* line 20, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-arrow { + position: absolute; + outline: none; + font-size: 0; +} + +/* line 26, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-column-header { + padding: 0; +} + +/* line 30, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-datepicker-date { + display: block; + zoom: 1; + text-decoration: none; +} + +/* line 36, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker { + position: absolute; + left: 0; + top: 0; +} + +/* line 42, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-body { + height: 100%; +} + +/* line 47, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-months, +.x-monthpicker-years { + float: left; + height: 100%; +} + +/* line 52, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-item { + float: left; +} + +/* line 56, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-item-inner { + display: block; + text-decoration: none; +} + +/* line 61, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-button-ct { + float: left; + text-align: center; +} + +/* line 66, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-button { + display: inline-block; + outline: none; + font-size: 0; +} + +/* line 72, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-monthpicker-buttons { + position: absolute; + bottom: 0; + width: 100%; +} +/* line 78, ../../../ext-theme-base/sass/src/picker/Date.scss */ +.x-strict .x-ie6 .x-monthpicker-buttons { + bottom: -1px; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/File.scss */ +.x-form-file-wrap .x-form-file-input { + position: absolute; + top: -4px; + right: -2px; + height: 30px; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + /* Yes, there's actually a good reason for this... + * If the configured buttonText is set to something longer than the default, + * then it will quickly exceed the width of the hidden file input's "Browse..." + * button, so part of the custom button's clickable area will be covered by + * the hidden file input's text box instead. This results in a text-selection + * mouse cursor over that part of the button, at least in Firefox, which is + * confusing to a user. Giving the hidden file input a huge font-size makes + * the native button part very large so it will cover the whole clickable area. + */ + font-size: 100px; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/Hidden.scss */ +.x-form-item-hidden { + margin: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/picker/Color.scss */ +.x-color-picker-item { + float: left; + text-decoration: none; +} + +/* line 6, ../../../ext-theme-base/sass/src/picker/Color.scss */ +.x-color-picker-item-inner { + display: block; + font-size: 1px; +} + +/* line 1, ../../../ext-theme-base/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-toolbar { + position: static !important; +} + +/* line 5, ../../../ext-theme-base/sass/src/form/field/HtmlEditor.scss */ +.x-htmleditor-iframe { + display: block; + overflow: auto; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Fit.scss */ +.x-fit-item { + position: relative; +} + +/* line 1, ../../../ext-theme-base/sass/src/panel/Table.scss */ +.x-grid-row { + outline: none; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Absolute.scss */ +.x-abs-layout-ct { + position: relative; +} + +/* line 5, ../../../ext-theme-base/sass/src/layout/container/Absolute.scss */ +.x-abs-layout-item { + position: absolute !important; +} + +/* line 1, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter { + font-size: 1px; +} + +/* line 5, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter-horizontal { + cursor: e-resize; + cursor: row-resize; +} + +/* line 10, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter-vertical { + cursor: e-resize; + cursor: col-resize; +} + +/* line 17, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed, +.x-splitter-horizontal-noresize, +.x-splitter-vertical-noresize { + cursor: default; +} + +/* line 21, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-splitter-active { + z-index: 4; +} + +/* line 25, ../../../ext-theme-base/sass/src/resizer/Splitter.scss */ +.x-collapse-el { + position: absolute; + background-repeat: no-repeat; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Border.scss */ +.x-border-layout-ct { + overflow: hidden; + zoom: 1; +} + +/* line 6, ../../../ext-theme-base/sass/src/layout/container/Border.scss */ +.x-border-layout-ct { + position: relative; +} + +/* line 10, ../../../ext-theme-base/sass/src/layout/container/Border.scss */ +.x-border-region-slide-in { + z-index: 5; +} + +/* line 14, ../../../ext-theme-base/sass/src/layout/container/Border.scss */ +.x-region-collapsed-placeholder { + z-index: 4; +} + +/* line 1, ../../../ext-theme-base/sass/src/layout/container/Column.scss */ +.x-column { + float: left; +} + +/* line 6, ../../../ext-theme-base/sass/src/layout/container/Column.scss */ +.x-rtl > .x-column { + float: right; +} + +/* line 13, ../../../ext-theme-base/sass/src/layout/container/Column.scss */ +.x-ie6 .x-rtl .x-column, .x-quirks .x-ie .x-rtl .x-column { + float: right; +} + +/* line 21, ../../../ext-theme-base/sass/src/layout/container/Column.scss */ +.x-ie6 .x-column { + display: inline; + /*prevent IE6 double-margin bug*/ +} + +/* line 25, ../../../ext-theme-base/sass/src/layout/container/Column.scss */ +.x-quirks .x-ie .x-form-layout-table, .x-quirks .x-ie .x-form-layout-table tbody tr.x-form-item { + position: relative; +} + +/* line 2, ../../../ext-theme-base/sass/src/layout/container/Form.scss */ +.x-form-layout-table { + border-collapse: separate; + border-spacing: 0 2px; +} + +/* line 9, ../../../ext-theme-base/sass/src/layout/container/Form.scss */ +.x-ie6 .x-form-layout-table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu { + outline: none; +} + +/* line 5, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item { + white-space: nowrap; + overflow: hidden; +} + +/* line 14, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item-cmp .x-field-label-cell { + vertical-align: middle; +} + +/* line 22, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-icon-separator { + position: absolute; + top: 0px; + z-index: 0; + height: 100%; + overflow: hidden; +} +/* line 28, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-plain .x-menu-icon-separator { + display: none; +} + +/* line 33, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item-link { + text-decoration: none; + outline: 0; + zoom: 1; +} + +/* line 40, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item-text { + zoom: 1; +} + +/* line 47, ../../../ext-theme-base/sass/src/menu/Menu.scss */ +.x-menu-item-icon, +.x-menu-item-icon-right, +.x-menu-item-arrow { + position: absolute; + text-align: center; +} + +/* line 1, ../../../ext-theme-base/sass/src/resizer/SplitterTracker.scss */ +.x-resizable-overlay { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + display: none; + z-index: 200000; + background-color: #fff; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider { + outline: none; + zoom: 1; + position: relative; +} + +/* line 9, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-inner { + position: relative; + left: 0; + top: 0; + overflow: visible; + zoom: 1; +} +/* line 17, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-inner { + background: repeat-y 0 0; +} + +/* line 23, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-end { + zoom: 1; +} + +/* line 28, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-thumb { + position: absolute; + background: no-repeat 0 0; +} +/* line 31, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-thumb { + left: 0; +} +/* line 34, ../../../ext-theme-base/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-thumb { + bottom: 0; +} + +/* line 1, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab { + display: block; + white-space: nowrap; + z-index: 1; +} + +/* line 7, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-active { + z-index: 3; +} + +/* line 11, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-wrap { + display: block; + position: relative; +} + +/* line 16, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-button { + zoom: 1; + display: block; + outline: none; +} + +/* line 22, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-inner { + display: block; + text-align: center; + white-space: nowrap; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + overflow: hidden; + zoom: 1; +} + +/* line 32, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-btn-icon-el { + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + background-repeat: no-repeat; + text-align: center; +} + +/* line 42, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar { + z-index: 1; +} + +/* line 46, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-body { + z-index: 2; + position: relative; +} + +/* line 51, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip { + position: absolute; + line-height: 0; + font-size: 0; + z-index: 1; +} + +/* line 58, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-horizontal .x-tab-bar-strip { + width: 100%; + left: 0; +} + +/* line 63, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-vertical .x-tab-bar-strip { + height: 100%; + top: 0; +} + +/* line 68, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-top { + bottom: 0; +} + +/* line 72, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-bottom { + top: 0; +} + +/* line 76, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-left { + right: 0; +} + +/* line 81, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-bar .x-tab-bar-strip-left { + right: auto; + left: 0; +} + +/* line 87, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-right { + left: 0; +} + +/* line 92, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-bar .x-tab-bar-strip-right { + left: auto; + right: 0; +} + +/* line 98, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-bar-plain { + background: transparent !important; +} + +/* line 102, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-icon-el { + position: absolute; + background-repeat: no-repeat; + top: 0; + left: 0; + right: auto; + bottom: 0; +} + +/* line 112, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-icon-el { + left: auto; + right: 0; +} + +/* line 118, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-close-btn { + position: absolute; + font-size: 0; + line-height: 0; + background: no-repeat; +} + +/* line 125, ../../../ext-theme-base/sass/src/tab/Panel.scss */ +.x-tab-mc { + overflow: visible; +} + +/* line 1, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-surface { + display: -moz-inline-stack; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; + overflow: hidden; +} + +/* line 6, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.rvml { + behavior: url(#default#VML); +} + +/* line 10, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-surface tspan { + user-select: none; + -o-user-select: none; + -ms-user-select: none; + -moz-user-select: -moz-none; + -webkit-user-select: none; + cursor: default; +} + +/* line 14, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-sprite { + position: absolute; + left: 0; + top: 0; + width: 1px; + height: 1px; +} + +/* line 22, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-group { + position: absolute; + left: 0; + top: 0; + width: 1000px; + height: 1000px; +} + +/* line 30, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-measure-span { + position: absolute; + left: -9999em; + top: -9999em; + padding: 0; + margin: 0; + display: inline; +} + +/* line 39, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-base { + position: relative; + top: 0; + left: 0; + overflow: hidden; + display: inline-block; +} + +/* line 47, ../../../ext-theme-base/sass/src/draw/Component.scss */ +.x-vml-base { + position: relative; + top: 0; + left: 0; + overflow: hidden; + display: inline-block; +} + +/* line 55, ../../../ext-theme-base/sass/src/draw/Component.scss */ +svg, vml { + overflow: hidden; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/Component.scss */ +.x-body { + color: black; + font-size: 12px; + font-family: tahoma, arial, verdana, sans-serif; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/Component.scss */ +.x-animating-size, +.x-collapsed { + overflow: hidden!important; +} + +/* line 2, ../../../ext-theme-neutral/sass/src/Editor.scss */ +.x-editor .x-form-item-body { + padding-bottom: 0; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-element { + position: absolute; + top: -10px; + left: -10px; + width: 0px; + height: 0px; +} + +/* line 9, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-frame { + position: absolute; + left: 0px; + top: 0px; + z-index: 100000000; + width: 0px; + height: 0px; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-frame-top, +.x-focus-frame-bottom, +.x-focus-frame-left, +.x-focus-frame-right { + position: absolute; + top: 0px; + left: 0px; +} + +/* line 28, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-frame-top, +.x-focus-frame-bottom { + border-top: solid 2px #15428b; + height: 2px; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/FocusManager.scss */ +.x-focus-frame-left, +.x-focus-frame-right { + border-left: solid 2px #15428b; + width: 2px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/LoadMask.scss */ +.x-mask { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + background: #cccccc; +} + +/* line 9, ../../../ext-theme-neutral/sass/src/LoadMask.scss */ +.x-mask-msg { + padding: 2px; + border-style: solid; + border-width: 1px; + border-color: #bcb0b0; + background-image: none; + background-color: #e0e0e0; +} + +/* line 29, ../../../ext-theme-neutral/sass/src/LoadMask.scss */ +.x-mask-msg-inner { + padding: 0 5px; + border-style: solid; + border-width: 1px; + border-color: #b3b3b3; + background-color: #eeeeee; + color: #222222; + font: normal 11px tahoma, arial, verdana, sans-serif; +} + +/* line 41, ../../../ext-theme-neutral/sass/src/LoadMask.scss */ +.x-mask-msg-text { + padding: 5px 5px 5px 20px; + background-image: url(images/grid/loading.gif); + background-repeat: no-repeat; + background-position: 0 center; +} + +/* line 52, ../../../ext-theme-neutral/sass/src/LoadMask.scss */ +.x-rtl.x-mask-msg-text { + padding: 5px 20px 5px 5px; + background-position: right center; +} + +/** + * Creates a visual theme for an Ext.ProgressBar + * @member Ext.ProgressBar + */ +/* line 24, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-progress-default { + background-color: #f1f1f1; + border-width: 1px; + height: 20px; + border-color: #8e8e8e; + /**/ + /**/ + /* */ +} +/* line 29, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-strict .x-ie7m .x-progress-default { + height: 18px; +} +/* line 41, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-progress-default .x-progress-bar-default { + background-image: none; + background-color: #ababab; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d1d1d1), color-stop(50%, #b8b8b8), color-stop(51%, #ababab), color-stop(100%, #9e9e9e)); + background-image: -webkit-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); + background-image: -moz-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); + background-image: -o-linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); + background-image: linear-gradient(top, #d1d1d1, #b8b8b8 50%, #ababab 51%, #9e9e9e); +} +/* line 49, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-nlg .x-progress-default .x-progress-bar-default { + background: repeat-x; + background-image: url(images/progress/progress-default-bg.gif); +} +/* line 56, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-progress-default .x-progress-text { + color: white; + font-weight: bold; + font-size: 11px; + text-align: center; + line-height: 18px; +} +/* line 64, ../../../ext-theme-neutral/sass/src/ProgressBar.scss */ +.x-progress-default .x-progress-text-back { + color: #5d5d5d; + line-height: 18px; +} +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-progress-default .x-progress-bar-default:after { + display: none; + content: "x-slicer:bg:url(images/progress/progress-default-bg.gif)"; +} + +/** + * Creates a visual theme of an Ext.Button + * @member Ext.button.Button + */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small { + border-color: #bbbbbb; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 2px 2px 2px 2px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #f8f8f8; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); + background-image: -moz-linear-gradient(top, #ffffff, #eeeeee); + background-image: -o-linear-gradient(top, #ffffff, #eeeeee); + background-image: linear-gradient(top, #ffffff, #eeeeee); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-mc { + background-image: url(images/btn/btn-default-small-fbg.gif); + background-position: 0 top; + background-color: #f8f8f8; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-btn-default-small { + background-image: url(images/btn/btn-default-small-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-small { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-small { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tr, +.x-btn-default-small-br, +.x-btn-default-small-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tl, +.x-btn-default-small-bl, +.x-btn-default-small-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-tl, +.x-btn-default-small-bl, +.x-btn-default-small-tr, +.x-btn-default-small-br, +.x-btn-default-small-tc, +.x-btn-default-small-bc, +.x-btn-default-small-ml, +.x-btn-default-small-mr { + zoom: 1; + background-image: url(images/btn/btn-default-small-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-ml, +.x-btn-default-small-mr { + zoom: 1; + background-image: url(images/btn/btn-default-small-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-small-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-small-tl, +.x-strict .x-ie7 .x-btn-default-small-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-small-fbg.gif), bg:url(images/btn/btn-default-small-bg.gif), corners:url(images/btn/btn-default-small-corners.gif), sides:url(images/btn/btn-default-small-sides.gif)"; +} + +/**/ +/* */ +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 4px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-arrow-right { + padding-right: 12px; +} +/* line 99, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-rtl.x-btn-arrow-right { + padding-right: 0; + padding-left: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-glyph { + font-size: 16px; + line-height: 16px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-small .x-btn-glyph { + color: #959595; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: #ececec; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #e2e2e2)); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -moz-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -o-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: linear-gradient(top, #f4f4f4, #e2e2e2); +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-button, +.x-btn-default-small-noicon .x-btn-button { + height: 16px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-inner, +.x-btn-default-small-noicon .x-btn-inner { + line-height: 16px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-small-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-small-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} +/* line 179, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-small-noicon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-small-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 4px; + padding-left: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-inner { + width: 16px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon .x-btn-icon-el { + width: 16px; + height: 16px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-left .x-btn-button { + height: 16px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-left .x-btn-inner { + line-height: 16px; + padding-left: 20px; +} +/* line 213, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-left .x-rtl.x-btn-inner { + padding-left: 4px; + padding-right: 20px; +} +/* line 218, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 20px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-left .x-btn-icon-el { + width: 16px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-small-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-small-icon-text-left .x-btn-icon-el { + height: 16px; +} +/* line 234, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-left .x-rtl.x-btn-icon-el { + left: auto; + right: 0; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-right .x-btn-button { + height: 16px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-right .x-btn-inner { + line-height: 16px; + padding-right: 20px; +} +/* line 253, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-right .x-rtl.x-btn-inner { + padding-right: 4px; + padding-left: 20px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-right .x-btn-icon-el { + width: 16px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-small-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-small-icon-text-right .x-btn-icon-el { + height: 16px; +} +/* line 270, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-right .x-rtl.x-btn-icon-el { + left: 0; + right: auto; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-top .x-btn-inner { + padding-top: 20px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-top .x-btn-icon-el { + height: 16px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-small-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-small-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-bottom .x-btn-inner { + padding-bottom: 20px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-icon-text-bottom .x-btn-icon-el { + height: 16px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-small-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-small-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-menu-active, +.x-btn-default-small-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: linear-gradient(top, #c7c7c7, #e0e0e0); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-frame-tl, +.x-btn-default-small-over .x-frame-bl, +.x-btn-default-small-over .x-frame-tr, +.x-btn-default-small-over .x-frame-br, +.x-btn-default-small-over .x-frame-tc, +.x-btn-default-small-over .x-frame-bc { + background-image: url(images/btn/btn-default-small-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-frame-ml, +.x-btn-default-small-over .x-frame-mr { + background-image: url(images/btn/btn-default-small-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-small-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-focus .x-frame-tl, +.x-btn-default-small-focus .x-frame-bl, +.x-btn-default-small-focus .x-frame-tr, +.x-btn-default-small-focus .x-frame-br, +.x-btn-default-small-focus .x-frame-tc, +.x-btn-default-small-focus .x-frame-bc { + background-image: url(images/btn/btn-default-small-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-focus .x-frame-ml, +.x-btn-default-small-focus .x-frame-mr { + background-image: url(images/btn/btn-default-small-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-small-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-menu-active .x-frame-tl, +.x-btn-default-small-menu-active .x-frame-bl, +.x-btn-default-small-menu-active .x-frame-tr, +.x-btn-default-small-menu-active .x-frame-br, +.x-btn-default-small-menu-active .x-frame-tc, +.x-btn-default-small-menu-active .x-frame-bc, +.x-btn-default-small-pressed .x-frame-tl, +.x-btn-default-small-pressed .x-frame-bl, +.x-btn-default-small-pressed .x-frame-tr, +.x-btn-default-small-pressed .x-frame-br, +.x-btn-default-small-pressed .x-frame-tc, +.x-btn-default-small-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-small-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-menu-active .x-frame-ml, +.x-btn-default-small-menu-active .x-frame-mr, +.x-btn-default-small-pressed .x-frame-ml, +.x-btn-default-small-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-small-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-menu-active .x-frame-mc, +.x-btn-default-small-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-small-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled .x-frame-tl, +.x-btn-default-small-disabled .x-frame-bl, +.x-btn-default-small-disabled .x-frame-tr, +.x-btn-default-small-disabled .x-frame-br, +.x-btn-default-small-disabled .x-frame-tc, +.x-btn-default-small-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-small-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled .x-frame-ml, +.x-btn-default-small-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-small-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled .x-frame-mc { + background-color: #ececec; + background-image: url(images/btn/btn-default-small-disabled-fbg.gif); +} + +/* line 484, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-bg.gif); +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small-menu-active, +.x-nlg .x-btn-default-small-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-pressed-bg.gif); +} + +/* line 521, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-small-disabled { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-small-disabled-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-split-right { + background-image: url(images/button/s-arrow.gif); + padding-right: 14px; +} +/* line 547, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-rtl.gif); + padding-right: 0; + padding-left: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 566, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-o-rtl.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 585, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-small-disabled .x-btn-inner, +.x-btn-default-small-disabled .x-btn-icon-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-over-corners.gif), sides:url(images/btn/btn-default-small-over-sides.gif), frame-bg:url(images/btn/btn-default-small-over-fbg.gif), bg:url(images/btn/btn-default-small-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-focus-corners.gif), sides:url(images/btn/btn-default-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-small-focus-fbg.gif), bg:url(images/btn/btn-default-small-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-pressed-corners.gif), sides:url(images/btn/btn-default-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-small-pressed-fbg.gif), bg:url(images/btn/btn-default-small-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-small-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-disabled-corners.gif), sides:url(images/btn/btn-default-small-disabled-sides.gif), frame-bg:url(images/btn/btn-default-small-disabled-fbg.gif), bg:url(images/btn/btn-default-small-disabled-bg.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium { + border-color: #bbbbbb; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 3px 3px 3px 3px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #f8f8f8; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); + background-image: -moz-linear-gradient(top, #ffffff, #eeeeee); + background-image: -o-linear-gradient(top, #ffffff, #eeeeee); + background-image: linear-gradient(top, #ffffff, #eeeeee); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-mc { + background-image: url(images/btn/btn-default-medium-fbg.gif); + background-position: 0 top; + background-color: #f8f8f8; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-btn-default-medium { + background-image: url(images/btn/btn-default-medium-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-medium { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-medium { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tr, +.x-btn-default-medium-br, +.x-btn-default-medium-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tl, +.x-btn-default-medium-bl, +.x-btn-default-medium-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-tl, +.x-btn-default-medium-bl, +.x-btn-default-medium-tr, +.x-btn-default-medium-br, +.x-btn-default-medium-tc, +.x-btn-default-medium-bc, +.x-btn-default-medium-ml, +.x-btn-default-medium-mr { + zoom: 1; + background-image: url(images/btn/btn-default-medium-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-ml, +.x-btn-default-medium-mr { + zoom: 1; + background-image: url(images/btn/btn-default-medium-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-medium-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-medium-tl, +.x-strict .x-ie7 .x-btn-default-medium-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-medium-fbg.gif), bg:url(images/btn/btn-default-medium-bg.gif), corners:url(images/btn/btn-default-medium-corners.gif), sides:url(images/btn/btn-default-medium-sides.gif)"; +} + +/**/ +/* */ +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 3px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-arrow-right { + padding-right: 12px; +} +/* line 99, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-rtl.x-btn-arrow-right { + padding-right: 0; + padding-left: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-glyph { + font-size: 24px; + line-height: 24px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-medium .x-btn-glyph { + color: #959595; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: #ececec; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #e2e2e2)); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -moz-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -o-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: linear-gradient(top, #f4f4f4, #e2e2e2); +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-button, +.x-btn-default-medium-noicon .x-btn-button { + height: 24px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-inner, +.x-btn-default-medium-noicon .x-btn-inner { + line-height: 24px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-medium-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-medium-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} +/* line 179, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-medium-noicon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-medium-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 3px; + padding-left: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-inner { + width: 24px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon .x-btn-icon-el { + width: 24px; + height: 24px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-left .x-btn-button { + height: 24px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-left .x-btn-inner { + line-height: 24px; + padding-left: 28px; +} +/* line 213, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-left .x-rtl.x-btn-inner { + padding-left: 3px; + padding-right: 28px; +} +/* line 218, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 28px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-left .x-btn-icon-el { + width: 24px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-medium-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-medium-icon-text-left .x-btn-icon-el { + height: 24px; +} +/* line 234, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-left .x-rtl.x-btn-icon-el { + left: auto; + right: 0; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-right .x-btn-button { + height: 24px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-right .x-btn-inner { + line-height: 24px; + padding-right: 28px; +} +/* line 253, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-right .x-rtl.x-btn-inner { + padding-right: 3px; + padding-left: 28px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-right .x-btn-icon-el { + width: 24px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-medium-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-medium-icon-text-right .x-btn-icon-el { + height: 24px; +} +/* line 270, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-right .x-rtl.x-btn-icon-el { + left: 0; + right: auto; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-top .x-btn-inner { + padding-top: 28px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-top .x-btn-icon-el { + height: 24px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-medium-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-medium-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-bottom .x-btn-inner { + padding-bottom: 28px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-icon-text-bottom .x-btn-icon-el { + height: 24px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-medium-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-medium-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-menu-active, +.x-btn-default-medium-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: linear-gradient(top, #c7c7c7, #e0e0e0); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-frame-tl, +.x-btn-default-medium-over .x-frame-bl, +.x-btn-default-medium-over .x-frame-tr, +.x-btn-default-medium-over .x-frame-br, +.x-btn-default-medium-over .x-frame-tc, +.x-btn-default-medium-over .x-frame-bc { + background-image: url(images/btn/btn-default-medium-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-frame-ml, +.x-btn-default-medium-over .x-frame-mr { + background-image: url(images/btn/btn-default-medium-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-medium-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-focus .x-frame-tl, +.x-btn-default-medium-focus .x-frame-bl, +.x-btn-default-medium-focus .x-frame-tr, +.x-btn-default-medium-focus .x-frame-br, +.x-btn-default-medium-focus .x-frame-tc, +.x-btn-default-medium-focus .x-frame-bc { + background-image: url(images/btn/btn-default-medium-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-focus .x-frame-ml, +.x-btn-default-medium-focus .x-frame-mr { + background-image: url(images/btn/btn-default-medium-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-medium-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-menu-active .x-frame-tl, +.x-btn-default-medium-menu-active .x-frame-bl, +.x-btn-default-medium-menu-active .x-frame-tr, +.x-btn-default-medium-menu-active .x-frame-br, +.x-btn-default-medium-menu-active .x-frame-tc, +.x-btn-default-medium-menu-active .x-frame-bc, +.x-btn-default-medium-pressed .x-frame-tl, +.x-btn-default-medium-pressed .x-frame-bl, +.x-btn-default-medium-pressed .x-frame-tr, +.x-btn-default-medium-pressed .x-frame-br, +.x-btn-default-medium-pressed .x-frame-tc, +.x-btn-default-medium-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-medium-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-menu-active .x-frame-ml, +.x-btn-default-medium-menu-active .x-frame-mr, +.x-btn-default-medium-pressed .x-frame-ml, +.x-btn-default-medium-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-medium-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-menu-active .x-frame-mc, +.x-btn-default-medium-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-medium-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled .x-frame-tl, +.x-btn-default-medium-disabled .x-frame-bl, +.x-btn-default-medium-disabled .x-frame-tr, +.x-btn-default-medium-disabled .x-frame-br, +.x-btn-default-medium-disabled .x-frame-tc, +.x-btn-default-medium-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-medium-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled .x-frame-ml, +.x-btn-default-medium-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-medium-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled .x-frame-mc { + background-color: #ececec; + background-image: url(images/btn/btn-default-medium-disabled-fbg.gif); +} + +/* line 484, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-bg.gif); +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium-menu-active, +.x-nlg .x-btn-default-medium-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-pressed-bg.gif); +} + +/* line 521, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-medium-disabled { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-medium-disabled-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-split-right { + background-image: url(images/button/s-arrow.gif); + padding-right: 14px; +} +/* line 547, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-rtl.gif); + padding-right: 0; + padding-left: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 566, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-o-rtl.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 585, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-medium-disabled .x-btn-inner, +.x-btn-default-medium-disabled .x-btn-icon-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-over-corners.gif), sides:url(images/btn/btn-default-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-medium-over-fbg.gif), bg:url(images/btn/btn-default-medium-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-focus-corners.gif), sides:url(images/btn/btn-default-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-medium-focus-fbg.gif), bg:url(images/btn/btn-default-medium-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-pressed-corners.gif), sides:url(images/btn/btn-default-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-medium-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-medium-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-disabled-corners.gif), sides:url(images/btn/btn-default-medium-disabled-sides.gif), frame-bg:url(images/btn/btn-default-medium-disabled-fbg.gif), bg:url(images/btn/btn-default-medium-disabled-bg.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large { + border-color: #bbbbbb; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 3px 3px 3px 3px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #f8f8f8; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); + background-image: -moz-linear-gradient(top, #ffffff, #eeeeee); + background-image: -o-linear-gradient(top, #ffffff, #eeeeee); + background-image: linear-gradient(top, #ffffff, #eeeeee); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-mc { + background-image: url(images/btn/btn-default-large-fbg.gif); + background-position: 0 top; + background-color: #f8f8f8; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-btn-default-large { + background-image: url(images/btn/btn-default-large-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-large { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-large { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tr, +.x-btn-default-large-br, +.x-btn-default-large-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tl, +.x-btn-default-large-bl, +.x-btn-default-large-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-tl, +.x-btn-default-large-bl, +.x-btn-default-large-tr, +.x-btn-default-large-br, +.x-btn-default-large-tc, +.x-btn-default-large-bc, +.x-btn-default-large-ml, +.x-btn-default-large-mr { + zoom: 1; + background-image: url(images/btn/btn-default-large-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-ml, +.x-btn-default-large-mr { + zoom: 1; + background-image: url(images/btn/btn-default-large-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-large-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-large-tl, +.x-strict .x-ie7 .x-btn-default-large-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-large-fbg.gif), bg:url(images/btn/btn-default-large-bg.gif), corners:url(images/btn/btn-default-large-corners.gif), sides:url(images/btn/btn-default-large-sides.gif)"; +} + +/**/ +/* */ +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 3px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-arrow-right { + padding-right: 12px; +} +/* line 99, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-rtl.x-btn-arrow-right { + padding-right: 0; + padding-left: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-glyph { + font-size: 32px; + line-height: 32px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-large .x-btn-glyph { + color: #959595; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: #ececec; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f4f4f4), color-stop(100%, #e2e2e2)); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -moz-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: -o-linear-gradient(top, #f4f4f4, #e2e2e2); + background-image: linear-gradient(top, #f4f4f4, #e2e2e2); +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-button, +.x-btn-default-large-noicon .x-btn-button { + height: 32px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-inner, +.x-btn-default-large-noicon .x-btn-inner { + line-height: 32px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-large-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-large-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} +/* line 179, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-large-noicon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-large-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 3px; + padding-left: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-inner { + width: 32px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon .x-btn-icon-el { + width: 32px; + height: 32px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-left .x-btn-button { + height: 32px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-left .x-btn-inner { + line-height: 32px; + padding-left: 36px; +} +/* line 213, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-left .x-rtl.x-btn-inner { + padding-left: 3px; + padding-right: 36px; +} +/* line 218, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 36px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-left .x-btn-icon-el { + width: 32px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-large-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-large-icon-text-left .x-btn-icon-el { + height: 32px; +} +/* line 234, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-left .x-rtl.x-btn-icon-el { + left: auto; + right: 0; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-right .x-btn-button { + height: 32px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-right .x-btn-inner { + line-height: 32px; + padding-right: 36px; +} +/* line 253, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-right .x-rtl.x-btn-inner { + padding-right: 3px; + padding-left: 36px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-right .x-btn-icon-el { + width: 32px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-large-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-large-icon-text-right .x-btn-icon-el { + height: 32px; +} +/* line 270, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-right .x-rtl.x-btn-icon-el { + left: 0; + right: auto; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-top .x-btn-inner { + padding-top: 36px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-top .x-btn-icon-el { + height: 32px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-large-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-large-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-bottom .x-btn-inner { + padding-bottom: 36px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-icon-text-bottom .x-btn-icon-el { + height: 32px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-large-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-large-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -moz-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: -o-linear-gradient(top, #fbfbfb, #e9e9e9); + background-image: linear-gradient(top, #fbfbfb, #e9e9e9); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-menu-active, +.x-btn-default-large-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -moz-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: -o-linear-gradient(top, #c7c7c7, #e0e0e0); + background-image: linear-gradient(top, #c7c7c7, #e0e0e0); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-frame-tl, +.x-btn-default-large-over .x-frame-bl, +.x-btn-default-large-over .x-frame-tr, +.x-btn-default-large-over .x-frame-br, +.x-btn-default-large-over .x-frame-tc, +.x-btn-default-large-over .x-frame-bc { + background-image: url(images/btn/btn-default-large-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-frame-ml, +.x-btn-default-large-over .x-frame-mr { + background-image: url(images/btn/btn-default-large-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-large-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-focus .x-frame-tl, +.x-btn-default-large-focus .x-frame-bl, +.x-btn-default-large-focus .x-frame-tr, +.x-btn-default-large-focus .x-frame-br, +.x-btn-default-large-focus .x-frame-tc, +.x-btn-default-large-focus .x-frame-bc { + background-image: url(images/btn/btn-default-large-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-focus .x-frame-ml, +.x-btn-default-large-focus .x-frame-mr { + background-image: url(images/btn/btn-default-large-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-large-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-menu-active .x-frame-tl, +.x-btn-default-large-menu-active .x-frame-bl, +.x-btn-default-large-menu-active .x-frame-tr, +.x-btn-default-large-menu-active .x-frame-br, +.x-btn-default-large-menu-active .x-frame-tc, +.x-btn-default-large-menu-active .x-frame-bc, +.x-btn-default-large-pressed .x-frame-tl, +.x-btn-default-large-pressed .x-frame-bl, +.x-btn-default-large-pressed .x-frame-tr, +.x-btn-default-large-pressed .x-frame-br, +.x-btn-default-large-pressed .x-frame-tc, +.x-btn-default-large-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-large-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-menu-active .x-frame-ml, +.x-btn-default-large-menu-active .x-frame-mr, +.x-btn-default-large-pressed .x-frame-ml, +.x-btn-default-large-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-large-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-menu-active .x-frame-mc, +.x-btn-default-large-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-large-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled .x-frame-tl, +.x-btn-default-large-disabled .x-frame-bl, +.x-btn-default-large-disabled .x-frame-tr, +.x-btn-default-large-disabled .x-frame-br, +.x-btn-default-large-disabled .x-frame-tc, +.x-btn-default-large-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-large-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled .x-frame-ml, +.x-btn-default-large-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-large-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled .x-frame-mc { + background-color: #ececec; + background-image: url(images/btn/btn-default-large-disabled-fbg.gif); +} + +/* line 484, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-bg.gif); +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large-menu-active, +.x-nlg .x-btn-default-large-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-pressed-bg.gif); +} + +/* line 521, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-large-disabled { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-large-disabled-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-split-right { + background-image: url(images/button/s-arrow.gif); + padding-right: 14px; +} +/* line 547, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-rtl.gif); + padding-right: 0; + padding-left: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 566, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-o-rtl.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 585, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-large-disabled .x-btn-inner, +.x-btn-default-large-disabled .x-btn-icon-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-over-corners.gif), sides:url(images/btn/btn-default-large-over-sides.gif), frame-bg:url(images/btn/btn-default-large-over-fbg.gif), bg:url(images/btn/btn-default-large-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-focus-corners.gif), sides:url(images/btn/btn-default-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-large-focus-fbg.gif), bg:url(images/btn/btn-default-large-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-pressed-corners.gif), sides:url(images/btn/btn-default-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-large-pressed-fbg.gif), bg:url(images/btn/btn-default-large-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-large-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-disabled-corners.gif), sides:url(images/btn/btn-default-large-disabled-sides.gif), frame-bg:url(images/btn/btn-default-large-disabled-fbg.gif), bg:url(images/btn/btn-default-large-disabled-bg.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small { + border-color: transparent; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 2px 2px 2px 2px; + border-width: 1px; + border-style: solid; + background-color: transparent; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-mc { + background-color: transparent; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-toolbar-small { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-toolbar-small { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tr, +.x-btn-default-toolbar-small-br, +.x-btn-default-toolbar-small-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tl, +.x-btn-default-toolbar-small-bl, +.x-btn-default-toolbar-small-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-tl, +.x-btn-default-toolbar-small-bl, +.x-btn-default-toolbar-small-tr, +.x-btn-default-toolbar-small-br, +.x-btn-default-toolbar-small-tc, +.x-btn-default-toolbar-small-bc, +.x-btn-default-toolbar-small-ml, +.x-btn-default-toolbar-small-mr { + zoom: 1; +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-ml, +.x-btn-default-toolbar-small-mr { + zoom: 1; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-small-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-toolbar-small-tl, +.x-strict .x-ie7 .x-btn-default-toolbar-small-bl { + position: relative; + right: 0; +} + +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 4px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-arrow-right { + padding-right: 12px; +} +/* line 99, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-rtl.x-btn-arrow-right { + padding-right: 0; + padding-left: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-glyph { + font-size: 16px; + line-height: 16px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-toolbar-small .x-btn-glyph { + color: #999999; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: transparent; +} +/* line 142, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled .x-btn-inner { + color: #8c8c8c; +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-button, +.x-btn-default-toolbar-small-noicon .x-btn-button { + height: 16px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-inner, +.x-btn-default-toolbar-small-noicon .x-btn-inner { + line-height: 16px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-small-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-small-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} +/* line 179, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-toolbar-small-noicon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-toolbar-small-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 4px; + padding-left: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-inner { + width: 16px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon .x-btn-icon-el { + width: 16px; + height: 16px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-left .x-btn-button { + height: 16px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-left .x-btn-inner { + line-height: 16px; + padding-left: 20px; +} +/* line 213, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-left .x-rtl.x-btn-inner { + padding-left: 4px; + padding-right: 20px; +} +/* line 218, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 20px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el { + width: 16px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el { + height: 16px; +} +/* line 234, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-left .x-rtl.x-btn-icon-el { + left: auto; + right: 0; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-right .x-btn-button { + height: 16px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-right .x-btn-inner { + line-height: 16px; + padding-right: 20px; +} +/* line 253, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-right .x-rtl.x-btn-inner { + padding-right: 4px; + padding-left: 20px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el { + width: 16px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el { + height: 16px; +} +/* line 270, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-right .x-rtl.x-btn-icon-el { + left: 0; + right: auto; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-top .x-btn-inner { + padding-top: 20px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el { + height: 16px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-bottom .x-btn-inner { + padding-bottom: 20px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el { + height: 16px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-menu-active, +.x-btn-default-toolbar-small-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d6d6d6), color-stop(48%, #dcdcdc), color-stop(52%, #deb6b7), color-stop(100%, #e1bebf)); + background-image: -webkit-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -moz-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -o-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-frame-tl, +.x-btn-default-toolbar-small-over .x-frame-bl, +.x-btn-default-toolbar-small-over .x-frame-tr, +.x-btn-default-toolbar-small-over .x-frame-br, +.x-btn-default-toolbar-small-over .x-frame-tc, +.x-btn-default-toolbar-small-over .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-small-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-frame-ml, +.x-btn-default-toolbar-small-over .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-small-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-small-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-focus .x-frame-tl, +.x-btn-default-toolbar-small-focus .x-frame-bl, +.x-btn-default-toolbar-small-focus .x-frame-tr, +.x-btn-default-toolbar-small-focus .x-frame-br, +.x-btn-default-toolbar-small-focus .x-frame-tc, +.x-btn-default-toolbar-small-focus .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-small-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-focus .x-frame-ml, +.x-btn-default-toolbar-small-focus .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-small-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-small-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-menu-active .x-frame-tl, +.x-btn-default-toolbar-small-menu-active .x-frame-bl, +.x-btn-default-toolbar-small-menu-active .x-frame-tr, +.x-btn-default-toolbar-small-menu-active .x-frame-br, +.x-btn-default-toolbar-small-menu-active .x-frame-tc, +.x-btn-default-toolbar-small-menu-active .x-frame-bc, +.x-btn-default-toolbar-small-pressed .x-frame-tl, +.x-btn-default-toolbar-small-pressed .x-frame-bl, +.x-btn-default-toolbar-small-pressed .x-frame-tr, +.x-btn-default-toolbar-small-pressed .x-frame-br, +.x-btn-default-toolbar-small-pressed .x-frame-tc, +.x-btn-default-toolbar-small-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-small-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-menu-active .x-frame-ml, +.x-btn-default-toolbar-small-menu-active .x-frame-mr, +.x-btn-default-toolbar-small-pressed .x-frame-ml, +.x-btn-default-toolbar-small-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-small-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-menu-active .x-frame-mc, +.x-btn-default-toolbar-small-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-toolbar-small-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled .x-frame-tl, +.x-btn-default-toolbar-small-disabled .x-frame-bl, +.x-btn-default-toolbar-small-disabled .x-frame-tr, +.x-btn-default-toolbar-small-disabled .x-frame-br, +.x-btn-default-toolbar-small-disabled .x-frame-tc, +.x-btn-default-toolbar-small-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-small-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled .x-frame-ml, +.x-btn-default-toolbar-small-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-small-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled .x-frame-mc { + background-color: transparent; +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-small-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-small-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-small-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-small-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-small-menu-active, +.x-nlg .x-btn-default-toolbar-small-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-small-pressed-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-split-right { + background-image: url(images/button/s-arrow-noline.gif); + padding-right: 14px; +} +/* line 547, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-noline-rtl.gif); + padding-right: 0; + padding-left: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b-noline.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 566, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-o-rtl.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 577, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-small-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-small-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-over-corners.gif), sides:url(images/btn/btn-default-toolbar-small-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-small-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-small-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-small-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium { + border-color: transparent; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 3px 3px 3px 3px; + border-width: 1px; + border-style: solid; + background-color: transparent; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-mc { + background-color: transparent; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-toolbar-medium { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-toolbar-medium { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tr, +.x-btn-default-toolbar-medium-br, +.x-btn-default-toolbar-medium-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tl, +.x-btn-default-toolbar-medium-bl, +.x-btn-default-toolbar-medium-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-tl, +.x-btn-default-toolbar-medium-bl, +.x-btn-default-toolbar-medium-tr, +.x-btn-default-toolbar-medium-br, +.x-btn-default-toolbar-medium-tc, +.x-btn-default-toolbar-medium-bc, +.x-btn-default-toolbar-medium-ml, +.x-btn-default-toolbar-medium-mr { + zoom: 1; +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-ml, +.x-btn-default-toolbar-medium-mr { + zoom: 1; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-medium-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-toolbar-medium-tl, +.x-strict .x-ie7 .x-btn-default-toolbar-medium-bl { + position: relative; + right: 0; +} + +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 3px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-arrow-right { + padding-right: 12px; +} +/* line 99, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-rtl.x-btn-arrow-right { + padding-right: 0; + padding-left: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-glyph { + font-size: 24px; + line-height: 24px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-toolbar-medium .x-btn-glyph { + color: #999999; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: transparent; +} +/* line 142, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled .x-btn-inner { + color: #8c8c8c; +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-button, +.x-btn-default-toolbar-medium-noicon .x-btn-button { + height: 24px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-inner, +.x-btn-default-toolbar-medium-noicon .x-btn-inner { + line-height: 24px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-medium-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-medium-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} +/* line 179, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-toolbar-medium-noicon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-toolbar-medium-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 3px; + padding-left: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-inner { + width: 24px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon .x-btn-icon-el { + width: 24px; + height: 24px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-left .x-btn-button { + height: 24px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-left .x-btn-inner { + line-height: 24px; + padding-left: 28px; +} +/* line 213, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-left .x-rtl.x-btn-inner { + padding-left: 3px; + padding-right: 28px; +} +/* line 218, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 28px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el { + width: 24px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el { + height: 24px; +} +/* line 234, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-left .x-rtl.x-btn-icon-el { + left: auto; + right: 0; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-right .x-btn-button { + height: 24px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-right .x-btn-inner { + line-height: 24px; + padding-right: 28px; +} +/* line 253, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-right .x-rtl.x-btn-inner { + padding-right: 3px; + padding-left: 28px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el { + width: 24px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el { + height: 24px; +} +/* line 270, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-right .x-rtl.x-btn-icon-el { + left: 0; + right: auto; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-top .x-btn-inner { + padding-top: 28px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el { + height: 24px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-inner { + padding-bottom: 28px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el { + height: 24px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-menu-active, +.x-btn-default-toolbar-medium-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d6d6d6), color-stop(48%, #dcdcdc), color-stop(52%, #deb6b7), color-stop(100%, #e1bebf)); + background-image: -webkit-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -moz-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -o-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-frame-tl, +.x-btn-default-toolbar-medium-over .x-frame-bl, +.x-btn-default-toolbar-medium-over .x-frame-tr, +.x-btn-default-toolbar-medium-over .x-frame-br, +.x-btn-default-toolbar-medium-over .x-frame-tc, +.x-btn-default-toolbar-medium-over .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-medium-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-frame-ml, +.x-btn-default-toolbar-medium-over .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-medium-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-medium-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-focus .x-frame-tl, +.x-btn-default-toolbar-medium-focus .x-frame-bl, +.x-btn-default-toolbar-medium-focus .x-frame-tr, +.x-btn-default-toolbar-medium-focus .x-frame-br, +.x-btn-default-toolbar-medium-focus .x-frame-tc, +.x-btn-default-toolbar-medium-focus .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-medium-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-focus .x-frame-ml, +.x-btn-default-toolbar-medium-focus .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-medium-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-medium-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-menu-active .x-frame-tl, +.x-btn-default-toolbar-medium-menu-active .x-frame-bl, +.x-btn-default-toolbar-medium-menu-active .x-frame-tr, +.x-btn-default-toolbar-medium-menu-active .x-frame-br, +.x-btn-default-toolbar-medium-menu-active .x-frame-tc, +.x-btn-default-toolbar-medium-menu-active .x-frame-bc, +.x-btn-default-toolbar-medium-pressed .x-frame-tl, +.x-btn-default-toolbar-medium-pressed .x-frame-bl, +.x-btn-default-toolbar-medium-pressed .x-frame-tr, +.x-btn-default-toolbar-medium-pressed .x-frame-br, +.x-btn-default-toolbar-medium-pressed .x-frame-tc, +.x-btn-default-toolbar-medium-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-medium-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-menu-active .x-frame-ml, +.x-btn-default-toolbar-medium-menu-active .x-frame-mr, +.x-btn-default-toolbar-medium-pressed .x-frame-ml, +.x-btn-default-toolbar-medium-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-medium-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-menu-active .x-frame-mc, +.x-btn-default-toolbar-medium-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled .x-frame-tl, +.x-btn-default-toolbar-medium-disabled .x-frame-bl, +.x-btn-default-toolbar-medium-disabled .x-frame-tr, +.x-btn-default-toolbar-medium-disabled .x-frame-br, +.x-btn-default-toolbar-medium-disabled .x-frame-tc, +.x-btn-default-toolbar-medium-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-medium-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled .x-frame-ml, +.x-btn-default-toolbar-medium-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-medium-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled .x-frame-mc { + background-color: transparent; +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-medium-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-medium-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-medium-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-medium-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-medium-menu-active, +.x-nlg .x-btn-default-toolbar-medium-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-medium-pressed-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-split-right { + background-image: url(images/button/s-arrow-noline.gif); + padding-right: 14px; +} +/* line 547, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-noline-rtl.gif); + padding-right: 0; + padding-left: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b-noline.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 566, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-o-rtl.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 577, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-medium-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-medium-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-over-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-medium-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-medium-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-medium-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)"; +} + +/**/ +/* */ +/* line 71, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large { + border-color: transparent; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 3px 3px 3px 3px; + border-width: 1px; + border-style: solid; + background-color: transparent; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-mc { + background-color: transparent; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-default-toolbar-large { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-default-toolbar-large { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tr, +.x-btn-default-toolbar-large-br, +.x-btn-default-toolbar-large-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tl, +.x-btn-default-toolbar-large-bl, +.x-btn-default-toolbar-large-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-tl, +.x-btn-default-toolbar-large-bl, +.x-btn-default-toolbar-large-tr, +.x-btn-default-toolbar-large-br, +.x-btn-default-toolbar-large-tc, +.x-btn-default-toolbar-large-bc, +.x-btn-default-toolbar-large-ml, +.x-btn-default-toolbar-large-mr { + zoom: 1; +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-ml, +.x-btn-default-toolbar-large-mr { + zoom: 1; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-default-toolbar-large-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-default-toolbar-large-tl, +.x-strict .x-ie7 .x-btn-default-toolbar-large-bl { + position: relative; + right: 0; +} + +/* line 78, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-inner { + font-size: 11px; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 0 3px; +} +/* line 86, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-arrow { + background-image: url(images/button/arrow.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-arrow-right { + padding-right: 12px; +} +/* line 99, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-rtl.x-btn-arrow-right { + padding-right: 0; + padding-left: 12px; +} +/* line 105, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-arrow-bottom { + padding-bottom: 12px; +} +/* line 109, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-glyph { + font-size: 32px; + line-height: 32px; + color: #333333; + opacity: 0.5; +} +/* line 128, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie8m .x-btn-default-toolbar-large .x-btn-glyph { + color: #999999; +} + +/* line 134, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled { + border-color: #d7d7d7; + background-image: none; + background-color: transparent; +} +/* line 142, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled .x-btn-inner { + color: #8c8c8c; +} + +/* line 160, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-button, +.x-btn-default-toolbar-large-noicon .x-btn-button { + height: 32px; +} +/* line 164, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-inner, +.x-btn-default-toolbar-large-noicon .x-btn-inner { + line-height: 32px; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-large-noicon .x-btn-arrow-right .x-btn-inner, +.x-btn-default-toolbar-large-icon-text-left .x-btn-arrow-right .x-btn-inner { + padding-right: 0; +} +/* line 179, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-toolbar-large-noicon .x-btn-arrow-right .x-rtl.x-btn-inner, +.x-btn-default-toolbar-large-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 3px; + padding-left: 0; +} + +/* line 189, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-inner { + width: 32px; + padding: 0; +} +/* line 195, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon .x-btn-icon-el { + width: 32px; + height: 32px; +} + +/* line 202, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-left .x-btn-button { + height: 32px; +} +/* line 207, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-left .x-btn-inner { + line-height: 32px; + padding-left: 36px; +} +/* line 213, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-left .x-rtl.x-btn-inner { + padding-left: 3px; + padding-right: 36px; +} +/* line 218, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner { + padding-right: 36px; +} +/* line 223, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el { + width: 32px; + right: auto; +} +/* line 228, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el { + height: 32px; +} +/* line 234, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-left .x-rtl.x-btn-icon-el { + left: auto; + right: 0; +} + +/* line 242, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-right .x-btn-button { + height: 32px; +} +/* line 247, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-right .x-btn-inner { + line-height: 32px; + padding-right: 36px; +} +/* line 253, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-right .x-rtl.x-btn-inner { + padding-right: 3px; + padding-left: 36px; +} +/* line 259, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el { + width: 32px; + left: auto; +} +/* line 264, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el, .x-quirks .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el { + height: 32px; +} +/* line 270, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-right .x-rtl.x-btn-icon-el { + left: 0; + right: auto; +} + +/* line 278, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-top .x-btn-inner { + padding-top: 36px; +} +/* line 282, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el { + height: 32px; + bottom: auto; +} +/* line 290, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el { + width: 100%; +} + +/* line 298, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-bottom .x-btn-inner { + padding-bottom: 36px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el { + height: 32px; + top: auto; +} +/* line 310, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-ie6 .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el, .x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el { + width: 100%; +} + +/* line 317, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 341, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-focus { + border-color: #9d9d9d; + background-image: none; + background-color: #f3f3f3; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f3f3), color-stop(48%, #ededed), color-stop(52%, #dbdbdb), color-stop(100%, #e0e0e0)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -moz-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: -o-linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); + background-image: linear-gradient(top, #f3f3f3, #ededed 48%, #dbdbdb 52%, #e0e0e0); +} + +/* line 366, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-menu-active, +.x-btn-default-toolbar-large-pressed { + border-color: #9d9d9d; + background-image: none; + background-color: #d6d6d6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d6d6d6), color-stop(48%, #dcdcdc), color-stop(52%, #deb6b7), color-stop(100%, #e1bebf)); + background-image: -webkit-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -moz-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: -o-linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); + background-image: linear-gradient(top, #d6d6d6, #dcdcdc 48%, #deb6b7 52%, #e1bebf); +} + +/* line 398, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-frame-tl, +.x-btn-default-toolbar-large-over .x-frame-bl, +.x-btn-default-toolbar-large-over .x-frame-tr, +.x-btn-default-toolbar-large-over .x-frame-br, +.x-btn-default-toolbar-large-over .x-frame-tc, +.x-btn-default-toolbar-large-over .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-large-over-corners.gif); +} +/* line 402, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-frame-ml, +.x-btn-default-toolbar-large-over .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-large-over-sides.gif); +} +/* line 405, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-large-over-fbg.gif); +} + +/* line 420, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-focus .x-frame-tl, +.x-btn-default-toolbar-large-focus .x-frame-bl, +.x-btn-default-toolbar-large-focus .x-frame-tr, +.x-btn-default-toolbar-large-focus .x-frame-br, +.x-btn-default-toolbar-large-focus .x-frame-tc, +.x-btn-default-toolbar-large-focus .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-large-focus-corners.gif); +} +/* line 424, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-focus .x-frame-ml, +.x-btn-default-toolbar-large-focus .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-large-focus-sides.gif); +} +/* line 427, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-focus .x-frame-mc { + background-color: #f3f3f3; + background-image: url(images/btn/btn-default-toolbar-large-focus-fbg.gif); +} + +/* line 443, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-menu-active .x-frame-tl, +.x-btn-default-toolbar-large-menu-active .x-frame-bl, +.x-btn-default-toolbar-large-menu-active .x-frame-tr, +.x-btn-default-toolbar-large-menu-active .x-frame-br, +.x-btn-default-toolbar-large-menu-active .x-frame-tc, +.x-btn-default-toolbar-large-menu-active .x-frame-bc, +.x-btn-default-toolbar-large-pressed .x-frame-tl, +.x-btn-default-toolbar-large-pressed .x-frame-bl, +.x-btn-default-toolbar-large-pressed .x-frame-tr, +.x-btn-default-toolbar-large-pressed .x-frame-br, +.x-btn-default-toolbar-large-pressed .x-frame-tc, +.x-btn-default-toolbar-large-pressed .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-large-pressed-corners.gif); +} +/* line 447, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-menu-active .x-frame-ml, +.x-btn-default-toolbar-large-menu-active .x-frame-mr, +.x-btn-default-toolbar-large-pressed .x-frame-ml, +.x-btn-default-toolbar-large-pressed .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-large-pressed-sides.gif); +} +/* line 450, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-menu-active .x-frame-mc, +.x-btn-default-toolbar-large-pressed .x-frame-mc { + background-color: #d6d6d6; + background-image: url(images/btn/btn-default-toolbar-large-pressed-fbg.gif); +} + +/* line 465, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled .x-frame-tl, +.x-btn-default-toolbar-large-disabled .x-frame-bl, +.x-btn-default-toolbar-large-disabled .x-frame-tr, +.x-btn-default-toolbar-large-disabled .x-frame-br, +.x-btn-default-toolbar-large-disabled .x-frame-tc, +.x-btn-default-toolbar-large-disabled .x-frame-bc { + background-image: url(images/btn/btn-default-toolbar-large-disabled-corners.gif); +} +/* line 469, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled .x-frame-ml, +.x-btn-default-toolbar-large-disabled .x-frame-mr { + background-image: url(images/btn/btn-default-toolbar-large-disabled-sides.gif); +} +/* line 472, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled .x-frame-mc { + background-color: transparent; +} + +/* line 493, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-large-over { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-large-over-bg.gif); +} + +/* line 502, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-large-focus { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-large-focus-bg.gif); +} + +/* line 512, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-nlg .x-btn-default-toolbar-large-menu-active, +.x-nlg .x-btn-default-toolbar-large-pressed { + background-repeat: repeat-x; + background-image: url(images/btn/btn-default-toolbar-large-pressed-bg.gif); +} + +/* line 541, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-split-right { + background-image: url(images/button/s-arrow-noline.gif); + padding-right: 14px; +} +/* line 547, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-noline-rtl.gif); + padding-right: 0; + padding-left: 14px; +} +/* line 554, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large .x-btn-split-bottom { + background-image: url(images/button/s-arrow-b-noline.gif); + padding-bottom: 14px; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-btn-split-right { + background-image: url(images/button/s-arrow-o.gif); +} +/* line 566, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-rtl.x-btn-split-right { + background-image: url(images/button/s-arrow-o-rtl.gif); +} +/* line 570, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-over .x-btn-split-bottom { + background-image: url(images/button/s-arrow-bo.gif); +} + +/* line 577, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-default-toolbar-large-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-large-over:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-over-corners.gif), sides:url(images/btn/btn-default-toolbar-large-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-over-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-large-focus:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-focus-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-large-pressed:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-pressed-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-default-toolbar-large-disabled:after { + display: none; + content: "x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)"; +} + +/**/ +/* */ +/* line 981, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-left .x-btn-icon-el { + background-position: left center; +} +/* line 986, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-left .x-rtl.x-btn-icon-el { + background-position: right center; +} + +/* line 993, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-right .x-btn-icon-el { + background-position: right center; +} +/* line 998, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-right .x-rtl.x-btn-icon-el { + background-position: left center; +} + +/* line 1004, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-top .x-btn-icon-el { + background-position: center top; +} + +/* line 1008, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-icon-text-bottom .x-btn-icon-el { + background-position: center bottom; +} + +/* line 1012, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-arrow-right { + background-position: right center; +} + +/* line 1017, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-rtl.x-btn-arrow-right { + background-position: left center; +} + +/* line 1022, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-arrow-bottom { + background-position: center bottom; +} + +/* line 1026, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-arrow { + background-repeat: no-repeat; +} + +/* line 1031, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-split { + display: block; + background-repeat: no-repeat; +} + +/* line 1036, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-split-right { + background-position: right center; +} + +/* line 1041, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-rtl.x-btn-split-right { + background-position: 0 center; +} + +/* line 1046, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-btn-split-bottom { + background-position: center bottom; +} + +/* line 1050, ../../../ext-theme-neutral/sass/src/button/Button.scss */ +.x-cycle-fixed-width .x-btn-inner { + text-align: inherit; +} + +/** + * Creates a visual theme for a Toolbar. + * @param {String} $ui The name of the UI + * @param {Color} $background-color The background color of the toolbar (defaults to transparent) + * @param {Gradient/color-stops} $background-gradient The background gradient of the toolbar (defaults to null) + * @param {Color} $border-color The border color of the toolbar (defaults to null) + * @member Ext.toolbar.Toolbar + */ +/* line 70, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar { + font-size: 11px; + border-style: solid; + padding: 2px 0 2px 2px; +} +/* line 78, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar .x-toolbar-item { + margin: 0 2px 0 0; +} +/* line 84, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar .x-rtl.x-toolbar-item { + margin: 0 0 0 2px; +} +/* line 89, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar .x-toolbar-text { + margin: 0 6px 0 4px; + color: black; + line-height: 16px; + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + font-weight: normal; +} +/* line 98, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar .x-toolbar-separator-horizontal { + margin: 0 2px 0 0; + height: 14px; + border-style: none solid; + border-width: 0 1px; + border-left-color: #aca899; + border-right-color: white; +} + +/* line 110, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-rtl.x-toolbar { + padding: 2px 2px 2px 0; +} + +/* line 115, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-footer { + background: transparent; + border: 0; + margin: 3px 0 0; + padding: 2px 0 2px 6px; +} +/* line 122, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-footer .x-toolbar-item { + margin: 0 6px 0 0; +} + +/* line 127, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-spacer { + width: 2px; +} + +/* line 132, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-more-icon { + background-image: url(images/toolbar/more.gif) !important; + background-position: center center !important; + background-repeat: no-repeat; +} + +/* line 22, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-default { + border-color: #bcb0b0; + border-width: 1px; + background-image: none; + background-color: #d8d8d8; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e6e6e6), color-stop(100%, #efefef)); + background-image: -webkit-linear-gradient(top, #e6e6e6, #efefef); + background-image: -moz-linear-gradient(top, #e6e6e6, #efefef); + background-image: -o-linear-gradient(top, #e6e6e6, #efefef); + background-image: linear-gradient(top, #e6e6e6, #efefef); +} +/* line 28, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-default .x-box-scroller { + cursor: pointer; +} +/* line 32, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-default .x-box-scroller-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + cursor: default; +} + +/* line 59, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-nlg .x-toolbar-default { + background-image: url(images/toolbar/toolbar-default-bg.gif) !important; + background-repeat: repeat-x; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-toolbar-default:after { + display: none; + content: "x-slicer:bg:url(images/toolbar/toolbar-default-bg.gif)"; +} + +/**/ +/* */ +/* line 145, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroll-left { + background-image: url(images/toolbar/scroll-left.gif); + background-position: -14px 0; + width: 14px; + height: 22px; + border-style: solid; + border-color: #8db2e3; + border-width: 0 0 1px; + margin-top: 0; +} + +/* line 156, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroll-left-hover { + background-position: 0 0; +} + +/* line 160, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroll-right { + background-image: url(images/toolbar/scroll-right.gif); + width: 14px; + height: 22px; + border-style: solid; + border-color: #8db2e3; + border-width: 0 0 1px; + margin-top: 0; +} + +/* line 170, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-scroll-right-hover { + background-position: -14px 0; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar .x-box-menu-after { + margin: 0 2px 0 2px; +} + +/* line 178, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical { + padding: 2px 2px 0 2px; +} +/* line 181, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical .x-toolbar-item { + margin: 0 0 2px 0; +} +/* line 185, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical .x-toolbar-text { + margin: 4px 0 6px 0; +} +/* line 189, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical .x-toolbar-separator-vertical { + margin: 0 5px 2px; + border-style: solid none; + border-width: 1px 0; + border-top-color: #aca899; + border-bottom-color: white; +} +/* line 197, ../../../ext-theme-neutral/sass/src/toolbar/Toolbar.scss */ +.x-toolbar-vertical .x-box-menu-after { + margin: 2px 0 2px 0; + display: block; + float: none; +} + +/* line 2, ../../../ext-theme-neutral/sass/src/panel/Header.scss */ +.x-header-draggable .x-header-body, +.x-header-ghost { + cursor: move; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/panel/Header.scss */ +.x-header-text { + white-space: nowrap; +} + +/** + * Creates a visual theme for a Panel + * + * @param {boolean} $ui-include-border-management-rules + * True to include neptune style border management rules. + * + * @param {color} $ui-wrap-border-color + * The color to apply to the border that wraps the body and docked items in a framed + * panel. The presence of the wrap border in a framed panel is controlled by the + * {@link Ext.panel.Panel#border border} config. Only applicable when + * $ui-include-border-management-rules is true. + * + * @param {color} $ui-wrap-border-width + * The width to apply to the border that wraps the body and docked items in a framed + * panel. The presence of the wrap border in a framed panel is controlled by the + * {@link Ext.panel.Panel#border border} config. Only applicable when + * $ui-include-border-management-rules is true. + * + * @member Ext.panel.Panel + */ +/* line 611, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-ghost { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=65); + opacity: 0.65; +} + +/* line 83, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-default { + border-color: #d0d0d0; + padding: 0; +} + +/* line 89, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default { + font-size: 11px; + border: 1px solid #d0d0d0; +} + +/* line 109, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal { + padding: 4px 5px 4px 5px; +} + +/* line 113, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal-noborder { + padding: 5px 6px 4px 6px; +} + +/* line 117, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical { + padding: 5px 4px 5px 4px; +} + +/* line 121, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical-noborder { + padding: 6px 5px 6px 4px; +} + +/* line 126, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-rtl.x-panel-header-default-vertical { + padding: 5px 4px 5px 4px; +} + +/* line 130, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-rtl.x-panel-header-default-vertical-noborder { + padding: 6px 4px 6px 5px; +} + +/* line 137, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-text-container-default { + color: #333333; + font-size: 11px; + font-weight: bold; + font-family: tahoma, arial, verdana, sans-serif; + line-height: 15px; + padding: 0 2px 1px; + text-transform: none; +} + +/* line 149, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-body-default { + background: white; + border-color: #d0d0d0; + color: black; + font-size: 12px; + font-size: normal; + border-width: 1px; + border-style: solid; +} + +/* line 309, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default { + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 313, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical { + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 318, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-rtl.x-panel-header-default-vertical { + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: linear-gradient(left, #f0f0f0, #d7d7d7); +} + +/* line 331, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-default-top { + background: url(images/panel-header/panel-header-default-top-bg.gif); +} +/* line 336, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-default-bottom { + background: url(images/panel-header/panel-header-default-bottom-bg.gif); +} +/* line 341, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-default-left { + background: url(images/panel-header/panel-header-default-left-bg.gif) top right; +} +/* line 346, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-panel-header-default-right { + background: url(images/panel-header/panel-header-default-right-bg.gif) top right; +} +/* line 353, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-rtl.x-panel-header-default-left { + background: url(images/panel-header/panel-header-default-left-bg-rtl.gif); +} +/* line 357, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nlg .x-rtl.x-panel-header-default-right { + background: url(images/panel-header/panel-header-default-right-bg-rtl.gif); +} + +/* line 371, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-collapsed-border-top { + border-bottom-width: 1px !important; +} +/* line 375, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-collapsed-border-right { + border-left-width: 1px !important; +} +/* line 379, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-collapsed-border-bottom { + border-top-width: 1px !important; +} +/* line 383, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-collapsed-border-left { + border-right-width: 1px !important; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-top:after { + display: none; + content: "x-slicer:bg:url(images/panel-header/panel-header-default-top-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-bottom:after { + display: none; + content: "x-slicer:bg:url(images/panel-header/panel-header-default-bottom-bg.gif), stretch:top"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-left:after { + display: none; + content: "x-slicer:bg:url(images/panel-header/panel-header-default-left-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-left-bg-rtl.gif), stretch:right"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-right:after { + display: none; + content: "x-slicer:bg:url(images/panel-header/panel-header-default-right-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-right-bg-rtl.gif)"; +} + +/**/ +/* */ +/* line 397, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-panel-header-text-container { + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-panel-header-default-vertical .x-panel-header-text-container { + background-color: #d7d2d2; + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1), progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2); +} + +/* line 402, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-rtl.x-panel-header-text-container { + -webkit-transform: rotate(270deg); + -webkit-transform-origin: 100% 0; + -moz-transform: rotate(270deg); + -moz-transform-origin: 100% 0; + -o-transform: rotate(270deg); + -o-transform-origin: 100% 0; + transform: rotate(270deg); + transform-origin: 100% 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-panel-header-default-vertical .x-rtl.x-panel-header-text-container { + background-color: #d7d2d2; + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3), progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2); +} + +/* line 408, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-top { + -webkit-box-shadow: #ececec 0 1px 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset; +} + +/* line 412, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-right { + -webkit-box-shadow: #ececec -1px 0 0px 0 inset; + -moz-box-shadow: #ececec -1px 0 0px 0 inset; + box-shadow: #ececec -1px 0 0px 0 inset; +} + +/* line 416, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-bottom { + -webkit-box-shadow: #ececec 0 -1px 0px 0 inset; + -moz-box-shadow: #ececec 0 -1px 0px 0 inset; + box-shadow: #ececec 0 -1px 0px 0 inset; +} + +/* line 420, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-left { + -webkit-box-shadow: #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 1px 0 0px 0 inset; +} + +/* line 426, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default .x-panel-header-icon { + width: 16px; + height: 16px; + background-position: center center; +} +/* line 431, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default .x-panel-header-glyph { + color: #333333; + font-size: 16px; + line-height: 16px; + opacity: 0.5; +} +/* line 447, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-ie8m .x-panel-header-default .x-panel-header-glyph { + color: #858282; +} + +/* line 455, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-panel-header-icon-before-title { + margin: 0 2px 0 0; +} +/* line 460, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-rtl.x-panel-header-icon-before-title { + margin: 0 0 0 2px; +} +/* line 465, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-panel-header-icon-after-title { + margin: 0 0 0 2px; +} +/* line 470, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-rtl.x-panel-header-icon-after-title { + margin: 0 2px 0 0; +} + +/* line 477, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-panel-header-icon-before-title { + margin: 0 0 2px 0; +} +/* line 482, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-rtl.x-panel-header-icon-before-title { + margin: 0 0 2px 0; +} +/* line 487, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-panel-header-icon-after-title { + margin: 2px 0 0 0; +} +/* line 492, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-rtl.x-panel-header-icon-after-title { + margin: 2px 0 0 0; +} + +/* line 500, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-tool-after-title { + margin: 0 0 0 2px; +} +/* line 505, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-rtl.x-tool-after-title { + margin: 0 2px 0 0; +} +/* line 510, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-tool-before-title { + margin: 0 2px 0 0; +} +/* line 515, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-horizontal .x-rtl.x-tool-before-title { + margin: 0 0 0 2px; +} + +/* line 522, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-tool-after-title { + margin: 2px 0 0 0; +} +/* line 527, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-rtl.x-tool-after-title { + margin: 2px 0 0 0; +} +/* line 532, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-tool-before-title { + margin: 0 0 2px 0; +} +/* line 537, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-vertical .x-rtl.x-tool-before-title { + margin: 0 0 2px 0; +} + +/* line 545, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-rtl.x-panel-header-default-collapsed-border-right { + border-right-width: 1px !important; +} +/* line 548, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-rtl.x-panel-header-default-collapsed-border-left { + border-left-width: 1px !important; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-default-resizable .x-panel-handle { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 83, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-default-framed { + border-color: #d0d0d0; + padding: 4px; +} + +/* line 89, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed { + font-size: 11px; + border: 1px solid #d0d0d0; +} + +/* line 109, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal { + padding: 4px 5px 4px 5px; +} + +/* line 113, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal-noborder { + padding: 5px 6px 4px 6px; +} + +/* line 117, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical { + padding: 5px 4px 5px 4px; +} + +/* line 121, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical-noborder { + padding: 6px 5px 6px 4px; +} + +/* line 126, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-rtl.x-panel-header-default-framed-vertical { + padding: 5px 4px 5px 4px; +} + +/* line 130, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-rtl.x-panel-header-default-framed-vertical-noborder { + padding: 6px 4px 6px 5px; +} + +/* line 137, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-text-container-default-framed { + color: #333333; + font-size: 11px; + font-weight: bold; + font-family: tahoma, arial, verdana, sans-serif; + line-height: 15px; + padding: 0 2px 1px; + text-transform: none; +} + +/* line 149, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-body-default-framed { + background: #f1f1f1; + border-color: #d0d0d0; + color: black; + font-size: 12px; + font-size: normal; + border-width: 0; + border-style: solid; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + padding: 4px 4px 4px 4px; + border-width: 1px; + border-style: solid; + background-color: #f1f1f1; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-mc { + background-color: #f1f1f1; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-default-framed { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-default-framed { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-4-4-4-4-1-1-1-1-4-4-4-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tr, +.x-panel-default-framed-br, +.x-panel-default-framed-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tl, +.x-panel-default-framed-bl, +.x-panel-default-framed-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-tl, +.x-panel-default-framed-bl, +.x-panel-default-framed-tr, +.x-panel-default-framed-br, +.x-panel-default-framed-tc, +.x-panel-default-framed-bc, +.x-panel-default-framed-ml, +.x-panel-default-framed-mr { + zoom: 1; + background-image: url(images/panel/panel-default-framed-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-ml, +.x-panel-default-framed-mr { + zoom: 1; + background-image: url(images/panel/panel-default-framed-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-default-framed-mc { + padding: 1px 1px 1px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-default-framed-tl, +.x-strict .x-ie7 .x-panel-default-framed-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-default-framed:after { + display: none; + content: "x-slicer:corners:url(images/panel/panel-default-framed-corners.gif), sides:url(images/panel/panel-default-framed-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 4px 5px 4px 5px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-mc { + background-image: url(images/panel-header/panel-header-default-framed-top-fbg.gif); + background-position: 0 top; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-top { + background-image: url(images/panel-header/panel-header-default-framed-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-4-4-0-0-1-1-0-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tr, +.x-panel-header-default-framed-top-br, +.x-panel-header-default-framed-top-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tl, +.x-panel-header-default-framed-top-bl, +.x-panel-header-default-framed-top-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-tl, +.x-panel-header-default-framed-top-bl, +.x-panel-header-default-framed-top-tr, +.x-panel-header-default-framed-top-br, +.x-panel-header-default-framed-top-tc, +.x-panel-header-default-framed-top-bc, +.x-panel-header-default-framed-top-ml, +.x-panel-header-default-framed-top-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-ml, +.x-panel-header-default-framed-top-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-top-mc { + padding: 1px 2px 4px 2px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-top-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-top:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 5px 4px 5px 4px; + border-width: 1px 1px 1px 0; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 184, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-right { + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: linear-gradient(left, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-mc { + background-image: url(images/panel-header/panel-header-default-framed-right-fbg.gif); + background-position: right 0; + background-color: #d7d2d2; +} + +/* line 210, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-right-mc { + background-image: url(images/panel-header/panel-header-default-framed-right-fbg-rtl.gif); + background-position: 0 0; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-right { + background-image: url(images/panel-header/panel-header-default-framed-right-bg.gif); + background-position: right 0; +} +/* line 229, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-rtl.x-panel-header-default-framed-right { + background-image: url(images/panel-header/panel-header-default-framed-right-bg-rtl.gif); + background-position: 0 0; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dv-0-4-4-0-1-1-1-0-5-4-5-4"); +} + +/* line 272, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tl { + background-position: 0 0; +} + +/* line 276, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tr { + background-position: 0 -4px; +} + +/* line 280, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-bl { + background-position: 0 -8px; +} + +/* line 284, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-br { + background-position: 0 -12px; +} + +/* line 288, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-ml { + background-position: -4px 0; +} + +/* line 292, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-mr { + background-position: right 0; +} + +/* line 296, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tc { + background-position: right 0; +} + +/* line 300, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-bc { + background-position: right -4px; +} + +/* line 305, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-right-tc { + background-position: 0 0; +} + +/* line 309, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-right-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tr, +.x-panel-header-default-framed-right-br, +.x-panel-header-default-framed-right-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tl, +.x-panel-header-default-framed-right-bl, +.x-panel-header-default-framed-right-ml { + padding-left: 0; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tl, +.x-panel-header-default-framed-right-bl, +.x-panel-header-default-framed-right-tr, +.x-panel-header-default-framed-right-br, +.x-panel-header-default-framed-right-tc, +.x-panel-header-default-framed-right-bc, +.x-panel-header-default-framed-right-ml, +.x-panel-header-default-framed-right-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-right-corners.gif); +} + +/* line 390, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-right-tl, .x-rtl.x-panel-header-default-framed-right-ml, .x-rtl.x-panel-header-default-framed-right-bl, .x-rtl.x-panel-header-default-framed-right-tr, .x-rtl.x-panel-header-default-framed-right-mr, .x-rtl.x-panel-header-default-framed-right-br { + background-image: url(images/panel-header/panel-header-default-framed-right-corners-rtl.gif); +} + +/* line 399, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-tc, +.x-panel-header-default-framed-right-bc { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-right-sides.gif); + background-repeat: repeat-x; +} + +/* line 411, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-right-tc, .x-rtl.x-panel-header-default-framed-right-bc { + background-image: url(images/panel-header/panel-header-default-framed-right-sides-rtl.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-right-mc { + padding: 2px 1px 2px 4px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-right-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-right:after { + display: none; + content: "x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-right-fbg.gif), frame-bg-rtl:url(images/panel-header/panel-header-default-framed-right-fbg-rtl.gif), bg:url(images/panel-header/panel-header-default-framed-right-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-framed-right-bg-rtl.gif), corners:url(images/panel-header/panel-header-default-framed-right-corners.gif), corners-rtl:url(images/panel-header/panel-header-default-framed-right-corners-rtl.gif), sides:url(images/panel-header/panel-header-default-framed-right-sides.gif), sides-rtl:url(images/panel-header/panel-header-default-framed-right-sides-rtl.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 4px 5px 4px 5px; + border-width: 0 1px 1px 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-mc { + background-image: url(images/panel-header/panel-header-default-framed-bottom-fbg.gif); + background-position: 0 bottom; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-bottom { + background-image: url(images/panel-header/panel-header-default-framed-bottom-bg.gif); + background-position: 0 bottom; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-0-0-4-4-0-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-ml { + background-position: 0 bottom; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-mr { + background-position: right bottom; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tr, +.x-panel-header-default-framed-bottom-br, +.x-panel-header-default-framed-bottom-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tl, +.x-panel-header-default-framed-bottom-bl, +.x-panel-header-default-framed-bottom-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tc { + height: 0; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-tl, +.x-panel-header-default-framed-bottom-bl, +.x-panel-header-default-framed-bottom-tr, +.x-panel-header-default-framed-bottom-br, +.x-panel-header-default-framed-bottom-tc, +.x-panel-header-default-framed-bottom-bc, +.x-panel-header-default-framed-bottom-ml, +.x-panel-header-default-framed-bottom-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-ml, +.x-panel-header-default-framed-bottom-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-bottom-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-bottom-mc { + padding: 4px 2px 1px 2px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-bottom-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-bottom:after { + display: none; + content: "x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 5px 4px 5px 4px; + border-width: 1px 0 1px 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 184, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-left { + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: linear-gradient(left, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-mc { + background-image: url(images/panel-header/panel-header-default-framed-left-fbg.gif); + background-position: left 0; + background-color: #d7d2d2; +} + +/* line 210, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-left-mc { + background-image: url(images/panel-header/panel-header-default-framed-left-fbg-rtl.gif); + background-position: right 0; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-left { + background-image: url(images/panel-header/panel-header-default-framed-left-bg.gif); + background-position: left 0; +} +/* line 229, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-rtl.x-panel-header-default-framed-left { + background-image: url(images/panel-header/panel-header-default-framed-left-bg-rtl.gif); + background-position: right 0; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dv-4-0-0-4-1-0-1-1-5-4-5-4"); +} + +/* line 272, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tl { + background-position: 0 0; +} + +/* line 276, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tr { + background-position: 0 -4px; +} + +/* line 280, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-bl { + background-position: 0 -8px; +} + +/* line 284, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-br { + background-position: 0 -12px; +} + +/* line 288, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-ml { + background-position: -4px 0; +} + +/* line 292, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-mr { + background-position: right 0; +} + +/* line 296, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tc { + background-position: left 0; +} + +/* line 300, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-bc { + background-position: left -4px; +} + +/* line 305, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-left-tc { + background-position: right 0; +} + +/* line 309, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-left-bc { + background-position: right -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tr, +.x-panel-header-default-framed-left-br, +.x-panel-header-default-framed-left-mr { + padding-right: 0; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tl, +.x-panel-header-default-framed-left-bl, +.x-panel-header-default-framed-left-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tl, +.x-panel-header-default-framed-left-bl, +.x-panel-header-default-framed-left-tr, +.x-panel-header-default-framed-left-br, +.x-panel-header-default-framed-left-tc, +.x-panel-header-default-framed-left-bc, +.x-panel-header-default-framed-left-ml, +.x-panel-header-default-framed-left-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-left-corners.gif); +} + +/* line 390, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-left-tl, .x-rtl.x-panel-header-default-framed-left-ml, .x-rtl.x-panel-header-default-framed-left-bl, .x-rtl.x-panel-header-default-framed-left-tr, .x-rtl.x-panel-header-default-framed-left-mr, .x-rtl.x-panel-header-default-framed-left-br { + background-image: url(images/panel-header/panel-header-default-framed-left-corners-rtl.gif); +} + +/* line 399, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-tc, +.x-panel-header-default-framed-left-bc { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-left-sides.gif); + background-repeat: repeat-x; +} + +/* line 411, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-left-tc, .x-rtl.x-panel-header-default-framed-left-bc { + background-image: url(images/panel-header/panel-header-default-framed-left-sides-rtl.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-left-mc { + padding: 2px 4px 2px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-left-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-left:after { + display: none; + content: "x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-left-fbg.gif), frame-bg-rtl:url(images/panel-header/panel-header-default-framed-left-fbg-rtl.gif), bg:url(images/panel-header/panel-header-default-framed-left-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-framed-left-bg-rtl.gif), corners:url(images/panel-header/panel-header-default-framed-left-corners.gif), corners-rtl:url(images/panel-header/panel-header-default-framed-left-corners-rtl.gif), sides:url(images/panel-header/panel-header-default-framed-left-sides.gif), sides-rtl:url(images/panel-header/panel-header-default-framed-left-sides-rtl.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 4px 5px 4px 5px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif); + background-position: 0 top; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-collapsed-top { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-collapsed-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-4-4-4-4-1-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tr, +.x-panel-header-default-framed-collapsed-top-br, +.x-panel-header-default-framed-collapsed-top-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tl, +.x-panel-header-default-framed-collapsed-top-bl, +.x-panel-header-default-framed-collapsed-top-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-tl, +.x-panel-header-default-framed-collapsed-top-bl, +.x-panel-header-default-framed-collapsed-top-tr, +.x-panel-header-default-framed-collapsed-top-br, +.x-panel-header-default-framed-collapsed-top-tc, +.x-panel-header-default-framed-collapsed-top-bc, +.x-panel-header-default-framed-collapsed-top-ml, +.x-panel-header-default-framed-collapsed-top-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-ml, +.x-panel-header-default-framed-collapsed-top-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-top-mc { + padding: 1px 2px 1px 2px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-collapsed-top:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 5px 4px 5px 4px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 184, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-right { + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: linear-gradient(left, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif); + background-position: right 0; + background-color: #d7d2d2; +} + +/* line 210, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-right-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif); + background-position: 0 0; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-collapsed-right { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif); + background-position: right 0; +} +/* line 229, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-rtl.x-panel-header-default-framed-collapsed-right { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-bg-rtl.gif); + background-position: 0 0; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-collapsed-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dv-4-4-4-4-1-1-1-1-5-4-5-4"); +} + +/* line 272, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tl { + background-position: 0 0; +} + +/* line 276, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tr { + background-position: 0 -4px; +} + +/* line 280, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-bl { + background-position: 0 -8px; +} + +/* line 284, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-br { + background-position: 0 -12px; +} + +/* line 288, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-ml { + background-position: -4px 0; +} + +/* line 292, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-mr { + background-position: right 0; +} + +/* line 296, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tc { + background-position: right 0; +} + +/* line 300, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-bc { + background-position: right -4px; +} + +/* line 305, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-right-tc { + background-position: 0 0; +} + +/* line 309, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-right-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tr, +.x-panel-header-default-framed-collapsed-right-br, +.x-panel-header-default-framed-collapsed-right-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tl, +.x-panel-header-default-framed-collapsed-right-bl, +.x-panel-header-default-framed-collapsed-right-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tl, +.x-panel-header-default-framed-collapsed-right-bl, +.x-panel-header-default-framed-collapsed-right-tr, +.x-panel-header-default-framed-collapsed-right-br, +.x-panel-header-default-framed-collapsed-right-tc, +.x-panel-header-default-framed-collapsed-right-bc, +.x-panel-header-default-framed-collapsed-right-ml, +.x-panel-header-default-framed-collapsed-right-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif); +} + +/* line 390, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-right-tl, .x-rtl.x-panel-header-default-framed-collapsed-right-ml, .x-rtl.x-panel-header-default-framed-collapsed-right-bl, .x-rtl.x-panel-header-default-framed-collapsed-right-tr, .x-rtl.x-panel-header-default-framed-collapsed-right-mr, .x-rtl.x-panel-header-default-framed-collapsed-right-br { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif); +} + +/* line 399, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-tc, +.x-panel-header-default-framed-collapsed-right-bc { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif); + background-repeat: repeat-x; +} + +/* line 411, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-right-tc, .x-rtl.x-panel-header-default-framed-collapsed-right-bc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-right-mc { + padding: 2px 1px 2px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-collapsed-right:after { + display: none; + content: "x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif), frame-bg-rtl:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-framed-collapsed-right-bg-rtl.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif), corners-rtl:url(images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif), sides-rtl:url(images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 4px 5px 4px 5px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(top, #f0f0f0, #d7d7d7); + background-image: linear-gradient(top, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif); + background-position: 0 bottom; + background-color: #d7d2d2; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-collapsed-bottom { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif); + background-position: 0 bottom; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-collapsed-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-4-4-4-4-1-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-ml { + background-position: 0 bottom; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-mr { + background-position: right bottom; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tr, +.x-panel-header-default-framed-collapsed-bottom-br, +.x-panel-header-default-framed-collapsed-bottom-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tl, +.x-panel-header-default-framed-collapsed-bottom-bl, +.x-panel-header-default-framed-collapsed-bottom-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-tl, +.x-panel-header-default-framed-collapsed-bottom-bl, +.x-panel-header-default-framed-collapsed-bottom-tr, +.x-panel-header-default-framed-collapsed-bottom-br, +.x-panel-header-default-framed-collapsed-bottom-tc, +.x-panel-header-default-framed-collapsed-bottom-bc, +.x-panel-header-default-framed-collapsed-bottom-ml, +.x-panel-header-default-framed-collapsed-bottom-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-ml, +.x-panel-header-default-framed-collapsed-bottom-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-bottom-mc { + padding: 1px 2px 1px 2px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-collapsed-bottom:after { + display: none; + content: "x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 5px 4px 5px 4px; + border-width: 1px; + border-style: solid; + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(right, #f0f0f0, #d7d7d7); + background-image: linear-gradient(right, #f0f0f0, #d7d7d7); +} + +/* line 184, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-left { + background-image: none; + background-color: #d7d2d2; + background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #f0f0f0), color-stop(100%, #d7d7d7)); + background-image: -webkit-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -moz-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: -o-linear-gradient(left, #f0f0f0, #d7d7d7); + background-image: linear-gradient(left, #f0f0f0, #d7d7d7); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif); + background-position: left 0; + background-color: #d7d2d2; +} + +/* line 210, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-left-mc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif); + background-position: right 0; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-panel-header-default-framed-collapsed-left { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif); + background-position: left 0; +} +/* line 229, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-rtl.x-panel-header-default-framed-collapsed-left { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-bg-rtl.gif); + background-position: right 0; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-panel-header-default-framed-collapsed-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dv-4-4-4-4-1-1-1-1-5-4-5-4"); +} + +/* line 272, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tl { + background-position: 0 0; +} + +/* line 276, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tr { + background-position: 0 -4px; +} + +/* line 280, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-bl { + background-position: 0 -8px; +} + +/* line 284, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-br { + background-position: 0 -12px; +} + +/* line 288, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-ml { + background-position: -4px 0; +} + +/* line 292, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-mr { + background-position: right 0; +} + +/* line 296, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tc { + background-position: left 0; +} + +/* line 300, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-bc { + background-position: left -4px; +} + +/* line 305, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-left-tc { + background-position: right 0; +} + +/* line 309, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-left-bc { + background-position: right -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tr, +.x-panel-header-default-framed-collapsed-left-br, +.x-panel-header-default-framed-collapsed-left-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tl, +.x-panel-header-default-framed-collapsed-left-bl, +.x-panel-header-default-framed-collapsed-left-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tl, +.x-panel-header-default-framed-collapsed-left-bl, +.x-panel-header-default-framed-collapsed-left-tr, +.x-panel-header-default-framed-collapsed-left-br, +.x-panel-header-default-framed-collapsed-left-tc, +.x-panel-header-default-framed-collapsed-left-bc, +.x-panel-header-default-framed-collapsed-left-ml, +.x-panel-header-default-framed-collapsed-left-mr { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif); +} + +/* line 390, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-left-tl, .x-rtl.x-panel-header-default-framed-collapsed-left-ml, .x-rtl.x-panel-header-default-framed-collapsed-left-bl, .x-rtl.x-panel-header-default-framed-collapsed-left-tr, .x-rtl.x-panel-header-default-framed-collapsed-left-mr, .x-rtl.x-panel-header-default-framed-collapsed-left-br { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif); +} + +/* line 399, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-tc, +.x-panel-header-default-framed-collapsed-left-bc { + zoom: 1; + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif); + background-repeat: repeat-x; +} + +/* line 411, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-left-tc, .x-rtl.x-panel-header-default-framed-collapsed-left-bc { + background-image: url(images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-panel-header-default-framed-collapsed-left-mc { + padding: 2px 1px 2px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-tl, +.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-panel-header-default-framed-collapsed-left:after { + display: none; + content: "x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif), frame-bg-rtl:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-framed-collapsed-left-bg-rtl.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif), corners-rtl:url(images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif), sides-rtl:url(images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif)"; +} + +/**/ +/* */ +/* line 273, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-framed-top { + border-bottom-width: 1px !important; +} +/* line 277, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-framed-right { + border-left-width: 1px !important; +} +/* line 281, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-framed-bottom { + border-top-width: 1px !important; +} +/* line 285, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel .x-panel-header-default-framed-left { + border-right-width: 1px !important; +} + +/* line 291, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-top { + border-bottom-width: 0 !important; +} +/* line 295, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-right { + border-left-width: 0 !important; +} +/* line 299, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-bottom { + border-top-width: 0 !important; +} +/* line 303, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-nbr .x-panel-header-default-framed-collapsed-left { + border-right-width: 0 !important; +} + +/* line 397, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-panel-header-text-container { + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-panel-header-default-framed-vertical .x-panel-header-text-container { + background-color: #d7d2d2; + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1), progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2); +} + +/* line 402, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-rtl.x-panel-header-text-container { + -webkit-transform: rotate(270deg); + -webkit-transform-origin: 100% 0; + -moz-transform: rotate(270deg); + -moz-transform-origin: 100% 0; + -o-transform: rotate(270deg); + -o-transform-origin: 100% 0; + transform: rotate(270deg); + transform-origin: 100% 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-panel-header-default-framed-vertical .x-rtl.x-panel-header-text-container { + background-color: #d7d2d2; + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3), progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2); +} + +/* line 408, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-top { + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 412, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-right { + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset; +} + +/* line 416, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-bottom { + -webkit-box-shadow: #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 420, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-left { + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 426, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed .x-panel-header-icon { + width: 16px; + height: 16px; + background-position: center center; +} +/* line 431, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed .x-panel-header-glyph { + color: #333333; + font-size: 16px; + line-height: 16px; + opacity: 0.5; +} +/* line 447, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-ie8m .x-panel-header-default-framed .x-panel-header-glyph { + color: #858282; +} + +/* line 455, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-panel-header-icon-before-title { + margin: 0 2px 0 0; +} +/* line 460, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-rtl.x-panel-header-icon-before-title { + margin: 0 0 0 2px; +} +/* line 465, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-panel-header-icon-after-title { + margin: 0 0 0 2px; +} +/* line 470, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-rtl.x-panel-header-icon-after-title { + margin: 0 2px 0 0; +} + +/* line 477, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-panel-header-icon-before-title { + margin: 0 0 2px 0; +} +/* line 482, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-rtl.x-panel-header-icon-before-title { + margin: 0 0 2px 0; +} +/* line 487, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-panel-header-icon-after-title { + margin: 2px 0 0 0; +} +/* line 492, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-rtl.x-panel-header-icon-after-title { + margin: 2px 0 0 0; +} + +/* line 500, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-tool-after-title { + margin: 0 0 0 2px; +} +/* line 505, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-rtl.x-tool-after-title { + margin: 0 2px 0 0; +} +/* line 510, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-tool-before-title { + margin: 0 2px 0 0; +} +/* line 515, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-horizontal .x-rtl.x-tool-before-title { + margin: 0 0 0 2px; +} + +/* line 522, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-tool-after-title { + margin: 2px 0 0 0; +} +/* line 527, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-rtl.x-tool-after-title { + margin: 2px 0 0 0; +} +/* line 532, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-tool-before-title { + margin: 0 0 2px 0; +} +/* line 537, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-header-default-framed-vertical .x-rtl.x-tool-before-title { + margin: 0 0 2px 0; +} + +/* line 545, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-border-right { + border-right-width: 1px !important; +} +/* line 548, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-rtl.x-panel-header-default-framed-collapsed-border-left { + border-left-width: 1px !important; +} + +/* line 562, ../../../ext-theme-neutral/sass/src/panel/Panel.scss */ +.x-panel-default-framed-resizable .x-panel-handle { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 103, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor { + position: absolute; + overflow: hidden; + height: 0; + width: 0; + border-style: solid; + border-width: 5px; + border-color: #868686; + zoom: 1; +} + +/* line 118, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-border-box .x-tip-anchor { + width: 10px; + height: 10px; +} + +/* line 123, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor-top { + border-top-color: transparent; + border-left-color: transparent; + border-right-color: transparent; + _border-top-color: pink; + _border-left-color: pink; + _border-right-color: pink; + _filter: chroma(color=pink); +} + +/* line 136, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor-bottom { + border-bottom-color: transparent; + border-left-color: transparent; + border-right-color: transparent; + _border-bottom-color: pink; + _border-left-color: pink; + _border-right-color: pink; + _filter: chroma(color=pink); +} + +/* line 149, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor-left { + border-top-color: transparent; + border-bottom-color: transparent; + border-left-color: transparent; + _border-top-color: pink; + _border-bottom-color: pink; + _border-left-color: pink; + _filter: chroma(color=pink); +} + +/* line 162, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-anchor-right { + border-top-color: transparent; + border-bottom-color: transparent; + border-right-color: transparent; + _border-top-color: pink; + _border-bottom-color: pink; + _border-right-color: pink; + _filter: chroma(color=pink); +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 2px 2px 2px 2px; + border-width: 1px; + border-style: solid; + background-color: #cccccc; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-mc { + background-color: #cccccc; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tip-default { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tip-default { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tl { + background-position: 0 -6px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tr { + background-position: right -9px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-bl { + background-position: 0 -12px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-br { + background-position: right -15px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-bc { + background-position: 0 -3px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tr, +.x-tip-default-br, +.x-tip-default-mr { + padding-right: 3px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tl, +.x-tip-default-bl, +.x-tip-default-ml { + padding-left: 3px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tc { + height: 3px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-bc { + height: 3px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-tl, +.x-tip-default-bl, +.x-tip-default-tr, +.x-tip-default-br, +.x-tip-default-tc, +.x-tip-default-bc, +.x-tip-default-ml, +.x-tip-default-mr { + zoom: 1; + background-image: url(images/tip/tip-default-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-ml, +.x-tip-default-mr { + zoom: 1; + background-image: url(images/tip/tip-default-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-default-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tip-default-tl, +.x-strict .x-ie7 .x-tip-default-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tip-default:after { + display: none; + content: "x-slicer:corners:url(images/tip/tip-default-corners.gif), sides:url(images/tip/tip-default-sides.gif)"; +} + +/**/ +/* */ +/* line 36, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-default { + border-color: #868686; +} +/* line 45, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-default .x-tool-img { + background-color: #cccccc; +} + +/* line 60, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-default .x-tool-after-title { + margin: 0 0 0 6px; +} +/* line 65, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-default .x-rtl.x-tool-after-title { + margin: 0 6px 0 0; +} +/* line 70, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-default .x-tool-before-title { + margin: 0 6px 0 0; +} +/* line 75, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-default .x-rtl.x-tool-before-title { + margin: 0 0 0 6px; +} + +/* line 81, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-body-default { + padding: 3px 3px 0 3px; +} + +/* line 85, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-text-container-default { + color: #444444; + font-size: 11px; + font-weight: bold; +} + +/* line 91, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-default { + padding: 3px; + color: #444444; + font-size: 11px; + font-weight: normal; +} +/* line 96, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-default a { + color: #2a2a2a; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 4px 4px 4px 4px; + border-width: 1px; + border-style: solid; + background-color: white; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-mc { + background-color: white; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tip-form-invalid { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tip-form-invalid { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-5-5-5-5-1-1-1-1-4-4-4-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tr, +.x-tip-form-invalid-br, +.x-tip-form-invalid-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tl, +.x-tip-form-invalid-bl, +.x-tip-form-invalid-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-tl, +.x-tip-form-invalid-bl, +.x-tip-form-invalid-tr, +.x-tip-form-invalid-br, +.x-tip-form-invalid-tc, +.x-tip-form-invalid-bc, +.x-tip-form-invalid-ml, +.x-tip-form-invalid-mr { + zoom: 1; + background-image: url(images/tip/tip-form-invalid-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-ml, +.x-tip-form-invalid-mr { + zoom: 1; + background-image: url(images/tip/tip-form-invalid-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tip-form-invalid-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tip-form-invalid-tl, +.x-strict .x-ie7 .x-tip-form-invalid-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tip-form-invalid:after { + display: none; + content: "x-slicer:corners:url(images/tip/tip-form-invalid-corners.gif), sides:url(images/tip/tip-form-invalid-sides.gif)"; +} + +/**/ +/* */ +/* line 36, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-form-invalid { + border-color: #a1311f; + -webkit-box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; + -moz-box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; + box-shadow: #d87166 0 1px 0px 0 inset, #d87166 0 -1px 0px 0 inset, #d87166 -1px 0 0px 0 inset, #d87166 1px 0 0px 0 inset; +} +/* line 45, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-form-invalid .x-tool-img { + background-color: white; +} + +/* line 60, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-form-invalid .x-tool-after-title { + margin: 0 0 0 6px; +} +/* line 65, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-form-invalid .x-rtl.x-tool-after-title { + margin: 0 6px 0 0; +} +/* line 70, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-form-invalid .x-tool-before-title { + margin: 0 6px 0 0; +} +/* line 75, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-form-invalid .x-rtl.x-tool-before-title { + margin: 0 0 0 6px; +} + +/* line 81, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-body-form-invalid { + padding: 3px 3px 0 3px; +} + +/* line 85, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-header-text-container-form-invalid { + color: #444444; + font-size: 11px; + font-weight: bold; +} + +/* line 91, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid { + padding: 3px 3px 3px 22px; + color: #444444; + font-size: 11px; + font-weight: normal; +} +/* line 96, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid a { + color: #2a2a2a; +} + +/* line 195, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid { + background: 1px 1px no-repeat; + background-image: url(images/form/exclamation.gif); +} +/* line 198, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid li { + margin-bottom: 4px; +} +/* line 200, ../../../ext-theme-neutral/sass/src/tip/Tip.scss */ +.x-tip-body-form-invalid li.last { + margin-bottom: 0; +} + +/** + * Creates a visual theme of a button group. + * @member Ext.container.ButtonGroup + */ +/* line 49, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-default { + border-color: #d0d0d0; + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 58, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-default { + margin: 2px 2px 0 2px; + padding: 1px 0; + line-height: 15px; + background: #dfdfdf; + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; +} +/* line 69, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-default .x-tool-img { + background-color: #dfdfdf; +} + +/* line 80, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-text-container-default { + font: normal 11px tahoma, arial, verdana, sans-serif; + line-height: 15px; + color: #666666; +} + +/* line 86, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body-default { + padding: 0 1px; +} +/* line 88, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body-default .x-table-layout { + border-spacing: 0; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + padding: 1px 1px 1px 1px; + border-width: 1px; + border-style: solid; + background-color: #d6d6d6; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-mc { + background-color: #d6d6d6; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-group-default-framed { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-group-default-framed { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-2-2-2-2-1-1-1-1-1-1-1-1"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tl { + background-position: 0 -4px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tr { + background-position: right -6px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-bl { + background-position: 0 -8px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-br { + background-position: right -10px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-bc { + background-position: 0 -2px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tr, +.x-btn-group-default-framed-br, +.x-btn-group-default-framed-mr { + padding-right: 2px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tl, +.x-btn-group-default-framed-bl, +.x-btn-group-default-framed-ml { + padding-left: 2px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tc { + height: 2px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-bc { + height: 2px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-tl, +.x-btn-group-default-framed-bl, +.x-btn-group-default-framed-tr, +.x-btn-group-default-framed-br, +.x-btn-group-default-framed-tc, +.x-btn-group-default-framed-bc, +.x-btn-group-default-framed-ml, +.x-btn-group-default-framed-mr { + zoom: 1; + background-image: url(images/btn-group/btn-group-default-framed-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-ml, +.x-btn-group-default-framed-mr { + zoom: 1; + background-image: url(images/btn-group/btn-group-default-framed-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-group-default-framed-tl, +.x-strict .x-ie7 .x-btn-group-default-framed-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-group-default-framed:after { + display: none; + content: "x-slicer:corners:url(images/btn-group/btn-group-default-framed-corners.gif), sides:url(images/btn-group/btn-group-default-framed-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + padding: 1px 1px 1px 1px; + border-width: 1px; + border-style: solid; + background-color: #d6d6d6; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-mc { + background-color: #d6d6d6; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-btn-group-default-framed-notitle { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-btn-group-default-framed-notitle { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-2-2-2-2-1-1-1-1-1-1-1-1"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tl { + background-position: 0 -4px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tr { + background-position: right -6px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-bl { + background-position: 0 -8px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-br { + background-position: right -10px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-bc { + background-position: 0 -2px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tr, +.x-btn-group-default-framed-notitle-br, +.x-btn-group-default-framed-notitle-mr { + padding-right: 2px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tl, +.x-btn-group-default-framed-notitle-bl, +.x-btn-group-default-framed-notitle-ml { + padding-left: 2px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tc { + height: 2px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-bc { + height: 2px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-tl, +.x-btn-group-default-framed-notitle-bl, +.x-btn-group-default-framed-notitle-tr, +.x-btn-group-default-framed-notitle-br, +.x-btn-group-default-framed-notitle-tc, +.x-btn-group-default-framed-notitle-bc, +.x-btn-group-default-framed-notitle-ml, +.x-btn-group-default-framed-notitle-mr { + zoom: 1; + background-image: url(images/btn-group/btn-group-default-framed-notitle-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-ml, +.x-btn-group-default-framed-notitle-mr { + zoom: 1; + background-image: url(images/btn-group/btn-group-default-framed-notitle-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-btn-group-default-framed-notitle-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-btn-group-default-framed-notitle-tl, +.x-strict .x-ie7 .x-btn-group-default-framed-notitle-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-btn-group-default-framed-notitle:after { + display: none; + content: "x-slicer:corners:url(images/btn-group/btn-group-default-framed-notitle-corners.gif), sides:url(images/btn-group/btn-group-default-framed-notitle-sides.gif)"; +} + +/**/ +/* */ +/* line 49, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-default-framed { + border-color: #d0d0d0; + -webkit-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + -moz-box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; + box-shadow: #ececec 0 1px 0px 0 inset, #ececec 0 -1px 0px 0 inset, #ececec -1px 0 0px 0 inset, #ececec 1px 0 0px 0 inset; +} + +/* line 58, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-default-framed { + margin: 2px 2px 0 2px; + padding: 1px 0; + line-height: 15px; + background: #dfdfdf; + -moz-border-radius-topleft: 2px; + -webkit-border-top-left-radius: 2px; + border-top-left-radius: 2px; + -moz-border-radius-topright: 2px; + -webkit-border-top-right-radius: 2px; + border-top-right-radius: 2px; +} +/* line 69, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-default-framed .x-tool-img { + background-color: #dfdfdf; +} + +/* line 80, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-header-text-container-default-framed { + font: normal 11px tahoma, arial, verdana, sans-serif; + line-height: 15px; + color: #666666; +} + +/* line 86, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body-default-framed { + padding: 0 1px 0 1px; +} +/* line 88, ../../../ext-theme-neutral/sass/src/container/ButtonGroup.scss */ +.x-btn-group-body-default-framed .x-table-layout { + border-spacing: 0; +} + +/** + * Creates a visual theme for an Ext.Window + * + * @param {boolean} $ui-force-header-border + * True to force the window header to have a border on the side facing + * the window body. Overrides dock layout's border management border + * removal rules. + * + * @param {boolean} $ui-include-border-management-rules + * True to include neptune style border management rules. + * + * @param {color} $ui-wrap-border-color + * The color to apply to the border that wraps the body and docked items. + * The presence of the wrap border is controlled by the + * {@link Ext.window.Window#border border} config. Only applicable when + * $ui-include-border-management-rules is true. + * + * @param {color} $ui-wrap-border-width + * The width to apply to the border that wraps the body and docked items. + * The presence of the wrap border is controlled by the + * {@link Ext.window.Window#border border} config. Only applicable when + * $ui-include-border-management-rules is true. + * + * @member Ext.window.Window + */ +/* line 444, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-ghost { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=65); + opacity: 0.65; +} + +/* line 73, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-default { + border-color: #a9a9a9; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 4px 4px 4px 4px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-default { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-default { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-4-4-4-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tr, +.x-window-default-br, +.x-window-default-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tl, +.x-window-default-bl, +.x-window-default-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-tl, +.x-window-default-bl, +.x-window-default-tr, +.x-window-default-br, +.x-window-default-tc, +.x-window-default-bc, +.x-window-default-ml, +.x-window-default-mr { + zoom: 1; + background-image: url(images/window/window-default-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-ml, +.x-window-default-mr { + zoom: 1; + background-image: url(images/window/window-default-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-default-mc { + padding: 0px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-default-tl, +.x-strict .x-ie7 .x-window-default-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-default:after { + display: none; + content: "x-slicer:corners:url(images/window/window-default-corners.gif), sides:url(images/window/window-default-sides.gif)"; +} + +/**/ +/* */ +/* line 94, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-body-default { + border-color: #bcb1b0; + border-width: 1px; + border-style: solid; + background: #e0e0e0; + color: black; +} + +/* line 105, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default { + font-size: 11px; + border-color: #a9a9a9; + zoom: 1; + background-color: #e8e8e8; +} +/* line 111, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default .x-tool-img { + background-color: #e8e8e8; +} + +/* line 122, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-window-header-text-container { + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-window-header-default-vertical .x-window-header-text-container { + background-color: #e8e8e8; + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1), progid:DXImageTransform.Microsoft.Chroma(color=#e8e8e8); +} + +/* line 127, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-rtl.x-window-header-text-container { + -webkit-transform: rotate(270deg); + -webkit-transform-origin: 100% 0; + -moz-transform: rotate(270deg); + -moz-transform-origin: 100% 0; + -o-transform: rotate(270deg); + -o-transform-origin: 100% 0; + transform: rotate(270deg); + transform-origin: 100% 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-window-header-default-vertical .x-rtl.x-window-header-text-container { + background-color: #e8e8e8; + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3), progid:DXImageTransform.Microsoft.Chroma(color=#e8e8e8); +} + +/* line 132, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-text-container-default { + color: #333333; + font-weight: bold; + line-height: 15px; + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + padding: 0 2px 1px; + text-transform: none; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top { + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + border-top-left-radius: 5px; + -moz-border-radius-topright: 5px; + -webkit-border-top-right-radius: 5px; + border-top-right-radius: 5px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 4px 5px 0 5px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-0-0-1-1-0-1-4-5-0-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tr, +.x-window-header-default-top-br, +.x-window-header-default-top-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tl, +.x-window-header-default-top-bl, +.x-window-header-default-top-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-tl, +.x-window-header-default-top-bl, +.x-window-header-default-top-tr, +.x-window-header-default-top-br, +.x-window-header-default-top-tc, +.x-window-header-default-top-bc, +.x-window-header-default-top-ml, +.x-window-header-default-top-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-ml, +.x-window-header-default-top-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-top-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-top-mc { + padding: 0px 1px 0 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-top-tl, +.x-strict .x-ie7 .x-window-header-default-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-top:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-top-corners.gif), sides:url(images/window-header/window-header-default-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 5px; + -webkit-border-top-right-radius: 5px; + border-top-right-radius: 5px; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-right-radius: 5px; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 5px 4px 5px 0; + border-width: 1px 1px 1px 0; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-0-5-5-0-1-1-1-0-5-4-5-0"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tr, +.x-window-header-default-right-br, +.x-window-header-default-right-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tl, +.x-window-header-default-right-bl, +.x-window-header-default-right-ml { + padding-left: 0; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-tl, +.x-window-header-default-right-bl, +.x-window-header-default-right-tr, +.x-window-header-default-right-br, +.x-window-header-default-right-tc, +.x-window-header-default-right-bc, +.x-window-header-default-right-ml, +.x-window-header-default-right-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-right-corners.gif); +} + +/* line 390, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-window-header-default-right-tl, .x-rtl.x-window-header-default-right-ml, .x-rtl.x-window-header-default-right-bl, .x-rtl.x-window-header-default-right-tr, .x-rtl.x-window-header-default-right-mr, .x-rtl.x-window-header-default-right-br { + background-image: url(images/window-header/window-header-default-right-corners-rtl.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-ml, +.x-window-header-default-right-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-right-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-right-mc { + padding: 1px 0px 1px 0; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-right-tl, +.x-strict .x-ie7 .x-window-header-default-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-right:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-right-corners.gif), corners-rtl:url(images/window-header/window-header-default-right-corners-rtl.gif), sides:url(images/window-header/window-header-default-right-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-right-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + border-bottom-left-radius: 5px; + padding: 0 5px 4px 5px; + border-width: 0 1px 1px 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-0-0-5-5-0-1-1-1-0-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tr, +.x-window-header-default-bottom-br, +.x-window-header-default-bottom-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tl, +.x-window-header-default-bottom-bl, +.x-window-header-default-bottom-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tc { + height: 0; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-tl, +.x-window-header-default-bottom-bl, +.x-window-header-default-bottom-tr, +.x-window-header-default-bottom-br, +.x-window-header-default-bottom-tc, +.x-window-header-default-bottom-bc, +.x-window-header-default-bottom-ml, +.x-window-header-default-bottom-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-ml, +.x-window-header-default-bottom-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-bottom-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-bottom-mc { + padding: 0 1px 0px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-bottom-tl, +.x-strict .x-ie7 .x-window-header-default-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-bottom:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-bottom-corners.gif), sides:url(images/window-header/window-header-default-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left { + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + border-top-left-radius: 5px; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + border-bottom-left-radius: 5px; + padding: 5px 0 5px 4px; + border-width: 1px 0 1px 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-0-0-5-1-0-1-1-5-0-5-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tr, +.x-window-header-default-left-br, +.x-window-header-default-left-mr { + padding-right: 0; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tl, +.x-window-header-default-left-bl, +.x-window-header-default-left-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-tl, +.x-window-header-default-left-bl, +.x-window-header-default-left-tr, +.x-window-header-default-left-br, +.x-window-header-default-left-tc, +.x-window-header-default-left-bc, +.x-window-header-default-left-ml, +.x-window-header-default-left-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-left-corners.gif); +} + +/* line 390, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-window-header-default-left-tl, .x-rtl.x-window-header-default-left-ml, .x-rtl.x-window-header-default-left-bl, .x-rtl.x-window-header-default-left-tr, .x-rtl.x-window-header-default-left-mr, .x-rtl.x-window-header-default-left-br { + background-image: url(images/window-header/window-header-default-left-corners-rtl.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-ml, +.x-window-header-default-left-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-left-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-left-mc { + padding: 1px 0 1px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-left-tl, +.x-strict .x-ie7 .x-window-header-default-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-left:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-left-corners.gif), corners-rtl:url(images/window-header/window-header-default-left-corners-rtl.gif), sides:url(images/window-header/window-header-default-left-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 4px 5px 4px 5px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-collapsed-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-collapsed-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tr, +.x-window-header-default-collapsed-top-br, +.x-window-header-default-collapsed-top-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tl, +.x-window-header-default-collapsed-top-bl, +.x-window-header-default-collapsed-top-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-tl, +.x-window-header-default-collapsed-top-bl, +.x-window-header-default-collapsed-top-tr, +.x-window-header-default-collapsed-top-br, +.x-window-header-default-collapsed-top-tc, +.x-window-header-default-collapsed-top-bc, +.x-window-header-default-collapsed-top-ml, +.x-window-header-default-collapsed-top-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-ml, +.x-window-header-default-collapsed-top-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-top-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-top-mc { + padding: 0px 1px 0px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-collapsed-top-tl, +.x-strict .x-ie7 .x-window-header-default-collapsed-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-collapsed-top:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-collapsed-top-corners.gif), sides:url(images/window-header/window-header-default-collapsed-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 5px 4px 5px 4px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-collapsed-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-collapsed-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-5-4-5-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tr, +.x-window-header-default-collapsed-right-br, +.x-window-header-default-collapsed-right-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tl, +.x-window-header-default-collapsed-right-bl, +.x-window-header-default-collapsed-right-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-tl, +.x-window-header-default-collapsed-right-bl, +.x-window-header-default-collapsed-right-tr, +.x-window-header-default-collapsed-right-br, +.x-window-header-default-collapsed-right-tc, +.x-window-header-default-collapsed-right-bc, +.x-window-header-default-collapsed-right-ml, +.x-window-header-default-collapsed-right-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-right-corners.gif); +} + +/* line 390, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-window-header-default-collapsed-right-tl, .x-rtl.x-window-header-default-collapsed-right-ml, .x-rtl.x-window-header-default-collapsed-right-bl, .x-rtl.x-window-header-default-collapsed-right-tr, .x-rtl.x-window-header-default-collapsed-right-mr, .x-rtl.x-window-header-default-collapsed-right-br { + background-image: url(images/window-header/window-header-default-collapsed-right-corners-rtl.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-ml, +.x-window-header-default-collapsed-right-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-right-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-right-mc { + padding: 1px 0px 1px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-collapsed-right-tl, +.x-strict .x-ie7 .x-window-header-default-collapsed-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-collapsed-right:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-collapsed-right-corners.gif), corners-rtl:url(images/window-header/window-header-default-collapsed-right-corners-rtl.gif), sides:url(images/window-header/window-header-default-collapsed-right-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 4px 5px 4px 5px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-collapsed-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-collapsed-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-4-5-4-5"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tr, +.x-window-header-default-collapsed-bottom-br, +.x-window-header-default-collapsed-bottom-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tl, +.x-window-header-default-collapsed-bottom-bl, +.x-window-header-default-collapsed-bottom-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-tl, +.x-window-header-default-collapsed-bottom-bl, +.x-window-header-default-collapsed-bottom-tr, +.x-window-header-default-collapsed-bottom-br, +.x-window-header-default-collapsed-bottom-tc, +.x-window-header-default-collapsed-bottom-bc, +.x-window-header-default-collapsed-bottom-ml, +.x-window-header-default-collapsed-bottom-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-ml, +.x-window-header-default-collapsed-bottom-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-bottom-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-bottom-mc { + padding: 0px 1px 0px 1px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-tl, +.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-collapsed-bottom:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-collapsed-bottom-corners.gif), sides:url(images/window-header/window-header-default-collapsed-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + padding: 5px 4px 5px 4px; + border-width: 1px; + border-style: solid; + background-color: #e8e8e8; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-mc { + background-color: #e8e8e8; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-window-header-default-collapsed-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-window-header-default-collapsed-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-5-5-5-5-1-1-1-1-5-4-5-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tr, +.x-window-header-default-collapsed-left-br, +.x-window-header-default-collapsed-left-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tl, +.x-window-header-default-collapsed-left-bl, +.x-window-header-default-collapsed-left-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tc { + height: 5px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-tl, +.x-window-header-default-collapsed-left-bl, +.x-window-header-default-collapsed-left-tr, +.x-window-header-default-collapsed-left-br, +.x-window-header-default-collapsed-left-tc, +.x-window-header-default-collapsed-left-bc, +.x-window-header-default-collapsed-left-ml, +.x-window-header-default-collapsed-left-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-left-corners.gif); +} + +/* line 390, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-rtl.x-window-header-default-collapsed-left-tl, .x-rtl.x-window-header-default-collapsed-left-ml, .x-rtl.x-window-header-default-collapsed-left-bl, .x-rtl.x-window-header-default-collapsed-left-tr, .x-rtl.x-window-header-default-collapsed-left-mr, .x-rtl.x-window-header-default-collapsed-left-br { + background-image: url(images/window-header/window-header-default-collapsed-left-corners-rtl.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-ml, +.x-window-header-default-collapsed-left-mr { + zoom: 1; + background-image: url(images/window-header/window-header-default-collapsed-left-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-window-header-default-collapsed-left-mc { + padding: 1px 0px 1px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-window-header-default-collapsed-left-tl, +.x-strict .x-ie7 .x-window-header-default-collapsed-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-window-header-default-collapsed-left:after { + display: none; + content: "x-slicer:corners:url(images/window-header/window-header-default-collapsed-left-corners.gif), corners-rtl:url(images/window-header/window-header-default-collapsed-left-corners-rtl.gif), sides:url(images/window-header/window-header-default-collapsed-left-sides.gif)"; +} + +/**/ +/* */ +/* line 236, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-top { + -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; +} + +/* line 240, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-right { + -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset; +} + +/* line 244, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-bottom { + -webkit-box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 -1px 0 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; +} + +/* line 248, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-left { + -webkit-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + -moz-box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; + box-shadow: #ebe7e7 0 1px 0px 0 inset, #ebe7e7 0 -1px 0px 0 inset, #ebe7e7 1px 0 0px 0 inset; +} + +/* line 254, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default .x-window-header-icon { + width: 16px; + height: 16px; + color: #333333; + font-size: 16px; + line-height: 16px; + background-position: center center; +} +/* line 263, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default .x-window-header-glyph { + color: #333333; + font-size: 16px; + line-height: 16px; + opacity: 0.5; +} +/* line 279, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-ie8m .x-window-header-default .x-window-header-glyph { + color: #8d8d8d; +} + +/* line 287, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-window-header-icon-before-title { + margin: 0 2px 0 0; +} +/* line 292, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-rtl.x-window-header-icon-before-title { + margin: 0 0 0 2px; +} +/* line 297, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-window-header-icon-after-title { + margin: 0 0 0 2px; +} +/* line 302, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-rtl.x-window-header-icon-after-title { + margin: 0 2px 0 0; +} + +/* line 309, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-window-header-icon-before-title { + margin: 0 0 2px 0; +} +/* line 314, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-rtl.x-window-header-icon-before-title { + margin: 0 0 2px 0; +} +/* line 319, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-window-header-icon-after-title { + margin: 2px 0 0 0; +} +/* line 324, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-rtl.x-window-header-icon-after-title { + margin: 2px 0 0 0; +} + +/* line 332, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-tool-after-title { + margin: 0 0 0 2px; +} +/* line 337, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-rtl.x-tool-after-title { + margin: 0 2px 0 0; +} +/* line 342, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-tool-before-title { + margin: 0 2px 0 0; +} +/* line 347, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-horizontal .x-rtl.x-tool-before-title { + margin: 0 0 0 2px; +} + +/* line 354, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-tool-after-title { + margin: 2px 0 0 0; +} +/* line 359, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-rtl.x-tool-after-title { + margin: 2px 0 0 0; +} +/* line 364, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-tool-before-title { + margin: 0 0 2px 0; +} +/* line 369, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-header-default-vertical .x-rtl.x-tool-before-title { + margin: 0 0 2px 0; +} + +/* line 382, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-window-default-collapsed .x-window-header { + border-width: 1px !important; +} + +/* line 388, ../../../ext-theme-neutral/sass/src/window/Window.scss */ +.x-nbr .x-window-default-collapsed .x-window-header { + border-width: 0 !important; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-form-invalid-under { + padding: 2px 2px 2px 20px; + color: #c0272b; + font: normal 11px tahoma, arial, verdana, sans-serif; + line-height: 16px; + background: no-repeat 0 2px; + background-image: url(images/form/exclamation.gif); +} + +/* line 14, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +div.x-lbl-top-err-icon { + margin-bottom: 3px; +} + +/* line 18, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-form-invalid-icon { + width: 16px; + height: 16px; + margin: 0 1px; + background-image: url(images/form/exclamation.gif); + background-repeat: no-repeat; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-form-item-label { + color: black; + font: normal 12px/22px tahoma, arial, verdana, sans-serif; +} +/* line 30, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-toolbar-item .x-form-item-label { + font-size: 11px; + line-height: 20px; +} + +/* line 44, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-autocontainer-form-item, +.x-anchor-form-item, +.x-vbox-form-item, +.x-checkboxgroup-form-item, +.x-table-form-item { + margin-bottom: 5px; +} + +/* line 52, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-ie6 .x-form-form-item td { + border-top-width: 0; +} +/* line 58, ../../../ext-theme-neutral/sass/src/form/Labelable.scss */ +.x-ie6 td.x-form-item-pad { + height: 5px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Base.scss */ +.x-form-field { + color: black; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/form/field/Base.scss */ +.x-form-item, +.x-form-field { + font: normal 12px tahoma, arial, verdana, sans-serif; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/form/field/Base.scss */ +input.x-form-invalid-field, +textarea.x-form-invalid-field { + background-color: white; + background-image: url(images/grid/invalid_line.gif); + background-repeat: repeat-x; + background-position: bottom; + border-color: #cc3300; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/form/field/Base.scss */ +.x-item-disabled .x-form-item-label, +.x-item-disabled .x-form-field, +.x-item-disabled .x-form-display-field, +.x-item-disabled .x-form-cb-label, +.x-item-disabled .x-form-trigger { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-form-text { + color: black; + padding: 1px 3px 1px 3px; + background: white repeat-x 0 0; + border-width: 1px; + border-style: solid; + border-color: #b5b8c8; + background-image: url(images/form/text-bg.gif); + height: 22px; + line-height: 17px; +} +/* line 17, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-field-default-toolbar .x-form-text { + height: 20px; + line-height: 15px; +} +/* line 26, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-strict .x-ie6 .x-form-text, .x-strict .x-ie7 .x-form-text { + height: 18px; +} +/* line 32, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-strict .x-ie6 .x-field-default-toolbar .x-form-text, .x-strict .x-ie7 .x-field-default-toolbar .x-form-text { + height: 16px; +} + +/* line 40, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-form-focus { + border-color: #a1a1a1; +} + +/* line 45, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-form-empty-field, +textarea.x-form-empty-field { + color: gray; +} + + /* + In oldIE, text inputs get a mysterious extra pixel of spacing above and below. + This is targeted at IE6-IE7 (all modes) and IE9+ Quirks mode. + + IE8 quirks on Windows 7 requires this fix, but on + IE8 quirks on Windows XP, this is breaks the layout. + TODO: Check field input heights in IE8 quirks on Windows Vista. + + Since we can't specifically target a specific version of Windows via CSS, we default to fixing it the XP way, for now. + */ +/* line 61, ../../../ext-theme-neutral/sass/src/form/field/Text.scss */ +.x-quirks .x-ie9p .x-form-text, +.x-ie7m .x-form-text { + margin-top: -1px; + margin-bottom: -1px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/TextArea.scss */ +.x-form-textarea { + line-height: normal; + height: auto; + background-image: url(images/form/text-bg.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Display.scss */ +.x-form-display-field { + font: normal 12px tahoma, arial, verdana, sans-serif; + color: black; + line-height: 22px; +} +/* line 6, ../../../ext-theme-neutral/sass/src/form/field/Display.scss */ +.x-toolbar-item .x-form-display-field { + line-height: 20px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box .x-window-body { + background-color: #e8e8e8; + border-width: 0; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-info, +.x-message-box-warning, +.x-message-box-question, +.x-message-box-error { + background-position: top left; + background-repeat: no-repeat; +} + +/* line 23, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-rtl.x-message-box-info, .x-rtl.x-message-box-warning, .x-rtl.x-message-box-question, .x-rtl.x-message-box-error { + background-position: top left; +} + +/* line 29, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-info { + background-image: url(images/shared/icon-info.gif); +} + +/* line 33, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-warning { + background-image: url(images/shared/icon-warning.gif); +} + +/* line 37, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-question { + background-image: url(images/shared/icon-question.gif); +} + +/* line 41, ../../../ext-theme-neutral/sass/src/window/MessageBox.scss */ +.x-message-box-error { + background-image: url(images/shared/icon-error.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/CheckboxGroup.scss */ +.x-form-checkboxgroup-body { + padding: 0 4px; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/form/CheckboxGroup.scss */ +.x-form-invalid .x-form-checkboxgroup-body { + border: 1px solid #cc3300; + background-image: url(images/grid/invalid_line.gif); + background-repeat: repeat-x; + background-position: bottom; +} + +/* line 16, ../../../ext-theme-neutral/sass/src/form/CheckboxGroup.scss */ +.x-check-group-alt { + background: #d5d5d5; + border-top: 1px dotted #b4b4b4; + border-bottom: 1px dotted #b4b4b4; +} + +/* line 22, ../../../ext-theme-neutral/sass/src/form/CheckboxGroup.scss */ +.x-form-check-group-label { + color: black; + padding: 2px; + margin: 0 30px 5px 0; + border-width: 0 0 1px 0; + border-style: solid; + border-color: black; +} + +/* line 32, ../../../ext-theme-neutral/sass/src/form/CheckboxGroup.scss */ +.x-rtl.x-form-check-group-label { + margin: 0 0 5px 30px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset { + border: 1px solid #b5b8c8; + padding: 0 10px; + margin: 0 0 10px; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie8m .x-fieldset, +.x-quirks .x-ie .x-fieldset { + padding-top: 0; +} +/* line 13, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie8m .x-fieldset .x-fieldset-body, +.x-quirks .x-ie .x-fieldset .x-fieldset-body { + padding-top: 0; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header-checkbox { + line-height: 14px; + margin: 1px 3px 0 0; +} + +/* line 24, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header { + padding: 0 3px 1px; +} +/* line 27, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-tool { + margin-top: 1px; + padding: 0; +} +/* line 33, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header .x-form-cb-wrap { + padding: 1px 0; +} + +/* line 39, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header-text { + font: 11px/14px bold tahoma, arial, verdana, sans-serif; + color: #333333; + padding: 1px 0; +} + +/* line 44, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-header-text-collapsible { + cursor: pointer; +} + +/* line 50, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-with-title .x-fieldset-header-checkbox, +.x-fieldset-with-title .x-tool { + margin: 1px 3px 0 0; +} + +/* line 58, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-with-title .x-rtl .x-fieldset-header-checkbox, +.x-fieldset-with-title .x-rtl .x-tool { + margin: 1px 0 0 3px; +} + +/* line 66, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-webkit .x-fieldset-header { + -webkit-padding-start: 3px; + -webkit-padding-end: 3px; +} + +/* line 76, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-opera .x-fieldset-with-legend { + margin-top: -1px; +} +/* line 79, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-opera.x-mac .x-fieldset-header-text { + padding: 2px 0 0; +} + +/* line 87, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-strict .x-ie8 .x-fieldset-header { + margin-bottom: -1px; +} +/* line 91, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-strict .x-ie8 .x-fieldset-header .x-tool, +.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-text, +.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-checkbox { + position: relative; + top: -1px; +} + +/* line 101, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-quirks .x-ie .x-fieldset-header, +.x-ie8m .x-fieldset-header { + padding-left: 1px; + padding-right: 1px; +} + +/* line 109, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-collapsed .x-fieldset-body { + display: none; +} + +/* line 114, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-collapsed { + padding-bottom: 0 !important; + border-width: 1px 1px 0 1px !important; + border-left-color: transparent !important; + border-right-color: transparent !important; +} + +/* line 123, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie6 .x-fieldset-collapsed { + border-width: 1px 0 0 0 !important; + padding-bottom: 0 !important; + margin-left: 1px; + margin-right: 1px; +} + +/* line 131, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie .x-fieldset-bwrap { + zoom: 1; +} + +/* line 137, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset .x-tool-toggle { + background-position: 0 -60px; +} +/* line 144, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset .x-tool-over .x-tool-toggle { + background-position: -15px -60px; +} + +/* line 151, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-collapsed .x-tool-toggle { + background-position: 0 -75px; +} +/* line 156, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-collapsed .x-tool-over .x-tool-toggle { + background-position: -15px -75px; +} + +/* IE legend positioning bug */ +/* line 164, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie .x-fieldset-noborder legend { + position: relative; + margin-bottom: 23px; +} + +/* line 170, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-ie .x-fieldset-noborder legend span { + position: absolute; + left: 16px; +} + +/* line 176, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset { + overflow: hidden; +} + +/* line 180, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-bwrap { + overflow: hidden; + zoom: 1; +} + +/* line 186, ../../../ext-theme-neutral/sass/src/form/FieldSet.scss */ +.x-fieldset-body { + overflow: hidden; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-wrap { + line-height: 22px; +} +/* line 4, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-toolbar-item .x-form-cb-wrap { + line-height: 20px; +} + +/* line 10, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb { + margin-top: 5px; +} +/* line 13, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-toolbar-item .x-form-cb { + margin-top: 4px; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-checkbox { + width: 13px; + height: 13px; + background: url(images/form/checkbox.gif) no-repeat; +} + +/* line 25, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-checked .x-form-checkbox { + background-position: 0 -13px; +} + +/* Focused */ +/* line 30, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-checkbox-focus { + background-position: -13px 0; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-checked .x-form-checkbox-focus { + background-position: -13px -13px; +} + +/* boxLabel */ +/* line 40, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-label-before { + margin-right: 4px; +} + +/* line 45, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-rtl.x-field .x-form-cb-label-before { + margin-right: 0; + margin-left: 4px; +} + +/* line 51, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-form-cb-label-after { + margin-left: 4px; +} + +/* line 56, ../../../ext-theme-neutral/sass/src/form/field/Checkbox.scss */ +.x-rtl.x-field .x-form-cb-label-after { + margin-left: 0; + margin-right: 4px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger { + background: url(images/form/trigger.gif); + width: 17px; +} + +/* line 7, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-rtl.x-form-trigger-wrap .x-form-trigger { + background-image: url(images/form/trigger-rtl.gif); +} + +/* line 12, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-trigger-cell { + background-color: white; + width: 17px; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger-over { + background-position: -17px 0; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger-wrap-focus .x-form-trigger { + background-position: -51px 0; +} + +/* line 25, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger-wrap-focus .x-form-trigger-over { + background-position: -68px 0; +} + +/* line 30, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-trigger-click, +.x-form-trigger-wrap-focus .x-form-trigger-click { + background-position: -34px 0; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-clear-trigger { + background-image: url(images/form/clear-trigger.gif); +} + +/* line 39, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-rtl.x-form-trigger-wrap .x-form-clear-trigger { + background-image: url(images/form/clear-trigger-rtl.gif); +} + +/* line 44, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-form-search-trigger { + background-image: url(images/form/search-trigger.gif); +} + +/* line 49, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-rtl.x-form-trigger-wrap .x-form-search-trigger { + background-image: url(images/form/search-trigger-rtl.gif); +} + +/* line 58, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-quirks .prefixie6 .x-form-trigger-input-cell { + height: 22px; +} +/* line 62, ../../../ext-theme-neutral/sass/src/form/field/Trigger.scss */ +.x-quirks .prefixie6 .x-field-default-toolbar .x-form-trigger-input-cell { + height: 20px; +} + +/* line 2, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-spinner-up, +.x-form-spinner-down { + background-image: url(images/form/spinner.gif); + background-color: white; + width: 17px !important; + height: 11px !important; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-rtl.x-form-trigger-wrap .x-form-spinner-up, +.x-rtl.x-form-trigger-wrap .x-form-spinner-down { + background-image: url(images/form/spinner-rtl.gif); +} + +/* line 19, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-spinner-down { + background-position: 0 -11px; +} + +/* line 23, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-trigger-wrap-focus .x-form-spinner-down { + background-position: -51px -11px; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-trigger-wrap .x-form-spinner-down-over { + background-position: -17px -11px; +} + +/* line 29, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-trigger-wrap-focus .x-form-spinner-down-over { + background-position: -68px -11px; +} + +/* line 32, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-form-trigger-wrap .x-form-spinner-down-click { + background-position: -34px -11px; +} + +/* line 41, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-spinner-up, +.x-toolbar-item .x-form-spinner-down { + background-image: url(images/form/spinner-small.gif); + height: 10px !important; +} +/* line 45, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-spinner-down { + background-position: 0 -10px; +} +/* line 48, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down { + background-position: -51px -10px; +} +/* line 51, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-over { + background-position: -17px -10px; +} +/* line 54, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down-over { + background-position: -68px -10px; +} +/* line 57, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-click { + background-position: -34px -10px; +} + +/* line 67, ../../../ext-theme-neutral/sass/src/form/field/Spinner.scss */ +.x-toolbar-item .x-rtl.x-form-trigger-wrap .x-form-spinner-up, +.x-toolbar-item .x-rtl.x-form-trigger-wrap .x-form-spinner-down { + background-image: url(images/form/spinner-small-rtl.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-number { + width: 30px; +} + +/* line 5, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-first { + background-image: url(images/grid/page-first.gif); +} + +/* line 9, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-prev { + background-image: url(images/grid/page-prev.gif); +} + +/* line 13, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-next { + background-image: url(images/grid/page-next.gif); +} + +/* line 17, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-page-last { + background-image: url(images/grid/page-last.gif); +} + +/* line 21, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-tbar-loading { + background-image: url(images/grid/refresh.gif); +} + +/* line 27, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-page-first { + background-image: url(images/grid/page-first-disabled.gif); +} +/* line 31, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-page-prev { + background-image: url(images/grid/page-prev-disabled.gif); +} +/* line 35, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-page-next { + background-image: url(images/grid/page-next-disabled.gif); +} +/* line 39, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-page-last { + background-image: url(images/grid/page-last-disabled.gif); +} +/* line 43, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-tbar-loading { + background-image: url(images/grid/refresh-disabled.gif); +} + +/* line 51, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-rtl.x-tbar-page-first { + background-image: url(images/grid/page-last.gif); +} +/* line 55, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-rtl.x-tbar-page-prev { + background-image: url(images/grid/page-next.gif); +} +/* line 59, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-rtl.x-tbar-page-next { + background-image: url(images/grid/page-prev.gif); +} +/* line 63, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-rtl.x-tbar-page-last { + background-image: url(images/grid/page-first.gif); +} + +/* line 71, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-rtl.x-tbar-page-first { + background-image: url(images/grid/page-last-disabled.gif); +} +/* line 75, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-rtl.x-tbar-page-prev { + background-image: url(images/grid/page-next-disabled.gif); +} +/* line 79, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-rtl.x-tbar-page-next { + background-image: url(images/grid/page-prev-disabled.gif); +} +/* line 83, ../../../ext-theme-neutral/sass/src/toolbar/Paging.scss */ +.x-item-disabled .x-rtl.x-tbar-page-last { + background-image: url(images/grid/page-first-disabled.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist { + border-width: 1px; + border-style: solid; + border-color: #b5b8c8; + background: white; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-strict .x-ie6 .x-boundlist-list-ct, +.x-strict .x-ie7 .x-boundlist-list-ct { + position: relative; +} + +/* line 20, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-item { + padding: 0 3px; + line-height: 20px; + cursor: pointer; + cursor: hand; + position: relative; + /*allow hover in IE on empty items*/ + zoom: 1; + border-width: 1px; + border-style: dotted; + border-color: white; +} + +/* line 38, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-selected { + background: #d3d3d3; + border-color: #b3abaa; +} + +/* line 43, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-item-over { + background: #e0e0e0; + border-color: #bfb8b8; +} + +/* line 48, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-floating { + border-top-width: 0; +} + +/* line 52, ../../../ext-theme-neutral/sass/src/view/BoundList.scss */ +.x-boundlist-above { + border-top-width: 1px; + border-bottom-width: 1px; +} + +/* line 9, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker { + border-width: 1px; + border-style: solid; + border-color: #585858; + background-color: white; + width: 177px; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-header { + padding: 3px 6px; + text-align: center; + background-image: none; + background-color: #6f6f6f; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #777777), color-stop(100%, #656565)); + background-image: -webkit-linear-gradient(top, #777777, #656565); + background-image: -moz-linear-gradient(top, #777777, #656565); + background-image: -o-linear-gradient(top, #777777, #656565); + background-image: linear-gradient(top, #777777, #656565); +} + +/* line 32, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-arrow { + width: 15px; + height: 15px; + top: 6px; + cursor: pointer; + background-color: #6f6f6f; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); + opacity: 0.7; +} + +/* line 50, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +a.x-datepicker-arrow:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +/* line 55, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-next { + right: 6px; + background-image: url(images/shared/right-btn.gif); +} + +/* line 60, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-prev { + left: 6px; + background-image: url(images/shared/left-btn.gif); +} + +/* line 76, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-month .x-btn, +.x-datepicker-month .x-btn .x-btn-tc, +.x-datepicker-month .x-btn .x-btn-tl, +.x-datepicker-month .x-btn .x-btn-tr, +.x-datepicker-month .x-btn .x-btn-mc, +.x-datepicker-month .x-btn .x-btn-ml, +.x-datepicker-month .x-btn .x-btn-mr, +.x-datepicker-month .x-btn .x-btn-bc, +.x-datepicker-month .x-btn .x-btn-bl, +.x-datepicker-month .x-btn .x-btn-br { + background: transparent; + border-width: 0 !important; +} +/* line 83, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-month .x-btn-inner { + color: white; +} +/* line 88, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-month .x-btn-split-right { + background-image: url(images/button/s-arrow-light.gif); + padding-right: 12px; +} + +/* line 94, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-column-header { + width: 25px; + color: #3e3e3e; + font: normal 10px tahoma, arial, verdana, sans-serif; + text-align: right; + border-width: 0 0 1px; + border-style: solid; + border-color: #d0d0d0; + background-image: none; + background-color: #e9e9e9; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f1f1f1), color-stop(100%, #dfdfdf)); + background-image: -webkit-linear-gradient(top, #f1f1f1, #dfdfdf); + background-image: -moz-linear-gradient(top, #f1f1f1, #dfdfdf); + background-image: -o-linear-gradient(top, #f1f1f1, #dfdfdf); + background-image: linear-gradient(top, #f1f1f1, #dfdfdf); +} + +/* line 113, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-column-header-inner { + line-height: 19px; + padding: 0 7px 0 0; +} + +/* line 118, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-cell { + text-align: right; + border-width: 1px; + border-style: solid; + border-color: white; +} + +/* line 128, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-date { + padding: 0 4px 0 0; + font: normal 11px tahoma, arial, verdana, sans-serif; + color: black; + cursor: pointer; + line-height: 18px; +} + +/* line 138, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +a.x-datepicker-date:hover { + color: black; + background-color: transparent; +} + +/* line 143, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-selected { + border-style: solid; + border-color: #b2aaa9; +} +/* line 146, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-selected .x-datepicker-date { + background-color: #d8d8d8; + font-weight: bold; +} + +/* line 152, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-today { + border-color: darkred; + border-style: solid; +} + +/* line 159, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-prevday .x-datepicker-date, +.x-datepicker-nextday .x-datepicker-date { + color: #aaaaaa; +} + +/* line 166, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-disabled a.x-datepicker-date { + background-color: #eeeeee; + cursor: default; + color: #bbbbbb; +} + +/* line 174, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-disabled a.x-datepicker-date:hover { + background-color: #eeeeee; +} + +/* line 179, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-footer, +.x-monthpicker-buttons { + padding: 4px 0; + border-width: 1px 0 0; + border-style: solid; + border-color: #d0d0d0; + background-image: none; + background-color: #e9e9e9; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dfdfdf), color-stop(49%, #d6d6d6), color-stop(51%, #d0d0d0), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); + background-image: -moz-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); + background-image: -o-linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); + background-image: linear-gradient(top, #dfdfdf, #d6d6d6 49%, #d0d0d0 51%, #d2d2d2); + text-align: center; +} +/* line 195, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-datepicker-footer .x-btn, +.x-monthpicker-buttons .x-btn { + margin: 0 2px 0 2px; +} + +/* line 201, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker { + width: 177px; + border-width: 1px; + border-style: solid; + border-color: #585858; + background-color: white; +} + +/* line 211, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-months { + border-width: 0 1px 0 0; + border-color: #585858; + border-style: solid; + width: 87px; +} +/* line 220, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-months .x-monthpicker-item { + width: 43px; +} + +/* line 225, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-years { + width: 88px; +} +/* line 228, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-years .x-monthpicker-item { + width: 44px; +} + +/* line 233, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-item { + margin: 5px 0 4px; + font: normal 11px tahoma, arial, verdana, sans-serif; + text-align: center; +} + +/* line 239, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-item-inner { + margin: 0 5px 0 5px; + color: #523a39; + border-width: 1px; + border-style: solid; + border-color: white; + line-height: 16px; + cursor: pointer; +} + +/* line 254, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +a.x-monthpicker-item-inner:hover { + background-color: transparent; +} + +/* line 258, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-selected { + background-color: #d8d8d8; + border-style: solid; + border-color: #b2aaa9; +} + +/* line 264, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav { + height: 27px; +} + +/* line 268, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-button-ct { + width: 44px; +} + +/* line 272, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-button { + height: 15px; + width: 15px; + cursor: pointer; + margin-top: 6px; + background-color: white; +} + +/* line 294, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-next { + background-image: url(images/tools/tool-sprites.gif); + background-position: 0 -120px; +} + +/* line 299, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-next-over { + background-position: -15px -120px; +} + +/* line 303, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-prev { + background-image: url(images/tools/tool-sprites.gif); + background-position: 0 -105px; +} + +/* line 308, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-yearnav-prev-over { + background-position: -15px -105px; +} + +/* line 313, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-small .x-monthpicker-item { + margin: 2px 0 2px; +} +/* line 317, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-small .x-monthpicker-item-inner { + margin: 0 5px 0 5px; +} +/* line 321, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-small .x-monthpicker-yearnav { + height: 22px; +} +/* line 325, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-monthpicker-small .x-monthpicker-yearnav-button { + margin-top: 3px; +} + +/* line 334, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-nlg .x-datepicker-header { + background-image: url(images/datepicker/datepicker-header-bg.gif); + background-repeat: repeat-x; + background-position: top left; +} +/* line 343, ../../../ext-theme-neutral/sass/src/picker/Date.scss */ +.x-nlg .x-datepicker-footer, +.x-nlg .x-monthpicker-buttons { + background-image: url(images/datepicker/datepicker-footer-bg.gif); + background-repeat: repeat-x; + background-position: top left; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-datepicker-header:after { + display: none; + content: "x-slicer:bg:url(images/datepicker/datepicker-header-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-datepicker-footer:after { + display: none; + content: "x-slicer:bg:url(images/datepicker/datepicker-footer-bg.gif)"; +} + +/**/ +/* */ +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Date.scss */ +.x-form-date-trigger { + background-image: url(images/form/date-trigger.gif); +} + +/* line 6, ../../../ext-theme-neutral/sass/src/form/field/Date.scss */ +.x-rtl.x-form-trigger-wrap .x-form-date-trigger { + background-image: url(images/form/date-trigger-rtl.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/File.scss */ +.x-form-file-wrap .x-form-text { + color: gray; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-color-picker { + width: 144px; + height: 90px; + background-color: white; + border-color: white; + border-width: 0; + border-style: solid; +} + +/* line 10, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-color-picker-item { + width: 18px; + height: 18px; + border-width: 1px; + border-color: white; + border-style: solid; + background-color: white; + cursor: pointer; + padding: 2px; +} +/* line 20, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-strict .x-ie7 .x-color-picker-item { + width: 12px; + height: 12px; +} + +/* line 28, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +a.x-color-picker-item:hover { + border-color: #8bb8f3; + background-color: #deecfd; +} + +/* line 33, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-color-picker-selected { + border-color: #8bb8f3; + background-color: #deecfd; +} + +/* line 38, ../../../ext-theme-neutral/sass/src/picker/Color.scss */ +.x-color-picker-item-inner { + line-height: 10px; + border-color: #aca899; + border-width: 1px; + border-style: solid; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-btn-text { + background: transparent no-repeat; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 7, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-bold, +.x-menu-item div.x-edit-bold { + background-position: 0 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 13, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-italic, +.x-menu-item div.x-edit-italic { + background-position: -16px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 19, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-underline, +.x-menu-item div.x-edit-underline { + background-position: -32px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 25, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-forecolor, +.x-menu-item div.x-edit-forecolor { + background-position: -160px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 31, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-backcolor, +.x-menu-item div.x-edit-backcolor { + background-position: -176px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 37, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-justifyleft, +.x-menu-item div.x-edit-justifyleft { + background-position: -112px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 43, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-justifycenter, +.x-menu-item div.x-edit-justifycenter { + background-position: -128px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 49, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-justifyright, +.x-menu-item div.x-edit-justifyright { + background-position: -144px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 55, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-insertorderedlist, +.x-menu-item div.x-edit-insertorderedlist { + background-position: -80px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 61, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-insertunorderedlist, +.x-menu-item div.x-edit-insertunorderedlist { + background-position: -96px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 67, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-increasefontsize, +.x-menu-item div.x-edit-increasefontsize { + background-position: -48px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 73, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-decreasefontsize, +.x-menu-item div.x-edit-decreasefontsize { + background-position: -64px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 79, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-sourceedit, +.x-menu-item div.x-edit-sourceedit { + background-position: -192px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 85, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-edit-createlink, +.x-menu-item div.x-edit-createlink { + background-position: -208px 0; + background-image: url(images/editor/tb-sprite.gif); +} + +/* line 90, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tip .x-tip-bd .x-tip-bd-inner { + padding: 5px; + padding-bottom: 1px; +} + +/* line 95, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-tb .x-font-select { + font-size: 11px; + font-family: inherit; +} + +/* line 100, ../../../ext-theme-neutral/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-wrap textarea { + font: normal 12px tahoma, arial, verdana, sans-serif; + background-color: white; + resize: none; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/form/field/Radio.scss */ +.x-form-radio { + width: 13px; + height: 13px; + background: url(images/form/radio.gif) no-repeat; +} + +/* line 7, ../../../ext-theme-neutral/sass/src/form/field/Radio.scss */ +.x-form-cb-checked .x-form-radio { + background-position: 0 -13px; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/form/field/Radio.scss */ +.x-form-radio-focus { + background-position: -13px 0; +} + +/* line 15, ../../../ext-theme-neutral/sass/src/form/field/Radio.scss */ +.x-form-cb-checked .x-form-radio-focus { + background-position: -13px -13px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-body { + background: white; + border-width: 1px; + border-style: solid; + border-color: #d0d0d0; +} + +/* line 8, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-empty { + padding: 10px; + color: gray; + font: normal 11px tahoma, arial, helvetica, sans-serif; +} + +/* line 14, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-view { + overflow: hidden; + position: relative; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-table { + table-layout: fixed; + border-collapse: separate; +} + +/* line 25, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row .x-grid-cell { + color: null; + font: normal 11px/13px tahoma, arial, verdana, sans-serif; + background-color: white; + border-color: white; + border-style: solid; + border-width: 1px 0; +} + +/* line 37, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-with-row-lines .x-grid-cell { + border-width: 1px 0; + border-top-color: #fafafa; + border-bottom-color: #ededed; +} + +/* line 43, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-alt .x-grid-td { + background-color: #fafafa; +} + +/* line 47, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-over .x-grid-td { + border-color: #dddddd; + background-color: #efefef; +} + +/* line 52, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-focused .x-grid-td { + border-top: 1px dotted #464646 !important; + border-bottom: 1px dotted #464646 !important; + background-color: #efefef; +} + +/* line 59, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-selected .x-grid-td { + border-style: dotted; + border-color: #bfb8b8; + background-color: #e0e0e0 !important; +} + +/* line 68, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-selected .x-grid-row-summary .x-grid-td { + border-bottom-color: #e0e0e0 !important; + border-top-width: 0!important; +} + +/* line 72, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-focused .x-grid-row-summary .x-grid-td { + border-bottom-color: #efefef !important; + border-top-width: 0!important; +} + +/* line 77, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell { + overflow: hidden; + border-color: white; + vertical-align: middle; +} + +/* line 84, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell-special, .x-grid-cell-checkcolumn, .x-action-col-cell { + vertical-align: top; +} + +/* line 88, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell-inner { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + line-height: 13px; + padding: 2px 6px 4px; + white-space: nowrap; +} + +/* line 102, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row .x-grid-cell-special { + padding: 0; + border-right: 1px solid #c6c6c6; + background-image: none; + background-color: #f6f6f6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f6f6f6), color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #f6f6f6, #e9e9e9); + background-image: -moz-linear-gradient(top, #f6f6f6, #e9e9e9); + background-image: -o-linear-gradient(top, #f6f6f6, #e9e9e9); + background-image: linear-gradient(top, #f6f6f6, #e9e9e9); +} + +/* line 116, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row .x-rtl.x-grid-cell-special { + border-right: 0; + border-left: 1px solid #c6c6c6; +} + +/* line 123, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-row-selected .x-grid-cell-special { + border-right: 1px solid #d4b7b7; + background-image: none; + background-color: #e0e0e0; + background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #e0e0e0), color-stop(100%, #d3d3d3)); + background-image: -webkit-linear-gradient(left, #e0e0e0, #d3d3d3); + background-image: -moz-linear-gradient(left, #e0e0e0, #d3d3d3); + background-image: -o-linear-gradient(left, #e0e0e0, #d3d3d3); + background-image: linear-gradient(left, #e0e0e0, #d3d3d3); +} + +/* line 136, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell-special .x-grid-cell-inner { + padding-left: 4px; + padding-right: 4px; + zoom: 1; +} + +/* line 146, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-nlg .x-grid-cell-special { + background-repeat: repeat-y; + background-position: top right; +} +/* line 153, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-nlg .x-grid-row .x-grid-cell-special, +.x-nlg .x-grid-row-over .x-grid-cell-special { + background-image: url(images/grid/cell-special-bg.gif); +} +/* line 161, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-nlg .x-grid-row-focused .x-grid-cell-special, +.x-nlg .x-grid-row-selected .x-grid-cell-special { + background-image: url(images/grid/cell-special-selected-bg.gif); +} + +/* line 169, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-dirty-cell { + background-image: url(images/grid/dirty.gif); + background-position: 0 0; + background-repeat: no-repeat; +} + +/* line 176, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-rtl.x-grid-dirty-cell { + background-image: url(images/grid/dirty-rtl.gif); + background-position: right 0; +} + +/* line 182, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-cell-selected { + background-color: #B8CFEE !important; +} + +/* line 187, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-with-col-lines .x-grid-cell { + padding-right: 0; + border-right: 1px solid #c6c6c6; +} + +/* line 194, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-rtl.x-grid-with-col-lines .x-grid-cell { + border-right: 0 none; + border-left: 1px solid #c6c6c6; +} + +/* line 200, ../../../ext-theme-neutral/sass/src/panel/Table.scss */ +.x-grid-resize-marker { + position: absolute; + z-index: 5; + top: 0; + width: 1px; + background-color: #0f0f0f; +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/header/DropZone.scss */ +.col-move-top, +.col-move-bottom { + width: 9px; + height: 9px; + position: absolute; + top: 0; + line-height: 0; + font-size: 0; + overflow: hidden; + z-index: 20000; + background: no-repeat center top transparent; +} + +/* line 15, ../../../ext-theme-neutral/sass/src/grid/header/DropZone.scss */ +.col-move-top { + background-image: url(images/grid/col-move-top.gif); +} + +/* line 19, ../../../ext-theme-neutral/sass/src/grid/header/DropZone.scss */ +.col-move-bottom { + background-image: url(images/grid/col-move-bottom.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-grid-header-ct { + cursor: default; + zoom: 1; + padding: 0; + border: 1px solid #d0d0d0; + border-bottom-color: #c5c5c5; + background-image: none; + background-color: #c5c5c5; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f9f9f9), color-stop(100%, #e3e4e6)); + background-image: -webkit-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: -moz-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: -o-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: linear-gradient(top, #f9f9f9, #e3e4e6); +} + +/* line 16, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-accordion-item .x-grid-header-ct { + border-width: 0 0 1px !important; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-accordion-item .x-grid-header-ct-hidden { + border: 0 !important; +} + +/* line 30, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-grid-body { + border-top-color: #c5c5c5; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-hmenu-sort-asc .x-menu-item-icon { + background-image: url(images/grid/hmenu-asc.gif); +} + +/* line 38, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-hmenu-sort-desc .x-menu-item-icon { + background-image: url(images/grid/hmenu-desc.gif); +} + +/* line 42, ../../../ext-theme-neutral/sass/src/grid/header/Container.scss */ +.x-cols-icon .x-menu-item-icon { + background-image: url(images/grid/columns.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header { + padding: 0; + position: absolute; + overflow: hidden; + border: 0 none; + border-right: 1px solid #c5c5c5; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.3); + color: black; + font: normal 11px tahoma, arial, verdana, sans-serif; + background-image: none; + background-color: #c5c5c5; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f9f9f9), color-stop(100%, #e3e4e6)); + background-image: -webkit-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: -moz-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: -o-linear-gradient(top, #f9f9f9, #e3e4e6); + background-image: linear-gradient(top, #f9f9f9, #e3e4e6); +} + +/* line 25, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-rtl.x-column-header { + border-right: 0 none; + border-left: 1px solid #c5c5c5; +} + +/* line 31, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-group-header { + padding: 0; + border-left-width: 0; +} + +/* line 35, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-group-sub-header { + background: transparent; + border-top: 1px solid #c5c5c5; + border-left-width: 0; +} +/* line 41, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-group-sub-header .x-column-header-inner { + padding: 4px 6px 5px 6px; +} + +/* line 46, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-inner { + zoom: 1; + white-space: nowrap; + padding: 5px 6px 5px 6px; + position: relative; +} +/* line 51, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-inner .x-column-header-text { + white-space: nowrap; +} + +/* line 58, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-ie .x-rtl.x-column-header-text { + zoom: 1; + display: inline-block; +} + +/* line 72, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-over, +.x-column-header-sort-ASC, +.x-column-header-sort-DESC { + background-image: none; + background-color: #f0f0f0; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #f0f0f0)); + background-image: -webkit-linear-gradient(top, #ffffff, #f0f0f0); + background-image: -moz-linear-gradient(top, #ffffff, #f0f0f0); + background-image: -o-linear-gradient(top, #ffffff, #f0f0f0); + background-image: linear-gradient(top, #ffffff, #f0f0f0); +} + +/* line 80, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-nlg .x-grid-header-ct, +.x-nlg .x-column-header { + background: repeat-x 0 top; + background-image: url(images/grid/column-header-bg.gif); +} +/* line 87, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-nlg .x-column-header-over, +.x-nlg .x-column-header-sort-ASC, +.x-nlg .x-column-header-sort-DESC { + background: #ebf3fd repeat-x 0 top; + background-image: url(images/grid/column-header-over-bg.gif); +} + +/* line 94, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-trigger { + display: none; + height: 100%; + width: 14px; + background-repeat: no-repeat; + position: absolute; + right: 0; + top: 0; + z-index: 2; + cursor: pointer; +} + +/* line 107, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-rtl.x-column-header-trigger { + left: 0; + right: auto; +} + +/* line 114, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-over .x-column-header-trigger, .x-column-header-open .x-column-header-trigger { + display: block; +} + +/* line 119, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-align-right { + text-align: right; +} +/* line 122, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-align-right .x-column-header-text { + margin-right: 10px; +} + +/* line 128, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-rtl.x-column-header-align-right { + text-align: left; +} + +/* line 131, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-align-right .x-rtl.x-column-header-text { + margin-right: 0; + margin-left: 10px; +} + +/* line 135, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-rtl.x-column-header-align-left { + text-align: right; +} + +/* line 140, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-align-center { + text-align: center; +} + +/* line 143, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-align-left { + text-align: left; +} + +/* line 150, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-sort-ASC .x-column-header-text, +.x-column-header-sort-DESC .x-column-header-text { + padding-right: 12px; + background-repeat: no-repeat; + background-position: right center; +} + +/* line 160, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-sort-ASC .x-rtl.x-column-header-text, +.x-column-header-sort-DESC .x-rtl.x-column-header-text { + padding-right: 0; + padding-left: 12px; + background-position: 0 center; +} + +/* line 168, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-sort-ASC .x-column-header-text { + background-image: url(images/grid/sort_asc.gif); +} + +/* line 171, ../../../ext-theme-neutral/sass/src/grid/column/Column.scss */ +.x-column-header-sort-DESC .x-column-header-text { + background-image: url(images/grid/sort_desc.gif); +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-column-header:after { + display: none; + content: "x-slicer:bg:url(images/grid/column-header-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-column-header-over:after { + display: none; + content: "x-slicer:bg:url(images/grid/column-header-over-bg.gif)"; +} + +/**/ +/* */ +/* line 1, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-grid-drop-indicator { + position: absolute; + height: 1px; + line-height: 0px; + background-color: #77BC71; + overflow: visible; + pointer-events: none; +} +/* line 9, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-grid-drop-indicator .x-grid-drop-indicator-left { + position: absolute; + top: -8px; + left: -12px; + background-image: url(images/grid/dd-insert-arrow-right.png); + height: 16px; + width: 16px; +} +/* line 18, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-grid-drop-indicator .x-grid-drop-indicator-right { + position: absolute; + top: -8px; + right: -11px; + background-image: url(images/grid/dd-insert-arrow-left.png); + height: 16px; + width: 16px; +} + +/* line 29, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-ie6 .x-grid-drop-indicator-left { + background-image: url(images/grid/dd-insert-arrow-right.gif); +} +/* line 33, ../../../ext-theme-neutral/sass/src/view/DropZone.scss */ +.x-ie6 .x-grid-drop-indicator-right { + background-image: url(images/grid/dd-insert-arrow-left.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/column/Action.scss */ +.x-action-col-cell .x-grid-cell-inner { + padding: 1px 2px 0 4px !important; +} + +/* line 7, ../../../ext-theme-neutral/sass/src/grid/column/Action.scss */ +.x-action-col-cell .x-item-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/grid/column/Action.scss */ +.x-grid-with-row-lines .x-action-col-cell .x-grid-cell-inner { + padding-top: 1px; +} + +/* line 15, ../../../ext-theme-neutral/sass/src/grid/column/Action.scss */ +.x-action-col-icon { + height: 16px; + width: 16px; + cursor: pointer; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/column/CheckColumn.scss */ +.x-grid-cell-checkcolumn .x-grid-cell-inner { + padding-top: 3px !important; + padding-bottom: 0!important; +} + +/* line 7, ../../../ext-theme-neutral/sass/src/grid/column/CheckColumn.scss */ +.x-grid-checkcolumn { + width: 13px; + height: 13px; + background: url(images/form/checkbox.gif) 0 0 no-repeat; +} +/* line 12, ../../../ext-theme-neutral/sass/src/grid/column/CheckColumn.scss */ +.x-item-disabled .x-grid-checkcolumn { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/grid/column/CheckColumn.scss */ +.x-grid-checkcolumn-checked { + background-position: 0 -13px; +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group, +.x-grid-group-body, +.x-grid-group-hd { + zoom: 1; +} + +/* line 7, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-hd { + padding: 10px 4px 4px 4px; + background: white; + border-width: 0 0 2px 0; + border-style: solid; + border-color: #bcb1b0; + cursor: pointer; + white-space: nowrap; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-hd-not-collapsible { + cursor: default; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-hd-collapsible .x-grid-group-title { + background-color: transparent; + background-repeat: no-repeat; + background-position: left center; + background-image: url(images/grid/group-collapse.gif); + padding: 0 0 0 14px; +} + +/* line 36, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-rtl.x-grid-view .x-grid-group-hd-collapsible .x-grid-group-title { + background-position: right center; + padding: 0 14px 0 0; +} + +/* line 42, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-title { + color: #616161; + font: bold 11px tahoma, arial, verdana, sans-serif; +} + +/* line 48, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-hd-collapsed .x-grid-group-title { + background-image: url(images/grid/group-expand.gif); +} + +/* line 53, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-group-collapsed .x-grid-group-title { + background-image: url(images/grid/group-expand.gif); +} + +/* line 57, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-grid-row-body-hidden, .x-grid-group-collapsed { + display: none; +} + +/* line 61, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-group-by-icon { + background-image: url(images/grid/group-by.gif); +} + +/* line 65, ../../../ext-theme-neutral/sass/src/grid/feature/Grouping.scss */ +.x-show-groups-icon { + background-image: url(images/grid/group-by.gif); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-grid-rowbody { + font: normal 11px/13px tahoma, arial, verdana, sans-serif; + padding: 0; +} +/* line 6, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-grid-rowbody p { + margin: 5px 5px 10px 5px; +} + +/* line 12, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-ie6 .x-grid-rowbody { + width: 100%; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-grid-row-body-hidden { + display: none; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/grid/feature/RowBody.scss */ +.x-grid-row-selected .x-grid-rowbody { + background-color: #e0e0e0 !important; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/feature/RowWrap.scss */ +.x-grid-rowwrap { + border-width: 1px 0; + border-color: #ededed; + border-style: solid; + border-top-color: #fafafa; + overflow: hidden; +} + +/* line 11, ../../../ext-theme-neutral/sass/src/grid/feature/RowWrap.scss */ +.x-grid-rowwrap .x-grid-cell, +.x-grid-rowwrap .x-grid-cell-inner { + border-width: 0; + background-color: transparent; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/grid/feature/RowWrap.scss */ +.x-grid-row-focused .x-grid-rowwrap .x-grid-cell { + border-top-width: 0 !important; + border-bottom-width: 0 !important; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/feature/Summary.scss */ +.x-summary-bottom { + border-bottom-color: #c5c5c5; +} + +/* line 5, ../../../ext-theme-neutral/sass/src/grid/feature/Summary.scss */ +.x-docked-summary { + border-width: 1px; + border-color: #d0d0d0; + border-style: solid; +} + +/* line 14, ../../../ext-theme-neutral/sass/src/grid/feature/Summary.scss */ +.x-grid-row-summary .x-grid-cell, +.x-grid-row-summary .x-grid-rowwrap, +.x-grid-row-summary .x-grid-cell-rowbody { + border-color: #ededed; + background-color: transparent !important; + border-top-width: 0; + font: normal 11px/13px tahoma, arial, verdana, sans-serif; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-grid-locked .x-grid-inner-locked { + border-width: 0 1px 0 0; + border-style: solid; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-grid-locked .x-rtl.x-grid-inner-locked { + border-width: 0 0 0 1px; +} + +/* line 17, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-grid-inner-locked .x-column-header-last, +.x-grid-inner-locked .x-grid-cell-last { + border-right-width: 0!important; +} +/* line 21, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-grid-inner-locked .x-rtl.x-column-header-last { + border-left-width: 0!important; +} + +/* line 29, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-rtl.x-grid-inner-locked .x-grid-row .x-column-header-last { + border-left: 0 none; +} +/* line 32, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-rtl.x-grid-inner-locked .x-grid-row .x-grid-cell-last { + border-left: 0 none; +} + +/* line 39, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-hmenu-lock .x-menu-item-icon { + background-image: url(images/grid/hmenu-lock.gif); +} + +/* line 43, ../../../ext-theme-neutral/sass/src/grid/locking/Lockable.scss */ +.x-hmenu-unlock .x-menu-item-icon { + background-image: url(images/grid/hmenu-unlock.gif); +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-cb-wrap { + text-align: center; +} +/* line 7, ../../../ext-theme-neutral/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-text { + font: normal 11px/15px tahoma, arial, verdana, sans-serif; +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-grid-cell-editor .x-form-text { + padding: 0 4px; +} +/* line 6, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-grid-cell-editor .x-form-cb-wrap { + padding-top: 3px; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-ie .x-grid-cell-editor .x-form-text { + padding-left: 5px; +} + +/* line 20, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-opera .x-grid-cell-editor .x-form-text { + padding-left: 5px; +} + +/* line 27, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-grid-editor-on-text-node .x-form-text { + padding-left: 1px; + padding-right: 1px; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-ie .x-grid-editor-on-text-node .x-form-text { + padding-left: 2px; + padding-right: 2px; +} + +/* line 40, ../../../ext-theme-neutral/sass/src/grid/plugin/CellEditing.scss */ +.x-opera .x-grid-editor-on-text-node .x-form-text { + padding-left: 2px; + padding-right: 2px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor { + position: absolute !important; + z-index: 1; + zoom: 1; + overflow: visible !important; +} +/* line 7, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-form-display-field { + font: normal 11px/15px tahoma, arial, verdana, sans-serif; +} +/* line 11, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-panel-body { + border-top: 1px solid #d0d0d0 !important; + border-bottom: 1px solid #d0d0d0 !important; + padding: 4px 0 4px 0; + background-color: #ebe6e6; +} +/* line 17, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-form-cb { + margin-top: 0; +} + +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-right-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + border-bottom-left-radius: 5px; + padding: 4px 4px 4px 4px; + border-width: 0 1px 1px 1px; + border-style: solid; + background-color: #ebe6e6; +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-mc { + background-color: #ebe6e6; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-grid-row-editor-buttons { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-grid-row-editor-buttons { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#dh-0-0-5-5-0-1-1-1-4-4-4-4"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tl { + background-position: 0 -10px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tr { + background-position: right -15px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-bl { + background-position: 0 -20px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-br { + background-position: right -25px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-bc { + background-position: 0 -5px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tr, +.x-grid-row-editor-buttons-br, +.x-grid-row-editor-buttons-mr { + padding-right: 5px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tl, +.x-grid-row-editor-buttons-bl, +.x-grid-row-editor-buttons-ml { + padding-left: 5px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tc { + height: 0; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-bc { + height: 5px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-tl, +.x-grid-row-editor-buttons-bl, +.x-grid-row-editor-buttons-tr, +.x-grid-row-editor-buttons-br, +.x-grid-row-editor-buttons-tc, +.x-grid-row-editor-buttons-bc, +.x-grid-row-editor-buttons-ml, +.x-grid-row-editor-buttons-mr { + zoom: 1; + background-image: url(images/grid-row-editor-buttons/null-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-ml, +.x-grid-row-editor-buttons-mr { + zoom: 1; + background-image: url(images/grid-row-editor-buttons/null-sides.gif); + background-repeat: repeat-y; +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-grid-row-editor-buttons-mc { + padding: 4px 0px 0px 0px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-grid-row-editor-buttons-tl, +.x-strict .x-ie7 .x-grid-row-editor-buttons-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-grid-row-editor-buttons:after { + display: none; + content: "x-slicer:corners:url(images/grid-row-editor-buttons/null-corners.gif), sides:url(images/grid-row-editor-buttons/null-sides.gif)"; +} + +/**/ +/* */ +/* line 33, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor-buttons { + border-color: #d0d0d0; +} + +/* line 37, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-row-editor-update-button { + margin-right: 2px; +} + +/* line 40, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-row-editor-cancel-button { + margin-left: 2px; +} + +/* line 45, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-rtl.x-row-editor-update-button { + margin-left: 2px; + margin-right: auto; +} + +/* line 49, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-rtl.x-row-editor-cancel-button { + margin-right: 2px; + margin-left: auto; +} + +/* line 56, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-quirks .x-ie .x-rtl.x-grid-row-editor .x-form-item-body { + position: static; +} + +/* line 63, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor-errors ul { + margin-left: 5px; +} +/* line 66, ../../../ext-theme-neutral/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor-errors li { + list-style: disc; + margin-left: 15px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/grid/plugin/RowExpander.scss */ +.x-grid-row-expander { + background-image: url(images/grid/group-collapse.gif); + width: 9px; + height: 9px; + float: left; + line-height: 0; + margin: 3px 5px 1px 3px; +} + +/* line 20, ../../../ext-theme-neutral/sass/src/grid/plugin/RowExpander.scss */ +.x-grid-row-collapsed .x-grid-row-expander { + background-image: url(images/grid/group-expand.gif); +} + +/* line 3, ../../../ext-theme-neutral/sass/src/grid/property/Grid.scss */ +.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner, +.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner { + padding-left: 12px; + background-image: url(images/grid/property-cell-bg.gif); + background-repeat: no-repeat; + background-position: -16px 2px; +} + +/* line 15, ../../../ext-theme-neutral/sass/src/grid/property/Grid.scss */ +.x-grid-with-row-lines.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner, +.x-grid-with-row-lines.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner { + background-position: -16px 1px; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/grid/property/Grid.scss */ +.x-quirks .x-ie .x-grid-row .x-grid-property-name .x-grid-cell-inner { + background-position: -16px 2px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-layout-ct { + background-color: white; + padding: 0; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-panel-header-text-container { + color: black; + font-weight: normal; + font-family: tahoma, arial, verdana, sans-serif; + text-transform: none; +} + +/* line 13, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item { + margin: 0; +} +/* line 16, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item .x-accordion-hd { + background: #e5e5e5; + border-top-color: #ececec; + padding: 4px 5px 5px 5px; +} +/* line 22, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item .x-accordion-hd-sibling-expanded { + border-top-color: #d0d0d0; +} +/* line 26, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item .x-accordion-hd-last-collapsed { + border-bottom-color: #e5e5e5; +} +/* line 30, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-item .x-accordion-body { + border-width: 0; +} + +/* line 37, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-collapse-top, +.x-accordion-hd .x-tool-collapse-bottom { + background-position: 0 -255px; +} +/* line 42, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-expand-top, +.x-accordion-hd .x-tool-expand-bottom { + background-position: 0 -240px; +} +/* line 50, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-over .x-tool-collapse-top, +.x-accordion-hd .x-tool-over .x-tool-collapse-bottom { + background-position: -15px -255px; +} +/* line 55, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-over .x-tool-expand-top, +.x-accordion-hd .x-tool-over .x-tool-expand-bottom { + background-position: -15px -240px; +} +/* line 61, ../../../ext-theme-neutral/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd .x-tool-img { + background-color: #e5e5e5; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-collapse-el { + cursor: pointer; +} + +/* line 6, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-left, +.x-layout-split-right { + top: 50%; + margin-top: -18px; + width: 5px; + height: 35px; +} + +/* line 14, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-top, +.x-layout-split-bottom { + left: 50%; + width: 35px; + height: 5px; + margin-left: -18px; +} + +/* line 21, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-left { + background-image: url(images/util/splitter/mini-left.gif); +} + +/* line 25, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-right { + background-image: url(images/util/splitter/mini-right.gif); +} + +/* line 31, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-rtl.x-layout-split-left { + background-image: url(images/util/splitter/mini-right.gif); +} +/* line 35, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-rtl.x-layout-split-right { + background-image: url(images/util/splitter/mini-left.gif); +} + +/* line 41, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-top { + background-image: url(images/util/splitter/mini-top.gif); +} + +/* line 45, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-layout-split-bottom { + background-image: url(images/util/splitter/mini-bottom.gif); +} + +/* line 50, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-layout-split-left { + background-image: url(images/util/splitter/mini-right.gif); +} +/* line 54, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-layout-split-right { + background-image: url(images/util/splitter/mini-left.gif); +} +/* line 60, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-rtl.x-layout-split-left { + background-image: url(images/util/splitter/mini-left.gif); +} +/* line 64, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-rtl.x-layout-split-right { + background-image: url(images/util/splitter/mini-right.gif); +} +/* line 70, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-layout-split-top { + background-image: url(images/util/splitter/mini-bottom.gif); +} +/* line 74, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-collapsed .x-layout-split-bottom { + background-image: url(images/util/splitter/mini-top.gif); +} + +/* line 79, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-active { + background-color: #b4b4b4; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + opacity: 0.8; +} +/* line 83, ../../../ext-theme-neutral/sass/src/resizer/Splitter.scss */ +.x-splitter-active .x-collapse-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/layout/container/Border.scss */ +.x-border-layout-ct { + background-color: #e0e0e0; +} + +/* line 14, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-body { + background: #f0f0f0; + padding: 2px; +} + +/* line 19, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-icon-separator { + left: 24px; + border-left: solid 1px #e0e0e0; + background-color: white; + width: 2px; +} + +/* line 27, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-rtl.x-menu .x-menu-icon-separator { + left: auto; + right: 24px; +} + +/* line 33, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item { + padding: 1px; + cursor: pointer; +} + +/* line 46, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-indent { + margin-left: 30px; +} + +/* line 51, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-rtl.x-menu-item-indent { + margin-left: 0; + margin-right: 30px; +} + +/* line 57, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-active { + background-image: none; + background-color: #e6e6e6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #dcdcdc)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dcdcdc); + background-image: -moz-linear-gradient(top, #eeeeee, #dcdcdc); + background-image: -o-linear-gradient(top, #eeeeee, #dcdcdc); + background-image: linear-gradient(top, #eeeeee, #dcdcdc); + border-color: #9d9d9d; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + border-width: 1px; + border-style: solid; + padding: 0; +} +/* line 75, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-nlg .x-menu-item-active { + background: #e6e6e6 repeat-x left top; + background-image: url(images/menu/menu-item-active-bg.gif); +} + +/* line 82, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-link { + line-height: 22px; + padding: 0 0 0 30px; + display: inline-block; +} + +/* line 91, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-rtl.x-menu-item-link { + padding: 0 30px 0 0; +} + +/* line 98, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-right-check-item-text { + padding-right: 22px; +} + +/* line 102, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-rtl.x-right-check-item-text { + padding-left: 22px; + padding-right: 0; +} + +/* line 108, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-icon { + width: 16px; + height: 16px; + top: 4px; + left: 3px; + background-position: center center; +} + +/* line 116, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-glyph { + font-size: 16px; + line-height: 16px; + color: #222222; + opacity: 0.5; +} +/* line 132, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-ie8m .x-menu-item-glyph { + color: #898989; +} + +/* line 142, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-gecko .x-menu-item-active .x-menu-item-icon, +.x-quirks .x-menu-item-active .x-menu-item-icon, +.x-ie9m .x-menu-item-active .x-menu-item-icon { + top: 3px; + left: 2px; +} + +/* line 149, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-rtl.x-menu-item-icon { + left: auto; + right: 3px; +} + +/* line 159, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-gecko .x-menu-item-active .x-rtl.x-menu-item-icon, +.x-quirks .x-menu-item-active .x-rtl.x-menu-item-icon, +.x-ie9m .x-menu-item-active .x-rtl.x-menu-item-icon { + left: auto; + right: 2px; +} + +/* line 168, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-icon-right { + width: 16px; + height: 16px; + top: 3px; + right: 3px; + background-position: center center; +} + +/* line 177, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-rtl.x-menu-item-icon-right { + right: auto; + left: 3px; +} + +/* line 183, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-text { + font-size: 11px; + color: #222222; + cursor: pointer; + margin-right: 16px; +} + +/* line 193, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +a.x-rtl .x-menu-item-text { + margin-right: 0; + margin-left: 16px; +} + +/* line 201, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-checked .x-menu-item-icon, .x-menu-item-checked .x-menu-item-icon-right { + background-image: url(images/menu/checked.gif); +} +/* line 204, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-checked .x-menu-group-icon { + background-image: url(images/menu/group-checked.gif); +} + +/* line 210, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-unchecked .x-menu-item-icon, .x-menu-item-unchecked .x-menu-item-icon-right { + background-image: url(images/menu/unchecked.gif); +} +/* line 213, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-unchecked .x-menu-group-icon { + background-image: none; +} + +/* line 218, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-separator { + height: 2px; + border-top: solid 1px #e0e0e0; + background-color: white; + margin: 2px 0; + padding: 0; +} + +/* line 226, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-arrow { + width: 12px; + height: 9px; + top: 7px; + right: 0; + background-image: url(images/menu/menu-parent.gif); +} + +/* line 239, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-gecko .x-menu-item-active .x-menu-item-arrow, +.x-quirks .x-menu-item-active .x-menu-item-arrow, +.x-ie9m .x-menu-item-active .x-menu-item-arrow { + top: 6px; + right: -1px; +} + +/* line 246, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-rtl.x-menu-item-arrow { + left: 0; + right: auto; + background-image: url(images/menu/menu-parent-left.gif); +} + +/* line 257, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-gecko .x-menu-item-active .x-rtl.x-menu-item-arrow, +.x-ie9m .x-menu-item-active .x-rtl.x-menu-item-arrow, +.x-quirks .x-menu-item-active .x-rtl.x-menu-item-arrow { + right: auto; + left: -1px; +} + +/* line 264, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} + +/* line 270, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-strict .x-ie7m .x-menu-icon-separator { + width: 1px; +} +/* line 274, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-strict .x-ie7m .x-menu-item-separator { + height: 1px; +} + +/* line 281, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-ie .x-menu-item-disabled .x-menu-item-icon { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} +/* line 285, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-ie .x-menu-item-disabled .x-menu-item-text { + background-color: transparent; +} + +/* line 294, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-date-item { + border-color: #99BBE8; +} + +/* line 300, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-item .x-form-item-label { + font-size: 11px; + color: #222222; +} + +/* line 306, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-scroll-top { + height: 8px; + background-image: url(images/menu/scroll-top.gif); +} + +/* line 310, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-scroll-bottom { + height: 8px; + background-image: url(images/menu/scroll-bottom.gif); +} + +/* line 316, ../../../ext-theme-neutral/sass/src/menu/Menu.scss */ +.x-menu-scroll-top, .x-menu-scroll-bottom { + background-color: #f0f0f0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-menu-item-link:after { + display: none; + content: "x-slicer:bg:url(images/menu/menu-item-active-bg.gif)"; +} + +/**/ +/* */ +/* line 1, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool { + cursor: pointer; +} + +/* line 5, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-img { + overflow: hidden; + width: 15px; + height: 15px; + background-image: url(images/tools/tool-sprites.gif); + margin: 0; +} + +/* line 30, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-placeholder { + visibility: hidden; +} + +/* line 34, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-close { + background-position: 0 0; +} + +/* line 38, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-minimize { + background-position: 0 -15px; +} + +/* line 42, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-maximize { + background-position: 0 -30px; +} + +/* line 46, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-restore { + background-position: 0 -45px; +} + +/* line 50, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-toggle { + background-position: 0 -60px; +} +/* line 53, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-panel-collapsed .x-tool-toggle { + background-position: 0 -75px; +} + +/* line 58, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-gear { + background-position: 0 -90px; +} + +/* line 62, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-prev { + background-position: 0 -105px; +} + +/* line 66, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-next { + background-position: 0 -120px; +} + +/* line 70, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-pin { + background-position: 0 -135px; +} + +/* line 74, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-unpin { + background-position: 0 -150px; +} + +/* line 78, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-right { + background-position: 0 -165px; +} + +/* line 82, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-left { + background-position: 0 -180px; +} + +/* line 86, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-down { + background-position: 0 -195px; +} + +/* line 90, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-up { + background-position: 0 -210px; +} + +/* line 94, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-refresh { + background-position: 0 -225px; +} + +/* line 98, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-plus { + background-position: 0 -240px; +} + +/* line 102, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-minus { + background-position: 0 -255px; +} + +/* line 106, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-search { + background-position: 0 -270px; +} + +/* line 110, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-save { + background-position: 0 -285px; +} + +/* line 114, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-help { + background-position: 0 -300px; +} + +/* line 118, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-print { + background-position: 0 -315px; +} + +/* line 122, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand { + background-position: 0 -330px; +} + +/* line 126, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-collapse { + background-position: 0 -345px; +} + +/* line 131, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand-bottom, +.x-tool-collapse-bottom { + background-position: 0 -195px; +} + +/* line 136, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand-top, +.x-tool-collapse-top { + background-position: 0 -210px; +} + +/* line 141, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand-left, +.x-tool-collapse-left { + background-position: 0 -180px; +} + +/* line 146, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-expand-right, +.x-tool-collapse-right { + background-position: 0 -165px; +} + +/* line 153, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-rtl.x-tool-expand-left, .x-rtl.x-tool-collapse-left { + background-position: 0 -165px; +} +/* line 158, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-rtl.x-tool-expand-right, .x-rtl.x-tool-collapse-right { + background-position: 0 -180px; +} + +/* line 166, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-close { + background-position: -15px 0; +} +/* line 170, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-minimize { + background-position: -15px -15px; +} +/* line 174, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-maximize { + background-position: -15px -30px; +} +/* line 178, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-restore { + background-position: -15px -45px; +} +/* line 182, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-toggle { + background-position: -15px -60px; +} +/* line 187, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-panel-collapsed .x-tool-over .x-tool-toggle { + background-position: -15px -75px; +} +/* line 192, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-gear { + background-position: -15px -90px; +} +/* line 196, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-prev { + background-position: -15px -105px; +} +/* line 200, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-next { + background-position: -15px -120px; +} +/* line 204, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-pin { + background-position: -15px -135px; +} +/* line 208, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-unpin { + background-position: -15px -150px; +} +/* line 212, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-right { + background-position: -15px -165px; +} +/* line 216, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-left { + background-position: -15px -180px; +} +/* line 220, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-down { + background-position: -15px -195px; +} +/* line 224, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-up { + background-position: -15px -210px; +} +/* line 228, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-refresh { + background-position: -15px -225px; +} +/* line 232, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-plus { + background-position: -15px -240px; +} +/* line 236, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-minus { + background-position: -15px -255px; +} +/* line 240, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-search { + background-position: -15px -270px; +} +/* line 244, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-save { + background-position: -15px -285px; +} +/* line 248, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-help { + background-position: -15px -300px; +} +/* line 252, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-print { + background-position: -15px -315px; +} +/* line 256, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand { + background-position: -15px -330px; +} +/* line 260, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-collapse { + background-position: -15px -345px; +} +/* line 265, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand-bottom, +.x-tool-over .x-tool-collapse-bottom { + background-position: -15px -195px; +} +/* line 270, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand-top, +.x-tool-over .x-tool-collapse-top { + background-position: -15px -210px; +} +/* line 275, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand-left, +.x-tool-over .x-tool-collapse-left { + background-position: -15px -180px; +} +/* line 280, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-tool-expand-right, +.x-tool-over .x-tool-collapse-right { + background-position: -15px -165px; +} +/* line 287, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-rtl.x-tool-expand-left, .x-tool-over .x-rtl.x-tool-collapse-left { + background-position: -15px -165px; +} +/* line 292, ../../../ext-theme-neutral/sass/src/panel/Tool.scss */ +.x-tool-over .x-rtl.x-tool-expand-right, .x-tool-over .x-rtl.x-tool-collapse-right { + background-position: -15px -180px; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle { + position: absolute; + z-index: 100; + font-size: 1px; + line-height: 6px; + overflow: hidden; + zoom: 1; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + background-color: #fff; +} + +/* line 18, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-collapsed .x-resizable-handle { + display: none; +} + +/* line 23, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-north { + cursor: n-resize; +} +/* line 26, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-south { + cursor: s-resize; +} +/* line 29, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-east { + cursor: e-resize; +} +/* line 32, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-west { + cursor: w-resize; +} +/* line 35, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southeast { + cursor: se-resize; +} +/* line 38, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northwest { + cursor: nw-resize; +} +/* line 41, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northeast { + cursor: ne-resize; +} +/* line 44, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southwest { + cursor: sw-resize; +} + +/* line 49, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-east { + width: 6px; + height: 100%; + right: 0; + top: 0; +} + +/* line 56, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-south { + width: 100%; + height: 6px; + left: 0; + bottom: 0; +} + +/* line 63, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-west { + width: 6px; + height: 100%; + left: 0; + top: 0; +} + +/* line 70, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-north { + width: 100%; + height: 6px; + left: 0; + top: 0; +} + +/* line 77, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-southeast { + width: 6px; + height: 6px; + right: 0; + bottom: 0; + z-index: 101; +} + +/* line 85, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-northwest { + width: 6px; + height: 6px; + left: 0; + top: 0; + z-index: 101; +} + +/* line 93, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-northeast { + width: 6px; + height: 6px; + right: 0; + top: 0; + z-index: 101; +} + +/* line 101, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-handle-southwest { + width: 6px; + height: 6px; + left: 0; + bottom: 0; + z-index: 101; +} + +/*IE rounding error*/ +/* line 111, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-ie .x-resizable-handle-east { + margin-right: -1px; + /*IE rounding error*/ +} +/* line 115, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-ie .x-resizable-handle-south { + margin-bottom: -1px; +} + +/* line 121, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-pinned .x-resizable-handle { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +/* line 126, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-window .x-window-handle { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; +} + +/* line 130, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-window-collapsed .x-window-handle { + display: none; +} + +/* line 135, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-proxy { + border: 1px dashed #3b5a82; + position: absolute; + overflow: hidden; + z-index: 50000; +} + +/* line 147, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, +.x-resizable-pinned .x-resizable-handle-east, +.x-resizable-pinned .x-resizable-handle-west { + background-image: url(images/sizer/e-handle.gif); +} +/* line 153, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, +.x-resizable-pinned .x-resizable-handle-south, +.x-resizable-pinned .x-resizable-handle-north { + background-image: url(images/sizer/s-handle.gif); +} +/* line 158, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southeast, +.x-resizable-pinned .x-resizable-handle-southeast { + background-position: top left; + background-image: url(images/sizer/se-handle.gif); +} +/* line 163, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northwest, +.x-resizable-pinned .x-resizable-handle-northwest { + background-position: bottom right; + background-image: url(images/sizer/nw-handle.gif); +} +/* line 168, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northeast, +.x-resizable-pinned .x-resizable-handle-northeast { + background-position: bottom left; + background-image: url(images/sizer/ne-handle.gif); +} +/* line 173, ../../../ext-theme-neutral/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southwest, +.x-resizable-pinned .x-resizable-handle-southwest { + background-position: top right; + background-image: url(images/sizer/sw-handle.gif); +} + +/* Horizontal styles */ +/* line 2, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz { + padding-left: 7px; + background: no-repeat 0 -15px; +} +/* line 6, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-end { + padding-right: 7px; + background: no-repeat right -30px; +} + +/* line 12, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-inner { + height: 15px; +} + +/* line 20, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-ie6 .x-form-item .x-slider-horz, +.x-ie7 .x-form-item .x-slider-horz, +.x-quirks .x-ie .x-form-item .x-slider-horz { + margin-top: 4px; +} + +/* line 26, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-thumb { + width: 14px; + height: 15px; + margin-left: -7px; + background-image: url(images/slider/slider-thumb.png); +} + +/* line 33, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-thumb-over { + background-position: -14px -15px; +} + +/* line 37, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz .x-slider-thumb-drag { + background-position: -28px -30px; +} + +/* line 42, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-rtl.x-slider-horz { + padding-left: 0; + padding-right: 7px; + background-position: right -30px; +} +/* line 47, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-rtl.x-slider-horz .x-slider-end { + padding-right: 0; + padding-left: 7px; + background-position: left -15px; +} +/* line 53, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-rtl.x-slider-horz .x-slider-thumb { + margin-right: -7px; +} + +/* Vertical styles */ +/* line 60, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert { + padding-top: 7px; + background: no-repeat -30px 0; +} + +/* line 65, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-end { + padding-bottom: 7px; + background: no-repeat -15px bottom; + width: 15px; +} + +/* line 71, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-inner { + width: 15px; +} + +/* line 75, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-thumb { + width: 15px; + height: 14px; + margin-bottom: -7px; + background-image: url(images/slider/slider-v-thumb.png); +} + +/* line 82, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-thumb-over { + background-position: -15px -14px; +} + +/* line 86, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert .x-slider-thumb-drag { + background-position: -30px -28px; +} + +/* line 92, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-horz, +.x-slider-horz .x-slider-end, +.x-slider-horz .x-slider-inner { + background-image: url(images/slider/slider-bg.png); +} + +/* line 98, ../../../ext-theme-neutral/sass/src/slider/Multi.scss */ +.x-slider-vert, +.x-slider-vert .x-slider-end, +.x-slider-vert .x-slider-inner { + background-image: url(images/slider/slider-v-bg.png); +} + +/* line 1, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-grid-row .x-grid-cell-row-checker { + vertical-align: middle; +} + +/* line 5, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-column-header-checkbox .x-column-header-inner { + padding: 0; + line-height: 0; + font-size: 0; +} + +/* line 12, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-grid-row-checker, +.x-column-header-checkbox .x-column-header-text { + height: 13px; + width: 13px; + line-height: 0; + font-size: 0; + background-image: url(images/form/checkbox.gif); + background-repeat: no-repeat; + background-color: transparent; +} + +/* line 24, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-column-header-checkbox .x-column-header-text { + display: block; + margin-left: 5px; +} + +/* line 30, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-column-header-checkbox .x-rtl.x-column-header-text { + margin-left: auto; + margin-right: 4px; +} + +/* IE6, IE7, and all IE Quirks mode need line-height to be the same as checkbox height or the header/row height will be too tall */ +/* line 40, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-quirks .x-ie .x-grid-row-checker, +.x-quirks .x-ie .x-column-header-checkbox .x-column-header-text, .x-ie7m .x-grid-row-checker, .x-ie7m .x-column-header-checkbox .x-column-header-text { + line-height: 13px; +} + +/* line 46, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-grid-cell-row-checker .x-grid-cell-inner { + padding: 3px 5px; + line-height: 14px; +} + +/* line 53, ../../../ext-theme-neutral/sass/src/selection/CheckboxModel.scss */ +.x-grid-hd-checker-on .x-column-header-text, +.x-grid-row-selected .x-grid-row-checker, +.x-grid-row-checked .x-grid-row-checker { + background-position: 0 -13px; +} + +/** + * Creates a visual theme for a Tab Panel + * @member Ext.tab.Panel +*/ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 3px 9px 3px 9px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: linear-gradient(top, #dcdcdc, #eaeaea); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-mc { + background-image: url(images/tab/tab-default-top-fbg.gif); + background-position: 0 top; + background-color: #eaeaea; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-tab-default-top { + background-image: url(images/tab/tab-default-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tab-default-top { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tab-default-top { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tr, +.x-tab-default-top-br, +.x-tab-default-top-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tl, +.x-tab-default-top-bl, +.x-tab-default-top-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-tl, +.x-tab-default-top-bl, +.x-tab-default-top-tr, +.x-tab-default-top-br, +.x-tab-default-top-tc, +.x-tab-default-top-bc, +.x-tab-default-top-ml, +.x-tab-default-top-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-ml, +.x-tab-default-top-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-top-mc { + padding: 0px 6px 3px 6px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tab-default-top-tl, +.x-strict .x-ie7 .x-tab-default-top-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-top:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: 3px 9px 3px 9px; + border-width: 0 1px 1px 1px; + border-style: solid; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: linear-gradient(bottom, #dcdcdc, #eaeaea); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-mc { + background-image: url(images/tab/tab-default-bottom-fbg.gif); + background-position: 0 top; + background-color: #eaeaea; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-tab-default-bottom { + background-image: url(images/tab/tab-default-bottom-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tab-default-bottom { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tab-default-bottom { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-0-0-4-4-0-1-1-1-3-9-3-9"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tr, +.x-tab-default-bottom-br, +.x-tab-default-bottom-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tl, +.x-tab-default-bottom-bl, +.x-tab-default-bottom-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tc { + height: 0; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-bc { + height: 4px; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-tl, +.x-tab-default-bottom-bl, +.x-tab-default-bottom-tr, +.x-tab-default-bottom-br, +.x-tab-default-bottom-tc, +.x-tab-default-bottom-bc, +.x-tab-default-bottom-ml, +.x-tab-default-bottom-mr { + zoom: 1; + background-image: url(images/tab/tab-default-bottom-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-ml, +.x-tab-default-bottom-mr { + zoom: 1; + background-image: url(images/tab/tab-default-bottom-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-bottom-mc { + padding: 3px 6px 0px 6px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tab-default-bottom-tl, +.x-strict .x-ie7 .x-tab-default-bottom-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-bottom:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-bottom-fbg.gif), bg:url(images/tab/tab-default-bottom-bg.gif), corners:url(images/tab/tab-default-bottom-corners.gif), sides:url(images/tab/tab-default-bottom-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 3px 9px 3px 9px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: linear-gradient(top, #dcdcdc, #eaeaea); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-mc { + background-image: url(images/tab/tab-default-top-fbg.gif); + background-position: 0 top; + background-color: #eaeaea; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-tab-default-left { + background-image: url(images/tab/tab-default-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tab-default-left { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tab-default-left { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tr, +.x-tab-default-left-br, +.x-tab-default-left-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tl, +.x-tab-default-left-bl, +.x-tab-default-left-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-tl, +.x-tab-default-left-bl, +.x-tab-default-left-tr, +.x-tab-default-left-br, +.x-tab-default-left-tc, +.x-tab-default-left-bc, +.x-tab-default-left-ml, +.x-tab-default-left-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-ml, +.x-tab-default-left-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-left-mc { + padding: 0px 6px 3px 6px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tab-default-left-tl, +.x-strict .x-ie7 .x-tab-default-left-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-left:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"; +} + +/**/ +/* */ +/* line 143, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + padding: 3px 9px 3px 9px; + border-width: 1px 1px 0 1px; + border-style: solid; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: linear-gradient(top, #dcdcdc, #eaeaea); +} + +/* line 195, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-mc { + background-image: url(images/tab/tab-default-top-fbg.gif); + background-position: 0 top; + background-color: #eaeaea; +} + +/* line 218, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nlg .x-tab-default-right { + background-image: url(images/tab/tab-default-top-bg.gif); + background-position: 0 top; +} + +/* line 241, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-nbr .x-tab-default-right { + padding: 0 !important; + border-width: 0 !important; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; + background-color: transparent; +} + +/* line 260, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +body.x-nbr .x-tab-default-right { + /* Pass along Div/Table, Horz/Vert, border-radius and border-width: */ + background-image: url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9"); +} + +/* line 315, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tl { + background-position: 0 -8px; +} + +/* line 319, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tr { + background-position: right -12px; +} + +/* line 323, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-bl { + background-position: 0 -16px; +} + +/* line 327, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-br { + background-position: right -20px; +} + +/* line 331, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-ml { + background-position: 0 top; +} + +/* line 335, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-mr { + background-position: right top; +} + +/* line 339, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tc { + background-position: 0 0; +} + +/* line 343, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-bc { + background-position: 0 -4px; +} + +/* line 350, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tr, +.x-tab-default-right-br, +.x-tab-default-right-mr { + padding-right: 4px; +} + +/* line 356, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tl, +.x-tab-default-right-bl, +.x-tab-default-right-ml { + padding-left: 4px; +} + +/* line 360, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tc { + height: 4px; +} + +/* line 363, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-bc { + height: 0; +} + +/* line 374, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-tl, +.x-tab-default-right-bl, +.x-tab-default-right-tr, +.x-tab-default-right-br, +.x-tab-default-right-tc, +.x-tab-default-right-bc, +.x-tab-default-right-ml, +.x-tab-default-right-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-corners.gif); +} + +/* line 418, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-ml, +.x-tab-default-right-mr { + zoom: 1; + background-image: url(images/tab/tab-default-top-sides.gif); +} + +/* line 430, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-tab-default-right-mc { + padding: 0px 6px 3px 6px; +} + +/* line 439, ../../../ext-theme-base/sass/etc/mixins/frame.scss */ +.x-strict .x-ie7 .x-tab-default-right-tl, +.x-strict .x-ie7 .x-tab-default-right-bl { + position: relative; + right: 0; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-right:after { + display: none; + content: "x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"; +} + +/**/ +/* */ +/* line 140, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default { + border-color: #b5b5b5; + margin: 0 0 0 2px; + cursor: pointer; +} +/* line 145, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-inner { + font-size: 11px; + font-weight: bold; + font-family: tahoma, arial, verdana, sans-serif; + color: #6f6f6f; + line-height: 13px; +} +/* line 155, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-icon-el { + width: 16px; + height: 16px; + line-height: 16px; + background-position: center center; +} +/* line 162, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-glyph { + font-size: 16px; + color: #6f6f6f; + opacity: 0.5; +} +/* line 176, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-ie8m .x-tab-default .x-tab-glyph { + color: #acacac; +} +/* line 184, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default { + padding-left: 0; +} +/* line 187, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-button { + padding-left: 9px; +} +/* line 191, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-icon-el { + left: 9px; +} + +/* line 199, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-icon .x-tab-inner { + width: 16px; +} + +/* line 206, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-default { + margin: 0 2px 0 0; +} + +/* line 212, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-default { + margin: 0 2px 0 0; +} + +/* line 217, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-left { + margin: 0 2px 0 0; +} + +/* line 222, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-default-left { + margin: 0 0 0 2px; +} + +/* line 229, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top, +.x-tab-default-left, +.x-tab-default-right { + border-bottom: 1px solid #d0d0d0; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(top, #dcdcdc, #eaeaea); + background-image: linear-gradient(top, #dcdcdc, #eaeaea); + -webkit-box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; + -moz-box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; + box-shadow: white 0 1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; +} +/* line 236, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-top, .x-nlg +.x-tab-default-left, .x-nlg +.x-tab-default-right { + background-image: url(images/tab/tab-default-top-bg.gif); +} + +/* line 250, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom { + border-top: 1px solid #d0d0d0; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dcdcdc), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: -moz-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: -o-linear-gradient(bottom, #dcdcdc, #eaeaea); + background-image: linear-gradient(bottom, #dcdcdc, #eaeaea); + -webkit-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; + -moz-box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; + box-shadow: white 0 -1px 0px 0 inset, white -1px 0 0px 0 inset, white 1px 0 0px 0 inset; +} +/* line 257, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-bottom { + background-image: url(images/tab/tab-default-bottom-bg.gif); +} + +/* line 271, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-left { + -webkit-transform: rotate(270deg); + -webkit-transform-origin: 100% 0; + -moz-transform: rotate(270deg); + -moz-transform-origin: 100% 0; + -o-transform: rotate(270deg); + -o-transform-origin: 100% 0; + transform: rotate(270deg); + transform-origin: 100% 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-tab-default-left { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +/* line 282, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-default-left { + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-rtl.x-tab-default-left { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} + +/* line 287, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-right { + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-tab-default-right { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} + +/* line 298, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-default-right { + -webkit-transform: rotate(270deg); + -webkit-transform-origin: 100% 0; + -moz-transform: rotate(270deg); + -moz-transform-origin: 100% 0; + -o-transform: rotate(270deg); + -o-transform-origin: 100% 0; + transform: rotate(270deg); + transform-origin: 100% 0; +} +/* line 36, ../../../ext-theme-base/sass/etc/mixins/rotate-element.scss */ +.x-ie9m .x-rtl.x-tab-default-right { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +/* line 304, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-icon-text-left .x-tab-inner { + padding-left: 20px; +} + +/* line 311, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-default-icon-text-left .x-tab-inner { + padding-left: 0; + padding-right: 20px; +} + +/* line 318, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-over { + background-color: #f2eeee; +} +/* line 342, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-over .x-tab-glyph { + color: #6f6f6f; +} +/* line 349, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-ie8m .x-tab-default-over .x-tab-glyph { + color: #b0aeae; +} + +/* line 358, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-over, +.x-tab-default-left-over, +.x-tab-default-right-over { + background-image: none; + background-color: #f2eeee; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #f0f0f0)); + background-image: -webkit-linear-gradient(top, #ffffff, #f0f0f0); + background-image: -moz-linear-gradient(top, #ffffff, #f0f0f0); + background-image: -o-linear-gradient(top, #ffffff, #f0f0f0); + background-image: linear-gradient(top, #ffffff, #f0f0f0); +} +/* line 362, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-top-over, .x-nlg +.x-tab-default-left-over, .x-nlg +.x-tab-default-right-over { + background-image: url(images/tab/tab-default-top-over-bg.gif); +} + +/* line 367, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-over { + background-image: none; + background-color: #f2eeee; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ffffff), color-stop(100%, #f0f0f0)); + background-image: -webkit-linear-gradient(bottom, #ffffff, #f0f0f0); + background-image: -moz-linear-gradient(bottom, #ffffff, #f0f0f0); + background-image: -o-linear-gradient(bottom, #ffffff, #f0f0f0); + background-image: linear-gradient(bottom, #ffffff, #f0f0f0); +} +/* line 371, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-bottom-over { + background-image: url(images/tab/tab-default-bottom-over-bg.gif); +} + +/* line 378, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-active { + background-color: #eaeaea; +} +/* line 384, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-active .x-tab-inner { + color: #333333; +} +/* line 399, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-active .x-tab-glyph { + color: #333333; +} +/* line 406, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-ie8m .x-tab-default-active .x-tab-glyph { + color: #8e8e8e; +} + +/* line 414, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-active, +.x-tab-default-left-active, +.x-tab-default-right-active { + border-bottom-color: #eaeaea; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(top, #ffffff, #eaeaea); + background-image: -moz-linear-gradient(top, #ffffff, #eaeaea); + background-image: -o-linear-gradient(top, #ffffff, #eaeaea); + background-image: linear-gradient(top, #ffffff, #eaeaea); +} +/* line 420, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-top-active, .x-nlg +.x-tab-default-left-active, .x-nlg +.x-tab-default-right-active { + background-image: url(images/tab/tab-default-top-active-bg.gif); +} + +/* line 427, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-active { + border-top-color: #eaeaea; + background-image: none; + background-color: #eaeaea; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ffffff), color-stop(100%, #eaeaea)); + background-image: -webkit-linear-gradient(bottom, #ffffff, #eaeaea); + background-image: -moz-linear-gradient(bottom, #ffffff, #eaeaea); + background-image: -o-linear-gradient(bottom, #ffffff, #eaeaea); + background-image: linear-gradient(bottom, #ffffff, #eaeaea); +} +/* line 433, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-bottom-active { + background-image: url(images/tab/tab-default-bottom-active-bg.gif); +} + +/* line 440, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-disabled { + border-color: #dadada; + cursor: default; +} +/* line 453, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-disabled .x-tab-inner { + color: #b7b7b7; +} +/* line 472, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-disabled .x-tab-icon-el { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; +} +/* line 477, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-disabled .x-tab-glyph { + color: #b7b7b7; + opacity: 0.3; + filter: none; +} +/* line 491, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-ie8m .x-tab-default-disabled .x-tab-glyph { + color: #dddddd; +} + +/* line 500, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-disabled, +.x-tab-default-left-disabled, +.x-tab-default-right-disabled { + background-image: none; + background-color: #eeeeee; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eeeeee), color-stop(100%, #f4f4f4)); + background-image: -webkit-linear-gradient(top, #eeeeee, #f4f4f4); + background-image: -moz-linear-gradient(top, #eeeeee, #f4f4f4); + background-image: -o-linear-gradient(top, #eeeeee, #f4f4f4); + background-image: linear-gradient(top, #eeeeee, #f4f4f4); +} +/* line 504, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-top-disabled, .x-nlg +.x-tab-default-left-disabled, .x-nlg +.x-tab-default-right-disabled { + background-image: url(images/tab/tab-default-top-disabled-bg.gif); +} + +/* line 509, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-disabled { + background-image: none; + background-color: #eeeeee; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #eeeeee), color-stop(100%, #f4f4f4)); + background-image: -webkit-linear-gradient(bottom, #eeeeee, #f4f4f4); + background-image: -moz-linear-gradient(bottom, #eeeeee, #f4f4f4); + background-image: -o-linear-gradient(bottom, #eeeeee, #f4f4f4); + background-image: linear-gradient(bottom, #eeeeee, #f4f4f4); +} +/* line 513, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-default-bottom-disabled { + background-image: url(images/tab/tab-default-bottom-disabled-bg.gif); +} + +/* line 529, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-over .x-frame-tl, +.x-tab-default-top-over .x-frame-bl, +.x-tab-default-top-over .x-frame-tr, +.x-tab-default-top-over .x-frame-br, +.x-tab-default-top-over .x-frame-tc, +.x-tab-default-top-over .x-frame-bc, +.x-tab-default-left-over .x-frame-tl, +.x-tab-default-left-over .x-frame-bl, +.x-tab-default-left-over .x-frame-tr, +.x-tab-default-left-over .x-frame-br, +.x-tab-default-left-over .x-frame-tc, +.x-tab-default-left-over .x-frame-bc, +.x-tab-default-right-over .x-frame-tl, +.x-tab-default-right-over .x-frame-bl, +.x-tab-default-right-over .x-frame-tr, +.x-tab-default-right-over .x-frame-br, +.x-tab-default-right-over .x-frame-tc, +.x-tab-default-right-over .x-frame-bc { + background-image: url(images/tab/tab-default-top-over-corners.gif); +} +/* line 533, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-over .x-frame-ml, +.x-tab-default-top-over .x-frame-mr, +.x-tab-default-left-over .x-frame-ml, +.x-tab-default-left-over .x-frame-mr, +.x-tab-default-right-over .x-frame-ml, +.x-tab-default-right-over .x-frame-mr { + background-image: url(images/tab/tab-default-top-over-sides.gif); +} +/* line 536, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-over .x-frame-mc, +.x-tab-default-left-over .x-frame-mc, +.x-tab-default-right-over .x-frame-mc { + background-color: #f2eeee; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-top-over-fbg.gif); +} + +/* line 551, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-over .x-frame-tl, +.x-tab-default-bottom-over .x-frame-bl, +.x-tab-default-bottom-over .x-frame-tr, +.x-tab-default-bottom-over .x-frame-br, +.x-tab-default-bottom-over .x-frame-tc, +.x-tab-default-bottom-over .x-frame-bc { + background-image: url(images/tab/tab-default-bottom-over-corners.gif); +} +/* line 555, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-over .x-frame-ml, +.x-tab-default-bottom-over .x-frame-mr { + background-image: url(images/tab/tab-default-bottom-over-sides.gif); +} +/* line 558, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-over .x-frame-mc { + background-color: #f2eeee; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-bottom-over-fbg.gif); +} + +/* line 575, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-active .x-frame-tl, +.x-tab-default-top-active .x-frame-bl, +.x-tab-default-top-active .x-frame-tr, +.x-tab-default-top-active .x-frame-br, +.x-tab-default-top-active .x-frame-tc, +.x-tab-default-top-active .x-frame-bc, +.x-tab-default-left-active .x-frame-tl, +.x-tab-default-left-active .x-frame-bl, +.x-tab-default-left-active .x-frame-tr, +.x-tab-default-left-active .x-frame-br, +.x-tab-default-left-active .x-frame-tc, +.x-tab-default-left-active .x-frame-bc, +.x-tab-default-right-active .x-frame-tl, +.x-tab-default-right-active .x-frame-bl, +.x-tab-default-right-active .x-frame-tr, +.x-tab-default-right-active .x-frame-br, +.x-tab-default-right-active .x-frame-tc, +.x-tab-default-right-active .x-frame-bc { + background-image: url(images/tab/tab-default-top-active-corners.gif); +} +/* line 579, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-active .x-frame-ml, +.x-tab-default-top-active .x-frame-mr, +.x-tab-default-left-active .x-frame-ml, +.x-tab-default-left-active .x-frame-mr, +.x-tab-default-right-active .x-frame-ml, +.x-tab-default-right-active .x-frame-mr { + background-image: url(images/tab/tab-default-top-active-sides.gif); +} +/* line 582, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-active .x-frame-mc, +.x-tab-default-left-active .x-frame-mc, +.x-tab-default-right-active .x-frame-mc { + background-color: #eaeaea; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-top-active-fbg.gif); +} + +/* line 597, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-active .x-frame-tl, +.x-tab-default-bottom-active .x-frame-bl, +.x-tab-default-bottom-active .x-frame-tr, +.x-tab-default-bottom-active .x-frame-br, +.x-tab-default-bottom-active .x-frame-tc, +.x-tab-default-bottom-active .x-frame-bc { + background-image: url(images/tab/tab-default-bottom-active-corners.gif); +} +/* line 601, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-active .x-frame-ml, +.x-tab-default-bottom-active .x-frame-mr { + background-image: url(images/tab/tab-default-bottom-active-sides.gif); +} +/* line 604, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-active .x-frame-mc { + background-color: #eaeaea; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-bottom-active-fbg.gif); +} + +/* line 621, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-disabled .x-frame-tl, +.x-tab-default-top-disabled .x-frame-bl, +.x-tab-default-top-disabled .x-frame-tr, +.x-tab-default-top-disabled .x-frame-br, +.x-tab-default-top-disabled .x-frame-tc, +.x-tab-default-top-disabled .x-frame-bc, +.x-tab-default-left-disabled .x-frame-tl, +.x-tab-default-left-disabled .x-frame-bl, +.x-tab-default-left-disabled .x-frame-tr, +.x-tab-default-left-disabled .x-frame-br, +.x-tab-default-left-disabled .x-frame-tc, +.x-tab-default-left-disabled .x-frame-bc, +.x-tab-default-right-disabled .x-frame-tl, +.x-tab-default-right-disabled .x-frame-bl, +.x-tab-default-right-disabled .x-frame-tr, +.x-tab-default-right-disabled .x-frame-br, +.x-tab-default-right-disabled .x-frame-tc, +.x-tab-default-right-disabled .x-frame-bc { + background-image: url(images/tab/tab-default-top-disabled-corners.gif); +} +/* line 625, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-disabled .x-frame-ml, +.x-tab-default-top-disabled .x-frame-mr, +.x-tab-default-left-disabled .x-frame-ml, +.x-tab-default-left-disabled .x-frame-mr, +.x-tab-default-right-disabled .x-frame-ml, +.x-tab-default-right-disabled .x-frame-mr { + background-image: url(images/tab/tab-default-top-disabled-sides.gif); +} +/* line 628, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-top-disabled .x-frame-mc, +.x-tab-default-left-disabled .x-frame-mc, +.x-tab-default-right-disabled .x-frame-mc { + background-color: #eeeeee; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-top-disabled-fbg.gif); +} + +/* line 643, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-disabled .x-frame-tl, +.x-tab-default-bottom-disabled .x-frame-bl, +.x-tab-default-bottom-disabled .x-frame-tr, +.x-tab-default-bottom-disabled .x-frame-br, +.x-tab-default-bottom-disabled .x-frame-tc, +.x-tab-default-bottom-disabled .x-frame-bc { + background-image: url(images/tab/tab-default-bottom-disabled-corners.gif); +} +/* line 647, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-disabled .x-frame-ml, +.x-tab-default-bottom-disabled .x-frame-mr { + background-image: url(images/tab/tab-default-bottom-disabled-sides.gif); +} +/* line 650, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-bottom-disabled .x-frame-mc { + background-color: #eeeeee; + background-repeat: repeat-x; + background-image: url(images/tab/tab-default-bottom-disabled-fbg.gif); +} + +/* line 670, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nbr .x-tab-default-top, +.x-nbr .x-tab-default-left, +.x-nbr .x-tab-default-right { + border-bottom-width: 1px !important; +} +/* line 673, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nbr .x-tab-default-bottom { + border-top-width: 1px !important; +} + +/* line 681, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default { + border-style: solid; + border-color: #d0d0d0; +} + +/* line 687, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-top { + padding: 1px 0 0; + border-width: 1px 1px 0; +} + +/* line 694, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom { + padding: 0 0 1px 0; + border-width: 0 1px 1px 1px; +} + +/* line 701, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-left { + padding: 0 0 0 1px; + border-width: 1px 0 1px 1px; +} + +/* line 708, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right { + padding: 0 1px 0 0; + border-width: 1px 1px 1px 0; +} + +/* line 719, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-horizontal { + height: 23px; +} +/* line 724, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie6 .x-tab-bar-body-default-horizontal, .x-strict .x-ie7 .x-tab-bar-body-default-horizontal { + height: 21px; +} + +/* line 730, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-vertical { + width: 23px; +} +/* line 735, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie6 .x-tab-bar-body-default-vertical, .x-strict .x-ie7 .x-tab-bar-body-default-vertical { + width: 21px; +} + +/* line 741, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-top { + padding-bottom: 2px; +} + +/* line 745, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-bottom { + padding-top: 2px; +} + +/* line 749, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-left { + padding-right: 2px; +} + +/* line 753, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-body-default-right { + padding-left: 2px; +} + +/* line 757, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default { + border-style: solid; + border-color: #d0d0d0; + background-color: #eaeaea; +} + +/* line 766, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie6 .x-tab-bar-strip-default-horizontal, .x-strict .x-ie7 .x-tab-bar-strip-default-horizontal { + height: 2px; +} + +/* line 775, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-strict .x-ie6 .x-tab-bar-strip-default-vertical, .x-strict .x-ie7 .x-tab-bar-strip-default-vertical { + width: 2px; +} + +/* line 781, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default-top { + border-width: 1px 0 0 0; + height: 3px; +} +/* line 784, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain .x-tab-bar-strip-default-top { + border-width: 1px 1px 0; +} + +/* line 789, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default-bottom { + border-width: 0 0 1px 0; + height: 3px; +} +/* line 792, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain .x-tab-bar-strip-default-bottom { + border-width: 0 1px 1px 1px; +} + +/* line 797, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default-left { + border-width: 0 0 0 1px; + width: 3px; +} +/* line 800, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain .x-tab-bar-strip-default-left { + border-width: 1px 0 1px 1px; +} + +/* line 805, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-strip-default-right { + border-width: 0 1px 0 0; + width: 3px; +} +/* line 808, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain .x-tab-bar-strip-default-right { + border-width: 1px 1px 1px 0; +} + +/* line 813, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default { + background-color: #d2d2d2; +} + +/* line 818, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-top { + background-image: none; + background-color: #d2d2d2; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dfdede), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(top, #dfdede, #d2d2d2); + background-image: -moz-linear-gradient(top, #dfdede, #d2d2d2); + background-image: -o-linear-gradient(top, #dfdede, #d2d2d2); + background-image: linear-gradient(top, #dfdede, #d2d2d2); +} +/* line 822, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-bar-default-top { + background-image: url(images/tab-bar/tab-bar-default-top-bg.gif); +} + +/* line 828, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom { + background-image: none; + background-color: #d2d2d2; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dfdede), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(bottom, #dfdede, #d2d2d2); + background-image: -moz-linear-gradient(bottom, #dfdede, #d2d2d2); + background-image: -o-linear-gradient(bottom, #dfdede, #d2d2d2); + background-image: linear-gradient(bottom, #dfdede, #d2d2d2); +} +/* line 832, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-bar-default-bottom { + background-image: url(images/tab-bar/tab-bar-default-bottom-bg.gif); +} + +/* line 838, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-left { + background-image: none; + background-color: #d2d2d2; + background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #dfdede), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(left, #dfdede, #d2d2d2); + background-image: -moz-linear-gradient(left, #dfdede, #d2d2d2); + background-image: -o-linear-gradient(left, #dfdede, #d2d2d2); + background-image: linear-gradient(left, #dfdede, #d2d2d2); +} +/* line 842, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-bar-default-left { + background-image: url(images/tab-bar/tab-bar-default-left-bg.gif); +} + +/* line 848, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right { + background-image: none; + background-color: #d2d2d2; + background-image: -webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #dfdede), color-stop(100%, #d2d2d2)); + background-image: -webkit-linear-gradient(right, #dfdede, #d2d2d2); + background-image: -moz-linear-gradient(right, #dfdede, #d2d2d2); + background-image: -o-linear-gradient(right, #dfdede, #d2d2d2); + background-image: linear-gradient(right, #dfdede, #d2d2d2); +} +/* line 852, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-nlg .x-tab-bar-default-right { + background-image: url(images/tab-bar/tab-bar-default-right-bg.gif); +} + +/* line 860, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-close-btn { + width: 11px; + height: 11px; + background-image: url(images/tab/tab-default-close.gif); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); + opacity: 0.6; +} +/* line 870, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default a.x-tab-close-btn:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +/* line 880, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default .x-tab-close-btn { + top: 2px; + right: 2px; +} + +/* line 886, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-default .x-tab-close-btn { + right: auto; + left: 2px; +} + +/* line 925, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar .x-tab-default-disabled a.x-tab-close-btn { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; +} + +/* line 941, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-default-closable .x-tab-wrap { + padding-right: 14px; +} + +/* line 946, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-default-closable .x-tab-wrap { + padding-right: 0px; + padding-left: 14px; +} + +/* line 987, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-box-scroller { + cursor: pointer; +} +/* line 1028, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-tabbar-scroll-left, +.x-tab-bar-default .x-tabbar-scroll-right { + height: 20px; + width: 18px; +} +/* line 1034, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-tabbar-scroll-top, +.x-tab-bar-default .x-tabbar-scroll-bottom { + width: 20px; + height: 18px; +} + +/* line 1042, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom .x-box-scroller { + margin-top: 1px; +} +/* line 1046, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right .x-box-scroller { + margin-left: 1px; +} +/* line 1051, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-bar-default-right .x-box-scroller { + margin-left: 0; +} +/* line 1054, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-bar-default-left .x-box-scroller { + margin-right: 1px; +} + +/* line 1123, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-top .x-tabbar-scroll-left { + background-image: url(images/tab-bar/default-scroll-left-top.gif); +} +/* line 1126, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-top .x-tabbar-scroll-right { + background-image: url(images/tab-bar/default-scroll-right-top.gif); +} + +/* line 1133, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-bar-default-top .x-tabbar-scroll-left { + background-image: url(images/tab-bar/default-scroll-right-top.gif); +} +/* line 1136, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-bar-default-top .x-tabbar-scroll-right { + background-image: url(images/tab-bar/default-scroll-left-top.gif); +} + +/* line 1143, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom .x-tabbar-scroll-left { + background-image: url(images/tab-bar/default-scroll-left-bottom.gif); +} +/* line 1146, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-bottom .x-tabbar-scroll-right { + background-image: url(images/tab-bar/default-scroll-right-bottom.gif); +} + +/* line 1153, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-bar-default-bottom .x-tabbar-scroll-left { + background-image: url(images/tab-bar/default-scroll-right-bottom.gif); +} +/* line 1156, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-rtl.x-tab-bar-default-bottom .x-tabbar-scroll-right { + background-image: url(images/tab-bar/default-scroll-left-bottom.gif); +} + +/* line 1163, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-left .x-tabbar-scroll-top { + background-image: url(images/tab-bar/default-scroll-top-left.gif); +} +/* line 1166, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-left .x-tabbar-scroll-bottom { + background-image: url(images/tab-bar/default-scroll-bottom-left.gif); +} + +/* line 1172, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right .x-tabbar-scroll-top { + background-image: url(images/tab-bar/default-scroll-top-right.gif); +} +/* line 1175, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default-right .x-tabbar-scroll-bottom { + background-image: url(images/tab-bar/default-scroll-bottom-right.gif); +} + +/* line 1184, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-tabbar-scroll-left-hover, +.x-tab-bar-default .x-tabbar-scroll-right-hover { + background-position: -18px 0; +} +/* line 1189, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-tabbar-scroll-top-hover, +.x-tab-bar-default .x-tabbar-scroll-bottom-hover { + background-position: 0 -18px; +} +/* line 1194, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-default .x-box-scroller-disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + cursor: default; +} + +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-top-over:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-top-over-bg.gif), corners:url(images/tab/tab-default-top-over-corners.gif), sides:url(images/tab/tab-default-top-over-sides.gif), frame-bg:url(images/tab/tab-default-top-over-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-bottom-over:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-bottom-over-bg.gif), corners:url(images/tab/tab-default-bottom-over-corners.gif), sides:url(images/tab/tab-default-bottom-over-sides.gif), frame-bg:url(images/tab/tab-default-bottom-over-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-top-active:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-top-active-bg.gif), corners:url(images/tab/tab-default-top-active-corners.gif), sides:url(images/tab/tab-default-top-active-sides.gif), frame-bg:url(images/tab/tab-default-top-active-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-bottom-active:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-bottom-active-bg.gif), corners:url(images/tab/tab-default-bottom-active-corners.gif), sides:url(images/tab/tab-default-bottom-active-sides.gif), frame-bg:url(images/tab/tab-default-bottom-active-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-top-disabled:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-top-disabled-bg.gif), corners:url(images/tab/tab-default-top-disabled-corners.gif), sides:url(images/tab/tab-default-top-disabled-sides.gif), frame-bg:url(images/tab/tab-default-top-disabled-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-default-bottom-disabled:after { + display: none; + content: "x-slicer:bg:url(images/tab/tab-default-bottom-disabled-bg.gif), corners:url(images/tab/tab-default-bottom-disabled-corners.gif), sides:url(images/tab/tab-default-bottom-disabled-sides.gif), frame-bg:url(images/tab/tab-default-bottom-disabled-fbg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-bar-default-top:after { + display: none; + content: "x-slicer:bg:url(images/tab-bar/tab-bar-default-top-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-bar-default-bottom:after { + display: none; + content: "x-slicer:bg:url(images/tab-bar/tab-bar-default-bottom-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-bar-default-left:after { + display: none; + content: "x-slicer:bg:url(images/tab-bar/tab-bar-default-left-bg.gif)"; +} + +/**/ +/* */ +/**/ +/* line 78, ../../../ext-theme-base/sass/etc/mixins/slicer.scss */ +.x-tab-bar-default-right:after { + display: none; + content: "x-slicer:bg:url(images/tab-bar/tab-bar-default-right-bg.gif)"; +} + +/**/ +/* */ +/* line 1220, ../../../ext-theme-neutral/sass/src/tab/Panel.scss */ +.x-tab-bar-plain { + border-width: 0; + padding: 0; +} + +/* line 3, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-autowidth-table table.x-grid-table { + table-layout: auto; + width: auto !important; +} + +/* line 8, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-expander { + cursor: pointer; + position: relative; + top: -2px; +} + +/* line 16, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-tree-expander { + background: url(images/tree/arrows.gif) no-repeat 0 0; +} +/* line 20, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-tree-expander-over .x-tree-expander { + background-position: -32px 0; +} +/* line 24, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander { + background-position: -16px 0; +} +/* line 28, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-expander { + background-position: -48px 0; +} +/* line 33, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-rtl.x-tree-expander { + background: url(images/tree/arrows-rtl.gif) no-repeat -48px 0; +} +/* line 37, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-tree-expander-over .x-rtl.x-tree-expander { + background-position: -16px 0; +} +/* line 41, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-grid-tree-node-expanded .x-rtl.x-tree-expander { + background-position: -32px 0; +} +/* line 45, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-rtl.x-tree-expander { + background-position: 0 0; +} + +/* line 53, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow { + background-image: url(images/tree/elbow.gif); +} +/* line 57, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow-end { + background-image: url(images/tree/elbow-end.gif); +} +/* line 61, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow-plus { + background-image: url(images/tree/elbow-plus.gif); +} +/* line 65, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow-end-plus { + background-image: url(images/tree/elbow-end-plus.gif); +} +/* line 69, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-plus { + background-image: url(images/tree/elbow-minus.gif); +} +/* line 73, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus { + background-image: url(images/tree/elbow-end-minus.gif); +} +/* line 77, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-tree-elbow-line { + background-image: url(images/tree/elbow-line.gif); +} +/* line 82, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-rtl.x-tree-elbow { + background-image: url(images/tree/elbow-rtl.gif); +} +/* line 86, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-rtl.x-tree-elbow-end { + background-image: url(images/tree/elbow-end-rtl.gif); +} +/* line 90, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-rtl.x-tree-elbow-plus { + background-image: url(images/tree/elbow-plus-rtl.gif); +} +/* line 94, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-rtl.x-tree-elbow-end-plus { + background-image: url(images/tree/elbow-end-plus-rtl.gif); +} +/* line 98, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-grid-tree-node-expanded .x-rtl.x-tree-elbow-plus { + background-image: url(images/tree/elbow-minus-rtl.gif); +} +/* line 102, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-grid-tree-node-expanded .x-rtl.x-tree-elbow-end-plus { + background-image: url(images/tree/elbow-end-minus-rtl.gif); +} +/* line 106, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-lines .x-rtl.x-tree-elbow-line { + background-image: url(images/tree/elbow-line-rtl.gif); +} + +/* line 113, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-no-lines .x-tree-expander { + background-image: url(images/tree/elbow-plus-nl.gif); +} +/* line 117, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-expander { + background-image: url(images/tree/elbow-minus-nl.gif); +} +/* line 122, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-no-lines .x-rtl.x-tree-expander { + background-image: url(images/tree/elbow-plus-nl-rtl.gif); +} +/* line 126, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-no-lines .x-grid-tree-node-expanded .x-rtl.x-tree-expander { + background-image: url(images/tree/elbow-minus-nl-rtl.gif); +} + +/* line 132, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-icon { + margin: 1px 3px 0 0; + vertical-align: top; + background-repeat: no-repeat; +} + +/* line 139, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-rtl.x-tree-icon { + margin: 1px 0 0 3px; +} + +/* line 149, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-elbow, +.x-tree-elbow-end, +.x-tree-elbow-plus, +.x-tree-elbow-end-plus, +.x-tree-elbow-empty, +.x-tree-elbow-line { + height: 19px; + width: 16px; + vertical-align: top; +} + +/* line 155, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-icon-leaf { + width: 16px; + background-image: url(images/tree/leaf.gif); +} + +/* line 161, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-rtl.x-tree-icon-leaf { + background-image: url(images/tree/leaf-rtl.gif); +} + +/* line 166, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-icon-parent { + width: 16px; + background-image: url(images/tree/folder.gif); +} + +/* line 172, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-rtl.x-tree-icon-parent { + background-image: url(images/tree/folder-rtl.gif); +} + +/* line 177, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-tree-node-expanded .x-tree-icon-parent { + background-image: url(images/tree/folder-open.gif); +} + +/* line 182, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-tree-node-expanded .x-rtl.x-tree-icon-parent { + background-image: url(images/tree/folder-open-rtl.gif); +} + +/* line 187, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-view { + overflow: hidden; +} + +/* line 191, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-view .x-grid-cell-inner { + cursor: pointer; + vertical-align: top; + padding: 0 6px 0 6px; +} + +/* line 199, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-cell-treecolumn .x-grid-cell-inner { + padding-left: 0; + overflow: visible; +} + +/* line 205, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-node-text { + vertical-align: middle; + line-height: 19px; +} + +/* line 217, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-ie .x-tree-view .x-tree-elbow, +.x-ie .x-tree-view .x-tree-elbow-end, +.x-ie .x-tree-view .x-tree-elbow-plus, +.x-ie .x-tree-view .x-tree-elbow-end-plus, +.x-ie .x-tree-view .x-tree-elbow-empty, +.x-ie .x-tree-view .x-tree-elbow-line { + vertical-align: -6px; +} + +/* line 224, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-checkbox { + margin: 3px 3px 0 0; + display: inline-block; + vertical-align: top; + width: 13px; + height: 13px; + background: no-repeat; + background-image: url(images/form/checkbox.gif); + overflow: hidden; + padding: 0; + border: 0; +} +/* line 237, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-checkbox::-moz-focus-inner { + padding: 0; + border: 0; +} + +/* line 244, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-rtl.x-tree-checkbox { + margin: 3px 0 0 3px; +} + +/* line 249, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-checkbox-checked { + background-position: 0 -13px; +} + +/* line 253, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-tree-loading .x-tree-icon { + background-image: url(images/tree/loading.gif); +} + +/* line 258, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-tree-loading .x-rtl.x-tree-icon { + background-image: url(images/tree/loading.gif); +} + +/* line 263, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-grid-tree-loading span { + font-style: italic; + color: #444444; +} + +/* line 268, ../../../ext-theme-neutral/sass/src/tree/Panel.scss */ +.x-tree-animator-wrap { + overflow: hidden; +} + +/* line 1, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-drop-ok-append .x-dd-drop-icon { + background-image: url(images/tree/drop-append.gif); +} + +/* line 5, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-drop-ok-above .x-dd-drop-icon { + background-image: url(images/tree/drop-above.gif); +} + +/* line 9, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-drop-ok-below .x-dd-drop-icon { + background-image: url(images/tree/drop-below.gif); +} + +/* line 13, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-drop-ok-between .x-dd-drop-icon { + background-image: url(images/tree/drop-between.gif); +} + +/* line 17, ../../../ext-theme-neutral/sass/src/tree/ViewDropZone.scss */ +.x-tree-ddindicator { + height: 1px; + border-width: 1px 0px 0px; + border-style: dotted; + border-color: green; +} + +/* line 2, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tl { + background: transparent no-repeat 0 0; + zoom: 1; +} + +/* line 7, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tc { + height: 8px; + background: transparent repeat-x 0 0; + overflow: hidden; +} + +/* line 13, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tr { + background: transparent no-repeat right -8px; +} + +/* line 17, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-ml { + background: transparent repeat-y 0; + padding-left: 4px; + overflow: hidden; + zoom: 1; +} + +/* line 24, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mc { + background: repeat-x 0 -16px; + padding: 4px 10px; +} + +/* line 29, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mc h3 { + margin: 0 0 4px 0; + zoom: 1; +} + +/* line 34, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mr { + background: transparent repeat-y right; + padding-right: 4px; + overflow: hidden; +} + +/* line 40, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-bl { + background: transparent no-repeat 0 -16px; + zoom: 1; +} + +/* line 45, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-bc { + background: transparent repeat-x 0 -8px; + height: 8px; + overflow: hidden; +} + +/* line 51, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-br { + background: transparent no-repeat right -24px; +} + +/* line 55, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tl, .x-box-bl { + padding-left: 8px; + overflow: hidden; +} + +/* line 60, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tr, .x-box-br { + padding-right: 8px; + overflow: hidden; +} + +/* line 65, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tl { + background-image: url(images/box/corners.gif); +} + +/* line 69, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tc { + background-image: url(images/box/tb.gif); +} + +/* line 73, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-tr { + background-image: url(images/box/corners.gif); +} + +/* line 77, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-ml { + background-image: url(images/box/l.gif); +} + +/* line 81, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mc { + background-color: #eee; + background-image: url(images/box/tb.gif); + font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif; + color: #393939; + font-size: 15px; +} + +/* line 89, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mc h3 { + font-size: 18px; + font-weight: bold; +} + +/* line 94, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-mr { + background-image: url(images/box/r.gif); +} + +/* line 98, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-bl { + background-image: url(images/box/corners.gif); +} + +/* line 102, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-bc { + background-image: url(images/box/tb.gif); +} + +/* line 106, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-br { + background-image: url(images/box/corners.gif); +} + +/* line 110, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr { + background-image: url(images/box/corners-blue.gif); +} + +/* line 114, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc { + background-image: url(images/box/tb-blue.gif); +} + +/* line 118, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-mc { + background-color: #c3daf9; +} + +/* line 122, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-mc h3 { + color: #17385b; +} + +/* line 126, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-ml { + background-image: url(images/box/l-blue.gif); +} + +/* line 130, ../../../ext-theme-classic/sass/src/dom/Element.scss */ +.x-box-blue .x-box-mr { + background-image: url(images/box/r-blue.gif); +} + +/* line 3, ../../../ext-theme-classic/sass/src/toolbar/Toolbar.scss */ +.x-rtl.x-toolbar-more-icon { + background-image: url(images/toolbar/more-left.gif) !important; +} + +/* line 2, ../../../ext-theme-classic/sass/src/window/MessageBox.scss */ +.x-message-box .x-msg-box-wait { + background-image: url(images/shared/blue-loading.gif); +} + +/* line 1, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-form-trigger { + border-bottom: 1px solid #b5b8c8; + height: 21px; +} + +/* line 6, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-border-box .x-form-trigger { + height: 22px; +} + +/* line 11, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-toolbar-item .x-form-trigger { + height: 19px; +} + +/* line 15, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-border-box .x-field-default-toolbar .x-form-trigger { + height: 20px; +} + +/* line 20, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-form-trigger-over { + border-bottom-color: #a1a1a1; +} + +/* line 24, ../../../ext-theme-classic/sass/src/form/field/Trigger.scss */ +.x-form-trigger-wrap-focus .x-form-trigger { + border-bottom-color: #a1a1a1; +} + +/* line 7, ../../../ext-theme-classic/sass/src/form/field/Spinner.scss */ +.x-strict .x-ie6 .x-toolbar-item .x-form-spinner-up, .x-strict .x-ie7 .x-toolbar-item .x-form-spinner-up, .x-strict .x-ie6 +.x-toolbar-item .x-form-spinner-down, .x-strict .x-ie7 +.x-toolbar-item .x-form-spinner-down { + height: 9px !important; +} + +/* line 2, ../../../ext-theme-classic/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-wrap .x-toolbar { + border-left-color: #b5b8c8; + border-top-color: #b5b8c8; + border-right-color: #b5b8c8; +} + +/* line 9, ../../../ext-theme-classic/sass/src/form/field/HtmlEditor.scss */ +.x-html-editor-input { + border: 1px solid #b5b8c8; + border-top-width: 0; +} + +/* line 1, ../../../ext-theme-classic/sass/src/grid/column/Column.scss */ +.x-column-header-trigger { + background: no-repeat left center; + background-color: #c5c5c5; + background-image: url(images/grid/grid3-hd-btn.gif); +} + +/* line 9, ../../../ext-theme-classic/sass/src/grid/column/Column.scss */ +.x-rtl.x-column-header-trigger { + background-image: url(images/grid/grid3-hd-btn-left.gif); + background-position: right center; +} + +/* line 4, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-trigger { + height: 19px; +} +/* line 10, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-trigger-wrap .x-form-spinner-up, .x-grid-editor .x-form-trigger-wrap .x-form-spinner-down { + background-image: url(images/form/spinner-small.gif); + height: 10px !important; +} +/* line 17, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-rtl.x-form-trigger-wrap .x-form-spinner-up, .x-grid-editor .x-rtl.x-form-trigger-wrap .x-form-spinner-down { + background-image: url(images/form/spinner-small-rtl.gif); +} +/* line 24, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-border-box .x-grid-editor .x-form-trigger { + height: 20px; +} +/* line 27, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-border-box .x-grid-editor .x-form-text { + height: 20px; + padding-bottom: 1px; +} +/* line 34, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-text { + height: 18px; +} + +/* line 43, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-ie8m .x-grid-editor .x-form-text { + padding-top: 1px; +} +/* line 49, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-strict .x-ie6 .x-grid-editor .x-form-text, .x-strict .x-ie7 .x-grid-editor .x-form-text { + height: 17px; +} +/* line 53, ../../../ext-theme-classic/sass/src/grid/plugin/Editing.scss */ +.x-grid-editor .x-form-text .x-quirks .x-ie9 { + line-height: 17px; +} + +/* line 2, ../../../ext-theme-classic/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-form-text { + padding: 0 2px; +} +/* line 5, ../../../ext-theme-classic/sass/src/grid/plugin/RowEditing.scss */ +.x-grid-row-editor .x-form-display-field { + padding-top: 1px; +} + +/* line 12, ../../../ext-theme-classic/sass/src/grid/plugin/RowEditing.scss */ +.x-ie .x-grid-row-editor .x-form-text { + padding-left: 3px; +} + +/* line 19, ../../../ext-theme-classic/sass/src/grid/plugin/RowEditing.scss */ +.x-opera .x-grid-row-editor .x-form-text { + padding-left: 3px; +} + +/* line 1, ../../../ext-theme-classic/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd { + border-width: 1px 0 !important; + -webkit-box-shadow: inset 0 0 0 0 #e5e5e5; + -moz-box-shadow: inset 0 0 0 0 #e5e5e5; + box-shadow: inset 0 0 0 0 #e5e5e5; +} + +/* line 6, ../../../ext-theme-classic/sass/src/layout/container/Accordion.scss */ +.x-accordion-hd-sibling-expanded { + -webkit-box-shadow: inset 0 1px 0 0 #ececec; + -moz-box-shadow: inset 0 1px 0 0 #ececec; + box-shadow: inset 0 1px 0 0 #ececec; +} + +/* line 5, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, +.x-resizable-pinned .x-resizable-handle-east, +.x-resizable-pinned .x-resizable-handle-west { + background-position: left; +} +/* line 10, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, +.x-resizable-pinned .x-resizable-handle-south, +.x-resizable-pinned .x-resizable-handle-north { + background-position: top; +} +/* line 14, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southeast, +.x-resizable-pinned .x-resizable-handle-southeast { + background-position: top left; +} +/* line 18, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northwest, +.x-resizable-pinned .x-resizable-handle-northwest { + background-position: bottom right; +} +/* line 22, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-northeast, +.x-resizable-pinned .x-resizable-handle-northeast { + background-position: bottom left; +} +/* line 26, ../../../ext-theme-classic/sass/src/resizer/Resizer.scss */ +.x-resizable-over .x-resizable-handle-southwest, +.x-resizable-pinned .x-resizable-handle-southwest { + background-position: top right; +} + +/* line 6, ../../../ext-theme-classic/sass/src/slider/Multi.scss */ +.x-ie6 .x-slider-horz, +.x-ie6 .x-slider-horz .x-slider-end, +.x-ie6 .x-slider-horz .x-slider-inner { + background-image: url(images/slider/slider-bg.gif); +} +/* line 10, ../../../ext-theme-classic/sass/src/slider/Multi.scss */ +.x-ie6 .x-slider-horz .x-slider-thumb { + background-image: url(images/slider/slider-thumb.gif); +} +/* line 16, ../../../ext-theme-classic/sass/src/slider/Multi.scss */ +.x-ie6 .x-slider-vert, +.x-ie6 .x-slider-vert .x-slider-end, +.x-ie6 .x-slider-vert .x-slider-inner { + background-image: url(images/slider/slider-v-bg.gif); +} +/* line 20, ../../../ext-theme-classic/sass/src/slider/Multi.scss */ +.x-ie6 .x-slider-vert .x-slider-thumb { + background-image: url(images/slider/slider-v-thumb.gif); +} + +/* line 1, ../../../ext-theme-classic/sass/src/tab/Panel.scss */ +.x-tab-icon-el { + top: -1px; +} + +/* line 6, ../../../ext-theme-classic/sass/src/tab/Panel.scss */ +.x-tab-noicon .x-tab-icon { + display: none; +} diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/ext-theme-gray-all-rtl.css b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/ext-theme-gray-all-rtl.css new file mode 100644 index 000000000..57f1804ae --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/ext-theme-gray-all-rtl.css @@ -0,0 +1 @@ +.x-body{margin:0}img{border:0}.x-border-box,.x-border-box *{box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-rtl{direction:rtl}.x-ltr{direction:ltr}.x-clear{overflow:hidden;clear:both;font-size:0;line-height:0;display:table}.x-strict .x-ie7 .x-clear{height:0;width:0}.x-layer{position:absolute!important;overflow:hidden;zoom:1}.x-fixed-layer{position:fixed!important;overflow:hidden;zoom:1}.x-shim{position:absolute;left:0;top:0;overflow:hidden;filter:alpha(opacity=0);opacity:0}.x-hide-display{display:none!important}.x-hide-visibility{visibility:hidden!important}.x-ie6 .x-item-disabled{filter:none}.x-hidden,.x-hide-offsets{display:block!important;visibility:hidden!important;position:absolute!important;top:-10000px!important}.x-hide-nosize{height:0!important;width:0!important}.x-masked-relative{position:relative}.x-ie-shadow{background-color:#777;display:none;position:absolute;overflow:hidden;zoom:1}.x-unselectable{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;cursor:default}.x-selectable{cursor:auto;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text;user-select:text;-o-user-select:text}.x-list-plain{list-style-type:none;margin:0;padding:0}.x-table-plain{border-collapse:collapse;border-spacing:0;font-size:1em}.x-frame-tl,.x-frame-tr,.x-frame-tc,.x-frame-bl,.x-frame-br,.x-frame-bc{overflow:hidden;background-repeat:no-repeat}.x-frame-tc,.x-frame-bc{background-repeat:repeat-x}.x-frame-mc{background-repeat:repeat-x;overflow:hidden}.x-proxy-el{position:absolute;background:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-css-shadow{position:absolute;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}.x-item-disabled,.x-item-disabled *{cursor:default}.x-box-item{position:absolute!important;left:0;top:0}.x-rtl>.x-box-item{right:0;left:auto}.x-ie6 .x-rtl .x-box-item,.x-quirks .x-ie .x-rtl .x-box-item{right:0;left:auto}.x-mask{z-index:100;position:absolute;width:100%;height:100%;zoom:1}.x-mask-shim{z-index:100;position:absolute;top:0;left:0;width:100%;height:100%}.x-mask-msg{z-index:20001;position:absolute}.x-progress{position:relative;border-style:solid;overflow:hidden}.x-progress-bar{overflow:hidden;position:absolute;width:0;height:100%}.x-progress-text{overflow:hidden;position:absolute}.x-btn{display:inline-block;position:relative;zoom:1;*display:inline;cursor:pointer;white-space:nowrap;vertical-align:middle;text-decoration:none}.x-btn-wrap{position:relative}.x-btn-button{position:relative;display:block;text-decoration:none;overflow:hidden;outline:0;zoom:1}.x-btn-inner{display:block;white-space:nowrap;overflow:hidden;zoom:1}.x-btn-icon-el{top:0;right:0;bottom:0;left:0;position:absolute;background-repeat:no-repeat;text-align:center}.x-btn-inner-center{text-align:center}.x-btn-inner-left{text-align:left}.x-rtl.x-btn-inner-left{text-align:right}.x-btn-inner-right{text-align:right}.x-rtl.x-btn-inner-right{text-align:left}.x-box-layout-ct{overflow:hidden;zoom:1}.x-box-target{position:absolute;width:20000px;top:0;left:0;height:1px}.x-rtl.x-box-target{left:auto;right:0}.x-box-inner{overflow:hidden;zoom:1;position:relative;left:0;top:0}.x-horizontal-box-overflow-body{float:left}.x-box-scroller{position:relative;background-repeat:no-repeat}.x-box-scroller-left,.x-box-scroller-right{float:left;height:100%;z-index:5}.x-box-scroller-top .x-box-scroller,.x-box-scroller-bottom .x-box-scroller{line-height:0;font-size:0;background-position:center 0}.x-box-menu-after{float:right}.x-rtl.x-box-menu-after{float:left}.x-toolbar-text{white-space:nowrap}.x-toolbar-separator{display:block;font-size:1px;overflow:hidden;cursor:default;border:0;width:0;height:0;line-height:0}.x-quirks .x-ie .x-toolbar .x-toolbar-separator-horizontal{width:2px}.x-toolbar-scroller{padding-left:0}.x-toolbar-plain{border:0}.x-docked{position:absolute!important;z-index:1}.x-docked-vertical{position:static}.x-docked-top{border-bottom-width:0!important}.x-docked-bottom{border-top-width:0!important}.x-docked-left{border-right-width:0!important}.x-docked-right{border-left-width:0!important}.x-docked-noborder-top{border-top-width:0!important}.x-docked-noborder-right{border-right-width:0!important}.x-docked-noborder-bottom{border-bottom-width:0!important}.x-docked-noborder-left{border-left-width:0!important}.x-noborder-l{border-left-width:0!important}.x-noborder-b{border-bottom-width:0!important}.x-noborder-bl{border-bottom-width:0!important;border-left-width:0!important}.x-noborder-r{border-right-width:0!important}.x-noborder-rl{border-right-width:0!important;border-left-width:0!important}.x-noborder-rb{border-right-width:0!important;border-bottom-width:0!important}.x-noborder-rbl{border-right-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-t{border-top-width:0!important}.x-noborder-tl{border-top-width:0!important;border-left-width:0!important}.x-noborder-tb{border-top-width:0!important;border-bottom-width:0!important}.x-noborder-tbl{border-top-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-tr{border-top-width:0!important;border-right-width:0!important}.x-noborder-trl{border-top-width:0!important;border-right-width:0!important;border-left-width:0!important}.x-noborder-trb{border-top-width:0!important;border-right-width:0!important;border-bottom-width:0!important}.x-noborder-trbl{border-width:0!important}.x-header-icon{background-repeat:no-repeat;background-position:0 0;vertical-align:middle;text-align:center}.x-header-text-container{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.x-rtl.x-header-text-container{-o-text-overflow:clip;text-overflow:clip}.x-dd-drag-proxy,.x-dd-drag-current{z-index:1000000!important;pointer-events:none}.x-dd-drag-repair .x-dd-drag-ghost{filter:alpha(opacity=60);opacity:.6}.x-dd-drag-repair .x-dd-drop-icon{display:none}.x-dd-drag-ghost{filter:alpha(opacity=85);opacity:.85;padding:5px;padding-left:20px;white-space:nowrap;color:#000;font:normal 11px tahoma,arial,verdana,sans-serif;border:1px solid;border-color:#ddd #bbb #bbb #ddd;background-color:#fff}.x-dd-drop-icon{position:absolute;top:3px;left:3px;display:block;width:16px;height:16px;background-color:transparent;background-position:center;background-repeat:no-repeat;z-index:1}.x-rtl .x-dd-drag-ghost{padding-left:5px;padding-right:20px}.x-rtl .x-dd-drop-icon{left:auto;right:3px}.x-dd-drop-ok .x-dd-drop-icon{background-image:url(images/dd/drop-yes.gif)}.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(images/dd/drop-add.gif)}.x-dd-drop-nodrop div.x-dd-drop-icon{background-image:url(images/dd/drop-no.gif)}.x-panel,.x-plain{overflow:hidden;position:relative}.x-panel{outline:0}.x-ie .x-panel-header,.x-ie .x-panel-header-tl,.x-ie .x-panel-header-tc,.x-ie .x-panel-header-tr,.x-ie .x-panel-header-ml,.x-ie .x-panel-header-mc,.x-ie .x-panel-header-mr,.x-ie .x-panel-header-bl,.x-ie .x-panel-header-bc,.x-ie .x-panel-header-br{zoom:1}.x-ie8 td.x-frame-mc{vertical-align:top}.x-panel-body{overflow:hidden;position:relative}.x-nlg .x-panel-header-vertical .x-frame-mc{background-repeat:repeat-y}.x-panel-header-plain,.x-panel-body-plain{border:0;padding:0}.x-tip{position:absolute;overflow:visible}.x-tip-body{overflow:hidden;position:relative}.x-tip-anchor{position:absolute;overflow:hidden;border-style:solid}.x-table-layout{font-size:1em}.x-btn-group{position:relative;overflow:hidden}.x-btn-group-body{position:relative;zoom:1}.x-btn-group-body .x-table-layout-cell{vertical-align:top}.x-viewport,.x-viewport body{margin:0;padding:0;border:0 none;overflow:hidden;height:100%;position:static}.x-window{outline:0;overflow:hidden}.x-window .x-window-wrap{position:relative}.x-window-body{position:relative;overflow:hidden}.x-window-body-plain{background:transparent}.x-form-item-label{display:block}.x-form-item-label-right{text-align:right}.x-form-item-label-top{display:block;zoom:1}.x-form-invalid-icon{overflow:hidden}.x-form-invalid-icon ul{display:none}.x-form-textarea{overflow:auto;resize:none}.x-safari.x-mac .x-form-textarea{margin-bottom:-2px}table.x-form-checkboxgroup{margin:0}.x-fieldset{display:block;position:relative}.x-fieldset-header{overflow:hidden}.x-fieldset-header .x-form-item,.x-fieldset-header .x-tool{float:left}.x-fieldset-header .x-form-cb-wrap{font-size:0;line-height:0}.x-fieldset-header .x-form-cb{margin:0}.x-rtl.x-fieldset-header .x-form-item,.x-rtl.x-fieldset-header .x-tool{float:right}.x-fieldset-header-text{float:left}.x-webkit *:focus{outline:none!important}.x-form-item{vertical-align:top;table-layout:fixed}.x-form-item-body{position:relative}.x-form-form-item td{border-top:1px solid transparent}.x-form-cb{vertical-align:top;overflow:hidden;padding:0;border:0}.x-form-cb::-moz-focus-inner{padding:0;border:0}.x-form-cb-label{zoom:1}.x-form-trigger{cursor:pointer;overflow:hidden;background-repeat:no-repeat}.x-item-disabled .x-form-trigger{cursor:default}.x-trigger-noedit{cursor:default}.x-form-trigger-wrap{vertical-align:top}.x-form-spinner-up,.x-form-spinner-down{font-size:0;border-bottom:0}.x-datepicker{position:relative}.x-datepicker-inner{table-layout:fixed;width:100%;border-collapse:separate}.x-datepicker-cell{padding:0}.x-datepicker-header{position:relative;zoom:1}.x-datepicker-arrow{position:absolute;outline:0;font-size:0}.x-datepicker-column-header{padding:0}.x-datepicker-date{display:block;zoom:1;text-decoration:none}.x-monthpicker{position:absolute;left:0;top:0}.x-monthpicker-body{height:100%}.x-monthpicker-months,.x-monthpicker-years{float:left;height:100%}.x-monthpicker-item{float:left}.x-monthpicker-item-inner{display:block;text-decoration:none}.x-monthpicker-yearnav-button-ct{float:left;text-align:center}.x-monthpicker-yearnav-button{display:inline-block;outline:0;font-size:0}.x-monthpicker-buttons{position:absolute;bottom:0;width:100%}.x-strict .x-ie6 .x-monthpicker-buttons{bottom:-1px}.x-form-file-wrap .x-form-file-input{position:absolute;top:-4px;right:-2px;height:30px;filter:alpha(opacity=0);opacity:0;font-size:100px}.x-form-item-hidden{margin:0}.x-color-picker-item{float:left;text-decoration:none}.x-color-picker-item-inner{display:block;font-size:1px}.x-html-editor-tb .x-toolbar{position:static!important}.x-htmleditor-iframe{display:block;overflow:auto}.x-fit-item{position:relative}.x-grid-row{outline:0}.x-abs-layout-ct{position:relative}.x-abs-layout-item{position:absolute!important}.x-splitter{font-size:1px}.x-splitter-horizontal{cursor:e-resize;cursor:row-resize}.x-splitter-vertical{cursor:e-resize;cursor:col-resize}.x-splitter-collapsed,.x-splitter-horizontal-noresize,.x-splitter-vertical-noresize{cursor:default}.x-splitter-active{z-index:4}.x-collapse-el{position:absolute;background-repeat:no-repeat}.x-border-layout-ct{overflow:hidden;zoom:1}.x-border-layout-ct{position:relative}.x-border-region-slide-in{z-index:5}.x-region-collapsed-placeholder{z-index:4}.x-column{float:left}.x-rtl>.x-column{float:right}.x-ie6 .x-rtl .x-column,.x-quirks .x-ie .x-rtl .x-column{float:right}.x-ie6 .x-column{display:inline}.x-quirks .x-ie .x-form-layout-table,.x-quirks .x-ie .x-form-layout-table tbody tr.x-form-item{position:relative}.x-form-layout-table{border-collapse:separate;border-spacing:0 2px}.x-ie6 .x-form-layout-table{border-collapse:collapse;border-spacing:0}.x-menu{outline:0}.x-menu-item{white-space:nowrap;overflow:hidden}.x-menu-item-cmp .x-field-label-cell{vertical-align:middle}.x-menu-icon-separator{position:absolute;top:0;z-index:0;height:100%;overflow:hidden}.x-menu-plain .x-menu-icon-separator{display:none}.x-menu-item-link{text-decoration:none;outline:0;zoom:1}.x-menu-item-text{zoom:1}.x-menu-item-icon,.x-menu-item-icon-right,.x-menu-item-arrow{position:absolute;text-align:center}.x-resizable-overlay{position:absolute;left:0;top:0;width:100%;height:100%;display:none;z-index:200000;background-color:#fff;filter:alpha(opacity=0);opacity:0}.x-slider{outline:0;zoom:1;position:relative}.x-slider-inner{position:relative;left:0;top:0;overflow:visible;zoom:1}.x-slider-vert .x-slider-inner{background:repeat-y 0 0}.x-slider-end{zoom:1}.x-slider-thumb{position:absolute;background:no-repeat 0 0}.x-slider-horz .x-slider-thumb{left:0}.x-slider-vert .x-slider-thumb{bottom:0}.x-tab{display:block;white-space:nowrap;z-index:1}.x-tab-active{z-index:3}.x-tab-wrap{display:block;position:relative}.x-tab-button{zoom:1;display:block;outline:0}.x-tab-inner{display:block;text-align:center;white-space:nowrap;text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow:hidden;zoom:1}.x-btn-icon-el{top:0;right:0;bottom:0;left:0;position:absolute;background-repeat:no-repeat;text-align:center}.x-tab-bar{z-index:1}.x-tab-bar-body{z-index:2;position:relative}.x-tab-bar-strip{position:absolute;line-height:0;font-size:0;z-index:1}.x-tab-bar-horizontal .x-tab-bar-strip{width:100%;left:0}.x-tab-bar-vertical .x-tab-bar-strip{height:100%;top:0}.x-tab-bar-strip-top{bottom:0}.x-tab-bar-strip-bottom{top:0}.x-tab-bar-strip-left{right:0}.x-rtl.x-tab-bar .x-tab-bar-strip-left{right:auto;left:0}.x-tab-bar-strip-right{left:0}.x-rtl.x-tab-bar .x-tab-bar-strip-right{left:auto;right:0}.x-tab-bar-plain{background:transparent!important}.x-tab-icon-el{position:absolute;background-repeat:no-repeat;top:0;left:0;right:auto;bottom:0}.x-rtl.x-tab-icon-el{left:auto;right:0}.x-tab-close-btn{position:absolute;font-size:0;line-height:0;background:no-repeat}.x-tab-mc{overflow:visible}.x-surface{display:-moz-inline-stack;display:inline-block;vertical-align:middle;*vertical-align:auto;zoom:1;*display:inline;overflow:hidden}.rvml{behavior:url(#default#VML)}.x-surface tspan{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;cursor:default}.x-vml-sprite{position:absolute;left:0;top:0;width:1px;height:1px}.x-vml-group{position:absolute;left:0;top:0;width:1000px;height:1000px}.x-vml-measure-span{position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;display:inline}.x-vml-base{position:relative;top:0;left:0;overflow:hidden;display:inline-block}.x-vml-base{position:relative;top:0;left:0;overflow:hidden;display:inline-block}svg,vml{overflow:hidden}.x-body{color:black;font-size:12px;font-family:tahoma,arial,verdana,sans-serif}.x-animating-size,.x-collapsed{overflow:hidden!important}.x-editor .x-form-item-body{padding-bottom:0}.x-focus-element{position:absolute;top:-10px;left:-10px;width:0;height:0}.x-focus-frame{position:absolute;left:0;top:0;z-index:100000000;width:0;height:0}.x-focus-frame-top,.x-focus-frame-bottom,.x-focus-frame-left,.x-focus-frame-right{position:absolute;top:0;left:0}.x-focus-frame-top,.x-focus-frame-bottom{border-top:solid 2px #15428b;height:2px}.x-focus-frame-left,.x-focus-frame-right{border-left:solid 2px #15428b;width:2px}.x-mask{filter:alpha(opacity=50);opacity:.5;background:#ccc}.x-mask-msg{padding:2px;border-style:solid;border-width:1px;border-color:#bcb0b0;background-image:none;background-color:#e0e0e0}.x-mask-msg-inner{padding:0 5px;border-style:solid;border-width:1px;border-color:#b3b3b3;background-color:#eee;color:#222;font:normal 11px tahoma,arial,verdana,sans-serif}.x-mask-msg-text{padding:5px 5px 5px 20px;background-image:url(images/grid/loading.gif);background-repeat:no-repeat;background-position:0 center}.x-rtl.x-mask-msg-text{padding:5px 20px 5px 5px;background-position:right center}.x-progress-default{background-color:#f1f1f1;border-width:1px;height:20px;border-color:#8e8e8e}.x-strict .x-ie7m .x-progress-default{height:18px}.x-progress-default .x-progress-bar-default{background-image:none;background-color:#ababab;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d1d1d1),color-stop(50%,#b8b8b8),color-stop(51%,#ababab),color-stop(100%,#9e9e9e));background-image:-webkit-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:-moz-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:-o-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e)}.x-nlg .x-progress-default .x-progress-bar-default{background:repeat-x;background-image:url(images/progress/progress-default-bg.gif)}.x-progress-default .x-progress-text{color:white;font-weight:bold;font-size:11px;text-align:center;line-height:18px}.x-progress-default .x-progress-text-back{color:#5d5d5d;line-height:18px}.x-progress-default .x-progress-bar-default:after{display:none;content:"x-slicer:bg:url(images/progress/progress-default-bg.gif)"}.x-btn-default-small{border-color:#bbb}.x-btn-default-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-image:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:linear-gradient(top,#fff,#eee)}.x-btn-default-small-mc{background-image:url(images/btn/btn-default-small-fbg.gif);background-position:0 top;background-color:#f8f8f8}.x-nlg .x-btn-default-small{background-image:url(images/btn/btn-default-small-bg.gif);background-position:0 top}.x-nbr .x-btn-default-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-small{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2")}.x-btn-default-small-tl{background-position:0 -6px}.x-btn-default-small-tr{background-position:right -9px}.x-btn-default-small-bl{background-position:0 -12px}.x-btn-default-small-br{background-position:right -15px}.x-btn-default-small-ml{background-position:0 top}.x-btn-default-small-mr{background-position:right top}.x-btn-default-small-tc{background-position:0 0}.x-btn-default-small-bc{background-position:0 -3px}.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-mr{padding-right:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-ml{padding-left:3px}.x-btn-default-small-tc{height:3px}.x-btn-default-small-bc{height:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-tc,.x-btn-default-small-bc,.x-btn-default-small-ml,.x-btn-default-small-mr{zoom:1;background-image:url(images/btn/btn-default-small-corners.gif)}.x-btn-default-small-ml,.x-btn-default-small-mr{zoom:1;background-image:url(images/btn/btn-default-small-sides.gif)}.x-btn-default-small-mc{padding:0}.x-strict .x-ie7 .x-btn-default-small-tl,.x-strict .x-ie7 .x-btn-default-small-bl{position:relative;right:0}.x-btn-default-small:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-small-fbg.gif), bg:url(images/btn/btn-default-small-bg.gif), corners:url(images/btn/btn-default-small-corners.gif), sides:url(images/btn/btn-default-small-sides.gif)"}.x-btn-default-small .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px}.x-btn-default-small .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-small .x-btn-arrow-right{padding-right:12px}.x-btn-default-small .x-rtl.x-btn-arrow-right{padding-right:0;padding-left:12px}.x-btn-default-small .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-small .x-btn-glyph{font-size:16px;line-height:16px;color:#333;opacity:.5}.x-ie8m .x-btn-default-small .x-btn-glyph{color:#959595}.x-btn-default-small-disabled{border-color:#d7d7d7;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f4f4f4),color-stop(100%,#e2e2e2));background-image:-webkit-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-moz-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-o-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:linear-gradient(top,#f4f4f4,#e2e2e2)}.x-btn-default-small-icon .x-btn-button,.x-btn-default-small-noicon .x-btn-button{height:16px}.x-btn-default-small-icon .x-btn-inner,.x-btn-default-small-noicon .x-btn-inner{line-height:16px}.x-btn-default-small-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-small-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-small-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-small-icon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-small-noicon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-small-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:4px;padding-left:0}.x-btn-default-small-icon .x-btn-inner{width:16px;padding:0}.x-btn-default-small-icon .x-btn-icon-el{width:16px;height:16px}.x-btn-default-small-icon-text-left .x-btn-button{height:16px}.x-btn-default-small-icon-text-left .x-btn-inner{line-height:16px;padding-left:20px}.x-btn-default-small-icon-text-left .x-rtl.x-btn-inner{padding-left:4px;padding-right:20px}.x-btn-default-small-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:20px}.x-btn-default-small-icon-text-left .x-btn-icon-el{width:16px;right:auto}.x-ie6 .x-btn-default-small-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-small-icon-text-left .x-btn-icon-el{height:16px}.x-btn-default-small-icon-text-left .x-rtl.x-btn-icon-el{left:auto;right:0}.x-btn-default-small-icon-text-right .x-btn-button{height:16px}.x-btn-default-small-icon-text-right .x-btn-inner{line-height:16px;padding-right:20px}.x-btn-default-small-icon-text-right .x-rtl.x-btn-inner{padding-right:4px;padding-left:20px}.x-btn-default-small-icon-text-right .x-btn-icon-el{width:16px;left:auto}.x-ie6 .x-btn-default-small-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-small-icon-text-right .x-btn-icon-el{height:16px}.x-btn-default-small-icon-text-right .x-rtl.x-btn-icon-el{left:0;right:auto}.x-btn-default-small-icon-text-top .x-btn-inner{padding-top:20px}.x-btn-default-small-icon-text-top .x-btn-icon-el{height:16px;bottom:auto}.x-ie6 .x-btn-default-small-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-small-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-small-icon-text-bottom .x-btn-inner{padding-bottom:20px}.x-btn-default-small-icon-text-bottom .x-btn-icon-el{height:16px;top:auto}.x-ie6 .x-btn-default-small-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-small-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-small-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-small-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-small-menu-active,.x-btn-default-small-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn-default-small-over .x-frame-tl,.x-btn-default-small-over .x-frame-bl,.x-btn-default-small-over .x-frame-tr,.x-btn-default-small-over .x-frame-br,.x-btn-default-small-over .x-frame-tc,.x-btn-default-small-over .x-frame-bc{background-image:url(images/btn/btn-default-small-over-corners.gif)}.x-btn-default-small-over .x-frame-ml,.x-btn-default-small-over .x-frame-mr{background-image:url(images/btn/btn-default-small-over-sides.gif)}.x-btn-default-small-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-small-over-fbg.gif)}.x-btn-default-small-focus .x-frame-tl,.x-btn-default-small-focus .x-frame-bl,.x-btn-default-small-focus .x-frame-tr,.x-btn-default-small-focus .x-frame-br,.x-btn-default-small-focus .x-frame-tc,.x-btn-default-small-focus .x-frame-bc{background-image:url(images/btn/btn-default-small-focus-corners.gif)}.x-btn-default-small-focus .x-frame-ml,.x-btn-default-small-focus .x-frame-mr{background-image:url(images/btn/btn-default-small-focus-sides.gif)}.x-btn-default-small-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-small-focus-fbg.gif)}.x-btn-default-small-menu-active .x-frame-tl,.x-btn-default-small-menu-active .x-frame-bl,.x-btn-default-small-menu-active .x-frame-tr,.x-btn-default-small-menu-active .x-frame-br,.x-btn-default-small-menu-active .x-frame-tc,.x-btn-default-small-menu-active .x-frame-bc,.x-btn-default-small-pressed .x-frame-tl,.x-btn-default-small-pressed .x-frame-bl,.x-btn-default-small-pressed .x-frame-tr,.x-btn-default-small-pressed .x-frame-br,.x-btn-default-small-pressed .x-frame-tc,.x-btn-default-small-pressed .x-frame-bc{background-image:url(images/btn/btn-default-small-pressed-corners.gif)}.x-btn-default-small-menu-active .x-frame-ml,.x-btn-default-small-menu-active .x-frame-mr,.x-btn-default-small-pressed .x-frame-ml,.x-btn-default-small-pressed .x-frame-mr{background-image:url(images/btn/btn-default-small-pressed-sides.gif)}.x-btn-default-small-menu-active .x-frame-mc,.x-btn-default-small-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-small-pressed-fbg.gif)}.x-btn-default-small-disabled .x-frame-tl,.x-btn-default-small-disabled .x-frame-bl,.x-btn-default-small-disabled .x-frame-tr,.x-btn-default-small-disabled .x-frame-br,.x-btn-default-small-disabled .x-frame-tc,.x-btn-default-small-disabled .x-frame-bc{background-image:url(images/btn/btn-default-small-disabled-corners.gif)}.x-btn-default-small-disabled .x-frame-ml,.x-btn-default-small-disabled .x-frame-mr{background-image:url(images/btn/btn-default-small-disabled-sides.gif)}.x-btn-default-small-disabled .x-frame-mc{background-color:#ececec;background-image:url(images/btn/btn-default-small-disabled-fbg.gif)}.x-nlg .x-btn-default-small{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-bg.gif)}.x-nlg .x-btn-default-small-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-over-bg.gif)}.x-nlg .x-btn-default-small-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-focus-bg.gif)}.x-nlg .x-btn-default-small-menu-active,.x-nlg .x-btn-default-small-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-pressed-bg.gif)}.x-nlg .x-btn-default-small-disabled{background-repeat:repeat-x;background-image:url(images/btn/btn-default-small-disabled-bg.gif)}.x-btn-default-small .x-btn-split-right{background-image:url(images/button/s-arrow.gif);padding-right:14px}.x-btn-default-small .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-rtl.gif);padding-right:0;padding-left:14px}.x-btn-default-small .x-btn-split-bottom{background-image:url(images/button/s-arrow-b.gif);padding-bottom:14px}.x-btn-default-small-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-small-over .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-o-rtl.gif)}.x-btn-default-small-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-small-disabled .x-btn-inner,.x-btn-default-small-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-small-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-over-corners.gif), sides:url(images/btn/btn-default-small-over-sides.gif), frame-bg:url(images/btn/btn-default-small-over-fbg.gif), bg:url(images/btn/btn-default-small-over-bg.gif)"}.x-btn-default-small-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-focus-corners.gif), sides:url(images/btn/btn-default-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-small-focus-fbg.gif), bg:url(images/btn/btn-default-small-focus-bg.gif)"}.x-btn-default-small-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-pressed-corners.gif), sides:url(images/btn/btn-default-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-small-pressed-fbg.gif), bg:url(images/btn/btn-default-small-pressed-bg.gif)"}.x-btn-default-small-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-small-disabled-corners.gif), sides:url(images/btn/btn-default-small-disabled-sides.gif), frame-bg:url(images/btn/btn-default-small-disabled-fbg.gif), bg:url(images/btn/btn-default-small-disabled-bg.gif)"}.x-btn-default-medium{border-color:#bbb}.x-btn-default-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:linear-gradient(top,#fff,#eee)}.x-btn-default-medium-mc{background-image:url(images/btn/btn-default-medium-fbg.gif);background-position:0 top;background-color:#f8f8f8}.x-nlg .x-btn-default-medium{background-image:url(images/btn/btn-default-medium-bg.gif);background-position:0 top}.x-nbr .x-btn-default-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-medium{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3")}.x-btn-default-medium-tl{background-position:0 -6px}.x-btn-default-medium-tr{background-position:right -9px}.x-btn-default-medium-bl{background-position:0 -12px}.x-btn-default-medium-br{background-position:right -15px}.x-btn-default-medium-ml{background-position:0 top}.x-btn-default-medium-mr{background-position:right top}.x-btn-default-medium-tc{background-position:0 0}.x-btn-default-medium-bc{background-position:0 -3px}.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-mr{padding-right:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-ml{padding-left:3px}.x-btn-default-medium-tc{height:3px}.x-btn-default-medium-bc{height:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-tc,.x-btn-default-medium-bc,.x-btn-default-medium-ml,.x-btn-default-medium-mr{zoom:1;background-image:url(images/btn/btn-default-medium-corners.gif)}.x-btn-default-medium-ml,.x-btn-default-medium-mr{zoom:1;background-image:url(images/btn/btn-default-medium-sides.gif)}.x-btn-default-medium-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-medium-tl,.x-strict .x-ie7 .x-btn-default-medium-bl{position:relative;right:0}.x-btn-default-medium:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-medium-fbg.gif), bg:url(images/btn/btn-default-medium-bg.gif), corners:url(images/btn/btn-default-medium-corners.gif), sides:url(images/btn/btn-default-medium-sides.gif)"}.x-btn-default-medium .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-medium .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-medium .x-btn-arrow-right{padding-right:12px}.x-btn-default-medium .x-rtl.x-btn-arrow-right{padding-right:0;padding-left:12px}.x-btn-default-medium .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-medium .x-btn-glyph{font-size:24px;line-height:24px;color:#333;opacity:.5}.x-ie8m .x-btn-default-medium .x-btn-glyph{color:#959595}.x-btn-default-medium-disabled{border-color:#d7d7d7;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f4f4f4),color-stop(100%,#e2e2e2));background-image:-webkit-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-moz-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-o-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:linear-gradient(top,#f4f4f4,#e2e2e2)}.x-btn-default-medium-icon .x-btn-button,.x-btn-default-medium-noicon .x-btn-button{height:24px}.x-btn-default-medium-icon .x-btn-inner,.x-btn-default-medium-noicon .x-btn-inner{line-height:24px}.x-btn-default-medium-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-medium-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-medium-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-medium-icon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-medium-noicon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-medium-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:3px;padding-left:0}.x-btn-default-medium-icon .x-btn-inner{width:24px;padding:0}.x-btn-default-medium-icon .x-btn-icon-el{width:24px;height:24px}.x-btn-default-medium-icon-text-left .x-btn-button{height:24px}.x-btn-default-medium-icon-text-left .x-btn-inner{line-height:24px;padding-left:28px}.x-btn-default-medium-icon-text-left .x-rtl.x-btn-inner{padding-left:3px;padding-right:28px}.x-btn-default-medium-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:28px}.x-btn-default-medium-icon-text-left .x-btn-icon-el{width:24px;right:auto}.x-ie6 .x-btn-default-medium-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-medium-icon-text-left .x-btn-icon-el{height:24px}.x-btn-default-medium-icon-text-left .x-rtl.x-btn-icon-el{left:auto;right:0}.x-btn-default-medium-icon-text-right .x-btn-button{height:24px}.x-btn-default-medium-icon-text-right .x-btn-inner{line-height:24px;padding-right:28px}.x-btn-default-medium-icon-text-right .x-rtl.x-btn-inner{padding-right:3px;padding-left:28px}.x-btn-default-medium-icon-text-right .x-btn-icon-el{width:24px;left:auto}.x-ie6 .x-btn-default-medium-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-medium-icon-text-right .x-btn-icon-el{height:24px}.x-btn-default-medium-icon-text-right .x-rtl.x-btn-icon-el{left:0;right:auto}.x-btn-default-medium-icon-text-top .x-btn-inner{padding-top:28px}.x-btn-default-medium-icon-text-top .x-btn-icon-el{height:24px;bottom:auto}.x-ie6 .x-btn-default-medium-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-medium-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-medium-icon-text-bottom .x-btn-inner{padding-bottom:28px}.x-btn-default-medium-icon-text-bottom .x-btn-icon-el{height:24px;top:auto}.x-ie6 .x-btn-default-medium-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-medium-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-medium-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-medium-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-medium-menu-active,.x-btn-default-medium-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn-default-medium-over .x-frame-tl,.x-btn-default-medium-over .x-frame-bl,.x-btn-default-medium-over .x-frame-tr,.x-btn-default-medium-over .x-frame-br,.x-btn-default-medium-over .x-frame-tc,.x-btn-default-medium-over .x-frame-bc{background-image:url(images/btn/btn-default-medium-over-corners.gif)}.x-btn-default-medium-over .x-frame-ml,.x-btn-default-medium-over .x-frame-mr{background-image:url(images/btn/btn-default-medium-over-sides.gif)}.x-btn-default-medium-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-medium-over-fbg.gif)}.x-btn-default-medium-focus .x-frame-tl,.x-btn-default-medium-focus .x-frame-bl,.x-btn-default-medium-focus .x-frame-tr,.x-btn-default-medium-focus .x-frame-br,.x-btn-default-medium-focus .x-frame-tc,.x-btn-default-medium-focus .x-frame-bc{background-image:url(images/btn/btn-default-medium-focus-corners.gif)}.x-btn-default-medium-focus .x-frame-ml,.x-btn-default-medium-focus .x-frame-mr{background-image:url(images/btn/btn-default-medium-focus-sides.gif)}.x-btn-default-medium-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-medium-focus-fbg.gif)}.x-btn-default-medium-menu-active .x-frame-tl,.x-btn-default-medium-menu-active .x-frame-bl,.x-btn-default-medium-menu-active .x-frame-tr,.x-btn-default-medium-menu-active .x-frame-br,.x-btn-default-medium-menu-active .x-frame-tc,.x-btn-default-medium-menu-active .x-frame-bc,.x-btn-default-medium-pressed .x-frame-tl,.x-btn-default-medium-pressed .x-frame-bl,.x-btn-default-medium-pressed .x-frame-tr,.x-btn-default-medium-pressed .x-frame-br,.x-btn-default-medium-pressed .x-frame-tc,.x-btn-default-medium-pressed .x-frame-bc{background-image:url(images/btn/btn-default-medium-pressed-corners.gif)}.x-btn-default-medium-menu-active .x-frame-ml,.x-btn-default-medium-menu-active .x-frame-mr,.x-btn-default-medium-pressed .x-frame-ml,.x-btn-default-medium-pressed .x-frame-mr{background-image:url(images/btn/btn-default-medium-pressed-sides.gif)}.x-btn-default-medium-menu-active .x-frame-mc,.x-btn-default-medium-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-medium-pressed-fbg.gif)}.x-btn-default-medium-disabled .x-frame-tl,.x-btn-default-medium-disabled .x-frame-bl,.x-btn-default-medium-disabled .x-frame-tr,.x-btn-default-medium-disabled .x-frame-br,.x-btn-default-medium-disabled .x-frame-tc,.x-btn-default-medium-disabled .x-frame-bc{background-image:url(images/btn/btn-default-medium-disabled-corners.gif)}.x-btn-default-medium-disabled .x-frame-ml,.x-btn-default-medium-disabled .x-frame-mr{background-image:url(images/btn/btn-default-medium-disabled-sides.gif)}.x-btn-default-medium-disabled .x-frame-mc{background-color:#ececec;background-image:url(images/btn/btn-default-medium-disabled-fbg.gif)}.x-nlg .x-btn-default-medium{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-bg.gif)}.x-nlg .x-btn-default-medium-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-over-bg.gif)}.x-nlg .x-btn-default-medium-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-focus-bg.gif)}.x-nlg .x-btn-default-medium-menu-active,.x-nlg .x-btn-default-medium-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-pressed-bg.gif)}.x-nlg .x-btn-default-medium-disabled{background-repeat:repeat-x;background-image:url(images/btn/btn-default-medium-disabled-bg.gif)}.x-btn-default-medium .x-btn-split-right{background-image:url(images/button/s-arrow.gif);padding-right:14px}.x-btn-default-medium .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-rtl.gif);padding-right:0;padding-left:14px}.x-btn-default-medium .x-btn-split-bottom{background-image:url(images/button/s-arrow-b.gif);padding-bottom:14px}.x-btn-default-medium-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-medium-over .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-o-rtl.gif)}.x-btn-default-medium-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-medium-disabled .x-btn-inner,.x-btn-default-medium-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-medium-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-over-corners.gif), sides:url(images/btn/btn-default-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-medium-over-fbg.gif), bg:url(images/btn/btn-default-medium-over-bg.gif)"}.x-btn-default-medium-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-focus-corners.gif), sides:url(images/btn/btn-default-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-medium-focus-fbg.gif), bg:url(images/btn/btn-default-medium-focus-bg.gif)"}.x-btn-default-medium-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-pressed-corners.gif), sides:url(images/btn/btn-default-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-medium-pressed-bg.gif)"}.x-btn-default-medium-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-medium-disabled-corners.gif), sides:url(images/btn/btn-default-medium-disabled-sides.gif), frame-bg:url(images/btn/btn-default-medium-disabled-fbg.gif), bg:url(images/btn/btn-default-medium-disabled-bg.gif)"}.x-btn-default-large{border-color:#bbb}.x-btn-default-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:linear-gradient(top,#fff,#eee)}.x-btn-default-large-mc{background-image:url(images/btn/btn-default-large-fbg.gif);background-position:0 top;background-color:#f8f8f8}.x-nlg .x-btn-default-large{background-image:url(images/btn/btn-default-large-bg.gif);background-position:0 top}.x-nbr .x-btn-default-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-large{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3")}.x-btn-default-large-tl{background-position:0 -6px}.x-btn-default-large-tr{background-position:right -9px}.x-btn-default-large-bl{background-position:0 -12px}.x-btn-default-large-br{background-position:right -15px}.x-btn-default-large-ml{background-position:0 top}.x-btn-default-large-mr{background-position:right top}.x-btn-default-large-tc{background-position:0 0}.x-btn-default-large-bc{background-position:0 -3px}.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-mr{padding-right:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-ml{padding-left:3px}.x-btn-default-large-tc{height:3px}.x-btn-default-large-bc{height:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-tc,.x-btn-default-large-bc,.x-btn-default-large-ml,.x-btn-default-large-mr{zoom:1;background-image:url(images/btn/btn-default-large-corners.gif)}.x-btn-default-large-ml,.x-btn-default-large-mr{zoom:1;background-image:url(images/btn/btn-default-large-sides.gif)}.x-btn-default-large-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-large-tl,.x-strict .x-ie7 .x-btn-default-large-bl{position:relative;right:0}.x-btn-default-large:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/btn/btn-default-large-fbg.gif), bg:url(images/btn/btn-default-large-bg.gif), corners:url(images/btn/btn-default-large-corners.gif), sides:url(images/btn/btn-default-large-sides.gif)"}.x-btn-default-large .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-large .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-large .x-btn-arrow-right{padding-right:12px}.x-btn-default-large .x-rtl.x-btn-arrow-right{padding-right:0;padding-left:12px}.x-btn-default-large .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-large .x-btn-glyph{font-size:32px;line-height:32px;color:#333;opacity:.5}.x-ie8m .x-btn-default-large .x-btn-glyph{color:#959595}.x-btn-default-large-disabled{border-color:#d7d7d7;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f4f4f4),color-stop(100%,#e2e2e2));background-image:-webkit-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-moz-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-o-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:linear-gradient(top,#f4f4f4,#e2e2e2)}.x-btn-default-large-icon .x-btn-button,.x-btn-default-large-noicon .x-btn-button{height:32px}.x-btn-default-large-icon .x-btn-inner,.x-btn-default-large-noicon .x-btn-inner{line-height:32px}.x-btn-default-large-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-large-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-large-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-large-icon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-large-noicon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-large-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:3px;padding-left:0}.x-btn-default-large-icon .x-btn-inner{width:32px;padding:0}.x-btn-default-large-icon .x-btn-icon-el{width:32px;height:32px}.x-btn-default-large-icon-text-left .x-btn-button{height:32px}.x-btn-default-large-icon-text-left .x-btn-inner{line-height:32px;padding-left:36px}.x-btn-default-large-icon-text-left .x-rtl.x-btn-inner{padding-left:3px;padding-right:36px}.x-btn-default-large-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:36px}.x-btn-default-large-icon-text-left .x-btn-icon-el{width:32px;right:auto}.x-ie6 .x-btn-default-large-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-large-icon-text-left .x-btn-icon-el{height:32px}.x-btn-default-large-icon-text-left .x-rtl.x-btn-icon-el{left:auto;right:0}.x-btn-default-large-icon-text-right .x-btn-button{height:32px}.x-btn-default-large-icon-text-right .x-btn-inner{line-height:32px;padding-right:36px}.x-btn-default-large-icon-text-right .x-rtl.x-btn-inner{padding-right:3px;padding-left:36px}.x-btn-default-large-icon-text-right .x-btn-icon-el{width:32px;left:auto}.x-ie6 .x-btn-default-large-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-large-icon-text-right .x-btn-icon-el{height:32px}.x-btn-default-large-icon-text-right .x-rtl.x-btn-icon-el{left:0;right:auto}.x-btn-default-large-icon-text-top .x-btn-inner{padding-top:36px}.x-btn-default-large-icon-text-top .x-btn-icon-el{height:32px;bottom:auto}.x-ie6 .x-btn-default-large-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-large-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-large-icon-text-bottom .x-btn-inner{padding-bottom:36px}.x-btn-default-large-icon-text-bottom .x-btn-icon-el{height:32px;top:auto}.x-ie6 .x-btn-default-large-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-large-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-large-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-large-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-default-large-menu-active,.x-btn-default-large-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn-default-large-over .x-frame-tl,.x-btn-default-large-over .x-frame-bl,.x-btn-default-large-over .x-frame-tr,.x-btn-default-large-over .x-frame-br,.x-btn-default-large-over .x-frame-tc,.x-btn-default-large-over .x-frame-bc{background-image:url(images/btn/btn-default-large-over-corners.gif)}.x-btn-default-large-over .x-frame-ml,.x-btn-default-large-over .x-frame-mr{background-image:url(images/btn/btn-default-large-over-sides.gif)}.x-btn-default-large-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-large-over-fbg.gif)}.x-btn-default-large-focus .x-frame-tl,.x-btn-default-large-focus .x-frame-bl,.x-btn-default-large-focus .x-frame-tr,.x-btn-default-large-focus .x-frame-br,.x-btn-default-large-focus .x-frame-tc,.x-btn-default-large-focus .x-frame-bc{background-image:url(images/btn/btn-default-large-focus-corners.gif)}.x-btn-default-large-focus .x-frame-ml,.x-btn-default-large-focus .x-frame-mr{background-image:url(images/btn/btn-default-large-focus-sides.gif)}.x-btn-default-large-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-large-focus-fbg.gif)}.x-btn-default-large-menu-active .x-frame-tl,.x-btn-default-large-menu-active .x-frame-bl,.x-btn-default-large-menu-active .x-frame-tr,.x-btn-default-large-menu-active .x-frame-br,.x-btn-default-large-menu-active .x-frame-tc,.x-btn-default-large-menu-active .x-frame-bc,.x-btn-default-large-pressed .x-frame-tl,.x-btn-default-large-pressed .x-frame-bl,.x-btn-default-large-pressed .x-frame-tr,.x-btn-default-large-pressed .x-frame-br,.x-btn-default-large-pressed .x-frame-tc,.x-btn-default-large-pressed .x-frame-bc{background-image:url(images/btn/btn-default-large-pressed-corners.gif)}.x-btn-default-large-menu-active .x-frame-ml,.x-btn-default-large-menu-active .x-frame-mr,.x-btn-default-large-pressed .x-frame-ml,.x-btn-default-large-pressed .x-frame-mr{background-image:url(images/btn/btn-default-large-pressed-sides.gif)}.x-btn-default-large-menu-active .x-frame-mc,.x-btn-default-large-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-large-pressed-fbg.gif)}.x-btn-default-large-disabled .x-frame-tl,.x-btn-default-large-disabled .x-frame-bl,.x-btn-default-large-disabled .x-frame-tr,.x-btn-default-large-disabled .x-frame-br,.x-btn-default-large-disabled .x-frame-tc,.x-btn-default-large-disabled .x-frame-bc{background-image:url(images/btn/btn-default-large-disabled-corners.gif)}.x-btn-default-large-disabled .x-frame-ml,.x-btn-default-large-disabled .x-frame-mr{background-image:url(images/btn/btn-default-large-disabled-sides.gif)}.x-btn-default-large-disabled .x-frame-mc{background-color:#ececec;background-image:url(images/btn/btn-default-large-disabled-fbg.gif)}.x-nlg .x-btn-default-large{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-bg.gif)}.x-nlg .x-btn-default-large-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-over-bg.gif)}.x-nlg .x-btn-default-large-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-focus-bg.gif)}.x-nlg .x-btn-default-large-menu-active,.x-nlg .x-btn-default-large-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-pressed-bg.gif)}.x-nlg .x-btn-default-large-disabled{background-repeat:repeat-x;background-image:url(images/btn/btn-default-large-disabled-bg.gif)}.x-btn-default-large .x-btn-split-right{background-image:url(images/button/s-arrow.gif);padding-right:14px}.x-btn-default-large .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-rtl.gif);padding-right:0;padding-left:14px}.x-btn-default-large .x-btn-split-bottom{background-image:url(images/button/s-arrow-b.gif);padding-bottom:14px}.x-btn-default-large-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-large-over .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-o-rtl.gif)}.x-btn-default-large-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-large-disabled .x-btn-inner,.x-btn-default-large-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-large-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-over-corners.gif), sides:url(images/btn/btn-default-large-over-sides.gif), frame-bg:url(images/btn/btn-default-large-over-fbg.gif), bg:url(images/btn/btn-default-large-over-bg.gif)"}.x-btn-default-large-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-focus-corners.gif), sides:url(images/btn/btn-default-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-large-focus-fbg.gif), bg:url(images/btn/btn-default-large-focus-bg.gif)"}.x-btn-default-large-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-pressed-corners.gif), sides:url(images/btn/btn-default-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-large-pressed-fbg.gif), bg:url(images/btn/btn-default-large-pressed-bg.gif)"}.x-btn-default-large-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-large-disabled-corners.gif), sides:url(images/btn/btn-default-large-disabled-sides.gif), frame-bg:url(images/btn/btn-default-large-disabled-fbg.gif), bg:url(images/btn/btn-default-large-disabled-bg.gif)"}.x-btn-default-toolbar-small{border-color:transparent}.x-btn-default-toolbar-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-small-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-toolbar-small{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2")}.x-btn-default-toolbar-small-tl{background-position:0 -6px}.x-btn-default-toolbar-small-tr{background-position:right -9px}.x-btn-default-toolbar-small-bl{background-position:0 -12px}.x-btn-default-toolbar-small-br{background-position:right -15px}.x-btn-default-toolbar-small-ml{background-position:0 top}.x-btn-default-toolbar-small-mr{background-position:right top}.x-btn-default-toolbar-small-tc{background-position:0 0}.x-btn-default-toolbar-small-bc{background-position:0 -3px}.x-btn-default-toolbar-small-tr,.x-btn-default-toolbar-small-br,.x-btn-default-toolbar-small-mr{padding-right:3px}.x-btn-default-toolbar-small-tl,.x-btn-default-toolbar-small-bl,.x-btn-default-toolbar-small-ml{padding-left:3px}.x-btn-default-toolbar-small-tc{height:3px}.x-btn-default-toolbar-small-bc{height:3px}.x-btn-default-toolbar-small-tl,.x-btn-default-toolbar-small-bl,.x-btn-default-toolbar-small-tr,.x-btn-default-toolbar-small-br,.x-btn-default-toolbar-small-tc,.x-btn-default-toolbar-small-bc,.x-btn-default-toolbar-small-ml,.x-btn-default-toolbar-small-mr{zoom:1}.x-btn-default-toolbar-small-ml,.x-btn-default-toolbar-small-mr{zoom:1}.x-btn-default-toolbar-small-mc{padding:0}.x-strict .x-ie7 .x-btn-default-toolbar-small-tl,.x-strict .x-ie7 .x-btn-default-toolbar-small-bl{position:relative;right:0}.x-btn-default-toolbar-small .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px}.x-btn-default-toolbar-small .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-toolbar-small .x-btn-arrow-right{padding-right:12px}.x-btn-default-toolbar-small .x-rtl.x-btn-arrow-right{padding-right:0;padding-left:12px}.x-btn-default-toolbar-small .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-toolbar-small .x-btn-glyph{font-size:16px;line-height:16px;color:#333;opacity:.5}.x-ie8m .x-btn-default-toolbar-small .x-btn-glyph{color:#999}.x-btn-default-toolbar-small-disabled{border-color:#d7d7d7;background-image:none;background-color:transparent}.x-btn-default-toolbar-small-disabled .x-btn-inner{color:#8c8c8c}.x-btn-default-toolbar-small-icon .x-btn-button,.x-btn-default-toolbar-small-noicon .x-btn-button{height:16px}.x-btn-default-toolbar-small-icon .x-btn-inner,.x-btn-default-toolbar-small-noicon .x-btn-inner{line-height:16px}.x-btn-default-toolbar-small-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-small-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-small-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-toolbar-small-icon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-toolbar-small-noicon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-toolbar-small-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:4px;padding-left:0}.x-btn-default-toolbar-small-icon .x-btn-inner{width:16px;padding:0}.x-btn-default-toolbar-small-icon .x-btn-icon-el{width:16px;height:16px}.x-btn-default-toolbar-small-icon-text-left .x-btn-button{height:16px}.x-btn-default-toolbar-small-icon-text-left .x-btn-inner{line-height:16px;padding-left:20px}.x-btn-default-toolbar-small-icon-text-left .x-rtl.x-btn-inner{padding-left:4px;padding-right:20px}.x-btn-default-toolbar-small-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:20px}.x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el{width:16px;right:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-small-icon-text-left .x-btn-icon-el{height:16px}.x-btn-default-toolbar-small-icon-text-left .x-rtl.x-btn-icon-el{left:auto;right:0}.x-btn-default-toolbar-small-icon-text-right .x-btn-button{height:16px}.x-btn-default-toolbar-small-icon-text-right .x-btn-inner{line-height:16px;padding-right:20px}.x-btn-default-toolbar-small-icon-text-right .x-rtl.x-btn-inner{padding-right:4px;padding-left:20px}.x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el{width:16px;left:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-small-icon-text-right .x-btn-icon-el{height:16px}.x-btn-default-toolbar-small-icon-text-right .x-rtl.x-btn-icon-el{left:0;right:auto}.x-btn-default-toolbar-small-icon-text-top .x-btn-inner{padding-top:20px}.x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el{height:16px;bottom:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-toolbar-small-icon-text-bottom .x-btn-inner{padding-bottom:20px}.x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el{height:16px;top:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-toolbar-small-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-small-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-small-menu-active,.x-btn-default-toolbar-small-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d6d6d6),color-stop(48%,#dcdcdc),color-stop(52%,#deb6b7),color-stop(100%,#e1bebf));background-image:-webkit-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-moz-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-o-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf)}.x-btn-default-toolbar-small-over .x-frame-tl,.x-btn-default-toolbar-small-over .x-frame-bl,.x-btn-default-toolbar-small-over .x-frame-tr,.x-btn-default-toolbar-small-over .x-frame-br,.x-btn-default-toolbar-small-over .x-frame-tc,.x-btn-default-toolbar-small-over .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-over-corners.gif)}.x-btn-default-toolbar-small-over .x-frame-ml,.x-btn-default-toolbar-small-over .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-over-sides.gif)}.x-btn-default-toolbar-small-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-small-over-fbg.gif)}.x-btn-default-toolbar-small-focus .x-frame-tl,.x-btn-default-toolbar-small-focus .x-frame-bl,.x-btn-default-toolbar-small-focus .x-frame-tr,.x-btn-default-toolbar-small-focus .x-frame-br,.x-btn-default-toolbar-small-focus .x-frame-tc,.x-btn-default-toolbar-small-focus .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-focus-corners.gif)}.x-btn-default-toolbar-small-focus .x-frame-ml,.x-btn-default-toolbar-small-focus .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-focus-sides.gif)}.x-btn-default-toolbar-small-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-small-focus-fbg.gif)}.x-btn-default-toolbar-small-menu-active .x-frame-tl,.x-btn-default-toolbar-small-menu-active .x-frame-bl,.x-btn-default-toolbar-small-menu-active .x-frame-tr,.x-btn-default-toolbar-small-menu-active .x-frame-br,.x-btn-default-toolbar-small-menu-active .x-frame-tc,.x-btn-default-toolbar-small-menu-active .x-frame-bc,.x-btn-default-toolbar-small-pressed .x-frame-tl,.x-btn-default-toolbar-small-pressed .x-frame-bl,.x-btn-default-toolbar-small-pressed .x-frame-tr,.x-btn-default-toolbar-small-pressed .x-frame-br,.x-btn-default-toolbar-small-pressed .x-frame-tc,.x-btn-default-toolbar-small-pressed .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-pressed-corners.gif)}.x-btn-default-toolbar-small-menu-active .x-frame-ml,.x-btn-default-toolbar-small-menu-active .x-frame-mr,.x-btn-default-toolbar-small-pressed .x-frame-ml,.x-btn-default-toolbar-small-pressed .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-pressed-sides.gif)}.x-btn-default-toolbar-small-menu-active .x-frame-mc,.x-btn-default-toolbar-small-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif)}.x-btn-default-toolbar-small-disabled .x-frame-tl,.x-btn-default-toolbar-small-disabled .x-frame-bl,.x-btn-default-toolbar-small-disabled .x-frame-tr,.x-btn-default-toolbar-small-disabled .x-frame-br,.x-btn-default-toolbar-small-disabled .x-frame-tc,.x-btn-default-toolbar-small-disabled .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-small-disabled-corners.gif)}.x-btn-default-toolbar-small-disabled .x-frame-ml,.x-btn-default-toolbar-small-disabled .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)}.x-btn-default-toolbar-small-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-small-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-small-over-bg.gif)}.x-nlg .x-btn-default-toolbar-small-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-small-focus-bg.gif)}.x-nlg .x-btn-default-toolbar-small-menu-active,.x-nlg .x-btn-default-toolbar-small-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-small-pressed-bg.gif)}.x-btn-default-toolbar-small .x-btn-split-right{background-image:url(images/button/s-arrow-noline.gif);padding-right:14px}.x-btn-default-toolbar-small .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-noline-rtl.gif);padding-right:0;padding-left:14px}.x-btn-default-toolbar-small .x-btn-split-bottom{background-image:url(images/button/s-arrow-b-noline.gif);padding-bottom:14px}.x-btn-default-toolbar-small-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-toolbar-small-over .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-o-rtl.gif)}.x-btn-default-toolbar-small-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-toolbar-small-disabled{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-small-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-over-corners.gif), sides:url(images/btn/btn-default-toolbar-small-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-over-bg.gif)"}.x-btn-default-toolbar-small-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-small-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-focus-bg.gif)"}.x-btn-default-toolbar-small-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-small-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-small-pressed-bg.gif)"}.x-btn-default-toolbar-small-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-small-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)"}.x-btn-default-toolbar-medium{border-color:transparent}.x-btn-default-toolbar-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-medium-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-toolbar-medium{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3")}.x-btn-default-toolbar-medium-tl{background-position:0 -6px}.x-btn-default-toolbar-medium-tr{background-position:right -9px}.x-btn-default-toolbar-medium-bl{background-position:0 -12px}.x-btn-default-toolbar-medium-br{background-position:right -15px}.x-btn-default-toolbar-medium-ml{background-position:0 top}.x-btn-default-toolbar-medium-mr{background-position:right top}.x-btn-default-toolbar-medium-tc{background-position:0 0}.x-btn-default-toolbar-medium-bc{background-position:0 -3px}.x-btn-default-toolbar-medium-tr,.x-btn-default-toolbar-medium-br,.x-btn-default-toolbar-medium-mr{padding-right:3px}.x-btn-default-toolbar-medium-tl,.x-btn-default-toolbar-medium-bl,.x-btn-default-toolbar-medium-ml{padding-left:3px}.x-btn-default-toolbar-medium-tc{height:3px}.x-btn-default-toolbar-medium-bc{height:3px}.x-btn-default-toolbar-medium-tl,.x-btn-default-toolbar-medium-bl,.x-btn-default-toolbar-medium-tr,.x-btn-default-toolbar-medium-br,.x-btn-default-toolbar-medium-tc,.x-btn-default-toolbar-medium-bc,.x-btn-default-toolbar-medium-ml,.x-btn-default-toolbar-medium-mr{zoom:1}.x-btn-default-toolbar-medium-ml,.x-btn-default-toolbar-medium-mr{zoom:1}.x-btn-default-toolbar-medium-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-toolbar-medium-tl,.x-strict .x-ie7 .x-btn-default-toolbar-medium-bl{position:relative;right:0}.x-btn-default-toolbar-medium .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-toolbar-medium .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-toolbar-medium .x-btn-arrow-right{padding-right:12px}.x-btn-default-toolbar-medium .x-rtl.x-btn-arrow-right{padding-right:0;padding-left:12px}.x-btn-default-toolbar-medium .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-toolbar-medium .x-btn-glyph{font-size:24px;line-height:24px;color:#333;opacity:.5}.x-ie8m .x-btn-default-toolbar-medium .x-btn-glyph{color:#999}.x-btn-default-toolbar-medium-disabled{border-color:#d7d7d7;background-image:none;background-color:transparent}.x-btn-default-toolbar-medium-disabled .x-btn-inner{color:#8c8c8c}.x-btn-default-toolbar-medium-icon .x-btn-button,.x-btn-default-toolbar-medium-noicon .x-btn-button{height:24px}.x-btn-default-toolbar-medium-icon .x-btn-inner,.x-btn-default-toolbar-medium-noicon .x-btn-inner{line-height:24px}.x-btn-default-toolbar-medium-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-medium-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-medium-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-toolbar-medium-icon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-toolbar-medium-noicon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-toolbar-medium-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:3px;padding-left:0}.x-btn-default-toolbar-medium-icon .x-btn-inner{width:24px;padding:0}.x-btn-default-toolbar-medium-icon .x-btn-icon-el{width:24px;height:24px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-button{height:24px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-inner{line-height:24px;padding-left:28px}.x-btn-default-toolbar-medium-icon-text-left .x-rtl.x-btn-inner{padding-left:3px;padding-right:28px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:28px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el{width:24px;right:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon-el{height:24px}.x-btn-default-toolbar-medium-icon-text-left .x-rtl.x-btn-icon-el{left:auto;right:0}.x-btn-default-toolbar-medium-icon-text-right .x-btn-button{height:24px}.x-btn-default-toolbar-medium-icon-text-right .x-btn-inner{line-height:24px;padding-right:28px}.x-btn-default-toolbar-medium-icon-text-right .x-rtl.x-btn-inner{padding-right:3px;padding-left:28px}.x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el{width:24px;left:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon-el{height:24px}.x-btn-default-toolbar-medium-icon-text-right .x-rtl.x-btn-icon-el{left:0;right:auto}.x-btn-default-toolbar-medium-icon-text-top .x-btn-inner{padding-top:28px}.x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el{height:24px;bottom:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-inner{padding-bottom:28px}.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el{height:24px;top:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-toolbar-medium-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-medium-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-medium-menu-active,.x-btn-default-toolbar-medium-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d6d6d6),color-stop(48%,#dcdcdc),color-stop(52%,#deb6b7),color-stop(100%,#e1bebf));background-image:-webkit-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-moz-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-o-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf)}.x-btn-default-toolbar-medium-over .x-frame-tl,.x-btn-default-toolbar-medium-over .x-frame-bl,.x-btn-default-toolbar-medium-over .x-frame-tr,.x-btn-default-toolbar-medium-over .x-frame-br,.x-btn-default-toolbar-medium-over .x-frame-tc,.x-btn-default-toolbar-medium-over .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-over-corners.gif)}.x-btn-default-toolbar-medium-over .x-frame-ml,.x-btn-default-toolbar-medium-over .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-over-sides.gif)}.x-btn-default-toolbar-medium-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-medium-over-fbg.gif)}.x-btn-default-toolbar-medium-focus .x-frame-tl,.x-btn-default-toolbar-medium-focus .x-frame-bl,.x-btn-default-toolbar-medium-focus .x-frame-tr,.x-btn-default-toolbar-medium-focus .x-frame-br,.x-btn-default-toolbar-medium-focus .x-frame-tc,.x-btn-default-toolbar-medium-focus .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-focus-corners.gif)}.x-btn-default-toolbar-medium-focus .x-frame-ml,.x-btn-default-toolbar-medium-focus .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-focus-sides.gif)}.x-btn-default-toolbar-medium-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif)}.x-btn-default-toolbar-medium-menu-active .x-frame-tl,.x-btn-default-toolbar-medium-menu-active .x-frame-bl,.x-btn-default-toolbar-medium-menu-active .x-frame-tr,.x-btn-default-toolbar-medium-menu-active .x-frame-br,.x-btn-default-toolbar-medium-menu-active .x-frame-tc,.x-btn-default-toolbar-medium-menu-active .x-frame-bc,.x-btn-default-toolbar-medium-pressed .x-frame-tl,.x-btn-default-toolbar-medium-pressed .x-frame-bl,.x-btn-default-toolbar-medium-pressed .x-frame-tr,.x-btn-default-toolbar-medium-pressed .x-frame-br,.x-btn-default-toolbar-medium-pressed .x-frame-tc,.x-btn-default-toolbar-medium-pressed .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif)}.x-btn-default-toolbar-medium-menu-active .x-frame-ml,.x-btn-default-toolbar-medium-menu-active .x-frame-mr,.x-btn-default-toolbar-medium-pressed .x-frame-ml,.x-btn-default-toolbar-medium-pressed .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif)}.x-btn-default-toolbar-medium-menu-active .x-frame-mc,.x-btn-default-toolbar-medium-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif)}.x-btn-default-toolbar-medium-disabled .x-frame-tl,.x-btn-default-toolbar-medium-disabled .x-frame-bl,.x-btn-default-toolbar-medium-disabled .x-frame-tr,.x-btn-default-toolbar-medium-disabled .x-frame-br,.x-btn-default-toolbar-medium-disabled .x-frame-tc,.x-btn-default-toolbar-medium-disabled .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif)}.x-btn-default-toolbar-medium-disabled .x-frame-ml,.x-btn-default-toolbar-medium-disabled .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)}.x-btn-default-toolbar-medium-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-medium-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-medium-over-bg.gif)}.x-nlg .x-btn-default-toolbar-medium-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-medium-focus-bg.gif)}.x-nlg .x-btn-default-toolbar-medium-menu-active,.x-nlg .x-btn-default-toolbar-medium-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-medium-pressed-bg.gif)}.x-btn-default-toolbar-medium .x-btn-split-right{background-image:url(images/button/s-arrow-noline.gif);padding-right:14px}.x-btn-default-toolbar-medium .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-noline-rtl.gif);padding-right:0;padding-left:14px}.x-btn-default-toolbar-medium .x-btn-split-bottom{background-image:url(images/button/s-arrow-b-noline.gif);padding-bottom:14px}.x-btn-default-toolbar-medium-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-toolbar-medium-over .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-o-rtl.gif)}.x-btn-default-toolbar-medium-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-toolbar-medium-disabled{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-medium-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-over-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-over-bg.gif)"}.x-btn-default-toolbar-medium-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-focus-bg.gif)"}.x-btn-default-toolbar-medium-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-medium-pressed-bg.gif)"}.x-btn-default-toolbar-medium-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)"}.x-btn-default-toolbar-large{border-color:transparent}.x-btn-default-toolbar-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-large-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-default-toolbar-large{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-3-3-3-3")}.x-btn-default-toolbar-large-tl{background-position:0 -6px}.x-btn-default-toolbar-large-tr{background-position:right -9px}.x-btn-default-toolbar-large-bl{background-position:0 -12px}.x-btn-default-toolbar-large-br{background-position:right -15px}.x-btn-default-toolbar-large-ml{background-position:0 top}.x-btn-default-toolbar-large-mr{background-position:right top}.x-btn-default-toolbar-large-tc{background-position:0 0}.x-btn-default-toolbar-large-bc{background-position:0 -3px}.x-btn-default-toolbar-large-tr,.x-btn-default-toolbar-large-br,.x-btn-default-toolbar-large-mr{padding-right:3px}.x-btn-default-toolbar-large-tl,.x-btn-default-toolbar-large-bl,.x-btn-default-toolbar-large-ml{padding-left:3px}.x-btn-default-toolbar-large-tc{height:3px}.x-btn-default-toolbar-large-bc{height:3px}.x-btn-default-toolbar-large-tl,.x-btn-default-toolbar-large-bl,.x-btn-default-toolbar-large-tr,.x-btn-default-toolbar-large-br,.x-btn-default-toolbar-large-tc,.x-btn-default-toolbar-large-bc,.x-btn-default-toolbar-large-ml,.x-btn-default-toolbar-large-mr{zoom:1}.x-btn-default-toolbar-large-ml,.x-btn-default-toolbar-large-mr{zoom:1}.x-btn-default-toolbar-large-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-btn-default-toolbar-large-tl,.x-strict .x-ie7 .x-btn-default-toolbar-large-bl{position:relative;right:0}.x-btn-default-toolbar-large .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;padding:0 3px}.x-btn-default-toolbar-large .x-btn-arrow{background-image:url(images/button/arrow.gif)}.x-btn-default-toolbar-large .x-btn-arrow-right{padding-right:12px}.x-btn-default-toolbar-large .x-rtl.x-btn-arrow-right{padding-right:0;padding-left:12px}.x-btn-default-toolbar-large .x-btn-arrow-bottom{padding-bottom:12px}.x-btn-default-toolbar-large .x-btn-glyph{font-size:32px;line-height:32px;color:#333;opacity:.5}.x-ie8m .x-btn-default-toolbar-large .x-btn-glyph{color:#999}.x-btn-default-toolbar-large-disabled{border-color:#d7d7d7;background-image:none;background-color:transparent}.x-btn-default-toolbar-large-disabled .x-btn-inner{color:#8c8c8c}.x-btn-default-toolbar-large-icon .x-btn-button,.x-btn-default-toolbar-large-noicon .x-btn-button{height:32px}.x-btn-default-toolbar-large-icon .x-btn-inner,.x-btn-default-toolbar-large-noicon .x-btn-inner{line-height:32px}.x-btn-default-toolbar-large-icon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-large-noicon .x-btn-arrow-right .x-btn-inner,.x-btn-default-toolbar-large-icon-text-left .x-btn-arrow-right .x-btn-inner{padding-right:0}.x-btn-default-toolbar-large-icon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-toolbar-large-noicon .x-btn-arrow-right .x-rtl.x-btn-inner,.x-btn-default-toolbar-large-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:3px;padding-left:0}.x-btn-default-toolbar-large-icon .x-btn-inner{width:32px;padding:0}.x-btn-default-toolbar-large-icon .x-btn-icon-el{width:32px;height:32px}.x-btn-default-toolbar-large-icon-text-left .x-btn-button{height:32px}.x-btn-default-toolbar-large-icon-text-left .x-btn-inner{line-height:32px;padding-left:36px}.x-btn-default-toolbar-large-icon-text-left .x-rtl.x-btn-inner{padding-left:3px;padding-right:36px}.x-btn-default-toolbar-large-icon-text-left .x-btn-arrow-right .x-rtl.x-btn-inner{padding-right:36px}.x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el{width:32px;right:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-large-icon-text-left .x-btn-icon-el{height:32px}.x-btn-default-toolbar-large-icon-text-left .x-rtl.x-btn-icon-el{left:auto;right:0}.x-btn-default-toolbar-large-icon-text-right .x-btn-button{height:32px}.x-btn-default-toolbar-large-icon-text-right .x-btn-inner{line-height:32px;padding-right:36px}.x-btn-default-toolbar-large-icon-text-right .x-rtl.x-btn-inner{padding-right:3px;padding-left:36px}.x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el{width:32px;left:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el,.x-quirks .x-btn-default-toolbar-large-icon-text-right .x-btn-icon-el{height:32px}.x-btn-default-toolbar-large-icon-text-right .x-rtl.x-btn-icon-el{left:0;right:auto}.x-btn-default-toolbar-large-icon-text-top .x-btn-inner{padding-top:36px}.x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el{height:32px;bottom:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-top .x-btn-icon-el{width:100%}.x-btn-default-toolbar-large-icon-text-bottom .x-btn-inner{padding-bottom:36px}.x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el{height:32px;top:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el,.x-quirks .x-ie .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon-el{width:100%}.x-btn-default-toolbar-large-over{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-large-focus{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f3f3f3),color-stop(48%,#ededed),color-stop(52%,#dbdbdb),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-moz-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:-o-linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0);background-image:linear-gradient(top,#f3f3f3,#ededed 48%,#dbdbdb 52%,#e0e0e0)}.x-btn-default-toolbar-large-menu-active,.x-btn-default-toolbar-large-pressed{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d6d6d6),color-stop(48%,#dcdcdc),color-stop(52%,#deb6b7),color-stop(100%,#e1bebf));background-image:-webkit-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-moz-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:-o-linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf);background-image:linear-gradient(top,#d6d6d6,#dcdcdc 48%,#deb6b7 52%,#e1bebf)}.x-btn-default-toolbar-large-over .x-frame-tl,.x-btn-default-toolbar-large-over .x-frame-bl,.x-btn-default-toolbar-large-over .x-frame-tr,.x-btn-default-toolbar-large-over .x-frame-br,.x-btn-default-toolbar-large-over .x-frame-tc,.x-btn-default-toolbar-large-over .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-over-corners.gif)}.x-btn-default-toolbar-large-over .x-frame-ml,.x-btn-default-toolbar-large-over .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-over-sides.gif)}.x-btn-default-toolbar-large-over .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-large-over-fbg.gif)}.x-btn-default-toolbar-large-focus .x-frame-tl,.x-btn-default-toolbar-large-focus .x-frame-bl,.x-btn-default-toolbar-large-focus .x-frame-tr,.x-btn-default-toolbar-large-focus .x-frame-br,.x-btn-default-toolbar-large-focus .x-frame-tc,.x-btn-default-toolbar-large-focus .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-focus-corners.gif)}.x-btn-default-toolbar-large-focus .x-frame-ml,.x-btn-default-toolbar-large-focus .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-focus-sides.gif)}.x-btn-default-toolbar-large-focus .x-frame-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-large-focus-fbg.gif)}.x-btn-default-toolbar-large-menu-active .x-frame-tl,.x-btn-default-toolbar-large-menu-active .x-frame-bl,.x-btn-default-toolbar-large-menu-active .x-frame-tr,.x-btn-default-toolbar-large-menu-active .x-frame-br,.x-btn-default-toolbar-large-menu-active .x-frame-tc,.x-btn-default-toolbar-large-menu-active .x-frame-bc,.x-btn-default-toolbar-large-pressed .x-frame-tl,.x-btn-default-toolbar-large-pressed .x-frame-bl,.x-btn-default-toolbar-large-pressed .x-frame-tr,.x-btn-default-toolbar-large-pressed .x-frame-br,.x-btn-default-toolbar-large-pressed .x-frame-tc,.x-btn-default-toolbar-large-pressed .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-pressed-corners.gif)}.x-btn-default-toolbar-large-menu-active .x-frame-ml,.x-btn-default-toolbar-large-menu-active .x-frame-mr,.x-btn-default-toolbar-large-pressed .x-frame-ml,.x-btn-default-toolbar-large-pressed .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-pressed-sides.gif)}.x-btn-default-toolbar-large-menu-active .x-frame-mc,.x-btn-default-toolbar-large-pressed .x-frame-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif)}.x-btn-default-toolbar-large-disabled .x-frame-tl,.x-btn-default-toolbar-large-disabled .x-frame-bl,.x-btn-default-toolbar-large-disabled .x-frame-tr,.x-btn-default-toolbar-large-disabled .x-frame-br,.x-btn-default-toolbar-large-disabled .x-frame-tc,.x-btn-default-toolbar-large-disabled .x-frame-bc{background-image:url(images/btn/btn-default-toolbar-large-disabled-corners.gif)}.x-btn-default-toolbar-large-disabled .x-frame-ml,.x-btn-default-toolbar-large-disabled .x-frame-mr{background-image:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)}.x-btn-default-toolbar-large-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-large-over{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-large-over-bg.gif)}.x-nlg .x-btn-default-toolbar-large-focus{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-large-focus-bg.gif)}.x-nlg .x-btn-default-toolbar-large-menu-active,.x-nlg .x-btn-default-toolbar-large-pressed{background-repeat:repeat-x;background-image:url(images/btn/btn-default-toolbar-large-pressed-bg.gif)}.x-btn-default-toolbar-large .x-btn-split-right{background-image:url(images/button/s-arrow-noline.gif);padding-right:14px}.x-btn-default-toolbar-large .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-noline-rtl.gif);padding-right:0;padding-left:14px}.x-btn-default-toolbar-large .x-btn-split-bottom{background-image:url(images/button/s-arrow-b-noline.gif);padding-bottom:14px}.x-btn-default-toolbar-large-over .x-btn-split-right{background-image:url(images/button/s-arrow-o.gif)}.x-btn-default-toolbar-large-over .x-rtl.x-btn-split-right{background-image:url(images/button/s-arrow-o-rtl.gif)}.x-btn-default-toolbar-large-over .x-btn-split-bottom{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-default-toolbar-large-disabled{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-large-over:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-over-corners.gif), sides:url(images/btn/btn-default-toolbar-large-over-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-over-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-over-bg.gif)"}.x-btn-default-toolbar-large-focus:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-focus-corners.gif), sides:url(images/btn/btn-default-toolbar-large-focus-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-focus-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-focus-bg.gif)"}.x-btn-default-toolbar-large-pressed:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-pressed-corners.gif), sides:url(images/btn/btn-default-toolbar-large-pressed-sides.gif), frame-bg:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif), bg:url(images/btn/btn-default-toolbar-large-pressed-bg.gif)"}.x-btn-default-toolbar-large-disabled:after{display:none;content:"x-slicer:stretch:bottom, corners:url(images/btn/btn-default-toolbar-large-disabled-corners.gif), sides:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)"}.x-btn-icon-text-left .x-btn-icon-el{background-position:left center}.x-btn-icon-text-left .x-rtl.x-btn-icon-el{background-position:right center}.x-btn-icon-text-right .x-btn-icon-el{background-position:right center}.x-btn-icon-text-right .x-rtl.x-btn-icon-el{background-position:left center}.x-btn-icon-text-top .x-btn-icon-el{background-position:center top}.x-btn-icon-text-bottom .x-btn-icon-el{background-position:center bottom}.x-btn-arrow-right{background-position:right center}.x-rtl.x-btn-arrow-right{background-position:left center}.x-btn-arrow-bottom{background-position:center bottom}.x-btn-arrow{background-repeat:no-repeat}.x-btn-split{display:block;background-repeat:no-repeat}.x-btn-split-right{background-position:right center}.x-rtl.x-btn-split-right{background-position:0 center}.x-btn-split-bottom{background-position:center bottom}.x-cycle-fixed-width .x-btn-inner{text-align:inherit}.x-toolbar{font-size:11px;border-style:solid;padding:2px 0 2px 2px}.x-toolbar .x-toolbar-item{margin:0 2px 0 0}.x-toolbar .x-rtl.x-toolbar-item{margin:0 0 0 2px}.x-toolbar .x-toolbar-text{margin:0 6px 0 4px;color:black;line-height:16px;font-family:tahoma,arial,verdana,sans-serif;font-size:11px;font-weight:normal}.x-toolbar .x-toolbar-separator-horizontal{margin:0 2px 0 0;height:14px;border-style:none solid;border-width:0 1px;border-left-color:#aca899;border-right-color:white}.x-rtl.x-toolbar{padding:2px 2px 2px 0}.x-toolbar-footer{background:transparent;border:0;margin:3px 0 0;padding:2px 0 2px 6px}.x-toolbar-footer .x-toolbar-item{margin:0 6px 0 0}.x-toolbar-spacer{width:2px}.x-toolbar-more-icon{background-image:url(images/toolbar/more.gif)!important;background-position:center center!important;background-repeat:no-repeat}.x-toolbar-default{border-color:#bcb0b0;border-width:1px;background-image:none;background-color:#d8d8d8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e6e6e6),color-stop(100%,#efefef));background-image:-webkit-linear-gradient(top,#e6e6e6,#efefef);background-image:-moz-linear-gradient(top,#e6e6e6,#efefef);background-image:-o-linear-gradient(top,#e6e6e6,#efefef);background-image:linear-gradient(top,#e6e6e6,#efefef)}.x-toolbar-default .x-box-scroller{cursor:pointer}.x-toolbar-default .x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-nlg .x-toolbar-default{background-image:url(images/toolbar/toolbar-default-bg.gif)!important;background-repeat:repeat-x}.x-toolbar-default:after{display:none;content:"x-slicer:bg:url(images/toolbar/toolbar-default-bg.gif)"}.x-toolbar-scroll-left{background-image:url(images/toolbar/scroll-left.gif);background-position:-14px 0;width:14px;height:22px;border-style:solid;border-color:#8db2e3;border-width:0 0 1px;margin-top:0}.x-toolbar-scroll-left-hover{background-position:0 0}.x-toolbar-scroll-right{background-image:url(images/toolbar/scroll-right.gif);width:14px;height:22px;border-style:solid;border-color:#8db2e3;border-width:0 0 1px;margin-top:0}.x-toolbar-scroll-right-hover{background-position:-14px 0}.x-toolbar .x-box-menu-after{margin:0 2px 0 2px}.x-toolbar-vertical{padding:2px 2px 0 2px}.x-toolbar-vertical .x-toolbar-item{margin:0 0 2px 0}.x-toolbar-vertical .x-toolbar-text{margin:4px 0 6px 0}.x-toolbar-vertical .x-toolbar-separator-vertical{margin:0 5px 2px;border-style:solid none;border-width:1px 0;border-top-color:#aca899;border-bottom-color:white}.x-toolbar-vertical .x-box-menu-after{margin:2px 0 2px 0;display:block;float:none}.x-header-draggable .x-header-body,.x-header-ghost{cursor:move}.x-header-text{white-space:nowrap}.x-panel-ghost{filter:alpha(opacity=65);opacity:.65}.x-panel-default{border-color:#d0d0d0;padding:0}.x-panel-header-default{font-size:11px;border:1px solid #d0d0d0}.x-panel-header-default-horizontal{padding:4px 5px 4px 5px}.x-panel-header-default-horizontal-noborder{padding:5px 6px 4px 6px}.x-panel-header-default-vertical{padding:5px 4px 5px 4px}.x-panel-header-default-vertical-noborder{padding:6px 5px 6px 4px}.x-rtl.x-panel-header-default-vertical{padding:5px 4px 5px 4px}.x-rtl.x-panel-header-default-vertical-noborder{padding:6px 4px 6px 5px}.x-panel-header-text-container-default{color:#333;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;line-height:15px;padding:0 2px 1px;text-transform:none}.x-panel-body-default{background:white;border-color:#d0d0d0;color:black;font-size:12px;font-size:normal;border-width:1px;border-style:solid}.x-panel-header-default{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-vertical{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-rtl.x-panel-header-default-vertical{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:linear-gradient(left,#f0f0f0,#d7d7d7)}.x-nlg .x-panel-header-default-top{background:url(images/panel-header/panel-header-default-top-bg.gif)}.x-nlg .x-panel-header-default-bottom{background:url(images/panel-header/panel-header-default-bottom-bg.gif)}.x-nlg .x-panel-header-default-left{background:url(images/panel-header/panel-header-default-left-bg.gif) top right}.x-nlg .x-panel-header-default-right{background:url(images/panel-header/panel-header-default-right-bg.gif) top right}.x-nlg .x-rtl.x-panel-header-default-left{background:url(images/panel-header/panel-header-default-left-bg-rtl.gif)}.x-nlg .x-rtl.x-panel-header-default-right{background:url(images/panel-header/panel-header-default-right-bg-rtl.gif)}.x-panel .x-panel-header-default-collapsed-border-top{border-bottom-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-right{border-left-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-bottom{border-top-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-left{border-right-width:1px!important}.x-panel-header-default-top:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-top-bg.gif)"}.x-panel-header-default-bottom:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-bottom-bg.gif), stretch:top"}.x-panel-header-default-left:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-left-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-left-bg-rtl.gif), stretch:right"}.x-panel-header-default-right:after{display:none;content:"x-slicer:bg:url(images/panel-header/panel-header-default-right-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-right-bg-rtl.gif)"}.x-panel-header-default-vertical .x-panel-header-text-container{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-panel-header-default-vertical .x-panel-header-text-container{background-color:#d7d2d2;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1),progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2)}.x-panel-header-default-vertical .x-rtl.x-panel-header-text-container{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie9m .x-panel-header-default-vertical .x-rtl.x-panel-header-text-container{background-color:#d7d2d2;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3),progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2)}.x-panel-header-default-top{-webkit-box-shadow:#ececec 0 1px 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset}.x-panel-header-default-right{-webkit-box-shadow:#ececec -1px 0 0 0 inset;-moz-box-shadow:#ececec -1px 0 0 0 inset;box-shadow:#ececec -1px 0 0 0 inset}.x-panel-header-default-bottom{-webkit-box-shadow:#ececec 0 -1px 0 0 inset;-moz-box-shadow:#ececec 0 -1px 0 0 inset;box-shadow:#ececec 0 -1px 0 0 inset}.x-panel-header-default-left{-webkit-box-shadow:#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 1px 0 0 0 inset;box-shadow:#ececec 1px 0 0 0 inset}.x-panel-header-default .x-panel-header-icon{width:16px;height:16px;background-position:center center}.x-panel-header-default .x-panel-header-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8m .x-panel-header-default .x-panel-header-glyph{color:#858282}.x-panel-header-default-horizontal .x-panel-header-icon-before-title{margin:0 2px 0 0}.x-panel-header-default-horizontal .x-rtl.x-panel-header-icon-before-title{margin:0 0 0 2px}.x-panel-header-default-horizontal .x-panel-header-icon-after-title{margin:0 0 0 2px}.x-panel-header-default-horizontal .x-rtl.x-panel-header-icon-after-title{margin:0 2px 0 0}.x-panel-header-default-vertical .x-panel-header-icon-before-title{margin:0 0 2px 0}.x-panel-header-default-vertical .x-rtl.x-panel-header-icon-before-title{margin:0 0 2px 0}.x-panel-header-default-vertical .x-panel-header-icon-after-title{margin:2px 0 0 0}.x-panel-header-default-vertical .x-rtl.x-panel-header-icon-after-title{margin:2px 0 0 0}.x-panel-header-default-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-panel-header-default-horizontal .x-rtl.x-tool-after-title{margin:0 2px 0 0}.x-panel-header-default-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-panel-header-default-horizontal .x-rtl.x-tool-before-title{margin:0 0 0 2px}.x-panel-header-default-vertical .x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-vertical .x-rtl.x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-vertical .x-tool-before-title{margin:0 0 2px 0}.x-panel-header-default-vertical .x-rtl.x-tool-before-title{margin:0 0 2px 0}.x-rtl.x-panel-header-default-collapsed-border-right{border-right-width:1px!important}.x-rtl.x-panel-header-default-collapsed-border-left{border-left-width:1px!important}.x-panel-default-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-panel-default-framed{border-color:#d0d0d0;padding:4px}.x-panel-header-default-framed{font-size:11px;border:1px solid #d0d0d0}.x-panel-header-default-framed-horizontal{padding:4px 5px 4px 5px}.x-panel-header-default-framed-horizontal-noborder{padding:5px 6px 4px 6px}.x-panel-header-default-framed-vertical{padding:5px 4px 5px 4px}.x-panel-header-default-framed-vertical-noborder{padding:6px 5px 6px 4px}.x-rtl.x-panel-header-default-framed-vertical{padding:5px 4px 5px 4px}.x-rtl.x-panel-header-default-framed-vertical-noborder{padding:6px 4px 6px 5px}.x-panel-header-text-container-default-framed{color:#333;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;line-height:15px;padding:0 2px 1px;text-transform:none}.x-panel-body-default-framed{background:#f1f1f1;border-color:#d0d0d0;color:black;font-size:12px;font-size:normal;border-width:0;border-style:solid}.x-panel-default-framed{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#f1f1f1}.x-panel-default-framed-mc{background-color:#f1f1f1}.x-nbr .x-panel-default-framed{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-default-framed{background-image:url("about:blank#dh-4-4-4-4-1-1-1-1-4-4-4-4")}.x-panel-default-framed-tl{background-position:0 -8px}.x-panel-default-framed-tr{background-position:right -12px}.x-panel-default-framed-bl{background-position:0 -16px}.x-panel-default-framed-br{background-position:right -20px}.x-panel-default-framed-ml{background-position:0 top}.x-panel-default-framed-mr{background-position:right top}.x-panel-default-framed-tc{background-position:0 0}.x-panel-default-framed-bc{background-position:0 -4px}.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-mr{padding-right:4px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-ml{padding-left:4px}.x-panel-default-framed-tc{height:4px}.x-panel-default-framed-bc{height:4px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-tc,.x-panel-default-framed-bc,.x-panel-default-framed-ml,.x-panel-default-framed-mr{zoom:1;background-image:url(images/panel/panel-default-framed-corners.gif)}.x-panel-default-framed-ml,.x-panel-default-framed-mr{zoom:1;background-image:url(images/panel/panel-default-framed-sides.gif);background-repeat:repeat-y}.x-panel-default-framed-mc{padding:1px 1px 1px 1px}.x-strict .x-ie7 .x-panel-default-framed-tl,.x-strict .x-ie7 .x-panel-default-framed-bl{position:relative;right:0}.x-panel-default-framed:after{display:none;content:"x-slicer:corners:url(images/panel/panel-default-framed-corners.gif), sides:url(images/panel/panel-default-framed-sides.gif)"}.x-panel-header-default-framed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:4px 5px 4px 5px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-top-mc{background-image:url(images/panel-header/panel-header-default-framed-top-fbg.gif);background-position:0 top;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-top{background-image:url(images/panel-header/panel-header-default-framed-top-bg.gif);background-position:0 top}.x-nbr .x-panel-header-default-framed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-top{background-image:url("about:blank#dh-4-4-0-0-1-1-0-1-4-5-4-5")}.x-panel-header-default-framed-top-tl{background-position:0 -8px}.x-panel-header-default-framed-top-tr{background-position:right -12px}.x-panel-header-default-framed-top-bl{background-position:0 -16px}.x-panel-header-default-framed-top-br{background-position:right -20px}.x-panel-header-default-framed-top-ml{background-position:0 top}.x-panel-header-default-framed-top-mr{background-position:right top}.x-panel-header-default-framed-top-tc{background-position:0 0}.x-panel-header-default-framed-top-bc{background-position:0 -4px}.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-mr{padding-right:4px}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-ml{padding-left:4px}.x-panel-header-default-framed-top-tc{height:4px}.x-panel-header-default-framed-top-bc{height:0}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-tc,.x-panel-header-default-framed-top-bc,.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-top-corners.gif)}.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-top-sides.gif)}.x-panel-header-default-framed-top-mc{padding:1px 2px 4px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-top-tl,.x-strict .x-ie7 .x-panel-header-default-framed-top-bl{position:relative;right:0}.x-panel-header-default-framed-top:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-top-sides.gif)"}.x-panel-header-default-framed-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 4px 5px 4px;border-width:1px 1px 1px 0;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-rtl.x-panel-header-default-framed-right{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:linear-gradient(left,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-right-fbg.gif);background-position:right 0;background-color:#d7d2d2}.x-rtl.x-panel-header-default-framed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-right-fbg-rtl.gif);background-position:0 0}.x-nlg .x-panel-header-default-framed-right{background-image:url(images/panel-header/panel-header-default-framed-right-bg.gif);background-position:right 0}.x-nlg .x-rtl.x-panel-header-default-framed-right{background-image:url(images/panel-header/panel-header-default-framed-right-bg-rtl.gif);background-position:0 0}.x-nbr .x-panel-header-default-framed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-right{background-image:url("about:blank#dv-0-4-4-0-1-1-1-0-5-4-5-4")}.x-panel-header-default-framed-right-tl{background-position:0 0}.x-panel-header-default-framed-right-tr{background-position:0 -4px}.x-panel-header-default-framed-right-bl{background-position:0 -8px}.x-panel-header-default-framed-right-br{background-position:0 -12px}.x-panel-header-default-framed-right-ml{background-position:-4px 0}.x-panel-header-default-framed-right-mr{background-position:right 0}.x-panel-header-default-framed-right-tc{background-position:right 0}.x-panel-header-default-framed-right-bc{background-position:right -4px}.x-rtl.x-panel-header-default-framed-right-tc{background-position:0 0}.x-rtl.x-panel-header-default-framed-right-bc{background-position:0 -4px}.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-mr{padding-right:4px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-ml{padding-left:0}.x-panel-header-default-framed-right-tc{height:4px}.x-panel-header-default-framed-right-bc{height:4px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-bc,.x-panel-header-default-framed-right-ml,.x-panel-header-default-framed-right-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-right-corners.gif)}.x-rtl.x-panel-header-default-framed-right-tl,.x-rtl.x-panel-header-default-framed-right-ml,.x-rtl.x-panel-header-default-framed-right-bl,.x-rtl.x-panel-header-default-framed-right-tr,.x-rtl.x-panel-header-default-framed-right-mr,.x-rtl.x-panel-header-default-framed-right-br{background-image:url(images/panel-header/panel-header-default-framed-right-corners-rtl.gif)}.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-right-sides.gif);background-repeat:repeat-x}.x-rtl.x-panel-header-default-framed-right-tc,.x-rtl.x-panel-header-default-framed-right-bc{background-image:url(images/panel-header/panel-header-default-framed-right-sides-rtl.gif)}.x-panel-header-default-framed-right-mc{padding:2px 1px 2px 4px}.x-strict .x-ie7 .x-panel-header-default-framed-right-tl,.x-strict .x-ie7 .x-panel-header-default-framed-right-bl{position:relative;right:0}.x-panel-header-default-framed-right:after{display:none;content:"x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-right-fbg.gif), frame-bg-rtl:url(images/panel-header/panel-header-default-framed-right-fbg-rtl.gif), bg:url(images/panel-header/panel-header-default-framed-right-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-framed-right-bg-rtl.gif), corners:url(images/panel-header/panel-header-default-framed-right-corners.gif), corners-rtl:url(images/panel-header/panel-header-default-framed-right-corners-rtl.gif), sides:url(images/panel-header/panel-header-default-framed-right-sides.gif), sides-rtl:url(images/panel-header/panel-header-default-framed-right-sides-rtl.gif)"}.x-panel-header-default-framed-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:0 1px 1px 1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-bottom-mc{background-image:url(images/panel-header/panel-header-default-framed-bottom-fbg.gif);background-position:0 bottom;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-bottom{background-image:url(images/panel-header/panel-header-default-framed-bottom-bg.gif);background-position:0 bottom}.x-nbr .x-panel-header-default-framed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-bottom{background-image:url("about:blank#dh-0-0-4-4-0-1-1-1-4-5-4-5")}.x-panel-header-default-framed-bottom-tl{background-position:0 -8px}.x-panel-header-default-framed-bottom-tr{background-position:right -12px}.x-panel-header-default-framed-bottom-bl{background-position:0 -16px}.x-panel-header-default-framed-bottom-br{background-position:right -20px}.x-panel-header-default-framed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-bottom-bc{background-position:0 -4px}.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-mr{padding-right:4px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-ml{padding-left:4px}.x-panel-header-default-framed-bottom-tc{height:0}.x-panel-header-default-framed-bottom-bc{height:4px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-tc,.x-panel-header-default-framed-bottom-bc,.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-bottom-corners.gif)}.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-bottom-sides.gif)}.x-panel-header-default-framed-bottom-mc{padding:4px 2px 1px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-bottom-tl,.x-strict .x-ie7 .x-panel-header-default-framed-bottom-bl{position:relative;right:0}.x-panel-header-default-framed-bottom:after{display:none;content:"x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-bottom-sides.gif)"}.x-panel-header-default-framed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 4px 5px 4px;border-width:1px 0 1px 1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-rtl.x-panel-header-default-framed-left{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:linear-gradient(left,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-left-fbg.gif);background-position:left 0;background-color:#d7d2d2}.x-rtl.x-panel-header-default-framed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-left-fbg-rtl.gif);background-position:right 0}.x-nlg .x-panel-header-default-framed-left{background-image:url(images/panel-header/panel-header-default-framed-left-bg.gif);background-position:left 0}.x-nlg .x-rtl.x-panel-header-default-framed-left{background-image:url(images/panel-header/panel-header-default-framed-left-bg-rtl.gif);background-position:right 0}.x-nbr .x-panel-header-default-framed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-left{background-image:url("about:blank#dv-4-0-0-4-1-0-1-1-5-4-5-4")}.x-panel-header-default-framed-left-tl{background-position:0 0}.x-panel-header-default-framed-left-tr{background-position:0 -4px}.x-panel-header-default-framed-left-bl{background-position:0 -8px}.x-panel-header-default-framed-left-br{background-position:0 -12px}.x-panel-header-default-framed-left-ml{background-position:-4px 0}.x-panel-header-default-framed-left-mr{background-position:right 0}.x-panel-header-default-framed-left-tc{background-position:left 0}.x-panel-header-default-framed-left-bc{background-position:left -4px}.x-rtl.x-panel-header-default-framed-left-tc{background-position:right 0}.x-rtl.x-panel-header-default-framed-left-bc{background-position:right -4px}.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-mr{padding-right:0}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-ml{padding-left:4px}.x-panel-header-default-framed-left-tc{height:4px}.x-panel-header-default-framed-left-bc{height:4px}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-tc,.x-panel-header-default-framed-left-bc,.x-panel-header-default-framed-left-ml,.x-panel-header-default-framed-left-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-left-corners.gif)}.x-rtl.x-panel-header-default-framed-left-tl,.x-rtl.x-panel-header-default-framed-left-ml,.x-rtl.x-panel-header-default-framed-left-bl,.x-rtl.x-panel-header-default-framed-left-tr,.x-rtl.x-panel-header-default-framed-left-mr,.x-rtl.x-panel-header-default-framed-left-br{background-image:url(images/panel-header/panel-header-default-framed-left-corners-rtl.gif)}.x-panel-header-default-framed-left-tc,.x-panel-header-default-framed-left-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-left-sides.gif);background-repeat:repeat-x}.x-rtl.x-panel-header-default-framed-left-tc,.x-rtl.x-panel-header-default-framed-left-bc{background-image:url(images/panel-header/panel-header-default-framed-left-sides-rtl.gif)}.x-panel-header-default-framed-left-mc{padding:2px 4px 2px 1px}.x-strict .x-ie7 .x-panel-header-default-framed-left-tl,.x-strict .x-ie7 .x-panel-header-default-framed-left-bl{position:relative;right:0}.x-panel-header-default-framed-left:after{display:none;content:"x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-left-fbg.gif), frame-bg-rtl:url(images/panel-header/panel-header-default-framed-left-fbg-rtl.gif), bg:url(images/panel-header/panel-header-default-framed-left-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-framed-left-bg-rtl.gif), corners:url(images/panel-header/panel-header-default-framed-left-corners.gif), corners-rtl:url(images/panel-header/panel-header-default-framed-left-corners-rtl.gif), sides:url(images/panel-header/panel-header-default-framed-left-sides.gif), sides-rtl:url(images/panel-header/panel-header-default-framed-left-sides-rtl.gif)"}.x-panel-header-default-framed-collapsed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-top-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif);background-position:0 top;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-collapsed-top{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif);background-position:0 top}.x-nbr .x-panel-header-default-framed-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-collapsed-top{background-image:url("about:blank#dh-4-4-4-4-1-1-1-1-4-5-4-5")}.x-panel-header-default-framed-collapsed-top-tl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-top-tr{background-position:right -12px}.x-panel-header-default-framed-collapsed-top-bl{background-position:0 -16px}.x-panel-header-default-framed-collapsed-top-br{background-position:right -20px}.x-panel-header-default-framed-collapsed-top-ml{background-position:0 top}.x-panel-header-default-framed-collapsed-top-mr{background-position:right top}.x-panel-header-default-framed-collapsed-top-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-top-bc{background-position:0 -4px}.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-top-tc{height:4px}.x-panel-header-default-framed-collapsed-top-bc{height:4px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-tc,.x-panel-header-default-framed-collapsed-top-bc,.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif)}.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif)}.x-panel-header-default-framed-collapsed-top-mc{padding:1px 2px 1px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-top-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-top:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-top-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif)"}.x-panel-header-default-framed-collapsed-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-rtl.x-panel-header-default-framed-collapsed-right{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:linear-gradient(left,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif);background-position:right 0;background-color:#d7d2d2}.x-rtl.x-panel-header-default-framed-collapsed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif);background-position:0 0}.x-nlg .x-panel-header-default-framed-collapsed-right{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif);background-position:right 0}.x-nlg .x-rtl.x-panel-header-default-framed-collapsed-right{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-bg-rtl.gif);background-position:0 0}.x-nbr .x-panel-header-default-framed-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-collapsed-right{background-image:url("about:blank#dv-4-4-4-4-1-1-1-1-5-4-5-4")}.x-panel-header-default-framed-collapsed-right-tl{background-position:0 0}.x-panel-header-default-framed-collapsed-right-tr{background-position:0 -4px}.x-panel-header-default-framed-collapsed-right-bl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-right-br{background-position:0 -12px}.x-panel-header-default-framed-collapsed-right-ml{background-position:-4px 0}.x-panel-header-default-framed-collapsed-right-mr{background-position:right 0}.x-panel-header-default-framed-collapsed-right-tc{background-position:right 0}.x-panel-header-default-framed-collapsed-right-bc{background-position:right -4px}.x-rtl.x-panel-header-default-framed-collapsed-right-tc{background-position:0 0}.x-rtl.x-panel-header-default-framed-collapsed-right-bc{background-position:0 -4px}.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-right-tc{height:4px}.x-panel-header-default-framed-collapsed-right-bc{height:4px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-tc,.x-panel-header-default-framed-collapsed-right-bc,.x-panel-header-default-framed-collapsed-right-ml,.x-panel-header-default-framed-collapsed-right-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif)}.x-rtl.x-panel-header-default-framed-collapsed-right-tl,.x-rtl.x-panel-header-default-framed-collapsed-right-ml,.x-rtl.x-panel-header-default-framed-collapsed-right-bl,.x-rtl.x-panel-header-default-framed-collapsed-right-tr,.x-rtl.x-panel-header-default-framed-collapsed-right-mr,.x-rtl.x-panel-header-default-framed-collapsed-right-br{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif)}.x-panel-header-default-framed-collapsed-right-tc,.x-panel-header-default-framed-collapsed-right-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif);background-repeat:repeat-x}.x-rtl.x-panel-header-default-framed-collapsed-right-tc,.x-rtl.x-panel-header-default-framed-collapsed-right-bc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif)}.x-panel-header-default-framed-collapsed-right-mc{padding:2px 1px 2px 1px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-right-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-right:after{display:none;content:"x-slicer:stretch:left, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif), frame-bg-rtl:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-right-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-framed-collapsed-right-bg-rtl.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif), corners-rtl:url(images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif), sides-rtl:url(images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif)"}.x-panel-header-default-framed-collapsed-bottom{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-bottom-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif);background-position:0 bottom;background-color:#d7d2d2}.x-nlg .x-panel-header-default-framed-collapsed-bottom{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif);background-position:0 bottom}.x-nbr .x-panel-header-default-framed-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-collapsed-bottom{background-image:url("about:blank#dh-4-4-4-4-1-1-1-1-4-5-4-5")}.x-panel-header-default-framed-collapsed-bottom-tl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-bottom-tr{background-position:right -12px}.x-panel-header-default-framed-collapsed-bottom-bl{background-position:0 -16px}.x-panel-header-default-framed-collapsed-bottom-br{background-position:right -20px}.x-panel-header-default-framed-collapsed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-collapsed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-collapsed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-bottom-bc{background-position:0 -4px}.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-bottom-tc{height:4px}.x-panel-header-default-framed-collapsed-bottom-bc{height:4px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-tc,.x-panel-header-default-framed-collapsed-bottom-bc,.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif)}.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif)}.x-panel-header-default-framed-collapsed-bottom-mc{padding:1px 2px 1px 2px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-bottom-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-bottom:after{display:none;content:"x-slicer:stretch:top, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif)"}.x-panel-header-default-framed-collapsed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-rtl.x-panel-header-default-framed-collapsed-left{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(left,#f0f0f0,#d7d7d7);background-image:linear-gradient(left,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif);background-position:left 0;background-color:#d7d2d2}.x-rtl.x-panel-header-default-framed-collapsed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif);background-position:right 0}.x-nlg .x-panel-header-default-framed-collapsed-left{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif);background-position:left 0}.x-nlg .x-rtl.x-panel-header-default-framed-collapsed-left{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-bg-rtl.gif);background-position:right 0}.x-nbr .x-panel-header-default-framed-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-panel-header-default-framed-collapsed-left{background-image:url("about:blank#dv-4-4-4-4-1-1-1-1-5-4-5-4")}.x-panel-header-default-framed-collapsed-left-tl{background-position:0 0}.x-panel-header-default-framed-collapsed-left-tr{background-position:0 -4px}.x-panel-header-default-framed-collapsed-left-bl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-left-br{background-position:0 -12px}.x-panel-header-default-framed-collapsed-left-ml{background-position:-4px 0}.x-panel-header-default-framed-collapsed-left-mr{background-position:right 0}.x-panel-header-default-framed-collapsed-left-tc{background-position:left 0}.x-panel-header-default-framed-collapsed-left-bc{background-position:left -4px}.x-rtl.x-panel-header-default-framed-collapsed-left-tc{background-position:right 0}.x-rtl.x-panel-header-default-framed-collapsed-left-bc{background-position:right -4px}.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-left-tc{height:4px}.x-panel-header-default-framed-collapsed-left-bc{height:4px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-tc,.x-panel-header-default-framed-collapsed-left-bc,.x-panel-header-default-framed-collapsed-left-ml,.x-panel-header-default-framed-collapsed-left-mr{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif)}.x-rtl.x-panel-header-default-framed-collapsed-left-tl,.x-rtl.x-panel-header-default-framed-collapsed-left-ml,.x-rtl.x-panel-header-default-framed-collapsed-left-bl,.x-rtl.x-panel-header-default-framed-collapsed-left-tr,.x-rtl.x-panel-header-default-framed-collapsed-left-mr,.x-rtl.x-panel-header-default-framed-collapsed-left-br{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif)}.x-panel-header-default-framed-collapsed-left-tc,.x-panel-header-default-framed-collapsed-left-bc{zoom:1;background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif);background-repeat:repeat-x}.x-rtl.x-panel-header-default-framed-collapsed-left-tc,.x-rtl.x-panel-header-default-framed-collapsed-left-bc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif)}.x-panel-header-default-framed-collapsed-left-mc{padding:2px 1px 2px 1px}.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-tl,.x-strict .x-ie7 .x-panel-header-default-framed-collapsed-left-bl{position:relative;right:0}.x-panel-header-default-framed-collapsed-left:after{display:none;content:"x-slicer:stretch:right, frame-bg:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif), frame-bg-rtl:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif), bg:url(images/panel-header/panel-header-default-framed-collapsed-left-bg.gif), bg-rtl:url(images/panel-header/panel-header-default-framed-collapsed-left-bg-rtl.gif), corners:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif), corners-rtl:url(images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif), sides:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif), sides-rtl:url(images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif)"}.x-panel .x-panel-header-default-framed-top{border-bottom-width:1px!important}.x-panel .x-panel-header-default-framed-right{border-left-width:1px!important}.x-panel .x-panel-header-default-framed-bottom{border-top-width:1px!important}.x-panel .x-panel-header-default-framed-left{border-right-width:1px!important}.x-nbr .x-panel-header-default-framed-collapsed-top{border-bottom-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-right{border-left-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-bottom{border-top-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-left{border-right-width:0!important}.x-panel-header-default-framed-vertical .x-panel-header-text-container{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-panel-header-default-framed-vertical .x-panel-header-text-container{background-color:#d7d2d2;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1),progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2)}.x-panel-header-default-framed-vertical .x-rtl.x-panel-header-text-container{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie9m .x-panel-header-default-framed-vertical .x-rtl.x-panel-header-text-container{background-color:#d7d2d2;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3),progid:DXImageTransform.Microsoft.Chroma(color=#d7d2d2)}.x-panel-header-default-framed-top{-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-panel-header-default-framed-right{-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset}.x-panel-header-default-framed-bottom{-webkit-box-shadow:#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-panel-header-default-framed-left{-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec 1px 0 0 0 inset}.x-panel-header-default-framed .x-panel-header-icon{width:16px;height:16px;background-position:center center}.x-panel-header-default-framed .x-panel-header-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8m .x-panel-header-default-framed .x-panel-header-glyph{color:#858282}.x-panel-header-default-framed-horizontal .x-panel-header-icon-before-title{margin:0 2px 0 0}.x-panel-header-default-framed-horizontal .x-rtl.x-panel-header-icon-before-title{margin:0 0 0 2px}.x-panel-header-default-framed-horizontal .x-panel-header-icon-after-title{margin:0 0 0 2px}.x-panel-header-default-framed-horizontal .x-rtl.x-panel-header-icon-after-title{margin:0 2px 0 0}.x-panel-header-default-framed-vertical .x-panel-header-icon-before-title{margin:0 0 2px 0}.x-panel-header-default-framed-vertical .x-rtl.x-panel-header-icon-before-title{margin:0 0 2px 0}.x-panel-header-default-framed-vertical .x-panel-header-icon-after-title{margin:2px 0 0 0}.x-panel-header-default-framed-vertical .x-rtl.x-panel-header-icon-after-title{margin:2px 0 0 0}.x-panel-header-default-framed-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-panel-header-default-framed-horizontal .x-rtl.x-tool-after-title{margin:0 2px 0 0}.x-panel-header-default-framed-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-panel-header-default-framed-horizontal .x-rtl.x-tool-before-title{margin:0 0 0 2px}.x-panel-header-default-framed-vertical .x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-framed-vertical .x-rtl.x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-framed-vertical .x-tool-before-title{margin:0 0 2px 0}.x-panel-header-default-framed-vertical .x-rtl.x-tool-before-title{margin:0 0 2px 0}.x-rtl.x-panel-header-default-framed-collapsed-border-right{border-right-width:1px!important}.x-rtl.x-panel-header-default-framed-collapsed-border-left{border-left-width:1px!important}.x-panel-default-framed-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-tip-anchor{position:absolute;overflow:hidden;height:0;width:0;border-style:solid;border-width:5px;border-color:#868686;zoom:1}.x-border-box .x-tip-anchor{width:10px;height:10px}.x-tip-anchor-top{border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-bottom{border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-bottom-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-left{border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-left-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-right{border-top-color:transparent;border-bottom-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-default{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:#ccc}.x-tip-default-mc{background-color:#ccc}.x-nbr .x-tip-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tip-default{background-image:url("about:blank#th-3-3-3-3-1-1-1-1-2-2-2-2")}.x-tip-default-tl{background-position:0 -6px}.x-tip-default-tr{background-position:right -9px}.x-tip-default-bl{background-position:0 -12px}.x-tip-default-br{background-position:right -15px}.x-tip-default-ml{background-position:0 top}.x-tip-default-mr{background-position:right top}.x-tip-default-tc{background-position:0 0}.x-tip-default-bc{background-position:0 -3px}.x-tip-default-tr,.x-tip-default-br,.x-tip-default-mr{padding-right:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-ml{padding-left:3px}.x-tip-default-tc{height:3px}.x-tip-default-bc{height:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-tr,.x-tip-default-br,.x-tip-default-tc,.x-tip-default-bc,.x-tip-default-ml,.x-tip-default-mr{zoom:1;background-image:url(images/tip/tip-default-corners.gif)}.x-tip-default-ml,.x-tip-default-mr{zoom:1;background-image:url(images/tip/tip-default-sides.gif);background-repeat:repeat-y}.x-tip-default-mc{padding:0}.x-strict .x-ie7 .x-tip-default-tl,.x-strict .x-ie7 .x-tip-default-bl{position:relative;right:0}.x-tip-default:after{display:none;content:"x-slicer:corners:url(images/tip/tip-default-corners.gif), sides:url(images/tip/tip-default-sides.gif)"}.x-tip-default{border-color:#868686}.x-tip-default .x-tool-img{background-color:#ccc}.x-tip-header-default .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-default .x-rtl.x-tool-after-title{margin:0 6px 0 0}.x-tip-header-default .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-default .x-rtl.x-tool-before-title{margin:0 0 0 6px}.x-tip-header-body-default{padding:3px 3px 0 3px}.x-tip-header-text-container-default{color:#444;font-size:11px;font-weight:bold}.x-tip-body-default{padding:3px;color:#444;font-size:11px;font-weight:normal}.x-tip-body-default a{color:#2a2a2a}.x-tip-form-invalid{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:white}.x-tip-form-invalid-mc{background-color:white}.x-nbr .x-tip-form-invalid{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tip-form-invalid{background-image:url("about:blank#th-5-5-5-5-1-1-1-1-4-4-4-4")}.x-tip-form-invalid-tl{background-position:0 -10px}.x-tip-form-invalid-tr{background-position:right -15px}.x-tip-form-invalid-bl{background-position:0 -20px}.x-tip-form-invalid-br{background-position:right -25px}.x-tip-form-invalid-ml{background-position:0 top}.x-tip-form-invalid-mr{background-position:right top}.x-tip-form-invalid-tc{background-position:0 0}.x-tip-form-invalid-bc{background-position:0 -5px}.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-mr{padding-right:5px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-ml{padding-left:5px}.x-tip-form-invalid-tc{height:5px}.x-tip-form-invalid-bc{height:5px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-tc,.x-tip-form-invalid-bc,.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{zoom:1;background-image:url(images/tip/tip-form-invalid-corners.gif)}.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{zoom:1;background-image:url(images/tip/tip-form-invalid-sides.gif);background-repeat:repeat-y}.x-tip-form-invalid-mc{padding:0}.x-strict .x-ie7 .x-tip-form-invalid-tl,.x-strict .x-ie7 .x-tip-form-invalid-bl{position:relative;right:0}.x-tip-form-invalid:after{display:none;content:"x-slicer:corners:url(images/tip/tip-form-invalid-corners.gif), sides:url(images/tip/tip-form-invalid-sides.gif)"}.x-tip-form-invalid{border-color:#a1311f;-webkit-box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset;-moz-box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset;box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset}.x-tip-form-invalid .x-tool-img{background-color:white}.x-tip-header-form-invalid .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-form-invalid .x-rtl.x-tool-after-title{margin:0 6px 0 0}.x-tip-header-form-invalid .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-form-invalid .x-rtl.x-tool-before-title{margin:0 0 0 6px}.x-tip-header-body-form-invalid{padding:3px 3px 0 3px}.x-tip-header-text-container-form-invalid{color:#444;font-size:11px;font-weight:bold}.x-tip-body-form-invalid{padding:3px 3px 3px 22px;color:#444;font-size:11px;font-weight:normal}.x-tip-body-form-invalid a{color:#2a2a2a}.x-tip-body-form-invalid{background:1px 1px no-repeat;background-image:url(images/form/exclamation.gif)}.x-tip-body-form-invalid li{margin-bottom:4px}.x-tip-body-form-invalid li.last{margin-bottom:0}.x-btn-group-default{border-color:#d0d0d0;-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-btn-group-header-default{margin:2px 2px 0 2px;padding:1px 0;line-height:15px;background:#dfdfdf;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.x-btn-group-header-default .x-tool-img{background-color:#dfdfdf}.x-btn-group-header-text-container-default{font:normal 11px tahoma,arial,verdana,sans-serif;line-height:15px;color:#666}.x-btn-group-body-default{padding:0 1px}.x-btn-group-body-default .x-table-layout{border-spacing:0}.x-btn-group-default-framed{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;padding:1px 1px 1px 1px;border-width:1px;border-style:solid;background-color:#d6d6d6}.x-btn-group-default-framed-mc{background-color:#d6d6d6}.x-nbr .x-btn-group-default-framed{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-group-default-framed{background-image:url("about:blank#dh-2-2-2-2-1-1-1-1-1-1-1-1")}.x-btn-group-default-framed-tl{background-position:0 -4px}.x-btn-group-default-framed-tr{background-position:right -6px}.x-btn-group-default-framed-bl{background-position:0 -8px}.x-btn-group-default-framed-br{background-position:right -10px}.x-btn-group-default-framed-ml{background-position:0 top}.x-btn-group-default-framed-mr{background-position:right top}.x-btn-group-default-framed-tc{background-position:0 0}.x-btn-group-default-framed-bc{background-position:0 -2px}.x-btn-group-default-framed-tr,.x-btn-group-default-framed-br,.x-btn-group-default-framed-mr{padding-right:2px}.x-btn-group-default-framed-tl,.x-btn-group-default-framed-bl,.x-btn-group-default-framed-ml{padding-left:2px}.x-btn-group-default-framed-tc{height:2px}.x-btn-group-default-framed-bc{height:2px}.x-btn-group-default-framed-tl,.x-btn-group-default-framed-bl,.x-btn-group-default-framed-tr,.x-btn-group-default-framed-br,.x-btn-group-default-framed-tc,.x-btn-group-default-framed-bc,.x-btn-group-default-framed-ml,.x-btn-group-default-framed-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-corners.gif)}.x-btn-group-default-framed-ml,.x-btn-group-default-framed-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-sides.gif);background-repeat:repeat-y}.x-btn-group-default-framed-mc{padding:0}.x-strict .x-ie7 .x-btn-group-default-framed-tl,.x-strict .x-ie7 .x-btn-group-default-framed-bl{position:relative;right:0}.x-btn-group-default-framed:after{display:none;content:"x-slicer:corners:url(images/btn-group/btn-group-default-framed-corners.gif), sides:url(images/btn-group/btn-group-default-framed-sides.gif)"}.x-btn-group-default-framed-notitle{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;padding:1px 1px 1px 1px;border-width:1px;border-style:solid;background-color:#d6d6d6}.x-btn-group-default-framed-notitle-mc{background-color:#d6d6d6}.x-nbr .x-btn-group-default-framed-notitle{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-btn-group-default-framed-notitle{background-image:url("about:blank#dh-2-2-2-2-1-1-1-1-1-1-1-1")}.x-btn-group-default-framed-notitle-tl{background-position:0 -4px}.x-btn-group-default-framed-notitle-tr{background-position:right -6px}.x-btn-group-default-framed-notitle-bl{background-position:0 -8px}.x-btn-group-default-framed-notitle-br{background-position:right -10px}.x-btn-group-default-framed-notitle-ml{background-position:0 top}.x-btn-group-default-framed-notitle-mr{background-position:right top}.x-btn-group-default-framed-notitle-tc{background-position:0 0}.x-btn-group-default-framed-notitle-bc{background-position:0 -2px}.x-btn-group-default-framed-notitle-tr,.x-btn-group-default-framed-notitle-br,.x-btn-group-default-framed-notitle-mr{padding-right:2px}.x-btn-group-default-framed-notitle-tl,.x-btn-group-default-framed-notitle-bl,.x-btn-group-default-framed-notitle-ml{padding-left:2px}.x-btn-group-default-framed-notitle-tc{height:2px}.x-btn-group-default-framed-notitle-bc{height:2px}.x-btn-group-default-framed-notitle-tl,.x-btn-group-default-framed-notitle-bl,.x-btn-group-default-framed-notitle-tr,.x-btn-group-default-framed-notitle-br,.x-btn-group-default-framed-notitle-tc,.x-btn-group-default-framed-notitle-bc,.x-btn-group-default-framed-notitle-ml,.x-btn-group-default-framed-notitle-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-notitle-corners.gif)}.x-btn-group-default-framed-notitle-ml,.x-btn-group-default-framed-notitle-mr{zoom:1;background-image:url(images/btn-group/btn-group-default-framed-notitle-sides.gif);background-repeat:repeat-y}.x-btn-group-default-framed-notitle-mc{padding:0}.x-strict .x-ie7 .x-btn-group-default-framed-notitle-tl,.x-strict .x-ie7 .x-btn-group-default-framed-notitle-bl{position:relative;right:0}.x-btn-group-default-framed-notitle:after{display:none;content:"x-slicer:corners:url(images/btn-group/btn-group-default-framed-notitle-corners.gif), sides:url(images/btn-group/btn-group-default-framed-notitle-sides.gif)"}.x-btn-group-default-framed{border-color:#d0d0d0;-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-btn-group-header-default-framed{margin:2px 2px 0 2px;padding:1px 0;line-height:15px;background:#dfdfdf;-moz-border-radius-topleft:2px;-webkit-border-top-left-radius:2px;border-top-left-radius:2px;-moz-border-radius-topright:2px;-webkit-border-top-right-radius:2px;border-top-right-radius:2px}.x-btn-group-header-default-framed .x-tool-img{background-color:#dfdfdf}.x-btn-group-header-text-container-default-framed{font:normal 11px tahoma,arial,verdana,sans-serif;line-height:15px;color:#666}.x-btn-group-body-default-framed{padding:0 1px 0 1px}.x-btn-group-body-default-framed .x-table-layout{border-spacing:0}.x-window-ghost{filter:alpha(opacity=65);opacity:.65}.x-window-default{border-color:#a9a9a9;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-default{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-default-mc{background-color:#e8e8e8}.x-nbr .x-window-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-default{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-4-4-4-4")}.x-window-default-tl{background-position:0 -10px}.x-window-default-tr{background-position:right -15px}.x-window-default-bl{background-position:0 -20px}.x-window-default-br{background-position:right -25px}.x-window-default-ml{background-position:0 top}.x-window-default-mr{background-position:right top}.x-window-default-tc{background-position:0 0}.x-window-default-bc{background-position:0 -5px}.x-window-default-tr,.x-window-default-br,.x-window-default-mr{padding-right:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-ml{padding-left:5px}.x-window-default-tc{height:5px}.x-window-default-bc{height:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-tr,.x-window-default-br,.x-window-default-tc,.x-window-default-bc,.x-window-default-ml,.x-window-default-mr{zoom:1;background-image:url(images/window/window-default-corners.gif)}.x-window-default-ml,.x-window-default-mr{zoom:1;background-image:url(images/window/window-default-sides.gif);background-repeat:repeat-y}.x-window-default-mc{padding:0}.x-strict .x-ie7 .x-window-default-tl,.x-strict .x-ie7 .x-window-default-bl{position:relative;right:0}.x-window-default:after{display:none;content:"x-slicer:corners:url(images/window/window-default-corners.gif), sides:url(images/window/window-default-sides.gif)"}.x-window-body-default{border-color:#bcb1b0;border-width:1px;border-style:solid;background:#e0e0e0;color:black}.x-window-header-default{font-size:11px;border-color:#a9a9a9;zoom:1;background-color:#e8e8e8}.x-window-header-default .x-tool-img{background-color:#e8e8e8}.x-window-header-default-vertical .x-window-header-text-container{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-window-header-default-vertical .x-window-header-text-container{background-color:#e8e8e8;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1),progid:DXImageTransform.Microsoft.Chroma(color=#e8e8e8)}.x-window-header-default-vertical .x-rtl.x-window-header-text-container{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie9m .x-window-header-default-vertical .x-rtl.x-window-header-text-container{background-color:#e8e8e8;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3),progid:DXImageTransform.Microsoft.Chroma(color=#e8e8e8)}.x-window-header-text-container-default{color:#333;font-weight:bold;line-height:15px;font-family:tahoma,arial,verdana,sans-serif;font-size:11px;padding:0 2px 1px;text-transform:none}.x-window-header-default-top{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:4px 5px 0 5px;border-width:1px 1px 0 1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-top-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-top{background-image:url("about:blank#dh-5-5-0-0-1-1-0-1-4-5-0-5")}.x-window-header-default-top-tl{background-position:0 -10px}.x-window-header-default-top-tr{background-position:right -15px}.x-window-header-default-top-bl{background-position:0 -20px}.x-window-header-default-top-br{background-position:right -25px}.x-window-header-default-top-ml{background-position:0 top}.x-window-header-default-top-mr{background-position:right top}.x-window-header-default-top-tc{background-position:0 0}.x-window-header-default-top-bc{background-position:0 -5px}.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-mr{padding-right:5px}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-ml{padding-left:5px}.x-window-header-default-top-tc{height:5px}.x-window-header-default-top-bc{height:0}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-tc,.x-window-header-default-top-bc,.x-window-header-default-top-ml,.x-window-header-default-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-top-corners.gif)}.x-window-header-default-top-ml,.x-window-header-default-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-top-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-top-tl,.x-strict .x-ie7 .x-window-header-default-top-bl{position:relative;right:0}.x-window-header-default-top:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-top-corners.gif), sides:url(images/window-header/window-header-default-top-sides.gif)"}.x-window-header-default-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 4px 5px 0;border-width:1px 1px 1px 0;border-style:solid;background-color:#e8e8e8}.x-window-header-default-right-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-right{background-image:url("about:blank#dh-0-5-5-0-1-1-1-0-5-4-5-0")}.x-window-header-default-right-tl{background-position:0 -10px}.x-window-header-default-right-tr{background-position:right -15px}.x-window-header-default-right-bl{background-position:0 -20px}.x-window-header-default-right-br{background-position:right -25px}.x-window-header-default-right-ml{background-position:0 top}.x-window-header-default-right-mr{background-position:right top}.x-window-header-default-right-tc{background-position:0 0}.x-window-header-default-right-bc{background-position:0 -5px}.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-mr{padding-right:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-ml{padding-left:0}.x-window-header-default-right-tc{height:5px}.x-window-header-default-right-bc{height:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-tc,.x-window-header-default-right-bc,.x-window-header-default-right-ml,.x-window-header-default-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-right-corners.gif)}.x-rtl.x-window-header-default-right-tl,.x-rtl.x-window-header-default-right-ml,.x-rtl.x-window-header-default-right-bl,.x-rtl.x-window-header-default-right-tr,.x-rtl.x-window-header-default-right-mr,.x-rtl.x-window-header-default-right-br{background-image:url(images/window-header/window-header-default-right-corners-rtl.gif)}.x-window-header-default-right-ml,.x-window-header-default-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-right-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-right-tl,.x-strict .x-ie7 .x-window-header-default-right-bl{position:relative;right:0}.x-window-header-default-right:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-right-corners.gif), corners-rtl:url(images/window-header/window-header-default-right-corners-rtl.gif), sides:url(images/window-header/window-header-default-right-sides.gif)"}.x-window-header-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:0 5px 4px 5px;border-width:0 1px 1px 1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-bottom-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-bottom{background-image:url("about:blank#dh-0-0-5-5-0-1-1-1-0-5-4-5")}.x-window-header-default-bottom-tl{background-position:0 -10px}.x-window-header-default-bottom-tr{background-position:right -15px}.x-window-header-default-bottom-bl{background-position:0 -20px}.x-window-header-default-bottom-br{background-position:right -25px}.x-window-header-default-bottom-ml{background-position:0 top}.x-window-header-default-bottom-mr{background-position:right top}.x-window-header-default-bottom-tc{background-position:0 0}.x-window-header-default-bottom-bc{background-position:0 -5px}.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-mr{padding-right:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-ml{padding-left:5px}.x-window-header-default-bottom-tc{height:0}.x-window-header-default-bottom-bc{height:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-tc,.x-window-header-default-bottom-bc,.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-bottom-corners.gif)}.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-bottom-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-bottom-tl,.x-strict .x-ie7 .x-window-header-default-bottom-bl{position:relative;right:0}.x-window-header-default-bottom:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-bottom-corners.gif), sides:url(images/window-header/window-header-default-bottom-sides.gif)"}.x-window-header-default-left{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:5px 0 5px 4px;border-width:1px 0 1px 1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-left-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-left{background-image:url("about:blank#dh-5-0-0-5-1-0-1-1-5-0-5-4")}.x-window-header-default-left-tl{background-position:0 -10px}.x-window-header-default-left-tr{background-position:right -15px}.x-window-header-default-left-bl{background-position:0 -20px}.x-window-header-default-left-br{background-position:right -25px}.x-window-header-default-left-ml{background-position:0 top}.x-window-header-default-left-mr{background-position:right top}.x-window-header-default-left-tc{background-position:0 0}.x-window-header-default-left-bc{background-position:0 -5px}.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-mr{padding-right:0}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-ml{padding-left:5px}.x-window-header-default-left-tc{height:5px}.x-window-header-default-left-bc{height:5px}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-tc,.x-window-header-default-left-bc,.x-window-header-default-left-ml,.x-window-header-default-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-left-corners.gif)}.x-rtl.x-window-header-default-left-tl,.x-rtl.x-window-header-default-left-ml,.x-rtl.x-window-header-default-left-bl,.x-rtl.x-window-header-default-left-tr,.x-rtl.x-window-header-default-left-mr,.x-rtl.x-window-header-default-left-br{background-image:url(images/window-header/window-header-default-left-corners-rtl.gif)}.x-window-header-default-left-ml,.x-window-header-default-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-left-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-left-tl,.x-strict .x-ie7 .x-window-header-default-left-bl{position:relative;right:0}.x-window-header-default-left:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-left-corners.gif), corners-rtl:url(images/window-header/window-header-default-left-corners-rtl.gif), sides:url(images/window-header/window-header-default-left-sides.gif)"}.x-window-header-default-collapsed-top{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-top-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-top{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-4-5-4-5")}.x-window-header-default-collapsed-top-tl{background-position:0 -10px}.x-window-header-default-collapsed-top-tr{background-position:right -15px}.x-window-header-default-collapsed-top-bl{background-position:0 -20px}.x-window-header-default-collapsed-top-br{background-position:right -25px}.x-window-header-default-collapsed-top-ml{background-position:0 top}.x-window-header-default-collapsed-top-mr{background-position:right top}.x-window-header-default-collapsed-top-tc{background-position:0 0}.x-window-header-default-collapsed-top-bc{background-position:0 -5px}.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-mr{padding-right:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-ml{padding-left:5px}.x-window-header-default-collapsed-top-tc{height:5px}.x-window-header-default-collapsed-top-bc{height:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-tc,.x-window-header-default-collapsed-top-bc,.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-top-corners.gif)}.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-top-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-collapsed-top-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-top-bl{position:relative;right:0}.x-window-header-default-collapsed-top:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-top-corners.gif), sides:url(images/window-header/window-header-default-collapsed-top-sides.gif)"}.x-window-header-default-collapsed-right{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-right-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-right{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-5-4-5-4")}.x-window-header-default-collapsed-right-tl{background-position:0 -10px}.x-window-header-default-collapsed-right-tr{background-position:right -15px}.x-window-header-default-collapsed-right-bl{background-position:0 -20px}.x-window-header-default-collapsed-right-br{background-position:right -25px}.x-window-header-default-collapsed-right-ml{background-position:0 top}.x-window-header-default-collapsed-right-mr{background-position:right top}.x-window-header-default-collapsed-right-tc{background-position:0 0}.x-window-header-default-collapsed-right-bc{background-position:0 -5px}.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-mr{padding-right:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-ml{padding-left:5px}.x-window-header-default-collapsed-right-tc{height:5px}.x-window-header-default-collapsed-right-bc{height:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-tc,.x-window-header-default-collapsed-right-bc,.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-right-corners.gif)}.x-rtl.x-window-header-default-collapsed-right-tl,.x-rtl.x-window-header-default-collapsed-right-ml,.x-rtl.x-window-header-default-collapsed-right-bl,.x-rtl.x-window-header-default-collapsed-right-tr,.x-rtl.x-window-header-default-collapsed-right-mr,.x-rtl.x-window-header-default-collapsed-right-br{background-image:url(images/window-header/window-header-default-collapsed-right-corners-rtl.gif)}.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-right-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-collapsed-right-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-right-bl{position:relative;right:0}.x-window-header-default-collapsed-right:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-right-corners.gif), corners-rtl:url(images/window-header/window-header-default-collapsed-right-corners-rtl.gif), sides:url(images/window-header/window-header-default-collapsed-right-sides.gif)"}.x-window-header-default-collapsed-bottom{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-bottom-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-bottom{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-4-5-4-5")}.x-window-header-default-collapsed-bottom-tl{background-position:0 -10px}.x-window-header-default-collapsed-bottom-tr{background-position:right -15px}.x-window-header-default-collapsed-bottom-bl{background-position:0 -20px}.x-window-header-default-collapsed-bottom-br{background-position:right -25px}.x-window-header-default-collapsed-bottom-ml{background-position:0 top}.x-window-header-default-collapsed-bottom-mr{background-position:right top}.x-window-header-default-collapsed-bottom-tc{background-position:0 0}.x-window-header-default-collapsed-bottom-bc{background-position:0 -5px}.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-mr{padding-right:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-ml{padding-left:5px}.x-window-header-default-collapsed-bottom-tc{height:5px}.x-window-header-default-collapsed-bottom-bc{height:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-tc,.x-window-header-default-collapsed-bottom-bc,.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-bottom-corners.gif)}.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-bottom-mc{padding:0 1px 0 1px}.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-bottom-bl{position:relative;right:0}.x-window-header-default-collapsed-bottom:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-bottom-corners.gif), sides:url(images/window-header/window-header-default-collapsed-bottom-sides.gif)"}.x-window-header-default-collapsed-left{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 4px 5px 4px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-left-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-window-header-default-collapsed-left{background-image:url("about:blank#dh-5-5-5-5-1-1-1-1-5-4-5-4")}.x-window-header-default-collapsed-left-tl{background-position:0 -10px}.x-window-header-default-collapsed-left-tr{background-position:right -15px}.x-window-header-default-collapsed-left-bl{background-position:0 -20px}.x-window-header-default-collapsed-left-br{background-position:right -25px}.x-window-header-default-collapsed-left-ml{background-position:0 top}.x-window-header-default-collapsed-left-mr{background-position:right top}.x-window-header-default-collapsed-left-tc{background-position:0 0}.x-window-header-default-collapsed-left-bc{background-position:0 -5px}.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-mr{padding-right:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-ml{padding-left:5px}.x-window-header-default-collapsed-left-tc{height:5px}.x-window-header-default-collapsed-left-bc{height:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-tc,.x-window-header-default-collapsed-left-bc,.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-left-corners.gif)}.x-rtl.x-window-header-default-collapsed-left-tl,.x-rtl.x-window-header-default-collapsed-left-ml,.x-rtl.x-window-header-default-collapsed-left-bl,.x-rtl.x-window-header-default-collapsed-left-tr,.x-rtl.x-window-header-default-collapsed-left-mr,.x-rtl.x-window-header-default-collapsed-left-br{background-image:url(images/window-header/window-header-default-collapsed-left-corners-rtl.gif)}.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{zoom:1;background-image:url(images/window-header/window-header-default-collapsed-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-left-mc{padding:1px 0 1px 0}.x-strict .x-ie7 .x-window-header-default-collapsed-left-tl,.x-strict .x-ie7 .x-window-header-default-collapsed-left-bl{position:relative;right:0}.x-window-header-default-collapsed-left:after{display:none;content:"x-slicer:corners:url(images/window-header/window-header-default-collapsed-left-corners.gif), corners-rtl:url(images/window-header/window-header-default-collapsed-left-corners-rtl.gif), sides:url(images/window-header/window-header-default-collapsed-left-sides.gif)"}.x-window-header-default-top{-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-header-default-right{-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset}.x-window-header-default-bottom{-webkit-box-shadow:#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-header-default-left{-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-header-default .x-window-header-icon{width:16px;height:16px;color:#333;font-size:16px;line-height:16px;background-position:center center}.x-window-header-default .x-window-header-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8m .x-window-header-default .x-window-header-glyph{color:#8d8d8d}.x-window-header-default-horizontal .x-window-header-icon-before-title{margin:0 2px 0 0}.x-window-header-default-horizontal .x-rtl.x-window-header-icon-before-title{margin:0 0 0 2px}.x-window-header-default-horizontal .x-window-header-icon-after-title{margin:0 0 0 2px}.x-window-header-default-horizontal .x-rtl.x-window-header-icon-after-title{margin:0 2px 0 0}.x-window-header-default-vertical .x-window-header-icon-before-title{margin:0 0 2px 0}.x-window-header-default-vertical .x-rtl.x-window-header-icon-before-title{margin:0 0 2px 0}.x-window-header-default-vertical .x-window-header-icon-after-title{margin:2px 0 0 0}.x-window-header-default-vertical .x-rtl.x-window-header-icon-after-title{margin:2px 0 0 0}.x-window-header-default-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-window-header-default-horizontal .x-rtl.x-tool-after-title{margin:0 2px 0 0}.x-window-header-default-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-window-header-default-horizontal .x-rtl.x-tool-before-title{margin:0 0 0 2px}.x-window-header-default-vertical .x-tool-after-title{margin:2px 0 0 0}.x-window-header-default-vertical .x-rtl.x-tool-after-title{margin:2px 0 0 0}.x-window-header-default-vertical .x-tool-before-title{margin:0 0 2px 0}.x-window-header-default-vertical .x-rtl.x-tool-before-title{margin:0 0 2px 0}.x-window-default-collapsed .x-window-header{border-width:1px!important}.x-nbr .x-window-default-collapsed .x-window-header{border-width:0!important}.x-form-invalid-under{padding:2px 2px 2px 20px;color:#c0272b;font:normal 11px tahoma,arial,verdana,sans-serif;line-height:16px;background:no-repeat 0 2px;background-image:url(images/form/exclamation.gif)}div.x-lbl-top-err-icon{margin-bottom:3px}.x-form-invalid-icon{width:16px;height:16px;margin:0 1px;background-image:url(images/form/exclamation.gif);background-repeat:no-repeat}.x-form-item-label{color:black;font:normal 12px/22px tahoma,arial,verdana,sans-serif}.x-toolbar-item .x-form-item-label{font-size:11px;line-height:20px}.x-autocontainer-form-item,.x-anchor-form-item,.x-vbox-form-item,.x-checkboxgroup-form-item,.x-table-form-item{margin-bottom:5px}.x-ie6 .x-form-form-item td{border-top-width:0}.x-ie6 td.x-form-item-pad{height:5px}.x-form-field{color:black}.x-form-item,.x-form-field{font:normal 12px tahoma,arial,verdana,sans-serif}input.x-form-invalid-field,textarea.x-form-invalid-field{background-color:white;background-image:url(images/grid/invalid_line.gif);background-repeat:repeat-x;background-position:bottom;border-color:#c30}.x-item-disabled .x-form-item-label,.x-item-disabled .x-form-field,.x-item-disabled .x-form-display-field,.x-item-disabled .x-form-cb-label,.x-item-disabled .x-form-trigger{filter:alpha(opacity=30);opacity:.3}.x-form-text{color:black;padding:1px 3px 1px 3px;background:white repeat-x 0 0;border-width:1px;border-style:solid;border-color:#b5b8c8;background-image:url(images/form/text-bg.gif);height:22px;line-height:17px}.x-field-default-toolbar .x-form-text{height:20px;line-height:15px}.x-strict .x-ie6 .x-form-text,.x-strict .x-ie7 .x-form-text{height:18px}.x-strict .x-ie6 .x-field-default-toolbar .x-form-text,.x-strict .x-ie7 .x-field-default-toolbar .x-form-text{height:16px}.x-form-focus{border-color:#a1a1a1}.x-form-empty-field,textarea.x-form-empty-field{color:gray}.x-quirks .x-ie9p .x-form-text,.x-ie7m .x-form-text{margin-top:-1px;margin-bottom:-1px}.x-form-textarea{line-height:normal;height:auto;background-image:url(images/form/text-bg.gif)}.x-form-display-field{font:normal 12px tahoma,arial,verdana,sans-serif;color:black;line-height:22px}.x-toolbar-item .x-form-display-field{line-height:20px}.x-message-box .x-window-body{background-color:#e8e8e8;border-width:0}.x-message-box-info,.x-message-box-warning,.x-message-box-question,.x-message-box-error{background-position:top left;background-repeat:no-repeat}.x-rtl.x-message-box-info,.x-rtl.x-message-box-warning,.x-rtl.x-message-box-question,.x-rtl.x-message-box-error{background-position:top left}.x-message-box-info{background-image:url(images/shared/icon-info.gif)}.x-message-box-warning{background-image:url(images/shared/icon-warning.gif)}.x-message-box-question{background-image:url(images/shared/icon-question.gif)}.x-message-box-error{background-image:url(images/shared/icon-error.gif)}.x-form-checkboxgroup-body{padding:0 4px}.x-form-invalid .x-form-checkboxgroup-body{border:1px solid #c30;background-image:url(images/grid/invalid_line.gif);background-repeat:repeat-x;background-position:bottom}.x-check-group-alt{background:#d5d5d5;border-top:1px dotted #b4b4b4;border-bottom:1px dotted #b4b4b4}.x-form-check-group-label{color:black;padding:2px;margin:0 30px 5px 0;border-width:0 0 1px 0;border-style:solid;border-color:black}.x-rtl.x-form-check-group-label{margin:0 0 5px 30px}.x-fieldset{border:1px solid #b5b8c8;padding:0 10px;margin:0 0 10px}.x-ie8m .x-fieldset,.x-quirks .x-ie .x-fieldset{padding-top:0}.x-ie8m .x-fieldset .x-fieldset-body,.x-quirks .x-ie .x-fieldset .x-fieldset-body{padding-top:0}.x-fieldset-header-checkbox{line-height:14px;margin:1px 3px 0 0}.x-fieldset-header{padding:0 3px 1px}.x-fieldset-header .x-tool{margin-top:1px;padding:0}.x-fieldset-header .x-form-cb-wrap{padding:1px 0}.x-fieldset-header-text{font:11px/14px bold tahoma,arial,verdana,sans-serif;color:#333;padding:1px 0}.x-fieldset-header-text-collapsible{cursor:pointer}.x-fieldset-with-title .x-fieldset-header-checkbox,.x-fieldset-with-title .x-tool{margin:1px 3px 0 0}.x-fieldset-with-title .x-rtl .x-fieldset-header-checkbox,.x-fieldset-with-title .x-rtl .x-tool{margin:1px 0 0 3px}.x-webkit .x-fieldset-header{-webkit-padding-start:3px;-webkit-padding-end:3px}.x-opera .x-fieldset-with-legend{margin-top:-1px}.x-opera.x-mac .x-fieldset-header-text{padding:2px 0 0}.x-strict .x-ie8 .x-fieldset-header{margin-bottom:-1px}.x-strict .x-ie8 .x-fieldset-header .x-tool,.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-text,.x-strict .x-ie8 .x-fieldset-header .x-fieldset-header-checkbox{position:relative;top:-1px}.x-quirks .x-ie .x-fieldset-header,.x-ie8m .x-fieldset-header{padding-left:1px;padding-right:1px}.x-fieldset-collapsed .x-fieldset-body{display:none}.x-fieldset-collapsed{padding-bottom:0!important;border-width:1px 1px 0 1px!important;border-left-color:transparent!important;border-right-color:transparent!important}.x-ie6 .x-fieldset-collapsed{border-width:1px 0 0 0!important;padding-bottom:0!important;margin-left:1px;margin-right:1px}.x-ie .x-fieldset-bwrap{zoom:1}.x-fieldset .x-tool-toggle{background-position:0 -60px}.x-fieldset .x-tool-over .x-tool-toggle{background-position:-15px -60px}.x-fieldset-collapsed .x-tool-toggle{background-position:0 -75px}.x-fieldset-collapsed .x-tool-over .x-tool-toggle{background-position:-15px -75px}.x-ie .x-fieldset-noborder legend{position:relative;margin-bottom:23px}.x-ie .x-fieldset-noborder legend span{position:absolute;left:16px}.x-fieldset{overflow:hidden}.x-fieldset-bwrap{overflow:hidden;zoom:1}.x-fieldset-body{overflow:hidden}.x-form-cb-wrap{line-height:22px}.x-toolbar-item .x-form-cb-wrap{line-height:20px}.x-form-cb{margin-top:5px}.x-toolbar-item .x-form-cb{margin-top:4px}.x-form-checkbox{width:13px;height:13px;background:url(images/form/checkbox.gif) no-repeat}.x-form-cb-checked .x-form-checkbox{background-position:0 -13px}.x-form-checkbox-focus{background-position:-13px 0}.x-form-cb-checked .x-form-checkbox-focus{background-position:-13px -13px}.x-form-cb-label-before{margin-right:4px}.x-rtl.x-field .x-form-cb-label-before{margin-right:0;margin-left:4px}.x-form-cb-label-after{margin-left:4px}.x-rtl.x-field .x-form-cb-label-after{margin-left:0;margin-right:4px}.x-form-trigger{background:url(images/form/trigger.gif);width:17px}.x-rtl.x-form-trigger-wrap .x-form-trigger{background-image:url(images/form/trigger-rtl.gif)}.x-trigger-cell{background-color:white;width:17px}.x-form-trigger-over{background-position:-17px 0}.x-form-trigger-wrap-focus .x-form-trigger{background-position:-51px 0}.x-form-trigger-wrap-focus .x-form-trigger-over{background-position:-68px 0}.x-form-trigger-click,.x-form-trigger-wrap-focus .x-form-trigger-click{background-position:-34px 0}.x-form-clear-trigger{background-image:url(images/form/clear-trigger.gif)}.x-rtl.x-form-trigger-wrap .x-form-clear-trigger{background-image:url(images/form/clear-trigger-rtl.gif)}.x-form-search-trigger{background-image:url(images/form/search-trigger.gif)}.x-rtl.x-form-trigger-wrap .x-form-search-trigger{background-image:url(images/form/search-trigger-rtl.gif)}.x-quirks .prefixie6 .x-form-trigger-input-cell{height:22px}.x-quirks .prefixie6 .x-field-default-toolbar .x-form-trigger-input-cell{height:20px}.x-form-spinner-up,.x-form-spinner-down{background-image:url(images/form/spinner.gif);background-color:white;width:17px!important;height:11px!important}.x-rtl.x-form-trigger-wrap .x-form-spinner-up,.x-rtl.x-form-trigger-wrap .x-form-spinner-down{background-image:url(images/form/spinner-rtl.gif)}.x-form-spinner-down{background-position:0 -11px}.x-form-trigger-wrap-focus .x-form-spinner-down{background-position:-51px -11px}.x-form-trigger-wrap .x-form-spinner-down-over{background-position:-17px -11px}.x-form-trigger-wrap-focus .x-form-spinner-down-over{background-position:-68px -11px}.x-form-trigger-wrap .x-form-spinner-down-click{background-position:-34px -11px}.x-toolbar-item .x-form-spinner-up,.x-toolbar-item .x-form-spinner-down{background-image:url(images/form/spinner-small.gif);height:10px!important}.x-toolbar-item .x-form-spinner-down{background-position:0 -10px}.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down{background-position:-51px -10px}.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-over{background-position:-17px -10px}.x-toolbar-item .x-form-trigger-wrap-focus .x-form-spinner-down-over{background-position:-68px -10px}.x-toolbar-item .x-form-trigger-wrap .x-form-spinner-down-click{background-position:-34px -10px}.x-toolbar-item .x-rtl.x-form-trigger-wrap .x-form-spinner-up,.x-toolbar-item .x-rtl.x-form-trigger-wrap .x-form-spinner-down{background-image:url(images/form/spinner-small-rtl.gif)}.x-tbar-page-number{width:30px}.x-tbar-page-first{background-image:url(images/grid/page-first.gif)}.x-tbar-page-prev{background-image:url(images/grid/page-prev.gif)}.x-tbar-page-next{background-image:url(images/grid/page-next.gif)}.x-tbar-page-last{background-image:url(images/grid/page-last.gif)}.x-tbar-loading{background-image:url(images/grid/refresh.gif)}.x-item-disabled .x-tbar-page-first{background-image:url(images/grid/page-first-disabled.gif)}.x-item-disabled .x-tbar-page-prev{background-image:url(images/grid/page-prev-disabled.gif)}.x-item-disabled .x-tbar-page-next{background-image:url(images/grid/page-next-disabled.gif)}.x-item-disabled .x-tbar-page-last{background-image:url(images/grid/page-last-disabled.gif)}.x-item-disabled .x-tbar-loading{background-image:url(images/grid/refresh-disabled.gif)}.x-rtl.x-tbar-page-first{background-image:url(images/grid/page-last.gif)}.x-rtl.x-tbar-page-prev{background-image:url(images/grid/page-next.gif)}.x-rtl.x-tbar-page-next{background-image:url(images/grid/page-prev.gif)}.x-rtl.x-tbar-page-last{background-image:url(images/grid/page-first.gif)}.x-item-disabled .x-rtl.x-tbar-page-first{background-image:url(images/grid/page-last-disabled.gif)}.x-item-disabled .x-rtl.x-tbar-page-prev{background-image:url(images/grid/page-next-disabled.gif)}.x-item-disabled .x-rtl.x-tbar-page-next{background-image:url(images/grid/page-prev-disabled.gif)}.x-item-disabled .x-rtl.x-tbar-page-last{background-image:url(images/grid/page-first-disabled.gif)}.x-boundlist{border-width:1px;border-style:solid;border-color:#b5b8c8;background:white}.x-strict .x-ie6 .x-boundlist-list-ct,.x-strict .x-ie7 .x-boundlist-list-ct{position:relative}.x-boundlist-item{padding:0 3px;line-height:20px;cursor:pointer;cursor:hand;position:relative;zoom:1;border-width:1px;border-style:dotted;border-color:white}.x-boundlist-selected{background:#d3d3d3;border-color:#b3abaa}.x-boundlist-item-over{background:#e0e0e0;border-color:#bfb8b8}.x-boundlist-floating{border-top-width:0}.x-boundlist-above{border-top-width:1px;border-bottom-width:1px}.x-datepicker{border-width:1px;border-style:solid;border-color:#585858;background-color:white;width:177px}.x-datepicker-header{padding:3px 6px;text-align:center;background-image:none;background-color:#6f6f6f;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#777),color-stop(100%,#656565));background-image:-webkit-linear-gradient(top,#777,#656565);background-image:-moz-linear-gradient(top,#777,#656565);background-image:-o-linear-gradient(top,#777,#656565);background-image:linear-gradient(top,#777,#656565)}.x-datepicker-arrow{width:15px;height:15px;top:6px;cursor:pointer;background-color:#6f6f6f;filter:alpha(opacity=70);opacity:.7}a.x-datepicker-arrow:hover{filter:alpha(opacity=100);opacity:1}.x-datepicker-next{right:6px;background-image:url(images/shared/right-btn.gif)}.x-datepicker-prev{left:6px;background-image:url(images/shared/left-btn.gif)}.x-datepicker-month .x-btn,.x-datepicker-month .x-btn .x-btn-tc,.x-datepicker-month .x-btn .x-btn-tl,.x-datepicker-month .x-btn .x-btn-tr,.x-datepicker-month .x-btn .x-btn-mc,.x-datepicker-month .x-btn .x-btn-ml,.x-datepicker-month .x-btn .x-btn-mr,.x-datepicker-month .x-btn .x-btn-bc,.x-datepicker-month .x-btn .x-btn-bl,.x-datepicker-month .x-btn .x-btn-br{background:transparent;border-width:0!important}.x-datepicker-month .x-btn-inner{color:white}.x-datepicker-month .x-btn-split-right{background-image:url(images/button/s-arrow-light.gif);padding-right:12px}.x-datepicker-column-header{width:25px;color:#3e3e3e;font:normal 10px tahoma,arial,verdana,sans-serif;text-align:right;border-width:0 0 1px;border-style:solid;border-color:#d0d0d0;background-image:none;background-color:#e9e9e9;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f1f1f1),color-stop(100%,#dfdfdf));background-image:-webkit-linear-gradient(top,#f1f1f1,#dfdfdf);background-image:-moz-linear-gradient(top,#f1f1f1,#dfdfdf);background-image:-o-linear-gradient(top,#f1f1f1,#dfdfdf);background-image:linear-gradient(top,#f1f1f1,#dfdfdf)}.x-datepicker-column-header-inner{line-height:19px;padding:0 7px 0 0}.x-datepicker-cell{text-align:right;border-width:1px;border-style:solid;border-color:white}.x-datepicker-date{padding:0 4px 0 0;font:normal 11px tahoma,arial,verdana,sans-serif;color:black;cursor:pointer;line-height:18px}a.x-datepicker-date:hover{color:black;background-color:transparent}.x-datepicker-selected{border-style:solid;border-color:#b2aaa9}.x-datepicker-selected .x-datepicker-date{background-color:#d8d8d8;font-weight:bold}.x-datepicker-today{border-color:darkred;border-style:solid}.x-datepicker-prevday .x-datepicker-date,.x-datepicker-nextday .x-datepicker-date{color:#aaa}.x-datepicker-disabled a.x-datepicker-date{background-color:#eee;cursor:default;color:#bbb}.x-datepicker-disabled a.x-datepicker-date:hover{background-color:#eee}.x-datepicker-footer,.x-monthpicker-buttons{padding:4px 0;border-width:1px 0 0;border-style:solid;border-color:#d0d0d0;background-image:none;background-color:#e9e9e9;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dfdfdf),color-stop(49%,#d6d6d6),color-stop(51%,#d0d0d0),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(top,#dfdfdf,#d6d6d6 49%,#d0d0d0 51%,#d2d2d2);background-image:-moz-linear-gradient(top,#dfdfdf,#d6d6d6 49%,#d0d0d0 51%,#d2d2d2);background-image:-o-linear-gradient(top,#dfdfdf,#d6d6d6 49%,#d0d0d0 51%,#d2d2d2);background-image:linear-gradient(top,#dfdfdf,#d6d6d6 49%,#d0d0d0 51%,#d2d2d2);text-align:center}.x-datepicker-footer .x-btn,.x-monthpicker-buttons .x-btn{margin:0 2px 0 2px}.x-monthpicker{width:177px;border-width:1px;border-style:solid;border-color:#585858;background-color:white}.x-monthpicker-months{border-width:0 1px 0 0;border-color:#585858;border-style:solid;width:87px}.x-monthpicker-months .x-monthpicker-item{width:43px}.x-monthpicker-years{width:88px}.x-monthpicker-years .x-monthpicker-item{width:44px}.x-monthpicker-item{margin:5px 0 4px;font:normal 11px tahoma,arial,verdana,sans-serif;text-align:center}.x-monthpicker-item-inner{margin:0 5px 0 5px;color:#523a39;border-width:1px;border-style:solid;border-color:white;line-height:16px;cursor:pointer}a.x-monthpicker-item-inner:hover{background-color:transparent}.x-monthpicker-selected{background-color:#d8d8d8;border-style:solid;border-color:#b2aaa9}.x-monthpicker-yearnav{height:27px}.x-monthpicker-yearnav-button-ct{width:44px}.x-monthpicker-yearnav-button{height:15px;width:15px;cursor:pointer;margin-top:6px;background-color:white}.x-monthpicker-yearnav-next{background-image:url(images/tools/tool-sprites.gif);background-position:0 -120px}.x-monthpicker-yearnav-next-over{background-position:-15px -120px}.x-monthpicker-yearnav-prev{background-image:url(images/tools/tool-sprites.gif);background-position:0 -105px}.x-monthpicker-yearnav-prev-over{background-position:-15px -105px}.x-monthpicker-small .x-monthpicker-item{margin:2px 0 2px}.x-monthpicker-small .x-monthpicker-item-inner{margin:0 5px 0 5px}.x-monthpicker-small .x-monthpicker-yearnav{height:22px}.x-monthpicker-small .x-monthpicker-yearnav-button{margin-top:3px}.x-nlg .x-datepicker-header{background-image:url(images/datepicker/datepicker-header-bg.gif);background-repeat:repeat-x;background-position:top left}.x-nlg .x-datepicker-footer,.x-nlg .x-monthpicker-buttons{background-image:url(images/datepicker/datepicker-footer-bg.gif);background-repeat:repeat-x;background-position:top left}.x-datepicker-header:after{display:none;content:"x-slicer:bg:url(images/datepicker/datepicker-header-bg.gif)"}.x-datepicker-footer:after{display:none;content:"x-slicer:bg:url(images/datepicker/datepicker-footer-bg.gif)"}.x-form-date-trigger{background-image:url(images/form/date-trigger.gif)}.x-rtl.x-form-trigger-wrap .x-form-date-trigger{background-image:url(images/form/date-trigger-rtl.gif)}.x-form-file-wrap .x-form-text{color:gray}.x-color-picker{width:144px;height:90px;background-color:white;border-color:white;border-width:0;border-style:solid}.x-color-picker-item{width:18px;height:18px;border-width:1px;border-color:white;border-style:solid;background-color:white;cursor:pointer;padding:2px}.x-strict .x-ie7 .x-color-picker-item{width:12px;height:12px}a.x-color-picker-item:hover{border-color:#8bb8f3;background-color:#deecfd}.x-color-picker-selected{border-color:#8bb8f3;background-color:#deecfd}.x-color-picker-item-inner{line-height:10px;border-color:#aca899;border-width:1px;border-style:solid}.x-html-editor-tb .x-btn-text{background:transparent no-repeat;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-bold,.x-menu-item div.x-edit-bold{background-position:0 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-italic,.x-menu-item div.x-edit-italic{background-position:-16px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-underline,.x-menu-item div.x-edit-underline{background-position:-32px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-forecolor,.x-menu-item div.x-edit-forecolor{background-position:-160px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-backcolor,.x-menu-item div.x-edit-backcolor{background-position:-176px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-justifyleft,.x-menu-item div.x-edit-justifyleft{background-position:-112px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-justifycenter,.x-menu-item div.x-edit-justifycenter{background-position:-128px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-justifyright,.x-menu-item div.x-edit-justifyright{background-position:-144px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-insertorderedlist,.x-menu-item div.x-edit-insertorderedlist{background-position:-80px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-insertunorderedlist,.x-menu-item div.x-edit-insertunorderedlist{background-position:-96px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-increasefontsize,.x-menu-item div.x-edit-increasefontsize{background-position:-48px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-decreasefontsize,.x-menu-item div.x-edit-decreasefontsize{background-position:-64px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-sourceedit,.x-menu-item div.x-edit-sourceedit{background-position:-192px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tb .x-edit-createlink,.x-menu-item div.x-edit-createlink{background-position:-208px 0;background-image:url(images/editor/tb-sprite.gif)}.x-html-editor-tip .x-tip-bd .x-tip-bd-inner{padding:5px;padding-bottom:1px}.x-html-editor-tb .x-font-select{font-size:11px;font-family:inherit}.x-html-editor-wrap textarea{font:normal 12px tahoma,arial,verdana,sans-serif;background-color:white;resize:none}.x-form-radio{width:13px;height:13px;background:url(images/form/radio.gif) no-repeat}.x-form-cb-checked .x-form-radio{background-position:0 -13px}.x-form-radio-focus{background-position:-13px 0}.x-form-cb-checked .x-form-radio-focus{background-position:-13px -13px}.x-grid-body{background:white;border-width:1px;border-style:solid;border-color:#d0d0d0}.x-grid-empty{padding:10px;color:gray;font:normal 11px tahoma,arial,helvetica,sans-serif}.x-grid-view{overflow:hidden;position:relative}.x-grid-table{table-layout:fixed;border-collapse:separate}.x-grid-row .x-grid-cell{color:null;font:normal 11px/13px tahoma,arial,verdana,sans-serif;background-color:white;border-color:white;border-style:solid;border-width:1px 0}.x-grid-with-row-lines .x-grid-cell{border-width:1px 0;border-top-color:#fafafa;border-bottom-color:#ededed}.x-grid-row-alt .x-grid-td{background-color:#fafafa}.x-grid-row-over .x-grid-td{border-color:#ddd;background-color:#efefef}.x-grid-row-focused .x-grid-td{border-top:1px dotted #464646!important;border-bottom:1px dotted #464646!important;background-color:#efefef}.x-grid-row-selected .x-grid-td{border-style:dotted;border-color:#bfb8b8;background-color:#e0e0e0!important}.x-grid-row-selected .x-grid-row-summary .x-grid-td{border-bottom-color:#e0e0e0!important;border-top-width:0!important}.x-grid-row-focused .x-grid-row-summary .x-grid-td{border-bottom-color:#efefef!important;border-top-width:0!important}.x-grid-cell{overflow:hidden;border-color:white;vertical-align:middle}.x-grid-cell-special,.x-grid-cell-checkcolumn,.x-action-col-cell{vertical-align:top}.x-grid-cell-inner{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;line-height:13px;padding:2px 6px 4px;white-space:nowrap}.x-grid-row .x-grid-cell-special{padding:0;border-right:1px solid #c6c6c6;background-image:none;background-color:#f6f6f6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:-moz-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:-o-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:linear-gradient(top,#f6f6f6,#e9e9e9)}.x-grid-row .x-rtl.x-grid-cell-special{border-right:0;border-left:1px solid #c6c6c6}.x-grid-row-selected .x-grid-cell-special{border-right:1px solid #d4b7b7;background-image:none;background-color:#e0e0e0;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#e0e0e0),color-stop(100%,#d3d3d3));background-image:-webkit-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:-moz-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:-o-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:linear-gradient(left,#e0e0e0,#d3d3d3)}.x-grid-cell-special .x-grid-cell-inner{padding-left:4px;padding-right:4px;zoom:1}.x-nlg .x-grid-cell-special{background-repeat:repeat-y;background-position:top right}.x-nlg .x-grid-row .x-grid-cell-special,.x-nlg .x-grid-row-over .x-grid-cell-special{background-image:url(images/grid/cell-special-bg.gif)}.x-nlg .x-grid-row-focused .x-grid-cell-special,.x-nlg .x-grid-row-selected .x-grid-cell-special{background-image:url(images/grid/cell-special-selected-bg.gif)}.x-grid-dirty-cell{background-image:url(images/grid/dirty.gif);background-position:0 0;background-repeat:no-repeat}.x-rtl.x-grid-dirty-cell{background-image:url(images/grid/dirty-rtl.gif);background-position:right 0}.x-grid-cell-selected{background-color:#b8cfee!important}.x-grid-with-col-lines .x-grid-cell{padding-right:0;border-right:1px solid #c6c6c6}.x-rtl.x-grid-with-col-lines .x-grid-cell{border-right:0 none;border-left:1px solid #c6c6c6}.x-grid-resize-marker{position:absolute;z-index:5;top:0;width:1px;background-color:#0f0f0f}.col-move-top,.col-move-bottom{width:9px;height:9px;position:absolute;top:0;line-height:0;font-size:0;overflow:hidden;z-index:20000;background:no-repeat center top transparent}.col-move-top{background-image:url(images/grid/col-move-top.gif)}.col-move-bottom{background-image:url(images/grid/col-move-bottom.gif)}.x-grid-header-ct{cursor:default;zoom:1;padding:0;border:1px solid #d0d0d0;border-bottom-color:#c5c5c5;background-image:none;background-color:#c5c5c5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f9f9f9),color-stop(100%,#e3e4e6));background-image:-webkit-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-moz-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-o-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:linear-gradient(top,#f9f9f9,#e3e4e6)}.x-accordion-item .x-grid-header-ct{border-width:0 0 1px!important}.x-accordion-item .x-grid-header-ct-hidden{border:0!important}.x-grid-body{border-top-color:#c5c5c5}.x-hmenu-sort-asc .x-menu-item-icon{background-image:url(images/grid/hmenu-asc.gif)}.x-hmenu-sort-desc .x-menu-item-icon{background-image:url(images/grid/hmenu-desc.gif)}.x-cols-icon .x-menu-item-icon{background-image:url(images/grid/columns.gif)}.x-column-header{padding:0;position:absolute;overflow:hidden;border:0 none;border-right:1px solid #c5c5c5;text-shadow:0 1px 0 rgba(255,255,255,0.3);color:black;font:normal 11px tahoma,arial,verdana,sans-serif;background-image:none;background-color:#c5c5c5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f9f9f9),color-stop(100%,#e3e4e6));background-image:-webkit-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-moz-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-o-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:linear-gradient(top,#f9f9f9,#e3e4e6)}.x-rtl.x-column-header{border-right:0 none;border-left:1px solid #c5c5c5}.x-group-header{padding:0;border-left-width:0}.x-group-sub-header{background:transparent;border-top:1px solid #c5c5c5;border-left-width:0}.x-group-sub-header .x-column-header-inner{padding:4px 6px 5px 6px}.x-column-header-inner{zoom:1;white-space:nowrap;padding:5px 6px 5px 6px;position:relative}.x-column-header-inner .x-column-header-text{white-space:nowrap}.x-ie .x-rtl.x-column-header-text{zoom:1;display:inline-block}.x-column-header-over,.x-column-header-sort-ASC,.x-column-header-sort-DESC{background-image:none;background-color:#f0f0f0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#f0f0f0));background-image:-webkit-linear-gradient(top,#fff,#f0f0f0);background-image:-moz-linear-gradient(top,#fff,#f0f0f0);background-image:-o-linear-gradient(top,#fff,#f0f0f0);background-image:linear-gradient(top,#fff,#f0f0f0)}.x-nlg .x-grid-header-ct,.x-nlg .x-column-header{background:repeat-x 0 top;background-image:url(images/grid/column-header-bg.gif)}.x-nlg .x-column-header-over,.x-nlg .x-column-header-sort-ASC,.x-nlg .x-column-header-sort-DESC{background:#ebf3fd repeat-x 0 top;background-image:url(images/grid/column-header-over-bg.gif)}.x-column-header-trigger{display:none;height:100%;width:14px;background-repeat:no-repeat;position:absolute;right:0;top:0;z-index:2;cursor:pointer}.x-rtl.x-column-header-trigger{left:0;right:auto}.x-column-header-over .x-column-header-trigger,.x-column-header-open .x-column-header-trigger{display:block}.x-column-header-align-right{text-align:right}.x-column-header-align-right .x-column-header-text{margin-right:10px}.x-rtl.x-column-header-align-right{text-align:left}.x-column-header-align-right .x-rtl.x-column-header-text{margin-right:0;margin-left:10px}.x-rtl.x-column-header-align-left{text-align:right}.x-column-header-align-center{text-align:center}.x-column-header-align-left{text-align:left}.x-column-header-sort-ASC .x-column-header-text,.x-column-header-sort-DESC .x-column-header-text{padding-right:12px;background-repeat:no-repeat;background-position:right center}.x-column-header-sort-ASC .x-rtl.x-column-header-text,.x-column-header-sort-DESC .x-rtl.x-column-header-text{padding-right:0;padding-left:12px;background-position:0 center}.x-column-header-sort-ASC .x-column-header-text{background-image:url(images/grid/sort_asc.gif)}.x-column-header-sort-DESC .x-column-header-text{background-image:url(images/grid/sort_desc.gif)}.x-column-header:after{display:none;content:"x-slicer:bg:url(images/grid/column-header-bg.gif)"}.x-column-header-over:after{display:none;content:"x-slicer:bg:url(images/grid/column-header-over-bg.gif)"}.x-grid-drop-indicator{position:absolute;height:1px;line-height:0;background-color:#77bc71;overflow:visible;pointer-events:none}.x-grid-drop-indicator .x-grid-drop-indicator-left{position:absolute;top:-8px;left:-12px;background-image:url(images/grid/dd-insert-arrow-right.png);height:16px;width:16px}.x-grid-drop-indicator .x-grid-drop-indicator-right{position:absolute;top:-8px;right:-11px;background-image:url(images/grid/dd-insert-arrow-left.png);height:16px;width:16px}.x-ie6 .x-grid-drop-indicator-left{background-image:url(images/grid/dd-insert-arrow-right.gif)}.x-ie6 .x-grid-drop-indicator-right{background-image:url(images/grid/dd-insert-arrow-left.gif)}.x-action-col-cell .x-grid-cell-inner{padding:1px 2px 0 4px!important}.x-action-col-cell .x-item-disabled{filter:alpha(opacity=30);opacity:.3}.x-grid-with-row-lines .x-action-col-cell .x-grid-cell-inner{padding-top:1px}.x-action-col-icon{height:16px;width:16px;cursor:pointer}.x-grid-cell-checkcolumn .x-grid-cell-inner{padding-top:3px!important;padding-bottom:0!important}.x-grid-checkcolumn{width:13px;height:13px;background:url(images/form/checkbox.gif) 0 0 no-repeat}.x-item-disabled .x-grid-checkcolumn{filter:alpha(opacity=30);opacity:.3}.x-grid-checkcolumn-checked{background-position:0 -13px}.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1}.x-grid-group-hd{padding:10px 4px 4px 4px;background:white;border-width:0 0 2px 0;border-style:solid;border-color:#bcb1b0;cursor:pointer;white-space:nowrap}.x-grid-group-hd-not-collapsible{cursor:default}.x-grid-group-hd-collapsible .x-grid-group-title{background-color:transparent;background-repeat:no-repeat;background-position:left center;background-image:url(images/grid/group-collapse.gif);padding:0 0 0 14px}.x-rtl.x-grid-view .x-grid-group-hd-collapsible .x-grid-group-title{background-position:right center;padding:0 14px 0 0}.x-grid-group-title{color:#616161;font:bold 11px tahoma,arial,verdana,sans-serif}.x-grid-group-hd-collapsed .x-grid-group-title{background-image:url(images/grid/group-expand.gif)}.x-grid-group-collapsed .x-grid-group-title{background-image:url(images/grid/group-expand.gif)}.x-grid-row-body-hidden,.x-grid-group-collapsed{display:none}.x-group-by-icon{background-image:url(images/grid/group-by.gif)}.x-show-groups-icon{background-image:url(images/grid/group-by.gif)}.x-grid-rowbody{font:normal 11px/13px tahoma,arial,verdana,sans-serif;padding:0}.x-grid-rowbody p{margin:5px 5px 10px 5px}.x-ie6 .x-grid-rowbody{width:100%}.x-grid-row-body-hidden{display:none}.x-grid-row-selected .x-grid-rowbody{background-color:#e0e0e0!important}.x-grid-rowwrap{border-width:1px 0;border-color:#ededed;border-style:solid;border-top-color:#fafafa;overflow:hidden}.x-grid-rowwrap .x-grid-cell,.x-grid-rowwrap .x-grid-cell-inner{border-width:0;background-color:transparent}.x-grid-row-focused .x-grid-rowwrap .x-grid-cell{border-top-width:0!important;border-bottom-width:0!important}.x-summary-bottom{border-bottom-color:#c5c5c5}.x-docked-summary{border-width:1px;border-color:#d0d0d0;border-style:solid}.x-grid-row-summary .x-grid-cell,.x-grid-row-summary .x-grid-rowwrap,.x-grid-row-summary .x-grid-cell-rowbody{border-color:#ededed;background-color:transparent!important;border-top-width:0;font:normal 11px/13px tahoma,arial,verdana,sans-serif}.x-grid-locked .x-grid-inner-locked{border-width:0 1px 0 0;border-style:solid}.x-grid-locked .x-rtl.x-grid-inner-locked{border-width:0 0 0 1px}.x-grid-inner-locked .x-column-header-last,.x-grid-inner-locked .x-grid-cell-last{border-right-width:0!important}.x-grid-inner-locked .x-rtl.x-column-header-last{border-left-width:0!important}.x-rtl.x-grid-inner-locked .x-grid-row .x-column-header-last{border-left:0 none}.x-rtl.x-grid-inner-locked .x-grid-row .x-grid-cell-last{border-left:0 none}.x-hmenu-lock .x-menu-item-icon{background-image:url(images/grid/hmenu-lock.gif)}.x-hmenu-unlock .x-menu-item-icon{background-image:url(images/grid/hmenu-unlock.gif)}.x-grid-editor .x-form-cb-wrap{text-align:center}.x-grid-editor .x-form-text{font:normal 11px/15px tahoma,arial,verdana,sans-serif}.x-grid-cell-editor .x-form-text{padding:0 4px}.x-grid-cell-editor .x-form-cb-wrap{padding-top:3px}.x-ie .x-grid-cell-editor .x-form-text{padding-left:5px}.x-opera .x-grid-cell-editor .x-form-text{padding-left:5px}.x-grid-editor-on-text-node .x-form-text{padding-left:1px;padding-right:1px}.x-ie .x-grid-editor-on-text-node .x-form-text{padding-left:2px;padding-right:2px}.x-opera .x-grid-editor-on-text-node .x-form-text{padding-left:2px;padding-right:2px}.x-grid-row-editor{position:absolute!important;z-index:1;zoom:1;overflow:visible!important}.x-grid-row-editor .x-form-display-field{font:normal 11px/15px tahoma,arial,verdana,sans-serif}.x-grid-row-editor .x-panel-body{border-top:1px solid #d0d0d0!important;border-bottom:1px solid #d0d0d0!important;padding:4px 0 4px 0;background-color:#ebe6e6}.x-grid-row-editor .x-form-cb{margin-top:0}.x-grid-row-editor-buttons{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:4px 4px 4px 4px;border-width:0 1px 1px 1px;border-style:solid;background-color:#ebe6e6}.x-grid-row-editor-buttons-mc{background-color:#ebe6e6}.x-nbr .x-grid-row-editor-buttons{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-grid-row-editor-buttons{background-image:url("about:blank#dh-0-0-5-5-0-1-1-1-4-4-4-4")}.x-grid-row-editor-buttons-tl{background-position:0 -10px}.x-grid-row-editor-buttons-tr{background-position:right -15px}.x-grid-row-editor-buttons-bl{background-position:0 -20px}.x-grid-row-editor-buttons-br{background-position:right -25px}.x-grid-row-editor-buttons-ml{background-position:0 top}.x-grid-row-editor-buttons-mr{background-position:right top}.x-grid-row-editor-buttons-tc{background-position:0 0}.x-grid-row-editor-buttons-bc{background-position:0 -5px}.x-grid-row-editor-buttons-tr,.x-grid-row-editor-buttons-br,.x-grid-row-editor-buttons-mr{padding-right:5px}.x-grid-row-editor-buttons-tl,.x-grid-row-editor-buttons-bl,.x-grid-row-editor-buttons-ml{padding-left:5px}.x-grid-row-editor-buttons-tc{height:0}.x-grid-row-editor-buttons-bc{height:5px}.x-grid-row-editor-buttons-tl,.x-grid-row-editor-buttons-bl,.x-grid-row-editor-buttons-tr,.x-grid-row-editor-buttons-br,.x-grid-row-editor-buttons-tc,.x-grid-row-editor-buttons-bc,.x-grid-row-editor-buttons-ml,.x-grid-row-editor-buttons-mr{zoom:1;background-image:url(images/grid-row-editor-buttons/null-corners.gif)}.x-grid-row-editor-buttons-ml,.x-grid-row-editor-buttons-mr{zoom:1;background-image:url(images/grid-row-editor-buttons/null-sides.gif);background-repeat:repeat-y}.x-grid-row-editor-buttons-mc{padding:4px 0 0 0}.x-strict .x-ie7 .x-grid-row-editor-buttons-tl,.x-strict .x-ie7 .x-grid-row-editor-buttons-bl{position:relative;right:0}.x-grid-row-editor-buttons:after{display:none;content:"x-slicer:corners:url(images/grid-row-editor-buttons/null-corners.gif), sides:url(images/grid-row-editor-buttons/null-sides.gif)"}.x-grid-row-editor-buttons{border-color:#d0d0d0}.x-row-editor-update-button{margin-right:2px}.x-row-editor-cancel-button{margin-left:2px}.x-rtl.x-row-editor-update-button{margin-left:2px;margin-right:auto}.x-rtl.x-row-editor-cancel-button{margin-right:2px;margin-left:auto}.x-quirks .x-ie .x-rtl.x-grid-row-editor .x-form-item-body{position:static}.x-grid-row-editor-errors ul{margin-left:5px}.x-grid-row-editor-errors li{list-style:disc;margin-left:15px}.x-grid-row-expander{background-image:url(images/grid/group-collapse.gif);width:9px;height:9px;float:left;line-height:0;margin:3px 5px 1px 3px}.x-grid-row-collapsed .x-grid-row-expander{background-image:url(images/grid/group-expand.gif)}.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner,.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner{padding-left:12px;background-image:url(images/grid/property-cell-bg.gif);background-repeat:no-repeat;background-position:-16px 2px}.x-grid-with-row-lines.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner,.x-grid-with-row-lines.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner{background-position:-16px 1px}.x-quirks .x-ie .x-grid-row .x-grid-property-name .x-grid-cell-inner{background-position:-16px 2px}.x-accordion-layout-ct{background-color:white;padding:0}.x-accordion-hd .x-panel-header-text-container{color:black;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;text-transform:none}.x-accordion-item{margin:0}.x-accordion-item .x-accordion-hd{background:#e5e5e5;border-top-color:#ececec;padding:4px 5px 5px 5px}.x-accordion-item .x-accordion-hd-sibling-expanded{border-top-color:#d0d0d0}.x-accordion-item .x-accordion-hd-last-collapsed{border-bottom-color:#e5e5e5}.x-accordion-item .x-accordion-body{border-width:0}.x-accordion-hd .x-tool-collapse-top,.x-accordion-hd .x-tool-collapse-bottom{background-position:0 -255px}.x-accordion-hd .x-tool-expand-top,.x-accordion-hd .x-tool-expand-bottom{background-position:0 -240px}.x-accordion-hd .x-tool-over .x-tool-collapse-top,.x-accordion-hd .x-tool-over .x-tool-collapse-bottom{background-position:-15px -255px}.x-accordion-hd .x-tool-over .x-tool-expand-top,.x-accordion-hd .x-tool-over .x-tool-expand-bottom{background-position:-15px -240px}.x-accordion-hd .x-tool-img{background-color:#e5e5e5}.x-collapse-el{cursor:pointer}.x-layout-split-left,.x-layout-split-right{top:50%;margin-top:-18px;width:5px;height:35px}.x-layout-split-top,.x-layout-split-bottom{left:50%;width:35px;height:5px;margin-left:-18px}.x-layout-split-left{background-image:url(images/util/splitter/mini-left.gif)}.x-layout-split-right{background-image:url(images/util/splitter/mini-right.gif)}.x-rtl.x-layout-split-left{background-image:url(images/util/splitter/mini-right.gif)}.x-rtl.x-layout-split-right{background-image:url(images/util/splitter/mini-left.gif)}.x-layout-split-top{background-image:url(images/util/splitter/mini-top.gif)}.x-layout-split-bottom{background-image:url(images/util/splitter/mini-bottom.gif)}.x-splitter-collapsed .x-layout-split-left{background-image:url(images/util/splitter/mini-right.gif)}.x-splitter-collapsed .x-layout-split-right{background-image:url(images/util/splitter/mini-left.gif)}.x-splitter-collapsed .x-rtl.x-layout-split-left{background-image:url(images/util/splitter/mini-left.gif)}.x-splitter-collapsed .x-rtl.x-layout-split-right{background-image:url(images/util/splitter/mini-right.gif)}.x-splitter-collapsed .x-layout-split-top{background-image:url(images/util/splitter/mini-bottom.gif)}.x-splitter-collapsed .x-layout-split-bottom{background-image:url(images/util/splitter/mini-top.gif)}.x-splitter-active{background-color:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-splitter-active .x-collapse-el{filter:alpha(opacity=30);opacity:.3}.x-border-layout-ct{background-color:#e0e0e0}.x-menu-body{background:#f0f0f0;padding:2px}.x-menu-icon-separator{left:24px;border-left:solid 1px #e0e0e0;background-color:white;width:2px}.x-rtl.x-menu .x-menu-icon-separator{left:auto;right:24px}.x-menu-item{padding:1px;cursor:pointer}.x-menu-item-indent{margin-left:30px}.x-rtl.x-menu-item-indent{margin-left:0;margin-right:30px}.x-menu-item-active{background-image:none;background-color:#e6e6e6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#eee),color-stop(100%,#dcdcdc));background-image:-webkit-linear-gradient(top,#eee,#dcdcdc);background-image:-moz-linear-gradient(top,#eee,#dcdcdc);background-image:-o-linear-gradient(top,#eee,#dcdcdc);background-image:linear-gradient(top,#eee,#dcdcdc);border-color:#9d9d9d;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;border-width:1px;border-style:solid;padding:0}.x-nlg .x-menu-item-active{background:#e6e6e6 repeat-x left top;background-image:url(images/menu/menu-item-active-bg.gif)}.x-menu-item-link{line-height:22px;padding:0 0 0 30px;display:inline-block}.x-rtl.x-menu-item-link{padding:0 30px 0 0}.x-right-check-item-text{padding-right:22px}.x-rtl.x-right-check-item-text{padding-left:22px;padding-right:0}.x-menu-item-icon{width:16px;height:16px;top:4px;left:3px;background-position:center center}.x-menu-item-glyph{font-size:16px;line-height:16px;color:#222;opacity:.5}.x-ie8m .x-menu-item-glyph{color:#898989}.x-gecko .x-menu-item-active .x-menu-item-icon,.x-quirks .x-menu-item-active .x-menu-item-icon,.x-ie9m .x-menu-item-active .x-menu-item-icon{top:3px;left:2px}.x-rtl.x-menu-item-icon{left:auto;right:3px}.x-gecko .x-menu-item-active .x-rtl.x-menu-item-icon,.x-quirks .x-menu-item-active .x-rtl.x-menu-item-icon,.x-ie9m .x-menu-item-active .x-rtl.x-menu-item-icon{left:auto;right:2px}.x-menu-item-icon-right{width:16px;height:16px;top:3px;right:3px;background-position:center center}.x-rtl.x-menu-item-icon-right{right:auto;left:3px}.x-menu-item-text{font-size:11px;color:#222;cursor:pointer;margin-right:16px}a.x-rtl .x-menu-item-text{margin-right:0;margin-left:16px}.x-menu-item-checked .x-menu-item-icon,.x-menu-item-checked .x-menu-item-icon-right{background-image:url(images/menu/checked.gif)}.x-menu-item-checked .x-menu-group-icon{background-image:url(images/menu/group-checked.gif)}.x-menu-item-unchecked .x-menu-item-icon,.x-menu-item-unchecked .x-menu-item-icon-right{background-image:url(images/menu/unchecked.gif)}.x-menu-item-unchecked .x-menu-group-icon{background-image:none}.x-menu-item-separator{height:2px;border-top:solid 1px #e0e0e0;background-color:white;margin:2px 0;padding:0}.x-menu-item-arrow{width:12px;height:9px;top:7px;right:0;background-image:url(images/menu/menu-parent.gif)}.x-gecko .x-menu-item-active .x-menu-item-arrow,.x-quirks .x-menu-item-active .x-menu-item-arrow,.x-ie9m .x-menu-item-active .x-menu-item-arrow{top:6px;right:-1px}.x-rtl.x-menu-item-arrow{left:0;right:auto;background-image:url(images/menu/menu-parent-left.gif)}.x-gecko .x-menu-item-active .x-rtl.x-menu-item-arrow,.x-ie9m .x-menu-item-active .x-rtl.x-menu-item-arrow,.x-quirks .x-menu-item-active .x-rtl.x-menu-item-arrow{right:auto;left:-1px}.x-menu-item-disabled{filter:alpha(opacity=50);opacity:.5}.x-strict .x-ie7m .x-menu-icon-separator{width:1px}.x-strict .x-ie7m .x-menu-item-separator{height:1px}.x-ie .x-menu-item-disabled .x-menu-item-icon{filter:alpha(opacity=50);opacity:.5}.x-ie .x-menu-item-disabled .x-menu-item-text{background-color:transparent}.x-menu-date-item{border-color:#99bbe8}.x-menu-item .x-form-item-label{font-size:11px;color:#222}.x-menu-scroll-top{height:8px;background-image:url(images/menu/scroll-top.gif)}.x-menu-scroll-bottom{height:8px;background-image:url(images/menu/scroll-bottom.gif)}.x-menu-scroll-top,.x-menu-scroll-bottom{background-color:#f0f0f0}.x-menu-item-link:after{display:none;content:"x-slicer:bg:url(images/menu/menu-item-active-bg.gif)"}.x-tool{cursor:pointer}.x-tool-img{overflow:hidden;width:15px;height:15px;background-image:url(images/tools/tool-sprites.gif);margin:0}.x-tool-placeholder{visibility:hidden}.x-tool-close{background-position:0 0}.x-tool-minimize{background-position:0 -15px}.x-tool-maximize{background-position:0 -30px}.x-tool-restore{background-position:0 -45px}.x-tool-toggle{background-position:0 -60px}.x-panel-collapsed .x-tool-toggle{background-position:0 -75px}.x-tool-gear{background-position:0 -90px}.x-tool-prev{background-position:0 -105px}.x-tool-next{background-position:0 -120px}.x-tool-pin{background-position:0 -135px}.x-tool-unpin{background-position:0 -150px}.x-tool-right{background-position:0 -165px}.x-tool-left{background-position:0 -180px}.x-tool-down{background-position:0 -195px}.x-tool-up{background-position:0 -210px}.x-tool-refresh{background-position:0 -225px}.x-tool-plus{background-position:0 -240px}.x-tool-minus{background-position:0 -255px}.x-tool-search{background-position:0 -270px}.x-tool-save{background-position:0 -285px}.x-tool-help{background-position:0 -300px}.x-tool-print{background-position:0 -315px}.x-tool-expand{background-position:0 -330px}.x-tool-collapse{background-position:0 -345px}.x-tool-expand-bottom,.x-tool-collapse-bottom{background-position:0 -195px}.x-tool-expand-top,.x-tool-collapse-top{background-position:0 -210px}.x-tool-expand-left,.x-tool-collapse-left{background-position:0 -180px}.x-tool-expand-right,.x-tool-collapse-right{background-position:0 -165px}.x-rtl.x-tool-expand-left,.x-rtl.x-tool-collapse-left{background-position:0 -165px}.x-rtl.x-tool-expand-right,.x-rtl.x-tool-collapse-right{background-position:0 -180px}.x-tool-over .x-tool-close{background-position:-15px 0}.x-tool-over .x-tool-minimize{background-position:-15px -15px}.x-tool-over .x-tool-maximize{background-position:-15px -30px}.x-tool-over .x-tool-restore{background-position:-15px -45px}.x-tool-over .x-tool-toggle{background-position:-15px -60px}.x-panel-collapsed .x-tool-over .x-tool-toggle{background-position:-15px -75px}.x-tool-over .x-tool-gear{background-position:-15px -90px}.x-tool-over .x-tool-prev{background-position:-15px -105px}.x-tool-over .x-tool-next{background-position:-15px -120px}.x-tool-over .x-tool-pin{background-position:-15px -135px}.x-tool-over .x-tool-unpin{background-position:-15px -150px}.x-tool-over .x-tool-right{background-position:-15px -165px}.x-tool-over .x-tool-left{background-position:-15px -180px}.x-tool-over .x-tool-down{background-position:-15px -195px}.x-tool-over .x-tool-up{background-position:-15px -210px}.x-tool-over .x-tool-refresh{background-position:-15px -225px}.x-tool-over .x-tool-plus{background-position:-15px -240px}.x-tool-over .x-tool-minus{background-position:-15px -255px}.x-tool-over .x-tool-search{background-position:-15px -270px}.x-tool-over .x-tool-save{background-position:-15px -285px}.x-tool-over .x-tool-help{background-position:-15px -300px}.x-tool-over .x-tool-print{background-position:-15px -315px}.x-tool-over .x-tool-expand{background-position:-15px -330px}.x-tool-over .x-tool-collapse{background-position:-15px -345px}.x-tool-over .x-tool-expand-bottom,.x-tool-over .x-tool-collapse-bottom{background-position:-15px -195px}.x-tool-over .x-tool-expand-top,.x-tool-over .x-tool-collapse-top{background-position:-15px -210px}.x-tool-over .x-tool-expand-left,.x-tool-over .x-tool-collapse-left{background-position:-15px -180px}.x-tool-over .x-tool-expand-right,.x-tool-over .x-tool-collapse-right{background-position:-15px -165px}.x-tool-over .x-rtl.x-tool-expand-left,.x-tool-over .x-rtl.x-tool-collapse-left{background-position:-15px -165px}.x-tool-over .x-rtl.x-tool-expand-right,.x-tool-over .x-rtl.x-tool-collapse-right{background-position:-15px -180px}.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;zoom:1;filter:alpha(opacity=0);opacity:0;background-color:#fff}.x-collapsed .x-resizable-handle{display:none}.x-resizable-over .x-resizable-handle-north{cursor:n-resize}.x-resizable-over .x-resizable-handle-south{cursor:s-resize}.x-resizable-over .x-resizable-handle-east{cursor:e-resize}.x-resizable-over .x-resizable-handle-west{cursor:w-resize}.x-resizable-over .x-resizable-handle-southeast{cursor:se-resize}.x-resizable-over .x-resizable-handle-northwest{cursor:nw-resize}.x-resizable-over .x-resizable-handle-northeast{cursor:ne-resize}.x-resizable-over .x-resizable-handle-southwest{cursor:sw-resize}.x-resizable-handle-east{width:6px;height:100%;right:0;top:0}.x-resizable-handle-south{width:100%;height:6px;left:0;bottom:0}.x-resizable-handle-west{width:6px;height:100%;left:0;top:0}.x-resizable-handle-north{width:100%;height:6px;left:0;top:0}.x-resizable-handle-southeast{width:6px;height:6px;right:0;bottom:0;z-index:101}.x-resizable-handle-northwest{width:6px;height:6px;left:0;top:0;z-index:101}.x-resizable-handle-northeast{width:6px;height:6px;right:0;top:0;z-index:101}.x-resizable-handle-southwest{width:6px;height:6px;left:0;bottom:0;z-index:101}.x-ie .x-resizable-handle-east{margin-right:-1px}.x-ie .x-resizable-handle-south{margin-bottom:-1px}.x-resizable-pinned .x-resizable-handle{filter:alpha(opacity=100);opacity:1}.x-window .x-window-handle{filter:alpha(opacity=0);opacity:0}.x-window-collapsed .x-window-handle{display:none}.x-resizable-proxy{border:1px dashed #3b5a82;position:absolute;overflow:hidden;z-index:50000}.x-resizable-over .x-resizable-handle-east,.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-image:url(images/sizer/e-handle.gif)}.x-resizable-over .x-resizable-handle-south,.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-image:url(images/sizer/s-handle.gif)}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left;background-image:url(images/sizer/se-handle.gif)}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right;background-image:url(images/sizer/nw-handle.gif)}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left;background-image:url(images/sizer/ne-handle.gif)}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right;background-image:url(images/sizer/sw-handle.gif)}.x-slider-horz{padding-left:7px;background:no-repeat 0 -15px}.x-slider-horz .x-slider-end{padding-right:7px;background:no-repeat right -30px}.x-slider-horz .x-slider-inner{height:15px}.x-ie6 .x-form-item .x-slider-horz,.x-ie7 .x-form-item .x-slider-horz,.x-quirks .x-ie .x-form-item .x-slider-horz{margin-top:4px}.x-slider-horz .x-slider-thumb{width:14px;height:15px;margin-left:-7px;background-image:url(images/slider/slider-thumb.png)}.x-slider-horz .x-slider-thumb-over{background-position:-14px -15px}.x-slider-horz .x-slider-thumb-drag{background-position:-28px -30px}.x-rtl.x-slider-horz{padding-left:0;padding-right:7px;background-position:right -30px}.x-rtl.x-slider-horz .x-slider-end{padding-right:0;padding-left:7px;background-position:left -15px}.x-rtl.x-slider-horz .x-slider-thumb{margin-right:-7px}.x-slider-vert{padding-top:7px;background:no-repeat -30px 0}.x-slider-vert .x-slider-end{padding-bottom:7px;background:no-repeat -15px bottom;width:15px}.x-slider-vert .x-slider-inner{width:15px}.x-slider-vert .x-slider-thumb{width:15px;height:14px;margin-bottom:-7px;background-image:url(images/slider/slider-v-thumb.png)}.x-slider-vert .x-slider-thumb-over{background-position:-15px -14px}.x-slider-vert .x-slider-thumb-drag{background-position:-30px -28px}.x-slider-horz,.x-slider-horz .x-slider-end,.x-slider-horz .x-slider-inner{background-image:url(images/slider/slider-bg.png)}.x-slider-vert,.x-slider-vert .x-slider-end,.x-slider-vert .x-slider-inner{background-image:url(images/slider/slider-v-bg.png)}.x-grid-row .x-grid-cell-row-checker{vertical-align:middle}.x-column-header-checkbox .x-column-header-inner{padding:0;line-height:0;font-size:0}.x-grid-row-checker,.x-column-header-checkbox .x-column-header-text{height:13px;width:13px;line-height:0;font-size:0;background-image:url(images/form/checkbox.gif);background-repeat:no-repeat;background-color:transparent}.x-column-header-checkbox .x-column-header-text{display:block;margin-left:5px}.x-column-header-checkbox .x-rtl.x-column-header-text{margin-left:auto;margin-right:4px}.x-quirks .x-ie .x-grid-row-checker,.x-quirks .x-ie .x-column-header-checkbox .x-column-header-text,.x-ie7m .x-grid-row-checker,.x-ie7m .x-column-header-checkbox .x-column-header-text{line-height:13px}.x-grid-cell-row-checker .x-grid-cell-inner{padding:3px 5px;line-height:14px}.x-grid-hd-checker-on .x-column-header-text,.x-grid-row-selected .x-grid-row-checker,.x-grid-row-checked .x-grid-row-checker{background-position:0 -13px}.x-tab-default-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea)}.x-tab-default-top-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nlg .x-tab-default-top{background-image:url(images/tab/tab-default-top-bg.gif);background-position:0 top}.x-nbr .x-tab-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tab-default-top{background-image:url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9")}.x-tab-default-top-tl{background-position:0 -8px}.x-tab-default-top-tr{background-position:right -12px}.x-tab-default-top-bl{background-position:0 -16px}.x-tab-default-top-br{background-position:right -20px}.x-tab-default-top-ml{background-position:0 top}.x-tab-default-top-mr{background-position:right top}.x-tab-default-top-tc{background-position:0 0}.x-tab-default-top-bc{background-position:0 -4px}.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-mr{padding-right:4px}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-ml{padding-left:4px}.x-tab-default-top-tc{height:4px}.x-tab-default-top-bc{height:0}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-tc,.x-tab-default-top-bc,.x-tab-default-top-ml,.x-tab-default-top-mr{zoom:1;background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-top-ml,.x-tab-default-top-mr{zoom:1;background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-top-mc{padding:0 6px 3px 6px}.x-strict .x-ie7 .x-tab-default-top-tl,.x-strict .x-ie7 .x-tab-default-top-bl{position:relative;right:0}.x-tab-default-top:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"}.x-tab-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:3px 9px 3px 9px;border-width:0 1px 1px 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:linear-gradient(bottom,#dcdcdc,#eaeaea)}.x-tab-default-bottom-mc{background-image:url(images/tab/tab-default-bottom-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nlg .x-tab-default-bottom{background-image:url(images/tab/tab-default-bottom-bg.gif);background-position:0 top}.x-nbr .x-tab-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tab-default-bottom{background-image:url("about:blank#th-0-0-4-4-0-1-1-1-3-9-3-9")}.x-tab-default-bottom-tl{background-position:0 -8px}.x-tab-default-bottom-tr{background-position:right -12px}.x-tab-default-bottom-bl{background-position:0 -16px}.x-tab-default-bottom-br{background-position:right -20px}.x-tab-default-bottom-ml{background-position:0 top}.x-tab-default-bottom-mr{background-position:right top}.x-tab-default-bottom-tc{background-position:0 0}.x-tab-default-bottom-bc{background-position:0 -4px}.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-mr{padding-right:4px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-ml{padding-left:4px}.x-tab-default-bottom-tc{height:0}.x-tab-default-bottom-bc{height:4px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-tc,.x-tab-default-bottom-bc,.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{zoom:1;background-image:url(images/tab/tab-default-bottom-corners.gif)}.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{zoom:1;background-image:url(images/tab/tab-default-bottom-sides.gif)}.x-tab-default-bottom-mc{padding:3px 6px 0 6px}.x-strict .x-ie7 .x-tab-default-bottom-tl,.x-strict .x-ie7 .x-tab-default-bottom-bl{position:relative;right:0}.x-tab-default-bottom:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-bottom-fbg.gif), bg:url(images/tab/tab-default-bottom-bg.gif), corners:url(images/tab/tab-default-bottom-corners.gif), sides:url(images/tab/tab-default-bottom-sides.gif)"}.x-tab-default-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea)}.x-tab-default-left-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nlg .x-tab-default-left{background-image:url(images/tab/tab-default-top-bg.gif);background-position:0 top}.x-nbr .x-tab-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tab-default-left{background-image:url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9")}.x-tab-default-left-tl{background-position:0 -8px}.x-tab-default-left-tr{background-position:right -12px}.x-tab-default-left-bl{background-position:0 -16px}.x-tab-default-left-br{background-position:right -20px}.x-tab-default-left-ml{background-position:0 top}.x-tab-default-left-mr{background-position:right top}.x-tab-default-left-tc{background-position:0 0}.x-tab-default-left-bc{background-position:0 -4px}.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-mr{padding-right:4px}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-ml{padding-left:4px}.x-tab-default-left-tc{height:4px}.x-tab-default-left-bc{height:0}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-tc,.x-tab-default-left-bc,.x-tab-default-left-ml,.x-tab-default-left-mr{zoom:1;background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-left-ml,.x-tab-default-left-mr{zoom:1;background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-left-mc{padding:0 6px 3px 6px}.x-strict .x-ie7 .x-tab-default-left-tl,.x-strict .x-ie7 .x-tab-default-left-bl{position:relative;right:0}.x-tab-default-left:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"}.x-tab-default-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea)}.x-tab-default-right-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nlg .x-tab-default-right{background-image:url(images/tab/tab-default-top-bg.gif);background-position:0 top}.x-nbr .x-tab-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent}body.x-nbr .x-tab-default-right{background-image:url("about:blank#th-4-4-0-0-1-1-0-1-3-9-3-9")}.x-tab-default-right-tl{background-position:0 -8px}.x-tab-default-right-tr{background-position:right -12px}.x-tab-default-right-bl{background-position:0 -16px}.x-tab-default-right-br{background-position:right -20px}.x-tab-default-right-ml{background-position:0 top}.x-tab-default-right-mr{background-position:right top}.x-tab-default-right-tc{background-position:0 0}.x-tab-default-right-bc{background-position:0 -4px}.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-mr{padding-right:4px}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-ml{padding-left:4px}.x-tab-default-right-tc{height:4px}.x-tab-default-right-bc{height:0}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-tc,.x-tab-default-right-bc,.x-tab-default-right-ml,.x-tab-default-right-mr{zoom:1;background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-right-ml,.x-tab-default-right-mr{zoom:1;background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-right-mc{padding:0 6px 3px 6px}.x-strict .x-ie7 .x-tab-default-right-tl,.x-strict .x-ie7 .x-tab-default-right-bl{position:relative;right:0}.x-tab-default-right:after{display:none;content:"x-slicer:stretch:bottom, frame-bg:url(images/tab/tab-default-top-fbg.gif), bg:url(images/tab/tab-default-top-bg.gif), corners:url(images/tab/tab-default-top-corners.gif), sides:url(images/tab/tab-default-top-sides.gif)"}.x-tab-default{border-color:#b5b5b5;margin:0 0 0 2px;cursor:pointer}.x-tab-default .x-tab-inner{font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;color:#6f6f6f;line-height:13px}.x-tab-default .x-tab-icon-el{width:16px;height:16px;line-height:16px;background-position:center center}.x-tab-default .x-tab-glyph{font-size:16px;color:#6f6f6f;opacity:.5}.x-ie8m .x-tab-default .x-tab-glyph{color:#acacac}.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default{padding-left:0}.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-button{padding-left:9px}.x-strict .x-ie9 .x-tab-bar-vertical .x-tab-default .x-tab-icon-el{left:9px}.x-tab-default-icon .x-tab-inner{width:16px}.x-rtl.x-tab-default{margin:0 2px 0 0}.x-rtl.x-tab-default{margin:0 2px 0 0}.x-tab-default-left{margin:0 2px 0 0}.x-rtl.x-tab-default-left{margin:0 0 0 2px}.x-tab-default-top,.x-tab-default-left,.x-tab-default-right{border-bottom:1px solid #d0d0d0;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea);-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-nlg .x-tab-default-top,.x-nlg .x-tab-default-left,.x-nlg .x-tab-default-right{background-image:url(images/tab/tab-default-top-bg.gif)}.x-tab-default-bottom{border-top:1px solid #d0d0d0;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:linear-gradient(bottom,#dcdcdc,#eaeaea);-webkit-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-nlg .x-tab-default-bottom{background-image:url(images/tab/tab-default-bottom-bg.gif)}.x-tab-default-left{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie9m .x-tab-default-left{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.x-rtl.x-tab-default-left{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-rtl.x-tab-default-left{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.x-tab-default-right{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie9m .x-tab-default-right{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.x-rtl.x-tab-default-right{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie9m .x-rtl.x-tab-default-right{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.x-tab-default-icon-text-left .x-tab-inner{padding-left:20px}.x-rtl.x-tab-default-icon-text-left .x-tab-inner{padding-left:0;padding-right:20px}.x-tab-default-over{background-color:#f2eeee}.x-tab-default-over .x-tab-glyph{color:#6f6f6f}.x-ie8m .x-tab-default-over .x-tab-glyph{color:#b0aeae}.x-tab-default-top-over,.x-tab-default-left-over,.x-tab-default-right-over{background-image:none;background-color:#f2eeee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#f0f0f0));background-image:-webkit-linear-gradient(top,#fff,#f0f0f0);background-image:-moz-linear-gradient(top,#fff,#f0f0f0);background-image:-o-linear-gradient(top,#fff,#f0f0f0);background-image:linear-gradient(top,#fff,#f0f0f0)}.x-nlg .x-tab-default-top-over,.x-nlg .x-tab-default-left-over,.x-nlg .x-tab-default-right-over{background-image:url(images/tab/tab-default-top-over-bg.gif)}.x-tab-default-bottom-over{background-image:none;background-color:#f2eeee;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#fff),color-stop(100%,#f0f0f0));background-image:-webkit-linear-gradient(bottom,#fff,#f0f0f0);background-image:-moz-linear-gradient(bottom,#fff,#f0f0f0);background-image:-o-linear-gradient(bottom,#fff,#f0f0f0);background-image:linear-gradient(bottom,#fff,#f0f0f0)}.x-nlg .x-tab-default-bottom-over{background-image:url(images/tab/tab-default-bottom-over-bg.gif)}.x-tab-default-active{background-color:#eaeaea}.x-tab-default-active .x-tab-inner{color:#333}.x-tab-default-active .x-tab-glyph{color:#333}.x-ie8m .x-tab-default-active .x-tab-glyph{color:#8e8e8e}.x-tab-default-top-active,.x-tab-default-left-active,.x-tab-default-right-active{border-bottom-color:#eaeaea;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#fff,#eaeaea);background-image:-moz-linear-gradient(top,#fff,#eaeaea);background-image:-o-linear-gradient(top,#fff,#eaeaea);background-image:linear-gradient(top,#fff,#eaeaea)}.x-nlg .x-tab-default-top-active,.x-nlg .x-tab-default-left-active,.x-nlg .x-tab-default-right-active{background-image:url(images/tab/tab-default-top-active-bg.gif)}.x-tab-default-bottom-active{border-top-color:#eaeaea;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#fff),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(bottom,#fff,#eaeaea);background-image:-moz-linear-gradient(bottom,#fff,#eaeaea);background-image:-o-linear-gradient(bottom,#fff,#eaeaea);background-image:linear-gradient(bottom,#fff,#eaeaea)}.x-nlg .x-tab-default-bottom-active{background-image:url(images/tab/tab-default-bottom-active-bg.gif)}.x-tab-default-disabled{border-color:#dadada;cursor:default}.x-tab-default-disabled .x-tab-inner{color:#b7b7b7}.x-tab-default-disabled .x-tab-icon-el{filter:alpha(opacity=50);opacity:.5}.x-tab-default-disabled .x-tab-glyph{color:#b7b7b7;opacity:.3;filter:none}.x-ie8m .x-tab-default-disabled .x-tab-glyph{color:#ddd}.x-tab-default-top-disabled,.x-tab-default-left-disabled,.x-tab-default-right-disabled{background-image:none;background-color:#eee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#eee),color-stop(100%,#f4f4f4));background-image:-webkit-linear-gradient(top,#eee,#f4f4f4);background-image:-moz-linear-gradient(top,#eee,#f4f4f4);background-image:-o-linear-gradient(top,#eee,#f4f4f4);background-image:linear-gradient(top,#eee,#f4f4f4)}.x-nlg .x-tab-default-top-disabled,.x-nlg .x-tab-default-left-disabled,.x-nlg .x-tab-default-right-disabled{background-image:url(images/tab/tab-default-top-disabled-bg.gif)}.x-tab-default-bottom-disabled{background-image:none;background-color:#eee;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#eee),color-stop(100%,#f4f4f4));background-image:-webkit-linear-gradient(bottom,#eee,#f4f4f4);background-image:-moz-linear-gradient(bottom,#eee,#f4f4f4);background-image:-o-linear-gradient(bottom,#eee,#f4f4f4);background-image:linear-gradient(bottom,#eee,#f4f4f4)}.x-nlg .x-tab-default-bottom-disabled{background-image:url(images/tab/tab-default-bottom-disabled-bg.gif)}.x-tab-default-top-over .x-frame-tl,.x-tab-default-top-over .x-frame-bl,.x-tab-default-top-over .x-frame-tr,.x-tab-default-top-over .x-frame-br,.x-tab-default-top-over .x-frame-tc,.x-tab-default-top-over .x-frame-bc,.x-tab-default-left-over .x-frame-tl,.x-tab-default-left-over .x-frame-bl,.x-tab-default-left-over .x-frame-tr,.x-tab-default-left-over .x-frame-br,.x-tab-default-left-over .x-frame-tc,.x-tab-default-left-over .x-frame-bc,.x-tab-default-right-over .x-frame-tl,.x-tab-default-right-over .x-frame-bl,.x-tab-default-right-over .x-frame-tr,.x-tab-default-right-over .x-frame-br,.x-tab-default-right-over .x-frame-tc,.x-tab-default-right-over .x-frame-bc{background-image:url(images/tab/tab-default-top-over-corners.gif)}.x-tab-default-top-over .x-frame-ml,.x-tab-default-top-over .x-frame-mr,.x-tab-default-left-over .x-frame-ml,.x-tab-default-left-over .x-frame-mr,.x-tab-default-right-over .x-frame-ml,.x-tab-default-right-over .x-frame-mr{background-image:url(images/tab/tab-default-top-over-sides.gif)}.x-tab-default-top-over .x-frame-mc,.x-tab-default-left-over .x-frame-mc,.x-tab-default-right-over .x-frame-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-over-fbg.gif)}.x-tab-default-bottom-over .x-frame-tl,.x-tab-default-bottom-over .x-frame-bl,.x-tab-default-bottom-over .x-frame-tr,.x-tab-default-bottom-over .x-frame-br,.x-tab-default-bottom-over .x-frame-tc,.x-tab-default-bottom-over .x-frame-bc{background-image:url(images/tab/tab-default-bottom-over-corners.gif)}.x-tab-default-bottom-over .x-frame-ml,.x-tab-default-bottom-over .x-frame-mr{background-image:url(images/tab/tab-default-bottom-over-sides.gif)}.x-tab-default-bottom-over .x-frame-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-over-fbg.gif)}.x-tab-default-top-active .x-frame-tl,.x-tab-default-top-active .x-frame-bl,.x-tab-default-top-active .x-frame-tr,.x-tab-default-top-active .x-frame-br,.x-tab-default-top-active .x-frame-tc,.x-tab-default-top-active .x-frame-bc,.x-tab-default-left-active .x-frame-tl,.x-tab-default-left-active .x-frame-bl,.x-tab-default-left-active .x-frame-tr,.x-tab-default-left-active .x-frame-br,.x-tab-default-left-active .x-frame-tc,.x-tab-default-left-active .x-frame-bc,.x-tab-default-right-active .x-frame-tl,.x-tab-default-right-active .x-frame-bl,.x-tab-default-right-active .x-frame-tr,.x-tab-default-right-active .x-frame-br,.x-tab-default-right-active .x-frame-tc,.x-tab-default-right-active .x-frame-bc{background-image:url(images/tab/tab-default-top-active-corners.gif)}.x-tab-default-top-active .x-frame-ml,.x-tab-default-top-active .x-frame-mr,.x-tab-default-left-active .x-frame-ml,.x-tab-default-left-active .x-frame-mr,.x-tab-default-right-active .x-frame-ml,.x-tab-default-right-active .x-frame-mr{background-image:url(images/tab/tab-default-top-active-sides.gif)}.x-tab-default-top-active .x-frame-mc,.x-tab-default-left-active .x-frame-mc,.x-tab-default-right-active .x-frame-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-active-fbg.gif)}.x-tab-default-bottom-active .x-frame-tl,.x-tab-default-bottom-active .x-frame-bl,.x-tab-default-bottom-active .x-frame-tr,.x-tab-default-bottom-active .x-frame-br,.x-tab-default-bottom-active .x-frame-tc,.x-tab-default-bottom-active .x-frame-bc{background-image:url(images/tab/tab-default-bottom-active-corners.gif)}.x-tab-default-bottom-active .x-frame-ml,.x-tab-default-bottom-active .x-frame-mr{background-image:url(images/tab/tab-default-bottom-active-sides.gif)}.x-tab-default-bottom-active .x-frame-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-active-fbg.gif)}.x-tab-default-top-disabled .x-frame-tl,.x-tab-default-top-disabled .x-frame-bl,.x-tab-default-top-disabled .x-frame-tr,.x-tab-default-top-disabled .x-frame-br,.x-tab-default-top-disabled .x-frame-tc,.x-tab-default-top-disabled .x-frame-bc,.x-tab-default-left-disabled .x-frame-tl,.x-tab-default-left-disabled .x-frame-bl,.x-tab-default-left-disabled .x-frame-tr,.x-tab-default-left-disabled .x-frame-br,.x-tab-default-left-disabled .x-frame-tc,.x-tab-default-left-disabled .x-frame-bc,.x-tab-default-right-disabled .x-frame-tl,.x-tab-default-right-disabled .x-frame-bl,.x-tab-default-right-disabled .x-frame-tr,.x-tab-default-right-disabled .x-frame-br,.x-tab-default-right-disabled .x-frame-tc,.x-tab-default-right-disabled .x-frame-bc{background-image:url(images/tab/tab-default-top-disabled-corners.gif)}.x-tab-default-top-disabled .x-frame-ml,.x-tab-default-top-disabled .x-frame-mr,.x-tab-default-left-disabled .x-frame-ml,.x-tab-default-left-disabled .x-frame-mr,.x-tab-default-right-disabled .x-frame-ml,.x-tab-default-right-disabled .x-frame-mr{background-image:url(images/tab/tab-default-top-disabled-sides.gif)}.x-tab-default-top-disabled .x-frame-mc,.x-tab-default-left-disabled .x-frame-mc,.x-tab-default-right-disabled .x-frame-mc{background-color:#eee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-disabled-fbg.gif)}.x-tab-default-bottom-disabled .x-frame-tl,.x-tab-default-bottom-disabled .x-frame-bl,.x-tab-default-bottom-disabled .x-frame-tr,.x-tab-default-bottom-disabled .x-frame-br,.x-tab-default-bottom-disabled .x-frame-tc,.x-tab-default-bottom-disabled .x-frame-bc{background-image:url(images/tab/tab-default-bottom-disabled-corners.gif)}.x-tab-default-bottom-disabled .x-frame-ml,.x-tab-default-bottom-disabled .x-frame-mr{background-image:url(images/tab/tab-default-bottom-disabled-sides.gif)}.x-tab-default-bottom-disabled .x-frame-mc{background-color:#eee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-disabled-fbg.gif)}.x-nbr .x-tab-default-top,.x-nbr .x-tab-default-left,.x-nbr .x-tab-default-right{border-bottom-width:1px!important}.x-nbr .x-tab-default-bottom{border-top-width:1px!important}.x-tab-bar-default{border-style:solid;border-color:#d0d0d0}.x-tab-bar-default-top{padding:1px 0 0;border-width:1px 1px 0}.x-tab-bar-default-bottom{padding:0 0 1px 0;border-width:0 1px 1px 1px}.x-tab-bar-default-left{padding:0 0 0 1px;border-width:1px 0 1px 1px}.x-tab-bar-default-right{padding:0 1px 0 0;border-width:1px 1px 1px 0}.x-tab-bar-body-default-horizontal{height:23px}.x-strict .x-ie6 .x-tab-bar-body-default-horizontal,.x-strict .x-ie7 .x-tab-bar-body-default-horizontal{height:21px}.x-tab-bar-body-default-vertical{width:23px}.x-strict .x-ie6 .x-tab-bar-body-default-vertical,.x-strict .x-ie7 .x-tab-bar-body-default-vertical{width:21px}.x-tab-bar-body-default-top{padding-bottom:2px}.x-tab-bar-body-default-bottom{padding-top:2px}.x-tab-bar-body-default-left{padding-right:2px}.x-tab-bar-body-default-right{padding-left:2px}.x-tab-bar-strip-default{border-style:solid;border-color:#d0d0d0;background-color:#eaeaea}.x-strict .x-ie6 .x-tab-bar-strip-default-horizontal,.x-strict .x-ie7 .x-tab-bar-strip-default-horizontal{height:2px}.x-strict .x-ie6 .x-tab-bar-strip-default-vertical,.x-strict .x-ie7 .x-tab-bar-strip-default-vertical{width:2px}.x-tab-bar-strip-default-top{border-width:1px 0 0 0;height:3px}.x-tab-bar-plain .x-tab-bar-strip-default-top{border-width:1px 1px 0}.x-tab-bar-strip-default-bottom{border-width:0 0 1px 0;height:3px}.x-tab-bar-plain .x-tab-bar-strip-default-bottom{border-width:0 1px 1px 1px}.x-tab-bar-strip-default-left{border-width:0 0 0 1px;width:3px}.x-tab-bar-plain .x-tab-bar-strip-default-left{border-width:1px 0 1px 1px}.x-tab-bar-strip-default-right{border-width:0 1px 0 0;width:3px}.x-tab-bar-plain .x-tab-bar-strip-default-right{border-width:1px 1px 1px 0}.x-tab-bar-default{background-color:#d2d2d2}.x-tab-bar-default-top{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(top,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(top,#dfdede,#d2d2d2);background-image:-o-linear-gradient(top,#dfdede,#d2d2d2);background-image:linear-gradient(top,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-top{background-image:url(images/tab-bar/tab-bar-default-top-bg.gif)}.x-tab-bar-default-bottom{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:-o-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:linear-gradient(bottom,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-bottom{background-image:url(images/tab-bar/tab-bar-default-bottom-bg.gif)}.x-tab-bar-default-left{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(left,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(left,#dfdede,#d2d2d2);background-image:-o-linear-gradient(left,#dfdede,#d2d2d2);background-image:linear-gradient(left,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-left{background-image:url(images/tab-bar/tab-bar-default-left-bg.gif)}.x-tab-bar-default-right{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(right,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(right,#dfdede,#d2d2d2);background-image:-o-linear-gradient(right,#dfdede,#d2d2d2);background-image:linear-gradient(right,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-right{background-image:url(images/tab-bar/tab-bar-default-right-bg.gif)}.x-tab-default .x-tab-close-btn{width:11px;height:11px;background-image:url(images/tab/tab-default-close.gif);filter:alpha(opacity=60);opacity:.6}.x-tab-default a.x-tab-close-btn:hover{filter:alpha(opacity=100);opacity:1}.x-tab-default .x-tab-close-btn{top:2px;right:2px}.x-rtl.x-tab-default .x-tab-close-btn{right:auto;left:2px}.x-tab-bar .x-tab-default-disabled a.x-tab-close-btn{filter:alpha(opacity=30);opacity:.3}.x-tab-default-closable .x-tab-wrap{padding-right:14px}.x-rtl.x-tab-default-closable .x-tab-wrap{padding-right:0;padding-left:14px}.x-tab-bar-default .x-box-scroller{cursor:pointer}.x-tab-bar-default .x-tabbar-scroll-left,.x-tab-bar-default .x-tabbar-scroll-right{height:20px;width:18px}.x-tab-bar-default .x-tabbar-scroll-top,.x-tab-bar-default .x-tabbar-scroll-bottom{width:20px;height:18px}.x-tab-bar-default-bottom .x-box-scroller{margin-top:1px}.x-tab-bar-default-right .x-box-scroller{margin-left:1px}.x-rtl.x-tab-bar-default-right .x-box-scroller{margin-left:0}.x-rtl.x-tab-bar-default-left .x-box-scroller{margin-right:1px}.x-tab-bar-default-top .x-tabbar-scroll-left{background-image:url(images/tab-bar/default-scroll-left-top.gif)}.x-tab-bar-default-top .x-tabbar-scroll-right{background-image:url(images/tab-bar/default-scroll-right-top.gif)}.x-rtl.x-tab-bar-default-top .x-tabbar-scroll-left{background-image:url(images/tab-bar/default-scroll-right-top.gif)}.x-rtl.x-tab-bar-default-top .x-tabbar-scroll-right{background-image:url(images/tab-bar/default-scroll-left-top.gif)}.x-tab-bar-default-bottom .x-tabbar-scroll-left{background-image:url(images/tab-bar/default-scroll-left-bottom.gif)}.x-tab-bar-default-bottom .x-tabbar-scroll-right{background-image:url(images/tab-bar/default-scroll-right-bottom.gif)}.x-rtl.x-tab-bar-default-bottom .x-tabbar-scroll-left{background-image:url(images/tab-bar/default-scroll-right-bottom.gif)}.x-rtl.x-tab-bar-default-bottom .x-tabbar-scroll-right{background-image:url(images/tab-bar/default-scroll-left-bottom.gif)}.x-tab-bar-default-left .x-tabbar-scroll-top{background-image:url(images/tab-bar/default-scroll-top-left.gif)}.x-tab-bar-default-left .x-tabbar-scroll-bottom{background-image:url(images/tab-bar/default-scroll-bottom-left.gif)}.x-tab-bar-default-right .x-tabbar-scroll-top{background-image:url(images/tab-bar/default-scroll-top-right.gif)}.x-tab-bar-default-right .x-tabbar-scroll-bottom{background-image:url(images/tab-bar/default-scroll-bottom-right.gif)}.x-tab-bar-default .x-tabbar-scroll-left-hover,.x-tab-bar-default .x-tabbar-scroll-right-hover{background-position:-18px 0}.x-tab-bar-default .x-tabbar-scroll-top-hover,.x-tab-bar-default .x-tabbar-scroll-bottom-hover{background-position:0 -18px}.x-tab-bar-default .x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-tab-default-top-over:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-top-over-bg.gif), corners:url(images/tab/tab-default-top-over-corners.gif), sides:url(images/tab/tab-default-top-over-sides.gif), frame-bg:url(images/tab/tab-default-top-over-fbg.gif)"}.x-tab-default-bottom-over:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-bottom-over-bg.gif), corners:url(images/tab/tab-default-bottom-over-corners.gif), sides:url(images/tab/tab-default-bottom-over-sides.gif), frame-bg:url(images/tab/tab-default-bottom-over-fbg.gif)"}.x-tab-default-top-active:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-top-active-bg.gif), corners:url(images/tab/tab-default-top-active-corners.gif), sides:url(images/tab/tab-default-top-active-sides.gif), frame-bg:url(images/tab/tab-default-top-active-fbg.gif)"}.x-tab-default-bottom-active:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-bottom-active-bg.gif), corners:url(images/tab/tab-default-bottom-active-corners.gif), sides:url(images/tab/tab-default-bottom-active-sides.gif), frame-bg:url(images/tab/tab-default-bottom-active-fbg.gif)"}.x-tab-default-top-disabled:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-top-disabled-bg.gif), corners:url(images/tab/tab-default-top-disabled-corners.gif), sides:url(images/tab/tab-default-top-disabled-sides.gif), frame-bg:url(images/tab/tab-default-top-disabled-fbg.gif)"}.x-tab-default-bottom-disabled:after{display:none;content:"x-slicer:bg:url(images/tab/tab-default-bottom-disabled-bg.gif), corners:url(images/tab/tab-default-bottom-disabled-corners.gif), sides:url(images/tab/tab-default-bottom-disabled-sides.gif), frame-bg:url(images/tab/tab-default-bottom-disabled-fbg.gif)"}.x-tab-bar-default-top:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-top-bg.gif)"}.x-tab-bar-default-bottom:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-bottom-bg.gif)"}.x-tab-bar-default-left:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-left-bg.gif)"}.x-tab-bar-default-right:after{display:none;content:"x-slicer:bg:url(images/tab-bar/tab-bar-default-right-bg.gif)"}.x-tab-bar-plain{border-width:0;padding:0}.x-autowidth-table table.x-grid-table{table-layout:auto;width:auto!important}.x-tree-expander{cursor:pointer;position:relative;top:-2px}.x-tree-arrows .x-tree-expander{background:url(images/tree/arrows.gif) no-repeat 0 0}.x-tree-arrows .x-tree-expander-over .x-tree-expander{background-position:-32px 0}.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander{background-position:-16px 0}.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-expander{background-position:-48px 0}.x-tree-arrows .x-rtl.x-tree-expander{background:url(images/tree/arrows-rtl.gif) no-repeat -48px 0}.x-tree-arrows .x-tree-expander-over .x-rtl.x-tree-expander{background-position:-16px 0}.x-tree-arrows .x-grid-tree-node-expanded .x-rtl.x-tree-expander{background-position:-32px 0}.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-rtl.x-tree-expander{background-position:0 0}.x-tree-lines .x-tree-elbow{background-image:url(images/tree/elbow.gif)}.x-tree-lines .x-tree-elbow-end{background-image:url(images/tree/elbow-end.gif)}.x-tree-lines .x-tree-elbow-plus{background-image:url(images/tree/elbow-plus.gif)}.x-tree-lines .x-tree-elbow-end-plus{background-image:url(images/tree/elbow-end-plus.gif)}.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-plus{background-image:url(images/tree/elbow-minus.gif)}.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus{background-image:url(images/tree/elbow-end-minus.gif)}.x-tree-lines .x-tree-elbow-line{background-image:url(images/tree/elbow-line.gif)}.x-tree-lines .x-rtl.x-tree-elbow{background-image:url(images/tree/elbow-rtl.gif)}.x-tree-lines .x-rtl.x-tree-elbow-end{background-image:url(images/tree/elbow-end-rtl.gif)}.x-tree-lines .x-rtl.x-tree-elbow-plus{background-image:url(images/tree/elbow-plus-rtl.gif)}.x-tree-lines .x-rtl.x-tree-elbow-end-plus{background-image:url(images/tree/elbow-end-plus-rtl.gif)}.x-tree-lines .x-grid-tree-node-expanded .x-rtl.x-tree-elbow-plus{background-image:url(images/tree/elbow-minus-rtl.gif)}.x-tree-lines .x-grid-tree-node-expanded .x-rtl.x-tree-elbow-end-plus{background-image:url(images/tree/elbow-end-minus-rtl.gif)}.x-tree-lines .x-rtl.x-tree-elbow-line{background-image:url(images/tree/elbow-line-rtl.gif)}.x-tree-no-lines .x-tree-expander{background-image:url(images/tree/elbow-plus-nl.gif)}.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-expander{background-image:url(images/tree/elbow-minus-nl.gif)}.x-tree-no-lines .x-rtl.x-tree-expander{background-image:url(images/tree/elbow-plus-nl-rtl.gif)}.x-tree-no-lines .x-grid-tree-node-expanded .x-rtl.x-tree-expander{background-image:url(images/tree/elbow-minus-nl-rtl.gif)}.x-tree-icon{margin:1px 3px 0 0;vertical-align:top;background-repeat:no-repeat}.x-rtl.x-tree-icon{margin:1px 0 0 3px}.x-tree-elbow,.x-tree-elbow-end,.x-tree-elbow-plus,.x-tree-elbow-end-plus,.x-tree-elbow-empty,.x-tree-elbow-line{height:19px;width:16px;vertical-align:top}.x-tree-icon-leaf{width:16px;background-image:url(images/tree/leaf.gif)}.x-rtl.x-tree-icon-leaf{background-image:url(images/tree/leaf-rtl.gif)}.x-tree-icon-parent{width:16px;background-image:url(images/tree/folder.gif)}.x-rtl.x-tree-icon-parent{background-image:url(images/tree/folder-rtl.gif)}.x-grid-tree-node-expanded .x-tree-icon-parent{background-image:url(images/tree/folder-open.gif)}.x-grid-tree-node-expanded .x-rtl.x-tree-icon-parent{background-image:url(images/tree/folder-open-rtl.gif)}.x-tree-view{overflow:hidden}.x-tree-view .x-grid-cell-inner{cursor:pointer;vertical-align:top;padding:0 6px 0 6px}.x-grid-cell-treecolumn .x-grid-cell-inner{padding-left:0;overflow:visible}.x-tree-node-text{vertical-align:middle;line-height:19px}.x-ie .x-tree-view .x-tree-elbow,.x-ie .x-tree-view .x-tree-elbow-end,.x-ie .x-tree-view .x-tree-elbow-plus,.x-ie .x-tree-view .x-tree-elbow-end-plus,.x-ie .x-tree-view .x-tree-elbow-empty,.x-ie .x-tree-view .x-tree-elbow-line{vertical-align:-6px}.x-tree-checkbox{margin:3px 3px 0 0;display:inline-block;vertical-align:top;width:13px;height:13px;background:no-repeat;background-image:url(images/form/checkbox.gif);overflow:hidden;padding:0;border:0}.x-tree-checkbox::-moz-focus-inner{padding:0;border:0}.x-rtl.x-tree-checkbox{margin:3px 0 0 3px}.x-tree-checkbox-checked{background-position:0 -13px}.x-grid-tree-loading .x-tree-icon{background-image:url(images/tree/loading.gif)}.x-grid-tree-loading .x-rtl.x-tree-icon{background-image:url(images/tree/loading.gif)}.x-grid-tree-loading span{font-style:italic;color:#444}.x-tree-animator-wrap{overflow:hidden}.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(images/tree/drop-append.gif)}.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(images/tree/drop-above.gif)}.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(images/tree/drop-below.gif)}.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(images/tree/drop-between.gif)}.x-tree-ddindicator{height:1px;border-width:1px 0 0;border-style:dotted;border-color:green}.x-box-tl{background:transparent no-repeat 0 0;zoom:1}.x-box-tc{height:8px;background:transparent repeat-x 0 0;overflow:hidden}.x-box-tr{background:transparent no-repeat right -8px}.x-box-ml{background:transparent repeat-y 0;padding-left:4px;overflow:hidden;zoom:1}.x-box-mc{background:repeat-x 0 -16px;padding:4px 10px}.x-box-mc h3{margin:0 0 4px 0;zoom:1}.x-box-mr{background:transparent repeat-y right;padding-right:4px;overflow:hidden}.x-box-bl{background:transparent no-repeat 0 -16px;zoom:1}.x-box-bc{background:transparent repeat-x 0 -8px;height:8px;overflow:hidden}.x-box-br{background:transparent no-repeat right -24px}.x-box-tl,.x-box-bl{padding-left:8px;overflow:hidden}.x-box-tr,.x-box-br{padding-right:8px;overflow:hidden}.x-box-tl{background-image:url(images/box/corners.gif)}.x-box-tc{background-image:url(images/box/tb.gif)}.x-box-tr{background-image:url(images/box/corners.gif)}.x-box-ml{background-image:url(images/box/l.gif)}.x-box-mc{background-color:#eee;background-image:url(images/box/tb.gif);font-family:"Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;color:#393939;font-size:15px}.x-box-mc h3{font-size:18px;font-weight:bold}.x-box-mr{background-image:url(images/box/r.gif)}.x-box-bl{background-image:url(images/box/corners.gif)}.x-box-bc{background-image:url(images/box/tb.gif)}.x-box-br{background-image:url(images/box/corners.gif)}.x-box-blue .x-box-bl,.x-box-blue .x-box-br,.x-box-blue .x-box-tl,.x-box-blue .x-box-tr{background-image:url(images/box/corners-blue.gif)}.x-box-blue .x-box-bc,.x-box-blue .x-box-mc,.x-box-blue .x-box-tc{background-image:url(images/box/tb-blue.gif)}.x-box-blue .x-box-mc{background-color:#c3daf9}.x-box-blue .x-box-mc h3{color:#17385b}.x-box-blue .x-box-ml{background-image:url(images/box/l-blue.gif)}.x-box-blue .x-box-mr{background-image:url(images/box/r-blue.gif)}.x-rtl.x-toolbar-more-icon{background-image:url(images/toolbar/more-left.gif)!important}.x-message-box .x-msg-box-wait{background-image:url(images/shared/blue-loading.gif)}.x-form-trigger{border-bottom:1px solid #b5b8c8;height:21px}.x-border-box .x-form-trigger{height:22px}.x-toolbar-item .x-form-trigger{height:19px}.x-border-box .x-field-default-toolbar .x-form-trigger{height:20px}.x-form-trigger-over{border-bottom-color:#a1a1a1}.x-form-trigger-wrap-focus .x-form-trigger{border-bottom-color:#a1a1a1}.x-strict .x-ie6 .x-toolbar-item .x-form-spinner-up,.x-strict .x-ie7 .x-toolbar-item .x-form-spinner-up,.x-strict .x-ie6 .x-toolbar-item .x-form-spinner-down,.x-strict .x-ie7 .x-toolbar-item .x-form-spinner-down{height:9px!important}.x-html-editor-wrap .x-toolbar{border-left-color:#b5b8c8;border-top-color:#b5b8c8;border-right-color:#b5b8c8}.x-html-editor-input{border:1px solid #b5b8c8;border-top-width:0}.x-column-header-trigger{background:no-repeat left center;background-color:#c5c5c5;background-image:url(images/grid/grid3-hd-btn.gif)}.x-rtl.x-column-header-trigger{background-image:url(images/grid/grid3-hd-btn-left.gif);background-position:right center}.x-grid-editor .x-form-trigger{height:19px}.x-grid-editor .x-form-trigger-wrap .x-form-spinner-up,.x-grid-editor .x-form-trigger-wrap .x-form-spinner-down{background-image:url(images/form/spinner-small.gif);height:10px!important}.x-grid-editor .x-rtl.x-form-trigger-wrap .x-form-spinner-up,.x-grid-editor .x-rtl.x-form-trigger-wrap .x-form-spinner-down{background-image:url(images/form/spinner-small-rtl.gif)}.x-border-box .x-grid-editor .x-form-trigger{height:20px}.x-border-box .x-grid-editor .x-form-text{height:20px;padding-bottom:1px}.x-grid-editor .x-form-text{height:18px}.x-ie8m .x-grid-editor .x-form-text{padding-top:1px}.x-strict .x-ie6 .x-grid-editor .x-form-text,.x-strict .x-ie7 .x-grid-editor .x-form-text{height:17px}.x-grid-editor .x-form-text .x-quirks .x-ie9{line-height:17px}.x-grid-row-editor .x-form-text{padding:0 2px}.x-grid-row-editor .x-form-display-field{padding-top:1px}.x-ie .x-grid-row-editor .x-form-text{padding-left:3px}.x-opera .x-grid-row-editor .x-form-text{padding-left:3px}.x-accordion-hd{border-width:1px 0!important;-webkit-box-shadow:inset 0 0 0 0 #e5e5e5;-moz-box-shadow:inset 0 0 0 0 #e5e5e5;box-shadow:inset 0 0 0 0 #e5e5e5}.x-accordion-hd-sibling-expanded{-webkit-box-shadow:inset 0 1px 0 0 #ececec;-moz-box-shadow:inset 0 1px 0 0 #ececec;box-shadow:inset 0 1px 0 0 #ececec}.x-resizable-over .x-resizable-handle-east,.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-position:left}.x-resizable-over .x-resizable-handle-south,.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-position:top}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right}.x-ie6 .x-slider-horz,.x-ie6 .x-slider-horz .x-slider-end,.x-ie6 .x-slider-horz .x-slider-inner{background-image:url(images/slider/slider-bg.gif)}.x-ie6 .x-slider-horz .x-slider-thumb{background-image:url(images/slider/slider-thumb.gif)}.x-ie6 .x-slider-vert,.x-ie6 .x-slider-vert .x-slider-end,.x-ie6 .x-slider-vert .x-slider-inner{background-image:url(images/slider/slider-v-bg.gif)}.x-ie6 .x-slider-vert .x-slider-thumb{background-image:url(images/slider/slider-v-thumb.gif)}.x-tab-icon-el{top:-1px}.x-tab-noicon .x-tab-icon{display:none} \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/boundlist/trigger-arrow.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/boundlist/trigger-arrow.png new file mode 100644 index 000000000..11daac3da Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/boundlist/trigger-arrow.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/corners-blue.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/corners-blue.gif new file mode 100644 index 000000000..fa419b50a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/corners-blue.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/corners.gif new file mode 100644 index 000000000..8aa8cae5c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/l-blue.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/l-blue.gif new file mode 100644 index 000000000..5ed7f0043 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/l-blue.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/l.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/l.gif new file mode 100644 index 000000000..0160f97fe Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/l.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/r-blue.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/r-blue.gif new file mode 100644 index 000000000..3ea5cae3b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/r-blue.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/r.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/r.gif new file mode 100644 index 000000000..34237f629 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/r.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/tb-blue.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/tb-blue.gif new file mode 100644 index 000000000..562fecca8 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/tb-blue.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/tb.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/tb.gif new file mode 100644 index 000000000..435889bff Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/box/tb.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-corners.gif new file mode 100644 index 000000000..f4f23a875 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-notitle-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-notitle-corners.gif new file mode 100644 index 000000000..f4f23a875 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-notitle-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-notitle-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-notitle-sides.gif new file mode 100644 index 000000000..ade080d98 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-notitle-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-sides.gif new file mode 100644 index 000000000..54f269126 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn-group/btn-group-default-framed-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-bg.gif new file mode 100644 index 000000000..e401e3cfc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-corners.gif new file mode 100644 index 000000000..db044654c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-bg.gif new file mode 100644 index 000000000..de4829c70 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-corners.gif new file mode 100644 index 000000000..65a7b9e77 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-fbg.gif new file mode 100644 index 000000000..3259bafe9 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-sides.gif new file mode 100644 index 000000000..1ef57a610 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-disabled-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-fbg.gif new file mode 100644 index 000000000..346d491ba Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-bg.gif new file mode 100644 index 000000000..6e1e3d91d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-corners.gif new file mode 100644 index 000000000..2f4aec090 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-fbg.gif new file mode 100644 index 000000000..42f02696a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-sides.gif new file mode 100644 index 000000000..7228fc08e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-focus-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-bg.gif new file mode 100644 index 000000000..6e1e3d91d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-corners.gif new file mode 100644 index 000000000..2f4aec090 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-fbg.gif new file mode 100644 index 000000000..42f02696a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-sides.gif new file mode 100644 index 000000000..7228fc08e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-over-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-bg.gif new file mode 100644 index 000000000..fb073599a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-corners.gif new file mode 100644 index 000000000..36e7d8c61 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-fbg.gif new file mode 100644 index 000000000..11268b704 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-sides.gif new file mode 100644 index 000000000..bfe237697 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-pressed-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-sides.gif new file mode 100644 index 000000000..b9f477716 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-large-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-bg.gif new file mode 100644 index 000000000..842cd776d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-corners.gif new file mode 100644 index 000000000..db044654c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-bg.gif new file mode 100644 index 000000000..6fdc4bbb2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-corners.gif new file mode 100644 index 000000000..65a7b9e77 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-fbg.gif new file mode 100644 index 000000000..716d64211 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-sides.gif new file mode 100644 index 000000000..74c933f1e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-disabled-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-fbg.gif new file mode 100644 index 000000000..8cbb503ba Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-bg.gif new file mode 100644 index 000000000..ba105dca2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-corners.gif new file mode 100644 index 000000000..2f4aec090 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-fbg.gif new file mode 100644 index 000000000..8f585ede1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-sides.gif new file mode 100644 index 000000000..7d75be5e2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-focus-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-bg.gif new file mode 100644 index 000000000..ba105dca2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-corners.gif new file mode 100644 index 000000000..2f4aec090 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-fbg.gif new file mode 100644 index 000000000..8f585ede1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-sides.gif new file mode 100644 index 000000000..7d75be5e2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-over-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-bg.gif new file mode 100644 index 000000000..ea8649975 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-corners.gif new file mode 100644 index 000000000..36e7d8c61 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-fbg.gif new file mode 100644 index 000000000..bb8fc6b2c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-sides.gif new file mode 100644 index 000000000..c975dad88 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-pressed-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-sides.gif new file mode 100644 index 000000000..cf6da8716 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-medium-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-bg.gif new file mode 100644 index 000000000..fdf17641f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-corners.gif new file mode 100644 index 000000000..307913cbc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-bg.gif new file mode 100644 index 000000000..d92011fd9 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-corners.gif new file mode 100644 index 000000000..65a7b9e77 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-fbg.gif new file mode 100644 index 000000000..223c12615 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-sides.gif new file mode 100644 index 000000000..ddb20190a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-disabled-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-fbg.gif new file mode 100644 index 000000000..16a04a4fd Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-bg.gif new file mode 100644 index 000000000..5ff2f4dd5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-corners.gif new file mode 100644 index 000000000..25a9e7a62 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-fbg.gif new file mode 100644 index 000000000..4febe5417 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-sides.gif new file mode 100644 index 000000000..0baef7a86 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-focus-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-bg.gif new file mode 100644 index 000000000..5ff2f4dd5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-corners.gif new file mode 100644 index 000000000..f8be1d9a7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-fbg.gif new file mode 100644 index 000000000..4febe5417 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-sides.gif new file mode 100644 index 000000000..0baef7a86 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-over-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-bg.gif new file mode 100644 index 000000000..70b02f189 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-corners.gif new file mode 100644 index 000000000..6483b245a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-fbg.gif new file mode 100644 index 000000000..b809e56b3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-sides.gif new file mode 100644 index 000000000..36c717d27 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-pressed-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-sides.gif new file mode 100644 index 000000000..129eb8a5f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-small-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-disabled-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-disabled-corners.gif new file mode 100644 index 000000000..b797cb4d2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-disabled-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-disabled-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-disabled-sides.gif new file mode 100644 index 000000000..662cdc0f5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-disabled-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-bg.gif new file mode 100644 index 000000000..d015a7080 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-corners.gif new file mode 100644 index 000000000..e9adfeb2d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-fbg.gif new file mode 100644 index 000000000..35a60a47a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-sides.gif new file mode 100644 index 000000000..cb1ac8479 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-focus-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-bg.gif new file mode 100644 index 000000000..d015a7080 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-corners.gif new file mode 100644 index 000000000..e9adfeb2d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-fbg.gif new file mode 100644 index 000000000..35a60a47a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-sides.gif new file mode 100644 index 000000000..cb1ac8479 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-over-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-bg.gif new file mode 100644 index 000000000..8a9163362 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-corners.gif new file mode 100644 index 000000000..a86f4d7a7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-fbg.gif new file mode 100644 index 000000000..02aa182aa Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-sides.gif new file mode 100644 index 000000000..6b95e3d1b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-large-pressed-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-disabled-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-disabled-corners.gif new file mode 100644 index 000000000..c1d1616e3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-disabled-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-disabled-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-disabled-sides.gif new file mode 100644 index 000000000..662cdc0f5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-disabled-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-bg.gif new file mode 100644 index 000000000..8b5990211 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-corners.gif new file mode 100644 index 000000000..6943c514e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-fbg.gif new file mode 100644 index 000000000..6f4d1f9d7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-sides.gif new file mode 100644 index 000000000..f64a13fa5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-focus-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-bg.gif new file mode 100644 index 000000000..8b5990211 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-corners.gif new file mode 100644 index 000000000..6943c514e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-fbg.gif new file mode 100644 index 000000000..6f4d1f9d7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-sides.gif new file mode 100644 index 000000000..f64a13fa5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-over-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-bg.gif new file mode 100644 index 000000000..7ce13f61b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-corners.gif new file mode 100644 index 000000000..19c1ffec3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-fbg.gif new file mode 100644 index 000000000..d50f6b1c4 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-sides.gif new file mode 100644 index 000000000..821c086a5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-medium-pressed-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-disabled-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-disabled-corners.gif new file mode 100644 index 000000000..efe1f57ed Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-disabled-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-disabled-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-disabled-sides.gif new file mode 100644 index 000000000..662cdc0f5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-disabled-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-bg.gif new file mode 100644 index 000000000..e83c886f3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-corners.gif new file mode 100644 index 000000000..6943c514e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-fbg.gif new file mode 100644 index 000000000..d4c4219ec Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-sides.gif new file mode 100644 index 000000000..17c32f3b4 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-focus-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-bg.gif new file mode 100644 index 000000000..e83c886f3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-corners.gif new file mode 100644 index 000000000..6943c514e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-fbg.gif new file mode 100644 index 000000000..d4c4219ec Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-sides.gif new file mode 100644 index 000000000..17c32f3b4 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-over-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-bg.gif new file mode 100644 index 000000000..40585e002 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-corners.gif new file mode 100644 index 000000000..e9e86223c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-fbg.gif new file mode 100644 index 000000000..1cddeff94 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-sides.gif new file mode 100644 index 000000000..55a586694 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/btn/btn-default-toolbar-small-pressed-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/arrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/arrow.gif new file mode 100644 index 000000000..3ab4f71ac Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/arrow.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/btn-arrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/btn-arrow.gif new file mode 100644 index 000000000..f90d5df44 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/btn-arrow.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/btn-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/btn-sprite.gif new file mode 100644 index 000000000..834ff9789 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/btn-sprite.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/btn.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/btn.gif new file mode 100644 index 000000000..96ea61abb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/btn.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/group-cs.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/group-cs.gif new file mode 100644 index 000000000..7059e2b0c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/group-cs.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/group-lr.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/group-lr.gif new file mode 100644 index 000000000..3f41fbd84 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/group-lr.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/group-tb.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/group-tb.gif new file mode 100644 index 000000000..c5ea8cab3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/group-tb.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-b-noline.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-b-noline.gif new file mode 100644 index 000000000..a4220ee90 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-b-noline.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-b.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-b.gif new file mode 100644 index 000000000..84b647030 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-b.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-bo.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-bo.gif new file mode 100644 index 000000000..52a05ca6b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-bo.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-light-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-light-rtl.gif new file mode 100644 index 000000000..cfa5ca3b1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-light-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-light.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-light.gif new file mode 100644 index 000000000..08783c9d2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-light.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-noline-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-noline-rtl.gif new file mode 100644 index 000000000..c242ef2f0 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-noline-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-noline.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-noline.gif new file mode 100644 index 000000000..0953eab5c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-noline.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-o-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-o-rtl.gif new file mode 100644 index 000000000..3fc6ae2c5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-o-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-o.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-o.gif new file mode 100644 index 000000000..52a514132 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-o.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-rtl.gif new file mode 100644 index 000000000..8f556c520 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow.gif new file mode 100644 index 000000000..894077478 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/button/s-arrow.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/datepicker/datepicker-footer-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/datepicker/datepicker-footer-bg.gif new file mode 100644 index 000000000..6e6e61219 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/datepicker/datepicker-footer-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/datepicker/datepicker-header-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/datepicker/datepicker-header-bg.gif new file mode 100644 index 000000000..dab828aa5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/datepicker/datepicker-header-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/dd/drop-add.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/dd/drop-add.gif new file mode 100644 index 000000000..b22cd1448 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/dd/drop-add.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/dd/drop-no.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/dd/drop-no.gif new file mode 100644 index 000000000..08d083355 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/dd/drop-no.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/dd/drop-yes.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/dd/drop-yes.gif new file mode 100644 index 000000000..8aacb307e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/dd/drop-yes.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/editor/tb-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/editor/tb-sprite.gif new file mode 100644 index 000000000..fb7057761 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/editor/tb-sprite.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/checkbox.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/checkbox.gif new file mode 100644 index 000000000..835b346cc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/checkbox.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/clear-trigger-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/clear-trigger-rtl.gif new file mode 100644 index 000000000..940399aab Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/clear-trigger-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/clear-trigger.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/clear-trigger.gif new file mode 100644 index 000000000..be3ff587c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/clear-trigger.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/date-trigger-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/date-trigger-rtl.gif new file mode 100644 index 000000000..63597658d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/date-trigger-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/date-trigger.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/date-trigger.gif new file mode 100644 index 000000000..e0537cbc5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/date-trigger.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/error-tip-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/error-tip-corners.gif new file mode 100644 index 000000000..6ea4c3838 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/error-tip-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/exclamation.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/exclamation.gif new file mode 100644 index 000000000..ea31a3060 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/exclamation.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/radio.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/radio.gif new file mode 100644 index 000000000..db3a5305e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/radio.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/search-trigger-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/search-trigger-rtl.gif new file mode 100644 index 000000000..3ff38462e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/search-trigger-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/search-trigger.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/search-trigger.gif new file mode 100644 index 000000000..0cc4f596b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/search-trigger.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner-rtl.gif new file mode 100644 index 000000000..ff14c0665 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner-small-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner-small-rtl.gif new file mode 100644 index 000000000..70c536e6a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner-small-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner-small.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner-small.gif new file mode 100644 index 000000000..e70f8d80a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner-small.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner.gif new file mode 100644 index 000000000..1e323bf0b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/spinner.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/text-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/text-bg.gif new file mode 100644 index 000000000..4179607cc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/text-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-rtl.gif new file mode 100644 index 000000000..65205d655 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-square-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-square-rtl.gif new file mode 100644 index 000000000..a86f6ce25 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-square-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-square.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-square.gif new file mode 100644 index 000000000..7a0f585c0 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-square.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-tpl-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-tpl-rtl.gif new file mode 100644 index 000000000..1e766e47c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-tpl-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-tpl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-tpl.gif new file mode 100644 index 000000000..e3701a383 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger-tpl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger.gif new file mode 100644 index 000000000..b563474bb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/form/trigger.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid-row-editor-buttons/null-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid-row-editor-buttons/null-corners.gif new file mode 100644 index 000000000..f656a8ee1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid-row-editor-buttons/null-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid-row-editor-buttons/null-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid-row-editor-buttons/null-sides.gif new file mode 100644 index 000000000..10643df8b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid-row-editor-buttons/null-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/arrow-left-white.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/arrow-left-white.gif new file mode 100644 index 000000000..63088f56e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/arrow-left-white.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/arrow-right-white.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/arrow-right-white.gif new file mode 100644 index 000000000..e9e067890 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/arrow-right-white.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/btn-group/btn-group-default-framed-notitle-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-bg.gif similarity index 86% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/btn-group/btn-group-default-framed-notitle-corners.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-bg.gif index 70f2dd4df..d76ffbccd 100644 Binary files a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/btn-group/btn-group-default-framed-notitle-corners.gif and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-bg.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-bg.png new file mode 100644 index 000000000..0bcc23679 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-bg.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/btn-group/btn-group-default-framed-notitle-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-selected-bg.gif similarity index 81% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/btn-group/btn-group-default-framed-notitle-sides.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-selected-bg.gif index 44a93342c..f1da867de 100644 Binary files a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/btn-group/btn-group-default-framed-notitle-sides.gif and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-selected-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-selected-bg.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-selected-bg.png new file mode 100644 index 000000000..500c3bddb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/cell-special-selected-bg.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/col-move-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/col-move-bottom.gif new file mode 100644 index 000000000..c525f7ebd Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/col-move-bottom.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/col-move-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/col-move-top.gif new file mode 100644 index 000000000..ccc92b6bc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/col-move-top.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/column-header-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/column-header-bg.gif new file mode 100644 index 000000000..7804c45a7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/column-header-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/column-header-over-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/column-header-over-bg.gif new file mode 100644 index 000000000..a695067b8 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/column-header-over-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/columns.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/columns.gif new file mode 100644 index 000000000..2d3a82393 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/columns.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-left.gif new file mode 100644 index 000000000..5d923b281 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-left.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-left.png new file mode 100644 index 000000000..5dc696781 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-left.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-right.gif new file mode 100644 index 000000000..8d154db70 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-right.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-right.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-right.png new file mode 100644 index 000000000..b1a181923 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dd-insert-arrow-right.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dirty-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dirty-rtl.gif new file mode 100644 index 000000000..22fa12a11 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dirty-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dirty.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dirty.gif new file mode 100644 index 000000000..4f217a479 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/dirty.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/done.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/done.gif new file mode 100644 index 000000000..a937cb22c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/done.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/drop-no.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/drop-no.gif new file mode 100644 index 000000000..31a332bf7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/drop-no.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/drop-yes.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/drop-yes.gif new file mode 100644 index 000000000..926010e17 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/drop-yes.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/footer-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/footer-bg.gif new file mode 100644 index 000000000..126120f71 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/footer-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-blue-hd.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-blue-hd.gif new file mode 100644 index 000000000..862094e68 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-blue-hd.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-blue-split.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-blue-split.gif new file mode 100644 index 000000000..5286f58f6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-blue-split.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-hrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-hrow.gif new file mode 100644 index 000000000..637410420 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-hrow.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-loading.gif new file mode 100644 index 000000000..d112c5401 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-loading.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-split.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-split.gif new file mode 100644 index 000000000..c76a16e95 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-split.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-vista-hd.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-vista-hd.gif new file mode 100644 index 000000000..d0972638e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid-vista-hd.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hd-btn-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hd-btn-left.gif new file mode 100644 index 000000000..789270534 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hd-btn-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hd-btn.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hd-btn.gif new file mode 100644 index 000000000..daf1ef2b5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hd-btn.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hrow-over.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hrow-over.gif new file mode 100644 index 000000000..f9c07af13 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hrow-over.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hrow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hrow.gif new file mode 100644 index 000000000..8d459a304 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-hrow.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-rowheader.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-rowheader.gif new file mode 100644 index 000000000..2799b45c6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/grid3-rowheader.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-by.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-by.gif new file mode 100644 index 000000000..d6075bba2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-by.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-collapse.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-collapse.gif new file mode 100644 index 000000000..ec9800384 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-collapse.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-expand-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-expand-sprite.gif new file mode 100644 index 000000000..d24891de6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-expand-sprite.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-expand.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-expand.gif new file mode 100644 index 000000000..71c8ac43b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/group-expand.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hd-pop.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hd-pop.gif new file mode 100644 index 000000000..eb8ba7967 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hd-pop.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-asc.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-asc.gif new file mode 100644 index 000000000..15058ff65 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-asc.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-asc.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-desc.gif similarity index 54% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-asc.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-desc.gif index 8917e0eee..f26b7c2fc 100644 Binary files a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/grid/hmenu-asc.gif and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-desc.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-lock.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-lock.gif new file mode 100644 index 000000000..159612610 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-lock.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-lock.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-lock.png new file mode 100644 index 000000000..8b81e7ff2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-lock.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-unlock.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-unlock.gif new file mode 100644 index 000000000..af59cf92a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-unlock.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-unlock.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-unlock.png new file mode 100644 index 000000000..9dd5df34b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/hmenu-unlock.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/invalid_line.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/invalid_line.gif new file mode 100644 index 000000000..fb7e0f34d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/invalid_line.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/loading.gif new file mode 100644 index 000000000..e846e1d6c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/loading.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/mso-hd.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/mso-hd.gif new file mode 100644 index 000000000..669f3cf08 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/mso-hd.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/nowait.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/nowait.gif new file mode 100644 index 000000000..4c5862cd5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/nowait.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-first-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-first-disabled.gif new file mode 100644 index 000000000..1e02c419f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-first-disabled.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-first.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-first.gif new file mode 100644 index 000000000..60be4bcd3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-first.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-last-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-last-disabled.gif new file mode 100644 index 000000000..869706777 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-last-disabled.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-last.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-last.gif new file mode 100644 index 000000000..beb4a8302 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-last.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-next-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-next-disabled.gif new file mode 100644 index 000000000..90a7756f6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-next-disabled.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-next.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-next.gif new file mode 100644 index 000000000..97db1c220 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-next.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-prev-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-prev-disabled.gif new file mode 100644 index 000000000..37154d624 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-prev-disabled.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-prev.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-prev.gif new file mode 100644 index 000000000..d07e61c36 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/page-prev.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/pick-button.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/pick-button.gif new file mode 100644 index 000000000..6957924a8 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/pick-button.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/property-cell-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/property-cell-bg.gif new file mode 100644 index 000000000..7890cf9f8 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/property-cell-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/property-cell-selected-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/property-cell-selected-bg.gif new file mode 100644 index 000000000..1dfe9a69e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/property-cell-selected-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/refresh-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/refresh-disabled.gif new file mode 100644 index 000000000..607800b85 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/refresh-disabled.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/refresh.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/refresh.gif new file mode 100644 index 000000000..868b2dc59 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/refresh.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-check-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-check-sprite.gif new file mode 100644 index 000000000..610116465 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-check-sprite.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-expand-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-expand-sprite.gif new file mode 100644 index 000000000..09c00a66b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-expand-sprite.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-over.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-over.gif new file mode 100644 index 000000000..b288e3873 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-over.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-sel.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-sel.gif new file mode 100644 index 000000000..98209e6e7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/row-sel.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/sort-hd.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/sort-hd.gif new file mode 100644 index 000000000..4cf483d25 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/sort-hd.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/sort_asc.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/sort_asc.gif new file mode 100644 index 000000000..7e562e202 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/sort_asc.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/sort_desc.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/sort_desc.gif new file mode 100644 index 000000000..9b7a871b7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/sort_desc.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/wait.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/wait.gif new file mode 100644 index 000000000..471c1a4f9 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/grid/wait.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-bottom.gif new file mode 100644 index 000000000..c18f9e34a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-bottom.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-left.gif new file mode 100644 index 000000000..99f7993f2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-right.gif new file mode 100644 index 000000000..5b13c5a8b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-right.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-top.gif new file mode 100644 index 000000000..a4ca2bb20 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/layout/mini-top.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/checked.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/checked.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/checked.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/checked.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/group-checked.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/group-checked.gif new file mode 100644 index 000000000..c8824887c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/group-checked.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/item-over-disabled.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/item-over-disabled.gif new file mode 100644 index 000000000..97d5ffacb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/item-over-disabled.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/item-over.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/item-over.gif new file mode 100644 index 000000000..e0dc5f7c0 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/item-over.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu-item-active-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu-item-active-bg.gif new file mode 100644 index 000000000..6b79083a5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu-item-active-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu-parent-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu-parent-left.gif new file mode 100644 index 000000000..1ce2ccb4c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu-parent-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu-parent.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu-parent.gif new file mode 100644 index 000000000..5461a8bfc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu-parent.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu.gif new file mode 100644 index 000000000..30a2c4b6c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/menu.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/scroll-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/scroll-bottom.gif new file mode 100644 index 000000000..c18f9e34a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/scroll-bottom.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/scroll-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/scroll-top.gif new file mode 100644 index 000000000..a4ca2bb20 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/scroll-top.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/unchecked.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/unchecked.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/menu/unchecked.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/menu/unchecked.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-bottom-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-bottom-bg.gif new file mode 100644 index 000000000..29e799d82 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-bottom-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-bg.gif new file mode 100644 index 000000000..29e799d82 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-corners.gif new file mode 100644 index 000000000..ba8d70e9e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-fbg.gif new file mode 100644 index 000000000..953040c2b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-sides.gif new file mode 100644 index 000000000..4d50b827b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-bottom-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif new file mode 100644 index 000000000..29e799d82 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif new file mode 100644 index 000000000..0060ab86a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif new file mode 100644 index 000000000..953040c2b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif new file mode 100644 index 000000000..4d50b827b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-bg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-bg-rtl.gif new file mode 100644 index 000000000..7814785cb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-bg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-bg.gif new file mode 100644 index 000000000..55f6038ed Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif new file mode 100644 index 000000000..d521eede8 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-corners.gif new file mode 100644 index 000000000..a897a3a30 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif new file mode 100644 index 000000000..7890de6b9 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif new file mode 100644 index 000000000..4b2ac1bb6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif new file mode 100644 index 000000000..f0eb1ed6c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-sides.gif new file mode 100644 index 000000000..6a083e30d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-left-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-bg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-bg-rtl.gif new file mode 100644 index 000000000..cc6e99c93 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-bg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-bg.gif new file mode 100644 index 000000000..1fff3c5a2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif new file mode 100644 index 000000000..514805929 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-corners.gif new file mode 100644 index 000000000..d3ac1629d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif new file mode 100644 index 000000000..3666bfb1b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif new file mode 100644 index 000000000..03c6239aa Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif new file mode 100644 index 000000000..0a5809fed Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-sides.gif new file mode 100644 index 000000000..586de3a0a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-right-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-bg.gif new file mode 100644 index 000000000..c6c596ff9 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-corners.gif new file mode 100644 index 000000000..61f55ab62 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif new file mode 100644 index 000000000..9505c1b0a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-sides.gif new file mode 100644 index 000000000..86a651516 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-collapsed-top-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-bg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-bg-rtl.gif new file mode 100644 index 000000000..7814785cb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-bg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-bg.gif new file mode 100644 index 000000000..55f6038ed Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-corners-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-corners-rtl.gif new file mode 100644 index 000000000..43e2f0cb3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-corners-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-corners.gif new file mode 100644 index 000000000..7c57adfe1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-fbg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-fbg-rtl.gif new file mode 100644 index 000000000..7890de6b9 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-fbg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-fbg.gif new file mode 100644 index 000000000..4b2ac1bb6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-sides-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-sides-rtl.gif new file mode 100644 index 000000000..f0eb1ed6c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-sides-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-sides.gif new file mode 100644 index 000000000..6a083e30d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-left-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-bg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-bg-rtl.gif new file mode 100644 index 000000000..b2d8c7ea2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-bg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-bg.gif new file mode 100644 index 000000000..6ab7b3c2d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-corners-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-corners-rtl.gif new file mode 100644 index 000000000..7801530e5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-corners-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-corners.gif new file mode 100644 index 000000000..e13ba4932 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-fbg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-fbg-rtl.gif new file mode 100644 index 000000000..3666bfb1b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-fbg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-fbg.gif new file mode 100644 index 000000000..03c6239aa Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-sides-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-sides-rtl.gif new file mode 100644 index 000000000..0a5809fed Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-sides-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-sides.gif new file mode 100644 index 000000000..586de3a0a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-right-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-bg.gif new file mode 100644 index 000000000..218cdbd89 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-corners.gif new file mode 100644 index 000000000..7510b9914 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-fbg.gif new file mode 100644 index 000000000..9505c1b0a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-sides.gif new file mode 100644 index 000000000..86a651516 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-framed-top-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-left-bg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-left-bg-rtl.gif new file mode 100644 index 000000000..7814785cb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-left-bg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-left-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-left-bg.gif new file mode 100644 index 000000000..55f6038ed Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-left-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-right-bg-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-right-bg-rtl.gif new file mode 100644 index 000000000..56a345f8f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-right-bg-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-right-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-right-bg.gif new file mode 100644 index 000000000..b290f969e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-right-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-top-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-top-bg.gif new file mode 100644 index 000000000..e0690e019 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel-header/panel-header-default-top-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel/panel-default-framed-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel/panel-default-framed-corners.gif new file mode 100644 index 000000000..032a13506 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel/panel-default-framed-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel/panel-default-framed-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel/panel-default-framed-sides.gif new file mode 100644 index 000000000..56ab779f0 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/panel/panel-default-framed-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/progress/progress-default-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/progress/progress-default-bg.gif new file mode 100644 index 000000000..fa3523265 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/progress/progress-default-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/blue-loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/blue-loading.gif new file mode 100644 index 000000000..3bbf639ef Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/blue-loading.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/calendar.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/calendar.gif new file mode 100644 index 000000000..133cf232b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/calendar.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/glass-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/glass-bg.gif new file mode 100644 index 000000000..26fbbae3b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/glass-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/hd-sprite.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/hd-sprite.gif new file mode 100644 index 000000000..42da1ea1a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/hd-sprite.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-error.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-error.gif new file mode 100644 index 000000000..397b655ab Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-error.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-info.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-info.gif new file mode 100644 index 000000000..58281c306 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-info.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-question.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-question.gif new file mode 100644 index 000000000..08abd82ae Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-question.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-warning.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-warning.gif new file mode 100644 index 000000000..27ff98b4f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/icon-warning.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/large-loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/large-loading.gif new file mode 100644 index 000000000..b36b555b4 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/large-loading.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/left-btn.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/left-btn.gif new file mode 100644 index 000000000..3301054ff Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/left-btn.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/loading-balls.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/loading-balls.gif new file mode 100644 index 000000000..9ce214beb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/loading-balls.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/right-btn.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/right-btn.gif new file mode 100644 index 000000000..c529110fa Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/right-btn.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/shadow-c.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/shadow-c.png new file mode 100644 index 000000000..d435f80ae Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/shadow-c.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/shadow-lr.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/shadow-lr.png new file mode 100644 index 000000000..bb88b6f2b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/shadow-lr.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/shadow.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/shadow.png new file mode 100644 index 000000000..75c0eba3e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/shadow.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/warning.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/warning.gif new file mode 100644 index 000000000..806d4bc09 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/shared/warning.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/e-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/e-handle-dark.gif new file mode 100644 index 000000000..b5486c1a9 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/e-handle-dark.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/e-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/e-handle.gif new file mode 100644 index 000000000..a8ed0edee Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/e-handle.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/ne-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/ne-handle-dark.gif new file mode 100644 index 000000000..04e5ecf7d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/ne-handle-dark.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/ne-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/ne-handle.gif new file mode 100644 index 000000000..6f7b0c295 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/ne-handle.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/nw-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/nw-handle-dark.gif new file mode 100644 index 000000000..6e49d6967 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/nw-handle-dark.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/nw-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/nw-handle.gif new file mode 100644 index 000000000..92ad82cf3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/nw-handle.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/s-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/s-handle-dark.gif new file mode 100644 index 000000000..4eb5f0fcc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/s-handle-dark.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/s-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/s-handle.gif new file mode 100644 index 000000000..d7eeae278 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/s-handle.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/se-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/se-handle-dark.gif new file mode 100644 index 000000000..c4c108786 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/se-handle-dark.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/se-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/se-handle.gif new file mode 100644 index 000000000..f011a3bb2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/se-handle.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/square.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/square.gif new file mode 100644 index 000000000..7751d5e15 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/square.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/sw-handle-dark.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/sw-handle-dark.gif new file mode 100644 index 000000000..77224b0c0 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/sw-handle-dark.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/sw-handle.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/sw-handle.gif new file mode 100644 index 000000000..aa903dd0b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/sizer/sw-handle.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-bg.gif new file mode 100644 index 000000000..39edef415 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-bg.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-bg.png new file mode 100644 index 000000000..10ede26ba Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-bg.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-thumb.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-thumb.gif new file mode 100644 index 000000000..5ba1dfb1d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-thumb.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-thumb.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-thumb.png new file mode 100644 index 000000000..4bf01be89 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-thumb.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-bg.gif new file mode 100644 index 000000000..8cc7a87d8 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-bg.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-bg.png new file mode 100644 index 000000000..6ed116a06 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-bg.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-thumb.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-thumb.gif new file mode 100644 index 000000000..58afe96aa Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-thumb.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-thumb.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-thumb.png new file mode 100644 index 000000000..6b3eeb703 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/slider/slider-v-thumb.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-bottom-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-bottom-left.gif new file mode 100644 index 000000000..e6525b97b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-bottom-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-bottom-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-bottom-right.gif new file mode 100644 index 000000000..be657af4c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-bottom-right.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-left-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-left-bottom.gif new file mode 100644 index 000000000..ecc3116ea Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-left-bottom.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-left-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-left-top.gif new file mode 100644 index 000000000..4610705bc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-left-top.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-right-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-right-bottom.gif new file mode 100644 index 000000000..737cc3ffb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-right-bottom.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-right-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-right-top.gif new file mode 100644 index 000000000..49bc1bf73 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-right-top.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-top-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-top-left.gif new file mode 100644 index 000000000..350480409 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-top-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-top-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-top-right.gif new file mode 100644 index 000000000..eee6080d1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/default-scroll-top-right.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/tab-bar-default-top-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/tab-bar-default-top-bg.gif new file mode 100644 index 000000000..294fc9478 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab-bar/tab-bar-default-top-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-bg.gif new file mode 100644 index 000000000..1637d92f7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-corners.gif new file mode 100644 index 000000000..f898ccce1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-fbg.gif new file mode 100644 index 000000000..31b1e5e91 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-sides.gif new file mode 100644 index 000000000..00bf24b4f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-active-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-bg.gif new file mode 100644 index 000000000..505b024c5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-corners.gif new file mode 100644 index 000000000..91f9309d7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-bg.gif new file mode 100644 index 000000000..e313179ee Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-corners.gif new file mode 100644 index 000000000..dd32e2d6d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-fbg.gif new file mode 100644 index 000000000..2655780fa Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-sides.gif new file mode 100644 index 000000000..400f78b34 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-disabled-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-fbg.gif new file mode 100644 index 000000000..9a1db058f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-bg.gif new file mode 100644 index 000000000..e70893e1f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-corners.gif new file mode 100644 index 000000000..d2ccefe61 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-fbg.gif new file mode 100644 index 000000000..b055a606b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-sides.gif new file mode 100644 index 000000000..d251f82a1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-over-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-sides.gif new file mode 100644 index 000000000..4467f9edf Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-bottom-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-close.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-close.gif new file mode 100644 index 000000000..98d5da952 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-close.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-bg.gif new file mode 100644 index 000000000..03a3e01c9 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-corners.gif new file mode 100644 index 000000000..0e9e48072 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-fbg.gif new file mode 100644 index 000000000..e7f2979d1 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-sides.gif new file mode 100644 index 000000000..6f7e221fc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-active-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-bg.gif new file mode 100644 index 000000000..dd20a1e2d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-corners.gif new file mode 100644 index 000000000..81e0b4d94 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-bg.gif new file mode 100644 index 000000000..74b9e33a2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-corners.gif new file mode 100644 index 000000000..eff080f25 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-fbg.gif new file mode 100644 index 000000000..5a7b66e5c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-sides.gif new file mode 100644 index 000000000..2e4c2e15a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-disabled-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-fbg.gif new file mode 100644 index 000000000..6e2e4fe22 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-bg.gif new file mode 100644 index 000000000..55a46e136 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-corners.gif new file mode 100644 index 000000000..f86201a04 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-fbg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-fbg.gif new file mode 100644 index 000000000..415ad6b60 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-fbg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-sides.gif new file mode 100644 index 000000000..494f4c13a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-over-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-sides.gif new file mode 100644 index 000000000..aa3f65158 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tab/tab-default-top-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-default-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-default-corners.gif new file mode 100644 index 000000000..979bafe24 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-default-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-default-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-default-sides.gif new file mode 100644 index 000000000..5f2e4bfab Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-default-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-form-invalid-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-form-invalid-corners.gif new file mode 100644 index 000000000..6ab8ee0bc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-form-invalid-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-form-invalid-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-form-invalid-sides.gif new file mode 100644 index 000000000..b39a15bb4 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tip/tip-form-invalid-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/more-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/more-left.gif new file mode 100644 index 000000000..8f8cbd428 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/more-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/more.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/more.gif new file mode 100644 index 000000000..82beafdac Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/more.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/scroll-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/scroll-left.gif new file mode 100644 index 000000000..2db8cf5ca Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/scroll-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/scroll-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/scroll-right.gif new file mode 100644 index 000000000..5d5a7ab5d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/scroll-right.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/toolbar-default-bg.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/toolbar-default-bg.gif new file mode 100644 index 000000000..410cd10ff Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/toolbar/toolbar-default-bg.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tools/tool-sprite-tpl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tools/tool-sprite-tpl.gif new file mode 100644 index 000000000..18277a3d4 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tools/tool-sprite-tpl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tools/tool-sprites.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tools/tool-sprites.gif new file mode 100644 index 000000000..36b6b6755 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tools/tool-sprites.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tools/tools-sprites-trans.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tools/tools-sprites-trans.gif new file mode 100644 index 000000000..b6d7ba369 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tools/tools-sprites-trans.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/arrows-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/arrows-rtl.gif new file mode 100644 index 000000000..7083d77d4 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/arrows-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/arrows.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/arrows.gif new file mode 100644 index 000000000..f7b8b1ca7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/arrows.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-above.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-above.gif new file mode 100644 index 000000000..30d1ca710 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-above.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-add.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-add.gif new file mode 100644 index 000000000..b22cd1448 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-add.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-append.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-append.gif new file mode 100644 index 000000000..b22cd1448 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-append.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-below.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-below.gif new file mode 100644 index 000000000..85f66b1e5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-below.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-between.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-between.gif new file mode 100644 index 000000000..5c6c09d98 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-between.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-no.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-no.gif new file mode 100644 index 000000000..9d9c6a9ce Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-no.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-over.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-over.gif new file mode 100644 index 000000000..30d1ca710 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-over.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-under.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-under.gif new file mode 100644 index 000000000..85f66b1e5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-under.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-yes.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-yes.gif new file mode 100644 index 000000000..8aacb307e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/drop-yes.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-minus-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-minus-rtl.gif new file mode 100644 index 000000000..10227e60d Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-minus-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-minus.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-minus.gif new file mode 100644 index 000000000..55d8a0fa2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-minus.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-plus-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-plus-rtl.gif new file mode 100644 index 000000000..f4eef8931 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-plus-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-plus.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-plus.gif new file mode 100644 index 000000000..a5c62fab3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-plus.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-rtl.gif new file mode 100644 index 000000000..a5e7248c4 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end.gif new file mode 100644 index 000000000..406a88dff Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-end.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-line-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-line-rtl.gif new file mode 100644 index 000000000..6e5b8b44e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-line-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-line.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-line.gif new file mode 100644 index 000000000..e25ed03fb Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-line.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus-nl-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus-nl-rtl.gif new file mode 100644 index 000000000..2d8dd984f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus-nl-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end-minus-nl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus-nl.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end-minus-nl.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus-nl.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus-rtl.gif new file mode 100644 index 000000000..ed3e5a0d6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus.gif new file mode 100644 index 000000000..a7287961b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-minus.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus-nl-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus-nl-rtl.gif new file mode 100644 index 000000000..2d1e91747 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus-nl-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end-plus-nl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus-nl.gif similarity index 100% rename from fhem/www/frontend/www/frontend/lib/ext-4.1.1a/images/gray/tree/elbow-end-plus-nl.gif rename to fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus-nl.gif diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus-rtl.gif new file mode 100644 index 000000000..cb0cb4920 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus.gif new file mode 100644 index 000000000..ae41983cc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-plus.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-rtl.gif new file mode 100644 index 000000000..1139cb024 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow.gif new file mode 100644 index 000000000..201c413e3 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/elbow.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder-open-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder-open-rtl.gif new file mode 100644 index 000000000..a34c546c6 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder-open-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder-open.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder-open.gif new file mode 100644 index 000000000..361e1be3e Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder-open.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder-rtl.gif new file mode 100644 index 000000000..4fab30f81 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder.gif new file mode 100644 index 000000000..b2fd81a12 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/folder.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/leaf-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/leaf-rtl.gif new file mode 100644 index 000000000..ab0979a3a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/leaf-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/leaf.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/leaf.gif new file mode 100644 index 000000000..445769d3f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/leaf.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/loading.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/loading.gif new file mode 100644 index 000000000..e846e1d6c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/loading.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/s.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/s.gif new file mode 100644 index 000000000..1d11fa9ad Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/tree/s.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-bottom.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-bottom.gif new file mode 100644 index 000000000..c18f9e34a Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-bottom.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-left.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-left.gif new file mode 100644 index 000000000..99f7993f2 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-left.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-right.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-right.gif new file mode 100644 index 000000000..5b13c5a8b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-right.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-top.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-top.gif new file mode 100644 index 000000000..a4ca2bb20 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/util/splitter/mini-top.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-bottom-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-bottom-corners.gif new file mode 100644 index 000000000..34cb699b7 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-bottom-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-bottom-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-bottom-sides.gif new file mode 100644 index 000000000..3388ed9b0 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-bottom-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-bottom-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-bottom-corners.gif new file mode 100644 index 000000000..bb4733428 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-bottom-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-bottom-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-bottom-sides.gif new file mode 100644 index 000000000..a1cc1ef5b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-bottom-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-left-corners-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-left-corners-rtl.gif new file mode 100644 index 000000000..bf32b4d18 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-left-corners-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-left-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-left-corners.gif new file mode 100644 index 000000000..32828be83 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-left-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-left-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-left-sides.gif new file mode 100644 index 000000000..11bfe1254 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-left-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-right-corners-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-right-corners-rtl.gif new file mode 100644 index 000000000..ea381b093 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-right-corners-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-right-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-right-corners.gif new file mode 100644 index 000000000..b87ed4138 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-right-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-right-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-right-sides.gif new file mode 100644 index 000000000..41939a96c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-right-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-top-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-top-corners.gif new file mode 100644 index 000000000..2184175de Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-top-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-top-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-top-sides.gif new file mode 100644 index 000000000..a1cc1ef5b Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-collapsed-top-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-left-corners-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-left-corners-rtl.gif new file mode 100644 index 000000000..fd5604272 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-left-corners-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-left-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-left-corners.gif new file mode 100644 index 000000000..0a3aca9cc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-left-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-left-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-left-sides.gif new file mode 100644 index 000000000..82480c6bd Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-left-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-right-corners-rtl.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-right-corners-rtl.gif new file mode 100644 index 000000000..c3358d1f5 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-right-corners-rtl.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-right-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-right-corners.gif new file mode 100644 index 000000000..e63c624b0 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-right-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-right-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-right-sides.gif new file mode 100644 index 000000000..c4682a17c Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-right-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-top-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-top-corners.gif new file mode 100644 index 000000000..16e618664 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-top-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-top-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-top-sides.gif new file mode 100644 index 000000000..3388ed9b0 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window-header/window-header-default-top-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-error.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-error.gif new file mode 100644 index 000000000..397b655ab Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-error.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-info.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-info.gif new file mode 100644 index 000000000..58281c306 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-info.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-question.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-question.gif new file mode 100644 index 000000000..08abd82ae Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-question.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-warning.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-warning.gif new file mode 100644 index 000000000..27ff98b4f Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/icon-warning.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/window-default-corners.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/window-default-corners.gif new file mode 100644 index 000000000..62863c5bc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/window-default-corners.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/window-default-sides.gif b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/window-default-sides.gif new file mode 100644 index 000000000..4b1d651dc Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/resources/images/window/window-default-sides.gif differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/theme-capture.json b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/theme-capture.json new file mode 100644 index 000000000..961a235ec --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/theme-capture.json @@ -0,0 +1,2045 @@ +{ + "format": "2.0", + "widgets": [ + { + "border": { + "b": 0, + "l": 0, + "r": 0, + "t": 0 + }, + "box": { + "h": 23, + "w": 66, + "x": 14, + "y": 14 + }, + "id": "menuitem-1010-itemEl", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/menu/menu-item-active-bg.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 51 + }, + "gradient": "top", + "id": "button-1011", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-small-bg.gif", + "corners": "images/btn/btn-default-small-corners.gif", + "frame_bg": "images/btn/btn-default-small-fbg.gif", + "sides": "images/btn/btn-default-small-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 83 + }, + "gradient": "top", + "id": "button-1012", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-small-over-bg.gif", + "corners": "images/btn/btn-default-small-over-corners.gif", + "frame_bg": "images/btn/btn-default-small-over-fbg.gif", + "sides": "images/btn/btn-default-small-over-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 115 + }, + "gradient": "top", + "id": "button-1013", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-small-focus-bg.gif", + "corners": "images/btn/btn-default-small-focus-corners.gif", + "frame_bg": "images/btn/btn-default-small-focus-fbg.gif", + "sides": "images/btn/btn-default-small-focus-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 147 + }, + "gradient": "top", + "id": "button-1014", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-small-pressed-bg.gif", + "corners": "images/btn/btn-default-small-pressed-corners.gif", + "frame_bg": "images/btn/btn-default-small-pressed-fbg.gif", + "sides": "images/btn/btn-default-small-pressed-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 179 + }, + "gradient": "top", + "id": "button-1015", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-small-disabled-bg.gif", + "corners": "images/btn/btn-default-small-disabled-corners.gif", + "frame_bg": "images/btn/btn-default-small-disabled-fbg.gif", + "sides": "images/btn/btn-default-small-disabled-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 211 + }, + "gradient": "top", + "id": "button-1016", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-medium-bg.gif", + "corners": "images/btn/btn-default-medium-corners.gif", + "frame_bg": "images/btn/btn-default-medium-fbg.gif", + "sides": "images/btn/btn-default-medium-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 253 + }, + "gradient": "top", + "id": "button-1017", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-medium-over-bg.gif", + "corners": "images/btn/btn-default-medium-over-corners.gif", + "frame_bg": "images/btn/btn-default-medium-over-fbg.gif", + "sides": "images/btn/btn-default-medium-over-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 295 + }, + "gradient": "top", + "id": "button-1018", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-medium-focus-bg.gif", + "corners": "images/btn/btn-default-medium-focus-corners.gif", + "frame_bg": "images/btn/btn-default-medium-focus-fbg.gif", + "sides": "images/btn/btn-default-medium-focus-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 337 + }, + "gradient": "top", + "id": "button-1019", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-medium-pressed-bg.gif", + "corners": "images/btn/btn-default-medium-pressed-corners.gif", + "frame_bg": "images/btn/btn-default-medium-pressed-fbg.gif", + "sides": "images/btn/btn-default-medium-pressed-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 379 + }, + "gradient": "top", + "id": "button-1020", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-medium-disabled-bg.gif", + "corners": "images/btn/btn-default-medium-disabled-corners.gif", + "frame_bg": "images/btn/btn-default-medium-disabled-fbg.gif", + "sides": "images/btn/btn-default-medium-disabled-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 421 + }, + "gradient": "top", + "id": "button-1021", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-large-bg.gif", + "corners": "images/btn/btn-default-large-corners.gif", + "frame_bg": "images/btn/btn-default-large-fbg.gif", + "sides": "images/btn/btn-default-large-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 471 + }, + "gradient": "top", + "id": "button-1022", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-large-over-bg.gif", + "corners": "images/btn/btn-default-large-over-corners.gif", + "frame_bg": "images/btn/btn-default-large-over-fbg.gif", + "sides": "images/btn/btn-default-large-over-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 521 + }, + "gradient": "top", + "id": "button-1023", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-large-focus-bg.gif", + "corners": "images/btn/btn-default-large-focus-corners.gif", + "frame_bg": "images/btn/btn-default-large-focus-fbg.gif", + "sides": "images/btn/btn-default-large-focus-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 571 + }, + "gradient": "top", + "id": "button-1024", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-large-pressed-bg.gif", + "corners": "images/btn/btn-default-large-pressed-corners.gif", + "frame_bg": "images/btn/btn-default-large-pressed-fbg.gif", + "sides": "images/btn/btn-default-large-pressed-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 621 + }, + "gradient": "top", + "id": "button-1025", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-large-disabled-bg.gif", + "corners": "images/btn/btn-default-large-disabled-corners.gif", + "frame_bg": "images/btn/btn-default-large-disabled-fbg.gif", + "sides": "images/btn/btn-default-large-disabled-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 671 + }, + "id": "button-1026", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": {} + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 703 + }, + "gradient": "top", + "id": "button-1027", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-toolbar-small-over-bg.gif", + "corners": "images/btn/btn-default-toolbar-small-over-corners.gif", + "frame_bg": "images/btn/btn-default-toolbar-small-over-fbg.gif", + "sides": "images/btn/btn-default-toolbar-small-over-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 735 + }, + "gradient": "top", + "id": "button-1028", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-toolbar-small-focus-bg.gif", + "corners": "images/btn/btn-default-toolbar-small-focus-corners.gif", + "frame_bg": "images/btn/btn-default-toolbar-small-focus-fbg.gif", + "sides": "images/btn/btn-default-toolbar-small-focus-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 767 + }, + "gradient": "top", + "id": "button-1029", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-toolbar-small-pressed-bg.gif", + "corners": "images/btn/btn-default-toolbar-small-pressed-corners.gif", + "frame_bg": "images/btn/btn-default-toolbar-small-pressed-fbg.gif", + "sides": "images/btn/btn-default-toolbar-small-pressed-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 22, + "w": 46, + "x": 10, + "y": 799 + }, + "id": "button-1030", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "corners": "images/btn/btn-default-toolbar-small-disabled-corners.gif", + "sides": "images/btn/btn-default-toolbar-small-disabled-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 831 + }, + "id": "button-1031", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": {} + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 873 + }, + "gradient": "top", + "id": "button-1032", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-toolbar-medium-over-bg.gif", + "corners": "images/btn/btn-default-toolbar-medium-over-corners.gif", + "frame_bg": "images/btn/btn-default-toolbar-medium-over-fbg.gif", + "sides": "images/btn/btn-default-toolbar-medium-over-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 915 + }, + "gradient": "top", + "id": "button-1033", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-toolbar-medium-focus-bg.gif", + "corners": "images/btn/btn-default-toolbar-medium-focus-corners.gif", + "frame_bg": "images/btn/btn-default-toolbar-medium-focus-fbg.gif", + "sides": "images/btn/btn-default-toolbar-medium-focus-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 957 + }, + "gradient": "top", + "id": "button-1034", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-toolbar-medium-pressed-bg.gif", + "corners": "images/btn/btn-default-toolbar-medium-pressed-corners.gif", + "frame_bg": "images/btn/btn-default-toolbar-medium-pressed-fbg.gif", + "sides": "images/btn/btn-default-toolbar-medium-pressed-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 32, + "w": 46, + "x": 10, + "y": 999 + }, + "id": "button-1035", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "corners": "images/btn/btn-default-toolbar-medium-disabled-corners.gif", + "sides": "images/btn/btn-default-toolbar-medium-disabled-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 1041 + }, + "id": "button-1036", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": {} + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 1091 + }, + "gradient": "top", + "id": "button-1037", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-toolbar-large-over-bg.gif", + "corners": "images/btn/btn-default-toolbar-large-over-corners.gif", + "frame_bg": "images/btn/btn-default-toolbar-large-over-fbg.gif", + "sides": "images/btn/btn-default-toolbar-large-over-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 1141 + }, + "gradient": "top", + "id": "button-1038", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-toolbar-large-focus-bg.gif", + "corners": "images/btn/btn-default-toolbar-large-focus-corners.gif", + "frame_bg": "images/btn/btn-default-toolbar-large-focus-fbg.gif", + "sides": "images/btn/btn-default-toolbar-large-focus-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 1191 + }, + "gradient": "top", + "id": "button-1039", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "bg": "images/btn/btn-default-toolbar-large-pressed-bg.gif", + "corners": "images/btn/btn-default-toolbar-large-pressed-corners.gif", + "frame_bg": "images/btn/btn-default-toolbar-large-pressed-fbg.gif", + "sides": "images/btn/btn-default-toolbar-large-pressed-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 46, + "x": 10, + "y": 1241 + }, + "id": "button-1040", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "corners": "images/btn/btn-default-toolbar-large-disabled-corners.gif", + "sides": "images/btn/btn-default-toolbar-large-disabled-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 28, + "w": 200, + "x": 10, + "y": 1291 + }, + "gradient": "top", + "id": "toolbar-1041", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/toolbar/toolbar-default-bg.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 24, + "w": 200, + "x": 10, + "y": 1329 + }, + "id": "panel-1043", + "radius": { + "bl": 4, + "br": 4, + "tl": 4, + "tr": 4 + }, + "slices": { + "corners": "images/panel/panel-default-framed-corners.gif", + "sides": "images/panel/panel-default-framed-sides.gif" + } + }, + { + "border": { + "b": 0, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 25, + "w": 200, + "x": 10, + "y": 1363 + }, + "gradient": "top", + "id": "panel-1044_header", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-top-bg.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 0 + }, + "box": { + "h": 25, + "w": 200, + "x": 10, + "y": 1430 + }, + "gradient": "top", + "id": "panel-1045_header", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-bottom-bg.gif" + }, + "stretch": "top" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 0, + "t": 1 + }, + "box": { + "h": 200, + "w": 25, + "x": 10, + "y": 1465 + }, + "gradient": "left", + "id": "panel-1046_header", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-left-bg.gif", + "bg_rtl": "images/panel-header/panel-header-default-left-bg-rtl.gif" + }, + "stretch": "right" + }, + { + "border": { + "b": 1, + "l": 0, + "r": 1, + "t": 1 + }, + "box": { + "h": 200, + "w": 25, + "x": 185, + "y": 1675 + }, + "gradient": "left", + "id": "panel-1047_header", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-right-bg.gif", + "bg_rtl": "images/panel-header/panel-header-default-right-bg-rtl.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 26, + "w": 200, + "x": 10, + "y": 1885 + }, + "gradient": "top", + "id": "panel-1048_header", + "radius": { + "bl": 0, + "br": 0, + "tl": 4, + "tr": 4 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-framed-top-bg.gif", + "corners": "images/panel-header/panel-header-default-framed-top-corners.gif", + "frame_bg": "images/panel-header/panel-header-default-framed-top-fbg.gif", + "sides": "images/panel-header/panel-header-default-framed-top-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 26, + "w": 200, + "x": 10, + "y": 1967 + }, + "gradient": "top", + "id": "panel-1049_header", + "radius": { + "bl": 4, + "br": 4, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-framed-bottom-bg.gif", + "corners": "images/panel-header/panel-header-default-framed-bottom-corners.gif", + "frame_bg": "images/panel-header/panel-header-default-framed-bottom-fbg.gif", + "sides": "images/panel-header/panel-header-default-framed-bottom-sides.gif" + }, + "stretch": "top" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 200, + "w": 26, + "x": 10, + "y": 2003 + }, + "gradient": "left", + "id": "panel-1050_header", + "radius": { + "bl": 4, + "br": 0, + "tl": 4, + "tr": 0 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-framed-left-bg.gif", + "bg_rtl": "images/panel-header/panel-header-default-framed-left-bg-rtl.gif", + "corners": "images/panel-header/panel-header-default-framed-left-corners.gif", + "corners_rtl": "images/panel-header/panel-header-default-framed-left-corners-rtl.gif", + "frame_bg": "images/panel-header/panel-header-default-framed-left-fbg.gif", + "frame_bg_rtl": "images/panel-header/panel-header-default-framed-left-fbg-rtl.gif", + "sides": "images/panel-header/panel-header-default-framed-left-sides.gif", + "sides_rtl": "images/panel-header/panel-header-default-framed-left-sides-rtl.gif" + }, + "stretch": "right" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 200, + "w": 26, + "x": 184, + "y": 2213 + }, + "gradient": "left", + "id": "panel-1051_header", + "radius": { + "bl": 0, + "br": 4, + "tl": 0, + "tr": 4 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-framed-right-bg.gif", + "bg_rtl": "images/panel-header/panel-header-default-framed-right-bg-rtl.gif", + "corners": "images/panel-header/panel-header-default-framed-right-corners.gif", + "corners_rtl": "images/panel-header/panel-header-default-framed-right-corners-rtl.gif", + "frame_bg": "images/panel-header/panel-header-default-framed-right-fbg.gif", + "frame_bg_rtl": "images/panel-header/panel-header-default-framed-right-fbg-rtl.gif", + "sides": "images/panel-header/panel-header-default-framed-right-sides.gif", + "sides_rtl": "images/panel-header/panel-header-default-framed-right-sides-rtl.gif" + }, + "stretch": "left" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 26, + "w": 200, + "x": 10, + "y": 2423 + }, + "gradient": "top", + "id": "panel-1052_header", + "radius": { + "bl": 4, + "br": 4, + "tl": 4, + "tr": 4 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-framed-collapsed-top-bg.gif", + "corners": "images/panel-header/panel-header-default-framed-collapsed-top-corners.gif", + "frame_bg": "images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif", + "sides": "images/panel-header/panel-header-default-framed-collapsed-top-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 26, + "w": 200, + "x": 10, + "y": 2459 + }, + "gradient": "top", + "id": "panel-1053_header", + "radius": { + "bl": 4, + "br": 4, + "tl": 4, + "tr": 4 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif", + "corners": "images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif", + "frame_bg": "images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif", + "sides": "images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif" + }, + "stretch": "top" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 200, + "w": 26, + "x": 10, + "y": 2495 + }, + "gradient": "left", + "id": "panel-1054_header", + "radius": { + "bl": 4, + "br": 4, + "tl": 4, + "tr": 4 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-framed-collapsed-left-bg.gif", + "bg_rtl": "images/panel-header/panel-header-default-framed-collapsed-left-bg-rtl.gif", + "corners": "images/panel-header/panel-header-default-framed-collapsed-left-corners.gif", + "corners_rtl": "images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif", + "frame_bg": "images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif", + "frame_bg_rtl": "images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif", + "sides": "images/panel-header/panel-header-default-framed-collapsed-left-sides.gif", + "sides_rtl": "images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif" + }, + "stretch": "right" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 200, + "w": 26, + "x": 10, + "y": 2705 + }, + "gradient": "left", + "id": "panel-1055_header", + "radius": { + "bl": 4, + "br": 4, + "tl": 4, + "tr": 4 + }, + "slices": { + "bg": "images/panel-header/panel-header-default-framed-collapsed-right-bg.gif", + "bg_rtl": "images/panel-header/panel-header-default-framed-collapsed-right-bg-rtl.gif", + "corners": "images/panel-header/panel-header-default-framed-collapsed-right-corners.gif", + "corners_rtl": "images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif", + "frame_bg": "images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif", + "frame_bg_rtl": "images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif", + "sides": "images/panel-header/panel-header-default-framed-collapsed-right-sides.gif", + "sides_rtl": "images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif" + }, + "stretch": "left" + }, + { + "border": { + "b": 0, + "l": 0, + "r": 0, + "t": 0 + }, + "box": { + "h": 14, + "w": 400, + "x": 10, + "y": 2915 + }, + "id": "header-1056", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": {} + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 200, + "w": 200, + "x": 10, + "y": 2939 + }, + "id": "window-1057", + "radius": { + "bl": 5, + "br": 5, + "tl": 5, + "tr": 5 + }, + "slices": { + "corners": "images/window/window-default-corners.gif", + "sides": "images/window/window-default-sides.gif" + } + }, + { + "border": { + "b": 0, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 21, + "w": 200, + "x": 10, + "y": 3149 + }, + "id": "window-1062_header", + "radius": { + "bl": 0, + "br": 0, + "tl": 5, + "tr": 5 + }, + "slices": { + "corners": "images/window-header/window-header-default-top-corners.gif", + "sides": "images/window-header/window-header-default-top-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 0 + }, + "box": { + "h": 21, + "w": 200, + "x": 10, + "y": 3238 + }, + "id": "window-1063_header", + "radius": { + "bl": 5, + "br": 5, + "tl": 0, + "tr": 0 + }, + "slices": { + "corners": "images/window-header/window-header-default-bottom-corners.gif", + "sides": "images/window-header/window-header-default-bottom-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 0, + "t": 1 + }, + "box": { + "h": 200, + "w": 21, + "x": 10, + "y": 3269 + }, + "id": "window-1064_header", + "radius": { + "bl": 5, + "br": 0, + "tl": 5, + "tr": 0 + }, + "slices": { + "corners": "images/window-header/window-header-default-left-corners.gif", + "corners_rtl": "images/window-header/window-header-default-left-corners-rtl.gif", + "sides": "images/window-header/window-header-default-left-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 0, + "r": 1, + "t": 1 + }, + "box": { + "h": 200, + "w": 21, + "x": 189, + "y": 3479 + }, + "id": "window-1065_header", + "radius": { + "bl": 0, + "br": 5, + "tl": 0, + "tr": 5 + }, + "slices": { + "corners": "images/window-header/window-header-default-right-corners.gif", + "corners_rtl": "images/window-header/window-header-default-right-corners-rtl.gif", + "sides": "images/window-header/window-header-default-right-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 26, + "w": 200, + "x": 10, + "y": 3689 + }, + "id": "window-1066_header", + "radius": { + "bl": 5, + "br": 5, + "tl": 5, + "tr": 5 + }, + "slices": { + "corners": "images/window-header/window-header-default-collapsed-top-corners.gif", + "sides": "images/window-header/window-header-default-collapsed-top-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 26, + "w": 200, + "x": 10, + "y": 3725 + }, + "id": "window-1067_header", + "radius": { + "bl": 5, + "br": 5, + "tl": 5, + "tr": 5 + }, + "slices": { + "corners": "images/window-header/window-header-default-collapsed-bottom-corners.gif", + "sides": "images/window-header/window-header-default-collapsed-bottom-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 200, + "w": 26, + "x": 10, + "y": 3761 + }, + "id": "window-1068_header", + "radius": { + "bl": 5, + "br": 5, + "tl": 5, + "tr": 5 + }, + "slices": { + "corners": "images/window-header/window-header-default-collapsed-left-corners.gif", + "corners_rtl": "images/window-header/window-header-default-collapsed-left-corners-rtl.gif", + "sides": "images/window-header/window-header-default-collapsed-left-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 200, + "w": 26, + "x": 10, + "y": 3971 + }, + "id": "window-1069_header", + "radius": { + "bl": 5, + "br": 5, + "tl": 5, + "tr": 5 + }, + "slices": { + "corners": "images/window-header/window-header-default-collapsed-right-corners.gif", + "corners_rtl": "images/window-header/window-header-default-collapsed-right-corners-rtl.gif", + "sides": "images/window-header/window-header-default-collapsed-right-sides.gif" + } + }, + { + "border": { + "b": 0, + "l": 0, + "r": 0, + "t": 0 + }, + "box": { + "h": 200, + "w": 200, + "x": 10, + "y": 4181 + }, + "id": "tabpanel-1070", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": {} + }, + { + "border": { + "b": 0, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 25, + "w": 300, + "x": 10, + "y": 4391 + }, + "gradient": "top", + "id": "tabbar-1077", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/tab-bar/tab-bar-default-top-bg.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 21, + "w": 398, + "x": 12, + "y": 4428 + }, + "gradient": "top", + "id": "tab-1080", + "radius": { + "bl": 0, + "br": 0, + "tl": 4, + "tr": 4 + }, + "slices": { + "bg": "images/tab/tab-default-top-bg.gif", + "corners": "images/tab/tab-default-top-corners.gif", + "frame_bg": "images/tab/tab-default-top-fbg.gif", + "sides": "images/tab/tab-default-top-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 21, + "w": 398, + "x": 12, + "y": 4459 + }, + "gradient": "top", + "id": "tab-1081", + "radius": { + "bl": 0, + "br": 0, + "tl": 4, + "tr": 4 + }, + "slices": { + "bg": "images/tab/tab-default-top-active-bg.gif", + "corners": "images/tab/tab-default-top-active-corners.gif", + "frame_bg": "images/tab/tab-default-top-active-fbg.gif", + "sides": "images/tab/tab-default-top-active-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 21, + "w": 398, + "x": 12, + "y": 4490 + }, + "gradient": "top", + "id": "tab-1082", + "radius": { + "bl": 0, + "br": 0, + "tl": 4, + "tr": 4 + }, + "slices": { + "bg": "images/tab/tab-default-top-over-bg.gif", + "corners": "images/tab/tab-default-top-over-corners.gif", + "frame_bg": "images/tab/tab-default-top-over-fbg.gif", + "sides": "images/tab/tab-default-top-over-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 21, + "w": 398, + "x": 12, + "y": 4521 + }, + "gradient": "top", + "id": "tab-1083", + "radius": { + "bl": 0, + "br": 0, + "tl": 4, + "tr": 4 + }, + "slices": { + "bg": "images/tab/tab-default-top-disabled-bg.gif", + "corners": "images/tab/tab-default-top-disabled-corners.gif", + "frame_bg": "images/tab/tab-default-top-disabled-fbg.gif", + "sides": "images/tab/tab-default-top-disabled-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 21, + "w": 398, + "x": 12, + "y": 4552 + }, + "gradient": "top", + "id": "tab-1084", + "radius": { + "bl": 4, + "br": 4, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/tab/tab-default-bottom-bg.gif", + "corners": "images/tab/tab-default-bottom-corners.gif", + "frame_bg": "images/tab/tab-default-bottom-fbg.gif", + "sides": "images/tab/tab-default-bottom-sides.gif" + }, + "stretch": "bottom" + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 21, + "w": 398, + "x": 12, + "y": 4583 + }, + "gradient": "top", + "id": "tab-1085", + "radius": { + "bl": 4, + "br": 4, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/tab/tab-default-bottom-active-bg.gif", + "corners": "images/tab/tab-default-bottom-active-corners.gif", + "frame_bg": "images/tab/tab-default-bottom-active-fbg.gif", + "sides": "images/tab/tab-default-bottom-active-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 21, + "w": 398, + "x": 12, + "y": 4614 + }, + "gradient": "top", + "id": "tab-1086", + "radius": { + "bl": 4, + "br": 4, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/tab/tab-default-bottom-over-bg.gif", + "corners": "images/tab/tab-default-bottom-over-corners.gif", + "frame_bg": "images/tab/tab-default-bottom-over-fbg.gif", + "sides": "images/tab/tab-default-bottom-over-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 21, + "w": 398, + "x": 12, + "y": 4645 + }, + "gradient": "top", + "id": "tab-1087", + "radius": { + "bl": 4, + "br": 4, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/tab/tab-default-bottom-disabled-bg.gif", + "corners": "images/tab/tab-default-bottom-disabled-corners.gif", + "frame_bg": "images/tab/tab-default-bottom-disabled-fbg.gif", + "sides": "images/tab/tab-default-bottom-disabled-sides.gif" + } + }, + { + "border": { + "b": 0, + "l": 0, + "r": 0, + "t": 0 + }, + "box": { + "h": 18, + "w": 98, + "x": 11, + "y": 4677 + }, + "gradient": "top", + "id": "progressbar-1088-bar", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/progress/progress-default-bg.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 70, + "w": 400, + "x": 10, + "y": 4706 + }, + "id": "buttongroup-1089", + "radius": { + "bl": 2, + "br": 2, + "tl": 2, + "tr": 2 + }, + "slices": { + "corners": "images/btn-group/btn-group-default-framed-notitle-corners.gif", + "sides": "images/btn-group/btn-group-default-framed-notitle-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 88, + "w": 400, + "x": 10, + "y": 4786 + }, + "id": "buttongroup-1101", + "radius": { + "bl": 2, + "br": 2, + "tl": 2, + "tr": 2 + }, + "slices": { + "corners": "images/btn-group/btn-group-default-framed-corners.gif", + "sides": "images/btn-group/btn-group-default-framed-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 100, + "x": 10, + "y": 4884 + }, + "id": "tooltip-1113", + "radius": { + "bl": 3, + "br": 3, + "tl": 3, + "tr": 3 + }, + "slices": { + "corners": "images/tip/tip-default-corners.gif", + "sides": "images/tip/tip-default-sides.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 1 + }, + "box": { + "h": 40, + "w": 100, + "x": 10, + "y": 4934 + }, + "id": "tooltip-1114", + "radius": { + "bl": 5, + "br": 5, + "tl": 5, + "tr": 5 + }, + "slices": { + "corners": "images/tip/tip-form-invalid-corners.gif", + "sides": "images/tip/tip-form-invalid-sides.gif" + } + }, + { + "border": { + "b": 0, + "l": 0, + "r": 1, + "t": 0 + }, + "box": { + "h": 23, + "w": 400, + "x": 10, + "y": 4984 + }, + "gradient": "top", + "id": "gridcolumn-1115", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/grid/column-header-bg.gif" + } + }, + { + "border": { + "b": 0, + "l": 0, + "r": 1, + "t": 0 + }, + "box": { + "h": 23, + "w": 400, + "x": 10, + "y": 5017 + }, + "gradient": "top", + "id": "gridcolumn-1116", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/grid/column-header-over-bg.gif" + } + }, + { + "border": { + "b": 0, + "l": 0, + "r": 0, + "t": 0 + }, + "box": { + "h": 26, + "w": 175, + "x": 11, + "y": 5051 + }, + "gradient": "top", + "id": "ext-gen1379", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/datepicker/datepicker-header-bg.gif" + } + }, + { + "border": { + "b": 0, + "l": 0, + "r": 0, + "t": 1 + }, + "box": { + "h": 31, + "w": 175, + "x": 11, + "y": 5426 + }, + "gradient": "top", + "id": "datepicker-1120-footerEl", + "radius": { + "bl": 0, + "br": 0, + "tl": 0, + "tr": 0 + }, + "slices": { + "bg": "images/datepicker/datepicker-footer-bg.gif" + } + }, + { + "border": { + "b": 1, + "l": 1, + "r": 1, + "t": 0 + }, + "box": { + "h": 31, + "w": 164, + "x": 10, + "y": 5468 + }, + "id": "roweditorbuttons-1123", + "radius": { + "bl": 5, + "br": 5, + "tl": 0, + "tr": 0 + }, + "slices": { + "corners": "images/grid-row-editor-buttons/null-corners.gif", + "sides": "images/grid-row-editor-buttons/null-sides.gif" + } + } + ] +} \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/theme-capture.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/theme-capture.png new file mode 100644 index 000000000..799867148 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/build/theme-capture.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/docs/package.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/docs/package.png new file mode 100644 index 000000000..622a18c79 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/docs/package.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/docs/screenshots/screenshot-1.png b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/docs/screenshots/screenshot-1.png new file mode 100644 index 000000000..622a18c79 Binary files /dev/null and b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/docs/screenshots/screenshot-1.png differ diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/licenses/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/licenses/Readme.md new file mode 100644 index 000000000..844bbb7d0 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/licenses/Readme.md @@ -0,0 +1,3 @@ +# ext-theme-gray/licenses + +This folder contains the supported licenses for third-party use. diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/overrides/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/overrides/Readme.md new file mode 100644 index 000000000..9abbff2d9 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/overrides/Readme.md @@ -0,0 +1,3 @@ +# ext-theme-gray/overrides + +This folder contains overrides which will automatically be required by package users. diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/package.json b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/package.json new file mode 100644 index 000000000..62881821e --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/package.json @@ -0,0 +1,11 @@ +{ + "name": "ext-theme-gray", + "type": "THEME", + "version": "4.2.0.663", + "compatVersion": "4.2.0", + "extend": "ext-theme-classic", + "requires": [{ + "name": "ext-theme-classic", + "version": "4.2.0.663" + }] +} diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/resources/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/resources/Readme.md new file mode 100644 index 000000000..04c60d5d1 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/resources/Readme.md @@ -0,0 +1,3 @@ +# ext-theme-gray/resources + +This folder contains static resources (typically an `"images"` folder as well). diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/Readme.md new file mode 100644 index 000000000..ae94a8747 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/Readme.md @@ -0,0 +1,7 @@ +# ext-theme-gray/sass + +This folder contains SASS files of various kinds, organized in sub-folders: + + ext-theme-gray/sass/etc + ext-theme-gray/sass/src + ext-theme-gray/sass/var diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/all/ext-all-gray-rtl.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/all/ext-all-gray-rtl.scss new file mode 100644 index 000000000..3db581f65 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/all/ext-all-gray-rtl.scss @@ -0,0 +1,2 @@ +$include-rtl: true; +@import 'ext-all-gray.scss'; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/all/ext-all-gray.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/all/ext-all-gray.scss new file mode 100644 index 000000000..4b0fee525 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/all/ext-all-gray.scss @@ -0,0 +1,3 @@ +@import '../etc/all'; +@import '../var/all'; +@import '../src/all'; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/config.rb b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/config.rb new file mode 100644 index 000000000..2eb06e8ed --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/config.rb @@ -0,0 +1,4 @@ +cur_dir = File.dirname(__FILE__) +css_path = $css_path = File.join(cur_dir, '..', 'build', 'resources') +output_style = :nested +require File.join(cur_dir, '..', '..', 'ext-theme-base', 'sass', 'utils.rb') \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/etc/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/etc/Readme.md new file mode 100644 index 000000000..3df8b4add --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/etc/Readme.md @@ -0,0 +1,4 @@ +# ext-theme-gray/sass/etc + +This folder contains miscellaneous SASS files. Unlike `"ext-theme-gray/sass/etc"`, these files +need to be used explicitly. diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/etc/all.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/etc/all.scss new file mode 100644 index 000000000..a9136bb8d --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/etc/all.scss @@ -0,0 +1 @@ +$theme-name: 'ext-theme-gray'; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/example/custom.js b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/example/custom.js new file mode 100644 index 000000000..28faf77ff --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/example/custom.js @@ -0,0 +1,32 @@ +/* +This file is part of Ext JS 4.2 + +Copyright (c) 2011-2013 Sencha Inc + +Contact: http://www.sencha.com/contact + +GNU General Public License Usage +This file may be used under the terms of the GNU General Public License version 3.0 as +published by the Free Software Foundation and appearing in the file LICENSE included in the +packaging of this file. + +Please review the following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you are unsure which license is appropriate for your use, please contact the sales department +at http://www.sencha.com/contact. + +Build date: 2013-03-11 22:33:40 (aed16176e68b5e8aa1433452b12805c0ad913836) +*/ +/* + * This file is generated as a starting point by Sencha Cmd - it will not be replaced or + * updated by "sencha package upgrade". + * + * This file can be removed and the script tag in theme.html removed if this theme does + * not need custom additional manifest or shortcut entries. These are documented in + * ./packages/ext-theme-base/sass/example/render.js. + */ + +//Ext.theme.addManifest(); + +//Ext.theme.addShortcuts(); diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/example/slicer.js b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/example/slicer.js new file mode 100644 index 000000000..3d9cfb04d --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/example/slicer.js @@ -0,0 +1,126 @@ +/* +This file is part of Ext JS 4.2 + +Copyright (c) 2011-2013 Sencha Inc + +Contact: http://www.sencha.com/contact + +GNU General Public License Usage +This file may be used under the terms of the GNU General Public License version 3.0 as +published by the Free Software Foundation and appearing in the file LICENSE included in the +packaging of this file. + +Please review the following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you are unsure which license is appropriate for your use, please contact the sales department +at http://www.sencha.com/contact. + +Build date: 2013-03-11 22:33:40 (aed16176e68b5e8aa1433452b12805c0ad913836) +*/ +/* + * This file is generated by Sencha Cmd and should NOT be edited. It will be replaced by + * "sencha package upgrade". + */ +if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', function () { + // This is very important for getting transparency on corners. + document.body.style.backgroundColor = 'transparent'; + }); +} + +// This variable is watched by the Slicer. Once it is set, the data is saved with the +// screenshot. +var slicerManifest; + +function generateSlicerManifest () { + var elements = document.body.querySelectorAll('.x-slicer-target'); + var widgets = []; + var slicesRe = /^'x-slicer\:(.+)'$/; + + function getData (el) { + var data = el.getAttribute('data-slicer'); + if (data) { + return JSON.parse(data); + } + return null; + } + + function getSlices (slices, src) { + var content = src && src.content; + if (content) { + var m = slicesRe.exec(content); + if (m && m[1]) { + slices.push(m[1]); + } + } + } + + function forEach (it, fn) { + for (var i = 0; i < it.length; ++i) { + fn(it[i]); + } + } + + forEach(elements, function (el) { + var view = el.ownerDocument.defaultView; + var style = view.getComputedStyle(el, null); + var bg = style['background-image']; + var box = el.getBoundingClientRect(); + + var entry = { + box: { + x: window.scrollX + box.left, + y: window.scrollY + box.top, + w: box.right - box.left, + h: box.bottom - box.top + }, + radius: { + tl: parseInt(style['border-top-left-radius'], 10) || 0, + tr: parseInt(style['border-top-right-radius'], 10) || 0, + br: parseInt(style['border-bottom-right-radius'], 10) || 0, + bl: parseInt(style['border-bottom-left-radius'], 10) || 0 + }, + border: { + t: parseInt(style['border-top-width'], 10) || 0, + r: parseInt(style['border-right-width'], 10) || 0, + b: parseInt(style['border-bottom-width'], 10) || 0, + l: parseInt(style['border-left-width'], 10) || 0 + } + }; + + if (el.id) { + entry.id = el.id; + } + + if (bg.indexOf('-gradient') !== -1) { + if (bg.indexOf('50% 0') !== -1 || bg.indexOf('top') !== -1 || + bg.indexOf('bottom') !== -1) { + entry.gradient = 'top'; + } else { + entry.gradient = 'left'; + } + } + + var slices = []; + getSlices(slices, view.getComputedStyle(el, ':before')); + getSlices(slices, view.getComputedStyle(el, ':after')); + + if (slices.length) { + entry.slices = slices.join(', ').split(', '); + } + var extra = getData(el); + if (extra) { + entry.extra = extra; + } + + widgets.push(entry); + }); + + slicerManifest = getData(document.body) || {}; + slicerManifest.widgets = widgets; + if (!slicerManifest.format) { + // legacy support sets format to "1.0" + slicerManifest.format = '2.0'; + } +} diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/example/theme.html b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/example/theme.html new file mode 100644 index 000000000..274f33719 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/example/theme.html @@ -0,0 +1,44 @@ + + + + + Ext JS Theme Harness + + + + + + + + + + + + + + + + + + + diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/src/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/src/Readme.md new file mode 100644 index 000000000..eedd54ca3 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/src/Readme.md @@ -0,0 +1,4 @@ +# ext-theme-gray/sass/src + +This folder contains SASS sources that mimic the component-class hierarchy. These files +are gathered in to a build of the CSS based on classes that are used by the build. diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/src/all.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/src/all.scss new file mode 100644 index 000000000..570bdbed6 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/src/all.scss @@ -0,0 +1 @@ +@import '../../../ext-theme-classic/sass/src/all'; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/Component.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/Component.scss new file mode 100644 index 000000000..b77540988 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/Component.scss @@ -0,0 +1 @@ +$base-color: #ccc !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/ProgressBar.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/ProgressBar.scss new file mode 100644 index 000000000..8d8767206 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/ProgressBar.scss @@ -0,0 +1,3 @@ +$progress-border-color: #8e8e8e !default; +$progress-background-color: #f1f1f1 !default; +$progress-bar-background-color: #ababab !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/Readme.md new file mode 100644 index 000000000..bd8da895f --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/Readme.md @@ -0,0 +1,3 @@ +# ext-theme-gray/sass/var + +This folder contains variable declaration files named by their component class. diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/all.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/all.scss new file mode 100644 index 000000000..54d57d754 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/all.scss @@ -0,0 +1,16 @@ +@import 'Component'; +@import 'panel/Panel'; +@import 'window/Window'; +@import 'menu/Menu'; +@import 'picker/Date'; +@import 'ProgressBar'; +@import 'tip/Tip'; +@import 'toolbar/Toolbar'; +@import 'container/ButtonGroup'; +@import 'form/FieldSet'; +@import 'view/BoundList'; +@import 'layout/container/Accordion'; +@import 'tab/Panel.scss'; +@import 'button/Button.scss'; + +@import '../../../ext-theme-classic/sass/var/all'; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/button/Button.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/button/Button.scss new file mode 100644 index 000000000..316c2c6d9 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/button/Button.scss @@ -0,0 +1,32 @@ +$button-default-base-color: #f8f8f8 !default; +$button-default-base-color-over: #f3f3f3 !default; +$button-default-base-color-focus: $button-default-base-color-over !default; +$button-default-base-color-pressed: #d6d6d6 !default; +$button-default-base-color-disabled: adjust-color($base-color, $hue: 0deg, $saturation: -55.556%, $lightness: 12.745%) !default; //F7F7F7 + +$button-default-border-color: #bbbbbb !default; +$button-default-border-color-over: #9d9d9d !default; +$button-default-border-color-focus: $button-default-border-color-over !default; +$button-default-border-color-pressed: $button-default-border-color-over !default; +$button-default-border-color-disabled: adjust-color($button-default-base-color-disabled, $hue: 0deg, $saturation: 0%, $lightness: -8.627%) !default; + +$button-default-background-gradient: 'matte' !default; +$button-default-background-gradient-over: 'matte' !default; +$button-default-background-gradient-focus: 'matte' !default; +$button-default-background-gradient-pressed: 'matte-reverse' !default; +$button-default-background-gradient-disabled: 'matte' !default; + +$button-default-background-gradient-color-stops: null !default; +$button-default-background-gradient-color-stops-over: null !default; +$button-default-background-gradient-color-stops-focus: null !default; +$button-default-background-gradient-color-stops-pressed: null !default; +$button-default-background-gradient-color-stops-disabled: null !default; + +$button-toolbar-border-color-over: $button-default-border-color-over !default; +$button-toolbar-border-color-focus: $button-default-border-color-focus !default; +$button-toolbar-border-color-pressed: $button-default-border-color-pressed !default; +$button-toolbar-border-color-disabled: $button-default-border-color-disabled !default; + +$button-toolbar-background-color-over: $button-default-base-color-over !default; +$button-toolbar-background-color-focus: $button-default-base-color-focus !default; +$button-toolbar-background-color-pressed: $button-default-base-color-pressed !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/container/ButtonGroup.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/container/ButtonGroup.scss new file mode 100644 index 000000000..43c8896c6 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/container/ButtonGroup.scss @@ -0,0 +1,5 @@ +$btn-group-background-color: #f0f0f0 !default; +$btn-group-header-background-color: #dfdfdf !default; +$btn-group-border-color: #d0d0d0 !default; +$btn-group-header-color: #666 !default; +$btn-group-inner-border-color: #ececec !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/form/FieldSet.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/form/FieldSet.scss new file mode 100644 index 000000000..9ea168cc8 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/form/FieldSet.scss @@ -0,0 +1 @@ +$fieldset-header-color: #333 !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/grid/column/Column.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/grid/column/Column.scss new file mode 100644 index 000000000..ef818f507 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/grid/column/Column.scss @@ -0,0 +1,2 @@ +$grid-header-over-background-color: #f0f0f0 !default; +$grid-header-over-background-gradient: color-stops(#ffffff, #f0f0f0) !default; diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/layout/container/Accordion.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/layout/container/Accordion.scss new file mode 100644 index 000000000..32dd2ea77 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/layout/container/Accordion.scss @@ -0,0 +1 @@ +$accordion-header-background-color: #e5e5e5 !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/menu/Menu.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/menu/Menu.scss new file mode 100644 index 000000000..9d0b5dd24 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/menu/Menu.scss @@ -0,0 +1,2 @@ +$menu-item-active-background-color: darken(#f3f3f3, 5) !default; +$menu-item-active-border-color: #9d9d9d !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/panel/Panel.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/panel/Panel.scss new file mode 100644 index 000000000..de58c4ce8 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/panel/Panel.scss @@ -0,0 +1,4 @@ +$panel-header-background-gradient: color-stops(#F0F0F0, #D7D7D7) !default; +$panel-border-color: #D0D0D0 !default; +$panel-header-color: #333 !default; +$panel-frame-background-color: #f1f1f1 !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/picker/Date.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/picker/Date.scss new file mode 100644 index 000000000..e1efb4d6d --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/picker/Date.scss @@ -0,0 +1,5 @@ +$datepicker-header-background-color: #6f6f6f !default; +$datepicker-border-color: #585858 !default; +$datepicker-column-header-background-color: #e9e9e9 !default; +$datepicker-item-selected-background-color: #d8d8d8 !default; +$datepicker-item-hover-background-color: transparent !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/tab/Panel.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/tab/Panel.scss new file mode 100644 index 000000000..bbb2e3345 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/tab/Panel.scss @@ -0,0 +1,12 @@ +$tab-base-color: #eaeaea !default; +$tab-base-color-disabled: #eeeeee !default; + +$tab-color-active: #333333 !default; +$tab-color-disabled: #b7b7b7 !default; + +$tab-border-color-disabled: #dadada !default; + +$tab-background-gradient: color-stops(#dcdcdc, #eaeaea) !default; +$tab-background-gradient-over: color-stops(#ffffff, #f0f0f0) !default; +$tab-background-gradient-active: color-stops(#ffffff, #eaeaea) !default; +$tab-background-gradient-disabled: color-stops(#eeeeee, #f4f4f4) !default; diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/tip/Tip.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/tip/Tip.scss new file mode 100644 index 000000000..9eed5b187 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/tip/Tip.scss @@ -0,0 +1 @@ +$tip-base-color: $base-color !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/toolbar/Toolbar.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/toolbar/Toolbar.scss new file mode 100644 index 000000000..9e7552025 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/toolbar/Toolbar.scss @@ -0,0 +1,3 @@ +$toolbar-background-gradient: color-stops(#e6e6e6, #efefef) !default; +$toolbar-separator-color: #aca899 !default; +$toolbar-text-color: #000 !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/view/BoundList.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/view/BoundList.scss new file mode 100644 index 000000000..edb291600 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/view/BoundList.scss @@ -0,0 +1 @@ +$boundlist-border-color: #b5b8c8 !default; \ No newline at end of file diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/window/Window.scss b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/window/Window.scss new file mode 100644 index 000000000..89ec5f8eb --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/sass/var/window/Window.scss @@ -0,0 +1,2 @@ +$window-background-color: #e8e8e8 !default; +$window-header-color: #333 !default; diff --git a/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/src/Readme.md b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/src/Readme.md new file mode 100644 index 000000000..33ada1166 --- /dev/null +++ b/fhem/www/frontend/www/frontend/lib/ext-4.2.0.663/packages/ext-theme-gray/src/Readme.md @@ -0,0 +1,4 @@ +# ext-theme-gray/src + +This folder contains source code that will automatically be added to the classpath when +the package is used.