//Regexp Tool
//© 2008 Scott Drake

var RegexpTool = function (options)
{
	if (!options)
	{
		options = {};
	}
	
	this.regexId = options.regexId || 'regex';
	this.replacementId = options.replacementId || 'replacement';
	this.subjectId = options.subjectId || 'subject';
	this.resultId = options.resultId || 'result';
	this.globalId = options.globalId || 'global';
	this.caseInsensitiveId = options.caseInsensitiveId || 'caseInsensitive';
	this.multiLineId = options.multiLineId || 'multiLine';
	this.expandSpecialCharsId = options.expandSpecialCharsId || 'expandSpecialChars';
};

RegexpTool.prototype = 
{
	//Model
	readInput: function ()
	{
		return document.getElementById(this.subjectId).value;
	},
	
	createRegexp: function ()
	{
		var regexText = document.getElementById(this.regexId).value;
		var flags = '';
		flags += (document.getElementById(this.globalId).checked) ? 'g' : '';
		flags += (document.getElementById(this.caseInsensitiveId).checked) ? 'i' : '';
		flags += (document.getElementById(this.multiLineId).checked) ? 'm' : '';
		return new RegExp(regexText, flags)
	},
	
	parseReplacement: function ()
	{
		var replacementText = document.getElementById(this.replacementId).value;
		if (document.getElementById(this.expandSpecialCharsId).checked)
		{
			replacementText = replacementText.replace(new RegExp('//n', 'g'), "\n");
			replacementText = replacementText.replace(new RegExp('//r', 'g'), "\r");
			replacementText = replacementText.replace(new RegExp('//t', 'g'), "\t");
		}
		return replacementText;
	},
	
	regexpReplace: function ()
	{
		return this.readInput().replace(this.createRegexp(), this.parseReplacement());
	},
		
	//View
	output: function (outputText)
	{
		var outputNode = document.getElementById(this.resultId);
		outputNode.value = outputText;
		
		//connect to external function
		window.copyPrep(outputNode);
	},
	
	//Controller
	replace: function ()
	{
		this.output(this.regexpReplace());
	}
};

var textTool = new RegexpTool();
