function treatAjaxResponse(responseXml) {
    var xml = responseXml.documentElement;
    $A(xml.childNodes).each(function (node) {
        try {
            switch (node.nodeName) {
            case 'form':
                treatAjaxResponseForm(node);
                break;
            case 'showdiv':
                treatAjaxResponseShowDiv(node);
                break;
            case 'hidediv':
                treatAjaxResponseHideDiv(node);
                break;
            case 'replacehtml':
                treatAjaxResponseReplaceHtml(node);
                break;
            case 'inserthtml':
                treatAjaxResponseInsertHtml(node);
                break;
            case 'removenode':
                treatAjaxResponseRemoveNode(node);
                break;
            case 'setattributenode':
                treatAjaxResponseSetAttributeNode(node);
                break;
            case 'renderview':
                treatAjaxResponseReplaceHtml(node);
                break;
            case 'javascript':
                treatAjaxResponseJavascript(node);
                break;
            case 'redirect':
                treatAjaxResponseRedirect(node);
                break;
            case 'useralert':
                treatAjaxResponseUserAlert(node);
                break;
            case 'usererror':
                treatAjaxResponseUserError(node);
                break
            }
        } catch(e) {}
    })
}

function treatAjaxResponseHideDiv(hideDivNode) {
    var divId = hideDivNode.getAttribute('divId');
    if ($(divId)) {
        $(divId).hide()
    }
}

function treatAjaxResponseReplaceHtml(replaceDivNode) {
    var divId = replaceDivNode.getAttribute('divId');
    if ($(divId)) {
        $(divId).innerHTML = replaceDivNode.firstChild.data
    }
}

function treatAjaxResponseInsertHtml(insertDivNode) {
    var divId 		= insertDivNode.getAttribute('divId');
    var position 	= insertDivNode.getAttribute('position');
    if($(divId)) {
    	switch(position) {
    		case 'after': 	$(divId).insert({'after' : 	insertDivNode.firstChild.data}); break;
    		case 'before': 	$(divId).insert({'before' : insertDivNode.firstChild.data}); break;
    		case 'top': 	$(divId).insert({'top' : 	insertDivNode.firstChild.data}); break;
    		default:
    		case 'bottom': 	$(divId).insert({'bottom' : insertDivNode.firstChild.data}); break;
    	}
    }
}

function treatAjaxResponseRemoveNode(nodeToRemove) {
    var divId = nodeToRemove.getAttribute('divId');
    if ($(divId)) {
    	$(divId).remove();
   }
}

function treatAjaxResponseSetAttributeNode(node) {
    var divId = node.getAttribute('divId');
    var attributeName = node.getAttribute('attributeName');
    if ($(divId)) {
        switch(attributeName) {
        case 'class':
        case 'className':
        	if(getBrowserName() == 'Microsoft Internet Explorer') {
        		$(divId).className = node.firstChild.data;
        	} else {
        		$(divId).setAttribute('class', node.firstChild.data);
        	}
            break;
        default:
            $(divId).setAttribute(attributeName, node.firstChild.data);
            break
        }
    }
}

function treatAjaxResponseShowDiv(showDivNode) {
    var divId = showDivNode.getAttribute('divId');
    var positionId = showDivNode.getAttribute('positionId');
    var positionBehaviour = showDivNode.getAttribute('positionBehaviour');
    var classe = showDivNode.getAttribute('class');
    var contentId = showDivNode.getAttribute('contentId');
    var message = showDivNode.getAttribute('message');
    showDivComplex(divId, positionId, positionBehaviour, classe, contentId, message)
}

function treatAjaxResponseJavascript(javascriptNode) {
    eval(javascriptNode.getAttribute('value'))
}

function treatAjaxResponseUserAlert(UserAlertNode) {
    window.setTimeout('display_divmsg("success","' + UserAlertNode.getAttribute('value') + '");', 500)
}

function treatAjaxResponseUserError(UserErrorNode) {
    window.setTimeout('display_divmsg("error","' + UserErrorNode.getAttribute('value') + '");', 500)
}

function treatAjaxResponseRedirect(redirectNode) {
    location.href = URL_SITE + CONTROLLER + '/' + redirectNode.getAttribute('value')
}

function treatAjaxResponseForm(nodeForm) {
    var idForm = nodeForm.getAttribute('id');
    var bHasError;
    var strMsgError = '';
    var nodeFieldId;
    var fieldId;
    $A($(idForm).getElements()).each(function (field) {
        bHasError = false;
        fieldId = field.getAttribute('id');
        $A(nodeForm.childNodes).each(function (nodeField) {
            nodeFieldId = nodeField.getAttribute('id');
            if (fieldId == nodeFieldId) {
                bHasError = true;
                strMsgError = nodeField.getAttribute('errorMessage');
                throw $break
            }
        });
        if (bHasError) {
            $(fieldId).addClassName('erreur');
            createErrorFormTip(fieldId, strMsgError)
        } else {
            resetSelectors(field)
        }
    })
}

function clearFormErrors(formNode) {
    var formId = formNode.getAttribute('id');
    $A($(formId).getElements()).each(function (field) {
        if (field.hasClassName('erreur')) {
            resetSelectors(field);
            removeTip(fieldgetAttribute('id'))
        }
    });
    arrayErrors = new Array()
}

function resetSelectors(node) {
    Tips.remove(node.getAttribute('id'));
    node.className = ''
}

function showDivComplex(newDivId, RefererId, positionBehaviour, classe, contentId, message) {
    var divNode;
    if (!$(newDivId)) {
        divNode = document.createElement('div');
        divNode.id = newDivId;
        divNode.style.display = 'none';
        switch (positionBehaviour) {
        case "append":
            appendChild(divNode, $(RefererId));
            break;
        case "appendfirst":
            appendChildFirst(divNode, $(RefererId));
            break;
        case "before":
            insertBefore(divNode, $(RefererId));
            break;
        case "after":
            insertAfter(divNode, $(RefererId));
            break
        }
    } else {
        divNode = $(newDivId)
    }
    if (classe != '') {
        divNode.className = classe
    }
    if (message != '') {
        if ($(contentId)) {
            $(contentId).innerHTML = message
        } else {
            divNode.innerHTML = message
        }
    }
    $(newDivId).show()
}

function showDivError(positionId, positionBehaviour, message, delay) {
    showDivComplex('divError', positionId, positionBehaviour, 'divError', 'divError', message);
    if (delay != '0') {
        setTimeout('new Effect.Fade(\'divError\')', delay)
    }
}

function doRequestAndXmlResponse(module, action, parametres, jsSuccess, jsCreate, jsFailure, jsComplete) {
    var url = URL_SITE + CONTROLLER + '/' + module + '/' + action;
    if (parametres) {
        if (parametres.indexOf('is_xml_response') == 0) {
            parametres += 'is_xml_response=true&'
        }
    }
    new Ajax.Request(url, {
        encoding: 'UTF-8',
        asynchronous: true,
        evalScripts: true,
        method: 'post',
        postBody: parametres,
        onCreate: function () {
            if (jsCreate) {
                eval(jsCreate);
            }
        },
        onSuccess: function (request, json) {
            if (request.responseXML) {
                treatAjaxResponse(request.responseXML);
            }
            if (jsSuccess) {
                eval(jsSuccess);
            }
        },
        onFailure: function (request, json) {
            if (jsFailure) {
                eval(jsFailure);
            }
            var msg = request.responseText;
            if(msg.length == 0) {
            	alert('Un problème a été détécté, veuillez contacter l\'administrateur');
            } else {
            	alert('Un problème a été détécté : ' + msg);
            }
        },
        onComplete: function () {
            if (jsComplete) {
                eval(jsComplete);
            }
        },
        onException: function (request, e) {
            alert('Un problème a été détécté : ' + e.message);
        }
    })
}

function doUpdater(module, action, div, parameters) {
    if(parameters) {
        if(parameters.indexOf('=') > 0) {
            var url = URL_SITE + CONTROLLER + '/' + module + '/' + action + '?' + parameters
        } else {
            var url = URL_SITE + CONTROLLER + '/' + module + '/' + action + '/' + parameters
        }
    } else {
        var url = URL_SITE + CONTROLLER + '/' + module + '/' + action
    }
    
    new Ajax.Updater(div, url, {
        asynchronous: true,
        evalScripts: true
    });
}

function createErrorFormTip(idElement, strContent) {
    new Tip($(idElement), strContent, { style: 'erreur' });
}

function removeTip(idElement) {
    Tips.remove(idElement);
}

function removeView() {
    Lightview.hide();
}

function createView(strModule, strAction, strParams, jsonOptions) {
    var strUrl = URL_SITE + CONTROLLER + '/' + strModule + '/' + strAction;
    var width = '';
    var height = '';
    
    var optionsView;
    var optionsAjax;
    if(!strParams) {
        var strParams = 'lightview=1';
    } else {
    	var strParams = strParams + '&lightview=1';
    }
    
    optionsAjax = {
        parameters: strParams,
        method: 'post',
        evalScripts: true
    };
    if(jsonOptions) {
        if (Object.isString(jsonOptions)) {
            jsonOptions = jsonOptions.evalJSON(true);
        }
        if (jsonOptions.width) {
            width = jsonOptions.width;
        }
        if (jsonOptions.height) {
            height = jsonOptions.height;
        }
        if (jsonOptions.bInIframe) {
        	bInIframe = jsonOptions.bInIframe;
        }
    }
    
    if(width == '' && height == '') {
        optionsView = {
       		 topclose: true,
            autosize: true,
            ajax: optionsAjax,
            innerPreviousNext: false,
            loop: false,
            slideshow: false,
            bInIframe: false
        }
    } else {
        optionsView = {
        	topclose: true,
            autosize: false,
            width: parseInt(width),
            height: parseInt(height),
            ajax: optionsAjax,
            innerPreviousNext: false,
            loop: false,
            slideshow: false,
            bInIframe: false
        }
    }
    Lightview.show({
        href: strUrl,
        rel: 'ajax',
        options: optionsView
    });
    
   return false
}

function createViewInIframe(strModule, strAction, strParams, jsonOptions) {
	var strUrl = URL_SITE + CONTROLLER + '/' + strModule + '/' + strAction;
    var width = '';
    var height = '';
    
    var optionsView;
    var optionsAjax;
    if(!strParams) {
        var strParams = 'lightview=1';
    } else {
    	var strParams = strParams + '&lightview=1';
    }
    
    optionsAjax = {
        parameters: strParams,
        method: 'post',
        evalScripts: true
    };
    if(jsonOptions) {
        if (Object.isString(jsonOptions)) {
            jsonOptions = jsonOptions.evalJSON(true);
        }
        if (jsonOptions.width) {
            width = jsonOptions.width;
        }
        if (jsonOptions.height) {
            height = jsonOptions.height;
        }
        if (jsonOptions.marginTop) {
        	marginTop = jsonOptions.marginTop;
        }
    }
    
    if(width == '' && height == '') {
        optionsView = {
       		topclose: true,
            autosize: true,
            ajax: optionsAjax,
            innerPreviousNext: false,
            loop: false,
            slideshow: false
        }
    } else {
        optionsView = {
        	topclose: true,
            autosize: false,
            width: parseInt(width),
            height: parseInt(height),
            marginTop: parseInt(marginTop),
            ajax: optionsAjax,
            innerPreviousNext: false,
            loop: false,
            slideshow: false
        }
    }
    Lightview.show({
        href: strUrl,
        rel: 'ajax',
        options: optionsView
    });
}

function createViewIframe(strUrl, strParams, jsonOptions) {
    var width = '';
    var height = '';
    var bFullscreen = false;
    var bAutoSize = false;
    if (!strParams) {
        var strParams = ''
    }
    if (jsonOptions) {
        if (Object.isString(jsonOptions)) {
            jsonOptions = jsonOptions.evalJSON(true)
        }
        if (jsonOptions.width) {
            width = jsonOptions.width
        }
        if (jsonOptions.height) {
            height = jsonOptions.height
        }
        if (jsonOptions.bFullscreen) {
            bFullscreen = jsonOptions.bFullscreen
        }
    }
    Lightview.show({
        href: strUrl,
        rel: 'iframe',
        options: {
            topclose: true,
            autosize: bAutoSize,
            width: parseInt(width),
            height: parseInt(height),
            ajax: {
                parameters: strParams,
                method: 'post',
                evalScripts: true
            }
        }
    });
    return false
}
