var END_OF_INPUT = -1;

var base64Chars = new Array(
    'A','B','C','D','E','F','G','H',
    'I','J','K','L','M','N','O','P',
    'Q','R','S','T','U','V','W','X',
    'Y','Z','a','b','c','d','e','f',
    'g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v',
    'w','x','y','z','0','1','2','3',
    '4','5','6','7','8','9','+','/'
);

var base64Str;
var base64Count;

var base64={
	loadBinary: function(url, type) {
		var req = new XMLHttpRequest();
		var url=url.replace("/**/", "/");
		req.open('GET', (url), false);  
		var serverResponse = req.responseText;
		req.overrideMimeType('text/plain; charset=x-user-defined');
		try{
			req.send(null);
			data=req.responseText;
			if(data.indexOf("<html>")<0){
				var mediatype="image";
				encoded= this.encodeBase64(data); 
				startindex=url.lastIndexOf(".")+1;
				var suffix=url.substring(startindex);
				if(type=="bg"){
					if(suffix.indexOf("svg")>-1){
						suffix+="+xml";
					}
				}else if(type=="font"){
					var mediatype="font";
				}
				
				if(data.length>0){
					var returnstring="data:"+mediatype+"/"+suffix+";base64,"+encoded;
					return (returnstring);
				}else{
					return ("empty");
				}
			}else{
				return ("empty");
				}
			}
		catch(err){
				return ("empty");
			}
			
		},
//_________________Base64 encode by Stephen Ostermiller http://ostermiller.org/____________

	setBase64Str: function(str){
    	base64Str = str;
    	base64Count = 0;
	},
	
	readBase64: function(){    
    	if (!base64Str) return END_OF_INPUT;
    	if (base64Count >= base64Str.length) return END_OF_INPUT;
    	var c = base64Str.charCodeAt(base64Count) & 0xff;
    	base64Count++;
    	return c;
	},
	
	encodeBase64: function(str){
    	this.setBase64Str(str);
    	var result = '';
    	var inBuffer = new Array(3);
    	var lineCount = 0;
    	var done = false;
    	while (!done && (inBuffer[0] = this.readBase64()) != END_OF_INPUT){
        	inBuffer[1] = this.readBase64();
        	inBuffer[2] = this.readBase64();
        	result += (base64Chars[ inBuffer[0] >> 2 ]);
        	if (inBuffer[1] != END_OF_INPUT){
            	result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
            	if (inBuffer[2] != END_OF_INPUT){
                	result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
                	result += (base64Chars [inBuffer[2] & 0x3F]);
            	} else {
                	result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
                	result += ('=');
                	done = true;
            	}
        	} else {
            	result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
            	result += ('=');
            	result += ('=');
            	done = true;
        	}
    	}
    return result;
	}
}
