Tower.EUM.RenderElements = {
init : function(params) {
var instance = this;
instance.modelId = params.modelId;
instance.elementValues = params.elementValues;
instance.targetId = params.targetId;
instance.elementPrefix = params.elementPrefix;
instance.extFunction = params.extFunction;
instance.target = jQuery(instance.targetId);
instance.target.text('');
if (instance.modelId && instance.modelId != '') {
instance.model = Liferay.Service.Tower.EditorialUnitModel.getEditorialUnitModel( {
serviceParameterTypes : 'java.lang.String',
editorialUnitModelId : instance.modelId
});
var elements = instance.model.elements;
for ( var i = 0; i < elements.length; i++) {
instance._renderElement(elements[i]);
if (instance.extFunction) {
instance.extFunction(elements[i]);
}
}
}
instance.target.show();
},
_renderElement : function(element) {
var instance = this;
var target = instance.target;
var elementValues = instance.elementValues;
var elementPrefix = instance.elementPrefix;
var elementKey = element.id
+ Tower.Index.getElementTypeSuffix(element.type, element.source
&& element.source.type.indexOf("category") != -1);
var elementValue = '';
if (elementValues[elementKey]) {
elementValue = elementValues[elementKey][0];
}
if ((!element.search || element.search != 'none') && !element.isHidden) {
var emptyFieldCKB = false;
target.append("<div class='tower-search-contextual-model-element'></div>");
target = jQuery("div:last", target);
target.append("<div class='tower-search-contextual-model-element-label'>"
+ element.label.value + "</div>");
var field = elementPrefix + elementKey;
var html = "";
if (element.type.indexOf("boolean") != -1
|| element.type.indexOf("dropDownBoolean") != -1
|| element.type.indexOf("flagBoolean") != -1) {
html = "";
html += "<select class='tower-search-contextual-model-select' name='" + field + "'>";
html += "<option value=''>" + Liferay.Language.get("all") + "</option>";
html += "<option value='__EMPTY__'";
if (instance._contains(elementValues[elementKey], '__EMPTY__')) {
html += " selected";
}
html += ">";
html += Liferay.Language.get("empty-field");
html += "</option>";
if (element.source && element.source.type.indexOf("yesNo") != -1) {
html += "<option value='yes'";
if (elementValue == 'yes') {
html += " selected";
}
html += ">" + Liferay.Language.get("yes") + "</option>";
html += "<option value='no'";
if (elementValue == 'no') {
html += " selected";
}
html += ">" + Liferay.Language.get("no") + "</option>";
} else {
html += "<option value='true'";
if (elementValue == 'true') {
html += " selected";
}
html += ">" + Liferay.Language.get("true") + "</option>";
html += "<option value='false'";
if (elementValue == 'false') {
html += " selected";
}
html += ">" + Liferay.Language.get("false") + "</option>";
}
html += "</select>";
} else if (element.type.indexOf("choice") != -1
|| element.type.indexOf("dropDownChoice") != -1
|| element.type.indexOf("dropDownMultiChoice") != -1
|| element.type.indexOf("flagMultiChoice") != -1) {
html = "";
html += "<select class='tower-search-contextual-model-select' name='" + field + "'";
if (element.type.indexOf("dropDownMultiChoice") != -1
|| element.type.indexOf("flagMultiChoice") != -1) {
html += " multiple='true'";
}
html += ">";
html += "<option value=''>---</option>";
html += "<option value='__EMPTY__'";
if (instance._contains(elementValues[elementKey], '__EMPTY__')) {
html += " selected";
}
html += ">";
html += Liferay.Language.get("empty-field");
html += "</option>";
if (element.source
&& element.source.type.indexOf("listItems") != -1
&& element.source.items) {
for ( var i = 0; i < element.source.items.length; i++) {
html += "<option value='"
+ element.source.items[i].value + "'";
if (instance._contains(elementValues[elementKey], element.source.items[i].value)) {
html += " selected";
}
html += ">";
if (element.source.items[i].label != '') {
html += element.source.items[i].label;
} else {
html += element.source.items[i].value;
}
html += "</option>";
}
} else if (element.source
&& element.source.type.indexOf("category") != -1) {
var categories = instance._getCategoriesBySource(element.source);
for ( var i = 0; i < categories.values.length; i++) {
html += "<option value='" + categories.values[i] + "'";
if (instance._contains(elementValues[elementKey], categories.values[i])) {
html += " selected";
}
html += ">";
html += categories.labels[i];
html += "</option>";
}
}
html += "</select>";
} else if (element.type.indexOf("date") != -1
|| element.type.indexOf("dateTime") != -1
|| element.type.indexOf("time") != -1) {
html = "";
html += "<input name='" + field + "' type='hidden' value='" + elementValue + "' />";
if (element.type.indexOf("date") != -1) {
html += "<input class='tower-search-contextual-model-input'";
html += " name='" + field + "DATE'";
html += " type='text'";
html += " value='" + instance._getDateTimeValue(elementValue, 1) + "' />";
}
if (element.type.indexOf("dateTime") != -1) {
html += "&#160;";
}
if (element.type.indexOf("Time") != -1
|| element.type.indexOf("time") != -1) {
html += "<select class='input-time'";
html += " name='" + field + "HOUR'>";
html += instance._getTimeOptions(24, instance._getDateTimeValue(elementValue, 2));
html += "</select>&#160;";
html += "<select class='input-time'";
html += " name='" + field + "MINUTE'>";
html += instance._getTimeOptions(60, instance._getDateTimeValue(elementValue, 3));
html += "</select>";
}
emptyFieldCKB = true;
} else {
html = "";
html += "<input class='tower-search-contextual-model-input'";
html += " name='" + field + "'";
html += " type='text' value='" + elementValue + "' />";
emptyFieldCKB = true;
}
if (emptyFieldCKB) {
html += "<div class='tower-search-contextual-model-element-field-emptyckb'>";
html += "<input";
html += " name='" + field + "'";
html += " type='checkbox'";
html += " value='__EMPTY__' />&#160;";
html += Liferay.Language.get("empty-field");
html += "</div>";
}
target.append("<div class='tower-search-contextual-model-element-field'>" + html + "</div>");
if (element.type.indexOf("date") != -1) {
var targetDate = jQuery('input[name="' + field + 'DATE"]', target);
targetDate.datepicker( {
buttonImage : themeDisplay.getPathThemeImages() + '/common/calendar.png',
showOn : 'both',
buttonImageOnly : true,
dateFormat: 'dd/mm/yy',
onSelect : function(date, datepicker) {
var day = datepicker.selectedDay;
var month = datepicker.selectedMonth + 1;
var year = datepicker.selectedYear;
var inputField = jQuery('input[name="' + field + '"]:hidden', target);
var inputDate = jQuery('input[name="' + field + 'DATE"]', target);
var tmpValue = '';
if (inputDate.val() != '') {
tmpValue = year + '' + (month < 10 ? '0' + month : month) + '' + (day < 10 ? '0' + day : day);
}
if (element.type.indexOf("Time") != -1
|| element.type.indexOf("time") != -1) {
var selectHour = jQuery('select[name="' + field + 'HOUR"]', target);
var selectMinute = jQuery('select[name="' + field + 'MINUTE"]', target);
if (tmpValue == '') {
selectHour.val('');
selectMinute.val('');
} else {
if (selectHour.val() != '') {
tmpValue += selectHour.val() + selectMinute.val();
}
}
}
if (tmpValue != '') {
if (tmpValue.length < 4) {
tmpValue = instance._fillValue(tmpValue, '0', 4);
} else {
tmpValue = instance._fillValue(tmpValue, '0', 14);
}
}
inputField.val(tmpValue);
inputField.change();
}
});
}
if (element.type.indexOf("Time") != -1
|| element.type.indexOf("time") != -1) {
var targetHour = jQuery('select[name="' + field + 'HOUR"]', target);
targetHour.change(function() {
var inputField = jQuery('input[name="' + field + '"]:hidden', target);
var selectHour = jQuery(this);
var selectMinute = jQuery('select[name="' + field + 'MINUTE"]', target);
var tmpValue = inputField.val();
var addValue = true;
if (element.type.indexOf("date") != -1) {
if (tmpValue == '') {
addValue = false;
} else {
tmpValue = tmpValue.substr(0, 8);
}
}
if (addValue) {
if (selectHour.val() != '') {
tmpValue += selectHour.val() + selectMinute.val();
} else {
addValue = false;
}
if (tmpValue != '') {
if (tmpValue.length < 4) {
tmpValue = instance._fillValue(tmpValue, '0', 4);
} else {
tmpValue = instance._fillValue(tmpValue, '0', 14);
}
}
inputField.val(tmpValue);
inputField.change();
}
if (!addValue) {
selectHour.val('');
selectMinute.val('');
}
});
var targetMinute = jQuery('select[name="' + field + 'MINUTE"]', target);
targetMinute.change(function() {
var inputField = jQuery('input[name="' + field + '"]:hidden', target);
var selectHour = jQuery('select[name="' + field + 'HOUR"]', target);
var selectMinute = jQuery(this);
var tmpValue = inputField.val();
var addValue = true;
if (element.type.indexOf("date") != -1) {
if (tmpValue == '') {
addValue = false;
}
}
if (addValue) {
tmpValue = inputField.val().substr(0, 10);
if (selectHour.val() != '') {
tmpValue += selectMinute.val();
if (tmpValue != '') {
if (tmpValue.length < 4) {
tmpValue = instance._fillValue(tmpValue, '0', 4);
} else {
tmpValue = instance._fillValue(tmpValue, '0', 14);
}
}
inputField.val(tmpValue);
inputField.change();
} else {
addValue = false;
}
}
if (!addValue) {
selectMinute.val('');
}
});
}
if (emptyFieldCKB) {
var targetField = jQuery('input[name="' + field + '"]:hidden,input[name="' + field + '"]:text', target);
var targetFieldCKB = jQuery('input[name="' + field + '"]:checkbox', target);
targetField.keypress(function() {
targetFieldCKB.removeAttr('checked');
});
targetField.change(function() {
targetFieldCKB.removeAttr('checked');
});
targetFieldCKB.click(function() {
if (this.checked) {
targetField.val('');
if (element.type.indexOf("date") != -1) {
jQuery('input[name="' + field + 'DATE"]', target).val('');
}
if (element.type.indexOf("Time") != -1
|| element.type.indexOf("time") != -1) {
jQuery('select[name="' + field + 'HOUR"]', target).val('');
jQuery('select[name="' + field + 'MINUTE"]', target).val('');
}
}
});
}
}
},
_fillValue : function(value, c, length) {
for (var i = value.length; i < length; i++) {
value += c;
}
return value;
},
_getDateTimeValue : function(value, type) {
if (value && value.length > 0) {
switch (type) {
case 1:
if (value.length >= 6) {
return  value.substr(6, 2) + "/" + value.substr(4, 2) + "/" + value.substr(0, 4);
}
break;
case 2:
switch (value.length) {
case 2:
return value;
break;
case 4:
return value.substr(0, 2);
break;
case 12:
case 14:
return value.substr(8, 2);
break;
}
break;
case 3:
switch (value.length) {
case 2:
return value;
break;
case 4:
return value.substr(2, 2);
break;
case 12:
case 14:
return value.substr(10, 2);
break;
}
break;
}
} else {
return '';
}
},
_getTimeOptions : function(index, value) {
var options = "<option value=''>--</option>";
var tmpValue = "";
for ( var i = 0; i < index; i++) {
if (i < 10) {
tmpValue = "0" + i;
} else {
tmpValue = "" + i;
}
options = options + "<option value='" + tmpValue + "'";
if (tmpValue == value) {
options = options + " selected";
}
options = options + ">" + tmpValue + "</option>";
}
return options;
},
_getCategoriesBySource : function(source) {
var instance = this;
var categories = new Object();
categories.values = new Array();
categories.labels = new Array();
for ( var j = 0; j < source.objectRefs.length; j++) {
var inclusive = source.objectRefs[j].id.inclusive;
if (inclusive) {
var categoryId = parseInt(source.objectRefs[j].id.value);
var category = Liferay.Service.Tower.TCategory.getUserWSTCategory( {
categoryId : categoryId
});
if (category.length > 0) {
categories.values.push(category[0].categoryId);
categories.labels.push(category[0].name)
}
}
var parentCategoryId = source.objectRefs[j].id.value;
var depth = source.objectRefs[j].depth.value;
var categoriesToExcludes = new Array();
if (source.objectRefs[j].filters) {
for ( var i = 0; i < source.objectRefs[j].filters.length; i++) {
categoriesToExcludes.push(source.objectRefs[0].filters[i].value);
}
}
return instance._getCategories(categories, parentCategoryId, categoriesToExcludes, depth, "");
}
},
_getCategories : function(categories, parentCategoryId,
categoriesToExcludes, depth, prefix) {
var instance = this;
if (depth > 0) {
var objects = Liferay.Service.Tower.TCategory.getUserWSTCategories( {
serviceParameterTypes : 'long,[Ljava.lang.String;',
parentCategoryId : parentCategoryId,
excludes : categoriesToExcludes.join(",")
});
for ( var i = 0; i < objects.length; i++) {
categories.values.push(objects[i].categoryId);
categories.labels.push(prefix + objects[i].name);
instance._getCategories(categories, objects[i].categoryId, categoriesToExcludes, depth - 1, prefix + objects[i].name + " - ");
}
}
return categories;
},
_contains : function(values, test) {
if (values && test) {
for ( var i = 0; i < values.length; i++) {
if (values[i] == test) {
return true;
}
}
}
return false;
},
openHelp : function(help) {
var w = Tower.Util.getWindowWidth(800);
w = (w - 400);
var position = 'center';
if (w > 0) {
position = [ (w / 2), 50 ];
}
help.show();
var popup = Liferay.Popup( {
title : Liferay.Language.get('help'),
// message: html,
message : help,
modal : true,
width : 400,
resizable : false,
position : position
});
}
};
