function artistSearchManager() {
	this.url = "/searchwidget.json";
	this.getArtist = function( artistName, dataSource, handler, searchType ) {
		var theRhapsodyBID = ".";
		try { theRhapsodyBID=rhapsodyBID; } catch(e) { }
    	var queryStringParams = "type=" + searchType + "&name=" + escape(this.stripVowelAccent(artistName)) + "&source="+dataSource+"&page=1&bid=" + theRhapsodyBID;
        
		var callback = function (data){
			handler(data);
		}
		
		var firstChar = "-";
		try { firstChar=artistName.charAt(0).toLowerCase(); } catch(e) {}
		if( firstChar<'a' || firstChar>'z' ) { firstChar="_"; }
		
    	this.sendMessage( rhapsodyUrlJson + "/" + firstChar + this.url, queryStringParams, callback);	
	};
	this.stripVowelAccent = function (str) {
		var s=str;
		
		var rExps=[ /[\xC0-\xC2]/g, /[\xE0-\xE2]/g,
		/[\xC8-\xCA]/g, /[\xE8-\xEB]/g,
		/[\xCC-\xCE]/g, /[\xEC-\xEE]/g,
		/[\xD2-\xD4]/g, /[\xF2-\xF4]/g,
		/[\xD9-\xDB]/g, /[\xF9-\xFB]/g ];
		
		var repChar=['A','a','E','e','I','i','O','o','U','u'];
		
		for(var i=0; i<rExps.length; i++)
		s=s.replace(rExps[i],repChar[i]);
		
		return s;
	};

    this.MSGCOUNT = 0;
	this.sendMessage = function( url, queryStringParams, callback){
          var CURRENTMESSAGECOUNT = ++this.MSGCOUNT;
          var CURRENTINSTANCE = this;
		  var wrappedCallback = function (requestObj, emptyData) {
                if (CURRENTMESSAGECOUNT != CURRENTINSTANCE.MSGCOUNT){
                    return;
                }
				if(requestObj.status == 200){
					var text = requestObj.responseText;
					if (text.substring(0,2) == "[{"){
						var data = eval(text);
					} else {
						var data = eval('('+text+')');
					}
					callback(data);
				} else {
					var data = new Array();
					data.exception = new Array();
					data.exception.message="Bad response from ajax request. "
					data.exception.code=requestObj.status
					callback(data);
					return;
				}
			}
            
            new Ajax.Request( url,{
			    onSuccess: wrappedCallback,
			    method: 'get',
			    parameters: queryStringParams });
	}
}



