//  USAGE: transformWithAx("cdcatalog.xml","cdcatalog.xsl",function(x, data){document.getElementById('aaa').innerHTML=x; var e = data[0];},some_array) ;
//  transformWithAxSinXSL("unrequest.html",function(x, data){document.getElementById('aaa').innerHTML=x; var e = data[0];},some_array) ;
//  (cuq) 2009 licencia tipo BSD 
//  cuq.dyndns.org
//  ajaxPostLoadAndTransform.js
//  depende de Yahoo.yui 2.8.x, Connection Manager las librer�as de google ajaxslt y webtoolkit.sha1 para funcionar (esta ultima por safari)



logging = true;
xsltdebug = true;
xsltLoaded = false ;

var isLoaded = new Object();
var isSended = new Object();
var xmlDoc = new Object() ;

function importXMLAx(urlDoc){
	var args = [urlDoc]; 	
	var callback =
	{
	  success: function(o) {
		isLoaded[SHA1(o.argument[0])]= 1;  
	  	xmlDoc[SHA1(o.argument[0])] = o.responseXML ;  
	  	//YAHOO.log("ok on:'"+o.argument[0]+"'") ;  
	  	//YAHOO.log("responde on:'"+o.responseText+"'") ;
	  },
	  failure: function(o) {isLoaded[SHA1(o.argument[0])]= 0; YAHOO.log("error on:'"+o.argument[0]+"'") ;},
	  argument: args
	} ;
	var transaction ;
	if(urlDoc.length > 1000 ){
		transaction = YAHOO.util.Connect.asyncRequest('POST', (urlDoc.split('?'))[0], callback, (urlDoc.split('?'))[1]); 
		//YAHOO.log("going POST on:'"+(urlDoc.split('?'))[0]+"---"+(urlDoc.split('?'))[1]+"'") ;
	}
	else {
		transaction = YAHOO.util.Connect.asyncRequest('GET', urlDoc, callback, null ); 
		//YAHOO.log("going GET on:'"+urlDoc+"'") ;
	}
};

var kh = [];
function transformWithAx(xmlUrl, xslUrl, onTransformedFunction, data ){
	//if((isSended[SHA1(xmlUrl)]!=1)||(isSended[SHA1(xslUrl)]!=1)){
		var key = SHA1(new Date()+"-"+Math.random()) ;
		//YAHOO.log("i-->"+key);
		kh[key] = {
			fn: onTransformedFunction ,
			xm: SHA1(xmlUrl),
			xs: SHA1(xslUrl),
			dd: data
		} ;
		if(isSended[kh[key].xm]!=1){
			isSended[kh[key].xm] = 1 ;
			isLoaded[kh[key].xm] = 0 ;
			importXMLAx(xmlUrl) ;
		}
		if(isSended[kh[key].xs]!=1){
			isSended[kh[key].xs] = 1 ;
			isLoaded[kh[key].xs] = 0 ;
			importXMLAx(xslUrl) ;	
		}
		//setTimeout("transformWithAx('"+xmlUrl+"', '"+xslUrl+"', "+onTransformedFunction+", "+data+")",1100);
		do_key(key) ;
		return  ;
	/*}
	if((isLoaded[SHA1(xmlUrl)]== 1)&&(isLoaded[SHA1(xslUrl)]== 1)){
		onTransformedFunction(xsltProcess(xmlDoc[SHA1(xmlUrl)],xmlDoc[SHA1(xslUrl)]), data) ;
	}
	if((isSended[SHA1(xmlUrl)]==1)&&((isLoaded[SHA1(xmlUrl)] == 0)||(isLoaded[SHA1(xslUrl)] == 0))){
		setTimeout("transformWithAx('"+xmlUrl+"', '"+xslUrl+"', "+onTransformedFunction+","+data+")",900);
		return ;
	}*/
};

function do_key(key){
	//YAHOO.log("1-->"+key);
	if((isLoaded[kh[key].xm]== 1)&&(isLoaded[kh[key].xs]== 1)){
		kh[key].fn(xsltProcess(xmlDoc[kh[key].xm],xmlDoc[kh[key].xs]), kh[key].dd) ;
		//YAHOO.log("2-->"+key);
		//setTimeout("kh['"+key+"'] = {};",3000) ;
	} else {
		//YAHOO.log("3-->"+key);
		setTimeout("do_key('"+key+"')",900);
	}
}

function importXMLAxSinXSL(urlDoc){
	var args = [urlDoc]; 	
	var callback =
	{
	  success: function(o) {
	  	isLoaded[SHA1(o.argument[0])]= 1;  
	  	xmlDoc[SHA1(o.argument[0])] = o.responseText ;  
	  	//YAHOO.log("ok on:'"+o.argument[0]+"'") ;  
	  	//YAHOO.log("responde on:'"+o.responseText+"'") ;
	  },
	  failure: function(o) {isLoaded[SHA1(o.argument[0])]= 0; YAHOO.log("error on:'"+o.argument[0]+"'") ;},
	  argument: args
	} ;
	var transaction ;
	if(urlDoc.length > 1000 ){
		transaction = YAHOO.util.Connect.asyncRequest('POST', (urlDoc.split('?'))[0], callback, (urlDoc.split('?'))[1]); 
		//YAHOO.log("going POST on:'"+(urlDoc.split('?'))[0]+"---"+(urlDoc.split('?'))[1]+"'") ;
	}
	else {
		transaction = YAHOO.util.Connect.asyncRequest('GET', urlDoc, callback, null ); 
		//YAHOO.log("going GET on:'"+urlDoc+"'") ;
	}
}

var khSinXSL = [];

function transformWithAxSinXSL(xmlUrl, onTransformedFunction, data ){
		var key = SHA1(new Date()+"-"+Math.random()) ;
		khSinXSL[key] = {
			fn: onTransformedFunction ,
			xm: SHA1(xmlUrl),
			dd: data
		} ;
		if(isSended[khSinXSL[key].xm]!=1){
			isSended[khSinXSL[key].xm] = 1 ;
			isLoaded[khSinXSL[key].xm] = 0 ;
			importXMLAxSinXSL(xmlUrl) ;
		}
		do_keySinXSL(key) ;
		return  ;
}
function do_keySinXSL(key){
	if(isLoaded[khSinXSL[key].xm]== 1){
		khSinXSL[key].fn(xmlDoc[khSinXSL[key].xm], khSinXSL[key].dd) ;
	} else {
		setTimeout("do_keySinXSL('"+key+"')",900);
	}
}








