﻿/*CANOUS 825 DBO 17/01/2012 Ajout "charset=utf-8"*/

function Animator(){
	var frameDelay = 40;
	var started = false;
	var animations = new Array();
	
	this.addAnimation = function(anim){
		anim.init();
		animations.push(anim);
		if(animations.length == 1) this.start();
	}
	
	this.start = function(){
		var tID = setInterval(
			function(){
				if(animations.length){
					for(var i=0; i<animations.length; i++){
						var anim = animations[i];
						anim.playOneStep();
						if(anim.isFinished()){
							animations.splice(i--, 1);
						}
					}
				}
				else{
					clearInterval(tID);
					started = false;
				}
			},
			frameDelay
		);
		started = true;
	}
}
Animator.Group = function(callback){
	var animations = new Array();
	
	this.playOneStep = function(){
		for(var i=0; i<animations.length; i++){
			var anim = animations[i];
			if(!anim.isFinished()) anim.playOneStep();
		}
	}
	
	this.notify = function(){
		if(this.isFinished()){
			if(callback) callback();
		
			if(this.Parent) this.Parent.notify();
		}
	}
	
	this.addAnimation = function(anim){
		animations.push(anim);
		anim.Parent = this;
	}
	
	this.isFinished = function(){
		var finished = true;
		for(var i=0; i<animations.length; i++){
			finished = finished && animations[i].isFinished();
		}
		
		return finished;
	}
	
	this.init = function(){
		for(var i=0; i<animations.length; i++){
			animations[i].init();
		}
	}
}

Animator.Chain = function(callback){
	var animations = new Array();
	
	this.playOneStep = function(){
		for(var i=0; i<animations.length; i++){
			var anim = animations[i];
			if(!anim.isFinished()){
				anim.playOneStep();
				break;
			}
		}
	}
	
	this.notify = function(){
		if(this.isFinished()){
			if(callback) callback();
		
			if(this.Parent) this.Parent.notify();
		}
	}
	
	this.isFinished = function(){
		var finished = true;
		for(var i=0; i<animations.length; i++){
			finished = finished && animations[i].isFinished();
		}
		
		return finished;
	}
	
	this.addAnimation = function(anim){
		animations.push(anim);
		anim.Parent = this;
	}
	
	this.init = function(){
		for(var i=0; i<animations.length; i++){
			animations[i].init();
		}
	}
}

Animator.Animation = function(func, callback){
	var finished = false;
	
	this.playOneStep = function(){
		func.call(this);
	}
	
	this.setFinished = function(){
		finished = true;
		if(callback) callback();
		
		if(this.Parent) this.Parent.notify();
	}
	
	this.isFinished = function(){
		return finished;
	}
	
	this.init = function(){
		finished = false;
	}
}
var ajax_Animator = new Animator();

function ajax_Ready(){
	var ok1 = (window.ActiveXObject != null && is_ie6up);
	var ok2 = (window.XSLTProcessor != null);
	
	if(ok2){
		var test = new XSLTProcessor();
		ok2 = (test.importStylesheet != null);
		delete test;
	}

	return ok1 || ok2;
}

function ajax_addBehaviour(elmt, behaviour){
	if(!elmt.behaviourProperties) elmt.behaviourProperties = new Object();
	
	if((behaviour & ajax_addBehaviour.Behaviours.OPACITY) == ajax_addBehaviour.Behaviours.OPACITY){
		if(elmt.filters){
			elmt.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
			elmt.setOpacity = function(opa){
				this.filters.item("DXImageTransform.Microsoft.Alpha").Opacity = 100 * opa;
			}
			elmt.getOpacity = function(){
				return this.filters.item("DXImageTransform.Microsoft.Alpha").Opacity / 100.0;
			}
		}
		else{
			elmt.style.opacity = 1;
			elmt.setOpacity = function(opa){
				elmt.style.opacity = opa;
			}
			elmt.getOpacity = function(){
				return parseFloat(elmt.style.opacity);
			}
		}
	}
	if((behaviour & ajax_addBehaviour.Behaviours.BLUR) == ajax_addBehaviour.Behaviours.BLUR){
		if(elmt.filters){
			elmt.style.filter += "progid:DXImageTransform.Microsoft.Blur";
			elmt.setBlur = function(blur){
				elmt.behaviourProperties.Blur = blur;
				this.filters.item("DXImageTransform.Microsoft.Blur").enabled = elmt.behaviourProperties.Blur > 0;
				this.filters.item("DXImageTransform.Microsoft.Blur").PixelRadius = elmt.behaviourProperties.Blur;
			}
			elmt.getBlur = function(b){
				return this.behaviourProperties.Blur;
			}
			
			elmt.setBlur(0);
		}
		else{
			elmt.setBlur = function(blur){this.behaviourProperties.Blur = blur;}
			elmt.getBlur = function(){return this.behaviourProperties.Blur;}
		}
	}
	if((behaviour & ajax_addBehaviour.Behaviours.MOVABLE) == ajax_addBehaviour.Behaviours.MOVABLE){
		if(!elmt.style.position || elmt.style.position == "static") elmt.style.position = "relative";

		elmt.behaviourProperties.Position = new Object();
		
		elmt.behaviourProperties.Position.initialTop = parseInt(elmt.style.top.replace(/px/, ""));
		if(isNaN(elmt.behaviourProperties.Position.initialTop)) elmt.behaviourProperties.Position.initialTop = 0;
		
		elmt.behaviourProperties.Position.initialLeft = parseInt(elmt.style.left.replace(/px/, ""));
		if(isNaN(elmt.behaviourProperties.Position.initialLeft)) elmt.behaviourProperties.Position.initialLeft = 0;
		
		elmt.behaviourProperties.Position.left = parseInt(elmt.style.left.replace(/px/, ""));
		if(isNaN(elmt.behaviourProperties.Position.left)) elmt.behaviourProperties.Position.left = 0;
		
		elmt.behaviourProperties.Position.top = parseInt(elmt.style.top.replace(/px/, ""));
		if(isNaN(elmt.behaviourProperties.Position.top)) elmt.behaviourProperties.Position.top = 0;
		
		elmt.move = function(H, V){
			if(V){
				this.behaviourProperties.Position.top += V;
				this.style.top = Math.round(this.behaviourProperties.Position.top) + "px";
			}
			if(H){
				this.behaviourProperties.Position.left += H;
				this.style.left = Math.round(this.behaviourProperties.Position.left) + "px";
			}
		}
		elmt.getPositionInfo = function(){
			return {
				offsetLeft: this.behaviourProperties.Position.left - this.behaviourProperties.Position.initialLeft,
				offsetTop: this.behaviourProperties.Position.top - this.behaviourProperties.Position.initialTop,
				left: this.behaviourProperties.Position.left,
				top: this.behaviourProperties.Position.top
			};
		}
	}
}

ajax_addBehaviour.Behaviours = {
	OPACITY: 1,
	BLUR: 2,
	MOVABLE: 4
}

function ajax_getXMLHttpRequest(){
	var req = null;
	if(window.XMLHttpRequest){
		try{
			req = new XMLHttpRequest();
		}
		catch(e){}
	}
	else if(window.ActiveXObject) {
		try{
			req = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e){
			try{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e){}
		}
	}
	
	if(!req){
		throw "Impossible d'instancier un objet XMLHttpRequest.";
	}
	
	return req;
}

function ajax_call(url, func, req, async, meth, usr, pwd, body, ctntType){
	req = req == undefined ? ajax_getXMLHttpRequest() : req;
	async = async == undefined ? true : async;
	meth = meth == undefined ? "GET" : meth;
	
	if(func) req.onreadystatechange = function(){
		if(req.readyState == 4) {
			func.call(window, req.responseXML, req.responseText);
		}
	};
	
	if(usr != undefined){
		req.open(meth, url, async, usr, pwd);
	}
	else{
		req.open(meth, url, async);
	}

	if(meth == "POST"){
		ctntType = ctntType ? ctntType : "application/x-www-form-urlencoded";
		req.setRequestHeader("Content-Type", ctntType);
	}	
	req.send(body);
}

function ajax_getAsynchronousDynamicObject(wsUrl, xslUrl, htmlElmt, callback){
	var ado = null;
	if(window.ActiveXObject) {
		ado = new IEAsynchronousDynamicObject(wsUrl, xslUrl, htmlElmt, callback);
	}
	else{
		ado = new DOMAsynchronousDynamicObject(wsUrl, xslUrl, htmlElmt, callback);
	}
		
	return ado;
}

function ajax_getXmlTransformer(xslUrl){
	var trsf = null;
	if(window.ActiveXObject) {
		trsf = new IEXmlTransformer(xslUrl);
	}
	else{
		trsf = new DOMXmlTransformer(xslUrl);
	}
		
	return trsf;
}


function AsynchronousDynamicObjectJS(wsUrl, xslUrlOrJsFn, htmlElmtId, callback, proxy){this.baseInit(wsUrl, xslUrlOrJsFn, htmlElmtId, callback, proxy);}
AsynchronousDynamicObjectJS.prototype.baseInit = function(wsUrl, xslUrlOrJsFn, htmlElmtId, callback, proxy){
	this.WsUrl = wsUrl;
	this.Proxy = proxy;
	if(xslUrlOrJsFn.call){
		this.XmlTransformer = xslUrlOrJsFn;
		this.XmlTransformer.IsJsFunction = true;
	}
	else{
		throw "La transformation XSL n'est pas supportÃ©e";
	}
	this.HtmlElementId = htmlElmtId;
	document.getElementById(this.HtmlElementId).ADO = this;
	this.Callback = callback;
	this.loadedCallback = function(data){
		var xml = utils_addXPath(utils_parseXmlString(data));
		var doc = this.XmlTransformer.IsJsFunction ? this.XmlTransformer(xml) : this.XmlTransformer.transformNode(xml);

		this.processXHtml(utils_addXPath(doc));

		if(this.Callback){
			this.Callback.call(window, xml, data);
		}
	};
}


AsynchronousDynamicObjectJS.prototype.loadJS = function(strParams){
	var e = document.getElementById(this.HtmlElementId + "_js");
	if(e){
		e.parentNode.removeChild(e);
	}
	e = document.createElement("script");
	e.id = this.HtmlElementId + "_js";
	e.type="text/javascript";
	document.getElementById(this.HtmlElementId).appendChild(e);

	var url = this.WsUrl + (this.WsUrl.indexOf("?") != -1 ? "&" : "?") + strParams;

	e.src = this.Proxy + "?url=" + escape(url) + "&_id=" + this.HtmlElementId + "&_rnd=" + Math.random();
}

AsynchronousDynamicObjectJS.prototype.getHtmlElement = function(){
	return window.document.getElementById(this.HtmlElementId);
}

AsynchronousDynamicObjectJS.prototype.refresh = function(tabParams){
	var strParams = "";
	for(var paramName in tabParams){
		if(tabParams[paramName] instanceof Function) continue;
		strParams += "&" + paramName + "=" + tabParams[paramName];
	}
	if(strParams.length > 0){
		strParams = strParams.substring(1);
	}

	this.loadJS(strParams);
}

AsynchronousDynamicObjectJS.prototype.processXHtml = function(doc){
	this.getHtmlElement().innerHTML = doc.xml.replace(/&gt;/g, ">").replace(/&lt;/g, "<");
}



function AsynchronousDynamicObject(wsUrl, xslUrlOrJsFn, htmlElmtId, callback){}
AsynchronousDynamicObject.prototype.baseInit = function(wsUrl, xslUrlOrJsFn, htmlElmtId, callback){
	this.WsUrl = wsUrl;
	if(xslUrlOrJsFn.call){
		this.XmlTransformer = xslUrlOrJsFn;
		this.XmlTransformer.IsJsFunction = true;
	}
	else{
		this.XmlTransformer = ajax_getXmlTransformer(xslUrlOrJsFn);
		this.XmlTransformer.IsJsFunction = false;
	}
	this.HtmlElementId = htmlElmtId;
	this.setXmlHttpRequest();
	this.Callback = callback;
}

AsynchronousDynamicObject.prototype.getHtmlElement = function(){
	return window.document.getElementById(this.HtmlElementId);
}

AsynchronousDynamicObject.prototype.refresh = function(tabParams, usr, pwd){
	var strParams = "";
	for(var paramName in tabParams){
		if(tabParams[paramName] instanceof Function) continue;
		strParams += "&" + paramName + "=" + tabParams[paramName];
	}
	if(strParams.length > 0){
		body = strParams.substring(1);
	}

	if(usr != undefined){
		this.XmlHttpRequest.open("POST", this.WsUrl, true, usr, pwd);
	}
	else{
		this.XmlHttpRequest.open("POST", this.WsUrl, true);
	}
/* CANOUS-825 début modification */
	this.XmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded; charset=UTF-8");
/* CANOUS-825 fin modification */

	this.XmlHttpRequest.send(body);
}

AsynchronousDynamicObject.prototype.setXmlHttpRequest = function(){
	var tmp = this;
	this.XmlHttpRequest = ajax_getXMLHttpRequest();

	this.XmlHttpRequest.onreadystatechange = function(){
		if(tmp.XmlHttpRequest.readyState == 4) {
			if(tmp.XmlHttpRequest.status == 200) {
				var xml = utils_addXPath(tmp.XmlHttpRequest.responseXML);
				var doc = tmp.XmlTransformer.IsJsFunction ? tmp.XmlTransformer(xml) : tmp.XmlTransformer.transformNode(xml);

				tmp.processXHtml(utils_addXPath(doc));

				if(tmp.Callback){
					tmp.Callback.call(window, xml, tmp.XmlHttpRequest.responseText);
				}

				delete tmp.XmlHttpRequest;
				tmp.setXmlHttpRequest();
			}
		}
	};
}




function IEAsynchronousDynamicObject(wsUrl, xslUrlOrJsFn, htmlElmt, callback){
	this.init(wsUrl, xslUrlOrJsFn, htmlElmt, callback);
}
IEAsynchronousDynamicObject.prototype = new AsynchronousDynamicObject();
IEAsynchronousDynamicObject.prototype.processXHtml = function(doc){
	this.getHtmlElement().innerHTML = doc.xml.replace(/&gt;/g, ">").replace(/&lt;/g, "<");
}

IEAsynchronousDynamicObject.prototype.init = function(wsUrl, xslUrlOrJsFn, htmlElmt, callback){
	this.baseInit(wsUrl, xslUrlOrJsFn, htmlElmt, callback);
}





function DOMAsynchronousDynamicObject(wsUrl, xslUrlOrJsFn, htmlElmt, callback){
	this.init(wsUrl, xslUrlOrJsFn, htmlElmt, callback);
}
DOMAsynchronousDynamicObject.prototype = new AsynchronousDynamicObject();
DOMAsynchronousDynamicObject.prototype.processXHtml = function(doc){
	var elmt = this.getHtmlElement();

	var children = elmt.childNodes;
	var len = children.length;
	for(var i=0; i<len; i++){
		elmt.removeChild(children[0]);
	}

	elmt.appendChild(doc);

	elmt.innerHTML = elmt.innerHTML.replace(/&gt;/g, ">").replace(/&lt;/g, "<");
}

DOMAsynchronousDynamicObject.prototype.init = function(wsUrl, xslUrlOrJsFn, htmlElmt, callback){
	this.baseInit(wsUrl, xslUrlOrJsFn, htmlElmt, callback);
}




function XmlTransformer(xslUrl){}
XmlTransformer.prototype.baseInit = function(xslUrl){
	var req = ajax_getXMLHttpRequest();
	ajax_call(xslUrl, undefined, req, false);

	this.XslDoc = req.responseXML;
}


function IEXmlTransformer(xslUrl){
	this.init(xslUrl);
}
IEXmlTransformer.prototype = new XmlTransformer();
IEXmlTransformer.prototype.init = function(xslUrl){
	this.baseInit(xslUrl);
}
IEXmlTransformer.prototype.transformNode = function(doc){
	var resultDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
	doc.transformNodeToObject(this.XslDoc, resultDoc);

	return resultDoc;
}



function DOMXmlTransformer(xslUrl){
	this.init(xslUrl);
}
DOMXmlTransformer.prototype = new XmlTransformer();
DOMXmlTransformer.prototype.transformNode = function(doc){
	return this.Processor.transformToFragment(doc, document);
}
DOMXmlTransformer.prototype.init = function(xslUrl){
	this.baseInit(xslUrl);
	this.Processor = new XSLTProcessor();
	this.Processor.importStylesheet(this.XslDoc);
}

