ICLPortal.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() {var inputs = jQuery('input:text, input:text, textarea');var focusEvent = function(event) {jQuery(this).addClass('focus');var value = this.value;var caretPos = value.length;if (this.createTextRange && (this.nodeName.toLowerCase() !== 'textarea')) {var textRange = this.createTextRange();textRange.moveStart('character', caretPos);}else if (this.selectionStart) {this.selectionStart = caretPos;this.selectionEnd = caretPos;}if (ICLPortal.Browser.is_ie && (this != document.activeElement)) {this.focus();}};var blurEvent = function(event) {jQuery(this).removeClass('focus');};inputs.focus(focusEvent);inputs.blur(blurEvent);inputs.livequery('focus',focusEvent);inputs.livequery('blur',blurEvent);jQuery('input.lfr-auto-focus').livequery(function() {jQuery('input').trigger('blur');jQuery(this).trigger('focus');});},addInputType: function(el) {var instance = this;instance.addInputType = function() {};if (ICLPortal.Browser.is_ie && ICLPortal.Browser.version() < 7) {instance.addInputType = function(el) {var item;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);});};}return instance.addInputType(el);},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 (ICLPortal.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 (ICLPortal.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('ICLPortal.Util.processTab("' + box.id + '")', 0);}},createFlyouts: function(options) {var instance = this;options = options || {};var flyout, containers;var containerFilter = function() {return (jQuery('ul', this).length != 0);};if (!options.container) {flyout = jQuery('.lfr-flyout');containers = flyout.find('li').filter(containerFilter);}else {flyout = jQuery('li', options.container);containers = flyout.filter(containerFilter);}containers.addClass('lfr-flyout');containers.addClass('has-children');if (!options.container) {containers = containers.add(flyout);}var over = function(event) {jQuery('> ul', this).show();if (options.mouseOver) {options.mouseOver.apply(this, [event]);}};var out = function(event) {jQuery('> ul', this).hide();if (options.mouseOut) {options.mouseOut.apply(this, [event]);}};containers.hoverIntent({interval: 0,out: out,over: over,sensitivity: 2,timeout: 300});},disableElements: function(obj) {var el = jQuery(obj);var children = el.find('*');var emptyFn = function() { return false; };var defaultEvents = function(el) {el.onclick = emptyFn;el.onmouseover = emptyFn;el.onmouseout = emptyFn;jQuery.event.remove(el);};var ieEvents = function(el) {el.onmouseenter = emptyFn;el.onmouseleave = emptyFn;};var removeEvents = defaultEvents;if (ICLPortal.Browser.is_ie) {removeEvents = function(el) {defaultEvents(el);ieEvents(el);};}for (var i = children.length - 1; i >= 0; i--) {var item = children[i];var nodeName = item.nodeName.toLowerCase();item.style.cursor = 'default';removeEvents(item);if (nodeName == 'a') {item.href = 'javascript: ;';}else if (nodeName == 'input' || nodeName == 'select' || nodeName == 'script') {item.disabled = true;}else if (nodeName == 'form') {item.action = '';item.onsubmit = emptyFn;}};},disableEsc: function() {if ((document.all) && (event.keyCode == 27)) {event.returnValue = false;}},disableTextareaTabs: function(textarea) {var instance = this;if (!textarea.jquery) {textarea = jQuery(textarea);}if (textarea.attr('textareatabs') != 'enabled') {textarea.attr('textareatabs', 'disabled');textarea.unbind('keydown.liferay', ICLPortal.Util.textareaTabs);}},enableTextareaTabs: function(textarea) {var instance = this;if (!textarea.jquery) {textarea = jQuery(textarea);}if (textarea.attr('textareatabs') != 'enabled') {textarea.attr('textareatabs', 'enabled');textarea.bind('keydown.liferay', ICLPortal.Util.textareaTabs);}},endsWith: function(str, x) {return (str.lastIndexOf(x) === (str.length - x.length));},focusFormField: function(el, caretPosition) {var interacting = false;var eventData = caretPosition ? [caretPosition] : null;jQuery(document).one('click',function() {interacting = true;});jQuery(function() {if (el && (el.offsetHeight != 0) && !interacting) {var elObj = jQuery(el);jQuery('input').trigger('blur');elObj.trigger('focus', eventData);}});},getColumnId: function(str) {var columnId = str.replace(/layout-column_/, '');return columnId;},getPortletId: function(portletId) {portletId = portletId.replace(/^p_p_id_/i, '');portletId = portletId.replace(/_$/, '');return portletId;},getSelectedRadioValue: function(col) {return jQuery(col).filter(':checked').val() || '';},getURLWithSessionId: function(url) {if (document.cookie && (document.cookie.length > 0)) {return url;}// LEP-4787var x = url.indexOf(';');if (x > -1) {return url;}var sessionId = ';jsessionid=' + themeDisplay.getSessionId();x = url.indexOf('?');if (x > -1) {return url.substring(0, x) + sessionId + url.substring(x);}// In IE6, http://www.abc.com;jsessionid=XYZ does not work, but// http://www.abc.com/;jsessionid=XYZ does work.x = url.indexOf('//');if (x > -1) {var y = url.lastIndexOf('/');if (x + 1 == y) {return url + '/' + sessionId;}}return url + sessionId;},/** * OPTIONS * * Required * button {string|object}: The button that opens the popup when clicked. * height {number}: The height to set the popup to. * textarea {string}: the name of the textarea to auto-resize. * url {string}: The url to open that sets the editor. * width {number}: The width to set the popup to. */inlineEditor: function(options) {var instance = this;if (options.url && options.button) {var url = options.url;var button = options.button;var width = options.width || 680;var height = options.height || 640;var textarea = options.textarea;var clicked = false;var editorButton = jQuery(button);editorButton.click(function(event) {if (!clicked) {var form = jQuery([]);var popup = ICLPortal.Popup({height: 640,width: 680,noCenter: true,title: '',resize: function(e, ui) {var cssData = ui.size;var dimensions = {};if (cssData.height) {dimensions.height = cssData.height - 130;}if (cssData.width) {dimensions.width = cssData.width - 20;}form.css(dimensions);jQuery(document).trigger('popupResize');},onClose: function() {jQuery(document).unbind('popupResize.liferay');clicked = false;}});jQuery.ajax({url: url + '&rt=' + ICLPortal.Util.randomInt(),success: function(message) {popup.find('.loading-animation').remove();popup.append(message);form = popup.find('form');if (textarea) {var usingPlainEditor = popup.find('.lfr-textarea').length;ICLPortal.Util.resizeTextarea(textarea, !usingPlainEditor, true);}}});clicked = true;}});}},isArray: function(object) {return !!(window.Array && 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) {ICLPortal.Util.sortBox(toBox);}},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) {ICLPortal.Util.savePortletTitle({plid: plid,doAsUserId: doAsUserId,portletId: portletId,title: value});}return cruft + value;},{cssclass: 'text',data: function(value, settings) {var input = jQuery(this);var re = new RegExp('<\/?[^>]+>|\n|\r|\t', 'gim');var cruft = value.match(re);settings._LFR_ = {};settings._LFR_.oldText = value;settings._LFR_.cruft = cruft;value = value.replace(re, '');settings._LFR_.oldText = value;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();},randomInt: function() {return (Math.ceil(Math.random() * (new Date).getTime()));},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, resizeToInlinePopup) {var init = function() {var el = jQuery('#' + elString);if (!el.length) {el = jQuery('textarea[@name=' + elString + ']');}if (el.length) {var pageBody;if (resizeToInlinePopup) {pageBody = el.parents('.ui-dialog:first');}else {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) {}}var diff = 170;if (!resizeToInlinePopup) {diff = 100;}el.css({height: (pageBodyHeight - diff) + 'px',width: '98%'});};resize();if (resizeToInlinePopup) {jQuery(document).bind('popupResize.liferay', resize);}else {jQuery(window).resize(resize);}}};jQuery(init);},resubmitCountdown: function(formName) {if (ICLPortal.Util.submitCountdown > 0) {ICLPortal.Util.submitCountdown--;setTimeout('ICLPortal.Util.resubmitCountdown("' + formName + '")', 1000);}else {ICLPortal.Util.submitCountdown = 0;if (!ICLPortal.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);},showCapsLock: function(event, span) {var keyCode = event.keyCode ? event.keyCode : event.which;var shiftKey = event.shiftKey ? event.shiftKey : ((keyCode == 16) ? true : false);if (((keyCode >= 65 && keyCode <= 90) && !shiftKey) ||((keyCode >= 97 && keyCode <= 122) && shiftKey)) {document.getElementById(span).style.display = '';}else {document.getElementById(span).style.display = 'none';}},sortBox: function(box) {var newBox = [];for (var i = 0; i < box.length; i++) {newBox[i] = [box[i].value, box[i].text];}newBox.sort(ICLPortal.Util.sortByAscending);var boxObj = jQuery(box);boxObj.find('option').remove();jQuery.each(newBox,function(key, value) {boxObj.append('<option value="' + value[0] + '">' + value[1] + '</option>');});if (ICLPortal.Browser.is_ie) {var currentWidth = boxObj.css('width');if (currentWidth == 'auto') {boxObj.css('width', 'auto');}}},sortByAscending: function(a, b) {a = a[1].toLowerCase();b = b[1].toLowerCase();if (a > b) {return 1;}if (a < b) {return -1;}return 0;},startsWith: function(str, x) {return (str.indexOf(x) === 0);},/** * OPTIONS * * Required * popup {string|object}: A jQuery selector or DOM element of the popup that contains the editor. * textarea {string}: the name of the textarea to auto-resize. * url {string}: The url to open that sets the editor. */switchEditor: function(options) {var instance = this;if (options.url && options.popup) {var url = options.url;var popup = options.popup;var textarea = options.textarea;if (!popup.jquery) {popup = jQuery(popup);}var popupMessage = popup;jQuery.ajax({url: url,beforeSend: function() {popupMessage.empty();popupMessage.append('<div class="loading-animation"><div>');},  	success: function(message) {popupMessage.empty();popupMessage.append(message);if (textarea) {var usingPlainEditor = popup.find('.lfr-textarea').length;ICLPortal.Util.resizeTextarea(textarea, !usingPlainEditor, true);} 	}});}},textareaTabs: function(event) {var el = this;var pressedKey = event.which;if(pressedKey == 9 || (ICLPortal.Browser.is_safari && pressedKey == 25)) {event.preventDefault();event.stopPropagation();var oldscroll = el.scrollTop;if (el.setSelectionRange) {var caretPos = el.selectionStart + 1;var elValue = el.value;el.value = elValue.substring(0, el.selectionStart) + '\t' + elValue.substring(el.selectionEnd, elValue.length);setTimeout(function() {el.focus();el.setSelectionRange(caretPos, caretPos);}, 0);}else {document.selection.createRange().text='\t';}        el.scrollTop = oldscroll;return false;    }},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();});},toggleControls: function() {var instance = this;var trigger = jQuery('.toggle-controls');var docBody = jQuery(document.body);var hiddenClass = 'controls-hidden';var visibleClass = 'controls-visible';var currentClass = visibleClass;if (ICLPortal._editControlsState != 'visible') {currentClass = hiddenClass;}docBody.addClass(currentClass);trigger.click(function(event) {docBody.toggleClass(visibleClass).toggleClass(hiddenClass);ICLPortal._editControlsState = (docBody.is('.' + visibleClass) ? 'visible' : 'hidden');jQuery.ajax({url: themeDisplay.getPathMain() + '/portal/session_click',data: {'liferay_toggle_controls': ICLPortal._editControlsState}});});},viewport: {frame: function() {var instance = this;var viewport = jQuery(window);var x = viewport.width();var y = viewport.height();return {x: x, y: y};},page: function() {var instance = this;var viewport = jQuery(document);var x = viewport.width();var y = viewport.height();return {x: x, y: y};},scroll: function() {var instance = this;var viewport = jQuery(window);var x = viewport.scrollLeft();var y = viewport.scrollTop();return {x: x, y: y};}}};// 0-200: Theme Developer// 200-400: Portlet Developer// 400+: ICLPortalICLPortal.zIndex = {DOCK:			10,DOCK_PARENT:	20,ALERT:			430,DROP_AREA:		440,DROP_POSITION:	450,DRAG_ITEM:		460,TOOLTIP:		470};