	var myurl;
	var encodedCSS="";
	var ajaxError=false;
	var verificationCode= "/* SPRITEBAKER.COM */";

var styleparser= {
	loadFile: function(url){
		myurl=document.location+url.replace(/(http:\/\/)\s*/i,"");
		myurl=myurl.replace(/[\s#]*/g, "");
		var errorcount=0;

		if(myurl.lastIndexOf(".css")==myurl.length-4){
			$.ajax({
				url: myurl,
				dataType: "text",
				timeout: 50000,
				cache: false,
				success: function(data) {
					if(data.length>0){
						if(data.indexOf("<html>")==-1){
							if(data.indexOf(verificationCode)>-1){
								styleparser.extractUrls(data);
							}else{
								ajaxError=true;
								gui.errormessage="Couldn't find verification-code. Please paste this text into your stylesheet:<br/><br/>"+verificationCode;
							}
								
						}else{
							ajaxError=true;
							gui.errormessage="Couldn't retrieve Data. Possibly the URL you typed was incorrect.";
						}
					}else{
						ajaxError=true;
						gui.errormessage="Couldn't retrieve Data.";
					}
				},
				
				error: function(XMLHttpRequest, textStatus, errorThrown){
					ajaxError=true;
					errorThrown+="";
					if(textStatus=="timeout"){
						gui.errormessage="Timeout. Sorry, but I can't wait forever!";
					}else if (errorThrown.indexOf("denied")>-1){
						gui.errormessage="Access to URL was denied. Check for typos. Make sure the file exists and isn't access-restricted.";
					}else {
						gui.errormessage="Couldn't retrieve Data.";
					}
				}
			});
		}else{
			ajaxError=true;
			gui.errormessage="Sorry, wrong suffix (no CSS file).";
		}
	},

	extractUrls: function(css){
		var atimportlookup=/@import\surl\s*\(.*?\s*\)/gi;
		var atimports=css.match(atimportlookup);
		var atimportpattern=/((\/)(.*?)(\/\*\*\/))/gi;
		if(atimports!=null){
			for (var i=0; i<atimports.length; i++){
				var repl=atimports[i].replace(atimportpattern, "");
				css=css.replace(atimports[i], repl);
			}
		}
		
		var localFontLookup=/( src\s*:\s*local\s*\(.*?\).*?url\s*\(.*?\))/gi;
		var localfonts=css.match(localFontLookup);
		if(localfonts!=null){
			for (i=0; i<localfonts.length; i++){
				repl=localfonts[i].replace(atimportpattern, "");
				css=css.replace(localfonts[i], repl);
			}
		}
		var fontlookup=/@font-face[.\s\S]*?\}/gim;
		var fonts = css.match(fontlookup);
		var fontpattern=/((src\s*:\s*url\s*\(\s*["']*).*?\s*["']*\))/gi;
		var backgroundlookup = /(background[^;]*url.*?[\;\n}])/gi;
		
		var backgrounds = css.match(backgroundlookup);
		var bgpattern=/(url\s*\(\s*["']*).*?\s*((["']*\)|;))/gi;
		if(fonts !=null){
			extract(fonts, fontpattern, "font");
		}
		if(backgrounds !=null){
			extract(backgrounds, bgpattern, "bg");
		}
		var skiplookup=/((\/).*?\s*(\/\*SKIP\*\/))/gi;
		
		var error=0;
		
		function extract(urls, pattern, type){
			var txt="";
			for(var k=0; k<urls.length; k++){
				txt+=urls[k]+"\n\n";
			}
			var matched=new Array();
			var imageUrl;
			if (urls!=null){
				for (var i=0; i<urls.length; i++){
					matched=urls[i].match(pattern);
					if (matched!=null && matched.length>0){
						for (var j=0; j<matched.length; j++){
							var match=matched[j].match(pattern)+"";
							var skipmatch = match.indexOf("/*SKIP*/")>-1 ? true: false;
							
							if(!skipmatch){
								if(match.indexOf("data")<0){
									if(match.indexOf("\"")>-1){
										var startindex=(match.indexOf("\""));
										var endindex=match.lastIndexOf("\"")+1;
									}else if(match.indexOf("'")>-1){
										startindex=(match.indexOf("'"));
										endindex=match.lastIndexOf("'")+1;
									}else{
										startindex=(match.indexOf("(")+1);
										endindex=match.length-1;
								}
								match=match.substring(startindex, endindex);
								imageUrl=match.replace(/[\s'"]*/g,"");
								if(match.length>0){
									imageUrl="'"+base64.loadBinary(imageUrl, type)+"'";
									if(imageUrl.indexOf("empty")<0){
										css=css.replace(match, imageUrl);
									}else{
										var importlookup=/((\/).*?\s*(\/\*\*\/))/gi;
										var stripped=match.replace(importlookup, "");
										css=css.replace(match, stripped+" /*Stylebaker Error: could not find resource*/ ");
									}
								}
								//}
								}else{
									url="'"+match.replace(/((\s*["']*).*?\s*(data))/gi, "data")+"'";
									css=css.replace(match, url);
								}
							}else{
								var skiplookup=/(\/.*?(\/\*SKIP\*\/))/gi;
								var url=match.replace(skiplookup, "");
								css=css.replace(match, url);
							}
						}
					}
				}
				encodedCSS=css+"";
			}else{
				error++;
			}
		}
		if(error>=2){
			ajaxError=true;
			gui.errormessage="Your stylesheet doesn't contain resources that can be baked.";
		}
	}
}
