/* 	Copyright 2008 Maximum Processing Inc
	
	ABOUT THIS SCRIPT

	
	Change Log
 	Created 3/12/2009 Nathan Townsend
*/


function COMPILEDSCRIPT(){

  this.inheritFrom = BaseComponent;

	this.inheritFrom();
	
	this.Src = "../../images/ruleCOMPILEDSCRIPT.png";

  this.Title = "Compiled Script Component";
	
	this.ToolTip = "Calls stingray functions";
	
	var _xmlNode = null;
	

  this.Create = function()
  {
	  try{
		
		  var uo = new UndoObject();
			
			uo.AddUndo(RulesMaker.Load, RuleXML.GetVRM().xml);

      this.BaseCreate();
			
			this.SetType("COMPILEDSCRIPT");

			_xmlNode = this.GetNode();

      var values = $(_xmlNode.find('>values')[0]);
      
      uo.AddRedo(RulesMaker.Load, RuleXML.GetVRM().xml);
      
      Undo.Add(uo);

		} catch(err){Log.Add("COMPILEDSCRIPT.Create", err, LogType.Error);}
  }
  
	this.Load = function(xmlNode)
  {
	  try{
		
		  _xmlNode = $(xmlNode);
		
		  this.BaseLoad(_xmlNode);
			
		} catch(err){Log.Add("COMPILEDSCRIPT.Load", err, LogType.Error);}	  	
  }
	
	this.AddParam = function()
	{
	  try{
		  
		  var values = $(_xmlNode.find(">values")[0]);
			
			var param = $(RuleXML.GetNewElement('param'));
			
			var n = RuleXML.GetNewElement('n');

      var p1 = RuleXML.GetNewElement('p1');
			
      var p2 = RuleXML.GetNewElement('p2');
			
      var p3 = RuleXML.GetNewElement('p3');
			
      var p4 = RuleXML.GetNewElement('p4');						
			
			param.append(n);
			
			param.append(p1);
			
			param.append(p2);
			
			param.append(p3);
			
			param.append(p4);						
			
			values.append(param);						
									
		
		} catch(err){Log.Add("COMPILEDSCRIPT.AddParam", err, LogType.Error);}	  
	}
	
	this.DeleteParam = function(ParamIndex)
	{
	  try{
			
		  var toRemove = _xmlNode.find(">values>param")[ParamIndex];

			toRemove.parentNode.removeChild(toRemove);
		
		} catch(err){Log.Add("COMPILEDSCRIPT.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("CompiledScript"), this.GetCompiledScript, this.SetCompiledScript, args);
  
  		return properties;

		} catch(err){Log.Add("COMPILEDSCRIPT.GetProperties", err, LogType.Error);}

	}
	
	this.GetCompiledScript = function()
	{
	  var params = new Array();
	
	  try{
		  
			_xmlNode.find(">values>param").each(function(){
  				var n = $(this).find(">n").text();			  
  				var p1 = $(this).find(">p1").text();
  				var p2 = $(this).find(">p2").text();
  				var p3 = $(this).find(">p3").text();
  				var p4 = $(this).find(">p4").text();										
  				params[params.length] = new ScriptParam(n, p1, p2, p3, p4);
			});
			
			return params;
			
		} catch(err){Log.Add("COMPILEDSCRIPT.GetCompiledScript", err, LogType.Error);}	
	}
	

	this.SetCompiledScript = function(params)
	{
	  try{

			var i = 0;
			
			_xmlNode.find(">values>param").each(function(){
  				$(this).find(">n").text(Utilities.Trim(params[i].Name));
  				$(this).find(">p1").text(Utilities.Trim(params[i].Param1));
  				$(this).find(">p2").text(Utilities.Trim(params[i].Param2));
  				$(this).find(">p3").text(Utilities.Trim(params[i].Param3));
  				$(this).find(">p4").text(Utilities.Trim(params[i].Param4));										
					i++;
			});
			
						
		} catch(err){Log.Add("COMPILEDSCRIPT.SetCompiledScript", err, LogType.Error);}
	}	
	
	
	function ScriptParam(Name, Param1, Param2, Param3, Param4)
	{
	  this.Name = Name;
		this.Param1 = Param1;
		this.Param2 = Param2;
		this.Param3 = Param3;
		this.Param4 = Param4;						

	}
  

 
}
