


var XML_DEFAULT_VALUE = "XMLDEFAULTVALUE";
var XML_FILTER = "XMLFILTER";
var XML_FILTER_EXECUTE = "XMLFILTEREXECUTE"
var EVALUATION_OK = "EVALOK"
var NO_EVALUATION = "NOEVAL"
var ISI_XML_ERROR_TAG = "ISIXMLERROR"



function iws_calculateDefaultValue(ctrl, page) {

var fifo = new iwsFifo();
var aCtrls = new Array();

fifo.put(ctrl);

while (!fifo.empty()) {

var evaluatedCtrl = fifo.get();

if (!evaluatedCtrl.evaluationDone) {
if (evaluatedCtrl.alwaysEvaluate || evaluatedCtrl.value() == "") {
if (!evaluatedCtrl.evaluationStandBy) {
evaluatedCtrl.evaluationStandBy = true;
aCtrls.push(evaluatedCtrl)
}
}
}

for (var i = 0; i < evaluatedCtrl.df_controlsToUpdate.length; ++i) {
toUpdateCtrl = page.getCtrl(evaluatedCtrl.df_controlsToUpdate[i]);
if (toUpdateCtrl) {
if (!toUpdateCtrl.evaluationDone && !aContainsB(evaluatedCtrl.updaters, toUpdateCtrl.id)) {
toUpdateCtrl.updaters.push(evaluatedCtrl.id);
toUpdateCtrl.evaluationLevel = evaluatedCtrl.evaluationLevel + 1;
fifo.put(toUpdateCtrl);
}
}
}
}

var iTop = aCtrls.length;
if (iTop > 0) {
aCtrls.sort(iwsAllCtrls.sortByLevel)

for (var i = 0; i < iTop; ++i) {
evaluatedCtrl = aCtrls[i];
if (evaluatedCtrl.stopPropagation === false) {
evaluatedCtrl.stopPropagation = true;
iws_evaluateDefaultValue(evaluatedCtrl);
}

evaluatedCtrl.evaluationStandBy = false;
delete aCtrls[i];
}
}
}

function iws_checkFilter(ctrl, page) {
var fifo = new iwsFifo();
var aCtrls = new Array();

fifo.put(ctrl);

while (!fifo.empty()) {

var filteredCtrl = fifo.get();

if (!filteredCtrl.evaluationDone) {
if (filteredCtrl.checked) {
if (!filteredCtrl.evaluationStandBy) {
filteredCtrl.evaluationStandBy = true;
aCtrls.push(filteredCtrl)
}
}
}

for (var i = 0; i < filteredCtrl.fi_controlsToUpdate.length; ++i) {
toFilterCtrl = page.getCtrl(filteredCtrl.fi_controlsToUpdate[i]);
if (toFilterCtrl) {
if (!toFilterCtrl.evaluationDone && !aContainsB(filteredCtrl.updaters, toFilterCtrl.id)) {
toFilterCtrl.updaters.push(filteredCtrl.id);
toFilterCtrl.evaluationLevel = filteredCtrl.evaluationLevel + 1;
fifo.put(toFilterCtrl);
}
}
}
}

var iTop = aCtrls.length;
if (iTop > 0) {
aCtrls.sort(iwsAllCtrls.sortByLevel)

for (var i = 0; i < iTop; ++i) {
filteredCtrl = aCtrls[i];
iws_evaluateFilter(filteredCtrl);
filteredCtrl.evaluationStandBy = false;
delete aCtrls[i];
}
}
}

function iws_evaluateDefaultValue(ctrl) {
var sSerialized = "";
if (!ctrl) return;

var sLinkedCtrlValues = ctrl.getLinkedCtrlValues(iwsAllCtrls);

var xaa = new IsiAjax("../../Classes/IsiAjax/IsiAjax.aspx");
xaa.init();
sSerialized += "Traitement=IsiAsyncXmlAnalyser";
sSerialized += "&XmlType=" + XML_DEFAULT_VALUE;
sSerialized += "&XmlClientCtrlValues=" + sLinkedCtrlValues;
sSerialized += "&XmlClientCtrlId=" + ctrl.id;

var sData = xaa.SyncExecute(sSerialized, "POST", "TEXT", "TEXT");

var values = sData.split("#");
var sResult = values[0];
var sValue = decodeURIComponent(values[1]);

if (sResult == EVALUATION_OK) {
ctrl.setValue(sValue);
} else if (sResult == ISI_XML_ERROR_TAG) {
eval("alert (\"" + sValue + "\");");
}
sLinkedCtrlValues = null;
}

function iws_evaluateFilter(ctrl) {
var sSerialized = "";
if (!ctrl) return;

var sLinkedCtrlFilter = ctrl.getLinkedCtrlFilter(iwsAllCtrls);

var xaa = new IsiAjax("../../Classes/IsiAjax/IsiAjax.aspx");
xaa.init();
sSerialized += "Traitement=IsiAsyncXmlAnalyser";
sSerialized += "&XmlType=" + XML_FILTER_EXECUTE;
sSerialized += "&XmlClientCtrlValues=" + sLinkedCtrlFilter;
sSerialized += "&XmlClientCtrlId=" + ctrl.id;
sSerialized += "&XmlClientCtrlValue=" + ctrl.value();

sValue = xaa.SyncExecute(sSerialized, "POST", "TEXT", "TEXT");

if (sValue == "") {
ctrl.setValue(sValue);
} else if (sValue == ISI_XML_ERROR_TAG) {
eval("alert (\"" + sValue + "\");");
}
sLinkedCtrlFilter = null;
}

function iws_evaluateAllDefaultValues() {

if (!iwsAllCtrls) return;
if (!iwsAllCtrls.tableau) return;

if (iws_isInAddOrDuplicationState()) {
var iTop = iwsAllCtrls.tableau.length;

for (var i = 0; i < iTop; ++i) {
var ctrl = iwsAllCtrls.tableau[i];

if (!ctrl.dynamicDefaultValue && !ctrl.stopPropagation) {
if (ctrl.df_ctrlsLinked.length <= 0) {
if (ctrl.df_controlsToUpdate.length > 0) {
ctrl.evaluationDone = true;
iws_calculateDefaultValue(ctrl, iwsAllCtrls);

ctrl.evaluationDone = false;
}
}
}
ctrl = null;
}

iwsAllCtrls.relatedCalculationInProgress = true;
for (var i = 0; i < iTop; ++i) {
var ctrl = iwsAllCtrls.tableau[i];
if (ctrl.dynamicDefaultValue && !ctrl.stopPropagation) {
ctrl.evaluationDone = true;
iws_calculateDefaultValue(ctrl, iwsAllCtrls)
ctrl.evaluationDone = false;
}
}
iwsAllCtrls.relatedCalculationInProgress = false;

} else if (iws_isInUpdateOrConsultState()) {
var iTop = iwsAllCtrls.tableau.length;

for (var i = 0; i < iTop; ++i) {
var ctrl = iwsAllCtrls.tableau[i];

if (ctrl.evaluationOnLoad) {
if (ctrl.dynamicDefaultValue) {
iws_calculateDefaultValue(ctrl, iwsAllCtrls);
}
}
ctrl = null;
}
}

iwsAllCtrls.dropUpdaters();
}

function iws_updateRelatedControls(oCtrl) {

if (!iwsAllCtrls) return;
if (!oCtrl) return;
if (!oCtrl.id) return;

if (iws_isInSearchState()) return;

if (iwsAllCtrls.relatedCalculationInProgress) return;

ctrl = iwsAllCtrls.getCtrlByFullId(oCtrl.id);
if (!ctrl) return;

iwsAllCtrls.relatedCalculationInProgress = true;

iwsAllCtrls.dropUpdaters();

ctrl.evaluationDone = true;
iws_calculateDefaultValue(ctrl, iwsAllCtrls);

iwsAllCtrls.dropUpdaters();

iws_checkFilter(ctrl, iwsAllCtrls);

ctrl.evaluationDone = false;
iwsAllCtrls.relatedCalculationInProgress = false;
}

function iws_isXmlAnalyserError(s) {
return (s.search(ISI_XML_ERROR_TAG) != -1);
}

