
window.addEvent('domready', function(){
	var gs = new GetterSetterGenerator('php', 'list', 'methods', 'generatorForm', 'internal', 'showCommentStubs','usevarname','classVar','variableStyle' );	
});

/**
* GetterSetterGenerator
* This class is used with getterSetterGenerator.php to generate getter & setter methods
* for object-oriented PHP.  
* @author Matthew Chudy      matthew at theWittyRejoinder.com
* @copyright 2009 
*/
	// A class to generate Getter / Setter methods
	var GetterSetterGenerator = new Class({
              initialize: function(language, input, output, formId, internalVariable,showCommentStub,usevarname,classVar,variableStyle ){
              		this.language 	= language;
              		this.input 		= input;
              		this.output 	= output;
              		this.formId 	= formId;
              		this.showCommentStub 	= showCommentStub;
              		this.useVariableName 	= usevarname;
              		this.classVariable 		= classVar;
              		this.internalVariable = internalVariable;
              		this.variableStyle		= variableStyle;
              		$(this.formId).addEvent('keyup',function(e){
              			this.parseInput();
              			try{
              				eval('this.build_' + this.language + '_methods()');
              			} catch(err){  }
              		}.bind(this));
              		$(this.formId).addEvent('click',function(e){
              			// TODO:  add functionality to change language by clicking new radio buttons
              			// and methods to implement these new languages...
              			this.parseInput();
              			try{ // don't want to use eval but it should be safe here because no data is sent to
              				 //any remote server; all processing remains in-page. 
              				eval('this.build_' + this.language + '_methods()');
              			} catch(err){  }
              		}.bind(this));
              	
              	// parse the default values on the class initialization:
              	this.parseInput();
              		try{ // don't want to use eval but it should be safe here because no data is sent to
              			 //any remote server; all processing remains in-page. 
              			eval('this.build_' + this.language + '_methods()');
              		} catch(err){  }
              },
              language: '',
              input: '',
              output: '',
              formId: '',
              internalVariable: '',
              classMembers: '',
              showCommentStub: true,
              useVariableName: false,
              classVariable: '',
              variableStyle: '',
              methods: '',
              humpBack: 'humpback',
              underscore_delimited: 'delimited',
              variableStyleToUse: '',
              parseInput: function(){
              	this.classMembers = $(this.input).value.split(/\s+/g);
              },
              build_php_methods: function(){
	            this.methods = '';
							
	            if($(this.classVariable).checked){
					this.classMembers.each(function(item, index){
	              		if(item != ''){
				    		this.methods += this.build_PHP_internal_variable_declaration(item);
			    		}
					}.bind(this));
					this.methods += "\n\n";
				  }
				  
	              	this.classMembers.each(function(item, index){
	              		if(item != ''){
				    		this.methods += this.build_PHP_Setter(item);
				    		this.methods += this.build_PHP_Getter(item);
			    		}
					}.bind(this));
					$(this.output).value = this.methods;
              },
              
			  build_PHP_Getter: function(variable){
				  	var retVal = '';
					if($(this.showCommentStub).checked) {
						retVal = "/**\n * Enter description here...\n *\n * @return unknown_type  \n */\n";
					}
					retVal += "public function get_";
					//retVal += (this.capitalize(variable));
					retVal += variable;
					retVal += ("(){\n");
					retVal += ("\treturn $this->" + variable + ";\n}\n\n");
					return retVal;
			  },
			  build_PHP_Setter: function(variable){
				  var retVal = '';
					if($(this.showCommentStub).checked) {
						retVal = "/**\n * Enter description here...\n *\n * @param  unknown_type " + variable + "\n */\n";
					}
					retVal += "public function set_";
					retVal += variable;
					//retVal += (this.capitalize(variable));
					if(!$(this.useVariableName).checked){
						retVal += ("(" + $(this.internalVariable).value + "){\n");
						retVal += ("\t$this->" + variable + " = " + $(this.internalVariable).value + ";\n}\n\n");
					} else {
						retVal += ("($" + variable + "){\n");
						retVal += ("\t$this->" + variable + " = $" + variable + ";\n}\n\n");
					}
					return retVal;
			  },
			  build_PHP_internal_variable_declaration: function(variable){
				  	var ret_val = '';
				  	ret_val += "private $" + variable + " = '';\n"; 
				  	return ret_val;
			  },
			  capitalize: function(str){
				  	if(str.length < 1 ) return str.toUpperCase();
				  	return str.charAt(0).toUpperCase() + str.substr(1);
			  }        
      });
