/* 	Copyright 2008 Maximum Processing Inc
	
	ABOUT THIS SCRIPT

	
	Change Log
 	Created 12/08/2008 Nathan Townsend
*/


function MATH(){

  this.inheritFrom = BaseComponent;

	this.inheritFrom();

  this.Src = "../../images/RuleMATH.png";

  this.Title = "Math Component";
	
	this.ToolTip = "Create, modify, or delete multiple variables with mathematical expressions";	

	var _xmlNode = null;
	

  this.Create = function()
  {
	  try{
		
		  var uo = new UndoObject();
			
			uo.AddUndo(RulesMaker.Load, RuleXML.GetVRM().xml);

      this.BaseCreate();
			
			this.SetType("MATH");			

			_xmlNode = this.GetNode();

      var values = $(_xmlNode.find('>values')[0]);
      
      values.append(RuleXML.GetNewElement('n'));
			
      values.append(RuleXML.GetNewElement('f'));			
			
      values.append(RuleXML.GetNewElement('v'));
			
      uo.AddRedo(RulesMaker.Load, RuleXML.GetVRM().xml);
      
      Undo.Add(uo);							

		} catch(err){Log.Add("MATH.Create", err, LogType.Error);}    
  }
  
	this.Load = function(xmlNode)
  {
	  try{
		
		  _xmlNode = $(xmlNode);
		
		  this.BaseLoad(_xmlNode);
			
		} catch(err){Log.Add("MATH.Load", err, LogType.Error);}	  	
  }
	
	this.AddParam = function()
	{
	  try{
		  
		  var values = $(_xmlNode.find(">values")[0]);
			
      values.append(RuleXML.GetNewElement('n'));
			
      values.append(RuleXML.GetNewElement('f'));			
			
      values.append(RuleXML.GetNewElement('v'));	
											
		
		} catch(err){Log.Add("MATH.AddParam", err, LogType.Error);}	  
	}
	
	this.DeleteParam = function(ParamIndex)
	{
	  try{
		
		  var nremove = _xmlNode.find(">values>n")[ParamIndex];
			
		  var fremove = _xmlNode.find(">values>f")[ParamIndex];			
			
			var vremove = _xmlNode.find(">values>v")[ParamIndex];

			nremove.parentNode.removeChild(nremove);
			
			fremove.parentNode.removeChild(fremove);			
			
			vremove.parentNode.removeChild(vremove);
		
		} catch(err){Log.Add("MATH.DeleteParam", err, LogType.Error);}
	}
	
	this.GetProperties = function(){
    try{
	
  	  var properties = this.GetBaseProperties();
		
			var args = new RulesMaker.ComplexArgs(this.GetProperties, this.AddParam, this.DeleteParam);
      properties[properties.length] = new PropertiesEditor.Property(PropertyFields.GetProperty("MathParams"), this.GetParams, this.SetParams, args);
  
  		return properties;		

		} catch(err){Log.Add("MATH.GetProperties", err, LogType.Error);}

	}
	
	
	this.GetParams = function()
	{
	  try{
		
  	  var params = new Array();
		  
			_xmlNode.find(">values>n").each(function(){
  				var n = $(this).text();	  
  				var f = $(this).next().text();					
  				var v = $(this).next().next().text();
  				params[params.length] = new Param(n, f, v);
			});

			return params;
			
		} catch(err){Log.Add("MATH.GetParams", err, LogType.Error);}	
	}
 
	
	this.SetParams = function(params)
	{
	  try{
		  
			var i = 0;
			_xmlNode.find(">values>n").each(function(){
  				$(this).text(params[i].Name)
  				$(this).next().text(params[i].Func);					
  				$(this).next().next().text(params[i].Value);
					i++;
			});
			
		} catch(err){Log.Add("MATH.SetParams", err, LogType.Error);}	
	}	
	
	
	function Param(Name, Func, Value)
	{
	  this.Name = Name;
		this.Func = Func;
		this.Value = Value;
	}
  

 
}
