Ignore:
Timestamp:
15.07.2009 10:59:27 (3 years ago)
Author:
mike
Message:

3.1.0

  • bugfix: delete zmsgallery-temp_folder when import was aborted

fixes #38:

  • jcrop.css, jcrop.gif moved to MediaPlayerLib?
  • jquery-custom.css added to MediaPlayerLib?
  • all necessary jquery-style-images added to MediaPlayerLib?
  • jcrop.js, jquery.js, jquery-ui.js moved from ZMSGallery to ZMSMediaPlayerLib
  • ZMSMediaPlayerLib_crop renamed to ZMSGallery_crop
  • ZMSMediaPlayerLib_resize renamed to ZMSGallery_resize
File:
1 edited

Legend:

Unmodified
Added
Removed
  • CMESS/mediaplayer/branches/3.1/com/zms/mediaplayer/mediaplayer.metaobj.xml

    r635 r636  
    11281128</item> 
    11291129<item type="dictionary"><dictionary> 
    1130 <item key="custom"> 
    1131 <data content_type="text/x-c" filename="ui.core.js" type="file"><![CDATA[/* 
    1132  * jQuery UI 1.6rc6 
    1133  * 
    1134  * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about) 
    1135  * Dual licensed under the MIT (MIT-LICENSE.txt) 
    1136  * and GPL (GPL-LICENSE.txt) licenses. 
    1137  * 
    1138  * http://docs.jquery.com/UI 
    1139  */ 
    1140 ;(function($) { 
    1141  
    1142 var _remove = $.fn.remove, 
    1143         isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9); 
    1144  
    1145 //Helper functions and ui object 
    1146 $.ui = { 
    1147         version: "1.6rc6", 
    1148  
    1149         // $.ui.plugin is deprecated.  Use the proxy pattern instead. 
    1150         plugin: { 
    1151                 add: function(module, option, set) { 
    1152                         var proto = $.ui[module].prototype; 
    1153                         for(var i in set) { 
    1154                                 proto.plugins[i] = proto.plugins[i] || []; 
    1155                                 proto.plugins[i].push([option, set[i]]); 
    1156                         } 
    1157                 }, 
    1158                 call: function(instance, name, args) { 
    1159                         var set = instance.plugins[name]; 
    1160                         if(!set) { return; } 
    1161  
    1162                         for (var i = 0; i < set.length; i++) { 
    1163                                 if (instance.options[set[i][0]]) { 
    1164                                         set[i][1].apply(instance.element, args); 
    1165                                 } 
    1166                         } 
    1167                 } 
    1168         }, 
    1169  
    1170         contains: function(a, b) { 
    1171                 return document.compareDocumentPosition 
    1172                         ? a.compareDocumentPosition(b) & 16 
    1173                         : a !== b && a.contains(b); 
    1174         }, 
    1175  
    1176         cssCache: {}, 
    1177         css: function(name) { 
    1178                 if ($.ui.cssCache[name]) { return $.ui.cssCache[name]; } 
    1179                 var tmp = $('<div class="ui-gen"></div>').addClass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendTo('body'); 
    1180  
    1181                 //if (!$.browser.safari) 
    1182                         //tmp.appendTo('body'); 
    1183  
    1184                 //Opera and Safari set width and height to 0px instead of auto 
    1185                 //Safari returns rgba(0,0,0,0) when bgcolor is not set 
    1186                 $.ui.cssCache[name] = !!( 
    1187                         (!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) || 
    1188                         !(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor'))) 
    1189                 ); 
    1190                 try { $('body').get(0).removeChild(tmp.get(0)); } catch(e){} 
    1191                 return $.ui.cssCache[name]; 
    1192         }, 
    1193  
    1194         hasScroll: function(el, a) { 
    1195  
    1196                 //If overflow is hidden, the element might have extra content, but the user wants to hide it 
    1197                 if ($(el).css('overflow') == 'hidden') { return false; } 
    1198  
    1199                 var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop', 
    1200                         has = false; 
    1201  
    1202                 if (el[scroll] > 0) { return true; } 
    1203  
    1204                 // TODO: determine which cases actually cause this to happen 
    1205                 // if the element doesn't have the scroll set, see if it's possible to 
    1206                 // set the scroll 
    1207                 el[scroll] = 1; 
    1208                 has = (el[scroll] > 0); 
    1209                 el[scroll] = 0; 
    1210                 return has; 
    1211         }, 
    1212  
    1213         isOverAxis: function(x, reference, size) { 
    1214                 //Determines when x coordinate is over "b" element axis 
    1215                 return (x > reference) && (x < (reference + size)); 
    1216         }, 
    1217  
    1218         isOver: function(y, x, top, left, height, width) { 
    1219                 //Determines when x, y coordinates is over "b" element 
    1220                 return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width); 
    1221         }, 
    1222  
    1223         keyCode: { 
    1224                 BACKSPACE: 8, 
    1225                 CAPS_LOCK: 20, 
    1226                 COMMA: 188, 
    1227                 CONTROL: 17, 
    1228                 DELETE: 46, 
    1229                 DOWN: 40, 
    1230                 END: 35, 
    1231                 ENTER: 13, 
    1232                 ESCAPE: 27, 
    1233                 HOME: 36, 
    1234                 INSERT: 45, 
    1235                 LEFT: 37, 
    1236                 NUMPAD_ADD: 107, 
    1237                 NUMPAD_DECIMAL: 110, 
    1238                 NUMPAD_DIVIDE: 111, 
    1239                 NUMPAD_ENTER: 108, 
    1240                 NUMPAD_MULTIPLY: 106, 
    1241                 NUMPAD_SUBTRACT: 109, 
    1242                 PAGE_DOWN: 34, 
    1243                 PAGE_UP: 33, 
    1244                 PERIOD: 190, 
    1245                 RIGHT: 39, 
    1246                 SHIFT: 16, 
    1247                 SPACE: 32, 
    1248                 TAB: 9, 
    1249                 UP: 38 
    1250         } 
    1251 }; 
    1252  
    1253 // WAI-ARIA normalization 
    1254 if (isFF2) { 
    1255         var attr = $.attr, 
    1256                 removeAttr = $.fn.removeAttr, 
    1257                 ariaNS = "http://www.w3.org/2005/07/aaa", 
    1258                 ariaState = /^aria-/, 
    1259                 ariaRole = /^wairole:/; 
    1260  
    1261         $.attr = function(elem, name, value) { 
    1262                 var set = value !== undefined; 
    1263  
    1264                 return (name == 'role' 
    1265                         ? (set 
    1266                                 ? attr.call(this, elem, name, "wairole:" + value) 
    1267                                 : (attr.apply(this, arguments) || "").replace(ariaRole, "")) 
    1268                         : (ariaState.test(name) 
    1269                                 ? (set 
    1270                                         ? elem.setAttributeNS(ariaNS, 
    1271                                                 name.replace(ariaState, "aaa:"), value) 
    1272                                         : attr.call(this, elem, name.replace(ariaState, "aaa:"))) 
    1273                                 : attr.apply(this, arguments))); 
    1274         }; 
    1275  
    1276         $.fn.removeAttr = function(name) { 
    1277                 return (ariaState.test(name) 
    1278                         ? this.each(function() { 
    1279                                 this.removeAttributeNS(ariaNS, name.replace(ariaState, "")); 
    1280                         }) : removeAttr.call(this, name)); 
    1281         }; 
    1282 } 
    1283  
    1284 //jQuery plugins 
    1285 $.fn.extend({ 
    1286         remove: function() { 
    1287                 // Safari has a native remove event which actually removes DOM elements, 
    1288                 // so we have to use triggerHandler instead of trigger (#3037). 
    1289                 $("*", this).add(this).each(function() { 
    1290                         $(this).triggerHandler("remove"); 
    1291                 }); 
    1292                 return _remove.apply(this, arguments ); 
    1293         }, 
    1294  
    1295         enableSelection: function() { 
    1296                 return this 
    1297                         .attr('unselectable', 'off') 
    1298                         .css('MozUserSelect', '') 
    1299                         .unbind('selectstart.ui'); 
    1300         }, 
    1301  
    1302         disableSelection: function() { 
    1303                 return this 
    1304                         .attr('unselectable', 'on') 
    1305                         .css('MozUserSelect', 'none') 
    1306                         .bind('selectstart.ui', function() { return false; }); 
    1307         }, 
    1308  
    1309         scrollParent: function() { 
    1310                 var scrollParent; 
    1311                 if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { 
    1312                         scrollParent = this.parents().filter(function() { 
    1313                                 return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); 
    1314                         }).eq(0); 
    1315                 } else { 
    1316                         scrollParent = this.parents().filter(function() { 
    1317                                 return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); 
    1318                         }).eq(0); 
    1319                 } 
    1320  
    1321                 return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; 
    1322         } 
    1323 }); 
    1324  
    1325  
    1326 //Additional selectors 
    1327 $.extend($.expr[':'], { 
    1328         data: function(elem, i, match) { 
    1329                 return !!$.data(elem, match[3]); 
    1330         }, 
    1331  
    1332         focusable: function(element) { 
    1333                 var nodeName = element.nodeName.toLowerCase(), 
    1334                         tabIndex = $.attr(element, 'tabindex'); 
    1335                 return (/input|select|textarea|button|object/.test(nodeName) 
    1336                         ? !element.disabled 
    1337                         : 'a' == nodeName || 'area' == nodeName 
    1338                                 ? element.href || !isNaN(tabIndex) 
    1339                                 : !isNaN(tabIndex)) 
    1340                         // the element and all of its ancestors must be visible 
    1341                         // the browser may report that the area is hidden 
    1342                         && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length; 
    1343         }, 
    1344  
    1345         tabbable: function(element) { 
    1346                 var tabIndex = $.attr(element, 'tabindex'); 
    1347                 return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable'); 
    1348         } 
    1349 }); 
    1350  
    1351  
    1352 // $.widget is a factory to create jQuery plugins 
    1353 // taking some boilerplate code out of the plugin code 
    1354 function getter(namespace, plugin, method, args) { 
    1355         function getMethods(type) { 
    1356                 var methods = $[namespace][plugin][type] || []; 
    1357                 return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods); 
    1358         } 
    1359  
    1360         var methods = getMethods('getter'); 
    1361         if (args.length == 1 && typeof args[0] == 'string') { 
    1362                 methods = methods.concat(getMethods('getterSetter')); 
    1363         } 
    1364         return ($.inArray(method, methods) != -1); 
    1365 } 
    1366  
    1367 $.widget = function(name, prototype) { 
    1368         var namespace = name.split(".")[0]; 
    1369         name = name.split(".")[1]; 
    1370  
    1371         // create plugin method 
    1372         $.fn[name] = function(options) { 
    1373                 var isMethodCall = (typeof options == 'string'), 
    1374                         args = Array.prototype.slice.call(arguments, 1); 
    1375  
    1376                 // prevent calls to internal methods 
    1377                 if (isMethodCall && options.substring(0, 1) == '_') { 
    1378                         return this; 
    1379                 } 
    1380  
    1381                 // handle getter methods 
    1382                 if (isMethodCall && getter(namespace, name, options, args)) { 
    1383                         var instance = $.data(this[0], name); 
    1384                         return (instance ? instance[options].apply(instance, args) 
    1385                                 : undefined); 
    1386                 } 
    1387  
    1388                 // handle initialization and non-getter methods 
    1389                 return this.each(function() { 
    1390                         var instance = $.data(this, name); 
    1391  
    1392                         // constructor 
    1393                         (!instance && !isMethodCall && 
    1394                                 $.data(this, name, new $[namespace][name](this, options))._init()); 
    1395  
    1396                         // method call 
    1397                         (instance && isMethodCall && $.isFunction(instance[options]) && 
    1398                                 instance[options].apply(instance, args)); 
    1399                 }); 
    1400         }; 
    1401  
    1402         // create widget constructor 
    1403         $[namespace] = $[namespace] || {}; 
    1404         $[namespace][name] = function(element, options) { 
    1405                 var self = this; 
    1406  
    1407                 this.namespace = namespace; 
    1408                 this.widgetName = name; 
    1409                 this.widgetEventPrefix = $[namespace][name].eventPrefix || name; 
    1410                 this.widgetBaseClass = namespace + '-' + name; 
    1411  
    1412                 this.options = $.extend({}, 
    1413                         $.widget.defaults, 
    1414                         $[namespace][name].defaults, 
    1415                         $.metadata && $.metadata.get(element)[name], 
    1416                         options); 
    1417  
    1418                 this.element = $(element) 
    1419                         .bind('setData.' + name, function(event, key, value) { 
    1420                                 if (event.target == element) { 
    1421                                         return self._setData(key, value); 
    1422                                 } 
    1423                         }) 
    1424                         .bind('getData.' + name, function(event, key) { 
    1425                                 if (event.target == element) { 
    1426                                         return self._getData(key); 
    1427                                 } 
    1428                         }) 
    1429                         .bind('remove', function() { 
    1430                                 return self.destroy(); 
    1431                         }); 
    1432         }; 
    1433  
    1434         // add widget prototype 
    1435         $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype); 
    1436  
    1437         // TODO: merge getter and getterSetter properties from widget prototype 
    1438         // and plugin prototype 
    1439         $[namespace][name].getterSetter = 'option'; 
    1440 }; 
    1441  
    1442 $.widget.prototype = { 
    1443         _init: function() {}, 
    1444         destroy: function() { 
    1445                 this.element.removeData(this.widgetName) 
    1446                         .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled') 
    1447                         .removeAttr('aria-disabled'); 
    1448         }, 
    1449  
    1450         option: function(key, value) { 
    1451                 var options = key, 
    1452                         self = this; 
    1453  
    1454                 if (typeof key == "string") { 
    1455                         if (value === undefined) { 
    1456                                 return this._getData(key); 
    1457                         } 
    1458                         options = {}; 
    1459                         options[key] = value; 
    1460                 } 
    1461  
    1462                 $.each(options, function(key, value) { 
    1463                         self._setData(key, value); 
    1464                 }); 
    1465         }, 
    1466         _getData: function(key) { 
    1467                 return this.options[key]; 
    1468         }, 
    1469         _setData: function(key, value) { 
    1470                 this.options[key] = value; 
    1471  
    1472                 if (key == 'disabled') { 
    1473                         this.element 
    1474                                 [value ? 'addClass' : 'removeClass']( 
    1475                                         this.widgetBaseClass + '-disabled' + ' ' + 
    1476                                         this.namespace + '-state-disabled') 
    1477                                 .attr("aria-disabled", value); 
    1478                 } 
    1479         }, 
    1480  
    1481         enable: function() { 
    1482                 this._setData('disabled', false); 
    1483         }, 
    1484         disable: function() { 
    1485                 this._setData('disabled', true); 
    1486         }, 
    1487  
    1488         _trigger: function(type, event, data) { 
    1489                 var callback = this.options[type], 
    1490                         eventName = (type == this.widgetEventPrefix 
    1491                                 ? type : this.widgetEventPrefix + type); 
    1492  
    1493                 event = $.Event(event); 
    1494                 event.type = eventName; 
    1495  
    1496                 // copy original event properties over to the new event 
    1497                 // this would happen if we could call $.event.fix instead of $.Event 
    1498                 // but we don't have a way to force an event to be fixed multiple times 
    1499                 if (event.originalEvent) { 
    1500                         for (var i = $.event.props.length, prop; i;) { 
    1501                                 prop = $.event.props[--i]; 
    1502                                 event[prop] = event.originalEvent[prop]; 
    1503                         } 
    1504                 } 
    1505  
    1506                 this.element.trigger(event, data); 
    1507  
    1508                 return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false 
    1509                         || event.isDefaultPrevented()); 
    1510         } 
    1511 }; 
    1512  
    1513 $.widget.defaults = { 
    1514         disabled: false 
    1515 }; 
    1516  
    1517  
    1518 /** Mouse Interaction Plugin **/ 
    1519  
    1520 $.ui.mouse = { 
    1521         _mouseInit: function() { 
    1522                 var self = this; 
    1523  
    1524                 this.element 
    1525                         .bind('mousedown.'+this.widgetName, function(event) { 
    1526                                 return self._mouseDown(event); 
    1527                         }) 
    1528                         .bind('click.'+this.widgetName, function(event) { 
    1529                                 if(self._preventClickEvent) { 
    1530                                         self._preventClickEvent = false; 
    1531                                         return false; 
    1532                                 } 
    1533                         }); 
    1534  
    1535                 // Prevent text selection in IE 
    1536                 if ($.browser.msie) { 
    1537                         this._mouseUnselectable = this.element.attr('unselectable'); 
    1538                         this.element.attr('unselectable', 'on'); 
    1539                 } 
    1540  
    1541                 this.started = false; 
    1542         }, 
    1543  
    1544         // TODO: make sure destroying one instance of mouse doesn't mess with 
    1545         // other instances of mouse 
    1546         _mouseDestroy: function() { 
    1547                 this.element.unbind('.'+this.widgetName); 
    1548  
    1549                 // Restore text selection in IE 
    1550                 ($.browser.msie 
    1551                         && this.element.attr('unselectable', this._mouseUnselectable)); 
    1552         }, 
    1553  
    1554         _mouseDown: function(event) { 
    1555                 // don't let more than one widget handle mouseStart 
    1556                 if (event.originalEvent.mouseHandled) { return; } 
    1557  
    1558                 // we may have missed mouseup (out of window) 
    1559                 (this._mouseStarted && this._mouseUp(event)); 
    1560  
    1561                 this._mouseDownEvent = event; 
    1562  
    1563                 var self = this, 
    1564                         btnIsLeft = (event.which == 1), 
    1565                         elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false); 
    1566                 if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { 
    1567                         return true; 
    1568                 } 
    1569  
    1570                 this.mouseDelayMet = !this.options.delay; 
    1571                 if (!this.mouseDelayMet) { 
    1572                         this._mouseDelayTimer = setTimeout(function() { 
    1573                                 self.mouseDelayMet = true; 
    1574                         }, this.options.delay); 
    1575                 } 
    1576  
    1577                 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { 
    1578                         this._mouseStarted = (this._mouseStart(event) !== false); 
    1579                         if (!this._mouseStarted) { 
    1580                                 event.preventDefault(); 
    1581                                 return true; 
    1582                         } 
    1583                 } 
    1584  
    1585                 // these delegates are required to keep context 
    1586                 this._mouseMoveDelegate = function(event) { 
    1587                         return self._mouseMove(event); 
    1588                 }; 
    1589                 this._mouseUpDelegate = function(event) { 
    1590                         return self._mouseUp(event); 
    1591                 }; 
    1592                 $(document) 
    1593                         .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) 
    1594                         .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); 
    1595  
    1596                 // preventDefault() is used to prevent the selection of text here - 
    1597                 // however, in Safari, this causes select boxes not to be selectable 
    1598                 // anymore, so this fix is needed 
    1599                 ($.browser.safari || event.preventDefault()); 
    1600  
    1601                 event.originalEvent.mouseHandled = true; 
    1602                 return true; 
    1603         }, 
    1604  
    1605         _mouseMove: function(event) { 
    1606                 // IE mouseup check - mouseup happened when mouse was out of window 
    1607                 if ($.browser.msie && !event.button) { 
    1608                         return this._mouseUp(event); 
    1609                 } 
    1610  
    1611                 if (this._mouseStarted) { 
    1612                         this._mouseDrag(event); 
    1613                         return event.preventDefault(); 
    1614                 } 
    1615  
    1616                 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { 
    1617                         this._mouseStarted = 
    1618                                 (this._mouseStart(this._mouseDownEvent, event) !== false); 
    1619                         (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); 
    1620                 } 
    1621  
    1622                 return !this._mouseStarted; 
    1623         }, 
    1624  
    1625         _mouseUp: function(event) { 
    1626                 $(document) 
    1627                         .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) 
    1628                         .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); 
    1629  
    1630                 if (this._mouseStarted) { 
    1631                         this._mouseStarted = false; 
    1632                         this._preventClickEvent = true; 
    1633                         this._mouseStop(event); 
    1634                 } 
    1635  
    1636                 return false; 
    1637         }, 
    1638  
    1639         _mouseDistanceMet: function(event) { 
    1640                 return (Math.max( 
    1641                                 Math.abs(this._mouseDownEvent.pageX - event.pageX), 
    1642                                 Math.abs(this._mouseDownEvent.pageY - event.pageY) 
    1643                         ) >= this.options.distance 
    1644                 ); 
    1645         }, 
    1646  
    1647         _mouseDelayMet: function(event) { 
    1648                 return this.mouseDelayMet; 
    1649         }, 
    1650  
    1651         // These are placeholder methods, to be overriden by extending plugin 
    1652         _mouseStart: function(event) {}, 
    1653         _mouseDrag: function(event) {}, 
    1654         _mouseStop: function(event) {}, 
    1655         _mouseCapture: function(event) { return true; } 
    1656 }; 
    1657  
    1658 $.ui.mouse.defaults = { 
    1659         cancel: null, 
    1660         distance: 1, 
    1661         delay: 0 
    1662 }; 
    1663  
    1664 })(jQuery); 
    1665 ]]></data></item> 
    1666 <item key="id"><![CDATA[ui.core.js]]></item> 
    1667 <item key="mandatory" type="int">0</item> 
    1668 <item key="multilang" type="int">0</item> 
    1669 <item key="name"><![CDATA[ui.core.js]]></item> 
    1670 <item key="repetitive" type="int">0</item> 
    1671 <item key="type"><![CDATA[resource]]></item> 
    1672 </dictionary> 
    1673 </item> 
    1674 <item type="dictionary"><dictionary> 
    1675 <item key="custom"> 
    1676 <data content_type="text/x-c" filename="ui.dialog.js" type="file"><![CDATA[/* 
    1677  * jQuery UI Dialog 1.6rc6 
    1678  * 
    1679  * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about) 
    1680  * Dual licensed under the MIT (MIT-LICENSE.txt) 
    1681  * and GPL (GPL-LICENSE.txt) licenses. 
    1682  * 
    1683  * http://docs.jquery.com/UI/Dialog 
    1684  * 
    1685  * Depends: 
    1686  *      ui.core.js 
    1687  *      ui.draggable.js 
    1688  *      ui.resizable.js 
    1689  */ 
    1690 (function($) { 
    1691  
    1692 var setDataSwitch = { 
    1693         dragStart: "start.draggable", 
    1694         drag: "drag.draggable", 
    1695         dragStop: "stop.draggable", 
    1696         maxHeight: "maxHeight.resizable", 
    1697         minHeight: "minHeight.resizable", 
    1698         maxWidth: "maxWidth.resizable", 
    1699         minWidth: "minWidth.resizable", 
    1700         resizeStart: "start.resizable", 
    1701         resize: "drag.resizable", 
    1702         resizeStop: "stop.resizable" 
    1703 }; 
    1704  
    1705 $.widget("ui.dialog", { 
    1706  
    1707         _init: function() { 
    1708                 this.originalTitle = this.element.attr('title'); 
    1709  
    1710                 var self = this, 
    1711                         options = this.options, 
    1712  
    1713                         title = options.title || this.originalTitle || '&nbsp;', 
    1714                         titleId = $.ui.dialog.getTitleId(this.element), 
    1715  
    1716                         uiDialog = (this.uiDialog = $('<div/>')) 
    1717                                 .appendTo(document.body) 
    1718                                 .hide() 
    1719                                 .addClass( 
    1720                                         'ui-dialog ' + 
    1721                                         'ui-widget ' + 
    1722                                         'ui-widget-content ' + 
    1723                                         'ui-corner-all ' + 
    1724                                         options.dialogClass 
    1725                                 ) 
    1726                                 .css({ 
    1727                                         position: 'absolute', 
    1728                                         overflow: 'hidden', 
    1729                                         zIndex: options.zIndex 
    1730                                 }) 
    1731                                 // setting tabIndex makes the div focusable 
    1732                                 // setting outline to 0 prevents a border on focus in Mozilla 
    1733                                 .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { 
    1734                                         (options.closeOnEscape && event.keyCode 
    1735                                                 && event.keyCode == $.ui.keyCode.ESCAPE && self.close(event)); 
    1736                                 }) 
    1737                                 .attr({ 
    1738                                         role: 'dialog', 
    1739                                         'aria-labelledby': titleId 
    1740                                 }) 
    1741                                 .mousedown(function(event) { 
    1742                                         self.moveToTop(event); 
    1743                                 }), 
    1744  
    1745                         uiDialogContent = this.element 
    1746                                 .show() 
    1747                                 .removeAttr('title') 
    1748                                 .addClass( 
    1749                                         'ui-dialog-content ' + 
    1750                                         'ui-widget-content') 
    1751                                 .appendTo(uiDialog), 
    1752  
    1753                         uiDialogTitlebar = (this.uiDialogTitlebar = $('<div></div>')) 
    1754                                 .addClass( 
    1755                                         'ui-dialog-titlebar ' + 
    1756                                         'ui-widget-header ' + 
    1757                                         'ui-corner-all ' + 
    1758                                         'ui-helper-clearfix' 
    1759                                 ) 
    1760                                 .prependTo(uiDialog), 
    1761  
    1762                         uiDialogTitlebarClose = $('<a href="#"/>') 
    1763                                 .addClass( 
    1764                                         'ui-dialog-titlebar-close ' + 
    1765                                         'ui-corner-all' 
    1766                                 ) 
    1767                                 .attr('role', 'button') 
    1768                                 .hover( 
    1769                                         function() { 
    1770                                                 uiDialogTitlebarClose.addClass('ui-state-hover'); 
    1771                                         }, 
    1772                                         function() { 
    1773                                                 uiDialogTitlebarClose.removeClass('ui-state-hover'); 
    1774                                         } 
    1775                                 ) 
    1776                                 .focus(function() { 
    1777                                         uiDialogTitlebarClose.addClass('ui-state-focus'); 
    1778                                 }) 
    1779                                 .blur(function() { 
    1780                                         uiDialogTitlebarClose.removeClass('ui-state-focus'); 
    1781                                 }) 
    1782                                 .mousedown(function(ev) { 
    1783                                         ev.stopPropagation(); 
    1784                                 }) 
    1785                                 .click(function(event) { 
    1786                                         self.close(event); 
    1787                                         return false; 
    1788                                 }) 
    1789                                 .appendTo(uiDialogTitlebar), 
    1790  
    1791                         uiDialogTitlebarCloseText = (this.uiDialogTitlebarCloseText = $('<span/>')) 
    1792                                 .addClass( 
    1793                                         'ui-icon ' + 
    1794                                         'ui-icon-closethick' 
    1795                                 ) 
    1796                                 .text(options.closeText) 
    1797                                 .appendTo(uiDialogTitlebarClose), 
    1798  
    1799                         uiDialogTitle = $('<span/>') 
    1800                                 .addClass('ui-dialog-title') 
    1801                                 .attr('id', titleId) 
    1802                                 .html(title) 
    1803                                 .prependTo(uiDialogTitlebar); 
    1804  
    1805                 uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); 
    1806  
    1807                 (options.draggable && $.fn.draggable && this._makeDraggable()); 
    1808                 (options.resizable && $.fn.resizable && this._makeResizable()); 
    1809  
    1810                 this._createButtons(options.buttons); 
    1811                 this._isOpen = false; 
    1812  
    1813                 (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe()); 
    1814                 (options.autoOpen && this.open()); 
    1815                  
    1816         }, 
    1817  
    1818         destroy: function() { 
    1819                 (this.overlay && this.overlay.destroy()); 
    1820                 (this.shadow && this._destroyShadow()); 
    1821                 this.uiDialog.hide(); 
    1822                 this.element 
    1823                         .unbind('.dialog') 
    1824                         .removeData('dialog') 
    1825                         .removeClass('ui-dialog-content ui-widget-content') 
    1826                         .hide().appendTo('body'); 
    1827                 this.uiDialog.remove(); 
    1828  
    1829                 (this.originalTitle && this.element.attr('title', this.originalTitle)); 
    1830         }, 
    1831  
    1832         close: function(event) { 
    1833                 if (false === this._trigger('beforeclose', event)) { 
    1834                         return; 
    1835                 } 
    1836  
    1837                 (this.overlay && this.overlay.destroy()); 
    1838                 (this.shadow && this._destroyShadow()); 
    1839                 this.uiDialog 
    1840                         .hide(this.options.hide) 
    1841                         .unbind('keypress.ui-dialog'); 
    1842  
    1843                 this._trigger('close', event); 
    1844                 $.ui.dialog.overlay.resize(); 
    1845  
    1846                 this._isOpen = false; 
    1847         }, 
    1848  
    1849         isOpen: function() { 
    1850                 return this._isOpen; 
    1851         }, 
    1852  
    1853         // the force parameter allows us to move modal dialogs to their correct 
    1854         // position on open 
    1855         moveToTop: function(force, event) { 
    1856  
    1857                 if ((this.options.modal && !force) 
    1858                         || (!this.options.stack && !this.options.modal)) { 
    1859                         return this._trigger('focus', event); 
    1860                 } 
    1861  
    1862                 var maxZ = this.options.zIndex, options = this.options; 
    1863                 $('.ui-dialog:visible').each(function() { 
    1864                         maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10) || options.zIndex); 
    1865                 }); 
    1866                 (this.overlay && this.overlay.$el.css('z-index', ++maxZ)); 
    1867                 (this.shadow && this.shadow.css('z-index', ++maxZ)); 
    1868  
    1869                 //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. 
    1870                 //  http://ui.jquery.com/bugs/ticket/3193 
    1871                 var saveScroll = { scrollTop: this.element.attr('scrollTop'), scrollLeft: this.element.attr('scrollLeft') }; 
    1872                 this.uiDialog.css('z-index', ++maxZ); 
    1873                 this.element.attr(saveScroll); 
    1874                 this._trigger('focus', event); 
    1875         }, 
    1876  
    1877         open: function(event) { 
    1878                 if (this._isOpen) { return; } 
    1879  
    1880                 var options = this.options, 
    1881                         uiDialog = this.uiDialog; 
    1882  
    1883                 this.overlay = options.modal ? new $.ui.dialog.overlay(this) : null; 
    1884                 (uiDialog.next().length && uiDialog.appendTo('body')); 
    1885                 this._size(); 
    1886                 this._position(options.position); 
    1887                 uiDialog.show(options.show); 
    1888                 this.moveToTop(true, event); 
    1889  
    1890                 // prevent tabbing out of modal dialogs 
    1891                 (options.modal && uiDialog.bind('keypress.ui-dialog', function(event) { 
    1892                         if (event.keyCode != $.ui.keyCode.TAB) { 
    1893                                 return; 
    1894                         } 
    1895  
    1896                         var tabbables = $(':tabbable', this), 
    1897                                 first = tabbables.filter(':first')[0], 
    1898                                 last  = tabbables.filter(':last')[0]; 
    1899  
    1900                         if (event.target == last && !event.shiftKey) { 
    1901                                 setTimeout(function() { 
    1902                                         first.focus(); 
    1903                                 }, 1); 
    1904                         } else if (event.target == first && event.shiftKey) { 
    1905                                 setTimeout(function() { 
    1906                                         last.focus(); 
    1907                                 }, 1); 
    1908                         } 
    1909                 })); 
    1910  
    1911                 // set focus to the first tabbable element in: 
    1912                 // - content area 
    1913                 // - button pane 
    1914                 // - title bar 
    1915                 $([]) 
    1916                         .add(uiDialog.find('.ui-dialog-content :tabbable:first')) 
    1917                         .add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first')) 
    1918                         .add(uiDialog.find('.ui-dialog-titlebar :tabbable:first')) 
    1919                         .filter(':first') 
    1920                         .focus(); 
    1921  
    1922                 if(options.shadow) 
    1923                         this._createShadow(); 
    1924  
    1925                 this._trigger('open', event); 
    1926                 this._isOpen = true; 
    1927         }, 
    1928  
    1929         _createButtons: function(buttons) { 
    1930                 var self = this, 
    1931                         hasButtons = false, 
    1932                         uiDialogButtonPane = $('<div></div>') 
    1933                                 .addClass( 
    1934                                         'ui-dialog-buttonpane ' + 
    1935                                         'ui-widget-content ' + 
    1936                                         'ui-helper-clearfix' 
    1937                                 ); 
    1938  
    1939                 // if we already have a button pane, remove it 
    1940                 this.uiDialog.find('.ui-dialog-buttonpane').remove(); 
    1941  
    1942                 (typeof buttons == 'object' && buttons !== null && 
    1943                         $.each(buttons, function() { return !(hasButtons = true); })); 
    1944                 if (hasButtons) { 
    1945                         $.each(buttons, function(name, fn) { 
    1946                                 $('<button type="button"></button>') 
    1947                                         .addClass( 
    1948                                                 'ui-state-default ' + 
    1949                                                 'ui-corner-all' 
    1950                                         ) 
    1951                                         .text(name) 
    1952                                         .click(function() { fn.apply(self.element[0], arguments); }) 
    1953                                         .hover( 
    1954                                                 function() { 
    1955                                                         $(this).addClass('ui-state-hover'); 
    1956                                                 }, 
    1957                                                 function() { 
    1958                                                         $(this).removeClass('ui-state-hover'); 
    1959                                                 } 
    1960                                         ) 
    1961                                         .focus(function() { 
    1962                                                 $(this).addClass('ui-state-focus'); 
    1963                                         }) 
    1964                                         .blur(function() { 
    1965                                                 $(this).removeClass('ui-state-focus'); 
    1966                                         }) 
    1967                                         .appendTo(uiDialogButtonPane); 
    1968                         }); 
    1969                         uiDialogButtonPane.appendTo(this.uiDialog); 
    1970                 } 
    1971         }, 
    1972  
    1973         _makeDraggable: function() { 
    1974                 var self = this, 
    1975                         options = this.options; 
    1976  
    1977                 this.uiDialog.draggable({ 
    1978                         cancel: '.ui-dialog-content', 
    1979                         helper: options.dragHelper, 
    1980                         handle: '.ui-dialog-titlebar', 
    1981                         containment: 'document', 
    1982                         start: function() { 
    1983                                 (options.dragStart && options.dragStart.apply(self.element[0], arguments)); 
    1984                                 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.hide(); 
    1985                         }, 
    1986                         drag: function() { 
    1987                                 (options.drag && options.drag.apply(self.element[0], arguments)); 
    1988                                 self._refreshShadow(1); 
    1989                         }, 
    1990                         stop: function() { 
    1991                                 (options.dragStop && options.dragStop.apply(self.element[0], arguments)); 
    1992                                 $.ui.dialog.overlay.resize(); 
    1993                                 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.show(); 
    1994                                 self._refreshShadow(); 
    1995                         } 
    1996                 }); 
    1997         }, 
    1998  
    1999         _makeResizable: function(handles) { 
    2000                 handles = (handles === undefined ? this.options.resizable : handles); 
    2001                 var self = this, 
    2002                         options = this.options, 
    2003                         resizeHandles = typeof handles == 'string' 
    2004                                 ? handles 
    2005                                 : 'n,e,s,w,se,sw,ne,nw'; 
    2006  
    2007                 this.uiDialog.resizable({ 
    2008                         cancel: '.ui-dialog-content', 
    2009                         alsoResize: this.element, 
    2010                         helper: options.resizeHelper, 
    2011                         maxWidth: options.maxWidth, 
    2012                         maxHeight: options.maxHeight, 
    2013                         minWidth: options.minWidth, 
    2014                         minHeight: options.minHeight, 
    2015                         start: function() { 
    2016                                 (options.resizeStart && options.resizeStart.apply(self.element[0], arguments)); 
    2017                                 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.hide(); 
    2018                         }, 
    2019                         resize: function() { 
    2020                                 (options.resize && options.resize.apply(self.element[0], arguments)); 
    2021                                 self._refreshShadow(1); 
    2022                         }, 
    2023                         handles: resizeHandles, 
    2024                         stop: function() { 
    2025                                 (options.resizeStop && options.resizeStop.apply(self.element[0], arguments)); 
    2026                                 $.ui.dialog.overlay.resize(); 
    2027                                 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.show(); 
    2028                                 self._refreshShadow(); 
    2029                         } 
    2030                 }) 
    2031                 .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); 
    2032         }, 
    2033  
    2034         _position: function(pos) { 
    2035                 var wnd = $(window), doc = $(document), 
    2036                         pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), 
    2037                         minTop = pTop; 
    2038  
    2039                 if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) { 
    2040                         pos = [ 
    2041                                 pos == 'right' || pos == 'left' ? pos : 'center', 
    2042                                 pos == 'top' || pos == 'bottom' ? pos : 'middle' 
    2043                         ]; 
    2044                 } 
    2045                 if (pos.constructor != Array) { 
    2046                         pos = ['center', 'middle']; 
    2047                 } 
    2048                 if (pos[0].constructor == Number) { 
    2049                         pLeft += pos[0]; 
    2050                 } else { 
    2051                         switch (pos[0]) { 
    2052                                 case 'left': 
    2053                                         pLeft += 0; 
    2054                                         break; 
    2055                                 case 'right': 
    2056                                         pLeft += wnd.width() - this.uiDialog.outerWidth(); 
    2057                                         break; 
    2058                                 default: 
    2059                                 case 'center': 
    2060                                         pLeft += (wnd.width() - this.uiDialog.outerWidth()) / 2; 
    2061                         } 
    2062                 } 
    2063                 if (pos[1].constructor == Number) { 
    2064                         pTop += pos[1]; 
    2065                 } else { 
    2066                         switch (pos[1]) { 
    2067                                 case 'top': 
    2068                                         pTop += 0; 
    2069                                         break; 
    2070                                 case 'bottom': 
    2071                                         pTop += wnd.height() - this.uiDialog.outerHeight(); 
    2072                                         break; 
    2073                                 default: 
    2074                                 case 'middle': 
    2075                                         pTop += (wnd.height() - this.uiDialog.outerHeight()) / 2; 
    2076                         } 
    2077                 } 
    2078  
    2079                 // prevent the dialog from being too high (make sure the titlebar 
    2080                 // is accessible) 
    2081                 pTop = Math.max(pTop, minTop); 
    2082                 this.uiDialog.css({top: pTop, left: pLeft}); 
    2083         }, 
    2084  
    2085         _setData: function(key, value){ 
    2086                 (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value)); 
    2087                 switch (key) { 
    2088                         case "buttons": 
    2089                                 this._createButtons(value); 
    2090                                 break; 
    2091                         case "closeText": 
    2092                                 this.uiDialogTitlebarCloseText.text(value); 
    2093                                 break; 
    2094                         case "draggable": 
    2095                                 (value 
    2096                                         ? this._makeDraggable() 
    2097                                         : this.uiDialog.draggable('destroy')); 
    2098                                 break; 
    2099                         case "height": 
    2100                                 this.uiDialog.height(value); 
    2101                                 break; 
    2102                         case "position": 
    2103                                 this._position(value); 
    2104                                 break; 
    2105                         case "resizable": 
    2106                                 var uiDialog = this.uiDialog, 
    2107                                         isResizable = this.uiDialog.is(':data(resizable)'); 
    2108  
    2109                                 // currently resizable, becoming non-resizable 
    2110                                 (isResizable && !value && uiDialog.resizable('destroy')); 
    2111  
    2112                                 // currently resizable, changing handles 
    2113                                 (isResizable && typeof value == 'string' && 
    2114                                         uiDialog.resizable('option', 'handles', value)); 
    2115  
    2116                                 // currently non-resizable, becoming resizable 
    2117                                 (isResizable || this._makeResizable(value)); 
    2118  
    2119                                 break; 
    2120                         case "title": 
    2121                                 $(".ui-dialog-title", this.uiDialogTitlebar).html(value || '&nbsp;'); 
    2122                                 break; 
    2123                         case "width": 
    2124                                 this.uiDialog.width(value); 
    2125                                 break; 
    2126                 } 
    2127  
    2128                 $.widget.prototype._setData.apply(this, arguments); 
    2129         }, 
    2130  
    2131         _size: function() { 
    2132                 /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content 
    2133                  * divs will both have width and height set, so we need to reset them 
    2134                  */ 
    2135                 var options = this.options; 
    2136  
    2137                 // reset content sizing 
    2138                 this.element.css({ 
    2139                         height: 0, 
    2140                         minHeight: 0, 
    2141                         width: 'auto' 
    2142                 }); 
    2143  
    2144                 // reset wrapper sizing 
    2145                 // determine the height of all the non-content elements 
    2146                 var nonContentHeight = this.uiDialog.css({ 
    2147                                 height: 'auto', 
    2148                                 width: options.width 
    2149                         }) 
    2150                         .height(); 
    2151  
    2152                 this.element 
    2153                         .css({ 
    2154                                 minHeight: Math.max(options.minHeight - nonContentHeight, 0), 
    2155                                 height: options.height == 'auto' 
    2156                                         ? 'auto' 
    2157                                         : options.height - nonContentHeight 
    2158                         }); 
    2159         }, 
    2160          
    2161         _createShadow: function() { 
    2162                 this.shadow = $('<div class="ui-widget-shadow"></div>').css('position', 'absolute').appendTo(document.body); 
    2163                 this._refreshShadow(); 
    2164                 return this.shadow; 
    2165         }, 
    2166          
    2167         _refreshShadow: function(dragging) { 
    2168                 // IE6 is simply to slow to handle the reflow in a good way, so 
    2169                 // resizing only happens on stop, and the shadow is hidden during drag/resize 
    2170                 if(dragging && $.browser.msie && $.browser.version < 7) return; 
    2171                  
    2172                 var offset = this.uiDialog.offset(); 
    2173                 this.shadow.css({ 
    2174                         left: offset.left, 
    2175                         top: offset.top, 
    2176                         width: this.uiDialog.outerWidth(), 
    2177                         height: this.uiDialog.outerHeight() 
    2178                 }); 
    2179         }, 
    2180          
    2181         _destroyShadow: function() { 
    2182                 this.shadow.remove(); 
    2183                 this.shadow = null; 
    2184         } 
    2185          
    2186 }); 
    2187  
    2188 $.extend($.ui.dialog, { 
    2189         version: "1.6rc6", 
    2190         defaults: { 
    2191                 autoOpen: true, 
    2192                 bgiframe: false, 
    2193                 buttons: {}, 
    2194                 closeOnEscape: true, 
    2195                 closeText: 'close', 
    2196                 draggable: true, 
    2197                 height: 'auto', 
    2198                 minHeight: 150, 
    2199                 minWidth: 150, 
    2200                 modal: false, 
    2201                 position: 'center', 
    2202                 resizable: true, 
    2203                 shadow: true, 
    2204                 stack: true, 
    2205                 title: '', 
    2206                 width: 300, 
    2207                 zIndex: 1000 
    2208         }, 
    2209  
    2210         getter: 'isOpen', 
    2211  
    2212         uuid: 0, 
    2213  
    2214         getTitleId: function($el) { 
    2215                 return 'ui-dialog-title-' + ($el.attr('id') || ++this.uuid); 
    2216         }, 
    2217  
    2218         overlay: function(dialog) { 
    2219                 this.$el = $.ui.dialog.overlay.create(dialog); 
    2220         } 
    2221 }); 
    2222  
    2223 $.extend($.ui.dialog.overlay, { 
    2224         instances: [], 
    2225         events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), 
    2226                 function(event) { return event + '.dialog-overlay'; }).join(' '), 
    2227         create: function(dialog) { 
    2228                 if (this.instances.length === 0) { 
    2229                         // prevent use of anchors and inputs 
    2230                         // we use a setTimeout in case the overlay is created from an 
    2231                         // event that we're going to be cancelling (see #2804) 
    2232                         setTimeout(function() { 
    2233                                 $('a, :input').bind($.ui.dialog.overlay.events, function() { 
    2234                                         // allow use of the element if inside a dialog and 
    2235                                         // - there are no modal dialogs 
    2236                                         // - there are modal dialogs, but we are in front of the topmost modal 
    2237                                         var allow = false; 
    2238                                         var $dialog = $(this).parents('.ui-dialog'); 
    2239                                         if ($dialog.length) { 
    2240                                                 var $overlays = $('.ui-dialog-overlay'); 
    2241                                                 if ($overlays.length) { 
    2242                                                         var maxZ = parseInt($overlays.css('z-index'), 10); 
    2243                                                         $overlays.each(function() { 
    2244                                                                 maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10)); 
    2245                                                         }); 
    2246                                                         allow = parseInt($dialog.css('z-index'), 10) > maxZ; 
    2247                                                 } else { 
    2248                                                         allow = true; 
    2249                                                 } 
    2250                                         } 
    2251                                         return allow; 
    2252                                 }); 
    2253                         }, 1); 
    2254  
    2255                         // allow closing by pressing the escape key 
    2256                         $(document).bind('keydown.dialog-overlay', function(event) { 
    2257                                 (dialog.options.closeOnEscape && event.keyCode 
    2258                                                 && event.keyCode == $.ui.keyCode.ESCAPE && dialog.close(event)); 
    2259                         }); 
    2260  
    2261                         // handle window resize 
    2262                         $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); 
    2263                 } 
    2264  
    2265                 var $el = $('<div></div>').appendTo(document.body) 
    2266                         .addClass('ui-widget-overlay').css({ 
    2267                                 width: this.width(), 
    2268                                 height: this.height() 
    2269                         }); 
    2270  
    2271                 (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe()); 
    2272  
    2273                 this.instances.push($el); 
    2274                 return $el; 
    2275         }, 
    2276  
    2277         destroy: function($el) { 
    2278                 this.instances.splice($.inArray(this.instances, $el), 1); 
    2279  
    2280                 if (this.instances.length === 0) { 
    2281                         $('a, :input').add([document, window]).unbind('.dialog-overlay'); 
    2282                 } 
    2283  
    2284                 $el.remove(); 
    2285         }, 
    2286  
    2287         height: function() { 
    2288                 // handle IE 6 
    2289                 if ($.browser.msie && $.browser.version < 7) { 
    2290                         var scrollHeight = Math.max( 
    2291                                 document.documentElement.scrollHeight, 
    2292                                 document.body.scrollHeight 
    2293                         ); 
    2294                         var offsetHeight = Math.max( 
    2295                                 document.documentElement.offsetHeight, 
    2296                                 document.body.offsetHeight 
    2297                         ); 
    2298  
    2299                         if (scrollHeight < offsetHeight) { 
    2300                                 return $(window).height() + 'px'; 
    2301                         } else { 
    2302                                 return scrollHeight + 'px'; 
    2303                         } 
    2304                 // handle "good" browsers 
    2305                 } else { 
    2306                         return $(document).height() + 'px'; 
    2307                 } 
    2308         }, 
    2309  
    2310         width: function() { 
    2311                 // handle IE 6 
    2312                 if ($.browser.msie && $.browser.version < 7) { 
    2313                         var scrollWidth = Math.max( 
    2314                                 document.documentElement.scrollWidth, 
    2315                                 document.body.scrollWidth 
    2316                         ); 
    2317                         var offsetWidth = Math.max( 
    2318                                 document.documentElement.offsetWidth, 
    2319                                 document.body.offsetWidth 
    2320                         ); 
    2321  
    2322                         if (scrollWidth < offsetWidth) { 
    2323                                 return $(window).width() + 'px'; 
    2324                         } else { 
    2325                                 return scrollWidth + 'px'; 
    2326                         } 
    2327                 // handle "good" browsers 
    2328                 } else { 
    2329                         return $(document).width() + 'px'; 
    2330                 } 
    2331         }, 
    2332  
    2333         resize: function() { 
    2334                 /* If the dialog is draggable and the user drags it past the 
    2335                  * right edge of the window, the document becomes wider so we 
    2336                  * need to stretch the overlay. If the user then drags the 
    2337                  * dialog back to the left, the document will become narrower, 
    2338                  * so we need to shrink the overlay to the appropriate size. 
    2339                  * This is handled by shrinking the overlay before setting it 
    2340                  * to the full document size. 
    2341                  */ 
    2342                 var $overlays = $([]); 
    2343                 $.each($.ui.dialog.overlay.instances, function() { 
    2344                         $overlays = $overlays.add(this); 
    2345                 }); 
    2346  
    2347                 $overlays.css({ 
    2348                         width: 0, 
    2349                         height: 0 
    2350                 }).css({ 
    2351                         width: $.ui.dialog.overlay.width(), 
    2352                         height: $.ui.dialog.overlay.height() 
    2353                 }); 
    2354         } 
    2355 }); 
    2356  
    2357 $.extend($.ui.dialog.overlay.prototype, { 
    2358         destroy: function() { 
    2359                 $.ui.dialog.overlay.destroy(this.$el); 
    2360         } 
    2361 }); 
    2362  
    2363 })(jQuery); 
    2364 ]]></data></item> 
    2365 <item key="id"><![CDATA[ui.dialog.js]]></item> 
    2366 <item key="mandatory" type="int">0</item> 
    2367 <item key="multilang" type="int">0</item> 
    2368 <item key="name"><![CDATA[ui.dialog.js]]></item> 
    2369 <item key="repetitive" type="int">0</item> 
    2370 <item key="type"><![CDATA[resource]]></item> 
    2371 </dictionary> 
    2372 </item> 
    2373 <item type="dictionary"><dictionary> 
    2374 <item key="custom"> 
    2375 <data content_type="text/x-c" filename="jquery.Jcrop.js" type="file"><![CDATA[/** 
    2376  * jquery.Jcrop.js v0.9.8 
    2377  * jQuery Image Cropping Plugin 
    2378  * @author Kelly Hallman <khallman@gmail.com> 
    2379  * Copyright (c) 2008-2009 Kelly Hallman - released under MIT License {{{ 
    2380  * 
    2381  * Permission is hereby granted, free of charge, to any person 
    2382  * obtaining a copy of this software and associated documentation 
    2383  * files (the "Software"), to deal in the Software without 
    2384  * restriction, including without limitation the rights to use, 
    2385  * copy, modify, merge, publish, distribute, sublicense, and/or sell 
    2386  * copies of the Software, and to permit persons to whom the 
    2387  * Software is furnished to do so, subject to the following 
    2388  * conditions: 
    2389  
    2390  * The above copyright notice and this permission notice shall be 
    2391  * included in all copies or substantial portions of the Software. 
    2392  
    2393  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
    2394  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
    2395  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
    2396  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
    2397  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
    2398  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
    2399  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
    2400  * OTHER DEALINGS IN THE SOFTWARE. 
    2401  
    2402  * }}} 
    2403  */ 
    2404  
    2405 (function($) { 
    2406  
    2407 $.Jcrop = function(obj,opt) 
    2408 { 
    2409         // Initialization {{{ 
    2410  
    2411         // Sanitize some options {{{ 
    2412         var obj = obj, opt = opt; 
    2413  
    2414         if (typeof(obj) !== 'object') obj = $(obj)[0]; 
    2415         if (typeof(opt) !== 'object') opt = { }; 
    2416  
    2417         // Some on-the-fly fixes for MSIE...sigh 
    2418         if (!('trackDocument' in opt)) 
    2419         { 
    2420                 opt.trackDocument = $.browser.msie ? false : true; 
    2421                 if ($.browser.msie && $.browser.version.split('.')[0] == '8') 
    2422                         opt.trackDocument = true; 
    2423         } 
    2424  
    2425         if (!('keySupport' in opt)) 
    2426                         opt.keySupport = $.browser.msie ? false : true; 
    2427                  
    2428         // }}} 
    2429         // Extend the default options {{{ 
    2430         var defaults = { 
    2431  
    2432                 // Basic Settings 
    2433                 trackDocument:          false, 
    2434                 baseClass:                      'jcrop', 
    2435                 addClass:                       null, 
    2436  
    2437                 // Styling Options 
    2438                 bgColor:                        'black', 
    2439                 bgOpacity:                      .6, 
    2440                 borderOpacity:          .4, 
    2441                 handleOpacity:          .5, 
    2442  
    2443                 handlePad:                      5, 
    2444                 handleSize:                     9, 
    2445                 handleOffset:           5, 
    2446                 edgeMargin:                     14, 
    2447  
    2448                 aspectRatio:            0, 
    2449                 keySupport:                     true, 
    2450                 cornerHandles:          true, 
    2451                 sideHandles:            true, 
    2452                 drawBorders:            true, 
    2453                 dragEdges:                      true, 
    2454  
    2455                 boxWidth:                       0, 
    2456                 boxHeight:                      0, 
    2457  
    2458                 boundary:                       8, 
    2459                 animationDelay:         20, 
    2460                 swingSpeed:                     3, 
    2461  
    2462                 allowSelect:            true, 
    2463                 allowMove:                      true, 
    2464                 allowResize:            true, 
    2465  
    2466                 minSelect:                      [ 0, 0 ], 
    2467                 maxSize:                        [ 0, 0 ], 
    2468                 minSize:                        [ 0, 0 ], 
    2469  
    2470                 // Callbacks / Event Handlers 
    2471                 onChange: function() { }, 
    2472                 onSelect: function() { } 
    2473  
    2474         }; 
    2475         var options = defaults; 
    2476         setOptions(opt); 
    2477  
    2478         // }}} 
    2479         // Initialize some jQuery objects {{{ 
    2480  
    2481         var $origimg = $(obj); 
    2482         var $img = $origimg.clone().removeAttr('id').css({ position: 'absolute' }); 
    2483  
    2484         $img.width($origimg.width()); 
    2485         $img.height($origimg.height()); 
    2486         $origimg.after($img).hide(); 
    2487  
    2488         presize($img,options.boxWidth,options.boxHeight); 
    2489  
    2490         var boundx = $img.width(), 
    2491                 boundy = $img.height(), 
    2492  
    2493                 $div = $('<div />') 
    2494                         .width(boundx).height(boundy) 
    2495                         .addClass(cssClass('holder')) 
    2496                         .css({ 
    2497                                 position: 'relative', 
    2498                                 backgroundColor: options.bgColor 
    2499                         }).insertAfter($origimg).append($img); 
    2500         ; 
    2501          
    2502         if (options.addClass) $div.addClass(options.addClass); 
    2503         //$img.wrap($div); 
    2504  
    2505         var $img2 = $('<img />')/*{{{*/ 
    2506                         .attr('src',$img.attr('src')) 
    2507                         .css('position','absolute') 
    2508                         .width(boundx).height(boundy) 
    2509         ;/*}}}*/ 
    2510         var $img_holder = $('<div />')/*{{{*/ 
    2511                 .width(pct(100)).height(pct(100)) 
    2512                 .css({ 
    2513                         zIndex: 310, 
    2514                         position: 'absolute', 
    2515                         overflow: 'hidden' 
    2516                 }) 
    2517                 .append($img2) 
    2518         ;/*}}}*/ 
    2519         var $hdl_holder = $('<div />')/*{{{*/ 
    2520                 .width(pct(100)).height(pct(100)) 
    2521                 .css('zIndex',320); 
    2522         /*}}}*/ 
    2523         var $sel = $('<div />')/*{{{*/ 
    2524                 .css({ 
    2525                         position: 'absolute', 
    2526                         zIndex: 300 
    2527                 }) 
    2528                 .insertBefore($img) 
    2529                 .append($img_holder,$hdl_holder) 
    2530         ;/*}}}*/ 
    2531  
    2532         var bound = options.boundary; 
    2533         var $trk = newTracker().width(boundx+(bound*2)).height(boundy+(bound*2)) 
    2534                 .css({ position: 'absolute', top: px(-bound), left: px(-bound), zIndex: 290 }) 
    2535                 .mousedown(newSelection);        
    2536          
    2537         /* }}} */ 
    2538         // Set more variables {{{ 
    2539  
    2540         var xlimit, ylimit, xmin, ymin; 
    2541         var xscale, yscale, enabled = true; 
    2542         var docOffset = getPos($img), 
    2543                 // Internal states 
    2544                 btndown, lastcurs, dimmed, animating, 
    2545                 shift_down; 
    2546  
    2547         // }}} 
    2548                  
    2549  
    2550                 // }}} 
    2551         // Internal Modules {{{ 
    2552  
    2553         var Coords = function()/*{{{*/ 
    2554         { 
    2555                 var x1 = 0, y1 = 0, x2 = 0, y2 = 0, ox, oy; 
    2556  
    2557                 function setPressed(pos)/*{{{*/ 
    2558                 { 
    2559                         var pos = rebound(pos); 
    2560                         x2 = x1 = pos[0]; 
    2561                         y2 = y1 = pos[1]; 
    2562                 }; 
    2563                 /*}}}*/ 
    2564                 function setCurrent(pos)/*{{{*/ 
    2565                 { 
    2566                         var pos = rebound(pos); 
    2567                         ox = pos[0] - x2; 
    2568                         oy = pos[1] - y2; 
    2569                         x2 = pos[0]; 
    2570                         y2 = pos[1]; 
    2571                 }; 
    2572                 /*}}}*/ 
    2573                 function getOffset()/*{{{*/ 
    2574                 { 
    2575                         return [ ox, oy ]; 
    2576                 }; 
    2577                 /*}}}*/ 
    2578                 function moveOffset(offset)/*{{{*/ 
    2579                 { 
    2580                         var ox = offset[0], oy = offset[1]; 
    2581  
    2582                         if (0 > x1 + ox) ox -= ox + x1; 
    2583                         if (0 > y1 + oy) oy -= oy + y1; 
    2584  
    2585                         if (boundy < y2 + oy) oy += boundy - (y2 + oy); 
    2586                         if (boundx < x2 + ox) ox += boundx - (x2 + ox); 
    2587  
    2588                         x1 += ox; 
    2589                         x2 += ox; 
    2590                         y1 += oy; 
    2591                         y2 += oy; 
    2592                 }; 
    2593                 /*}}}*/ 
    2594                 function getCorner(ord)/*{{{*/ 
    2595                 { 
    2596                         var c = getFixed(); 
    2597                         switch(ord) 
    2598                         { 
    2599                                 case 'ne': return [ c.x2, c.y ]; 
    2600                                 case 'nw': return [ c.x, c.y ]; 
    2601                                 case 'se': return [ c.x2, c.y2 ]; 
    2602                                 case 'sw': return [ c.x, c.y2 ]; 
    2603                         } 
    2604                 }; 
    2605                 /*}}}*/ 
    2606                 function getFixed()/*{{{*/ 
    2607                 { 
    2608                         if (!options.aspectRatio) return getRect(); 
    2609                         // This function could use some optimization I think... 
    2610                         var aspect = options.aspectRatio, 
    2611                                 min_x = options.minSize[0]/xscale,  
    2612                                 min_y = options.minSize[1]/yscale, 
    2613                                 max_x = options.maxSize[0]/xscale,  
    2614                                 max_y = options.maxSize[1]/yscale, 
    2615                                 rw = x2 - x1, 
    2616                                 rh = y2 - y1, 
    2617                                 rwa = Math.abs(rw), 
    2618                                 rha = Math.abs(rh), 
    2619                                 real_ratio = rwa / rha, 
    2620                                 xx, yy 
    2621                         ; 
    2622                         if (max_x == 0) { max_x = boundx * 10 } 
    2623                         if (max_y == 0) { max_y = boundy * 10 } 
    2624                         if (real_ratio < aspect) 
    2625                         { 
    2626                                 yy = y2; 
    2627                                 w = rha * aspect; 
    2628                                 xx = rw < 0 ? x1 - w : w + x1; 
    2629  
    2630                                 if (xx < 0) 
    2631                                 { 
    2632                                         xx = 0; 
    2633                                         h = Math.abs((xx - x1) / aspect); 
    2634                                         yy = rh < 0 ? y1 - h: h + y1; 
    2635                                 } 
    2636                                 else if (xx > boundx) 
    2637                                 { 
    2638                                         xx = boundx; 
    2639                                         h = Math.abs((xx - x1) / aspect); 
    2640                                         yy = rh < 0 ? y1 - h : h + y1; 
    2641                                 } 
    2642                         } 
    2643                         else 
    2644                         { 
    2645                                 xx = x2; 
    2646                                 h = rwa / aspect; 
    2647                                 yy = rh < 0 ? y1 - h : y1 + h; 
    2648                                 if (yy < 0) 
    2649                                 { 
    2650                                         yy = 0; 
    2651                                         w = Math.abs((yy - y1) * aspect); 
    2652                                         xx = rw < 0 ? x1 - w : w + x1; 
    2653                                 } 
    2654                                 else if (yy > boundy) 
    2655                                 { 
    2656                                         yy = boundy; 
    2657                                         w = Math.abs(yy - y1) * aspect; 
    2658                                         xx = rw < 0 ? x1 - w : w + x1; 
    2659                                 } 
    2660                         } 
    2661  
    2662                         // Magic %-) 
    2663                         if(xx > x1) { // right side 
    2664                           if(xx - x1 < min_x) { 
    2665                                 xx = x1 + min_x; 
    2666                           } else if (xx - x1 > max_x) { 
    2667                                 xx = x1 + max_x; 
    2668                           } 
    2669                           if(yy > y1) { 
    2670                                 yy = y1 + (xx - x1)/aspect; 
    2671                           } else { 
    2672                                 yy = y1 - (xx - x1)/aspect; 
    2673                           } 
    2674                         } else if (xx < x1) { // left side 
    2675                           if(x1 - xx < min_x) { 
    2676                                 xx = x1 - min_x 
    2677                           } else if (x1 - xx > max_x) { 
    2678                                 xx = x1 - max_x; 
    2679                           } 
    2680                           if(yy > y1) { 
    2681                                 yy = y1 + (x1 - xx)/aspect; 
    2682                           } else { 
    2683                                 yy = y1 - (x1 - xx)/aspect; 
    2684                           } 
    2685                         } 
    2686  
    2687                         if(xx < 0) { 
    2688                                 x1 -= xx; 
    2689                                 xx = 0; 
    2690                         } else  if (xx > boundx) { 
    2691                                 x1 -= xx - boundx; 
    2692                                 xx = boundx; 
    2693                         } 
    2694  
    2695                         if(yy < 0) { 
    2696                                 y1 -= yy; 
    2697                                 yy = 0; 
    2698                         } else  if (yy > boundy) { 
    2699                                 y1 -= yy - boundy; 
    2700                                 yy = boundy; 
    2701                         } 
    2702  
    2703                         return last = makeObj(flipCoords(x1,y1,xx,yy)); 
    2704                 }; 
    2705                 /*}}}*/ 
    2706                 function rebound(p)/*{{{*/ 
    2707                 { 
    2708                         if (p[0] < 0) p[0] = 0; 
    2709                         if (p[1] < 0) p[1] = 0; 
    2710  
    2711                         if (p[0] > boundx) p[0] = boundx; 
    2712                         if (p[1] > boundy) p[1] = boundy; 
    2713  
    2714                         return [ p[0], p[1] ]; 
    2715                 }; 
    2716                 /*}}}*/ 
    2717                 function flipCoords(x1,y1,x2,y2)/*{{{*/ 
    2718                 { 
    2719                         var xa = x1, xb = x2, ya = y1, yb = y2; 
    2720                         if (x2 < x1) 
    2721                         { 
    2722                                 xa = x2; 
    2723                                 xb = x1; 
    2724                         } 
    2725                         if (y2 < y1) 
    2726                         { 
    2727                                 ya = y2; 
    2728                                 yb = y1; 
    2729                         } 
    2730                         return [ Math.round(xa), Math.round(ya), Math.round(xb), Math.round(yb) ]; 
    2731                 }; 
    2732                 /*}}}*/ 
    2733                 function getRect()/*{{{*/ 
    2734                 { 
    2735                         var xsize = x2 - x1; 
    2736                         var ysize = y2 - y1; 
    2737  
    2738                         if (xlimit && (Math.abs(xsize) > xlimit)) 
    2739                                 x2 = (xsize > 0) ? (x1 + xlimit) : (x1 - xlimit); 
    2740                         if (ylimit && (Math.abs(ysize) > ylimit)) 
    2741                                 y2 = (ysize > 0) ? (y1 + ylimit) : (y1 - ylimit); 
    2742  
    2743                         if (ymin && (Math.abs(ysize) < ymin)) 
    2744                                 y2 = (ysize > 0) ? (y1 + ymin) : (y1 - ymin); 
    2745                         if (xmin && (Math.abs(xsize) < xmin)) 
    2746                                 x2 = (xsize > 0) ? (x1 + xmin) : (x1 - xmin); 
    2747  
    2748                         if (x1 < 0) { x2 -= x1; x1 -= x1; } 
    2749                         if (y1 < 0) { y2 -= y1; y1 -= y1; } 
    2750                         if (x2 < 0) { x1 -= x2; x2 -= x2; } 
    2751                         if (y2 < 0) { y1 -= y2; y2 -= y2; } 
    2752                         if (x2 > boundx) { var delta = x2 - boundx; x1 -= delta; x2 -= delta; } 
    2753                         if (y2 > boundy) { var delta = y2 - boundy; y1 -= delta; y2 -= delta; } 
    2754                         if (x1 > boundx) { var delta = x1 - boundy; y2 -= delta; y1 -= delta; } 
    2755                         if (y1 > boundy) { var delta = y1 - boundy; y2 -= delta; y1 -= delta; } 
    2756  
    2757                         return makeObj(flipCoords(x1,y1,x2,y2)); 
    2758                 }; 
    2759                 /*}}}*/ 
    2760                 function makeObj(a)/*{{{*/ 
    2761                 { 
    2762                         return { x: a[0], y: a[1], x2: a[2], y2: a[3], 
    2763                                 w: a[2] - a[0], h: a[3] - a[1] }; 
    2764                 }; 
    2765                 /*}}}*/ 
    2766  
    2767                 return { 
    2768                         flipCoords: flipCoords, 
    2769                         setPressed: setPressed, 
    2770                         setCurrent: setCurrent, 
    2771                         getOffset: getOffset, 
    2772                         moveOffset: moveOffset, 
    2773                         getCorner: getCorner, 
    2774                         getFixed: getFixed 
    2775                 }; 
    2776         }(); 
    2777  
    2778         /*}}}*/ 
    2779         var Selection = function()/*{{{*/ 
    2780         { 
    2781                 var start, end, dragmode, awake, hdep = 370; 
    2782                 var borders = { }; 
    2783                 var handle = { }; 
    2784                 var seehandles = false; 
    2785                 var hhs = options.handleOffset; 
    2786  
    2787                 /* Insert draggable elements {{{*/ 
    2788  
    2789                 // Insert border divs for outline 
    2790                 if (options.drawBorders) { 
    2791                         borders = { 
    2792                                         top: insertBorder('hline') 
    2793                                                 .css('top',$.browser.msie?px(-1):px(0)), 
    2794                                         bottom: insertBorder('hline'), 
    2795                                         left: insertBorder('vline'), 
    2796                                         right: insertBorder('vline') 
    2797                         }; 
    2798                 } 
    2799  
    2800                 // Insert handles on edges 
    2801                 if (options.dragEdges) { 
    2802                         handle.t = insertDragbar('n'); 
    2803                         handle.b = insertDragbar('s'); 
    2804                         handle.r = insertDragbar('e'); 
    2805                         handle.l = insertDragbar('w'); 
    2806                 } 
    2807  
    2808                 // Insert side handles 
    2809                 options.sideHandles && 
    2810                         createHandles(['n','s','e','w']); 
    2811  
    2812                 // Insert corner handles 
    2813                 options.cornerHandles && 
    2814                         createHandles(['sw','nw','ne','se']); 
    2815  
    2816                 /*}}}*/ 
    2817                 // Private Methods 
    2818                 function insertBorder(type)/*{{{*/ 
    2819                 { 
    2820                         var jq = $('<div />') 
    2821                                 .css({position: 'absolute', opacity: options.borderOpacity }) 
    2822                                 .addClass(cssClass(type)); 
    2823                         $img_holder.append(jq); 
    2824                         return jq; 
    2825                 }; 
    2826                 /*}}}*/ 
    2827                 function dragDiv(ord,zi)/*{{{*/ 
    2828                 { 
    2829                         var jq = $('<div />') 
    2830                                 .mousedown(createDragger(ord)) 
    2831                                 .css({ 
    2832                                         cursor: ord+'-resize', 
    2833                                         position: 'absolute', 
    2834                                         zIndex: zi  
    2835                                 }) 
    2836                         ; 
    2837                         $hdl_holder.append(jq); 
    2838                         return jq; 
    2839                 }; 
    2840                 /*}}}*/ 
    2841                 function insertHandle(ord)/*{{{*/ 
    2842                 { 
    2843                         return dragDiv(ord,hdep++) 
    2844                                 .css({ top: px(-hhs+1), left: px(-hhs+1), opacity: options.handleOpacity }) 
    2845                                 .addClass(cssClass('handle')); 
    2846                 }; 
    2847                 /*}}}*/ 
    2848                 function insertDragbar(ord)/*{{{*/ 
    2849                 { 
    2850                         var s = options.handleSize, 
    2851                                 o = hhs, 
    2852                                 h = s, w = s, 
    2853                                 t = o, l = o; 
    2854  
    2855                         switch(ord) 
    2856                         { 
    2857                                 case 'n': case 's': w = pct(100); break; 
    2858                                 case 'e': case 'w': h = pct(100); break; 
    2859                         } 
    2860  
    2861                         return dragDiv(ord,hdep++).width(w).height(h) 
    2862                                 .css({ top: px(-t+1), left: px(-l+1)}); 
    2863                 }; 
    2864                 /*}}}*/ 
    2865                 function createHandles(li)/*{{{*/ 
    2866                 { 
    2867                         for(i in li) handle[li[i]] = insertHandle(li[i]); 
    2868                 }; 
    2869                 /*}}}*/ 
    2870                 function moveHandles(c)/*{{{*/ 
    2871                 { 
    2872                         var midvert  = Math.round((c.h / 2) - hhs), 
    2873                                 midhoriz = Math.round((c.w / 2) - hhs), 
    2874                                 north = west = -hhs+1, 
    2875                                 east = c.w - hhs, 
    2876                                 south = c.h - hhs, 
    2877                                 x, y; 
    2878  
    2879                         'e' in handle && 
    2880                                 handle.e.css({ top: px(midvert), left: px(east) }) && 
    2881                                 handle.w.css({ top: px(midvert) }) && 
    2882                                 handle.s.css({ top: px(south), left: px(midhoriz) }) && 
    2883                                 handle.n.css({ left: px(midhoriz) }); 
    2884  
    2885                         'ne' in handle && 
    2886                                 handle.ne.css({ left: px(east) }) && 
    2887                                 handle.se.css({ top: px(south), left: px(east) }) && 
    2888                                 handle.sw.css({ top: px(south) }); 
    2889  
    2890                         'b' in handle && 
    2891                                 handle.b.css({ top: px(south) }) && 
    2892                                 handle.r.css({ left: px(east) }); 
    2893                 }; 
    2894                 /*}}}*/ 
    2895                 function moveto(x,y)/*{{{*/ 
    2896                 { 
    2897                         $img2.css({ top: px(-y), left: px(-x) }); 
    2898                         $sel.css({ top: px(y), left: px(x) }); 
    2899                 }; 
    2900                 /*}}}*/ 
    2901                 function resize(w,h)/*{{{*/ 
    2902                 { 
    2903                         $sel.width(w).height(h); 
    2904                 }; 
    2905                 /*}}}*/ 
    2906                 function refresh()/*{{{*/ 
    2907                 { 
    2908                         var c = Coords.getFixed(); 
    2909  
    2910                         Coords.setPressed([c.x,c.y]); 
    2911                         Coords.setCurrent([c.x2,c.y2]); 
    2912  
    2913                         updateVisible(); 
    2914                 }; 
    2915                 /*}}}*/ 
    2916  
    2917                 // Internal Methods 
    2918                 function updateVisible()/*{{{*/ 
    2919                         { if (awake) return update(); }; 
    2920                 /*}}}*/ 
    2921                 function update()/*{{{*/ 
    2922                 { 
    2923                         var c = Coords.getFixed(); 
    2924  
    2925                         resize(c.w,c.h); 
    2926                         moveto(c.x,c.y); 
    2927  
    2928                         options.drawBorders && 
    2929                                 borders['right'].css({ left: px(c.w-1) }) && 
    2930                                         borders['bottom'].css({ top: px(c.h-1) }); 
    2931  
    2932                         seehandles && moveHandles(c); 
    2933                         awake || show(); 
    2934  
    2935                         options.onChange(unscale(c)); 
    2936                 }; 
    2937                 /*}}}*/ 
    2938                 function show()/*{{{*/ 
    2939                 { 
    2940                         $sel.show(); 
    2941                         $img.css('opacity',options.bgOpacity); 
    2942                         awake = true; 
    2943                 }; 
    2944                 /*}}}*/ 
    2945                 function release()/*{{{*/ 
    2946                 { 
    2947                         disableHandles(); 
    2948                         $sel.hide(); 
    2949                         $img.css('opacity',1); 
    2950                         awake = false; 
    2951                 }; 
    2952                 /*}}}*/ 
    2953                 function showHandles()//{{{ 
    2954                 { 
    2955                         if (seehandles) 
    2956                         { 
    2957                                 moveHandles(Coords.getFixed()); 
    2958                                 $hdl_holder.show(); 
    2959                         } 
    2960                 }; 
    2961                 //}}} 
    2962                 function enableHandles()/*{{{*/ 
    2963                 {  
    2964                         seehandles = true; 
    2965                         if (options.allowResize) 
    2966                         { 
    2967                                 moveHandles(Coords.getFixed()); 
    2968                                 $hdl_holder.show(); 
    2969                                 return true; 
    2970                         } 
    2971                 }; 
    2972                 /*}}}*/ 
    2973                 function disableHandles()/*{{{*/ 
    2974                 { 
    2975                         seehandles = false; 
    2976                         $hdl_holder.hide(); 
    2977                 }; 
    2978                 /*}}}*/ 
    2979                 function animMode(v)/*{{{*/ 
    2980                 { 
    2981                         (animating = v) ? disableHandles(): enableHandles(); 
    2982                 }; 
    2983                 /*}}}*/ 
    2984                 function done()/*{{{*/ 
    2985                 { 
    2986                         animMode(false); 
    2987                         refresh(); 
    2988                 }; 
    2989                 /*}}}*/ 
    2990  
    2991                 var $track = newTracker().mousedown(createDragger('move')) 
    2992                                 .css({ cursor: 'move', position: 'absolute', zIndex: 360 }) 
    2993  
    2994                 $img_holder.append($track); 
    2995                 disableHandles(); 
    2996  
    2997                 return { 
    2998                         updateVisible: updateVisible, 
    2999                         update: update, 
    3000                         release: release, 
    3001                         refresh: refresh, 
    3002                         setCursor: function (cursor) { $track.css('cursor',cursor); }, 
    3003                         enableHandles: enableHandles, 
    3004                         enableOnly: function() { seehandles = true; }, 
    3005                         showHandles: showHandles, 
    3006                         disableHandles: disableHandles, 
    3007                         animMode: animMode, 
    3008                         done: done 
    3009                 }; 
    3010         }(); 
    3011         /*}}}*/ 
    3012         var Tracker = function()/*{{{*/ 
    3013         { 
    3014                 var onMove              = function() { }, 
    3015                         onDone          = function() { }, 
    3016                         trackDoc        = options.trackDocument; 
    3017  
    3018                 if (!trackDoc) 
    3019                 { 
    3020                         $trk 
    3021                                 .mousemove(trackMove) 
    3022                                 .mouseup(trackUp) 
    3023                                 .mouseout(trackUp) 
    3024                         ; 
    3025                 } 
    3026  
    3027                 function toFront()/*{{{*/ 
    3028                 { 
    3029                         $trk.css({zIndex:450}); 
    3030                         if (trackDoc) 
    3031                         { 
    3032                                 $(document) 
    3033                                         .mousemove(trackMove) 
    3034                                         .mouseup(trackUp) 
    3035                                 ; 
    3036                         } 
    3037                 } 
    3038                 /*}}}*/ 
    3039                 function toBack()/*{{{*/ 
    3040                 { 
    3041                         $trk.css({zIndex:290}); 
    3042                         if (trackDoc) 
    3043                         { 
    3044                                 $(document) 
    3045                                         .unbind('mousemove',trackMove) 
    3046                                         .unbind('mouseup',trackUp) 
    3047                                 ; 
    3048                         } 
    3049                 } 
    3050                 /*}}}*/ 
    3051                 function trackMove(e)/*{{{*/ 
    3052                 { 
    3053                         onMove(mouseAbs(e)); 
    3054                 }; 
    3055                 /*}}}*/ 
    3056                 function trackUp(e)/*{{{*/ 
    3057                 { 
    3058                         e.preventDefault(); 
    3059                         e.stopPropagation(); 
    3060  
    3061                         if (btndown) 
    3062                         { 
    3063                                 btndown = false; 
    3064  
    3065                                 onDone(mouseAbs(e)); 
    3066                                 options.onSelect(unscale(Coords.getFixed())); 
    3067                                 toBack(); 
    3068                                 onMove = function() { }; 
    3069                                 onDone = function() { }; 
    3070                         } 
    3071  
    3072                         return false; 
    3073                 }; 
    3074                 /*}}}*/ 
    3075  
    3076                 function activateHandlers(move,done)/* {{{ */ 
    3077                 { 
    3078                         btndown = true; 
    3079                         onMove = move; 
    3080                         onDone = done; 
    3081                         toFront(); 
    3082                         return false; 
    3083                 }; 
    3084                 /* }}} */ 
    3085  
    3086                 function setCursor(t) { $trk.css('cursor',t); }; 
    3087  
    3088                 $img.before($trk); 
    3089                 return { 
    3090                         activateHandlers: activateHandlers, 
    3091                         setCursor: setCursor 
    3092                 }; 
    3093         }(); 
    3094         /*}}}*/ 
    3095         var KeyManager = function()/*{{{*/ 
    3096         { 
    3097                 var $keymgr = $('<input type="radio" />') 
    3098                                 .css({ position: 'absolute', left: '-30px' }) 
    3099                                 .keypress(parseKey) 
    3100                                 .blur(onBlur), 
    3101  
    3102                         $keywrap = $('<div />') 
    3103                                 .css({ 
    3104                                         position: 'absolute', 
    3105                                         overflow: 'hidden' 
    3106                                 }) 
    3107                                 .append($keymgr) 
    3108                 ; 
    3109  
    3110                 function watchKeys()/*{{{*/ 
    3111                 { 
    3112                         if (options.keySupport) 
    3113                         { 
    3114                                 $keymgr.show(); 
    3115                                 $keymgr.focus(); 
    3116                         } 
    3117                 }; 
    3118                 /*}}}*/ 
    3119                 function onBlur(e)/*{{{*/ 
    3120                 { 
    3121                         $keymgr.hide(); 
    3122                 }; 
    3123                 /*}}}*/ 
    3124                 function doNudge(e,x,y)/*{{{*/ 
    3125                 { 
    3126                         if (options.allowMove) { 
    3127                                 Coords.moveOffset([x,y]); 
    3128                                 Selection.updateVisible(); 
    3129                         }; 
    3130                         e.preventDefault(); 
    3131                         e.stopPropagation(); 
    3132                 }; 
    3133                 /*}}}*/ 
    3134                 function parseKey(e)/*{{{*/ 
    3135                 { 
    3136                         if (e.ctrlKey) return true; 
    3137                         shift_down = e.shiftKey ? true : false; 
    3138                         var nudge = shift_down ? 10 : 1; 
    3139                         switch(e.keyCode) 
    3140                         { 
    3141                                 case 37: doNudge(e,-nudge,0); break; 
    3142                                 case 39: doNudge(e,nudge,0); break; 
    3143                                 case 38: doNudge(e,0,-nudge); break; 
    3144                                 case 40: doNudge(e,0,nudge); break; 
    3145  
    3146                                 case 27: Selection.release(); break; 
    3147  
    3148                                 case 9: return true; 
    3149                         } 
    3150  
    3151                         return nothing(e); 
    3152                 }; 
    3153                 /*}}}*/ 
    3154                  
    3155                 if (options.keySupport) $keywrap.insertBefore($img); 
    3156                 return { 
    3157                         watchKeys: watchKeys 
    3158                 }; 
    3159         }(); 
    3160         /*}}}*/ 
    3161  
    3162         // }}} 
    3163         // Internal Methods {{{ 
    3164  
    3165         function px(n) { return '' + parseInt(n) + 'px'; }; 
    3166         function pct(n) { return '' + parseInt(n) + '%'; }; 
    3167         function cssClass(cl) { return options.baseClass + '-' + cl; }; 
    3168         function getPos(obj)/*{{{*/ 
    3169         { 
    3170                 // Updated in v0.9.4 to use built-in dimensions plugin 
    3171                 var pos = $(obj).offset(); 
    3172                 return [ pos.left, pos.top ]; 
    3173         }; 
    3174         /*}}}*/ 
    3175         function mouseAbs(e)/*{{{*/ 
    3176         { 
    3177                 return [ (e.pageX - docOffset[0]), (e.pageY - docOffset[1]) ]; 
    3178         }; 
    3179         /*}}}*/ 
    3180         function myCursor(type)/*{{{*/ 
    3181         { 
    3182                 if (type != lastcurs) 
    3183                 { 
    3184                         Tracker.setCursor(type); 
    3185                         //Handles.xsetCursor(type); 
    3186                         lastcurs = type; 
    3187                 } 
    3188         }; 
    3189         /*}}}*/ 
    3190         function startDragMode(mode,pos)/*{{{*/ 
    3191         { 
    3192                 docOffset = getPos($img); 
    3193                 Tracker.setCursor(mode=='move'?mode:mode+'-resize'); 
    3194  
    3195                 if (mode == 'move') 
    3196                         return Tracker.activateHandlers(createMover(pos), doneSelect); 
    3197  
    3198                 var fc = Coords.getFixed(); 
    3199                 var opp = oppLockCorner(mode); 
    3200                 var opc = Coords.getCorner(oppLockCorner(opp)); 
    3201  
    3202                 Coords.setPressed(Coords.getCorner(opp)); 
    3203                 Coords.setCurrent(opc); 
    3204  
    3205                 Tracker.activateHandlers(dragmodeHandler(mode,fc),doneSelect); 
    3206         }; 
    3207         /*}}}*/ 
    3208         function dragmodeHandler(mode,f)/*{{{*/ 
    3209         { 
    3210                 return function(pos) { 
    3211                         if (!options.aspectRatio) switch(mode) 
    3212                         { 
    3213                                 case 'e': pos[1] = f.y2; break; 
    3214                                 case 'w': pos[1] = f.y2; break; 
    3215                                 case 'n': pos[0] = f.x2; break; 
    3216                                 case 's': pos[0] = f.x2; break; 
    3217                         } 
    3218                         else switch(mode) 
    3219                         { 
    3220                                 case 'e': pos[1] = f.y+1; break; 
    3221                                 case 'w': pos[1] = f.y+1; break; 
    3222                                 case 'n': pos[0] = f.x+1; break; 
    3223                                 case 's': pos[0] = f.x+1; break; 
    3224                         } 
    3225                         Coords.setCurrent(pos); 
    3226                         Selection.update(); 
    3227                 }; 
    3228         }; 
    3229         /*}}}*/ 
    3230         function createMover(pos)/*{{{*/ 
    3231         { 
    3232                 var lloc = pos; 
    3233                 KeyManager.watchKeys(); 
    3234  
    3235                 return function(pos) 
    3236                 { 
    3237                         Coords.moveOffset([pos[0] - lloc[0], pos[1] - lloc[1]]); 
    3238                         lloc = pos; 
    3239                          
    3240                         Selection.update(); 
    3241                 }; 
    3242         }; 
    3243         /*}}}*/ 
    3244         function oppLockCorner(ord)/*{{{*/ 
    3245         { 
    3246                 switch(ord) 
    3247                 { 
    3248                         case 'n': return 'sw'; 
    3249                         case 's': return 'nw'; 
    3250                         case 'e': return 'nw'; 
    3251                         case 'w': return 'ne'; 
    3252                         case 'ne': return 'sw'; 
    3253                         case 'nw': return 'se'; 
    3254                         case 'se': return 'nw'; 
    3255                         case 'sw': return 'ne'; 
    3256                 }; 
    3257         }; 
    3258         /*}}}*/ 
    3259         function createDragger(ord)/*{{{*/ 
    3260         { 
    3261                 return function(e) { 
    3262                         if (options.disabled) return false; 
    3263                         if ((ord == 'move') && !options.allowMove) return false; 
    3264                         btndown = true; 
    3265                         startDragMode(ord,mouseAbs(e)); 
    3266                         e.stopPropagation(); 
    3267                         e.preventDefault(); 
    3268                         return false; 
    3269                 }; 
    3270         }; 
    3271         /*}}}*/ 
    3272         function presize($obj,w,h)/*{{{*/ 
    3273         { 
    3274                 var nw = $obj.width(), nh = $obj.height(); 
    3275                 if ((nw > w) && w > 0) 
    3276                 { 
    3277                         nw = w; 
    3278                         nh = (w/$obj.width()) * $obj.height(); 
    3279                 } 
    3280                 if ((nh > h) && h > 0) 
    3281                 { 
    3282                         nh = h; 
    3283                         nw = (h/$obj.height()) * $obj.width(); 
    3284                 } 
    3285                 xscale = $obj.width() / nw; 
    3286                 yscale = $obj.height() / nh; 
    3287                 $obj.width(nw).height(nh); 
    3288         }; 
    3289         /*}}}*/ 
    3290         function unscale(c)/*{{{*/ 
    3291         { 
    3292                 return { 
    3293                         x: parseInt(c.x * xscale), y: parseInt(c.y * yscale),  
    3294                         x2: parseInt(c.x2 * xscale), y2: parseInt(c.y2 * yscale),  
    3295                         w: parseInt(c.w * xscale), h: parseInt(c.h * yscale) 
    3296                 }; 
    3297         }; 
    3298         /*}}}*/ 
    3299         function doneSelect(pos)/*{{{*/ 
    3300         { 
    3301                 var c = Coords.getFixed(); 
    3302                 if (c.w > options.minSelect[0] && c.h > options.minSelect[1]) 
    3303                 { 
    3304                         Selection.enableHandles(); 
    3305                         Selection.done(); 
    3306                 } 
    3307                 else 
    3308                 { 
    3309                         Selection.release(); 
    3310                 } 
    3311                 Tracker.setCursor( options.allowSelect?'crosshair':'default' ); 
    3312         }; 
    3313         /*}}}*/ 
    3314         function newSelection(e)/*{{{*/ 
    3315         { 
    3316                 if (options.disabled) return false; 
    3317                 if (!options.allowSelect) return false; 
    3318                 btndown = true; 
    3319                 docOffset = getPos($img); 
    3320                 Selection.disableHandles(); 
    3321                 myCursor('crosshair'); 
    3322                 var pos = mouseAbs(e); 
    3323                 Coords.setPressed(pos); 
    3324                 Tracker.activateHandlers(selectDrag,doneSelect); 
    3325                 KeyManager.watchKeys(); 
    3326                 Selection.update(); 
    3327  
    3328                 e.stopPropagation(); 
    3329                 e.preventDefault(); 
    3330                 return false; 
    3331         }; 
    3332         /*}}}*/ 
    3333         function selectDrag(pos)/*{{{*/ 
    3334         { 
    3335                 Coords.setCurrent(pos); 
    3336                 Selection.update(); 
    3337         }; 
    3338         /*}}}*/ 
    3339         function newTracker() 
    3340         { 
    3341                 var trk = $('<div></div>').addClass(cssClass('tracker')); 
    3342                 $.browser.msie && trk.css({ opacity: 0, backgroundColor: 'white' }); 
    3343                 return trk; 
    3344         }; 
    3345  
    3346         // }}} 
    3347         // API methods {{{ 
    3348                  
    3349         function animateTo(a)/*{{{*/ 
    3350         { 
    3351                 var x1 = a[0] / xscale, 
    3352                         y1 = a[1] / yscale, 
    3353                         x2 = a[2] / xscale, 
    3354                         y2 = a[3] / yscale; 
    3355  
    3356                 if (animating) return; 
    3357  
    3358                 var animto = Coords.flipCoords(x1,y1,x2,y2); 
    3359                 var c = Coords.getFixed(); 
    3360                 var animat = initcr = [ c.x, c.y, c.x2, c.y2 ]; 
    3361                 var interv = options.animationDelay; 
    3362  
    3363                 var x = animat[0]; 
    3364                 var y = animat[1]; 
    3365                 var x2 = animat[2]; 
    3366                 var y2 = animat[3]; 
    3367                 var ix1 = animto[0] - initcr[0]; 
    3368                 var iy1 = animto[1] - initcr[1]; 
    3369                 var ix2 = animto[2] - initcr[2]; 
    3370                 var iy2 = animto[3] - initcr[3]; 
    3371                 var pcent = 0; 
    3372                 var velocity = options.swingSpeed; 
    3373  
    3374                 Selection.animMode(true); 
    3375  
    3376                 var animator = function() 
    3377                 { 
    3378                         return function() 
    3379                         { 
    3380                                 pcent += (100 - pcent) / velocity; 
    3381  
    3382                                 animat[0] = x + ((pcent / 100) * ix1); 
    3383                                 animat[1] = y + ((pcent / 100) * iy1); 
    3384                                 animat[2] = x2 + ((pcent / 100) * ix2); 
    3385                                 animat[3] = y2 + ((pcent / 100) * iy2); 
    3386  
    3387                                 if (pcent < 100) animateStart(); 
    3388                                         else Selection.done(); 
    3389  
    3390                                 if (pcent >= 99.8) pcent = 100; 
    3391  
    3392                                 setSelectRaw(animat); 
    3393                         }; 
    3394                 }(); 
    3395  
    3396                 function animateStart() 
    3397                         { window.setTimeout(animator,interv); }; 
    3398  
    3399                 animateStart(); 
    3400         }; 
    3401         /*}}}*/ 
    3402         function setSelect(rect)//{{{ 
    3403         { 
    3404                 setSelectRaw([rect[0]/xscale,rect[1]/yscale,rect[2]/xscale,rect[3]/yscale]); 
    3405         }; 
    3406         //}}} 
    3407         function setSelectRaw(l) /*{{{*/ 
    3408         { 
    3409                 Coords.setPressed([l[0],l[1]]); 
    3410                 Coords.setCurrent([l[2],l[3]]); 
    3411                 Selection.update(); 
    3412         }; 
    3413         /*}}}*/ 
    3414         function setOptions(opt)/*{{{*/ 
    3415         { 
    3416                 if (typeof(opt) != 'object') opt = { }; 
    3417                 options = $.extend(options,opt); 
    3418  
    3419                 if (typeof(options.onChange)!=='function') 
    3420                         options.onChange = function() { }; 
    3421  
    3422                 if (typeof(options.onSelect)!=='function') 
    3423                         options.onSelect = function() { }; 
    3424  
    3425         }; 
    3426         /*}}}*/ 
    3427         function tellSelect()/*{{{*/ 
    3428         { 
    3429                 return unscale(Coords.getFixed()); 
    3430         }; 
    3431         /*}}}*/ 
    3432         function tellScaled()/*{{{*/ 
    3433         { 
    3434                 return Coords.getFixed(); 
    3435         }; 
    3436         /*}}}*/ 
    3437         function setOptionsNew(opt)/*{{{*/ 
    3438         { 
    3439                 setOptions(opt); 
    3440                 interfaceUpdate(); 
    3441         }; 
    3442         /*}}}*/ 
    3443         function disableCrop()//{{{ 
    3444         { 
    3445                 options.disabled = true; 
    3446                 Selection.disableHandles(); 
    3447                 Selection.setCursor('default'); 
    3448                 Tracker.setCursor('default'); 
    3449         }; 
    3450         //}}} 
    3451         function enableCrop()//{{{ 
    3452         { 
    3453                 options.disabled = false; 
    3454                 interfaceUpdate(); 
    3455         }; 
    3456         //}}} 
    3457         function cancelCrop()//{{{ 
    3458         { 
    3459                 Selection.done(); 
    3460                 Tracker.activateHandlers(null,null); 
    3461         }; 
    3462         //}}} 
    3463         function destroy()//{{{ 
    3464         { 
    3465                 $div.remove(); 
    3466                 $origimg.show(); 
    3467         }; 
    3468         //}}} 
    3469  
    3470         function interfaceUpdate(alt)//{{{ 
    3471         // This method tweaks the interface based on options object. 
    3472         // Called when options are changed and at end of initialization. 
    3473         { 
    3474                 options.allowResize ? 
    3475                         alt?Selection.enableOnly():Selection.enableHandles(): 
    3476                         Selection.disableHandles(); 
    3477  
    3478                 Tracker.setCursor( options.allowSelect? 'crosshair': 'default' ); 
    3479                 Selection.setCursor( options.allowMove? 'move': 'default' ); 
    3480  
    3481                 $div.css('backgroundColor',options.bgColor); 
    3482  
    3483                 if ('setSelect' in options) { 
    3484                         setSelect(opt.setSelect); 
    3485                         Selection.done(); 
    3486                         delete(options.setSelect); 
    3487                 } 
    3488  
    3489                 if ('trueSize' in options) { 
    3490                         xscale = options.trueSize[0] / boundx; 
    3491                         yscale = options.trueSize[1] / boundy; 
    3492                 } 
    3493  
    3494                 xlimit = options.maxSize[0] || 0; 
    3495                 ylimit = options.maxSize[1] || 0; 
    3496                 xmin = options.minSize[0] || 0; 
    3497                 ymin = options.minSize[1] || 0; 
    3498  
    3499                 if ('outerImage' in options) 
    3500                 { 
    3501                         $img.attr('src',options.outerImage); 
    3502                         delete(options.outerImage); 
    3503                 } 
    3504  
    3505                 Selection.refresh(); 
    3506         }; 
    3507         //}}} 
    3508  
    3509         // }}} 
    3510  
    3511         $hdl_holder.hide(); 
    3512         interfaceUpdate(true); 
    3513          
    3514         var api = { 
    3515                 animateTo: animateTo, 
    3516                 setSelect: setSelect, 
    3517                 setOptions: setOptionsNew, 
    3518                 tellSelect: tellSelect, 
    3519                 tellScaled: tellScaled, 
    3520  
    3521                 disable: disableCrop, 
    3522                 enable: enableCrop, 
    3523                 cancel: cancelCrop, 
    3524  
    3525                 focus: KeyManager.watchKeys, 
    3526  
    3527                 getBounds: function() { return [ boundx * xscale, boundy * yscale ]; }, 
    3528                 getWidgetSize: function() { return [ boundx, boundy ]; }, 
    3529  
    3530                 release: Selection.release, 
    3531                 destroy: destroy 
    3532  
    3533         }; 
    3534  
    3535         $origimg.data('Jcrop',api); 
    3536         return api; 
    3537 }; 
    3538  
    3539 $.fn.Jcrop = function(options)/*{{{*/ 
    3540 { 
    3541         function attachWhenDone(from)/*{{{*/ 
    3542         { 
    3543                 var loadsrc = options.useImg || from.src; 
    3544                 var img = new Image(); 
    3545                 img.onload = function() { $.Jcrop(from,options); }; 
    3546                 img.src = loadsrc; 
    3547         }; 
    3548         /*}}}*/ 
    3549         if (typeof(options) !== 'object') options = { }; 
    3550  
    3551         // Iterate over each object, attach Jcrop 
    3552         this.each(function() 
    3553         { 
    3554                 // If we've already attached to this object 
    3555                 if ($(this).data('Jcrop')) 
    3556                 { 
    3557                         // The API can be requested this way (undocumented) 
    3558                         if (options == 'api') return $(this).data('Jcrop'); 
    3559                         // Otherwise, we just reset the options... 
    3560                         else $(this).data('Jcrop').setOptions(options); 
    3561                 } 
    3562                 // If we haven't been attached, preload and attach 
    3563                 else attachWhenDone(this); 
    3564         }); 
    3565  
    3566         // Return "this" so we're chainable a la jQuery plugin-style! 
    3567         return this; 
    3568 }; 
    3569 /*}}}*/ 
    3570  
    3571 })(jQuery); 
    3572 ]]></data></item> 
    3573 <item key="id"><![CDATA[jcrop.js]]></item> 
    3574 <item key="mandatory" type="int">0</item> 
    3575 <item key="multilang" type="int">0</item> 
    3576 <item key="name"><![CDATA[jcrop.js]]></item> 
    3577 <item key="repetitive" type="int">0</item> 
    3578 <item key="type"><![CDATA[resource]]></item> 
    3579 </dictionary> 
    3580 </item> 
    3581 <item type="dictionary"><dictionary> 
    3582 <item key="custom"> 
    3583 <data content_type="application/x-javascript" filename="handleImageImport.js" type="file">7661722074656d705f63726f705f617069090909093d206e756c6c3b0d0a7661722074656d705f63726f705f6974656d730909093d206e756c6c3b0d0a7661722074656d705f6974656d5f6d61785f636f756e74093d20303b0d0a7661722074656d705f6974656d735f68616e646c6564093d2066616c73653b0d0a7661722074656d705f726573697a655f6974656d7320093d206e756c6c3b0d0a0d0a766172202474656d705f63726f7009093d206e756c6c3b0d0a766172202474656d705f6469616c6f67093d206e756c6c3b0d0a766172202474656d705f666f726d09093d206e756c6c3b0d0a766172202474656d705f7461626c6509093d206e756c6c3b0d0a0d0a66756e6374696f6e206368616e676544696d656e73696f6e53657474696e67732869676e6f72655f73657474696e6773290d0a7b0d0a097661722074656d705f69636f6e0909093d206e756c6c3b0d0a097661722074656d705f696e666f5f6f626a093d206e756c6c3b0d0a097661722074656d705f696e666f0909093d206e756c6c3b0d0a097661722074656d705f746578740909093d2027273b0d0a097661722074656d705f7464730909093d206e756c6c3b0d0a097661722074656d705f7472730909093d206765745461626c65526f77732866616c7365293b0d0a09766172202474656d705f696e666f09093d206e756c6c3b0909090d0a09766172202474656d705f74640909093d206e756c6c3b0d0a090d0a09666f7220287661722069203d20303b2069203c2074656d705f7472732e6c656e6774683b20692b2b290d0a097b0d0a090974656d705f696e666f5f6f626a203d20637265617465496e666f4f626a28293b0d0a09090d0a090974656d705f746473203d20242874656d705f7472735b695d292e6368696c6472656e282774643a67742830293a6c7428332927293b0d0a09090d0a0909666f722028766172206a203d20303b206a203c2074656d705f7464732e6c656e6774683b206a2b2b290d0a09097b0d0a0909092474656d705f7464203d20242874656d705f7464735b6a5d293b0d0a0909090d0a09090967657443656c6c496e666f282474656d705f74642c2074656d705f696e666f5f6f626a2c2069676e6f72655f73657474696e6773293b0d0a0909090d0a090909696620282474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f6e65656466756c225d27292e76616c2829203d3d20273127290d0a0909097b0d0a090909096966202869676e6f72655f73657474696e6773290d0a09090909092474656d705f74642e6368696c6472656e2827656d27292e7265706c6163655769746828273c7370616e3e27202b202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d226f7269675f64696d225d27292e76616c28292e73706c697428272c27292e6a6f696e28272078202729202b20273c2f7370616e3e27293b0d0a09090909656c73650d0a09090909092474656d705f74642e6368696c6472656e28277370616e27292e7265706c6163655769746828273c656d3e27202b202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f64696d225d27292e76616c28292e73706c697428272c27292e6a6f696e28272078202729202b20273c2f656d3e27293b0d0a0909097d0d0a09097d0d0a09090d0a0909696620282874656d705f696e666f5f6f626a5b2766696c656e616d655f6c61726765275d203d3d206e756c6c29202626202874656d705f696e666f5f6f626a5b2766696c656e616d655f6d656469756d275d203d3d206e756c6c29290d0a09097b0d0a09090974656d705f696e666f203d20746578745f696e73756666696369656e743b0d0a09090974656d705f69636f6e093d2066696c656e616d655f69636f6e5f63726f73733b0d0a09097d0d0a0909656c7365206966202874656d705f696e666f5f6f626a5b27696e666f73275d2e6c656e677468203e2030290d0a09097b0d0a09090974656d705f696e666f203d2074656d705f696e666f5f6f626a5b27696e666f73275d2e6a6f696e28273b2027293b0d0a09090974656d705f69636f6e203d2066696c656e616d655f69636f6e5f696e666f3b0d0a09097d0d0a0909656c73650d0a09097b0d0a09090974656d705f696e666f203d206e756c6c3b0d0a09090974656d705f69636f6e203d2066696c656e616d655f69636f6e5f7469636b3b0d0a09097d0d0a09090d0a09092474656d705f696e666f203d20242874656d705f7472735b695d292e6368696c6472656e282774643a6c61737427292e65712830292e6368696c6472656e2827696d6727292e65712830293b0d0a09092474656d705f696e666f2e617474722827737263272c2069636f6e5f62617365202b2074656d705f69636f6e293b0d0a09096966202874656d705f696e666f203d3d206e756c6c290d0a0909092474656d705f696e666f2e72656d6f76654174747228277469746c6527293b0d0a0909656c73650d0a0909092474656d705f696e666f2e6174747228277469746c65272c2074656d705f696e666f293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e20637265617465496e666f4f626a28290d0a7b0d0a097661722074656d705f726573756c74203d206e6577204f626a65637428293b0d0a090d0a0974656d705f726573756c745b2766696c656e616d655f6c61726765275d09093d206e756c6c3b0d0a0974656d705f726573756c745b2766696c656e616d655f6d656469756d275d093d206e756c6c3b0d0a0974656d705f726573756c745b2766696c656e616d655f736d616c6c275d09093d206e756c6c3b0d0a0974656d705f726573756c745b27696e666f73275d0909090909093d206e657720417272617928293b0d0a090d0a0972657475726e2074656d705f726573756c743b0d0a7d0d0a0d0a66756e6374696f6e2063726f70496d6167657328290d0a7b0d0a097661722074656d705f64696d090909090909093d206e756c6c3b0d0a097661722074656d705f66696c656e616d6509090909093d206e756c6c3b0d0a097661722074656d705f69676e6f72655f73657474696e6773093d202428272367616c6c6572795f69676e6f72655f64696d27292e617474722827636865636b656427290d0a097661722074656d705f6c656e6774680909090909093d206e756c6c3b0d0a097661722074656d705f747273090909090909093d206765745461626c65526f77732874727565293b0d0a097661722074656d705f746473090909090909093d206e756c6c3b0d0a09766172202474656d705f7464090909090909093d206e756c6c3b0d0a090d0a09666f7220287661722069203d20303b2069203c2074656d705f7472732e6c656e6774683b20692b2b290d0a097b0d0a09092474656d705f7464203d20242874656d705f7472735b695d292e6368696c6472656e282774643a677428302927292e65712830293b0d0a09090d0a0909696620282474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2263726f705f6e65656466756c225d27292e76616c2829203d3d20273127290d0a09097b0d0a0909096966202874656d705f63726f705f6974656d73203d3d206e756c6c290d0a0909090974656d705f63726f705f6974656d73203d206e657720417272617928293b0d0a0909090d0a09090974656d705f7372635f66696c656e616d65093d202474656d705f74642e6e6578742827746427292e65712830292e6368696c6472656e2827696e7075745b6e616d653d2266696c656e616d65225d27292e76616c28293b0d0a090909696620282874656d705f69676e6f72655f73657474696e677329207c7c20282474656d705f74642e6e6578742827746427292e65712830292e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f6e65656466756c225d27292e76616c2829203d3d202730272929200d0a0909090974656d705f64696d203d202474656d705f74642e6e6578742827746427292e65712830292e6368696c6472656e2827696e7075745b6e616d653d226f7269675f64696d225d27292e76616c28292e73706c697428272c27293b0d0a090909656c73650d0a0909090974656d705f64696d203d202474656d705f74642e6e6578742827746427292e65712830292e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f64696d225d27292e76616c28292e73706c697428272c27293b0d0a0909090d0a09090974656d705f63726f705f6974656d732e70757368286e6577204f626a6563742829293b0d0a09090974656d705f6c656e677468203d2074656d705f63726f705f6974656d732e6c656e677468202d20313b0d0a0909090d0a09090974656d705f63726f705f6974656d735b74656d705f6c656e6774685d5b277372635f66696c656e616d65275d093d2074656d705f7372635f66696c656e616d653b0d0a09090974656d705f63726f705f6974656d735b74656d705f6c656e6774685d5b277372635f7769647468275d0909093d2074656d705f64696d5b305d3b0d0a09090974656d705f63726f705f6974656d735b74656d705f6c656e6774685d5b277372635f686569676874275d09093d2074656d705f64696d5b315d3b0d0a09090974656d705f63726f705f6974656d735b74656d705f6c656e6774685d5b277372635f6974656d275d0909093d202474656d705f74643b0d0a09097d0d0a097d0d0a090d0a0974656d705f6974656d5f6d61785f636f756e74203d2074656d705f63726f705f6974656d732e6c656e6774683b0d0a096966202874656d705f6974656d5f6d61785f636f756e74203e2030290d0a090968616e646c6543726f704974656d7328293b0d0a7d0d0a0d0a66756e6374696f6e2067657443656c6c496e666f28247461626c655f63656c6c2c20696e666f5f6f626a2c2069676e6f72655f73657474696e6773290d0a7b0d0a096966202828247461626c655f63656c6c20213d206e756c6c292026262028696e666f5f6f626a20213d206e756c6c29290d0a097b0d0a09097661722074656d705f74797065093d20247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d2274797065225d27292e65712830292e76616c28293b0d0a09090d0a0909696e666f5f6f626a5b2766696c656e616d655f27202b2074656d705f747970655d203d20247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d2266696c656e616d65225d27292e65712830292e76616c28293b0d0a09090d0a090969662028247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d226175746f5f63726561746564225d27292e65712830292e76616c2829203d3d2031290d0a090909696e666f5f6f626a5b27696e666f73275d2e707573682874656d705f74797065202b20746578745f6175746f5f63726561746564293b0d0a090969662028247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d226175746f5f726573697a6564225d27292e65712830292e76616c2829203d3d2031290d0a090909696e666f5f6f626a5b27696e666f73275d2e707573682874656d705f74797065202b20746578745f6175746f5f726573697a6564293b0d0a090969662028247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d2263726f705f6e65656466756c225d27292e65712830292e76616c2829203d3d2031290d0a090909696e666f5f6f626a5b27696e666f73275d2e707573682874656d705f74797065202b20746578745f63726f705f6e65656466756c293b0d0a09090d0a0909696620282169676e6f72655f73657474696e6773290d0a09097b0d0a09090969662028247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f6e65656466756c225d27292e65712830292e76616c2829203d3d2031290d0a09090909696e666f5f6f626a5b27696e666f73275d2e707573682874656d705f74797065202b20746578745f726573697a655f6e65656466756c293b0d0a09097d0d0a097d0d0a7d0d0a0d0a66756e6374696f6e206765745461626c65526f77732864726f705f696e73756666696369656e74290d0a7b0d0a097661722074656d705f747273203d202474656d705f7461626c652e66696e64282774723a677428302927293b0d0a090d0a096966202864726f705f696e73756666696369656e74290d0a090974656d705f747273203d206a51756572792e677265702874656d705f7472732c2066756e6374696f6e286974656d2c20696e646578290d0a0909090909097b0d0a090909090909096966202824286974656d292e66696e642827696e7075745b6e616d653d22696e73756666696369656e74225d27292e76616c2829203d3d20273027290d0a090909090909090972657475726e20747275653b0d0a09090909090909656c73650d0a090909090909090972657475726e2066616c73653b0d0a0909090909097d293b0d0a090d0a0972657475726e2074656d705f7472730d0a7d0d0a0d0a66756e6374696f6e2068616e646c6543726f704974656d7328290d0a7b0d0a096966202874656d705f63726f705f6974656d732e6c656e677468203e2030290d0a097b0d0a09096966202874656d705f63726f705f61706920213d206e756c6c290d0a09090974656d705f63726f705f6170692e64657374726f7928293b0d0a0d0a09092474656d705f63726f702e617474722827737263272c20696d6167655f726f6f745f75726c202b20272f27202b2074656d705f63726f705f6974656d735b305d5b277372635f66696c656e616d65275d293b0d0a09092474656d705f63726f702e6174747228277769647468272c2074656d705f63726f705f6974656d735b305d5b277372635f7769647468275d293b0d0a09092474656d705f63726f702e617474722827686569676874272c2074656d705f63726f705f6974656d735b305d5b277372635f686569676874275d293b0d0a09090d0a09092474656d705f6469616c6f672e66696e642827746827292e74657874282763726f70207468756d622027202b202874656d705f6974656d5f6d61785f636f756e74202d2074656d705f63726f705f6974656d732e6c656e677468202b20312920202b2027206f662027202b2074656d705f6974656d5f6d61785f636f756e74202b2027202827202b2074656d705f63726f705f6974656d735b305d5b277372635f66696c656e616d65275d202b20272927293b0d0a09090d0a09092474656d705f6469616c6f672e6469616c6f6728276f70656e27293b0d0a09090d0a090974656d705f63726f705f617069203d20242e4a63726f7028272367616c6c6572795f63726f70272c200d0a0909097b200d0a090909092f2f616c6c6f77526573697a65093a20747275652c0d0a09090909616c6c6f7753656c656374093a2066616c73652c0d0a09090909617370656374526174696f093a207468756d625f6d61785f77696474682f7468756d625f6d61785f6865696768742c0d0a090909096d696e53697a650909093a205b7468756d625f6d61785f77696474682c207468756d625f6d61785f6865696768745d2c0d0a090909092f2f6d617853697a650909093a205b7468756d625f6d61785f77696474682c207468756d625f6d61785f6865696768745d2c0d0a0909090968616e646c65730909093a20747275650d0a0909097d293b0d0a090974656d705f63726f705f6170692e73657453656c656374285b302c20302c207468756d625f6d61785f77696474682c207468756d625f6d61785f6865696768745d293b0d0a090974656d705f63726f705f6170692e7365744f7074696f6e73287b20616c6c6f77526573697a653a2074727565207d293b0d0a090974656d705f63726f705f6170692e666f63757328293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e2068616e646c65526573697a654974656d7328290d0a7b0d0a096966202874656d705f726573697a655f6974656d732e6c656e677468203e2030290d0a09096a51756572792e706f737428726573697a655f75726c202b20272f5a4d5347616c6c6572795f72657175657374526573697a65272c2074656d705f726573697a655f6974656d735b305d5b276a736f6e275d2c2072656365697665526573697a65446174612c20226a736f6e22293b0d0a7d0d0a0d0a66756e6374696f6e2072656365697665526573697a654461746128646174612c20746578745f737461747573290d0a7b0d0a096966202828746578745f737461747573203d3d20277375636365737327292026262028646174615b2766696c656e616d65275d20213d206e756c6c29290d0a0909666f7220287661722069203d20303b2069203c2074656d705f726573697a655f6974656d732e6c656e6774683b20692b2b290d0a0909096966202874656d705f726573697a655f6974656d735b695d5b2766696c656e616d65275d203d3d20646174615b2766696c656e616d65275d290d0a0909097b0d0a0909090974656d705f726573697a655f6974656d732e73706c69636528692c2031293b0d0a090909090d0a09090909627265616b3b0d0a0909097d0d0a090d0a096966202874656d705f726573697a655f6974656d732e6c656e677468203e2030290d0a090968616e646c65526573697a654974656d7328293b0d0a09656c73650d0a090963726f70496d6167657328293b0d0a7d0d0a0d0a66756e6374696f6e20726573697a65496d6167657328290d0a7b0d0a097661722074656d705f64696d090909090909093d206e756c6c3b0d0a097661722074656d705f66696c656e616d6509090909093d206e756c6c3b0d0a097661722074656d705f69676e6f72655f73657474696e6773093d202428272367616c6c6572795f69676e6f72655f64696d27292e617474722827636865636b656427290d0a097661722074656d705f747273090909090909093d206765745461626c65526f77732874727565293b0d0a097661722074656d705f746473090909090909093d206e756c6c3b0d0a09766172202474656d705f7464090909090909093d206e756c6c3b0d0a090d0a096966202874656d705f69676e6f72655f73657474696e6773290d0a097b0d0a090963726f70496d6167657328293b0d0a097d0d0a09656c73650d0a097b0d0a0909666f7220287661722069203d20303b2069203c2074656d705f7472732e6c656e6774683b20692b2b290d0a09097b0d0a09090974656d705f746473203d20242874656d705f7472735b695d292e6368696c6472656e282774643a67742830293a6c7428332927293b0d0a0909090d0a090909666f722028766172206a203d20303b206a203c2074656d705f7464732e6c656e6774683b206a2b2b290d0a0909097b0d0a090909092474656d705f7464203d20242874656d705f7464735b6a5d293b0d0a090909090d0a09090909696620282474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f6e65656466756c225d27292e76616c2829203d3d20273127290d0a090909097b0d0a09090909096966202874656d705f726573697a655f6974656d73203d3d206e756c6c290d0a09090909090974656d705f726573697a655f6974656d73203d206e657720417272617928293b0d0a09090909090d0a090909090974656d705f64696d0909093d202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f64696d225d27292e76616c28292e73706c697428272c27293b0d0a090909090974656d705f66696c656e616d65093d202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2266696c656e616d65225d27292e76616c28293b0d0a09090909090d0a090909090974656d705f726573697a655f6974656d732e70757368286e6577204f626a6563742829293b0d0a090909090974656d705f726573697a655f6974656d735b74656d705f726573697a655f6974656d732e6c656e677468202d20315d5b2766696c656e616d65275d203d2074656d705f66696c656e616d653b0d0a090909090974656d705f726573697a655f6974656d735b74656d705f726573697a655f6974656d732e6c656e677468202d20315d5b276a736f6e275d0909093d200d0a090909090909097b7372635f66696c656e616d65203a2074656d705f66696c656e616d652c20646573745f7769647468203a2074656d705f64696d5b305d2c20646573745f686569676874203a2074656d705f64696d5b315d7d3b0d0a090909097d0d0a0909097d0d0a09097d0d0a09090d0a09096966202874656d705f726573697a655f6974656d732e6c656e677468203e2030290d0a09090968616e646c65526573697a654974656d7328293b0d0a0909656c73650d0a09090963726f70496d6167657328293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e207375626d6974466f726d286576656e74290d0a7b0d0a097661722074656d705f616374696f6e203d2024286576656e742e746172676574292e76616c28293b0d0a090d0a09696620282874656d705f616374696f6e203d3d2027696d706f7274272920262620282174656d705f6974656d735f68616e646c656429290d0a0909726573697a65496d616765732866616c7365293b0d0a09656c73650d0a097b0d0a09092474656d705f666f726d2e66696e642827696e7075745b6e616d653d22696d706f72745f616374696f6e225d27292e76616c2874656d705f616374696f6e293b0d0a09090d0a09092474656d705f666f726d2e7375626d697428293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e2077726974655375626d69744461746128290d0a7b0d0a09766172202474656d705f7464093d206e756c6c3b0d0a090d0a097661722074656d705f64617461093d206e756c6c3b0d0a097661722074656d705f746473093d206e756c6c3b0d0a097661722074656d705f747273093d206765745461626c65526f77732874727565293b0d0a097661722074656d705f786d6c093d2027273b0d0a090d0a0974656d705f786d6c202b3d20273c6c6973743e5c6e273b0d0a090d0a092f2f20636f6e76657274206974656d7320696e746f20786d6c0d0a09666f7220287661722069203d20303b2069203c2074656d705f7472732e6c656e6774683b20692b2b290d0a097b0d0a090974656d705f786d6c202b3d20223c6974656d20747970653d5c2264696374696f6e6172795c223e3c64696374696f6e6172793e5c6e223b0d0a09090d0a090974656d705f746473203d20242874656d705f7472735b695d292e6368696c6472656e282774643a67742830293a6c7428332927293b0d0a0909090d0a0909666f722028766172206a203d20303b206a203c2074656d705f7464732e6c656e6774683b206a2b2b290d0a09097b0d0a0909092474656d705f7464203d20242874656d705f7464735b6a5d293b0d0a09090d0a09090974656d705f786d6c202b3d20273c6974656d206b65793d2227202b202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2274797065225d27292e65712830292e76616c2829202b20272220747970653d5c2264696374696f6e6172795c223e5c6e270d0a09090974656d705f786d6c202b3d20223c64696374696f6e6172793e5c6e223b0d0a0909090d0a0909092f2f206164642066696c656e616d650d0a09090974656d705f64617461203d202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2266696c656e616d65225d27292e65712830292e76616c28293b0d0a090909696620282874656d705f6461746120213d20276e756c6c2729202626202874656d705f6461746120213d20756e646566696e656429290d0a0909097b0d0a0909090974656d705f786d6c202b3d20273c6974656d206b65793d2266696c656e616d65223e5c6e270d0a0909090974656d705f786d6c202b3d20273c215b434441544127202b20275b27202b2074656d705f64617461202b20275d27202b20275d3e273b0d0a0909090974656d705f786d6c202b3d20273c2f6974656d3e5c6e273b0d0a0909097d0d0a0909092f2f206164642063726f702d646174610d0a09090974656d705f64617461203d202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2263726f70225d27292e65712830292e76616c28293b0d0a090909696620282874656d705f6461746120213d20276e756c6c2729202626202874656d705f6461746120213d20756e646566696e656429290d0a0909097b0d0a0909090974656d705f786d6c202b3d20273c6974656d206b65793d2263726f70223e270d0a0909090974656d705f786d6c202b3d20273c215b434441544127202b20275b27202b2074656d705f64617461202b20275d27202b20275d3e273b0d0a0909090974656d705f786d6c202b3d20273c2f6974656d3e5c6e273b0d0a0909097d0d0a0909090d0a09090974656d705f786d6c202b3d20273c2f64696374696f6e6172793e5c6e273b0d0a09090974656d705f786d6c202b3d20273c2f6974656d3e5c6e273b0d0a09097d0d0a09090d0a090974656d705f786d6c202b3d20273c2f64696374696f6e6172793e3c2f6974656d3e5c6e273b0d0a097d0d0a090d0a0974656d705f786d6c202b3d20273c2f6c6973743e5c6e273b0d0a090d0a092474656d705f666f726d2e6368696c6472656e2827696e7075745b6e616d653d22696d706f72745f66696c65735f786d6c225d27292e65712830292e76616c2874656d705f786d6c293b0d0a7d0d0a0d0a242827646f63756d656e7427292e72656164792866756e6374696f6e28290d0a7b0d0a092474656d705f63726f702009093d202428272367616c6c6572795f63726f7027293b0d0a092474656d705f6469616c6f67093d202428272367616c6c6572795f6469616c6f6727293b0d0a092474656d705f666f726d09093d202428272367616c6c6572795f696d706f72745f666f726d27293b0d0a092474656d705f7461626c6509093d202428272367616c6c6572795f696d706f72745f7461626c6527293b0d0a090d0a092428272367616c6c6572795f69676e6f72655f64696d27292e6368616e67652866756e6374696f6e28290d0a097b0d0a09096368616e676544696d656e73696f6e53657474696e677328746869732e636865636b6564293b0d0a097d293b0d0a092428272367616c6c6572795f627574746f6e5f63726f7027292e636c69636b2866756e6374696f6e28290d0a097b0d0a09097661722074656d705f636f6f726473203d2074656d705f63726f705f6170692e74656c6c53656c65637428293b0d0a09090d0a090974656d705f63726f705f6974656d735b305d5b277372635f6974656d275d2e617070656e6428273c696e70757420747970653d2268696464656e22206e616d653d2263726f70222076616c75653d2227202b200d0a0909090974656d705f636f6f7264732e78202b20272c27202b2074656d705f636f6f7264732e79202b20272c27202b2074656d705f636f6f7264732e7832202b20272c27202b2074656d705f636f6f7264732e7932202b202722202f3e27293b0d0a0909090d0a090974656d705f63726f705f6974656d732e736869667428293b0d0a09090d0a09096966202874656d705f63726f705f6974656d732e6c656e677468203e2030290d0a09090968616e646c6543726f704974656d7328293b0d0a0909656c73650d0a09097b0d0a09090977726974655375626d69744461746128293b0d0a09090974656d705f6974656d735f68616e646c6564203d20747275653b0d0a0909090d0a090909696620282474656d705f6469616c6f672e6469616c6f67282769734f70656e2729290d0a090909092474656d705f6469616c6f672e6469616c6f672827636c6f736527293b0d0a0909090d0a0909092428272367616c6c6572795f696d706f72745f666f726d203e20696e7075745b76616c75653d22696d706f7274225d27292e636c69636b28293b0d0a09097d0d0a097d293b0d0a090d0a092474656d705f6469616c6f672e6469616c6f67280d0a097b0d0a09096175746f4f70656e3a2066616c73652c0d0a0909686569676874093a203435302c0d0a09096d6f64616c09093a20747275652c0d0a09097469746c6509093a202743726f70205468756d62272c0d0a0909776964746809093a203435300d0a097d293b0d0a090d0a092474656d705f666f726d2e6368696c6472656e2827696e7075743a627574746f6e27292e636c69636b287375626d6974466f726d293b0d0a7d293b</data></item> 
    3584 <item key="id"><![CDATA[handleImageImport.js]]></item> 
    3585 <item key="mandatory" type="int">0</item> 
    3586 <item key="multilang" type="int">0</item> 
    3587 <item key="name"><![CDATA[handleImageImport.js]]></item> 
    3588 <item key="repetitive" type="int">0</item> 
    3589 <item key="type"><![CDATA[resource]]></item> 
    3590 </dictionary> 
    3591 </item> 
    3592 <item type="dictionary"><dictionary> 
    35931130<item key="custom"><![CDATA[<dtml-comment>--// BO Galleriffic CSS //--</dtml-comment> 
    35941131 
     
    37671304<item key="multilang" type="int">0</item> 
    37681305<item key="name"><![CDATA[Galleriffic JS]]></item> 
    3769 <item key="repetitive" type="int">0</item> 
    3770 <item key="type"><![CDATA[method]]></item> 
    3771 </dictionary> 
    3772 </item> 
    3773 <item type="dictionary"><dictionary> 
    3774 <item key="custom"><![CDATA[<dtml-comment>--// BO onChangeObjEvt //--</dtml-comment> 
    3775  
    3776 <dtml-comment> 
    3777  
    3778 <dtml-if "getObjProperty('galleryUpload',REQUEST)"> 
    3779         <dtml-try> 
    3780                 <dtml-call "REQUEST.set('target',absolute_url()+'/manage_main')"> 
    3781                 <dtml-call "REQUEST.set('message','')"> 
    3782                 <dtml-call "REQUEST.set('imgUpload',getZipArchive(getObjProperty('galleryUpload',REQUEST)))"> 
    3783                 <dtml-call "REQUEST.set('imgImg',{})"> 
    3784                 <dtml-call "REQUEST.set('imgHires',{})"> 
    3785                 <dtml-call "REQUEST.set('imgSuperres',{})"> 
    3786                 <dtml-call "REQUEST.set('imgFilenames',[])"> 
    3787                 <dtml-in imgUpload mapping> 
    3788                         <dtml-let ob=sequence-item> 
    3789                                 <dtml-if "content_type.find('image')>=0"> 
    3790                                         <dtml-if "filename.find('_large.') > 0"> 
    3791                                                 <dtml-call "REQUEST.set('imgSuperres['+filename[:-10]+']',ob)"> 
    3792                                                 <dtml-if "filename[:-10] not in imgFilenames"> 
    3793                                                         <dtml-call "imgFilenames.append(filename[:-10])"> 
    3794                                                 </dtml-if> 
    3795                                         <dtml-elif "filename.find('_medium.') > 0"> 
    3796                                                 <dtml-call "REQUEST.set('imgHires['+filename[:-11]+']',ob)"> 
    3797                                                 <dtml-if "filename[:-11] not in imgFilenames"> 
    3798                                                         <dtml-call "imgFilenames.append(filename[:-11])"> 
    3799                                                 </dtml-if> 
    3800                                         <dtml-elif "filename.find('_small.') > 0"> 
    3801                                                 <dtml-call "REQUEST.set('imgImg['+filename[:-10]+']',ob)"> 
    3802                                                 <dtml-if "filename[:-10] not in imgFilenames"> 
    3803                                                         <dtml-call "imgFilenames.append(filename[:-10])"> 
    3804                                                 </dtml-if>                               
    3805                                         <dtml-else> 
    3806                                                 <dtml-call "REQUEST.set('imgHires['+filename+']',ob)"> 
    3807                                                 <dtml-if "filename not in imgFilenames"> 
    3808                                                         <dtml-call "imgFilenames.append(filename)"> 
    3809                                                 </dtml-if>                       
    3810                                         </dtml-if> 
    3811                                 </dtml-if> 
    3812                         </dtml-let> 
    3813                 </dtml-in> 
    3814                 <dtml-in imgFilenames> 
    3815                 <dtml-comment> 
    3816                         <dtml-call "REQUEST.set('img',manage_addZMSGraphic( 
    3817                                 {'id_prefix':'galleryImages' 
    3818                                 ,'active':1 
    3819                                 ,'img':REQUEST.get('imgImg['+_['sequence-item']+']',None) 
    3820                                 ,'imghires':REQUEST.get('imgHires['+_['sequence-item']+']',None) 
    3821                                 ,'imgsuperres':REQUEST.get('imgSuperres['+_['sequence-item']+']',None) 
    3822                                 ,'align':'LEFT' 
    3823                                 },REQUEST))"> 
    3824                 </dtml-comment> 
    3825                 </dtml-in> 
    3826         <dtml-except> 
    3827                 <dtml-comment> 
    3828                 <!-- redirect on error with msg => does not work out of onChangeObjEvt --> 
    3829                 <dtml-call "REQUEST.set('message','ERROR')"> 
    3830                 <dtml-call "REQUEST.set('target',url_append_params( target, { 'lang': lang, 'manage_tabs_error_message': message}))"> 
    3831                 <dtml-call "RESPONSE.redirect(target)"> 
    3832                 </dtml-comment> 
    3833         </dtml-try> 
    3834          
    3835         <!-- Delete Upload-File --> 
    3836         <dtml-call "setObjProperty('galleryUpload',_.None,lang)"> 
    3837 </dtml-if> 
    3838  
    3839 </dtml-comment> 
    3840  
    3841 <dtml-comment>--// EO onChangeObjEvt //--</dtml-comment>]]></item> 
    3842 <item key="id"><![CDATA[onChangeObjEvt]]></item> 
    3843 <item key="mandatory" type="int">0</item> 
    3844 <item key="multilang" type="int">0</item> 
    3845 <item key="name"><![CDATA[onChangeObjEvt]]></item> 
    38461306<item key="repetitive" type="int">0</item> 
    38471307<item key="type"><![CDATA[method]]></item> 
     
    38681328                <dtml-let 
    38691329                        showDownload="getObjProperty('galleryDownload',REQUEST)" 
    3870                         galleryImages="getObjChildren('galleryImages',REQUEST)" 
    3871                         exampleImages=" 
    3872                         ['http://farm4.static.flickr.com/3261/2538183196_8baf9a8015', 
    3873                         'http://farm3.static.flickr.com/2404/2538171134_2f77bc00d9', 
    3874                         'http://farm3.static.flickr.com/2093/2538168854_f75e408156', 
    3875                         'http://farm4.static.flickr.com/3153/2538167690_c812461b7b', 
    3876                         'http://farm4.static.flickr.com/3150/2538167224_0a6075dd18', 
    3877                         'http://farm4.static.flickr.com/3204/2537348699_bfd38bd9fd', 
    3878                         'http://farm4.static.flickr.com/3124/2538164582_b9d18f9d1b', 
    3879                         'http://farm4.static.flickr.com/3205/2538164270_4369bbdd23', 
    3880                         'http://farm4.static.flickr.com/3211/2538163540_c2026243d2', 
    3881                         'http://farm3.static.flickr.com/2315/2537343449_f933be8036', 
    3882                         'http://farm3.static.flickr.com/2167/2082738157_436d1eb280', 
    3883                         'http://farm3.static.flickr.com/2342/2083508720_fa906f685e', 
    3884                         'http://farm3.static.flickr.com/2132/2082721339_4b06f6abba', 
    3885                         'http://farm3.static.flickr.com/2139/2083503622_5b17f16a60', 
    3886                         'http://farm3.static.flickr.com/2041/2083498578_114e117aab', 
    3887                         'http://farm3.static.flickr.com/2149/2082705341_afcdda0663', 
    3888                         'http://farm3.static.flickr.com/2014/2083478274_26775114dc', 
    3889                         'http://farm3.static.flickr.com/2194/2083464534_122e849241', 
    3890                         'http://farm4.static.flickr.com/3127/2538173236_b704e7622e', 
    3891                         'http://farm3.static.flickr.com/2375/2538172432_3343a47341', 
    3892                         'http://farm3.static.flickr.com/2353/2083476642_d00372b96f', 
    3893                         'http://farm3.static.flickr.com/2201/1502907190_7b4a2a0e34', 
    3894                         'http://farm2.static.flickr.com/1116/1380178473_fc640e097a', 
    3895                         'http://farm2.static.flickr.com/1260/930424599_e75865c0d6']"> 
    3896                 <dtml-comment> 
    3897                 <dtml-in exampleImages> 
    3898                 <li> 
    3899                         <a class="thumb" href="<dtml-var sequence-item>.jpg" title="Title #<dtml-var sequence-number>"> 
    3900                                 <img src="<dtml-var sequence-item>_s.jpg" alt="Title #<dtml-var sequence-number>" /> 
    3901                         </a> 
    3902                         <div class="caption"> 
    3903                                 <div class="download"> 
    3904                                         <a href="<dtml-var sequence-item>_b.jpg">Download Original</a> 
    3905                                 </div> 
    3906                                 <div class="image-title">Title #<dtml-var sequence-number></div> 
    3907                                 <div class="image-desc">Description</div> 
    3908                         </div> 
    3909                 </li> 
    3910                 </dtml-in> 
    3911                 </dtml-comment>          
     1330                        galleryImages="getObjChildren('galleryImages',REQUEST)"> 
    39121331                <dtml-in galleryImages> 
    39131332                <li> 
     
    40271446<item type="dictionary"><dictionary> 
    40281447<item key="custom"><![CDATA[<dtml-var manage_page_header> 
    4029         <script type="text/javascript" src="metaobj_manager/ZMSGallery.ui.core.js"></script> 
    4030         <script type="text/javascript" src="metaobj_manager/ZMSGallery.ui.draggable.js"></script> 
    4031         <script type="text/javascript" src="metaobj_manager/ZMSGallery.ui.droppable.js"></script> 
    4032         <script type="text/javascript" src="metaobj_manager/ZMSGallery.ui.dialog.js"></script> 
    4033         <script type="text/javascript" src="metaobj_manager/ZMSGallery.jcrop.js"></script> 
     1448        <script type="text/javascript" src="metaobj_manager/ZMSMediaPlayerLib.ui.core.js"></script> 
     1449        <script type="text/javascript" src="metaobj_manager/ZMSMediaPlayerLib.ui.dialog.js"></script> 
     1450        <script type="text/javascript" src="metaobj_manager/ZMSMediaPlayerLib.jcrop.js"></script> 
    40341451         
    4035         <script type="text/javascript" src="metaobj_manager/ZMSGallery.handleImageImport.js"></script> 
    4036          
    4037         <link type="text/css" href="<dtml-var "ZMS_COMMON">/css/jquery/cupertino/ui.all.css" rel="stylesheet" /> 
    4038         <link type="text/css" href="<dtml-var "ZMS_COMMON">/css/jcrop/jcrop.css" rel="stylesheet" /> 
    4039         <link type="text/css" href="metaobj_manager/ZMSGallery.import.css" rel="stylesheet" /> 
     1452        <script type="text/javascript" src="metaobj_manager/ZMSMediaPlayerLib.handleImageImport.js"></script> 
     1453 
     1454        <link type="text/css" href="metaobj_manager/ZMSMediaPlayerLib.ui.css" rel="stylesheet" /> 
     1455        <link type="text/css" href="metaobj_manager/ZMSMediaPlayerLib.jcrop.css" rel="stylesheet" /> 
    40401456</head> 
    40411457<dtml-var "manage_tabs(_,_,my_manage_options=[{'label':'Import Image-Files...','action':''}])"> 
     
    41141530                         
    41151531                        if (auto_resize): 
    4116                                 temp_info = context.ZMSMediaPlayerLib_resize(dest_folder, one_item['medium']['filename'], temp_max_width, replace_source = True) 
     1532                                temp_info = context.ZMSGallery_resize(dest_folder, one_item['medium']['filename'], temp_max_width, replace_source = True) 
    41171533                                one_item['medium']['width']                                     = temp_info[1] 
    41181534                                one_item['medium']['height']                            = temp_info[2] 
     
    41281544                 
    41291545        return file_dict 
     1546 
     1547def clearGarbage(): 
     1548        temp_folder = getTempFolder(False) 
     1549         
     1550        if ((temp_folder is not None) and (temp_folder.getId() in context.temp_folder.objectIds())): 
     1551                context.temp_folder.manage_delObjects(temp_folder.getId()) 
     1552         
     1553        context.setObjProperty('galleryUpload', None, temp_lang) 
    41301554 
    41311555def convertKeyToInt(key): 
     
    41661590        # create a preview image 
    41671591        if (temp_preview_data is not None): 
    4168                 temp_info = context.ZMSMediaPlayerLib_resize(dest_folder, temp_preview_data['filename'], 25, 25) 
     1592                temp_info = context.ZMSGallery_resize(dest_folder, temp_preview_data['filename'], 25, 25) 
    41691593                file_dict['preview_id'] = temp_info[0] 
    4170                  
    4171         ''' 
    4172         for i in range(0, len(file_list)): 
    4173                 if (file_list[i]['filename'] in temp_file_ids): 
    4174                         temp_folder.manage_delObjects(file_list[i]['filename']) 
    4175                          
    4176                 temp_folder.manage_addImage(file_list[i]['filename'], file_list[i]['data']) 
    4177                 # create a preview image 
    4178                 file_list[i]['preview_id'] = context.ZMSGallery_preview(temp_folder, file_list[i]['filename'], 25, 25) 
    4179         '''  
    4180          
    4181         ''' 
    4182         temp_id = context.getId() + '_' + REQUEST['AUTHENTICATED_USER'].getId() 
    4183         if temp_id in temp_folder.objectIds(): 
    4184                 temp_folder.manage_delObjects([temp_id]) 
    4185         else: 
    4186                 temp_image_id = temp_folder.manage_addImage(temp_id, files_dict['file1.jpg']['medium']['img_obj']['data']) 
    4187         ''' 
    41881594         
    41891595        return temp_folder.absolute_url() 
     
    42591665                                temp_box = (int(temp_box[0]), int(temp_box[1]), int(temp_box[2]), int(temp_box[3])) 
    42601666                                 
    4261                                 one_import['small']['filename'] = context.ZMSMediaPlayerLib_crop(temp_folder, one_import['medium']['filename'], temp_box) 
     1667                                one_import['small']['filename'] = context.ZMSGallery_crop(temp_folder, one_import['medium']['filename'], temp_box) 
    42621668                                 
    42631669                                temp_act_width  = int(temp_box[2]) - int(temp_box[0]) 
     
    42691675                                if ((temp_act_width <> temp_thumb_width) or (temp_act_height <> temp_thumb_height)): 
    42701676                                        temp_thumb_width, temp_thumb_height = calcResizeDim(temp_thumb_width, temp_thumb_height, temp_thumb_width, temp_thumb_height) 
    4271                                         context.ZMSMediaPlayerLib_resize(temp_folder, one_import['small']['filename'], int(temp_thumb_width), int(temp_thumb_height), True) 
     1677                                        context.ZMSGallery_resize(temp_folder, one_import['small']['filename'], int(temp_thumb_width), int(temp_thumb_height), True) 
    42721678                         
    42731679                        temp_values = {'id_prefix'              : 'galleryImages', 
     
    42791685                         
    42801686                        context.manage_addZMSCustom('ZMSGraphic', temp_values, REQUEST) 
    4281          
    4282         if (temp_folder.getId() in context.temp_folder.objectIds()): 
    4283                 context.temp_folder.manage_delObjects(temp_folder.getId()) 
    42841687 
    42851688def renderFiles(files_dict, img_path): 
     
    43301733                temp_result += '</tr>\n' 
    43311734 
    4332                  
    4333                 ''' 
    4334                 temp_keys = files_dict.keys() 
    4335                 temp_keys.sort() 
    4336                  
    4337                 temp_result += '<ul>\n' 
    4338                 for one_key in temp_keys: 
    4339                         temp_result += '<li>\n' 
    4340                         temp_result += '<div class="import_object">\n' 
    4341                         temp_result += '<p>%s</p>\n'%one_key 
    4342                          
    4343                         temp_key_list = files_dict[one_key].keys() 
    4344                         temp_key_list.sort(lambda x,y: convertKeyToInt(x) - convertKeyToInt(y)) 
    4345                          
    4346                         for other_key in temp_key_list: 
    4347                                 if (files_dict[one_key][other_key] is None): 
    4348                                         temp_filename                                   = None 
    4349                                         temp_filename_preview   = None 
    4350                                         temp_text                                                       = 'not available' 
    4351                                 else: 
    4352                                         temp_filename                                   = files_dict[one_key][other_key]['filename'] 
    4353                                         temp_filename_preview   = files_dict[one_key][other_key]['preview_id'] 
    4354                                         temp_text                                                       = files_dict[one_key][other_key]['filename'] 
    4355                                  
    4356                                 temp_result += renderImage(other_key, temp_text, img_path, temp_filename, temp_filename_preview) 
    4357                          
    4358                         temp_result += '</div>\n' 
    4359                         temp_result += '</li>\n' 
    4360                  
    4361                 temp_result += '</ul>\n' 
    4362                 ''' 
    4363          
    4364         return temp_result 
    4365  
    4366 def renderImage(header, text, img_path, filename = None, filename_preview = None): 
    4367         if (header is not None and text is not None and img_path is not None): 
    4368                 temp_result = '<div name="%s" class="import_file">\n'%header 
    4369                 temp_result += '<input type="hidden" name="filename" value="%s" />\n'%filename 
    4370                 temp_result += '<input type="hidden" name="filename_preview" value="%s" />\n'%filename_preview 
    4371                 temp_result += '<input type="hidden" name="crop" value="" />\n' 
    4372                 temp_result += '<h1>%s: </h1>\n'%header 
    4373                 temp_result += '<span>%s</span>\n'%text 
    4374                 temp_result += '<img src="%s/%s" width="25" height="25" />\n'%(img_path, filename_preview) 
    4375                 temp_result += '</div>\n' 
    4376         else: 
    4377                 temp_result = '' 
    4378          
    43791735        return temp_result 
    43801736 
     
    43911747                importFiles(context.parseXmlString(temp_xml)) 
    43921748         
    4393         context.setObjProperty('galleryUpload', None, temp_lang) 
     1749        clearGarbage() 
    43941750else: 
    4395         #temp_file_dict = getFileDict(getFileList()) 
    4396         #temp_path                              = createTempImages(temp_file_list) 
    4397          
     1751        # render javascript variables 
    43981752        temp_result = '<script type="text/javascript">\n' 
    43991753        temp_result += 'var resize_url = "%s";\n'%context.absolute_url() 
     
    44111765        temp_result += 'var text_resize_needful = " will be resized";\n' 
    44121766        temp_result += '</script>\n' 
    4413          
     1767        # render image-overview 
    44141768        temp_result += '<input type="hidden" name="gallery_max_width_medium" value="%s" />'%context.getObjProperty('galleryWidth', REQUEST) 
    44151769        temp_result += '<input type="hidden" name="gallery_max_width_small" value="%s" />'%context.getObjProperty('galleryThumbsMaxWidth', REQUEST) 
     
    44211775        temp_result += '<input type="checkbox" id="gallery_ignore_dim" />' 
    44221776        temp_result += '<label for="gallery_ignore_dim">ignore dimension settings</label>' 
    4423          
    4424         ''' 
    4425         temp_result += '<div id="import_frame">\n' 
    4426         temp_result += '<input type="hidden" name="path" value="%s" />\n'%temp_path 
    4427         temp_result += '<div id="file_import">\n' 
    4428         temp_result += renderFiles(getFileDict(temp_file_list), temp_path) 
    4429          
    4430         temp_result += '<ul id="file_new">\n' 
    4431         temp_result += '<li>\n<div>\n' 
    4432         temp_result += '<p>empty object</p>\n' 
    4433         temp_result += renderImage('small', 'not available', temp_path, None, None) 
    4434         temp_result += renderImage('medium', 'not available', temp_path, None, None) 
    4435         temp_result += renderImage('large', 'not available', temp_path, None, None) 
    4436         temp_result += '</div>\n</li>\n</ul>\n' 
    4437          
    4438         temp_result += '</div>\n' 
    4439         temp_result += '<div id="file_trash">\n' 
    4440         temp_result += '<p>insert trash here</p>\n' 
    4441         temp_result += '<ul id="file_trash_files"></ul>\n' 
    4442         temp_result += '</div>\n' 
    4443         temp_result += '<form id="import_form" name="import_form" action="%s/manage?lang=%s&manage_lang=%s" method="post" onsubmit="return submitForm();">\n'%(context.absolute_url(), temp_lang, temp_lang) 
    4444         temp_result += '<input type="hidden" id="import_files_xml" name="import_files_xml" value="" />\n' 
    4445         temp_result += '<input type="submit" value="import files" />\n' 
    4446         temp_result += '</form>\n' 
    4447         temp_result += '</div>\n' 
    4448         ''' 
    4449          
     1777        # render import-form 
    44501778        temp_result += '<div><form id="gallery_import_form" name="gallery_import_form" action="%s/manage?lang=%s&manage_lang=%s" method="post">\n'%(context.absolute_url(), temp_lang, temp_lang) 
    44511779        temp_result += '<input type="hidden" id="import_files_xml" name="import_files_xml" value="" />\n' 
     
    44841812                (temp_src_filename is not None) and (len(temp_src_filename) > 0) and 
    44851813                temp_dest_width.isdigit() and temp_dest_height.isdigit()): 
    4486         temp_result = context.ZMSMediaPlayerLib_resize(temp_folder, temp_src_filename, int(temp_dest_width), int(temp_dest_height), True) 
     1814        temp_result = context.ZMSGallery_resize(temp_folder, temp_src_filename, int(temp_dest_width), int(temp_dest_height), True) 
    44871815         
    44881816        if (temp_result is not None): 
     
    45581886<item key="name"><![CDATA[ZMSGallery]]></item> 
    45591887<item key="package"><![CDATA[com.zms.mediaplayer]]></item> 
    4560 <item key="revision"><![CDATA[2.1.6]]></item> 
     1888<item key="revision"><![CDATA[2.1.7]]></item> 
    45611889<item key="type"><![CDATA[ZMSObject]]></item> 
    45621890</dictionary> 
     
    48102138</item> 
    48112139<item type="dictionary"><dictionary> 
     2140<item key="custom"> 
     2141<data content_type="text/x-c" filename="ui.core.js" type="file"><![CDATA[/* 
     2142 * jQuery UI 1.6rc6 
     2143 * 
     2144 * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about) 
     2145 * Dual licensed under the MIT (MIT-LICENSE.txt) 
     2146 * and GPL (GPL-LICENSE.txt) licenses. 
     2147 * 
     2148 * http://docs.jquery.com/UI 
     2149 */ 
     2150;(function($) { 
     2151 
     2152var _remove = $.fn.remove, 
     2153        isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9); 
     2154 
     2155//Helper functions and ui object 
     2156$.ui = { 
     2157        version: "1.6rc6", 
     2158 
     2159        // $.ui.plugin is deprecated.  Use the proxy pattern instead. 
     2160        plugin: { 
     2161                add: function(module, option, set) { 
     2162                        var proto = $.ui[module].prototype; 
     2163                        for(var i in set) { 
     2164                                proto.plugins[i] = proto.plugins[i] || []; 
     2165                                proto.plugins[i].push([option, set[i]]); 
     2166                        } 
     2167                }, 
     2168                call: function(instance, name, args) { 
     2169                        var set = instance.plugins[name]; 
     2170                        if(!set) { return; } 
     2171 
     2172                        for (var i = 0; i < set.length; i++) { 
     2173                                if (instance.options[set[i][0]]) { 
     2174                                        set[i][1].apply(instance.element, args); 
     2175                                } 
     2176                        } 
     2177                } 
     2178        }, 
     2179 
     2180        contains: function(a, b) { 
     2181                return document.compareDocumentPosition 
     2182                        ? a.compareDocumentPosition(b) & 16 
     2183                        : a !== b && a.contains(b); 
     2184        }, 
     2185 
     2186        cssCache: {}, 
     2187        css: function(name) { 
     2188                if ($.ui.cssCache[name]) { return $.ui.cssCache[name]; } 
     2189                var tmp = $('<div class="ui-gen"></div>').addClass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendTo('body'); 
     2190 
     2191                //if (!$.browser.safari) 
     2192                        //tmp.appendTo('body'); 
     2193 
     2194                //Opera and Safari set width and height to 0px instead of auto 
     2195                //Safari returns rgba(0,0,0,0) when bgcolor is not set 
     2196                $.ui.cssCache[name] = !!( 
     2197                        (!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) || 
     2198                        !(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor'))) 
     2199                ); 
     2200                try { $('body').get(0).removeChild(tmp.get(0)); } catch(e){} 
     2201                return $.ui.cssCache[name]; 
     2202        }, 
     2203 
     2204        hasScroll: function(el, a) { 
     2205 
     2206                //If overflow is hidden, the element might have extra content, but the user wants to hide it 
     2207                if ($(el).css('overflow') == 'hidden') { return false; } 
     2208 
     2209                var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop', 
     2210                        has = false; 
     2211 
     2212                if (el[scroll] > 0) { return true; } 
     2213 
     2214                // TODO: determine which cases actually cause this to happen 
     2215                // if the element doesn't have the scroll set, see if it's possible to 
     2216                // set the scroll 
     2217                el[scroll] = 1; 
     2218                has = (el[scroll] > 0); 
     2219                el[scroll] = 0; 
     2220                return has; 
     2221        }, 
     2222 
     2223        isOverAxis: function(x, reference, size) { 
     2224                //Determines when x coordinate is over "b" element axis 
     2225                return (x > reference) && (x < (reference + size)); 
     2226        }, 
     2227 
     2228        isOver: function(y, x, top, left, height, width) { 
     2229                //Determines when x, y coordinates is over "b" element 
     2230                return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width); 
     2231        }, 
     2232 
     2233        keyCode: { 
     2234                BACKSPACE: 8, 
     2235                CAPS_LOCK: 20, 
     2236                COMMA: 188, 
     2237                CONTROL: 17, 
     2238                DELETE: 46, 
     2239                DOWN: 40, 
     2240                END: 35, 
     2241                ENTER: 13, 
     2242                ESCAPE: 27, 
     2243                HOME: 36, 
     2244                INSERT: 45, 
     2245                LEFT: 37, 
     2246                NUMPAD_ADD: 107, 
     2247                NUMPAD_DECIMAL: 110, 
     2248                NUMPAD_DIVIDE: 111, 
     2249                NUMPAD_ENTER: 108, 
     2250                NUMPAD_MULTIPLY: 106, 
     2251                NUMPAD_SUBTRACT: 109, 
     2252                PAGE_DOWN: 34, 
     2253                PAGE_UP: 33, 
     2254                PERIOD: 190, 
     2255                RIGHT: 39, 
     2256                SHIFT: 16, 
     2257                SPACE: 32, 
     2258                TAB: 9, 
     2259                UP: 38 
     2260        } 
     2261}; 
     2262 
     2263// WAI-ARIA normalization 
     2264if (isFF2) { 
     2265        var attr = $.attr, 
     2266                removeAttr = $.fn.removeAttr, 
     2267                ariaNS = "http://www.w3.org/2005/07/aaa", 
     2268                ariaState = /^aria-/, 
     2269                ariaRole = /^wairole:/; 
     2270 
     2271        $.attr = function(elem, name, value) { 
     2272                var set = value !== undefined; 
     2273 
     2274                return (name == 'role' 
     2275                        ? (set 
     2276                                ? attr.call(this, elem, name, "wairole:" + value) 
     2277                                : (attr.apply(this, arguments) || "").replace(ariaRole, "")) 
     2278                        : (ariaState.test(name) 
     2279                                ? (set 
     2280                                        ? elem.setAttributeNS(ariaNS, 
     2281                                                name.replace(ariaState, "aaa:"), value) 
     2282                                        : attr.call(this, elem, name.replace(ariaState, "aaa:"))) 
     2283                                : attr.apply(this, arguments))); 
     2284        }; 
     2285 
     2286        $.fn.removeAttr = function(name) { 
     2287                return (ariaState.test(name) 
     2288                        ? this.each(function() { 
     2289                                this.removeAttributeNS(ariaNS, name.replace(ariaState, "")); 
     2290                        }) : removeAttr.call(this, name)); 
     2291        }; 
     2292} 
     2293 
     2294//jQuery plugins 
     2295$.fn.extend({ 
     2296        remove: function() { 
     2297                // Safari has a native remove event which actually removes DOM elements, 
     2298                // so we have to use triggerHandler instead of trigger (#3037). 
     2299                $("*", this).add(this).each(function() { 
     2300                        $(this).triggerHandler("remove"); 
     2301                }); 
     2302                return _remove.apply(this, arguments ); 
     2303        }, 
     2304 
     2305        enableSelection: function() { 
     2306                return this 
     2307                        .attr('unselectable', 'off') 
     2308                        .css('MozUserSelect', '') 
     2309                        .unbind('selectstart.ui'); 
     2310        }, 
     2311 
     2312        disableSelection: function() { 
     2313                return this 
     2314                        .attr('unselectable', 'on') 
     2315                        .css('MozUserSelect', 'none') 
     2316                        .bind('selectstart.ui', function() { return false; }); 
     2317        }, 
     2318 
     2319        scrollParent: function() { 
     2320                var scrollParent; 
     2321                if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { 
     2322                        scrollParent = this.parents().filter(function() { 
     2323                                return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); 
     2324                        }).eq(0); 
     2325                } else { 
     2326                        scrollParent = this.parents().filter(function() { 
     2327                                return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); 
     2328                        }).eq(0); 
     2329                } 
     2330 
     2331                return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; 
     2332        } 
     2333}); 
     2334 
     2335 
     2336//Additional selectors 
     2337$.extend($.expr[':'], { 
     2338        data: function(elem, i, match) { 
     2339                return !!$.data(elem, match[3]); 
     2340        }, 
     2341 
     2342        focusable: function(element) { 
     2343                var nodeName = element.nodeName.toLowerCase(), 
     2344                        tabIndex = $.attr(element, 'tabindex'); 
     2345                return (/input|select|textarea|button|object/.test(nodeName) 
     2346                        ? !element.disabled 
     2347                        : 'a' == nodeName || 'area' == nodeName 
     2348                                ? element.href || !isNaN(tabIndex) 
     2349                                : !isNaN(tabIndex)) 
     2350                        // the element and all of its ancestors must be visible 
     2351                        // the browser may report that the area is hidden 
     2352                        && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length; 
     2353        }, 
     2354 
     2355        tabbable: function(element) { 
     2356                var tabIndex = $.attr(element, 'tabindex'); 
     2357                return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable'); 
     2358        } 
     2359}); 
     2360 
     2361 
     2362// $.widget is a factory to create jQuery plugins 
     2363// taking some boilerplate code out of the plugin code 
     2364function getter(namespace, plugin, method, args) { 
     2365        function getMethods(type) { 
     2366                var methods = $[namespace][plugin][type] || []; 
     2367                return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods); 
     2368        } 
     2369 
     2370        var methods = getMethods('getter'); 
     2371        if (args.length == 1 && typeof args[0] == 'string') { 
     2372                methods = methods.concat(getMethods('getterSetter')); 
     2373        } 
     2374        return ($.inArray(method, methods) != -1); 
     2375} 
     2376 
     2377$.widget = function(name, prototype) { 
     2378        var namespace = name.split(".")[0]; 
     2379        name = name.split(".")[1]; 
     2380 
     2381        // create plugin method 
     2382        $.fn[name] = function(options) { 
     2383                var isMethodCall = (typeof options == 'string'), 
     2384                        args = Array.prototype.slice.call(arguments, 1); 
     2385 
     2386                // prevent calls to internal methods 
     2387                if (isMethodCall && options.substring(0, 1) == '_') { 
     2388                        return this; 
     2389                } 
     2390 
     2391                // handle getter methods 
     2392                if (isMethodCall && getter(namespace, name, options, args)) { 
     2393                        var instance = $.data(this[0], name); 
     2394                        return (instance ? instance[options].apply(instance, args) 
     2395                                : undefined); 
     2396                } 
     2397 
     2398                // handle initialization and non-getter methods 
     2399                return this.each(function() { 
     2400                        var instance = $.data(this, name); 
     2401 
     2402                        // constructor 
     2403                        (!instance && !isMethodCall && 
     2404                                $.data(this, name, new $[namespace][name](this, options))._init()); 
     2405 
     2406                        // method call 
     2407                        (instance && isMethodCall && $.isFunction(instance[options]) && 
     2408                                instance[options].apply(instance, args)); 
     2409                }); 
     2410        }; 
     2411 
     2412        // create widget constructor 
     2413        $[namespace] = $[namespace] || {}; 
     2414        $[namespace][name] = function(element, options) { 
     2415                var self = this; 
     2416 
     2417                this.namespace = namespace; 
     2418                this.widgetName = name; 
     2419                this.widgetEventPrefix = $[namespace][name].eventPrefix || name; 
     2420                this.widgetBaseClass = namespace + '-' + name; 
     2421 
     2422                this.options = $.extend({}, 
     2423                        $.widget.defaults, 
     2424                        $[namespace][name].defaults, 
     2425                        $.metadata && $.metadata.get(element)[name], 
     2426                        options); 
     2427 
     2428                this.element = $(element) 
     2429                        .bind('setData.' + name, function(event, key, value) { 
     2430                                if (event.target == element) { 
     2431                                        return self._setData(key, value); 
     2432                                } 
     2433                        }) 
     2434                        .bind('getData.' + name, function(event, key) { 
     2435                                if (event.target == element) { 
     2436                                        return self._getData(key); 
     2437                                } 
     2438                        }) 
     2439                        .bind('remove', function() { 
     2440                                return self.destroy(); 
     2441                        }); 
     2442        }; 
     2443 
     2444        // add widget prototype 
     2445        $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype); 
     2446 
     2447        // TODO: merge getter and getterSetter properties from widget prototype 
     2448        // and plugin prototype 
     2449        $[namespace][name].getterSetter = 'option'; 
     2450}; 
     2451 
     2452$.widget.prototype = { 
     2453        _init: function() {}, 
     2454        destroy: function() { 
     2455                this.element.removeData(this.widgetName) 
     2456                        .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled') 
     2457                        .removeAttr('aria-disabled'); 
     2458        }, 
     2459 
     2460        option: function(key, value) { 
     2461                var options = key, 
     2462                        self = this; 
     2463 
     2464                if (typeof key == "string") { 
     2465                        if (value === undefined) { 
     2466                                return this._getData(key); 
     2467                        } 
     2468                        options = {}; 
     2469                        options[key] = value; 
     2470                } 
     2471 
     2472                $.each(options, function(key, value) { 
     2473                        self._setData(key, value); 
     2474                }); 
     2475        }, 
     2476        _getData: function(key) { 
     2477                return this.options[key]; 
     2478        }, 
     2479        _setData: function(key, value) { 
     2480                this.options[key] = value; 
     2481 
     2482                if (key == 'disabled') { 
     2483                        this.element 
     2484                                [value ? 'addClass' : 'removeClass']( 
     2485                                        this.widgetBaseClass + '-disabled' + ' ' + 
     2486                                        this.namespace + '-state-disabled') 
     2487                                .attr("aria-disabled", value); 
     2488                } 
     2489        }, 
     2490 
     2491        enable: function() { 
     2492                this._setData('disabled', false); 
     2493        }, 
     2494        disable: function() { 
     2495                this._setData('disabled', true); 
     2496        }, 
     2497 
     2498        _trigger: function(type, event, data) { 
     2499                var callback = this.options[type], 
     2500                        eventName = (type == this.widgetEventPrefix 
     2501                                ? type : this.widgetEventPrefix + type); 
     2502 
     2503                event = $.Event(event); 
     2504                event.type = eventName; 
     2505 
     2506                // copy original event properties over to the new event 
     2507                // this would happen if we could call $.event.fix instead of $.Event 
     2508                // but we don't have a way to force an event to be fixed multiple times 
     2509                if (event.originalEvent) { 
     2510                        for (var i = $.event.props.length, prop; i;) { 
     2511                                prop = $.event.props[--i]; 
     2512                                event[prop] = event.originalEvent[prop]; 
     2513                        } 
     2514                } 
     2515 
     2516                this.element.trigger(event, data); 
     2517 
     2518                return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false 
     2519                        || event.isDefaultPrevented()); 
     2520        } 
     2521}; 
     2522 
     2523$.widget.defaults = { 
     2524        disabled: false 
     2525}; 
     2526 
     2527 
     2528/** Mouse Interaction Plugin **/ 
     2529 
     2530$.ui.mouse = { 
     2531        _mouseInit: function() { 
     2532                var self = this; 
     2533 
     2534                this.element 
     2535                        .bind('mousedown.'+this.widgetName, function(event) { 
     2536                                return self._mouseDown(event); 
     2537                        }) 
     2538                        .bind('click.'+this.widgetName, function(event) { 
     2539                                if(self._preventClickEvent) { 
     2540                                        self._preventClickEvent = false; 
     2541                                        return false; 
     2542                                } 
     2543                        }); 
     2544 
     2545                // Prevent text selection in IE 
     2546                if ($.browser.msie) { 
     2547                        this._mouseUnselectable = this.element.attr('unselectable'); 
     2548                        this.element.attr('unselectable', 'on'); 
     2549                } 
     2550 
     2551                this.started = false; 
     2552        }, 
     2553 
     2554        // TODO: make sure destroying one instance of mouse doesn't mess with 
     2555        // other instances of mouse 
     2556        _mouseDestroy: function() { 
     2557                this.element.unbind('.'+this.widgetName); 
     2558 
     2559                // Restore text selection in IE 
     2560                ($.browser.msie 
     2561                        && this.element.attr('unselectable', this._mouseUnselectable)); 
     2562        }, 
     2563 
     2564        _mouseDown: function(event) { 
     2565                // don't let more than one widget handle mouseStart 
     2566                if (event.originalEvent.mouseHandled) { return; } 
     2567 
     2568                // we may have missed mouseup (out of window) 
     2569                (this._mouseStarted && this._mouseUp(event)); 
     2570 
     2571                this._mouseDownEvent = event; 
     2572 
     2573                var self = this, 
     2574                        btnIsLeft = (event.which == 1), 
     2575                        elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false); 
     2576                if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { 
     2577                        return true; 
     2578                } 
     2579 
     2580                this.mouseDelayMet = !this.options.delay; 
     2581                if (!this.mouseDelayMet) { 
     2582                        this._mouseDelayTimer = setTimeout(function() { 
     2583                                self.mouseDelayMet = true; 
     2584                        }, this.options.delay); 
     2585                } 
     2586 
     2587                if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { 
     2588                        this._mouseStarted = (this._mouseStart(event) !== false); 
     2589                        if (!this._mouseStarted) { 
     2590                                event.preventDefault(); 
     2591                                return true; 
     2592                        } 
     2593                } 
     2594 
     2595                // these delegates are required to keep context 
     2596                this._mouseMoveDelegate = function(event) { 
     2597                        return self._mouseMove(event); 
     2598                }; 
     2599                this._mouseUpDelegate = function(event) { 
     2600                        return self._mouseUp(event); 
     2601                }; 
     2602                $(document) 
     2603                        .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) 
     2604                        .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); 
     2605 
     2606                // preventDefault() is used to prevent the selection of text here - 
     2607                // however, in Safari, this causes select boxes not to be selectable 
     2608                // anymore, so this fix is needed 
     2609                ($.browser.safari || event.preventDefault()); 
     2610 
     2611                event.originalEvent.mouseHandled = true; 
     2612                return true; 
     2613        }, 
     2614 
     2615        _mouseMove: function(event) { 
     2616                // IE mouseup check - mouseup happened when mouse was out of window 
     2617                if ($.browser.msie && !event.button) { 
     2618                        return this._mouseUp(event); 
     2619                } 
     2620 
     2621                if (this._mouseStarted) { 
     2622                        this._mouseDrag(event); 
     2623                        return event.preventDefault(); 
     2624                } 
     2625 
     2626                if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { 
     2627                        this._mouseStarted = 
     2628                                (this._mouseStart(this._mouseDownEvent, event) !== false); 
     2629                        (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); 
     2630                } 
     2631 
     2632                return !this._mouseStarted; 
     2633        }, 
     2634 
     2635        _mouseUp: function(event) { 
     2636                $(document) 
     2637                        .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) 
     2638                        .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); 
     2639 
     2640                if (this._mouseStarted) { 
     2641                        this._mouseStarted = false; 
     2642                        this._preventClickEvent = true; 
     2643                        this._mouseStop(event); 
     2644                } 
     2645 
     2646                return false; 
     2647        }, 
     2648 
     2649        _mouseDistanceMet: function(event) { 
     2650                return (Math.max( 
     2651                                Math.abs(this._mouseDownEvent.pageX - event.pageX), 
     2652                                Math.abs(this._mouseDownEvent.pageY - event.pageY) 
     2653                        ) >= this.options.distance 
     2654                ); 
     2655        }, 
     2656 
     2657        _mouseDelayMet: function(event) { 
     2658                return this.mouseDelayMet; 
     2659        }, 
     2660 
     2661        // These are placeholder methods, to be overriden by extending plugin 
     2662        _mouseStart: function(event) {}, 
     2663        _mouseDrag: function(event) {}, 
     2664        _mouseStop: function(event) {}, 
     2665        _mouseCapture: function(event) { return true; } 
     2666}; 
     2667 
     2668$.ui.mouse.defaults = { 
     2669        cancel: null, 
     2670        distance: 1, 
     2671        delay: 0 
     2672}; 
     2673 
     2674})(jQuery); 
     2675]]></data></item> 
     2676<item key="id"><![CDATA[ui.core.js]]></item> 
     2677<item key="mandatory" type="int">0</item> 
     2678<item key="multilang" type="int">0</item> 
     2679<item key="name"><![CDATA[ui.core.js]]></item> 
     2680<item key="repetitive" type="int">0</item> 
     2681<item key="type"><![CDATA[resource]]></item> 
     2682</dictionary> 
     2683</item> 
     2684<item type="dictionary"><dictionary> 
     2685<item key="custom"> 
     2686<data content_type="text/x-c" filename="ui.dialog.js" type="file"><![CDATA[/* 
     2687 * jQuery UI Dialog 1.6rc6 
     2688 * 
     2689 * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about) 
     2690 * Dual licensed under the MIT (MIT-LICENSE.txt) 
     2691 * and GPL (GPL-LICENSE.txt) licenses. 
     2692 * 
     2693 * http://docs.jquery.com/UI/Dialog 
     2694 * 
     2695 * Depends: 
     2696 *      ui.core.js 
     2697 *      ui.draggable.js 
     2698 *      ui.resizable.js 
     2699 */ 
     2700(function($) { 
     2701 
     2702var setDataSwitch = { 
     2703        dragStart: "start.draggable", 
     2704        drag: "drag.draggable", 
     2705        dragStop: "stop.draggable", 
     2706        maxHeight: "maxHeight.resizable", 
     2707        minHeight: "minHeight.resizable", 
     2708        maxWidth: "maxWidth.resizable", 
     2709        minWidth: "minWidth.resizable", 
     2710        resizeStart: "start.resizable", 
     2711        resize: "drag.resizable", 
     2712        resizeStop: "stop.resizable" 
     2713}; 
     2714 
     2715$.widget("ui.dialog", { 
     2716 
     2717        _init: function() { 
     2718                this.originalTitle = this.element.attr('title'); 
     2719 
     2720                var self = this, 
     2721                        options = this.options, 
     2722 
     2723                        title = options.title || this.originalTitle || '&nbsp;', 
     2724                        titleId = $.ui.dialog.getTitleId(this.element), 
     2725 
     2726                        uiDialog = (this.uiDialog = $('<div/>')) 
     2727                                .appendTo(document.body) 
     2728                                .hide() 
     2729                                .addClass( 
     2730                                        'ui-dialog ' + 
     2731                                        'ui-widget ' + 
     2732                                        'ui-widget-content ' + 
     2733                                        'ui-corner-all ' + 
     2734                                        options.dialogClass 
     2735                                ) 
     2736                                .css({ 
     2737                                        position: 'absolute', 
     2738                                        overflow: 'hidden', 
     2739                                        zIndex: options.zIndex 
     2740                                }) 
     2741                                // setting tabIndex makes the div focusable 
     2742                                // setting outline to 0 prevents a border on focus in Mozilla 
     2743                                .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { 
     2744                                        (options.closeOnEscape && event.keyCode 
     2745                                                && event.keyCode == $.ui.keyCode.ESCAPE && self.close(event)); 
     2746                                }) 
     2747                                .attr({ 
     2748                                        role: 'dialog', 
     2749                                        'aria-labelledby': titleId 
     2750                                }) 
     2751                                .mousedown(function(event) { 
     2752                                        self.moveToTop(event); 
     2753                                }), 
     2754 
     2755                        uiDialogContent = this.element 
     2756                                .show() 
     2757                                .removeAttr('title') 
     2758                                .addClass( 
     2759                                        'ui-dialog-content ' + 
     2760                                        'ui-widget-content') 
     2761                                .appendTo(uiDialog), 
     2762 
     2763                        uiDialogTitlebar = (this.uiDialogTitlebar = $('<div></div>')) 
     2764                                .addClass( 
     2765                                        'ui-dialog-titlebar ' + 
     2766                                        'ui-widget-header ' + 
     2767                                        'ui-corner-all ' + 
     2768                                        'ui-helper-clearfix' 
     2769                                ) 
     2770                                .prependTo(uiDialog), 
     2771 
     2772                        uiDialogTitlebarClose = $('<a href="#"/>') 
     2773                                .addClass( 
     2774                                        'ui-dialog-titlebar-close ' + 
     2775                                        'ui-corner-all' 
     2776                                ) 
     2777                                .attr('role', 'button') 
     2778                                .hover( 
     2779                                        function() { 
     2780                                                uiDialogTitlebarClose.addClass('ui-state-hover'); 
     2781                                        }, 
     2782                                        function() { 
     2783                                                uiDialogTitlebarClose.removeClass('ui-state-hover'); 
     2784                                        } 
     2785                                ) 
     2786                                .focus(function() { 
     2787                                        uiDialogTitlebarClose.addClass('ui-state-focus'); 
     2788                                }) 
     2789                                .blur(function() { 
     2790                                        uiDialogTitlebarClose.removeClass('ui-state-focus'); 
     2791                                }) 
     2792                                .mousedown(function(ev) { 
     2793                                        ev.stopPropagation(); 
     2794                                }) 
     2795                                .click(function(event) { 
     2796                                        self.close(event); 
     2797                                        return false; 
     2798                                }) 
     2799                                .appendTo(uiDialogTitlebar), 
     2800 
     2801                        uiDialogTitlebarCloseText = (this.uiDialogTitlebarCloseText = $('<span/>')) 
     2802                                .addClass( 
     2803                                        'ui-icon ' + 
     2804                                        'ui-icon-closethick' 
     2805                                ) 
     2806                                .text(options.closeText) 
     2807                                .appendTo(uiDialogTitlebarClose), 
     2808 
     2809                        uiDialogTitle = $('<span/>') 
     2810                                .addClass('ui-dialog-title') 
     2811                                .attr('id', titleId) 
     2812                                .html(title) 
     2813                                .prependTo(uiDialogTitlebar); 
     2814 
     2815                uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); 
     2816 
     2817                (options.draggable && $.fn.draggable && this._makeDraggable()); 
     2818                (options.resizable && $.fn.resizable && this._makeResizable()); 
     2819 
     2820                this._createButtons(options.buttons); 
     2821                this._isOpen = false; 
     2822 
     2823                (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe()); 
     2824                (options.autoOpen && this.open()); 
     2825                 
     2826        }, 
     2827 
     2828        destroy: function() { 
     2829                (this.overlay && this.overlay.destroy()); 
     2830                (this.shadow && this._destroyShadow()); 
     2831                this.uiDialog.hide(); 
     2832                this.element 
     2833                        .unbind('.dialog') 
     2834                        .removeData('dialog') 
     2835                        .removeClass('ui-dialog-content ui-widget-content') 
     2836                        .hide().appendTo('body'); 
     2837                this.uiDialog.remove(); 
     2838 
     2839                (this.originalTitle && this.element.attr('title', this.originalTitle)); 
     2840        }, 
     2841 
     2842        close: function(event) { 
     2843                if (false === this._trigger('beforeclose', event)) { 
     2844                        return; 
     2845                } 
     2846 
     2847                (this.overlay && this.overlay.destroy()); 
     2848                (this.shadow && this._destroyShadow()); 
     2849                this.uiDialog 
     2850                        .hide(this.options.hide) 
     2851                        .unbind('keypress.ui-dialog'); 
     2852 
     2853                this._trigger('close', event); 
     2854                $.ui.dialog.overlay.resize(); 
     2855 
     2856                this._isOpen = false; 
     2857        }, 
     2858 
     2859        isOpen: function() { 
     2860                return this._isOpen; 
     2861        }, 
     2862 
     2863        // the force parameter allows us to move modal dialogs to their correct 
     2864        // position on open 
     2865        moveToTop: function(force, event) { 
     2866 
     2867                if ((this.options.modal && !force) 
     2868                        || (!this.options.stack && !this.options.modal)) { 
     2869                        return this._trigger('focus', event); 
     2870                } 
     2871 
     2872                var maxZ = this.options.zIndex, options = this.options; 
     2873                $('.ui-dialog:visible').each(function() { 
     2874                        maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10) || options.zIndex); 
     2875                }); 
     2876                (this.overlay && this.overlay.$el.css('z-index', ++maxZ)); 
     2877                (this.shadow && this.shadow.css('z-index', ++maxZ)); 
     2878 
     2879                //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. 
     2880                //  http://ui.jquery.com/bugs/ticket/3193 
     2881                var saveScroll = { scrollTop: this.element.attr('scrollTop'), scrollLeft: this.element.attr('scrollLeft') }; 
     2882                this.uiDialog.css('z-index', ++maxZ); 
     2883                this.element.attr(saveScroll); 
     2884                this._trigger('focus', event); 
     2885        }, 
     2886 
     2887        open: function(event) { 
     2888                if (this._isOpen) { return; } 
     2889 
     2890                var options = this.options, 
     2891                        uiDialog = this.uiDialog; 
     2892 
     2893                this.overlay = options.modal ? new $.ui.dialog.overlay(this) : null; 
     2894                (uiDialog.next().length && uiDialog.appendTo('body')); 
     2895                this._size(); 
     2896                this._position(options.position); 
     2897                uiDialog.show(options.show); 
     2898                this.moveToTop(true, event); 
     2899 
     2900                // prevent tabbing out of modal dialogs 
     2901                (options.modal && uiDialog.bind('keypress.ui-dialog', function(event) { 
     2902                        if (event.keyCode != $.ui.keyCode.TAB) { 
     2903                                return; 
     2904                        } 
     2905 
     2906                        var tabbables = $(':tabbable', this), 
     2907                                first = tabbables.filter(':first')[0], 
     2908                                last  = tabbables.filter(':last')[0]; 
     2909 
     2910                        if (event.target == last && !event.shiftKey) { 
     2911                                setTimeout(function() { 
     2912                                        first.focus(); 
     2913                                }, 1); 
     2914                        } else if (event.target == first && event.shiftKey) { 
     2915                                setTimeout(function() { 
     2916                                        last.focus(); 
     2917                                }, 1); 
     2918                        } 
     2919                })); 
     2920 
     2921                // set focus to the first tabbable element in: 
     2922                // - content area 
     2923                // - button pane 
     2924                // - title bar 
     2925                $([]) 
     2926                        .add(uiDialog.find('.ui-dialog-content :tabbable:first')) 
     2927                        .add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first')) 
     2928                        .add(uiDialog.find('.ui-dialog-titlebar :tabbable:first')) 
     2929                        .filter(':first') 
     2930                        .focus(); 
     2931 
     2932                if(options.shadow) 
     2933                        this._createShadow(); 
     2934 
     2935                this._trigger('open', event); 
     2936                this._isOpen = true; 
     2937        }, 
     2938 
     2939        _createButtons: function(buttons) { 
     2940                var self = this, 
     2941                        hasButtons = false, 
     2942                        uiDialogButtonPane = $('<div></div>') 
     2943                                .addClass( 
     2944                                        'ui-dialog-buttonpane ' + 
     2945                                        'ui-widget-content ' + 
     2946                                        'ui-helper-clearfix' 
     2947                                ); 
     2948 
     2949                // if we already have a button pane, remove it 
     2950                this.uiDialog.find('.ui-dialog-buttonpane').remove(); 
     2951 
     2952                (typeof buttons == 'object' && buttons !== null && 
     2953                        $.each(buttons, function() { return !(hasButtons = true); })); 
     2954                if (hasButtons) { 
     2955                        $.each(buttons, function(name, fn) { 
     2956                                $('<button type="button"></button>') 
     2957                                        .addClass( 
     2958                                                'ui-state-default ' + 
     2959                                                'ui-corner-all' 
     2960                                        ) 
     2961                                        .text(name) 
     2962                                        .click(function() { fn.apply(self.element[0], arguments); }) 
     2963                                        .hover( 
     2964                                                function() { 
     2965                                                        $(this).addClass('ui-state-hover'); 
     2966                                                }, 
     2967                                                function() { 
     2968                                                        $(this).removeClass('ui-state-hover'); 
     2969                                                } 
     2970                                        ) 
     2971                                        .focus(function() { 
     2972                                                $(this).addClass('ui-state-focus'); 
     2973                                        }) 
     2974                                        .blur(function() { 
     2975                                                $(this).removeClass('ui-state-focus'); 
     2976                                        }) 
     2977                                        .appendTo(uiDialogButtonPane); 
     2978                        }); 
     2979                        uiDialogButtonPane.appendTo(this.uiDialog); 
     2980                } 
     2981        }, 
     2982 
     2983        _makeDraggable: function() { 
     2984                var self = this, 
     2985                        options = this.options; 
     2986 
     2987                this.uiDialog.draggable({ 
     2988                        cancel: '.ui-dialog-content', 
     2989                        helper: options.dragHelper, 
     2990                        handle: '.ui-dialog-titlebar', 
     2991                        containment: 'document', 
     2992                        start: function() { 
     2993                                (options.dragStart && options.dragStart.apply(self.element[0], arguments)); 
     2994                                if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.hide(); 
     2995                        }, 
     2996                        drag: function() { 
     2997                                (options.drag && options.drag.apply(self.element[0], arguments)); 
     2998                                self._refreshShadow(1); 
     2999                        }, 
     3000                        stop: function() { 
     3001                                (options.dragStop && options.dragStop.apply(self.element[0], arguments)); 
     3002                                $.ui.dialog.overlay.resize(); 
     3003                                if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.show(); 
     3004                                self._refreshShadow(); 
     3005                        } 
     3006                }); 
     3007        }, 
     3008 
     3009        _makeResizable: function(handles) { 
     3010                handles = (handles === undefined ? this.options.resizable : handles); 
     3011                var self = this, 
     3012                        options = this.options, 
     3013                        resizeHandles = typeof handles == 'string' 
     3014                                ? handles 
     3015                                : 'n,e,s,w,se,sw,ne,nw'; 
     3016 
     3017                this.uiDialog.resizable({ 
     3018                        cancel: '.ui-dialog-content', 
     3019                        alsoResize: this.element, 
     3020                        helper: options.resizeHelper, 
     3021                        maxWidth: options.maxWidth, 
     3022                        maxHeight: options.maxHeight, 
     3023                        minWidth: options.minWidth, 
     3024                        minHeight: options.minHeight, 
     3025                        start: function() { 
     3026                                (options.resizeStart && options.resizeStart.apply(self.element[0], arguments)); 
     3027                                if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.hide(); 
     3028                        }, 
     3029                        resize: function() { 
     3030                                (options.resize && options.resize.apply(self.element[0], arguments)); 
     3031                                self._refreshShadow(1); 
     3032                        }, 
     3033                        handles: resizeHandles, 
     3034                        stop: function() { 
     3035                                (options.resizeStop && options.resizeStop.apply(self.element[0], arguments)); 
     3036                                $.ui.dialog.overlay.resize(); 
     3037                                if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.show(); 
     3038                                self._refreshShadow(); 
     3039                        } 
     3040                }) 
     3041                .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); 
     3042        }, 
     3043 
     3044        _position: function(pos) { 
     3045                var wnd = $(window), doc = $(document), 
     3046                        pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), 
     3047                        minTop = pTop; 
     3048 
     3049                if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) { 
     3050                        pos = [ 
     3051                                pos == 'right' || pos == 'left' ? pos : 'center', 
     3052                                pos == 'top' || pos == 'bottom' ? pos : 'middle' 
     3053                        ]; 
     3054                } 
     3055                if (pos.constructor != Array) { 
     3056                        pos = ['center', 'middle']; 
     3057                } 
     3058                if (pos[0].constructor == Number) { 
     3059                        pLeft += pos[0]; 
     3060                } else { 
     3061                        switch (pos[0]) { 
     3062                                case 'left': 
     3063                                        pLeft += 0; 
     3064                                        break; 
     3065                                case 'right': 
     3066                                        pLeft += wnd.width() - this.uiDialog.outerWidth(); 
     3067                                        break; 
     3068                                default: 
     3069                                case 'center': 
     3070                                        pLeft += (wnd.width() - this.uiDialog.outerWidth()) / 2; 
     3071                        } 
     3072                } 
     3073                if (pos[1].constructor == Number) { 
     3074                        pTop += pos[1]; 
     3075                } else { 
     3076                        switch (pos[1]) { 
     3077                                case 'top': 
     3078                                        pTop += 0; 
     3079                                        break; 
     3080                                case 'bottom': 
     3081                                        pTop += wnd.height() - this.uiDialog.outerHeight(); 
     3082                                        break; 
     3083                                default: 
     3084                                case 'middle': 
     3085                                        pTop += (wnd.height() - this.uiDialog.outerHeight()) / 2; 
     3086                        } 
     3087                } 
     3088 
     3089                // prevent the dialog from being too high (make sure the titlebar 
     3090                // is accessible) 
     3091                pTop = Math.max(pTop, minTop); 
     3092                this.uiDialog.css({top: pTop, left: pLeft}); 
     3093        }, 
     3094 
     3095        _setData: function(key, value){ 
     3096                (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value)); 
     3097                switch (key) { 
     3098                        case "buttons": 
     3099                                this._createButtons(value); 
     3100                                break; 
     3101                        case "closeText": 
     3102                                this.uiDialogTitlebarCloseText.text(value); 
     3103                                break; 
     3104                        case "draggable": 
     3105                                (value 
     3106                                        ? this._makeDraggable() 
     3107                                        : this.uiDialog.draggable('destroy')); 
     3108                                break; 
     3109                        case "height": 
     3110                                this.uiDialog.height(value); 
     3111                                break; 
     3112                        case "position": 
     3113                                this._position(value); 
     3114                                break; 
     3115                        case "resizable": 
     3116                                var uiDialog = this.uiDialog, 
     3117                                        isResizable = this.uiDialog.is(':data(resizable)'); 
     3118 
     3119                                // currently resizable, becoming non-resizable 
     3120                                (isResizable && !value && uiDialog.resizable('destroy')); 
     3121 
     3122                                // currently resizable, changing handles 
     3123                                (isResizable && typeof value == 'string' && 
     3124                                        uiDialog.resizable('option', 'handles', value)); 
     3125 
     3126                                // currently non-resizable, becoming resizable 
     3127                                (isResizable || this._makeResizable(value)); 
     3128 
     3129                                break; 
     3130                        case "title": 
     3131                                $(".ui-dialog-title", this.uiDialogTitlebar).html(value || '&nbsp;'); 
     3132                                break; 
     3133                        case "width": 
     3134                                this.uiDialog.width(value); 
     3135                                break; 
     3136                } 
     3137 
     3138                $.widget.prototype._setData.apply(this, arguments); 
     3139        }, 
     3140 
     3141        _size: function() { 
     3142                /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content 
     3143                 * divs will both have width and height set, so we need to reset them 
     3144                 */ 
     3145                var options = this.options; 
     3146 
     3147                // reset content sizing 
     3148                this.element.css({ 
     3149                        height: 0, 
     3150                        minHeight: 0, 
     3151                        width: 'auto' 
     3152                }); 
     3153 
     3154                // reset wrapper sizing 
     3155                // determine the height of all the non-content elements 
     3156                var nonContentHeight = this.uiDialog.css({ 
     3157                                height: 'auto', 
     3158                                width: options.width 
     3159                        }) 
     3160                        .height(); 
     3161 
     3162                this.element 
     3163                        .css({ 
     3164                                minHeight: Math.max(options.minHeight - nonContentHeight, 0), 
     3165                                height: options.height == 'auto' 
     3166                                        ? 'auto' 
     3167                                        : options.height - nonContentHeight 
     3168                        }); 
     3169        }, 
     3170         
     3171        _createShadow: function() { 
     3172                this.shadow = $('<div class="ui-widget-shadow"></div>').css('position', 'absolute').appendTo(document.body); 
     3173                this._refreshShadow(); 
     3174                return this.shadow; 
     3175        }, 
     3176         
     3177        _refreshShadow: function(dragging) { 
     3178                // IE6 is simply to slow to handle the reflow in a good way, so 
     3179                // resizing only happens on stop, and the shadow is hidden during drag/resize 
     3180                if(dragging && $.browser.msie && $.browser.version < 7) return; 
     3181                 
     3182                var offset = this.uiDialog.offset(); 
     3183                this.shadow.css({ 
     3184                        left: offset.left, 
     3185                        top: offset.top, 
     3186                        width: this.uiDialog.outerWidth(), 
     3187                        height: this.uiDialog.outerHeight() 
     3188                }); 
     3189        }, 
     3190         
     3191        _destroyShadow: function() { 
     3192                this.shadow.remove(); 
     3193                this.shadow = null; 
     3194        } 
     3195         
     3196}); 
     3197 
     3198$.extend($.ui.dialog, { 
     3199        version: "1.6rc6", 
     3200        defaults: { 
     3201                autoOpen: true, 
     3202                bgiframe: false, 
     3203                buttons: {}, 
     3204                closeOnEscape: true, 
     3205                closeText: 'close', 
     3206                draggable: true, 
     3207                height: 'auto', 
     3208                minHeight: 150, 
     3209                minWidth: 150, 
     3210                modal: false, 
     3211                position: 'center', 
     3212                resizable: true, 
     3213                shadow: true, 
     3214                stack: true, 
     3215                title: '', 
     3216                width: 300, 
     3217                zIndex: 1000 
     3218        }, 
     3219 
     3220        getter: 'isOpen', 
     3221 
     3222        uuid: 0, 
     3223 
     3224        getTitleId: function($el) { 
     3225                return 'ui-dialog-title-' + ($el.attr('id') || ++this.uuid); 
     3226        }, 
     3227 
     3228        overlay: function(dialog) { 
     3229                this.$el = $.ui.dialog.overlay.create(dialog); 
     3230        } 
     3231}); 
     3232 
     3233$.extend($.ui.dialog.overlay, { 
     3234        instances: [], 
     3235        events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), 
     3236                function(event) { return event + '.dialog-overlay'; }).join(' '), 
     3237        create: function(dialog) { 
     3238                if (this.instances.length === 0) { 
     3239                        // prevent use of anchors and inputs 
     3240                        // we use a setTimeout in case the overlay is created from an 
     3241                        // event that we're going to be cancelling (see #2804) 
     3242                        setTimeout(function() { 
     3243                                $('a, :input').bind($.ui.dialog.overlay.events, function() { 
     3244                                        // allow use of the element if inside a dialog and 
     3245                                        // - there are no modal dialogs 
     3246                                        // - there are modal dialogs, but we are in front of the topmost modal 
     3247                                        var allow = false; 
     3248                                        var $dialog = $(this).parents('.ui-dialog'); 
     3249                                        if ($dialog.length) { 
     3250                                                var $overlays = $('.ui-dialog-overlay'); 
     3251                                                if ($overlays.length) { 
     3252                                                        var maxZ = parseInt($overlays.css('z-index'), 10); 
     3253                                                        $overlays.each(function() { 
     3254                                                                maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10)); 
     3255                                                        }); 
     3256                                                        allow = parseInt($dialog.css('z-index'), 10) > maxZ; 
     3257                                                } else { 
     3258                                                        allow = true; 
     3259                                                } 
     3260                                        } 
     3261                                        return allow; 
     3262                                }); 
     3263                        }, 1); 
     3264 
     3265                        // allow closing by pressing the escape key 
     3266                        $(document).bind('keydown.dialog-overlay', function(event) { 
     3267                                (dialog.options.closeOnEscape && event.keyCode 
     3268                                                && event.keyCode == $.ui.keyCode.ESCAPE && dialog.close(event)); 
     3269                        }); 
     3270 
     3271                        // handle window resize 
     3272                        $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); 
     3273                } 
     3274 
     3275                var $el = $('<div></div>').appendTo(document.body) 
     3276                        .addClass('ui-widget-overlay').css({ 
     3277                                width: this.width(), 
     3278                                height: this.height() 
     3279                        }); 
     3280 
     3281                (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe()); 
     3282 
     3283                this.instances.push($el); 
     3284                return $el; 
     3285        }, 
     3286 
     3287        destroy: function($el) { 
     3288                this.instances.splice($.inArray(this.instances, $el), 1); 
     3289 
     3290                if (this.instances.length === 0) { 
     3291                        $('a, :input').add([document, window]).unbind('.dialog-overlay'); 
     3292                } 
     3293 
     3294                $el.remove(); 
     3295        }, 
     3296 
     3297        height: function() { 
     3298                // handle IE 6 
     3299                if ($.browser.msie && $.browser.version < 7) { 
     3300                        var scrollHeight = Math.max( 
     3301                                document.documentElement.scrollHeight, 
     3302                                document.body.scrollHeight 
     3303                        ); 
     3304                        var offsetHeight = Math.max( 
     3305                                document.documentElement.offsetHeight, 
     3306                                document.body.offsetHeight 
     3307                        ); 
     3308 
     3309                        if (scrollHeight < offsetHeight) { 
     3310                                return $(window).height() + 'px'; 
     3311                        } else { 
     3312                                return scrollHeight + 'px'; 
     3313                        } 
     3314                // handle "good" browsers 
     3315                } else { 
     3316                        return $(document).height() + 'px'; 
     3317                } 
     3318        }, 
     3319 
     3320        width: function() { 
     3321                // handle IE 6 
     3322                if ($.browser.msie && $.browser.version < 7) { 
     3323                        var scrollWidth = Math.max( 
     3324                                document.documentElement.scrollWidth, 
     3325                                document.body.scrollWidth 
     3326                        ); 
     3327                        var offsetWidth = Math.max( 
     3328                                document.documentElement.offsetWidth, 
     3329                                document.body.offsetWidth 
     3330                        ); 
     3331 
     3332                        if (scrollWidth < offsetWidth) { 
     3333                                return $(window).width() + 'px'; 
     3334                        } else { 
     3335                                return scrollWidth + 'px'; 
     3336                        } 
     3337                // handle "good" browsers 
     3338                } else { 
     3339                        return $(document).width() + 'px'; 
     3340                } 
     3341        }, 
     3342 
     3343        resize: function() { 
     3344                /* If the dialog is draggable and the user drags it past the 
     3345                 * right edge of the window, the document becomes wider so we 
     3346                 * need to stretch the overlay. If the user then drags the 
     3347                 * dialog back to the left, the document will become narrower, 
     3348                 * so we need to shrink the overlay to the appropriate size. 
     3349                 * This is handled by shrinking the overlay before setting it 
     3350                 * to the full document size. 
     3351                 */ 
     3352                var $overlays = $([]); 
     3353                $.each($.ui.dialog.overlay.instances, function() { 
     3354                        $overlays = $overlays.add(this); 
     3355                }); 
     3356 
     3357                $overlays.css({ 
     3358                        width: 0, 
     3359                        height: 0 
     3360                }).css({ 
     3361                        width: $.ui.dialog.overlay.width(), 
     3362                        height: $.ui.dialog.overlay.height() 
     3363                }); 
     3364        } 
     3365}); 
     3366 
     3367$.extend($.ui.dialog.overlay.prototype, { 
     3368        destroy: function() { 
     3369                $.ui.dialog.overlay.destroy(this.$el); 
     3370        } 
     3371}); 
     3372 
     3373})(jQuery); 
     3374]]></data></item> 
     3375<item key="id"><![CDATA[ui.dialog.js]]></item> 
     3376<item key="mandatory" type="int">0</item> 
     3377<item key="multilang" type="int">0</item> 
     3378<item key="name"><![CDATA[ui.dialog.js]]></item> 
     3379<item key="repetitive" type="int">0</item> 
     3380<item key="type"><![CDATA[resource]]></item> 
     3381</dictionary> 
     3382</item> 
     3383<item type="dictionary"><dictionary> 
     3384<item key="custom"> 
     3385<data content_type="text/x-c" filename="jcrop.js" type="file"><![CDATA[/** 
     3386 * jquery.Jcrop.js v0.9.8 
     3387 * jQuery Image Cropping Plugin 
     3388 * @author Kelly Hallman <khallman@gmail.com> 
     3389 * Copyright (c) 2008-2009 Kelly Hallman - released under MIT License {{{ 
     3390 * 
     3391 * Permission is hereby granted, free of charge, to any person 
     3392 * obtaining a copy of this software and associated documentation 
     3393 * files (the "Software"), to deal in the Software without 
     3394 * restriction, including without limitation the rights to use, 
     3395 * copy, modify, merge, publish, distribute, sublicense, and/or sell 
     3396 * copies of the Software, and to permit persons to whom the 
     3397 * Software is furnished to do so, subject to the following 
     3398 * conditions: 
     3399 
     3400 * The above copyright notice and this permission notice shall be 
     3401 * included in all copies or substantial portions of the Software. 
     3402 
     3403 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
     3404 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
     3405 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
     3406 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
     3407 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
     3408 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
     3409 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
     3410 * OTHER DEALINGS IN THE SOFTWARE. 
     3411 
     3412 * }}} 
     3413 */ 
     3414 
     3415(function($) { 
     3416 
     3417$.Jcrop = function(obj,opt) 
     3418{ 
     3419        // Initialization {{{ 
     3420 
     3421        // Sanitize some options {{{ 
     3422        var obj = obj, opt = opt; 
     3423 
     3424        if (typeof(obj) !== 'object') obj = $(obj)[0]; 
     3425        if (typeof(opt) !== 'object') opt = { }; 
     3426 
     3427        // Some on-the-fly fixes for MSIE...sigh 
     3428        if (!('trackDocument' in opt)) 
     3429        { 
     3430                opt.trackDocument = $.browser.msie ? false : true; 
     3431                if ($.browser.msie && $.browser.version.split('.')[0] == '8') 
     3432                        opt.trackDocument = true; 
     3433        } 
     3434 
     3435        if (!('keySupport' in opt)) 
     3436                        opt.keySupport = $.browser.msie ? false : true; 
     3437                 
     3438        // }}} 
     3439        // Extend the default options {{{ 
     3440        var defaults = { 
     3441 
     3442                // Basic Settings 
     3443                trackDocument:          false, 
     3444                baseClass:                      'jcrop', 
     3445                addClass:                       null, 
     3446 
     3447                // Styling Options 
     3448                bgColor:                        'black', 
     3449                bgOpacity:                      .6, 
     3450                borderOpacity:          .4, 
     3451                handleOpacity:          .5, 
     3452 
     3453                handlePad:                      5, 
     3454                handleSize:                     9, 
     3455                handleOffset:           5, 
     3456                edgeMargin:                     14, 
     3457 
     3458                aspectRatio:            0, 
     3459                keySupport:                     true, 
     3460                cornerHandles:          true, 
     3461                sideHandles:            true, 
     3462                drawBorders:            true, 
     3463                dragEdges:                      true, 
     3464 
     3465                boxWidth:                       0, 
     3466                boxHeight:                      0, 
     3467 
     3468                boundary:                       8, 
     3469                animationDelay:         20, 
     3470                swingSpeed:                     3, 
     3471 
     3472                allowSelect:            true, 
     3473                allowMove:                      true, 
     3474                allowResize:            true, 
     3475 
     3476                minSelect:                      [ 0, 0 ], 
     3477                maxSize:                        [ 0, 0 ], 
     3478                minSize:                        [ 0, 0 ], 
     3479 
     3480                // Callbacks / Event Handlers 
     3481                onChange: function() { }, 
     3482                onSelect: function() { } 
     3483 
     3484        }; 
     3485        var options = defaults; 
     3486        setOptions(opt); 
     3487 
     3488        // }}} 
     3489        // Initialize some jQuery objects {{{ 
     3490 
     3491        var $origimg = $(obj); 
     3492        var $img = $origimg.clone().removeAttr('id').css({ position: 'absolute' }); 
     3493 
     3494        $img.width($origimg.width()); 
     3495        $img.height($origimg.height()); 
     3496        $origimg.after($img).hide(); 
     3497 
     3498        presize($img,options.boxWidth,options.boxHeight); 
     3499 
     3500        var boundx = $img.width(), 
     3501                boundy = $img.height(), 
     3502 
     3503                $div = $('<div />') 
     3504                        .width(boundx).height(boundy) 
     3505                        .addClass(cssClass('holder')) 
     3506                        .css({ 
     3507                                position: 'relative', 
     3508                                backgroundColor: options.bgColor 
     3509                        }).insertAfter($origimg).append($img); 
     3510        ; 
     3511         
     3512        if (options.addClass) $div.addClass(options.addClass); 
     3513        //$img.wrap($div); 
     3514 
     3515        var $img2 = $('<img />')/*{{{*/ 
     3516                        .attr('src',$img.attr('src')) 
     3517                        .css('position','absolute') 
     3518                        .width(boundx).height(boundy) 
     3519        ;/*}}}*/ 
     3520        var $img_holder = $('<div />')/*{{{*/ 
     3521                .width(pct(100)).height(pct(100)) 
     3522                .css({ 
     3523                        zIndex: 310, 
     3524                        position: 'absolute', 
     3525                        overflow: 'hidden' 
     3526                }) 
     3527                .append($img2) 
     3528        ;/*}}}*/ 
     3529        var $hdl_holder = $('<div />')/*{{{*/ 
     3530                .width(pct(100)).height(pct(100)) 
     3531                .css('zIndex',320); 
     3532        /*}}}*/ 
     3533        var $sel = $('<div />')/*{{{*/ 
     3534                .css({ 
     3535                        position: 'absolute', 
     3536                        zIndex: 300 
     3537                }) 
     3538                .insertBefore($img) 
     3539                .append($img_holder,$hdl_holder) 
     3540        ;/*}}}*/ 
     3541 
     3542        var bound = options.boundary; 
     3543        var $trk = newTracker().width(boundx+(bound*2)).height(boundy+(bound*2)) 
     3544                .css({ position: 'absolute', top: px(-bound), left: px(-bound), zIndex: 290 }) 
     3545                .mousedown(newSelection);        
     3546         
     3547        /* }}} */ 
     3548        // Set more variables {{{ 
     3549 
     3550        var xlimit, ylimit, xmin, ymin; 
     3551        var xscale, yscale, enabled = true; 
     3552        var docOffset = getPos($img), 
     3553                // Internal states 
     3554                btndown, lastcurs, dimmed, animating, 
     3555                shift_down; 
     3556 
     3557        // }}} 
     3558                 
     3559 
     3560                // }}} 
     3561        // Internal Modules {{{ 
     3562 
     3563        var Coords = function()/*{{{*/ 
     3564        { 
     3565                var x1 = 0, y1 = 0, x2 = 0, y2 = 0, ox, oy; 
     3566 
     3567                function setPressed(pos)/*{{{*/ 
     3568                { 
     3569                        var pos = rebound(pos); 
     3570                        x2 = x1 = pos[0]; 
     3571                        y2 = y1 = pos[1]; 
     3572                }; 
     3573                /*}}}*/ 
     3574                function setCurrent(pos)/*{{{*/ 
     3575                { 
     3576                        var pos = rebound(pos); 
     3577                        ox = pos[0] - x2; 
     3578                        oy = pos[1] - y2; 
     3579                        x2 = pos[0]; 
     3580                        y2 = pos[1]; 
     3581                }; 
     3582                /*}}}*/ 
     3583                function getOffset()/*{{{*/ 
     3584                { 
     3585                        return [ ox, oy ]; 
     3586                }; 
     3587                /*}}}*/ 
     3588                function moveOffset(offset)/*{{{*/ 
     3589                { 
     3590                        var ox = offset[0], oy = offset[1]; 
     3591 
     3592                        if (0 > x1 + ox) ox -= ox + x1; 
     3593                        if (0 > y1 + oy) oy -= oy + y1; 
     3594 
     3595                        if (boundy < y2 + oy) oy += boundy - (y2 + oy); 
     3596                        if (boundx < x2 + ox) ox += boundx - (x2 + ox); 
     3597 
     3598                        x1 += ox; 
     3599                        x2 += ox; 
     3600                        y1 += oy; 
     3601                        y2 += oy; 
     3602                }; 
     3603                /*}}}*/ 
     3604                function getCorner(ord)/*{{{*/ 
     3605                { 
     3606                        var c = getFixed(); 
     3607                        switch(ord) 
     3608                        { 
     3609                                case 'ne': return [ c.x2, c.y ]; 
     3610                                case 'nw': return [ c.x, c.y ]; 
     3611                                case 'se': return [ c.x2, c.y2 ]; 
     3612                                case 'sw': return [ c.x, c.y2 ]; 
     3613                        } 
     3614                }; 
     3615                /*}}}*/ 
     3616                function getFixed()/*{{{*/ 
     3617                { 
     3618                        if (!options.aspectRatio) return getRect(); 
     3619                        // This function could use some optimization I think... 
     3620                        var aspect = options.aspectRatio, 
     3621                                min_x = options.minSize[0]/xscale,  
     3622                                min_y = options.minSize[1]/yscale, 
     3623                                max_x = options.maxSize[0]/xscale,  
     3624                                max_y = options.maxSize[1]/yscale, 
     3625                                rw = x2 - x1, 
     3626                                rh = y2 - y1, 
     3627                                rwa = Math.abs(rw), 
     3628                                rha = Math.abs(rh), 
     3629                                real_ratio = rwa / rha, 
     3630                                xx, yy 
     3631                        ; 
     3632                        if (max_x == 0) { max_x = boundx * 10 } 
     3633                        if (max_y == 0) { max_y = boundy * 10 } 
     3634                        if (real_ratio < aspect) 
     3635                        { 
     3636                                yy = y2; 
     3637                                w = rha * aspect; 
     3638                                xx = rw < 0 ? x1 - w : w + x1; 
     3639 
     3640                                if (xx < 0) 
     3641                                { 
     3642                                        xx = 0; 
     3643                                        h = Math.abs((xx - x1) / aspect); 
     3644                                        yy = rh < 0 ? y1 - h: h + y1; 
     3645                                } 
     3646                                else if (xx > boundx) 
     3647                                { 
     3648                                        xx = boundx; 
     3649                                        h = Math.abs((xx - x1) / aspect); 
     3650                                        yy = rh < 0 ? y1 - h : h + y1; 
     3651                                } 
     3652                        } 
     3653                        else 
     3654                        { 
     3655                                xx = x2; 
     3656                                h = rwa / aspect; 
     3657                                yy = rh < 0 ? y1 - h : y1 + h; 
     3658                                if (yy < 0) 
     3659                                { 
     3660                                        yy = 0; 
     3661                                        w = Math.abs((yy - y1) * aspect); 
     3662                                        xx = rw < 0 ? x1 - w : w + x1; 
     3663                                } 
     3664                                else if (yy > boundy) 
     3665                                { 
     3666                                        yy = boundy; 
     3667                                        w = Math.abs(yy - y1) * aspect; 
     3668                                        xx = rw < 0 ? x1 - w : w + x1; 
     3669                                } 
     3670                        } 
     3671 
     3672                        // Magic %-) 
     3673                        if(xx > x1) { // right side 
     3674                          if(xx - x1 < min_x) { 
     3675                                xx = x1 + min_x; 
     3676                          } else if (xx - x1 > max_x) { 
     3677                                xx = x1 + max_x; 
     3678                          } 
     3679                          if(yy > y1) { 
     3680                                yy = y1 + (xx - x1)/aspect; 
     3681                          } else { 
     3682                                yy = y1 - (xx - x1)/aspect; 
     3683                          } 
     3684                        } else if (xx < x1) { // left side 
     3685                          if(x1 - xx < min_x) { 
     3686                                xx = x1 - min_x 
     3687                          } else if (x1 - xx > max_x) { 
     3688                                xx = x1 - max_x; 
     3689                          } 
     3690                          if(yy > y1) { 
     3691                                yy = y1 + (x1 - xx)/aspect; 
     3692                          } else { 
     3693                                yy = y1 - (x1 - xx)/aspect; 
     3694                          } 
     3695                        } 
     3696 
     3697                        if(xx < 0) { 
     3698                                x1 -= xx; 
     3699                                xx = 0; 
     3700                        } else  if (xx > boundx) { 
     3701                                x1 -= xx - boundx; 
     3702                                xx = boundx; 
     3703                        } 
     3704 
     3705                        if(yy < 0) { 
     3706                                y1 -= yy; 
     3707                                yy = 0; 
     3708                        } else  if (yy > boundy) { 
     3709                                y1 -= yy - boundy; 
     3710                                yy = boundy; 
     3711                        } 
     3712 
     3713                        return last = makeObj(flipCoords(x1,y1,xx,yy)); 
     3714                }; 
     3715                /*}}}*/ 
     3716                function rebound(p)/*{{{*/ 
     3717                { 
     3718                        if (p[0] < 0) p[0] = 0; 
     3719                        if (p[1] < 0) p[1] = 0; 
     3720 
     3721                        if (p[0] > boundx) p[0] = boundx; 
     3722                        if (p[1] > boundy) p[1] = boundy; 
     3723 
     3724                        return [ p[0], p[1] ]; 
     3725                }; 
     3726                /*}}}*/ 
     3727                function flipCoords(x1,y1,x2,y2)/*{{{*/ 
     3728                { 
     3729                        var xa = x1, xb = x2, ya = y1, yb = y2; 
     3730                        if (x2 < x1) 
     3731                        { 
     3732                                xa = x2; 
     3733                                xb = x1; 
     3734                        } 
     3735                        if (y2 < y1) 
     3736                        { 
     3737                                ya = y2; 
     3738                                yb = y1; 
     3739                        } 
     3740                        return [ Math.round(xa), Math.round(ya), Math.round(xb), Math.round(yb) ]; 
     3741                }; 
     3742                /*}}}*/ 
     3743                function getRect()/*{{{*/ 
     3744                { 
     3745                        var xsize = x2 - x1; 
     3746                        var ysize = y2 - y1; 
     3747 
     3748                        if (xlimit && (Math.abs(xsize) > xlimit)) 
     3749                                x2 = (xsize > 0) ? (x1 + xlimit) : (x1 - xlimit); 
     3750                        if (ylimit && (Math.abs(ysize) > ylimit)) 
     3751                                y2 = (ysize > 0) ? (y1 + ylimit) : (y1 - ylimit); 
     3752 
     3753                        if (ymin && (Math.abs(ysize) < ymin)) 
     3754                                y2 = (ysize > 0) ? (y1 + ymin) : (y1 - ymin); 
     3755                        if (xmin && (Math.abs(xsize) < xmin)) 
     3756                                x2 = (xsize > 0) ? (x1 + xmin) : (x1 - xmin); 
     3757 
     3758                        if (x1 < 0) { x2 -= x1; x1 -= x1; } 
     3759                        if (y1 < 0) { y2 -= y1; y1 -= y1; } 
     3760                        if (x2 < 0) { x1 -= x2; x2 -= x2; } 
     3761                        if (y2 < 0) { y1 -= y2; y2 -= y2; } 
     3762                        if (x2 > boundx) { var delta = x2 - boundx; x1 -= delta; x2 -= delta; } 
     3763                        if (y2 > boundy) { var delta = y2 - boundy; y1 -= delta; y2 -= delta; } 
     3764                        if (x1 > boundx) { var delta = x1 - boundy; y2 -= delta; y1 -= delta; } 
     3765                        if (y1 > boundy) { var delta = y1 - boundy; y2 -= delta; y1 -= delta; } 
     3766 
     3767                        return makeObj(flipCoords(x1,y1,x2,y2)); 
     3768                }; 
     3769                /*}}}*/ 
     3770                function makeObj(a)/*{{{*/ 
     3771                { 
     3772                        return { x: a[0], y: a[1], x2: a[2], y2: a[3], 
     3773                                w: a[2] - a[0], h: a[3] - a[1] }; 
     3774                }; 
     3775                /*}}}*/ 
     3776 
     3777                return { 
     3778                        flipCoords: flipCoords, 
     3779                        setPressed: setPressed, 
     3780                        setCurrent: setCurrent, 
     3781                        getOffset: getOffset, 
     3782                        moveOffset: moveOffset, 
     3783                        getCorner: getCorner, 
     3784                        getFixed: getFixed 
     3785                }; 
     3786        }(); 
     3787 
     3788        /*}}}*/ 
     3789        var Selection = function()/*{{{*/ 
     3790        { 
     3791                var start, end, dragmode, awake, hdep = 370; 
     3792                var borders = { }; 
     3793                var handle = { }; 
     3794                var seehandles = false; 
     3795                var hhs = options.handleOffset; 
     3796 
     3797                /* Insert draggable elements {{{*/ 
     3798 
     3799                // Insert border divs for outline 
     3800                if (options.drawBorders) { 
     3801                        borders = { 
     3802                                        top: insertBorder('hline') 
     3803                                                .css('top',$.browser.msie?px(-1):px(0)), 
     3804                                        bottom: insertBorder('hline'), 
     3805                                        left: insertBorder('vline'), 
     3806                                        right: insertBorder('vline') 
     3807                        }; 
     3808                } 
     3809 
     3810                // Insert handles on edges 
     3811                if (options.dragEdges) { 
     3812                        handle.t = insertDragbar('n'); 
     3813                        handle.b = insertDragbar('s'); 
     3814                        handle.r = insertDragbar('e'); 
     3815                        handle.l = insertDragbar('w'); 
     3816                } 
     3817 
     3818                // Insert side handles 
     3819                options.sideHandles && 
     3820                        createHandles(['n','s','e','w']); 
     3821 
     3822                // Insert corner handles 
     3823                options.cornerHandles && 
     3824                        createHandles(['sw','nw','ne','se']); 
     3825 
     3826                /*}}}*/ 
     3827                // Private Methods 
     3828                function insertBorder(type)/*{{{*/ 
     3829                { 
     3830                        var jq = $('<div />') 
     3831                                .css({position: 'absolute', opacity: options.borderOpacity }) 
     3832                                .addClass(cssClass(type)); 
     3833                        $img_holder.append(jq); 
     3834                        return jq; 
     3835                }; 
     3836                /*}}}*/ 
     3837                function dragDiv(ord,zi)/*{{{*/ 
     3838                { 
     3839                        var jq = $('<div />') 
     3840                                .mousedown(createDragger(ord)) 
     3841                                .css({ 
     3842                                        cursor: ord+'-resize', 
     3843                                        position: 'absolute', 
     3844                                        zIndex: zi  
     3845                                }) 
     3846                        ; 
     3847                        $hdl_holder.append(jq); 
     3848                        return jq; 
     3849                }; 
     3850                /*}}}*/ 
     3851                function insertHandle(ord)/*{{{*/ 
     3852                { 
     3853                        return dragDiv(ord,hdep++) 
     3854                                .css({ top: px(-hhs+1), left: px(-hhs+1), opacity: options.handleOpacity }) 
     3855                                .addClass(cssClass('handle')); 
     3856                }; 
     3857                /*}}}*/ 
     3858                function insertDragbar(ord)/*{{{*/ 
     3859                { 
     3860                        var s = options.handleSize, 
     3861                                o = hhs, 
     3862                                h = s, w = s, 
     3863                                t = o, l = o; 
     3864 
     3865                        switch(ord) 
     3866                        { 
     3867                                case 'n': case 's': w = pct(100); break; 
     3868                                case 'e': case 'w': h = pct(100); break; 
     3869                        } 
     3870 
     3871                        return dragDiv(ord,hdep++).width(w).height(h) 
     3872                                .css({ top: px(-t+1), left: px(-l+1)}); 
     3873                }; 
     3874                /*}}}*/ 
     3875                function createHandles(li)/*{{{*/ 
     3876                { 
     3877                        for(i in li) handle[li[i]] = insertHandle(li[i]); 
     3878                }; 
     3879                /*}}}*/ 
     3880                function moveHandles(c)/*{{{*/ 
     3881                { 
     3882                        var midvert  = Math.round((c.h / 2) - hhs), 
     3883                                midhoriz = Math.round((c.w / 2) - hhs), 
     3884                                north = west = -hhs+1, 
     3885                                east = c.w - hhs, 
     3886                                south = c.h - hhs, 
     3887                                x, y; 
     3888 
     3889                        'e' in handle && 
     3890                                handle.e.css({ top: px(midvert), left: px(east) }) && 
     3891                                handle.w.css({ top: px(midvert) }) && 
     3892                                handle.s.css({ top: px(south), left: px(midhoriz) }) && 
     3893                                handle.n.css({ left: px(midhoriz) }); 
     3894 
     3895                        'ne' in handle && 
     3896                                handle.ne.css({ left: px(east) }) && 
     3897                                handle.se.css({ top: px(south), left: px(east) }) && 
     3898                                handle.sw.css({ top: px(south) }); 
     3899 
     3900                        'b' in handle && 
     3901                                handle.b.css({ top: px(south) }) && 
     3902                                handle.r.css({ left: px(east) }); 
     3903                }; 
     3904                /*}}}*/ 
     3905                function moveto(x,y)/*{{{*/ 
     3906                { 
     3907                        $img2.css({ top: px(-y), left: px(-x) }); 
     3908                        $sel.css({ top: px(y), left: px(x) }); 
     3909                }; 
     3910                /*}}}*/ 
     3911                function resize(w,h)/*{{{*/ 
     3912                { 
     3913                        $sel.width(w).height(h); 
     3914                }; 
     3915                /*}}}*/ 
     3916                function refresh()/*{{{*/ 
     3917                { 
     3918                        var c = Coords.getFixed(); 
     3919 
     3920                        Coords.setPressed([c.x,c.y]); 
     3921                        Coords.setCurrent([c.x2,c.y2]); 
     3922 
     3923                        updateVisible(); 
     3924                }; 
     3925                /*}}}*/ 
     3926 
     3927                // Internal Methods 
     3928                function updateVisible()/*{{{*/ 
     3929                        { if (awake) return update(); }; 
     3930                /*}}}*/ 
     3931                function update()/*{{{*/ 
     3932                { 
     3933                        var c = Coords.getFixed(); 
     3934 
     3935                        resize(c.w,c.h); 
     3936                        moveto(c.x,c.y); 
     3937 
     3938                        options.drawBorders && 
     3939                                borders['right'].css({ left: px(c.w-1) }) && 
     3940                                        borders['bottom'].css({ top: px(c.h-1) }); 
     3941 
     3942                        seehandles && moveHandles(c); 
     3943                        awake || show(); 
     3944 
     3945                        options.onChange(unscale(c)); 
     3946                }; 
     3947                /*}}}*/ 
     3948                function show()/*{{{*/ 
     3949                { 
     3950                        $sel.show(); 
     3951                        $img.css('opacity',options.bgOpacity); 
     3952                        awake = true; 
     3953                }; 
     3954                /*}}}*/ 
     3955                function release()/*{{{*/ 
     3956                { 
     3957                        disableHandles(); 
     3958                        $sel.hide(); 
     3959                        $img.css('opacity',1); 
     3960                        awake = false; 
     3961                }; 
     3962                /*}}}*/ 
     3963                function showHandles()//{{{ 
     3964                { 
     3965                        if (seehandles) 
     3966                        { 
     3967                                moveHandles(Coords.getFixed()); 
     3968                                $hdl_holder.show(); 
     3969                        } 
     3970                }; 
     3971                //}}} 
     3972                function enableHandles()/*{{{*/ 
     3973                {  
     3974                        seehandles = true; 
     3975                        if (options.allowResize) 
     3976                        { 
     3977                                moveHandles(Coords.getFixed()); 
     3978                                $hdl_holder.show(); 
     3979                                return true; 
     3980                        } 
     3981                }; 
     3982                /*}}}*/ 
     3983                function disableHandles()/*{{{*/ 
     3984                { 
     3985                        seehandles = false; 
     3986                        $hdl_holder.hide(); 
     3987                }; 
     3988                /*}}}*/ 
     3989                function animMode(v)/*{{{*/ 
     3990                { 
     3991                        (animating = v) ? disableHandles(): enableHandles(); 
     3992                }; 
     3993                /*}}}*/ 
     3994                function done()/*{{{*/ 
     3995                { 
     3996                        animMode(false); 
     3997                        refresh(); 
     3998                }; 
     3999                /*}}}*/ 
     4000 
     4001                var $track = newTracker().mousedown(createDragger('move')) 
     4002                                .css({ cursor: 'move', position: 'absolute', zIndex: 360 }) 
     4003 
     4004                $img_holder.append($track); 
     4005                disableHandles(); 
     4006 
     4007                return { 
     4008                        updateVisible: updateVisible, 
     4009                        update: update, 
     4010                        release: release, 
     4011                        refresh: refresh, 
     4012                        setCursor: function (cursor) { $track.css('cursor',cursor); }, 
     4013                        enableHandles: enableHandles, 
     4014                        enableOnly: function() { seehandles = true; }, 
     4015                        showHandles: showHandles, 
     4016                        disableHandles: disableHandles, 
     4017                        animMode: animMode, 
     4018                        done: done 
     4019                }; 
     4020        }(); 
     4021        /*}}}*/ 
     4022        var Tracker = function()/*{{{*/ 
     4023        { 
     4024                var onMove              = function() { }, 
     4025                        onDone          = function() { }, 
     4026                        trackDoc        = options.trackDocument; 
     4027 
     4028                if (!trackDoc) 
     4029                { 
     4030                        $trk 
     4031                                .mousemove(trackMove) 
     4032                                .mouseup(trackUp) 
     4033                                .mouseout(trackUp) 
     4034                        ; 
     4035                } 
     4036 
     4037                function toFront()/*{{{*/ 
     4038                { 
     4039                        $trk.css({zIndex:450}); 
     4040                        if (trackDoc) 
     4041                        { 
     4042                                $(document) 
     4043                                        .mousemove(trackMove) 
     4044                                        .mouseup(trackUp) 
     4045                                ; 
     4046                        } 
     4047                } 
     4048                /*}}}*/ 
     4049                function toBack()/*{{{*/ 
     4050                { 
     4051                        $trk.css({zIndex:290}); 
     4052                        if (trackDoc) 
     4053                        { 
     4054                                $(document) 
     4055                                        .unbind('mousemove',trackMove) 
     4056                                        .unbind('mouseup',trackUp) 
     4057                                ; 
     4058                        } 
     4059                } 
     4060                /*}}}*/ 
     4061                function trackMove(e)/*{{{*/ 
     4062                { 
     4063                        onMove(mouseAbs(e)); 
     4064                }; 
     4065                /*}}}*/ 
     4066                function trackUp(e)/*{{{*/ 
     4067                { 
     4068                        e.preventDefault(); 
     4069                        e.stopPropagation(); 
     4070 
     4071                        if (btndown) 
     4072                        { 
     4073                                btndown = false; 
     4074 
     4075                                onDone(mouseAbs(e)); 
     4076                                options.onSelect(unscale(Coords.getFixed())); 
     4077                                toBack(); 
     4078                                onMove = function() { }; 
     4079                                onDone = function() { }; 
     4080                        } 
     4081 
     4082                        return false; 
     4083                }; 
     4084                /*}}}*/ 
     4085 
     4086                function activateHandlers(move,done)/* {{{ */ 
     4087                { 
     4088                        btndown = true; 
     4089                        onMove = move; 
     4090                        onDone = done; 
     4091                        toFront(); 
     4092                        return false; 
     4093                }; 
     4094                /* }}} */ 
     4095 
     4096                function setCursor(t) { $trk.css('cursor',t); }; 
     4097 
     4098                $img.before($trk); 
     4099                return { 
     4100                        activateHandlers: activateHandlers, 
     4101                        setCursor: setCursor 
     4102                }; 
     4103        }(); 
     4104        /*}}}*/ 
     4105        var KeyManager = function()/*{{{*/ 
     4106        { 
     4107                var $keymgr = $('<input type="radio" />') 
     4108                                .css({ position: 'absolute', left: '-30px' }) 
     4109                                .keypress(parseKey) 
     4110                                .blur(onBlur), 
     4111 
     4112                        $keywrap = $('<div />') 
     4113                                .css({ 
     4114                                        position: 'absolute', 
     4115                                        overflow: 'hidden' 
     4116                                }) 
     4117                                .append($keymgr) 
     4118                ; 
     4119 
     4120                function watchKeys()/*{{{*/ 
     4121                { 
     4122                        if (options.keySupport) 
     4123                        { 
     4124                                $keymgr.show(); 
     4125                                $keymgr.focus(); 
     4126                        } 
     4127                }; 
     4128                /*}}}*/ 
     4129                function onBlur(e)/*{{{*/ 
     4130                { 
     4131                        $keymgr.hide(); 
     4132                }; 
     4133                /*}}}*/ 
     4134                function doNudge(e,x,y)/*{{{*/ 
     4135                { 
     4136                        if (options.allowMove) { 
     4137                                Coords.moveOffset([x,y]); 
     4138                                Selection.updateVisible(); 
     4139                        }; 
     4140                        e.preventDefault(); 
     4141                        e.stopPropagation(); 
     4142                }; 
     4143                /*}}}*/ 
     4144                function parseKey(e)/*{{{*/ 
     4145                { 
     4146                        if (e.ctrlKey) return true; 
     4147                        shift_down = e.shiftKey ? true : false; 
     4148                        var nudge = shift_down ? 10 : 1; 
     4149                        switch(e.keyCode) 
     4150                        { 
     4151                                case 37: doNudge(e,-nudge,0); break; 
     4152                                case 39: doNudge(e,nudge,0); break; 
     4153                                case 38: doNudge(e,0,-nudge); break; 
     4154                                case 40: doNudge(e,0,nudge); break; 
     4155 
     4156                                case 27: Selection.release(); break; 
     4157 
     4158                                case 9: return true; 
     4159                        } 
     4160 
     4161                        return nothing(e); 
     4162                }; 
     4163                /*}}}*/ 
     4164                 
     4165                if (options.keySupport) $keywrap.insertBefore($img); 
     4166                return { 
     4167                        watchKeys: watchKeys 
     4168                }; 
     4169        }(); 
     4170        /*}}}*/ 
     4171 
     4172        // }}} 
     4173        // Internal Methods {{{ 
     4174 
     4175        function px(n) { return '' + parseInt(n) + 'px'; }; 
     4176        function pct(n) { return '' + parseInt(n) + '%'; }; 
     4177        function cssClass(cl) { return options.baseClass + '-' + cl; }; 
     4178        function getPos(obj)/*{{{*/ 
     4179        { 
     4180                // Updated in v0.9.4 to use built-in dimensions plugin 
     4181                var pos = $(obj).offset(); 
     4182                return [ pos.left, pos.top ]; 
     4183        }; 
     4184        /*}}}*/ 
     4185        function mouseAbs(e)/*{{{*/ 
     4186        { 
     4187                return [ (e.pageX - docOffset[0]), (e.pageY - docOffset[1]) ]; 
     4188        }; 
     4189        /*}}}*/ 
     4190        function myCursor(type)/*{{{*/ 
     4191        { 
     4192                if (type != lastcurs) 
     4193                { 
     4194                        Tracker.setCursor(type); 
     4195                        //Handles.xsetCursor(type); 
     4196                        lastcurs = type; 
     4197                } 
     4198        }; 
     4199        /*}}}*/ 
     4200        function startDragMode(mode,pos)/*{{{*/ 
     4201        { 
     4202                docOffset = getPos($img); 
     4203                Tracker.setCursor(mode=='move'?mode:mode+'-resize'); 
     4204 
     4205                if (mode == 'move') 
     4206                        return Tracker.activateHandlers(createMover(pos), doneSelect); 
     4207 
     4208                var fc = Coords.getFixed(); 
     4209                var opp = oppLockCorner(mode); 
     4210                var opc = Coords.getCorner(oppLockCorner(opp)); 
     4211 
     4212                Coords.setPressed(Coords.getCorner(opp)); 
     4213                Coords.setCurrent(opc); 
     4214 
     4215                Tracker.activateHandlers(dragmodeHandler(mode,fc),doneSelect); 
     4216        }; 
     4217        /*}}}*/ 
     4218        function dragmodeHandler(mode,f)/*{{{*/ 
     4219        { 
     4220                return function(pos) { 
     4221                        if (!options.aspectRatio) switch(mode) 
     4222                        { 
     4223                                case 'e': pos[1] = f.y2; break; 
     4224                                case 'w': pos[1] = f.y2; break; 
     4225                                case 'n': pos[0] = f.x2; break; 
     4226                                case 's': pos[0] = f.x2; break; 
     4227                        } 
     4228                        else switch(mode) 
     4229                        { 
     4230                                case 'e': pos[1] = f.y+1; break; 
     4231                                case 'w': pos[1] = f.y+1; break; 
     4232                                case 'n': pos[0] = f.x+1; break; 
     4233                                case 's': pos[0] = f.x+1; break; 
     4234                        } 
     4235                        Coords.setCurrent(pos); 
     4236                        Selection.update(); 
     4237                }; 
     4238        }; 
     4239        /*}}}*/ 
     4240        function createMover(pos)/*{{{*/ 
     4241        { 
     4242                var lloc = pos; 
     4243                KeyManager.watchKeys(); 
     4244 
     4245                return function(pos) 
     4246                { 
     4247                        Coords.moveOffset([pos[0] - lloc[0], pos[1] - lloc[1]]); 
     4248                        lloc = pos; 
     4249                         
     4250                        Selection.update(); 
     4251                }; 
     4252        }; 
     4253        /*}}}*/ 
     4254        function oppLockCorner(ord)/*{{{*/ 
     4255        { 
     4256                switch(ord) 
     4257                { 
     4258                        case 'n': return 'sw'; 
     4259                        case 's': return 'nw'; 
     4260                        case 'e': return 'nw'; 
     4261                        case 'w': return 'ne'; 
     4262                        case 'ne': return 'sw'; 
     4263                        case 'nw': return 'se'; 
     4264                        case 'se': return 'nw'; 
     4265                        case 'sw': return 'ne'; 
     4266                }; 
     4267        }; 
     4268        /*}}}*/ 
     4269        function createDragger(ord)/*{{{*/ 
     4270        { 
     4271                return function(e) { 
     4272                        if (options.disabled) return false; 
     4273                        if ((ord == 'move') && !options.allowMove) return false; 
     4274                        btndown = true; 
     4275                        startDragMode(ord,mouseAbs(e)); 
     4276                        e.stopPropagation(); 
     4277                        e.preventDefault(); 
     4278                        return false; 
     4279                }; 
     4280        }; 
     4281        /*}}}*/ 
     4282        function presize($obj,w,h)/*{{{*/ 
     4283        { 
     4284                var nw = $obj.width(), nh = $obj.height(); 
     4285                if ((nw > w) && w > 0) 
     4286                { 
     4287                        nw = w; 
     4288                        nh = (w/$obj.width()) * $obj.height(); 
     4289                } 
     4290                if ((nh > h) && h > 0) 
     4291                { 
     4292                        nh = h; 
     4293                        nw = (h/$obj.height()) * $obj.width(); 
     4294                } 
     4295                xscale = $obj.width() / nw; 
     4296                yscale = $obj.height() / nh; 
     4297                $obj.width(nw).height(nh); 
     4298        }; 
     4299        /*}}}*/ 
     4300        function unscale(c)/*{{{*/ 
     4301        { 
     4302                return { 
     4303                        x: parseInt(c.x * xscale), y: parseInt(c.y * yscale),  
     4304                        x2: parseInt(c.x2 * xscale), y2: parseInt(c.y2 * yscale),  
     4305                        w: parseInt(c.w * xscale), h: parseInt(c.h * yscale) 
     4306                }; 
     4307        }; 
     4308        /*}}}*/ 
     4309        function doneSelect(pos)/*{{{*/ 
     4310        { 
     4311                var c = Coords.getFixed(); 
     4312                if (c.w > options.minSelect[0] && c.h > options.minSelect[1]) 
     4313                { 
     4314                        Selection.enableHandles(); 
     4315                        Selection.done(); 
     4316                } 
     4317                else 
     4318                { 
     4319                        Selection.release(); 
     4320                } 
     4321                Tracker.setCursor( options.allowSelect?'crosshair':'default' ); 
     4322        }; 
     4323        /*}}}*/ 
     4324        function newSelection(e)/*{{{*/ 
     4325        { 
     4326                if (options.disabled) return false; 
     4327                if (!options.allowSelect) return false; 
     4328                btndown = true; 
     4329                docOffset = getPos($img); 
     4330                Selection.disableHandles(); 
     4331                myCursor('crosshair'); 
     4332                var pos = mouseAbs(e); 
     4333                Coords.setPressed(pos); 
     4334                Tracker.activateHandlers(selectDrag,doneSelect); 
     4335                KeyManager.watchKeys(); 
     4336                Selection.update(); 
     4337 
     4338                e.stopPropagation(); 
     4339                e.preventDefault(); 
     4340                return false; 
     4341        }; 
     4342        /*}}}*/ 
     4343        function selectDrag(pos)/*{{{*/ 
     4344        { 
     4345                Coords.setCurrent(pos); 
     4346                Selection.update(); 
     4347        }; 
     4348        /*}}}*/ 
     4349        function newTracker() 
     4350        { 
     4351                var trk = $('<div></div>').addClass(cssClass('tracker')); 
     4352                $.browser.msie && trk.css({ opacity: 0, backgroundColor: 'white' }); 
     4353                return trk; 
     4354        }; 
     4355 
     4356        // }}} 
     4357        // API methods {{{ 
     4358                 
     4359        function animateTo(a)/*{{{*/ 
     4360        { 
     4361                var x1 = a[0] / xscale, 
     4362                        y1 = a[1] / yscale, 
     4363                        x2 = a[2] / xscale, 
     4364                        y2 = a[3] / yscale; 
     4365 
     4366                if (animating) return; 
     4367 
     4368                var animto = Coords.flipCoords(x1,y1,x2,y2); 
     4369                var c = Coords.getFixed(); 
     4370                var animat = initcr = [ c.x, c.y, c.x2, c.y2 ]; 
     4371                var interv = options.animationDelay; 
     4372 
     4373                var x = animat[0]; 
     4374                var y = animat[1]; 
     4375                var x2 = animat[2]; 
     4376                var y2 = animat[3]; 
     4377                var ix1 = animto[0] - initcr[0]; 
     4378                var iy1 = animto[1] - initcr[1]; 
     4379                var ix2 = animto[2] - initcr[2]; 
     4380                var iy2 = animto[3] - initcr[3]; 
     4381                var pcent = 0; 
     4382                var velocity = options.swingSpeed; 
     4383 
     4384                Selection.animMode(true); 
     4385 
     4386                var animator = function() 
     4387                { 
     4388                        return function() 
     4389                        { 
     4390                                pcent += (100 - pcent) / velocity; 
     4391 
     4392                                animat[0] = x + ((pcent / 100) * ix1); 
     4393                                animat[1] = y + ((pcent / 100) * iy1); 
     4394                                animat[2] = x2 + ((pcent / 100) * ix2); 
     4395                                animat[3] = y2 + ((pcent / 100) * iy2); 
     4396 
     4397                                if (pcent < 100) animateStart(); 
     4398                                        else Selection.done(); 
     4399 
     4400                                if (pcent >= 99.8) pcent = 100; 
     4401 
     4402                                setSelectRaw(animat); 
     4403                        }; 
     4404                }(); 
     4405 
     4406                function animateStart() 
     4407                        { window.setTimeout(animator,interv); }; 
     4408 
     4409                animateStart(); 
     4410        }; 
     4411        /*}}}*/ 
     4412        function setSelect(rect)//{{{ 
     4413        { 
     4414                setSelectRaw([rect[0]/xscale,rect[1]/yscale,rect[2]/xscale,rect[3]/yscale]); 
     4415        }; 
     4416        //}}} 
     4417        function setSelectRaw(l) /*{{{*/ 
     4418        { 
     4419                Coords.setPressed([l[0],l[1]]); 
     4420                Coords.setCurrent([l[2],l[3]]); 
     4421                Selection.update(); 
     4422        }; 
     4423        /*}}}*/ 
     4424        function setOptions(opt)/*{{{*/ 
     4425        { 
     4426                if (typeof(opt) != 'object') opt = { }; 
     4427                options = $.extend(options,opt); 
     4428 
     4429                if (typeof(options.onChange)!=='function') 
     4430                        options.onChange = function() { }; 
     4431 
     4432                if (typeof(options.onSelect)!=='function') 
     4433                        options.onSelect = function() { }; 
     4434 
     4435        }; 
     4436        /*}}}*/ 
     4437        function tellSelect()/*{{{*/ 
     4438        { 
     4439                return unscale(Coords.getFixed()); 
     4440        }; 
     4441        /*}}}*/ 
     4442        function tellScaled()/*{{{*/ 
     4443        { 
     4444                return Coords.getFixed(); 
     4445        }; 
     4446        /*}}}*/ 
     4447        function setOptionsNew(opt)/*{{{*/ 
     4448        { 
     4449                setOptions(opt); 
     4450                interfaceUpdate(); 
     4451        }; 
     4452        /*}}}*/ 
     4453        function disableCrop()//{{{ 
     4454        { 
     4455                options.disabled = true; 
     4456                Selection.disableHandles(); 
     4457                Selection.setCursor('default'); 
     4458                Tracker.setCursor('default'); 
     4459        }; 
     4460        //}}} 
     4461        function enableCrop()//{{{ 
     4462        { 
     4463                options.disabled = false; 
     4464                interfaceUpdate(); 
     4465        }; 
     4466        //}}} 
     4467        function cancelCrop()//{{{ 
     4468        { 
     4469                Selection.done(); 
     4470                Tracker.activateHandlers(null,null); 
     4471        }; 
     4472        //}}} 
     4473        function destroy()//{{{ 
     4474        { 
     4475                $div.remove(); 
     4476                $origimg.show(); 
     4477        }; 
     4478        //}}} 
     4479 
     4480        function interfaceUpdate(alt)//{{{ 
     4481        // This method tweaks the interface based on options object. 
     4482        // Called when options are changed and at end of initialization. 
     4483        { 
     4484                options.allowResize ? 
     4485                        alt?Selection.enableOnly():Selection.enableHandles(): 
     4486                        Selection.disableHandles(); 
     4487 
     4488                Tracker.setCursor( options.allowSelect? 'crosshair': 'default' ); 
     4489                Selection.setCursor( options.allowMove? 'move': 'default' ); 
     4490 
     4491                $div.css('backgroundColor',options.bgColor); 
     4492 
     4493                if ('setSelect' in options) { 
     4494                        setSelect(opt.setSelect); 
     4495                        Selection.done(); 
     4496                        delete(options.setSelect); 
     4497                } 
     4498 
     4499                if ('trueSize' in options) { 
     4500                        xscale = options.trueSize[0] / boundx; 
     4501                        yscale = options.trueSize[1] / boundy; 
     4502                } 
     4503 
     4504                xlimit = options.maxSize[0] || 0; 
     4505                ylimit = options.maxSize[1] || 0; 
     4506                xmin = options.minSize[0] || 0; 
     4507                ymin = options.minSize[1] || 0; 
     4508 
     4509                if ('outerImage' in options) 
     4510                { 
     4511                        $img.attr('src',options.outerImage); 
     4512                        delete(options.outerImage); 
     4513                } 
     4514 
     4515                Selection.refresh(); 
     4516        }; 
     4517        //}}} 
     4518 
     4519        // }}} 
     4520 
     4521        $hdl_holder.hide(); 
     4522        interfaceUpdate(true); 
     4523         
     4524        var api = { 
     4525                animateTo: animateTo, 
     4526                setSelect: setSelect, 
     4527                setOptions: setOptionsNew, 
     4528                tellSelect: tellSelect, 
     4529                tellScaled: tellScaled, 
     4530 
     4531                disable: disableCrop, 
     4532                enable: enableCrop, 
     4533                cancel: cancelCrop, 
     4534 
     4535                focus: KeyManager.watchKeys, 
     4536 
     4537                getBounds: function() { return [ boundx * xscale, boundy * yscale ]; }, 
     4538                getWidgetSize: function() { return [ boundx, boundy ]; }, 
     4539 
     4540                release: Selection.release, 
     4541                destroy: destroy 
     4542 
     4543        }; 
     4544 
     4545        $origimg.data('Jcrop',api); 
     4546        return api; 
     4547}; 
     4548 
     4549$.fn.Jcrop = function(options)/*{{{*/ 
     4550{ 
     4551        function attachWhenDone(from)/*{{{*/ 
     4552        { 
     4553                var loadsrc = options.useImg || from.src; 
     4554                var img = new Image(); 
     4555                img.onload = function() { $.Jcrop(from,options); }; 
     4556                img.src = loadsrc; 
     4557        }; 
     4558        /*}}}*/ 
     4559        if (typeof(options) !== 'object') options = { }; 
     4560 
     4561        // Iterate over each object, attach Jcrop 
     4562        this.each(function() 
     4563        { 
     4564                // If we've already attached to this object 
     4565                if ($(this).data('Jcrop')) 
     4566                { 
     4567                        // The API can be requested this way (undocumented) 
     4568                        if (options == 'api') return $(this).data('Jcrop'); 
     4569                        // Otherwise, we just reset the options... 
     4570                        else $(this).data('Jcrop').setOptions(options); 
     4571                } 
     4572                // If we haven't been attached, preload and attach 
     4573                else attachWhenDone(this); 
     4574        }); 
     4575 
     4576        // Return "this" so we're chainable a la jQuery plugin-style! 
     4577        return this; 
     4578}; 
     4579/*}}}*/ 
     4580 
     4581})(jQuery); 
     4582]]></data></item> 
     4583<item key="id"><![CDATA[jcrop.js]]></item> 
     4584<item key="mandatory" type="int">0</item> 
     4585<item key="multilang" type="int">0</item> 
     4586<item key="name"><![CDATA[jcrop.js]]></item> 
     4587<item key="repetitive" type="int">0</item> 
     4588<item key="type"><![CDATA[resource]]></item> 
     4589</dictionary> 
     4590</item> 
     4591<item type="dictionary"><dictionary> 
     4592<item key="custom"> 
     4593<data content_type="text/x-c" filename="handleImageImport.js" type="file"><![CDATA[var temp_crop_api                            = null; 
     4594var temp_crop_items                     = null; 
     4595var temp_item_max_count = 0; 
     4596var temp_items_handled  = false; 
     4597var temp_resize_items   = null; 
     4598 
     4599var $temp_crop          = null; 
     4600var $temp_dialog        = null; 
     4601var $temp_form          = null; 
     4602var $temp_table         = null; 
     4603 
     4604function changeDimensionSettings(ignore_settings) 
     4605{ 
     4606        var temp_icon                   = null; 
     4607        var temp_info_obj       = null; 
     4608        var temp_info                   = null; 
     4609        var temp_text                   = ''; 
     4610        var temp_tds                    = null; 
     4611        var temp_trs                    = getTableRows(false); 
     4612        var $temp_info          = null;                  
     4613        var $temp_td                    = null; 
     4614         
     4615        for (var i = 0; i < temp_trs.length; i++) 
     4616        { 
     4617                temp_info_obj = createInfoObj(); 
     4618                 
     4619                temp_tds = $(temp_trs[i]).children('td:gt(0):lt(3)'); 
     4620                 
     4621                for (var j = 0; j < temp_tds.length; j++) 
     4622                { 
     4623                        $temp_td = $(temp_tds[j]); 
     4624                         
     4625                        getCellInfo($temp_td, temp_info_obj, ignore_settings); 
     4626                         
     4627                        if ($temp_td.children('input[name="resize_needful"]').val() == '1') 
     4628                        { 
     4629                                if (ignore_settings) 
     4630                                        $temp_td.children('em').replaceWith('<span>' + $temp_td.children('input[name="orig_dim"]').val().split(',').join(' x ') + '</span>'); 
     4631                                else 
     4632                                        $temp_td.children('span').replaceWith('<em>' + $temp_td.children('input[name="resize_dim"]').val().split(',').join(' x ') + '</em>'); 
     4633                        } 
     4634                } 
     4635                 
     4636                if ((temp_info_obj['filename_large'] == null) && (temp_info_obj['filename_medium'] == null)) 
     4637                { 
     4638                        temp_info = text_insufficient; 
     4639                        temp_icon       = filename_icon_cross; 
     4640                } 
     4641                else if (temp_info_obj['infos'].length > 0) 
     4642                { 
     4643                        temp_info = temp_info_obj['infos'].join('; '); 
     4644                        temp_icon = filename_icon_info; 
     4645                } 
     4646                else 
     4647                { 
     4648                        temp_info = null; 
     4649                        temp_icon = filename_icon_tick; 
     4650                } 
     4651                 
     4652                $temp_info = $(temp_trs[i]).children('td:last').eq(0).children('img').eq(0); 
     4653                $temp_info.attr('src', icon_base + temp_icon); 
     4654                if (temp_info == null) 
     4655                        $temp_info.removeAttr('title'); 
     4656                else 
     4657                        $temp_info.attr('title', temp_info); 
     4658        } 
     4659} 
     4660 
     4661function createInfoObj() 
     4662{ 
     4663        var temp_result = new Object(); 
     4664         
     4665        temp_result['filename_large']           = null; 
     4666        temp_result['filename_medium']  = null; 
     4667        temp_result['filename_small']           = null; 
     4668        temp_result['infos']                                            = new Array(); 
     4669         
     4670        return temp_result; 
     4671} 
     4672 
     4673function cropImages() 
     4674{ 
     4675        var temp_dim                                                    = null; 
     4676        var temp_filename                                       = null; 
     4677        var temp_ignore_settings        = $('#gallery_ignore_dim').attr('checked') 
     4678        var temp_length                                         = null; 
     4679        var temp_trs                                                    = getTableRows(true); 
     4680        var temp_tds                                                    = null; 
     4681        var $temp_td                                                    = null; 
     4682         
     4683        for (var i = 0; i < temp_trs.length; i++) 
     4684        { 
     4685                $temp_td = $(temp_trs[i]).children('td:gt(0)').eq(0); 
     4686                 
     4687                if ($temp_td.children('input[name="crop_needful"]').val() == '1') 
     4688                { 
     4689                        if (temp_crop_items == null) 
     4690                                temp_crop_items = new Array(); 
     4691                         
     4692                        temp_src_filename       = $temp_td.next('td').eq(0).children('input[name="filename"]').val(); 
     4693                        if ((temp_ignore_settings) || ($temp_td.next('td').eq(0).children('input[name="resize_needful"]').val() == '0'))  
     4694                                temp_dim = $temp_td.next('td').eq(0).children('input[name="orig_dim"]').val().split(','); 
     4695                        else 
     4696                                temp_dim = $temp_td.next('td').eq(0).children('input[name="resize_dim"]').val().split(','); 
     4697                         
     4698                        temp_crop_items.push(new Object()); 
     4699                        temp_length = temp_crop_items.length - 1; 
     4700                         
     4701                        temp_crop_items[temp_length]['src_filename']    = temp_src_filename; 
     4702                        temp_crop_items[temp_length]['src_width']                       = temp_dim[0]; 
     4703                        temp_crop_items[temp_length]['src_height']              = temp_dim[1]; 
     4704                        temp_crop_items[temp_length]['src_item']                        = $temp_td; 
     4705                } 
     4706        } 
     4707         
     4708        temp_item_max_count = temp_crop_items.length; 
     4709        if (temp_item_max_count > 0) 
     4710                handleCropItems(); 
     4711} 
     4712 
     4713function getCellInfo($table_cell, info_obj, ignore_settings) 
     4714{ 
     4715        if (($table_cell != null) && (info_obj != null)) 
     4716        { 
     4717                var temp_type   = $table_cell.children('input[name="type"]').eq(0).val(); 
     4718                 
     4719                info_obj['filename_' + temp_type] = $table_cell.children('input[name="filename"]').eq(0).val(); 
     4720                 
     4721                if ($table_cell.children('input[name="auto_created"]').eq(0).val() == 1) 
     4722                        info_obj['infos'].push(temp_type + text_auto_created); 
     4723                if ($table_cell.children('input[name="auto_resized"]').eq(0).val() == 1) 
     4724                        info_obj['infos'].push(temp_type + text_auto_resized); 
     4725                if ($table_cell.children('input[name="crop_needful"]').eq(0).val() == 1) 
     4726                        info_obj['infos'].push(temp_type + text_crop_needful); 
     4727                 
     4728                if (!ignore_settings) 
     4729                { 
     4730                        if ($table_cell.children('input[name="resize_needful"]').eq(0).val() == 1) 
     4731                                info_obj['infos'].push(temp_type + text_resize_needful); 
     4732                } 
     4733        } 
     4734} 
     4735 
     4736function getTableRows(drop_insufficient) 
     4737{ 
     4738        var temp_trs = $temp_table.find('tr:gt(0)'); 
     4739         
     4740        if (drop_insufficient) 
     4741                temp_trs = jQuery.grep(temp_trs, function(item, index) 
     4742                                                { 
     4743                                                        if ($(item).find('input[name="insufficient"]').val() == '0') 
     4744                                                                return true; 
     4745                                                        else 
     4746                                                                return false; 
     4747                                                }); 
     4748         
     4749        return temp_trs 
     4750} 
     4751 
     4752function handleCropItems() 
     4753{ 
     4754        if (temp_crop_items.length > 0) 
     4755        { 
     4756                if (temp_crop_api != null) 
     4757                        temp_crop_api.destroy(); 
     4758 
     4759                $temp_crop.attr('src', image_root_url + '/' + temp_crop_items[0]['src_filename']); 
     4760                $temp_crop.attr('width', temp_crop_items[0]['src_width']); 
     4761                $temp_crop.attr('height', temp_crop_items[0]['src_height']); 
     4762                 
     4763                $temp_dialog.find('th').text('crop thumb ' + (temp_item_max_count - temp_crop_items.length + 1)  + ' of ' + temp_item_max_count + ' (' + temp_crop_items[0]['src_filename'] + ')'); 
     4764                 
     4765                $temp_dialog.dialog('open'); 
     4766                 
     4767                temp_crop_api = $.Jcrop('#gallery_crop',  
     4768                        {  
     4769                                //allowResize   : true, 
     4770                                allowSelect     : false, 
     4771                                aspectRatio     : thumb_max_width/thumb_max_height, 
     4772                                minSize                 : [thumb_max_width, thumb_max_height], 
     4773                                //maxSize                       : [thumb_max_width, thumb_max_height], 
     4774                                handles                 : true 
     4775                        }); 
     4776                temp_crop_api.setSelect([0, 0, thumb_max_width, thumb_max_height]); 
     4777                temp_crop_api.setOptions({ allowResize: true }); 
     4778                temp_crop_api.focus(); 
     4779        } 
     4780} 
     4781 
     4782function handleResizeItems() 
     4783{ 
     4784        if (temp_resize_items.length > 0) 
     4785                jQuery.post(resize_url + '/ZMSGallery_requestResize', temp_resize_items[0]['json'], receiveResizeData, "json"); 
     4786} 
     4787 
     4788function receiveResizeData(data, text_status) 
     4789{ 
     4790        if ((text_status == 'success') && (data['filename'] != null)) 
     4791                for (var i = 0; i < temp_resize_items.length; i++) 
     4792                        if (temp_resize_items[i]['filename'] == data['filename']) 
     4793                        { 
     4794                                temp_resize_items.splice(i, 1); 
     4795                                 
     4796                                break; 
     4797                        } 
     4798         
     4799        if (temp_resize_items.length > 0) 
     4800                handleResizeItems(); 
     4801        else 
     4802                cropImages(); 
     4803} 
     4804 
     4805function resizeImages() 
     4806{ 
     4807        var temp_dim                                                    = null; 
     4808        var temp_filename                                       = null; 
     4809        var temp_ignore_settings        = $('#gallery_ignore_dim').attr('checked') 
     4810        var temp_trs                                                    = getTableRows(true); 
     4811        var temp_tds                                                    = null; 
     4812        var $temp_td                                                    = null; 
     4813         
     4814        if (temp_ignore_settings) 
     4815        { 
     4816                cropImages(); 
     4817        } 
     4818        else 
     4819        { 
     4820                for (var i = 0; i < temp_trs.length; i++) 
     4821                { 
     4822                        temp_tds = $(temp_trs[i]).children('td:gt(0):lt(3)'); 
     4823                         
     4824                        for (var j = 0; j < temp_tds.length; j++) 
     4825                        { 
     4826                                $temp_td = $(temp_tds[j]); 
     4827                                 
     4828                                if ($temp_td.children('input[name="resize_needful"]').val() == '1') 
     4829                                { 
     4830                                        if (temp_resize_items == null) 
     4831                                                temp_resize_items = new Array(); 
     4832                                         
     4833                                        temp_dim                        = $temp_td.children('input[name="resize_dim"]').val().split(','); 
     4834                                        temp_filename   = $temp_td.children('input[name="filename"]').val(); 
     4835                                         
     4836                                        temp_resize_items.push(new Object()); 
     4837                                        temp_resize_items[temp_resize_items.length - 1]['filename'] = temp_filename; 
     4838                                        temp_resize_items[temp_resize_items.length - 1]['json']                 =  
     4839                                                        {src_filename : temp_filename, dest_width : temp_dim[0], dest_height : temp_dim[1]}; 
     4840                                } 
     4841                        } 
     4842                } 
     4843                 
     4844                if (temp_resize_items.length > 0) 
     4845                        handleResizeItems(); 
     4846                else 
     4847                        cropImages(); 
     4848        } 
     4849} 
     4850 
     4851function submitForm(event) 
     4852{ 
     4853        var temp_action = $(event.target).val(); 
     4854         
     4855        if ((temp_action == 'import') && (!temp_items_handled)) 
     4856                resizeImages(false); 
     4857        else 
     4858        { 
     4859                $temp_form.find('input[name="import_action"]').val(temp_action); 
     4860                 
     4861                $temp_form.submit(); 
     4862        } 
     4863} 
     4864 
     4865function writeSubmitData() 
     4866{ 
     4867        var $temp_td    = null; 
     4868         
     4869        var temp_data   = null; 
     4870        var temp_tds    = null; 
     4871        var temp_trs    = getTableRows(true); 
     4872        var temp_xml    = ''; 
     4873         
     4874        temp_xml += '<list>\n'; 
     4875         
     4876        // convert items into xml 
     4877        for (var i = 0; i < temp_trs.length; i++) 
     4878        { 
     4879                temp_xml += "<item type=\"dictionary\"><dictionary>\n"; 
     4880                 
     4881                temp_tds = $(temp_trs[i]).children('td:gt(0):lt(3)'); 
     4882                         
     4883                for (var j = 0; j < temp_tds.length; j++) 
     4884                { 
     4885                        $temp_td = $(temp_tds[j]); 
     4886                 
     4887                        temp_xml += '<item key="' + $temp_td.children('input[name="type"]').eq(0).val() + '" type=\"dictionary\">\n' 
     4888                        temp_xml += "<dictionary>\n"; 
     4889                         
     4890                        // add filename 
     4891                        temp_data = $temp_td.children('input[name="filename"]').eq(0).val(); 
     4892                        if ((temp_data != 'null') && (temp_data != undefined)) 
     4893                        { 
     4894                                temp_xml += '<item key="filename">\n' 
     4895                                temp_xml += '<![CDATA' + '[' + temp_data + ']' + ']>'; 
     4896                                temp_xml += '</item>\n'; 
     4897                        } 
     4898                        // add crop-data 
     4899                        temp_data = $temp_td.children('input[name="crop"]').eq(0).val(); 
     4900                        if ((temp_data != 'null') && (temp_data != undefined)) 
     4901                        { 
     4902                                temp_xml += '<item key="crop">' 
     4903                                temp_xml += '<![CDATA' + '[' + temp_data + ']' + ']>'; 
     4904                                temp_xml += '</item>\n'; 
     4905                        } 
     4906                         
     4907                        temp_xml += '</dictionary>\n'; 
     4908                        temp_xml += '</item>\n'; 
     4909                } 
     4910                 
     4911                temp_xml += '</dictionary></item>\n'; 
     4912        } 
     4913         
     4914        temp_xml += '</list>\n'; 
     4915         
     4916        $temp_form.children('input[name="import_files_xml"]').eq(0).val(temp_xml); 
     4917} 
     4918 
     4919$('document').ready(function() 
     4920{ 
     4921        $temp_crop              = $('#gallery_crop'); 
     4922        $temp_dialog    = $('#gallery_dialog'); 
     4923        $temp_form              = $('#gallery_import_form'); 
     4924        $temp_table             = $('#gallery_import_table'); 
     4925         
     4926        $('#gallery_ignore_dim').change(function() 
     4927        { 
     4928                changeDimensionSettings(this.checked); 
     4929        }); 
     4930        $('#gallery_button_crop').click(function() 
     4931        { 
     4932                var temp_coords = temp_crop_api.tellSelect(); 
     4933                 
     4934                temp_crop_items[0]['src_item'].append('<input type="hidden" name="crop" value="' +  
     4935                                temp_coords.x + ',' + temp_coords.y + ',' + temp_coords.x2 + ',' + temp_coords.y2 + '" />'); 
     4936                         
     4937                temp_crop_items.shift(); 
     4938                 
     4939                if (temp_crop_items.length > 0) 
     4940                        handleCropItems(); 
     4941                else 
     4942                { 
     4943                        writeSubmitData(); 
     4944                        temp_items_handled = true; 
     4945                         
     4946                        if ($temp_dialog.dialog('isOpen')) 
     4947                                $temp_dialog.dialog('close'); 
     4948                         
     4949                        $('#gallery_import_form > input[value="import"]').click(); 
     4950                } 
     4951        }); 
     4952         
     4953        $temp_dialog.dialog( 
     4954        { 
     4955                autoOpen: false, 
     4956                height  : 450, 
     4957                modal           : true, 
     4958                title           : 'Crop Thumb', 
     4959                width           : 450 
     4960        }); 
     4961         
     4962        $temp_form.children('input:button').click(submitForm); 
     4963});]]></data></item> 
     4964<item key="id"><![CDATA[handleImageImport.js]]></item> 
     4965<item key="mandatory" type="int">0</item> 
     4966<item key="multilang" type="int">0</item> 
     4967<item key="name"><![CDATA[handleImageImport]]></item> 
     4968<item key="repetitive" type="int">0</item> 
     4969<item key="type"><![CDATA[resource]]></item> 
     4970</dictionary> 
     4971</item> 
     4972<item type="dictionary"><dictionary> 
     4973<item key="custom"> 
     4974<data content_type="text/css" filename="jquery.Jcrop.css" type="file"><![CDATA[/* Fixes issue here http://code.google.com/p/jcrop/issues/detail?id=1 */ 
     4975.jcrop-holder { text-align: left; } 
     4976 
     4977.jcrop-vline, .jcrop-hline 
     4978{ 
     4979        font-size: 0; 
     4980        position: absolute; 
     4981        background: white url('metaobj_manager/ZMSMediaPlayerLib.Jcrop.gif') top left repeat; 
     4982} 
     4983.jcrop-vline { height: 100%; width: 1px !important; } 
     4984.jcrop-hline { width: 100%; height: 1px !important; } 
     4985.jcrop-handle { 
     4986        font-size: 1px; 
     4987        width: 7px !important; 
     4988        height: 7px !important; 
     4989        border: 1px #eee solid; 
     4990        background-color: #333; 
     4991        *width: 9px; 
     4992        *height: 9px; 
     4993} 
     4994 
     4995.jcrop-tracker { width: 100%; height: 100%; } 
     4996 
     4997.custom .jcrop-vline, 
     4998.custom .jcrop-hline 
     4999{ 
     5000        background: yellow; 
     5001} 
     5002.custom .jcrop-handle 
     5003{ 
     5004        border-color: black; 
     5005        background-color: #C7BB00; 
     5006        -moz-border-radius: 3px; 
     5007        -webkit-border-radius: 3px; 
     5008} 
     5009]]></data></item> 
     5010<item key="id"><![CDATA[jcrop.css]]></item> 
     5011<item key="mandatory" type="int">0</item> 
     5012<item key="multilang" type="int">0</item> 
     5013<item key="name"><![CDATA[jcrop.css]]></item> 
     5014<item key="repetitive" type="int">0</item> 
     5015<item key="type"><![CDATA[resource]]></item> 
     5016</dictionary> 
     5017</item> 
     5018<item type="dictionary"><dictionary> 
     5019<item key="custom"> 
     5020<data content_type="image/gif" filename="Jcrop.gif" type="file">47494638396108000800910000aaaaaaffffff00000000000021ff0b4e45545343415045322e30030100000021f904090a0000002c000000000800080000020d940509a76bcd544c07d159e52c0021f904090a0000002c000000000800080000020f842ea0986ae75e5bd0a1c8eca5b5000021f904090a0000002c000000000800080000020f048462979bead062d0b458697da0000021f904090a0000002c000000000800080000020f848562907ab9da6268c258b17ba8000021f904090a0000002c000000000800080000020d842129a76bcd544c07d159e52c0021f904090a0000002c000000000800080000020f140ea2986ae75e5bd0a1c8eca5b5000021f904090a0000002c000000000800080000020f948060979bead062d0b458697da2000021f904050a0000002c000000000800080000020f948160927ab9da6268c258b17ba800003b</data></item> 
     5021<item key="id"><![CDATA[Jcrop.gif]]></item> 
     5022<item key="mandatory" type="int">0</item> 
     5023<item key="multilang" type="int">0</item> 
     5024<item key="name"><![CDATA[Jcrop.gif]]></item> 
     5025<item key="repetitive" type="int">0</item> 
     5026<item key="type"><![CDATA[resource]]></item> 
     5027</dictionary> 
     5028</item> 
     5029<item type="dictionary"><dictionary> 
     5030<item key="custom"> 
     5031<data content_type="text/css" filename="jquery-ui.css" type="file"><![CDATA[/* 
     5032* jQuery UI CSS Framework 
     5033* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) 
     5034* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. 
     5035*/ 
     5036 
     5037/* Layout helpers 
     5038----------------------------------*/ 
     5039.ui-helper-hidden { display: none; } 
     5040.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } 
     5041.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } 
     5042.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } 
     5043.ui-helper-clearfix { display: inline-block; } 
     5044/* required comment for clearfix to work in Opera \*/ 
     5045* html .ui-helper-clearfix { height:1%; } 
     5046.ui-helper-clearfix { display:block; } 
     5047/* end clearfix */ 
     5048.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } 
     5049 
     5050 
     5051/* Interaction Cues 
     5052----------------------------------*/ 
     5053.ui-state-disabled { cursor: default !important; } 
     5054 
     5055 
     5056/* Icons 
     5057----------------------------------*/ 
     5058 
     5059/* states and images */ 
     5060.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } 
     5061 
     5062 
     5063/* Misc visuals 
     5064----------------------------------*/ 
     5065 
     5066/* Overlays */ 
     5067.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 
     5068 
     5069 
     5070 
     5071/* 
     5072* jQuery UI CSS Framework 
     5073* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) 
     5074* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. 
     5075* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=deedf7&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=04_highlight_hard.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=02_glass.png&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=3baae3&bgTextureActive=02_glass.png&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=ffef8f&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=01_flat.png&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=eeeeee&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=04_highlight_hard.png&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px 
     5076*/ 
     5077 
     5078 
     5079/* Component containers 
     5080----------------------------------*/ 
     5081.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; } 
     5082.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; } 
     5083.ui-widget-content { border: 1px solid #dddddd; background: #f2f5f7 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_highlight-hard_100_f2f5f7_1x100.png) 50% top repeat-x; color: #362b36; } 
     5084.ui-widget-content a { color: #362b36; } 
     5085.ui-widget-header { border: 1px solid #aed0ea; background: #deedf7 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_highlight-soft_100_deedf7_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } 
     5086.ui-widget-header a { color: #222222; } 
     5087 
     5088/* Interaction states 
     5089----------------------------------*/ 
     5090.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #aed0ea; background: #d7ebf9 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_glass_80_d7ebf9_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2779aa; outline: none; } 
     5091.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2779aa; text-decoration: none; outline: none; } 
     5092.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #74b2e2; background: #e4f1fb url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_glass_100_e4f1fb_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #0070a3; outline: none; } 
     5093.ui-state-hover a, .ui-state-hover a:hover { color: #0070a3; text-decoration: none; outline: none; } 
     5094.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #2694e8; background: #3baae3 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_glass_50_3baae3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; outline: none; } 
     5095.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; outline: none; text-decoration: none; } 
     5096 
     5097/* Interaction Cues 
     5098----------------------------------*/ 
     5099.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #f9dd34; background: #ffef8f url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_highlight-soft_25_ffef8f_1x100.png) 50% top repeat-x; color: #363636; } 
     5100.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } 
     5101.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #cd0a0a url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_flat_15_cd0a0a_40x100.png) 50% 50% repeat-x; color: #ffffff; } 
     5102.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; } 
     5103.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; } 
     5104.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } 
     5105.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } 
     5106.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } 
     5107 
     5108/* Icons 
     5109----------------------------------*/ 
     5110 
     5111/* states and images */ 
     5112.ui-icon { width: 16px; height: 16px; background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_72a7cf_256x240.png); } 
     5113.ui-widget-content .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_72a7cf_256x240.png); } 
     5114.ui-widget-header .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_72a7cf_256x240.png); } 
     5115.ui-state-default .ui-icon { background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_3d80b3_256x240.png); } 
     5116.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_2694e8_256x240.png); } 
     5117.ui-state-active .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_ffffff_256x240.png); } 
     5118.ui-state-highlight .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_2e83ff_256x240.png); } 
     5119.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_ffffff_256x240.png); } 
     5120 
     5121/* positioning */ 
     5122.ui-icon-carat-1-n { background-position: 0 0; } 
     5123.ui-icon-carat-1-ne { background-position: -16px 0; } 
     5124.ui-icon-carat-1-e { background-position: -32px 0; } 
     5125.ui-icon-carat-1-se { background-position: -48px 0; } 
     5126.ui-icon-carat-1-s { background-position: -64px 0; } 
     5127.ui-icon-carat-1-sw { background-position: -80px 0; } 
     5128.ui-icon-carat-1-w { background-position: -96px 0; } 
     5129.ui-icon-carat-1-nw { background-position: -112px 0; } 
     5130.ui-icon-carat-2-n-s { background-position: -128px 0; } 
     5131.ui-icon-carat-2-e-w { background-position: -144px 0; } 
     5132.ui-icon-triangle-1-n { background-position: 0 -16px; } 
     5133.ui-icon-triangle-1-ne { background-position: -16px -16px; } 
     5134.ui-icon-triangle-1-e { background-position: -32px -16px; } 
     5135.ui-icon-triangle-1-se { background-position: -48px -16px; } 
     5136.ui-icon-triangle-1-s { background-position: -64px -16px; } 
     5137.ui-icon-triangle-1-sw { background-position: -80px -16px; } 
     5138.ui-icon-triangle-1-w { background-position: -96px -16px; } 
     5139.ui-icon-triangle-1-nw { background-position: -112px -16px; } 
     5140.ui-icon-triangle-2-n-s { background-position: -128px -16px; } 
     5141.ui-icon-triangle-2-e-w { background-position: -144px -16px; } 
     5142.ui-icon-arrow-1-n { background-position: 0 -32px; } 
     5143.ui-icon-arrow-1-ne { background-position: -16px -32px; } 
     5144.ui-icon-arrow-1-e { background-position: -32px -32px; } 
     5145.ui-icon-arrow-1-se { background-position: -48px -32px; } 
     5146.ui-icon-arrow-1-s { background-position: -64px -32px; } 
     5147.ui-icon-arrow-1-sw { background-position: -80px -32px; } 
     5148.ui-icon-arrow-1-w { background-position: -96px -32px; } 
     5149.ui-icon-arrow-1-nw { background-position: -112px -32px; } 
     5150.ui-icon-arrow-2-n-s { background-position: -128px -32px; } 
     5151.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 
     5152.ui-icon-arrow-2-e-w { background-position: -160px -32px; } 
     5153.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 
     5154.ui-icon-arrowstop-1-n { background-position: -192px -32px; } 
     5155.ui-icon-arrowstop-1-e { background-position: -208px -32px; } 
     5156.ui-icon-arrowstop-1-s { background-position: -224px -32px; } 
     5157.ui-icon-arrowstop-1-w { background-position: -240px -32px; } 
     5158.ui-icon-arrowthick-1-n { background-position: 0 -48px; } 
     5159.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 
     5160.ui-icon-arrowthick-1-e { background-position: -32px -48px; } 
     5161.ui-icon-arrowthick-1-se { background-position: -48px -48px; } 
     5162.ui-icon-arrowthick-1-s { background-position: -64px -48px; } 
     5163.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 
     5164.ui-icon-arrowthick-1-w { background-position: -96px -48px; } 
     5165.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 
     5166.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 
     5167.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 
     5168.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 
     5169.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 
     5170.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 
     5171.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 
     5172.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 
     5173.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 
     5174.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 
     5175.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 
     5176.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 
     5177.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 
     5178.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 
     5179.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 
     5180.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 
     5181.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 
     5182.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 
     5183.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 
     5184.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 
     5185.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 
     5186.ui-icon-arrow-4 { background-position: 0 -80px; } 
     5187.ui-icon-arrow-4-diag { background-position: -16px -80px; } 
     5188.ui-icon-extlink { background-position: -32px -80px; } 
     5189.ui-icon-newwin { background-position: -48px -80px; } 
     5190.ui-icon-refresh { background-position: -64px -80px; } 
     5191.ui-icon-shuffle { background-position: -80px -80px; } 
     5192.ui-icon-transfer-e-w { background-position: -96px -80px; } 
     5193.ui-icon-transferthick-e-w { background-position: -112px -80px; } 
     5194.ui-icon-folder-collapsed { background-position: 0 -96px; } 
     5195.ui-icon-folder-open { background-position: -16px -96px; } 
     5196.ui-icon-document { background-position: -32px -96px; } 
     5197.ui-icon-document-b { background-position: -48px -96px; } 
     5198.ui-icon-note { background-position: -64px -96px; } 
     5199.ui-icon-mail-closed { background-position: -80px -96px; } 
     5200.ui-icon-mail-open { background-position: -96px -96px; } 
     5201.ui-icon-suitcase { background-position: -112px -96px; } 
     5202.ui-icon-comment { background-position: -128px -96px; } 
     5203.ui-icon-person { background-position: -144px -96px; } 
     5204.ui-icon-print { background-position: -160px -96px; } 
     5205.ui-icon-trash { background-position: -176px -96px; } 
     5206.ui-icon-locked { background-position: -192px -96px; } 
     5207.ui-icon-unlocked { background-position: -208px -96px; } 
     5208.ui-icon-bookmark { background-position: -224px -96px; } 
     5209.ui-icon-tag { background-position: -240px -96px; } 
     5210.ui-icon-home { background-position: 0 -112px; } 
     5211.ui-icon-flag { background-position: -16px -112px; } 
     5212.ui-icon-calendar { background-position: -32px -112px; } 
     5213.ui-icon-cart { background-position: -48px -112px; } 
     5214.ui-icon-pencil { background-position: -64px -112px; } 
     5215.ui-icon-clock { background-position: -80px -112px; } 
     5216.ui-icon-disk { background-position: -96px -112px; } 
     5217.ui-icon-calculator { background-position: -112px -112px; } 
     5218.ui-icon-zoomin { background-position: -128px -112px; } 
     5219.ui-icon-zoomout { background-position: -144px -112px; } 
     5220.ui-icon-search { background-position: -160px -112px; } 
     5221.ui-icon-wrench { background-position: -176px -112px; } 
     5222.ui-icon-gear { background-position: -192px -112px; } 
     5223.ui-icon-heart { background-position: -208px -112px; } 
     5224.ui-icon-star { background-position: -224px -112px; } 
     5225.ui-icon-link { background-position: -240px -112px; } 
     5226.ui-icon-cancel { background-position: 0 -128px; } 
     5227.ui-icon-plus { background-position: -16px -128px; } 
     5228.ui-icon-plusthick { background-position: -32px -128px; } 
     5229.ui-icon-minus { background-position: -48px -128px; } 
     5230.ui-icon-minusthick { background-position: -64px -128px; } 
     5231.ui-icon-close { background-position: -80px -128px; } 
     5232.ui-icon-closethick { background-position: -96px -128px; } 
     5233.ui-icon-key { background-position: -112px -128px; } 
     5234.ui-icon-lightbulb { background-position: -128px -128px; } 
     5235.ui-icon-scissors { background-position: -144px -128px; } 
     5236.ui-icon-clipboard { background-position: -160px -128px; } 
     5237.ui-icon-copy { background-position: -176px -128px; } 
     5238.ui-icon-contact { background-position: -192px -128px; } 
     5239.ui-icon-image { background-position: -208px -128px; } 
     5240.ui-icon-video { background-position: -224px -128px; } 
     5241.ui-icon-script { background-position: -240px -128px; } 
     5242.ui-icon-alert { background-position: 0 -144px; } 
     5243.ui-icon-info { background-position: -16px -144px; } 
     5244.ui-icon-notice { background-position: -32px -144px; } 
     5245.ui-icon-help { background-position: -48px -144px; } 
     5246.ui-icon-check { background-position: -64px -144px; } 
     5247.ui-icon-bullet { background-position: -80px -144px; } 
     5248.ui-icon-radio-off { background-position: -96px -144px; } 
     5249.ui-icon-radio-on { background-position: -112px -144px; } 
     5250.ui-icon-pin-w { background-position: -128px -144px; } 
     5251.ui-icon-pin-s { background-position: -144px -144px; } 
     5252.ui-icon-play { background-position: 0 -160px; } 
     5253.ui-icon-pause { background-position: -16px -160px; } 
     5254.ui-icon-seek-next { background-position: -32px -160px; } 
     5255.ui-icon-seek-prev { background-position: -48px -160px; } 
     5256.ui-icon-seek-end { background-position: -64px -160px; } 
     5257.ui-icon-seek-first { background-position: -80px -160px; } 
     5258.ui-icon-stop { background-position: -96px -160px; } 
     5259.ui-icon-eject { background-position: -112px -160px; } 
     5260.ui-icon-volume-off { background-position: -128px -160px; } 
     5261.ui-icon-volume-on { background-position: -144px -160px; } 
     5262.ui-icon-power { background-position: 0 -176px; } 
     5263.ui-icon-signal-diag { background-position: -16px -176px; } 
     5264.ui-icon-signal { background-position: -32px -176px; } 
     5265.ui-icon-battery-0 { background-position: -48px -176px; } 
     5266.ui-icon-battery-1 { background-position: -64px -176px; } 
     5267.ui-icon-battery-2 { background-position: -80px -176px; } 
     5268.ui-icon-battery-3 { background-position: -96px -176px; } 
     5269.ui-icon-circle-plus { background-position: 0 -192px; } 
     5270.ui-icon-circle-minus { background-position: -16px -192px; } 
     5271.ui-icon-circle-close { background-position: -32px -192px; } 
     5272.ui-icon-circle-triangle-e { background-position: -48px -192px; } 
     5273.ui-icon-circle-triangle-s { background-position: -64px -192px; } 
     5274.ui-icon-circle-triangle-w { background-position: -80px -192px; } 
     5275.ui-icon-circle-triangle-n { background-position: -96px -192px; } 
     5276.ui-icon-circle-arrow-e { background-position: -112px -192px; } 
     5277.ui-icon-circle-arrow-s { background-position: -128px -192px; } 
     5278.ui-icon-circle-arrow-w { background-position: -144px -192px; } 
     5279.ui-icon-circle-arrow-n { background-position: -160px -192px; } 
     5280.ui-icon-circle-zoomin { background-position: -176px -192px; } 
     5281.ui-icon-circle-zoomout { background-position: -192px -192px; } 
     5282.ui-icon-circle-check { background-position: -208px -192px; } 
     5283.ui-icon-circlesmall-plus { background-position: 0 -208px; } 
     5284.ui-icon-circlesmall-minus { background-position: -16px -208px; } 
     5285.ui-icon-circlesmall-close { background-position: -32px -208px; } 
     5286.ui-icon-squaresmall-plus { background-position: -48px -208px; } 
     5287.ui-icon-squaresmall-minus { background-position: -64px -208px; } 
     5288.ui-icon-squaresmall-close { background-position: -80px -208px; } 
     5289.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 
     5290.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 
     5291.ui-icon-grip-solid-vertical { background-position: -32px -224px; } 
     5292.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 
     5293.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 
     5294.ui-icon-grip-diagonal-se { background-position: -80px -224px; } 
     5295 
     5296 
     5297/* Misc visuals 
     5298----------------------------------*/ 
     5299 
     5300/* Corner radius */ 
     5301.ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; } 
     5302.ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; } 
     5303.ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; } 
     5304.ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; } 
     5305.ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; } 
     5306.ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; } 
     5307.ui-corner-right {  -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; } 
     5308.ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; } 
     5309.ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; } 
     5310 
     5311/* Overlays */ 
     5312.ui-widget-overlay { background: #eeeeee url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_diagonals-thick_90_eeeeee_40x40.png) 50% 50% repeat; opacity: .80;filter:Alpha(Opacity=80); } 
     5313.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #000000 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_highlight-hard_70_000000_1x100.png) 50% top repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion 
     5314----------------------------------*/ 
     5315.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } 
     5316.ui-accordion .ui-accordion-li-fix { display: inline; } 
     5317.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } 
     5318.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; } 
     5319.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } 
     5320.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; } 
     5321.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker 
     5322----------------------------------*/ 
     5323.ui-datepicker { width: 17em; padding: .2em .2em 0; } 
     5324.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } 
     5325.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } 
     5326.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } 
     5327.ui-datepicker .ui-datepicker-prev { left:2px; } 
     5328.ui-datepicker .ui-datepicker-next { right:2px; } 
     5329.ui-datepicker .ui-datepicker-prev-hover { left:1px; } 
     5330.ui-datepicker .ui-datepicker-next-hover { right:1px; } 
     5331.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  } 
     5332.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } 
     5333.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } 
     5334.ui-datepicker select.ui-datepicker-month-year {width: 100%;} 
     5335.ui-datepicker select.ui-datepicker-month,  
     5336.ui-datepicker select.ui-datepicker-year { width: 49%;} 
     5337.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } 
     5338.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } 
     5339.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  } 
     5340.ui-datepicker td { border: 0; padding: 1px; } 
     5341.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } 
     5342.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } 
     5343.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 
     5344.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } 
     5345 
     5346/* with multiple calendars */ 
     5347.ui-datepicker.ui-datepicker-multi { width:auto; } 
     5348.ui-datepicker-multi .ui-datepicker-group { float:left; } 
     5349.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } 
     5350.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } 
     5351.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } 
     5352.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } 
     5353.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } 
     5354.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } 
     5355.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } 
     5356.ui-datepicker-row-break { clear:both; width:100%; } 
     5357 
     5358/* RTL support */ 
     5359.ui-datepicker-rtl { direction: rtl; } 
     5360.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } 
     5361.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } 
     5362.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } 
     5363.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } 
     5364.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } 
     5365.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } 
     5366.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } 
     5367.ui-datepicker-rtl .ui-datepicker-group { float:right; } 
     5368.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 
     5369.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 
     5370 
     5371/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 
     5372.ui-datepicker-cover { 
     5373    display: none; /*sorry for IE5*/ 
     5374    display/**/: block; /*sorry for IE5*/ 
     5375    position: absolute; /*must have*/ 
     5376    z-index: -1; /*must have*/ 
     5377    filter: mask(); /*must have*/ 
     5378    top: -4px; /*must have*/ 
     5379    left: -4px; /*must have*/ 
     5380    width: 200px; /*must have*/ 
     5381    height: 200px; /*must have*/ 
     5382}/* Dialog 
     5383----------------------------------*/ 
     5384.ui-dialog { position: relative; padding: .2em; width: 300px; } 
     5385.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;  } 
     5386.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }  
     5387.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } 
     5388.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 
     5389.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 
     5390.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } 
     5391.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } 
     5392.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } 
     5393.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } 
     5394.ui-draggable .ui-dialog-titlebar { cursor: move; } 
     5395/* Progressbar 
     5396----------------------------------*/ 
     5397.ui-progressbar { height:2em; text-align: left; } 
     5398.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable 
     5399----------------------------------*/ 
     5400.ui-resizable { position: relative;} 
     5401.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} 
     5402.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } 
     5403.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; } 
     5404.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; } 
     5405.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; } 
     5406.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; } 
     5407.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } 
     5408.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } 
     5409.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } 
     5410.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider 
     5411----------------------------------*/ 
     5412.ui-slider { position: relative; text-align: left; } 
     5413.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } 
     5414.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; } 
     5415 
     5416.ui-slider-horizontal { height: .8em; } 
     5417.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } 
     5418.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } 
     5419.ui-slider-horizontal .ui-slider-range-min { left: 0; } 
     5420.ui-slider-horizontal .ui-slider-range-max { right: 0; } 
     5421 
     5422.ui-slider-vertical { width: .8em; height: 100px; } 
     5423.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } 
     5424.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } 
     5425.ui-slider-vertical .ui-slider-range-min { bottom: 0; } 
     5426.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs 
     5427----------------------------------*/ 
     5428.ui-tabs { padding: .2em; zoom: 1; } 
     5429.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; } 
     5430.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; } 
     5431.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; } 
     5432.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; } 
     5433.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } 
     5434.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 
     5435.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; } 
     5436.ui-tabs .ui-tabs-hide { display: none !important; } 
     5437]]></data></item> 
     5438<item key="id"><![CDATA[ui.css]]></item> 
     5439<item key="mandatory" type="int">0</item> 
     5440<item key="multilang" type="int">0</item> 
     5441<item key="name"><![CDATA[ui.css]]></item> 
     5442<item key="repetitive" type="int">0</item> 
     5443<item key="type"><![CDATA[resource]]></item> 
     5444</dictionary> 
     5445</item> 
     5446<item type="dictionary"><dictionary> 
     5447<item key="custom"> 
     5448<data content_type="image/png" filename="ui-bg_diagonals-thick_90_eeeeee_40x40.png" type="file">89504e470d0a1a0a0000000d49484452000000280000002808060000008cfeb86d000000c2494441545885edd7cd0a83301844d1db6cf2fe0f9b45567563214df36b940ce59ba5c8701434cc2b84f0264b8c31bff413ef7df79e3bfadc9d65a5acf67d01d5709000157170025571004e1907858f64a5ec89876d0277e3a0f10615705001aae0a00054c2410654c3410254c4c10954c50138651c0cfca867ca9e78d821e0cee3b00bdc7d563781bb71d0002ae0a00254c1816d12db2473659fd826b95a669b64b5ac15db242365a5d82699294b639be44a19d826592b1b8d6d925a592f7fb9490e353df42e4bdebe490000000049454e44ae426082</data></item> 
     5449<item key="id"><![CDATA[ui-bg_diagonals-thick_90_eeeeee_40x40.png]]></item> 
     5450<item key="mandatory" type="int">0</item> 
     5451<item key="multilang" type="int">0</item> 
     5452<item key="name"><![CDATA[ui-bg_diagonals-thick_90_eeeeee_40x40.png]]></item> 
     5453<item key="repetitive" type="int">0</item> 
     5454<item key="type"><![CDATA[resource]]></item> 
     5455</dictionary> 
     5456</item> 
     5457<item type="dictionary"><dictionary> 
     5458<item key="custom"> 
     5459<data content_type="image/png" filename="ui-bg_flat_15_cd0a0a_40x100.png" type="file">89504e470d0a1a0a0000000d4948445200000028000000640806000000f464727a0000007c494441546881edce3101c02000c030c6897f5bd3342470f41847a220cfbbd6372e36ff0e9c08568295602558095682956025580956829560255809568295602558095682956025580956829560255809568295602558095682956025580956829560255809568295602558095682956025580956829560255809561bbecb02a868565c0c0000000049454e44ae426082</data></item> 
     5460<item key="id"><![CDATA[ui-bg_flat_15_cd0a0a_40x100.pngui-bg_flat_15_cd0a0a_40x100.png]]></item> 
     5461<item key="mandatory" type="int">0</item> 
     5462<item key="multilang" type="int">0</item> 
     5463<item key="name"><![CDATA[ui-bg_flat_15_cd0a0a_40x100.png]]></item> 
     5464<item key="repetitive" type="int">0</item> 
     5465<item key="type"><![CDATA[resource]]></item> 
     5466</dictionary> 
     5467</item> 
     5468<item type="dictionary"><dictionary> 
     5469<item key="custom"> 
     5470<data content_type="image/png" filename="ui-bg_glass_50_3baae3_1x400.png" type="file">89504e470d0a1a0a0000000d49484452000000010000019008060000006f580adb0000004a49444154388dedcfa10d804018c5e0bede1d83b22693b0018e01106010183409f9cd97da322fdb29405114bf65dd0f34604bb0090e83e351c1a905bbe064b01bece12ef3f5475114af5cd7f00941cd7c80030000000049454e44ae426082</data></item> 
     5471<item key="id"><![CDATA[ui-bg_glass_50_3baae3_1x400.png]]></item> 
     5472<item key="mandatory" type="int">0</item> 
     5473<item key="multilang" type="int">0</item> 
     5474<item key="name"><![CDATA[ui-bg_glass_50_3baae3_1x400.png]]></item> 
     5475<item key="repetitive" type="int">0</item> 
     5476<item key="type"><![CDATA[resource]]></item> 
     5477</dictionary> 
     5478</item> 
     5479<item type="dictionary"><dictionary> 
     5480<item key="custom"> 
     5481<data content_type="image/png" filename="ui-bg_glass_80_d7ebf9_1x400.png" type="file">89504e470d0a1a0a0000000d49484452000000010000019008060000006f580adb0000004349444154388dedcfb10dc0201043d16fefbf652640a2a221054450304084dc3cf96437c7535a374008e15a6aeb3309b004b6bed316f65668b66ba291f487674208275ebbe709f85a5981510000000049454e44ae426082</data></item> 
     5482<item key="id"><![CDATA[ui-bg_glass_80_d7ebf9_1x400.png]]></item> 
     5483<item key="mandatory" type="int">0</item> 
     5484<item key="multilang" type="int">0</item> 
     5485<item key="name"><![CDATA[ui-bg_glass_80_d7ebf9_1x400.png]]></item> 
     5486<item key="repetitive" type="int">0</item> 
     5487<item key="type"><![CDATA[resource]]></item> 
     5488</dictionary> 
     5489</item> 
     5490<item type="dictionary"><dictionary> 
     5491<item key="custom"> 
     5492<data content_type="image/png" filename="ui-bg_glass_100_e4f1fb_1x400.png" type="file">89504e470d0a1a0a0000000d49484452000000010000019008060000006f580adb0000003e49444154388dedcf310a00200c43d124f73fab6317055d542ab80b92e5f1a1ed5094685d00608cf996a87d160988bb04aee23155da63be78ff8c31e6c600418b0a08881eb4f00000000049454e44ae426082</data></item> 
     5493<item key="id"><![CDATA[ui-bg_glass_100_e4f1fb_1x400.png]]></item> 
     5494<item key="mandatory" type="int">0</item> 
     5495<item key="multilang" type="int">0</item> 
     5496<item key="name"><![CDATA[ui-bg_glass_100_e4f1fb_1x400.png]]></item> 
     5497<item key="repetitive" type="int">0</item> 
     5498<item key="type"><![CDATA[resource]]></item> 
     5499</dictionary> 
     5500</item> 
     5501<item type="dictionary"><dictionary> 
     5502<item key="custom"> 
     5503<data content_type="image/png" filename="ui-bg_highlight-hard_70_000000_1x100.png" type="file">89504e470d0a1a0a0000000d4948445200000001000000640806000000472c5a600000003d494441541895ddd0b10900311003c145e55effe86438b08377f0353899605124aa6a0be02d6606adb52e49906dd4dd17dbff96e41b236903bcf80bc0019df027de91d95a320000000049454e44ae426082</data></item> 
     5504<item key="id"><![CDATA[ui-bg_highlight-hard_70_000000_1x100.png]]></item> 
     5505<item key="mandatory" type="int">0</item> 
     5506<item key="multilang" type="int">0</item> 
     5507<item key="name"><![CDATA[ui-bg_highlight-hard_70_000000_1x100.png]]></item> 
     5508<item key="repetitive" type="int">0</item> 
     5509<item key="type"><![CDATA[resource]]></item> 
     5510</dictionary> 
     5511</item> 
     5512<item type="dictionary"><dictionary> 
     5513<item key="custom"> 
     5514<data content_type="image/png" filename="ui-bg_highlight-hard_100_f2f5f7_1x100.png" type="file">89504e470d0a1a0a0000000d4948445200000001000000640806000001302b6af60000004c494441541895bd8e3b0e803014c3ac77ff0b036dccd26e80d40e2c96a2281f8ef3b2001ed113aaf53cbb00bc1608546b9d8a2e66bf11a512a9246368b965777c13ea781a9dd269fc7603e0069d18363590e9bf130000000049454e44ae426082</data></item> 
     5515<item key="id"><![CDATA[ui-bg_highlight-hard_100_f2f5f7_1x100.png]]></item> 
     5516<item key="mandatory" type="int">0</item> 
     5517<item key="multilang" type="int">0</item> 
     5518<item key="name"><![CDATA[ui-bg_highlight-hard_100_f2f5f7_1x100.png]]></item> 
     5519<item key="repetitive" type="int">0</item> 
     5520<item key="type"><![CDATA[resource]]></item> 
     5521</dictionary> 
     5522</item> 
     5523<item type="dictionary"><dictionary> 
     5524<item key="custom"> 
     5525<data content_type="image/png" filename="ui-bg_highlight-soft_25_ffef8f_1x100.png" type="file">89504e470d0a1a0a0000000d4948445200000001000000640806000000472c5a600000003e494441541895d58f410a00201002c7fdff23fa621fc82ecb1241b720ba0c0aa2887b73007c0433520908db8404014e0b275478cba99a5379dd787ffa1e26beab1d43e64850650000000049454e44ae426082</data></item> 
     5526<item key="id"><![CDATA[ui-bg_highlight-soft_25_ffef8f_1x100.png]]></item> 
     5527<item key="mandatory" type="int">0</item> 
     5528<item key="multilang" type="int">0</item> 
     5529<item key="name"><![CDATA[ui-bg_highlight-soft_25_ffef8f_1x100.png]]></item> 
     5530<item key="repetitive" type="int">0</item> 
     5531<item key="type"><![CDATA[resource]]></item> 
     5532</dictionary> 
     5533</item> 
     5534<item type="dictionary"><dictionary> 
     5535<item key="custom"> 
     5536<data content_type="image/png" filename="ui-bg_highlight-soft_100_deedf7_1x100.png" type="file">89504e470d0a1a0a0000000d4948445200000001000000640806000000472c5a600000002f49444154189563f8f8fdf77f26060606862144fc47b0fec3b9ffff4359083128eb3fa6184231ba8eff98260f370200345d2588139857e80000000049454e44ae426082</data></item> 
     5537<item key="id"><![CDATA[ui-bg_highlight-soft_100_deedf7_1x100.png]]></item> 
     5538<item key="mandatory" type="int">0</item> 
     5539<item key="multilang" type="int">0</item> 
     5540<item key="name"><![CDATA[ui-bg_highlight-soft_100_deedf7_1x100.png]]></item> 
     5541<item key="repetitive" type="int">0</item> 
     5542<item key="type"><![CDATA[resource]]></item> 
     5543</dictionary> 
     5544</item> 
     5545<item type="dictionary"><dictionary> 
     5546<item key="custom"> 
     5547<data content_type="image/png" filename="ui-icons_2e83ff_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c54452e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2581cc980000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 
     5548<item key="id"><![CDATA[ui-icons_2e83ff_256x240.png]]></item> 
     5549<item key="mandatory" type="int">0</item> 
     5550<item key="multilang" type="int">0</item> 
     5551<item key="name"><![CDATA[ui-icons_2e83ff_256x240.png]]></item> 
     5552<item key="repetitive" type="int">0</item> 
     5553<item key="type"><![CDATA[resource]]></item> 
     5554</dictionary> 
     5555</item> 
     5556<item type="dictionary"><dictionary> 
     5557<item key="custom"> 
     5558<data content_type="image/png" filename="ui-icons_3d80b3_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c54453d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b3276e7e540000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 
     5559<item key="id"><![CDATA[ui-icons_3d80b3_256x240.png]]></item> 
     5560<item key="mandatory" type="int">0</item> 
     5561<item key="multilang" type="int">0</item> 
     5562<item key="name"><![CDATA[ui-icons_3d80b3_256x240.png]]></item> 
     5563<item key="repetitive" type="int">0</item> 
     5564<item key="type"><![CDATA[resource]]></item> 
     5565</dictionary> 
     5566</item> 
     5567<item type="dictionary"><dictionary> 
     5568<item key="custom"> 
     5569<data content_type="image/png" filename="ui-icons_72a7cf_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c544572a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cfc2fc65790000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 
     5570<item key="id"><![CDATA[ui-icons_72a7cf_256x240.png]]></item> 
     5571<item key="mandatory" type="int">0</item> 
     5572<item key="multilang" type="int">0</item> 
     5573<item key="name"><![CDATA[ui-icons_72a7cf_256x240.png]]></item> 
     5574<item key="repetitive" type="int">0</item> 
     5575<item key="type"><![CDATA[resource]]></item> 
     5576</dictionary> 
     5577</item> 
     5578<item type="dictionary"><dictionary> 
     5579<item key="custom"> 
     5580<data content_type="image/png" filename="ui-icons_2694e8_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c54452694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e878eb8b580000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 
     5581<item key="id"><![CDATA[ui-icons_2694e8_256x240.png]]></item> 
     5582<item key="mandatory" type="int">0</item> 
     5583<item key="multilang" type="int">0</item> 
     5584<item key="name"><![CDATA[ui-icons_2694e8_256x240.png]]></item> 
     5585<item key="repetitive" type="int">0</item> 
     5586<item key="type"><![CDATA[resource]]></item> 
     5587</dictionary> 
     5588</item> 
     5589<item type="dictionary"><dictionary> 
     5590<item key="custom"> 
     5591<data content_type="image/png" filename="ui-icons_ffffff_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c5445ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeda6e0970000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 
     5592<item key="id"><![CDATA[ui-icons_ffffff_256x240.png]]></item> 
     5593<item key="mandatory" type="int">0</item> 
     5594<item key="multilang" type="int">0</item> 
     5595<item key="name"><![CDATA[ui-icons_ffffff_256x240.png]]></item> 
     5596<item key="repetitive" type="int">0</item> 
     5597<item key="type"><![CDATA[resource]]></item> 
     5598</dictionary> 
     5599</item> 
     5600<item type="dictionary"><dictionary> 
    48125601<item key="custom"><![CDATA[<dtml-comment>--// BO yt.swf //-- 
    48135602Workaround: 
     
    48585647import os.path 
    48595648 
    4860 def ZMSMediaPlayerLib_crop(temp_folder, source_id, coords): 
     5649def ZMSGallery_crop(temp_folder, source_id, coords): 
    48615650        temp_result = None 
    48625651         
     
    48845673                 
    48855674        return temp_result]]></item> 
    4886 <item key="id"><![CDATA[ZMSMediaPlayerLib_crop]]></item> 
    4887 <item key="mandatory" type="int">0</item> 
    4888 <item key="multilang" type="int">0</item> 
    4889 <item key="name"><![CDATA[ZMSMediaPlayerLib_crop]]></item> 
     5675<item key="id"><![CDATA[ZMSGallery_crop]]></item> 
     5676<item key="mandatory" type="int">0</item> 
     5677<item key="multilang" type="int">0</item> 
     5678<item key="name"><![CDATA[ZMSGallery_crop]]></item> 
    48905679<item key="repetitive" type="int">0</item> 
    48915680<item key="type"><![CDATA[External Method]]></item> 
     
    48975686import os.path 
    48985687 
    4899 def ZMSMediaPlayerLib_resize(dest_folder, source_id, max_width, max_height = None, replace_source = False): 
     5688def ZMSGallery_resize(dest_folder, source_id, max_width, max_height = None, replace_source = False): 
    49005689        if (dest_folder is not None): 
    49015690                if (not source_id in dest_folder.objectIds()): 
     
    49365725         
    49375726        return temp_result]]></item> 
    4938 <item key="id"><![CDATA[ZMSMediaPlayerLib_resize]]></item> 
    4939 <item key="mandatory" type="int">0</item> 
    4940 <item key="multilang" type="int">0</item> 
    4941 <item key="name"><![CDATA[ZMSMediaPlayerLib_resize]]></item> 
     5727<item key="id"><![CDATA[ZMSGallery_resize]]></item> 
     5728<item key="mandatory" type="int">0</item> 
     5729<item key="multilang" type="int">0</item> 
     5730<item key="name"><![CDATA[ZMSGallery_resize]]></item> 
    49425731<item key="repetitive" type="int">0</item> 
    49435732<item key="type"><![CDATA[External Method]]></item> 
     
    49655754<item key="name"><![CDATA[Library]]></item> 
    49665755<item key="package"><![CDATA[com.zms.mediaplayer]]></item> 
    4967 <item key="revision"><![CDATA[2.1.0]]></item> 
     5756<item key="revision"><![CDATA[2.1.1]]></item> 
    49685757<item key="type"><![CDATA[ZMSLibrary]]></item> 
    49695758</dictionary> 
Note: See TracChangeset for help on using the changeset viewer.