/*
 * Detects supported browser features and for better quality management 
 * Creates an blind-image with feature query
 * 
 * Requires md5.js and modernizer.js
 */


function includeModenizerImage(imagepath) {
	document.write("<img src=\"" + imagepath + "?mq=" + encodeURIComponent(buildModenizerQuery()) + "\" border=\"0\" width=\"1\" heigth=\"1\" style=\"display:none;\">");
}

function buildModenizerQuery() {		
	var checks = "webgl,fontface,canvas,canvastext,audio,audio.ogg,audio.mp3,video,video.ogg,video.webm,video.h264,rgba,hsla,borderimage,borderradius,boxshadow,textshadow,multiplebgs,backgroundsize,opacity,cssanimations,csscolumns,cssgradients,cssreflections,csstransforms,csstransforms3d,flexbox,csstransitions,geolocation,localstorage,sessionstorage,webworkers,applicationcache,svg,svgclippaths,smil,websqldatabase,indexeddb,websockets,hashchange,history,draganddrop,postmessage,touch";
	var z = checks.split(",");

	var queryString = hex_md5(checks) + ","; //checksum to make sure the check sequence has not being changed accidentally
	var supported="1";
	var notSupported="0";

	for (var i = 0; i < z.length; i++) {
		var test = z[i];
    	var testtokens = test.split(".");
		//Wenn der Test Unterelemente hat, z.B. "audio.mp3" 
    	//Unterelemente werden durch Punktnotation concateniert.
    	if (testtokens.length > 1) {
    		var parentElement = testtokens[0];
    		var parentElementResult = eval("Modernizr."+parentElement+"?"+supported+":"+notSupported);
    		if (parentElementResult == supported) {
    			var childElement = testtokens[0] + "." + testtokens[1];
    			var childElementResult = eval("Modernizr."+childElement+"?"+supported+":"+notSupported);
    			queryString += childElementResult
    		} else {
    			queryString += notSupported;
    		}
    	} else {
    		//Der Normalfall
    		queryString += eval("Modernizr."+test+"?"+supported+":"+notSupported);
    	}		
	}
    return encodeBase64(queryString);
}

 
function encodeBase64(str) {
    var base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var output = "";

    var i = 0;
    while (i < str.length) { 
        chr1 = str.charCodeAt(i++);
        chr2 = str.charCodeAt(i++);
        chr3 = str.charCodeAt(i++);
        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63; 
        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }
        output = output + base64Chars.charAt(enc1) + base64Chars.charAt(enc2) + base64Chars.charAt(enc3) + base64Chars.charAt(enc4);
    }
    return output;
}
