var utilityConditionalRequired = {
viewModelSubscriptionField : {},
modelMap : [],
koModelName : "appViewModel",
init : function(fieldToSubscribe, modelMapInit, customModelName) {
utilityConditionalRequired.viewModelSubscriptionField = fieldToSubscribe;
utilityConditionalRequired.modelMap = modelMapInit;
if (customModelName != null) {
utilityConditionalRequired.koModelName = customModelName;
}
fieldToSubscribe.subscribe(function(change) {
utilityConditionalRequired.onChangeVal(change);
})
// Gestione primo caricamento
utilityConditionalRequired.onChangeVal(fieldToSubscribe());
},
onChangeVal : function(change) {
var chosenDiv = [];
var notChosenDiv = [];
for (var i = 0; i < utilityConditionalRequired.modelMap.map.length; i++) {
var item = utilityConditionalRequired.modelMap.map[i];
if (item.key == change) {
chosenDiv.push(item.value);
} else {
notChosenDiv.push(item.value);
}
}
utilityConditionalRequired.removeRequiredFromDivInput(notChosenDiv);
utilityConditionalRequired.addRequiredToDivInput(chosenDiv);
},
removeRequiredFromDivInput : function(divArray) {
for (var i = 0; i < divArray.length; i++) {
var div = divArray[i];
$("#" + div).hide();
$('#' + div + ' input[data-bind][data-message]').each(function() {
var koProperty = $(this).attr("name");
var propertyModel = eval(utilityConditionalRequired.koModelName + "." + koProperty);
if (propertyModel.rules != null) {
eval(utilityConditionalRequired.koModelName + "." + koProperty).rules.remove(function(item) {
return item.rule == "required";
});
}
});
}
},
addRequiredToDivInput : function(divArray) {
for (var i = 0; i < divArray.length; i++) {
var div = divArray[i];
$("#" + div).show();
$('#' + div + ' input[data-bind][data-message]').each(
function() {
var koProperty = $(this).attr("name");
var fieldId = $(this).attr("id");
if (fieldId == null) {
fieldId = "";
console.log("id del campo non definito");
}
var message = htmlEscapeUtility.escapeHtml($(this).attr("data-message"));
var propertyModel = eval(utilityConditionalRequired.koModelName + "." + koProperty);
if(message) {
propertyModel.extend({
"required" : {
"message" : "" + message + ""
}
});
}
});
$('#' + div + ' select[data-bind][data-message]').each(
function() {
var koProperty = $(this).attr("name");
var fieldId = $(this).attr("id");
if (fieldId == null) {
fieldId = "";
console.log("id del campo non definito");
}
var message = htmlEscapeUtility.escapeHtml($(this).attr("data-message"));
var propertyModel = eval(utilityConditionalRequired.koModelName + "." + koProperty);
if(message) {
propertyModel.extend({
"required" : {
"message" : "" + message + ""
}
});
}
});
}
}
}