Liferay.Portal = {};
Liferay.Portal.Tabs = {
show: function(namespace, names, id) {
var tab = jQuery('#' + namespace + id + 'TabsId');
var panel = jQuery('#' + namespace + id + 'TabsSection');
tab.siblings().removeClass('current');
tab.addClass('current');
panel.show();
var index = names.indexOf(id);
names.splice(index, 1);
for (var i = 0; i < names.length; i++) {
el = jQuery('#' + namespace + names[i] + 'TabsSection');
el.hide();
}
}
};
Liferay.Portal.StarRating = new Class({
/**
 * OPTIONS
 *
 * Required
 * displayOnly {boolean}: Whether the display is modifiable.
 *
 * Optional
 * rating {number}: The rating to initialize to.
 *
 * Callbacks
 * onComplete {function}: Called when a rating is selected.
 */
initialize: function(id, options) {
this.options = options || {};
this.rating = this.options.rating || 0;
var item = jQuery('#' + id);
this.stars = item.find('img');
var self = this;
if (!this.options.displayOnly) {
item.bind('mouseout', {self: this}, this.onHoverOut);
this.stars.each(function(index) {
this.index = index + 1;
jQuery(this).bind('click', {self: self}, self.onClick)
.bind('mouseover', {self: self}, self.onHoverOver);
})
}
this.display(this.rating, 'rating');
},
display: function(rating, mode) {
var self = this;
rating = rating == null ? this.rating : rating;
var whole = Math.floor(rating);
var fraction = rating - whole;
this.stars.each(function(index) {
image = this;
if (index < whole) {
if (mode == 'hover') {
image.src = image.src.replace(/\bstar_.*\./, 'star_hover.');
}
else {
image.src = image.src.replace(/\bstar_.*\./, 'star_on.');
}
}
else {
if (fraction < 0.25) {
image.src = image.src.replace(/\bstar_.*\./, 'star_off.');
}
else if (fraction < 0.50) {
image.src = image.src.replace(/\bstar_.*\./, 'star_on_quarter.');
}
else if (fraction < 0.75) {
image.src = image.src.replace(/\bstar_.*\./, 'star_on_half.');
}
else if (fraction < 1.00) {
image.src = image.src.replace(/\bstar_.*\./, 'star_on_threequarters.');
}
fraction = 0;
}
});
},
onHoverOver: function(event) {
event.data.self.display(this.index, 'hover');
},
onHoverOut: function(event) {
event.data.self.display();
},
onClick: function(event) {
var target = this;
var newRating = target.index;
var self = event.data.self;
self.rating = newRating;
if (self.options.onComplete) {
self.options.onComplete(newRating);
}
self.display(newRating);
}
});
Liferay.Portal.ThumbRating = new Class({
/**
 * OPTIONS
 *
 * Required
 * displayOnly {boolean}: Whether the display is modifiable.
 *
 * Optional
 * rating {number}: The rating to initialize to.
 *
 * Callbacks
 * onComplete {function}: Called when a rating is selected.
 */
initialize: function(options) {
var instance = this;
options = options || {};
instance.rating = options.rating || 0;
var item = jQuery('#' + options.id);
instance.triggers = item.find('.rating');
instance._onComplete = options.onComplete;
if (!options.displayOnly) {
instance.triggers.click(
function(event) {
instance._click(event, this);
}
);
}
},
_click: function(event, obj) {
var instance = this;
var trigger = jQuery(obj);
var rating = trigger.is('.rate-up') ? 1 : -1;
if (trigger.is('.rated')) {
rating = 0;
}
instance.triggers.not(obj).removeClass('rated');
trigger.toggleClass('rated');
if (instance._onComplete) {
instance._onComplete(rating);
}
}
});
Liferay.Portal.ToolTip = {
container: null,
show: function(event, obj, text) {
var instance = this;
var container = instance.container;
var currentItem = jQuery(obj);
var position = currentItem.offset();
var dimensions = instance._windowCalculation();
if (!container) {
container = jQuery('<div class="portal-tool-tip"></div>').appendTo('body');
instance.container = container;
}
container.html(text);
container.show();
var boxWidth = container.width();
var width = currentItem.width();
var height = currentItem.height();
var boxHeight = container.height();
var left = position.left - (boxWidth / 2);
var top = position.top + height + 5;
if (left < 0) {
left = 5;
}
else {
left += 5;
}
if (left + boxWidth > dimensions.right) {
left = (left - (boxWidth / 2 )) + width;
}
if (top + boxHeight > dimensions.bottom) {
top = top - (height + boxHeight + 5);
}
container.css(
{
cursor: 'default',
left: left + 'px',
position: 'absolute',
top: top + 'px',
zIndex: Liferay.zIndex.TOOLTIP
}
);
currentItem.one(
'mouseout',
function() {
instance.hide();
}
);
},
hide: function(event) {
var instance = this;
instance.container.hide();
},
_windowCalculation: function() {
var instance = this;
if (instance._window.right == null) {
var windowSize = {};
var body = instance._body;
if (!body) {
body = jQuery('body');
instance._body = body;
}
instance._window = {
bottom: body.height(),
left: 0,
right: body.width(),
top: 0
};
jQuery(window).resize(
function() {
instance._window.bottom = body.height();
instance._window.right = body.width();
}
);
}
return instance._window;
},
_body: null,
_window: {}
};