function SimpleSelector(sToken, bIsPseudo) {
	sToken = new String(sToken);	// in case incoming String isn't a JS String (dumb JS problem)

	this.id = '';
	this.tag = '';
	this.classList = new Array();
		
	this.attrList = new Array();
	this.pseudoClassList = new Array();

	//var iSplit = sToken.search(SimpleSelector.regExp.pseudoClass);
	var iSplit = sToken.indexOf(':');
	if(iSplit >= 0) {
		var sSelector = new String(sToken.substr(0, iSplit));
		var sPseudos = new String(sToken.substr(iSplit));
	} else {
		var sSelector = sToken;
		var sPseudos = '';
	}

	var ids = sSelector.matchList(SimpleSelector.regExp.id);
	if(ids.length > 1)
		throw 'Simple selector with 2 IDs; no tag may have 2 IDs.';
	
	if(ids.length == 1)
		this.id = ids[0];
	
	var tags = sSelector.matchList(SimpleSelector.regExp.tag);
	if(tags.length == 1)
		this.tag = tags[0];

	if(this.id == '' && this.tag == '' && !bIsPseudo)
		throw 'Each simple selector must include at least 1 tag or ID for performance reasons';

	this.classList = sSelector.matchList(SimpleSelector.regExp.classList);
	
	var attrs = sSelector.matchList(SimpleSelector.regExp.attrList);
	for(var i = 0; i < attrs.length; i++)
		this.attrList.push(new Attribute(attrs[i]));

	var test = SimpleSelector.regExp.pseudoClass;
	// /([\w\-]+\(.+\))/g;
	// SimpleSelector.regExp.pseudoClass;
	var pseudoClasses = sPseudos.matchList(test);
	for(var i = 0; i < pseudoClasses.length; i++)
		this.pseudoClassList.push(new PseudoClass(pseudoClasses[i]));
	
	//SimpleSelector.log += '\n' + this.toString();
}

SimpleSelector.log = '';

SimpleSelector.regExp = new Object();
SimpleSelector.regExp.tag = /^(\w+)/g;
SimpleSelector.regExp.id = /#(\w+)/g;
SimpleSelector.regExp.classList = /\.(\w+)/g;
SimpleSelector.regExp.attrList = /\[(\w+=?\w*)\]/g;
SimpleSelector.regExp.pseudoClass = /(\:[^\:]+)/g;

p = SimpleSelector.prototype;

p.toString = function () {
	var sSelector = '';
	if(this.tag)
		sSelector += this.tag;
	if(this.id)
		sSelector += '#' + this.id;
	
	for(var i = 0; i < this.classList.length; i++) {
		sSelector += '.' + this.classList[i];
	}

	for(var i = 0; i < this.attrList.length; i++)
		sSelector += this.attrList[i].toString();

	for(var i = 0; i < this.pseudoClassList.length; i++)
		sSelector += ':' + this.pseudoClassList[i].toString();
	
	return sSelector;
}
