Liferay.Util = {submitCountdown: 0,actsAsAspect: function(object) {object.yield = null;object.rv = {};object.before = function(method, f) {var original = eval("this." + method);this[method] = function() {f.apply(this, arguments);return original.apply(this, arguments);};};object.after = function(method, f) {var original = eval("this." + method);this[method] = function() {this.rv[method] = original.apply(this, arguments);return f.apply(this, arguments);};};object.around = function(method, f) {var original = eval("this." + method);this[method] = function() {this.yield = original;return f.apply(this, arguments);};};},addInputFocus: function(el) {var item = null;if (el) {if (typeof el == 'object') {item = jQuery(el);}else {item = jQuery('#' + el);}}else {item = document.body;}var inputs = jQuery("input[@type=text], input[@type=password], textarea", item);inputs.focus(function() {jQuery(this).addClass('focus');if (this.createTextRange) {var value = this.value;var textRange = this.createTextRange();textRange.moveStart('character', value.length);textRange.select();}});inputs.blur(function() {jQuery(this).removeClass('focus');});},addInputType: function(el) {var item;if (jQuery.browser.msie && jQuery.browser.version.number() < 7) {if (el) {if (typeof el == 'object') {item = jQuery(el);}else {item = jQuery('#' + el);}}else {item = document.body;}jQuery("input", item).each(function() {var current = jQuery(this);var type = this.type || "text";current.addClass(type);});}},addParams: function(params, url) {var instance = this;if (typeof params == 'object') {params = jQuery.param(params);}else {params = jQuery.trim(params);}if (params != '') {var loc = url || location.href;var anchorHash, finalUrl;if (loc.indexOf('#') > -1) {var locationPieces = loc.split('#');loc = locationPieces[0];anchorHash = locationPieces[1];}if (loc.indexOf('?') == -1) {params = '?' + params;}else {params = '&' + params;}if (loc.indexOf(params) == -1) {finalUrl = loc + params;if (anchorHash) {finalUrl += '#' + anchorHash;}if (!url) {location.href = finalUrl;}return finalUrl;}}},check: function(form, name, checked) {jQuery('input[@name=' + name + ']:checkbox',form).attr('checked', checked);},checkAll: function(form, name, allBox) {var inputs;if (Liferay.Util.isArray(name)) {var names = 'input[@name='+ name.join(']:checkbox,input[@name=') + ']:checkbox';inputs = jQuery(names, form);}else {inputs = jQuery('input[@name=' + name + ']:checkbox', form);}inputs.attr('checked', allBox.checked);},checkAllBox: function(form, name, allBox) {var totalBoxes = 0;var totalOn = 0;var inputs;if (Liferay.Util.isArray(name)) {var names = 'input[@name='+ name.join(']:checkbox,input[@name=') + ']:checkbox';inputs = jQuery(names, form);}else {inputs = jQuery('input[@name=' + name + ']:checkbox', form);}inputs = inputs.not(allBox);totalBoxes = inputs.length;totalOn = inputs.filter(':checked').length;allBox.checked = (totalBoxes == totalOn);},checkMaxLength: function(box, maxLength) {if ((box.value.length) >= maxLength) {box.value = box.value.substring(0, maxLength - 1);}},checkTab: function(box) {if ((document.all) && (event.keyCode == 9)) {box.selection = document.selection.createRange();setTimeout("Liferay.Util.processTab(\"" + box.id + "\")", 0);}},disableEsc: function() {if ((document.all) && (event.keyCode == 27)) {event.returnValue = false;}},endsWith: function(str, x) {return (str.lastIndexOf(x) === (str.length - x.length));},evalScripts: function(obj) {var instance = this;jQuery(obj).find('script').each(function(){if ( this.src ) {jQuery.getScript( this.src );}else {jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" );}});},focusFormField: function(el) {jQuery(function() {if (el && (el.offsetHeight != 0)) {var elObj = jQuery(el);jQuery('input').trigger('blur');elObj.trigger('focus');}});},getSelectedIndex: function(col) {for (var i = 0; i < col.length; i++) {if (col[i].checked == true) {return i;}}return -1;},getSelectedRadioValue: function(col) {var i = Liferay.Util.getSelectedIndex(col);if (i == -1) {var radioValue = col.value;if (radioValue == null) {radioValue = "";}return radioValue;}else {return col[i].value;}},isArray: function(object) {if (!window.Array) {return false;}else {return object.constructor == window.Array;}},listChecked: function(form) {var s = [];var inputs = jQuery('input[@value!=]:checked:checkbox', form);inputs.each(function() {s.push(this.value);});return s.join(',');},listCheckedExcept: function(form, except) {var s = [];var inputs = jQuery('input[@value!=][@name!="' + except + '"]:checked:checkbox', form);inputs.each(function() {s.push(this.value);});return s.join(',');},listSelect: function(box, delimeter) {var s = [];delimeter = delimeter || ',';if (box == null) {return "";}var opts = jQuery(box).find('option[@value!=]');opts.each(function() {s.push(this.value);});if (s[0] == '.none') {return '';}else {return s.join(',');}},listUncheckedExcept: function(form, except) {var s = [];var inputs = jQuery('input[@value!=][@name!="' + except + '"]:checkbox:not(:checked)', form);inputs.each(function() {s.push(this.value);});return s.join(',');},moveItem: function(fromBox, toBox, sort) {if (fromBox.selectedIndex >= 0) {var toSelect = jQuery(toBox);var selectedOption = jQuery(fromBox).find('option:selected');toSelect.append(selectedOption);}if (selectedOption.text() != '' && sort == true) {setTimeout('Liferay.Util.sortBox(toBox)',10000000);}},portletTitleEdit: function(options) {var instance = this;var obj = options.obj;var plid = options.plid;var doAsUserId = options.doAsUserId;var portletId = options.portletId;var url = options.url;var title = obj.find('.portlet-title');if (!title.is('.not-editable')) {title.editable(function(value, settings) {var cruft = settings._LFR_.cruft || [];cruft = cruft.join('');if (value != settings._LFR_.oldText) {Liferay.Util.savePortletTitle({plid: plid,doAsUserId: doAsUserId,portletId: portletId,title: value});}obj[0]._LFR_noDrag = null;return cruft + value;},{cssclass: 'text',data: function(value, settings) {var input = jQuery(this);var re = new RegExp('<\/?[^>]+>|\n|\r|\t', 'gim');cruft = value.match(re);settings._LFR_ = {};settings._LFR_.oldText = value;settings._LFR_.cruft = cruft;value = value.replace(re, '');settings._LFR_.oldText = value;obj[0]._LFR_noDrag = true;return value;},height: '',width: '',onblur: 'submit',type: 'text',select: false,style: '',submit: ''});}},processTab: function(id) {document.all[id].selection.text = String.fromCharCode(9);document.all[id].focus();},randomMinMax: function(min, max) {return (Math.round(Math.random() * (max - min))) + min;},removeItem: function(box, value) {var selectEl = jQuery(box);if (!value) {selectEl.find('option:selected').remove();}else {selectEl.find('option[@value=' + value + ']:selected').remove();}},reorder: function(box, down) {var si = box.selectedIndex;if (si == -1) {box.selectedIndex = 0;}else {sText = box.options[si].text;sValue = box.options[si].value;if ((box.options[si].value > "") && (si > 0) && (down == 0)) {box.options[si].text = box.options[si - 1].text;box.options[si].value = box.options[si - 1].value;box.options[si - 1].text = sText;box.options[si - 1].value = sValue;box.selectedIndex--;}else if ((si < box.length - 1) && (box.options[si + 1].value > "") && (down == 1)) {box.options[si].text = box.options[si + 1].text;box.options[si].value = box.options[si + 1].value;box.options[si + 1].text = sText;box.options[si + 1].value = sValue;box.selectedIndex++;}else if (si == 0) {for (var i = 0; i < (box.length - 1); i++) {box.options[i].text = box.options[i + 1].text;box.options[i].value = box.options[i + 1].value;}box.options[box.length - 1].text = sText;box.options[box.length - 1].value = sValue;box.selectedIndex = box.length - 1;}else if (si == (box.length - 1)) {for (var j = (box.length - 1); j > 0; j--) {box.options[j].text = box.options[j - 1].text;box.options[j].value = box.options[j - 1].value;}box.options[0].text = sText;box.options[0].value = sValue;box.selectedIndex = 0;}}},resizeTextarea: function(elString, usingRichEditor) {var init = function() {var el = jQuery('#' + elString);if (!el.length) {el = jQuery('textarea[@name=' + elString + ']');}if (el.length) {var pageBody = jQuery('body');var resize = function() {var pageBodyHeight = pageBody.height();if (usingRichEditor) {try {if (!el.is('iframe')) {el = eval(elString);if (!el.jquery) {el = jQuery(el);}}}catch (e) {}}el.css({height: (pageBodyHeight - 100) + "px",width: '98%'});};resize();jQuery(window).resize(resize);}};jQuery(init);},resubmitCountdown: function(formName) {if (Liferay.Util.submitCountdown > 0) {Liferay.Util.submitCountdown--;setTimeout("Liferay.Util.resubmitCountdown('" + formName + "')", 1000);}else {Liferay.Util.submitCountdown = 0;if (!Liferay.Browser.is_ns_4) {document.body.style.cursor = "auto";}var form = document.forms[formName];for (var i = 0; i < form.length; i++){var e = form.elements[i];if (e.type && (e.type.toLowerCase() == "button" || e.type.toLowerCase() == "reset" || e.type.toLowerCase() == "submit")) {e.disabled = false;}}}},savePortletTitle: function(params) {var defaultParams = {plid: 0,doAsUserId: 0,portletId: 0,title: '',url: themeDisplay.getPathMain() + '/portlet_configuration/update_title'};var settings = jQuery.extend(defaultParams, params);jQuery.ajax({url: settings.url,data: {p_l_id: settings.plid,doAsUserId: settings.doAsUserId,portletId: settings.portletId,title: settings.title}});},selectAndCopy: function(el) {el.focus();el.select();if (document.all) {var textRange = el.createTextRange();textRange.execCommand("copy");}},setBox: function(oldBox, newBox) {for (var i = oldBox.length - 1; i > -1; i--) {oldBox.options[i] = null;}for (var i = 0; i < newBox.length; i++) {oldBox.options[i] = new Option(newBox[i].value, i);}oldBox.options[0].selected = true;},setSelectedValue: function(col, value) {jQuery('option[@value=' + value + ']', col).attr('selected', true);},sortBox: function(box) {var newBox = [];for (var i = 0; i < box.length; i++) {newBox[i] = [box[i].value, box[i].text];}newBox.sort(Liferay.Util.sortByAscending);for (var i = box.length - 1; i > -1; i--) {box.options[i] = null;}for (var i = 0; i < newBox.length; i++) {box.options[box.length] = new Option(newBox[i][1], newBox[i][0]);}},sortByAscending: function(a, b) {if (a[1].toLowerCase() > b[1].toLowerCase()) {return 1;}else if (a[1].toLowerCase() < b[1].toLowerCase()) {return -1;}else {return 0;}},startsWith: function(str, x) {return (str.indexOf(x) === 0);},toggleByIdSpan: function(obj, id) {jQuery('#' + id).toggle();var spans = jQuery(obj).find('span');spans.toggle();},toggle: function(obj, returnState, displayType) {if (typeof obj == 'string') {obj = '#' + obj;}var el = jQuery(obj);var hidden = el.toggle().is(':visible');if (displayType) {el.css('display', displayType);hidden = el.is(':visible');}if (returnState) {return hidden;}},toggleBoxes: function(checkBoxId, toggleBoxId) {var checkBox = jQuery('#' + checkBoxId);var toggleBox = jQuery('#' + toggleBoxId);if (!checkBox.is(':checked')){toggleBox.hide();}checkBox.click(function(){toggleBox.toggle();});},toJSONObject: function(s) {return jQuery.parseJSON(s);},toJSONString: function (s) {var rt = s;var m = {'\b': '\\b','\t': '\\t','\n': '\\n','\f': '\\f','\r': '\\r','"' : '\\"','\\': '\\\\'};if (/["\\\x00-\x1f]/.test(s)) {rt = s.replace(/([\x00-\x1f\\"])/g, function(a, b) {var c = m[b];if (c) {return c;}c = b.charCodeAt();return '\\u00' +Math.floor(c / 16).toString(16) +(c % 16).toString(16);});}return rt;}};Element = {};Element.disable = function(element) {element = jQuery.getOne(element);var items = element.getElementsByTagName("*");for (var i = 0; i < items.length; i++) {var item = items[i];var nodeName = item.nodeName.toLowerCase();item.onclick = function() {};item.onmouseover = function() {};item.onmouseout = function() {};if (Liferay.Browser.is_ie) {item.onmouseenter = function() {};item.onmouseleave = function() {};}if (nodeName == "a") {item.href = "javascript: void(0)";}else if (nodeName == "input" || nodeName == "select" || nodeName == "script") {item.disabled = "true";}else if (nodeName == "form") {item.action = "";item.onsubmit = function() { return false; };}item.style.cursor = "default";}};Element.remove = function(id) {var obj = jQuery.getOne(id);obj.parentNode.removeChild(obj);};function LinkedList() {this.head = null;this.tail = null;}LinkedList.prototype.add = function(obj) {obj.listInfo = {};var tail = this.tail;var head = this.head;if (this.head == null) {this.head = obj;this.tail = obj;}else {this.tail.listInfo.next = obj;obj.listInfo.prev = this.tail;this.tail = obj;}obj.listInfo.listObj = this;};LinkedList.prototype.remove = function(obj) {if (obj.listInfo.listObj == this && this.head) {var next = obj.listInfo.next;var prev = obj.listInfo.prev;if (next) {next.listInfo.prev = prev;}if (prev) {prev.listInfo.next = next;}if (this.head == obj) {this.head = next;}if (this.tail == obj) {this.tail = prev;}}};LinkedList.prototype.each = function(func) {var cur = this.head;var count = 0;while (cur){count++;var next = cur.listInfo.next;if (func) {func(cur);}cur = next;}return count;};LinkedList.prototype.size = function() {return this.each();};function submitForm(form, action, singleSubmit) {if (Liferay.Util.submitCountdown == 0) {Liferay.Util.submitCountdown = 10;setTimeout("Liferay.Util.resubmitCountdown('" + form.name + "')", 1000);if (singleSubmit == null || singleSubmit) {Liferay.Util.submitCountdown++;var inputs = jQuery('input[@type=button], input[@type=reset], input[@type=submit]', form);inputs.each(function(i, el) {var input = jQuery(this);input.attr('disabled', true);input.fadeTo(50, 0.5);});}if (action != null) {form.action = action;}if (!Liferay.Browser.is_ns_4) {document.body.style.cursor = "wait";}form.submit();}}var Viewport = {frame: function() {var x,y;if (self.innerHeight) // all except Explorer{x = self.innerWidth;y = self.innerHeight;}else if (document.documentElement && document.documentElement.clientHeight)// Explorer 6 Strict Mode{x = document.documentElement.clientWidth;y = document.documentElement.clientHeight;}else if (document.body) // other Explorers{x = document.body.clientWidth;y = document.body.clientHeight;}return (new Coordinate(x,y));},scroll: function() {var x,y;if (self.pageYOffset) {// all except Explorerx = self.pageXOffset;y = self.pageYOffset;}else if (document.documentElement && document.documentElement.scrollTop) {// Explorer 6 Strictx = document.documentElement.scrollLeft;y = document.documentElement.scrollTop;}else if (document.body) {// all other Explorersx = document.body.scrollLeft;y = document.body.scrollTop;}return (new Coordinate(x,y));},page: function() {var x,y;var test1 = document.body.scrollHeight;var test2 = document.body.offsetHeight;if (test1 > test2) // all but Explorer Mac{x = document.body.scrollWidth;y = document.body.scrollHeight;}else // Explorer Mac;//would also work in Explorer 6 Strict, Mozilla and Safari{x = document.body.offsetWidth;y = document.body.offsetHeight;}return (new Coordinate(x,y));}};String.prototype.trim = jQuery.trim;// 0-200: Theme Developer// 200-400: Portlet Developer// 400+: LiferayLiferay.zIndex = {DOCK:			10,DOCK_PARENT:	20,ALERT:			430,DROP_AREA:		440,DROP_POSITION:	450,DRAG_ITEM:		460};