// JavaScript Document
function pluralize(string){	
	plural_rulesArray = new Array();
	plural_rulesArray[0] = new Array(); //search, switch, fix, box, process, address
	plural_rulesArray[0]['search'] = '(x|ch|ss|sh)$';
	plural_rulesArray[0]['replace'] = "$1"+'es';
	plural_rulesArray[1] = new Array(); //series => series
	plural_rulesArray[1]['search'] = 'series$';
	plural_rulesArray[1]['replace'] = 'series';
	plural_rulesArray[2] = new Array();
	plural_rulesArray[2]['search'] = '([^aeiouy]|qu)ies$';
	plural_rulesArray[2]['replace'] = "$1"+'y';
	plural_rulesArray[3] = new Array(); //query, ability, agency
	plural_rulesArray[3]['search'] = '([^aeiouy]|qu)y$';
	plural_rulesArray[3]['replace'] = "$1"+'ies';
	plural_rulesArray[4] = new Array(); //half, safe, wife
	plural_rulesArray[4]['search'] = '(?:([^f])fe|([lr])f)$';
	plural_rulesArray[4]['replace'] = "$1$2"+'ves';
	plural_rulesArray[5] = new Array(); //basis, diagnosis
	plural_rulesArray[5]['search'] = 'sis$';
	plural_rulesArray[5]['replace'] = 'ses';
	plural_rulesArray[6] = new Array(); //basis, diagnosis
	plural_rulesArray[6]['search'] = 'sis$';
	plural_rulesArray[6]['replace'] = "$1"+'es';
	plural_rulesArray[7] = new Array(); //datum, medium
	plural_rulesArray[7]['search'] = '([ti])um$';
	plural_rulesArray[7]['replace'] = "$1"+'a';
	plural_rulesArray[8] = new Array(); //cactus, platypus, but don't mess with US
	plural_rulesArray[8]['search'] = '([\w])us$';
	plural_rulesArray[8]['replace'] = "$1"+'i';
	plural_rulesArray[9] = new Array(); //datum, medium
	plural_rulesArray[9]['search'] = 'person$';
	plural_rulesArray[9]['replace'] = 'people';
	plural_rulesArray[10] = new Array(); //man, woman, spokesman
	plural_rulesArray[10]['search'] = 'man$';
	plural_rulesArray[10]['replace'] = 'men';
	plural_rulesArray[11] = new Array(); //child
	plural_rulesArray[11]['search'] = 'child$';
	plural_rulesArray[11]['replace'] = 'children';
	plural_rulesArray[12] = new Array(); // no change (compatibility)
	plural_rulesArray[12]['search'] = "('*s'*)$";
	plural_rulesArray[12]['replace'] = "$1";
	plural_rulesArray[13] = new Array(); // goose
	plural_rulesArray[13]['search'] = 'goose$';
	plural_rulesArray[13]['replace'] = 'geese';
	plural_rulesArray[14] = new Array(); // mouse
	plural_rulesArray[14]['search'] = 'mouse$';
	plural_rulesArray[14]['replace'] = 'mice';
	plural_rulesArray[15] = new Array(); // deer, moose and quail don't change
	plural_rulesArray[15]['search'] = '(deer|moose|quail)$';
	plural_rulesArray[15]['replace'] = "$1";
	plural_rulesArray[16] = new Array(); // everything else..
	plural_rulesArray[16]['search'] = '$';
	plural_rulesArray[16]['replace'] = 's';

	//etc, etc.
	var i;
	for(i=0;i<plural_rulesArray.length;i++){
		regExp = new RegExp(plural_rulesArray[i]['search'],'i');
		
		if(string.match(regExp)){
			//alert(regExp+' matched:'+string.replace(regExp,eval('"'+plural_rulesArray[i]['replace']+'"')));
			string = string.replace(regExp, eval('"'+plural_rulesArray[i]['replace']+'"'));
			break;
		}
	}
	return string;
}

function singularize(string){	
	singular_rulesArray = new Array();
	singular_rulesArray[0] = new Array(); //search, switch, fix, box, process, address
	singular_rulesArray[0]['search'] = '(x|ch|ss|sh)es$';
	singular_rulesArray[0]['replace'] = "$1";
	singular_rulesArray[1] = new Array(); //series => series
	singular_rulesArray[1]['search'] = 'series$';
	singular_rulesArray[1]['replace'] = 'series';
	singular_rulesArray[2] = new Array(); //query, ability, agency
	singular_rulesArray[2]['search'] = '([^aeiouy])ies$';
	singular_rulesArray[2]['replace'] = "$1"+'y';
	singular_rulesArray[3] = new Array(); 
	singular_rulesArray[3]['search'] = '([^aeiouy]|qu)ies$';
	singular_rulesArray[3]['replace'] = "$1"+'y';
	singular_rulesArray[4] = new Array(); //half
	singular_rulesArray[4]['search'] = '([lr])ves$';
	singular_rulesArray[4]['replace'] = "$1"+'f';
	singular_rulesArray[5] = new Array(); //safe, wife
	singular_rulesArray[5]['search'] = '([^lr])ves$';
	singular_rulesArray[5]['replace'] = "$1"+'fe';
	singular_rulesArray[6] = new Array(); //basis, diagnosis
	singular_rulesArray[6]['search'] = 'ses$';
	singular_rulesArray[6]['replace'] = 'sis';
	singular_rulesArray[7] = new Array(); //datum, medium
	singular_rulesArray[7]['search'] = '([ti])a$';
	singular_rulesArray[7]['replace'] = "$1"+'um';
	singular_rulesArray[8] = new Array(); //cactus, platypus, fungus
	singular_rulesArray[8]['search'] = '([gpt])i$';
	singular_rulesArray[8]['replace'] = "$1"+'us';
	singular_rulesArray[9] = new Array(); //person
	singular_rulesArray[9]['search'] = 'people$';
	singular_rulesArray[9]['replace'] = 'person';
	singular_rulesArray[10] = new Array(); //man, woman, spokesman
	singular_rulesArray[10]['search'] = 'men$';
	singular_rulesArray[10]['replace'] = 'man';
	singular_rulesArray[11] = new Array(); //waffles
	singular_rulesArray[11]['search'] = '([l])es$';
	singular_rulesArray[11]['replace'] = "$1"+'e';
	singular_rulesArray[12] = new Array(); //geese => goose
	singular_rulesArray[12]['search'] = 'geese$';
	singular_rulesArray[12]['replace'] = 'goose';
	singular_rulesArray[13] = new Array(); //child
	singular_rulesArray[13]['search'] = 'children$';
	singular_rulesArray[13]['replace'] = 'child';
	singular_rulesArray[14] = new Array(); //mouse
	singular_rulesArray[14]['search'] = 'mice$';
	singular_rulesArray[14]['replace'] = 'mouse';
	singular_rulesArray[15] = new Array(); //everything else
	singular_rulesArray[15]['search'] = 'es$';
	singular_rulesArray[15]['replace'] = 's';
	//don't have to worry about deer, etc, they just pass through..
	//etc, etc.
	var i;
	for(i=0;i<singular_rulesArray.length;i++){
		regExp = new RegExp(singular_rulesArray[i]['search'],'i');
		if(string.match(regExp)){
			//alert(regExp+' matched:'+string.replace(regExp,eval('"'+plural_rulesArray[i]['replace']+'"')));
			string = string.replace(regExp, eval('"'+singular_rulesArray[i]['replace']+'"'));
			break;
		}
	}
	return string;
}

function abandon(string){ //make unpossive
	abandon_rulesArray = new Array();
	abandon_rulesArray[0] = new Array(); //search, switch, fix, box, process, address
	abandon_rulesArray[0]['search'] = "(s*)'s*$";
	abandon_rulesArray[0]['replace'] = "$1";
	//etc, etc.
	var i;
	for(i=0;i<abandon_rulesArray.length;i++){
		regExp = new RegExp(abandon_rulesArray[i]['search'],'i');
		if(string.match(regExp)){
			//alert(regExp+' matched:'+string.replace(regExp,eval('"'+plural_rulesArray[i]['replace']+'"')));
			string = string.replace(regExp, eval('"'+abandon_rulesArray[i]['replace']+'"'));
			break;
		}
	}
	return string;
}

function posessive(string){	
	posessive_rulesArray = new Array();
	posessive_rulesArray[0] = new Array(); //already possive...
	posessive_rulesArray[0]['search'] = "('s|s')$";
	posessive_rulesArray[0]['replace'] = "$1";
	posessive_rulesArray[1] = new Array(); //search, switch, fix, box, process, address
	posessive_rulesArray[1]['search'] = '(s)$';
	posessive_rulesArray[1]['replace'] = "$1"+"'";
	posessive_rulesArray[2] = new Array(); //series => series
	posessive_rulesArray[2]['search'] = '$';
	posessive_rulesArray[2]['replace'] = "'s";
	//etc, etc.
	var i;
	for(i=0;i<posessive_rulesArray.length;i++){
		regExp = new RegExp(posessive_rulesArray[i]['search'],'i');
		if(string.match(regExp)){
			//alert(regExp+' matched:'+string.replace(regExp,eval('"'+plural_rulesArray[i]['replace']+'"')));
			string = string.replace(regExp, eval('"'+posessive_rulesArray[i]['replace']+'"'));
			break;
		}
	}
	return string;
}