Import('advajax/advajax.js');
Import('rexml/rexml.js');
Import('myLib/util/Debug.js');

MyAJAX = {};

MyAJAX.objects = [];

MyAJAX.type = 'POST';

MyAJAX.key = 'action';

//MyAJAX.file = 'ajax.php';

MyAJAX.params = {
	file:	'ajax.php',
	tag:	{},
	method:	function(obj){}
};

/**
 * @public
 * @param	{String}
 * @param	{Array}
 * @param	{Object}
 */
MyAJAX.init = function(method, args, params){
	var values = {};
	for(var i in MyAJAX.params){
		values[i] = MyAJAX.params[i];
	}
		
	if(typeof(params) != 'undefined'){
		if(typeof(params) == 'function'){
			values['method'] = params;
		}
		else{
			for(var i in params){
				values[i] = params[i];
			}
		}
	}
	
	var id = MyAJAX.objects.length;
	MyAJAX.objects[id] = values['method'];
	
	values['tag']['ajaxObjectId'] = id;
	
	var parameters = {};
	parameters[MyAJAX.key] = method;
	if(args != null){
		for(var i = 0; i < args.length; i++){
			var s = new String(args[i]);
			parameters['args[' + i + ']'] = MyAJAX.encode(s);
		}
	}
	
	var p = {
		'tag'			: values['tag'],
		'url'			: values['file'],
		'parameters'	: parameters,
		'onSuccess'		: MyAJAX.responseMethod
	};
	
	advAJAX.handleRequest(MyAJAX.type, p);
	
	//-------------
	
	/*
	var id = MyAJAX.objects.length;
	MyAJAX.objects[id] = values['method'];
	
	var p = {};
	p.url = values['file'] + '?' + MyAJAX.key + '=' + method + MyAJAX.getArgs(args);					
	p.tag = values['tag'];
	p.tag.ajaxObjectId = id;
	p.onSuccess = MyAJAX.responseMethod

	advAJAX.handleRequest(MyAJAX.type, p);
	*/
	//advAJAX.post(p);

	//var	ajax = new advAJAX();
	//ajax.method= 'POST';
	//ajax.handleArguments(p);
	//return ajax.run();
};

MyAJAX.responseMethod = function(obj){
	Debug.showLayer('URL: ' + obj.url);
	Debug.showLayer('Content: ' + obj.responseText);
	var id = obj.tag.ajaxObjectId;
	var method = MyAJAX.objects[id];
	method(obj);
};

/**
 * @private
 */
MyAJAX.toArray = function(obj){
	var result = null;
	eval('result = ' + obj.responseText);
	return result;
};

/**
 * @public
 */
MyAJAX.xmlToArray = function(obj){
	var result = [];
	var xmlDoc = new REXML(obj.responseText);
	for(var i = 0; i < xmlDoc.rootElement.childElements.length; i++) {
		var item = xmlDoc.rootElement.childElements[i];
		result[i] = item.text;
		//alert(item.text);
	}
	return result;
};

/**
 * @public
 */
MyAJAX.xmlToString = function(obj, pattern){
	var items = MyAJAX.xmlToArray(obj);
	result = '';
	for(var i = 0; i < items.length; i++){
		result += pattern.replace('{item}', items[i]);
	}
	return result;
};

/**
 * @private
 */
MyAJAX.getArgs = function(args){
	if(args == null){
		args = [];
	}
	//alert(args.length);
	var s = '';
	for(var i = 0; i < args.length; i++){
		var string = new String(args[i]);
		s += '&args[]=' + MyAJAX.encode(string);
	}
	return s;
};

/**
 * @private
 */
MyAJAX.encode = function(string) {
	var chars = new Array(
		[ 'ą', '%u0105' ],
		[ 'Ą', '%u0104' ],
		[ 'ć', '%u0107' ],
		[ 'Ć', '%u0106' ],
		[ 'ę', '%u0119' ],
		[ 'Ę', '%u0118' ],
		[ 'ł', '%u0142' ],
		[ 'Ł', '%u0141' ],
		[ 'ń', '%u0144' ],
		[ 'Ń', '%u0143' ],
		[ 'ó', '%u00F3' ],
		[ 'Ó', '%u00D3' ],
		[ 'ś', '%u015B' ],
		[ 'Ś', '%u015A' ],
		[ 'ź', '%u017A' ],
		[ 'Ź', '%u0179' ],
		[ 'ż', '%u017C' ],
		[ 'Ż', '%u017B' ],
		[ 'ç', '%u00E7' ],
		[ 'Ç', '%u00C7' ],
		[ 'è', '%u00E8' ],
		[ 'È', '%u00C8' ],
		[ 'é', '%u00E9' ],
		[ 'É', '%u00C9' ],
		[ 'ë', '%u00EB' ],
		[ 'Ë', '%u00CB' ],
		[ 'ö', '%u00F6' ],
		[ 'Ö', '%u00D6' ]
	);
	for(var i = 0; i < chars.length; i++){
		var re = RegExp(chars[i][0], 'g');
		string = string.replace(re, chars[i][1]);
	}
	return string;
};