﻿var transfer =
{
  rowsPages: null,
  actionEnabled: null,
  
	initialize: function()
	{
	},
	
	asynchronous: function(file, path, parms, callback)
	{
	  this.callback = callback;
	  
    var send = "<root>";

    if (parms)
      for(var name in parms)
        send += "<" + name + ">" + parms[name] + "</" + name + ">";

    send += "</root>";

		try
		{
		  $.ajax({url: path + file, global: true, type: "POST", dataType: "xml", async: true, data: send, success: function(xml, status, xhr)
		  {
			  var obj = xml.selectSingleNode("//error");
  			
			  if (obj && obj.text)
			  {
			    if (transfer.callback)
			      transfer.callback(obj.text);
			    
			    obj = null;  
				  return xhr;
				}
  	        
			  obj = xml.selectSingleNode("//succeed");
  	        
			  if (obj && obj.text)
			  {
				  if (obj.text == "false")
				  {
					  obj = xml.selectSingleNode("//msg");
  						
					  if (obj && obj.text)
					  {
			        if (transfer.callback)
			          transfer.callback(obj.text);
						  
						  obj = null;
						  return xhr;
						}
				  }
			  }
  	        
			  transfer.rowsPages = null;
			  transfer.actionEnabled = {};
  			
			  var actions = xml.selectSingleNode("//actionEnabled");
  	            
			  if (actions)
				  for(var i = 0; i < actions.childNodes.length; i++)
					  transfer.actionEnabled[actions.childNodes[i].tagName] = actions.childNodes[i].text;
  			
			  obj = xml.selectSingleNode("//RowsPages");
  			
			  if (obj)
				  transfer.rowsPages = obj.text;
  			
			  var node = xml.selectSingleNode("//data");
  	            
			  if (!node)
				  XmlCache.data.loadXML(xhr.responseText);
			  else if (node.childNodes.length > 0)
					XmlCache.data.loadXML(node.childNodes[0].xml);
  			
			  node = xml.selectSingleNode("//html");
  			
			  if (node)
			    XmlCache.page.loadXML(node.xml);
			  
			  send = dom = obj = node = actions = null;
			  
			  if (transfer.callback)
			    transfer.callback();
		  }});
		}
		catch(e)
		{
			alert(e.message);
		}
	},

	transferring: function(file, path, parms, data, html)
	{
    var send = "<root>";

    if (parms)
      for(var name in parms)
        send += "<" + name + ">" + parms[name] + "</" + name + ">";

    send += "</root>";

		try
		{
			this.rowsPages = null;
			this.actionEnabled = {};

		  var xhr = $.ajax({url: path + file, global: true, type: "POST", dataType: "xml", async: false, data: send, success: function(xml, status, xhr){}});
			var dom = xhr.responseXML;
			var obj = dom.selectSingleNode("//error");
			
			if (obj && obj.text)
				return obj.text;
	        
			obj = dom.selectSingleNode("//succeed");
	        
			if (obj && obj.text)
			{
				if (obj.text == "false")
				{
					obj = dom.selectSingleNode("//msg");
						
					if (obj && obj.text)
						return obj.text;
				  
				  return false;
				}
			}
	        
			var actions = dom.selectSingleNode("//actionEnabled");
	            
			if (actions)
				for(var i = 0; i < actions.childNodes.length; i++)
					this.actionEnabled[actions.childNodes[i].tagName] = actions.childNodes[i].text;
			
			obj = dom.selectSingleNode("//RowsPages");
			
			if (obj)
				this.rowsPages = obj.text;
			
			var node = dom.selectSingleNode("//data");
	            
			if (!node)
			{
				if (data)
					data.loadXML(xhr.responseText);
			}
			else
			{
				if (data && (node.childNodes.length > 0))
					data.loadXML(node.childNodes[0].xml);
			}
			
			node = dom.selectSingleNode("//html");
			
			if (node && html)
			  html.loadXML(node.xml);

			return true;
		}
		catch(e)
		{
			return e.message;
		}
		finally
		{
			send = dom = obj = node = actions = null;
		}
	},
	
	chat: function(path, parms, dom)
	{
		var result = this.transferring("foxrom_chat.aspx", path, parms, dom);
		
		if (result === true)
			return true;
		else if (result === false)
			return false;
		
		if (result)
		{
			alert(result);
			return false;
		}
		
		return true;
	},
	
	async: function(path, parms, callback)
	{
		this.asynchronous("foxrom_data.aspx", path, parms, callback);
	},
	
	website: function(path, parms, data, html, callback)
	{
		var result = this.transferring("foxrom_website.aspx", path, parms, data);

		if (result === true)
			return true;
		else if (result === false)
			return false;
		
		if (result)
		{
			alert(result);
			return false;
		}
		
		return true;
	},

	data: function(path, parms, data, html, callback)
	{
		var result = this.transferring("foxrom_data.aspx", path, parms, data, html);
		
		if (result === true)
			return true;
		else if (result === false)
			return false;
		
		if (result)
		{
			alert(result);
			return false;
		}
		
		return true;
	},
	
	system: function(path, parms, dom)
	{
		var result = this.transferring("foxrom_system.aspx", path, parms, dom);

		if (result === true)
			return true;
		else if (result === false)
			return false;
		
		if (result)
		{
			alert(result);
			return false;
		}
		
		return true;
	},
	
	perform: function(path, parms)
  {
		var dom = jXmlDom.get();
		
		try
		{
			var result = this.transferring("foxrom_perform.aspx", path, parms, dom);
			
			if (result === true)
				return dom.selectSingleNode("//url").text;
			else if (result === false)
				return false;
			
			if (result)
			{
				alert(result);
				return false;
			}
		}
		finally
		{
			jXmlDom.free(dom);
			dom = null;
	  }
  },

  message: function(path, parms, dom)
  {
		var result = this.transferring("foxrom_message.aspx", path, parms, dom);

		if (result === true)
			return true;
		else if (result === false)
			return false;
		
		if (result)
		{
			alert(result);
			return false;
		}
		
		return true;
  },
  
  workflow: function(path, parms, dom)
  {
		var result = this.transferring("foxrom_workflow.aspx", path, parms, dom);

		if (result === true)
			return true;
		else if (result === false)
			return false;
		
		if (result)
		{
			alert(result);
			return false;
		}
		
		return true;
  }
};

transfer.initialize();
