$(document).ready(function() {
	
	if (!$.browser.mozilla || version_compare($.browser.version, '1.9.2', '<')) {
		$('h1').prepend('<div class="error">This Page only works with Firefox&nbsp;version&nbsp;>=&nbsp;3.6!<br />Please, <a href="http://www.mozilla.com/firefox/all-beta.html">upgrade</a> or try the <a href="../">classic MD5 checker</a>.</div><br />');
	}

	try {
		/*
		document.getElementById('dropzone').addEventListener('dragenter', boxHoverEffect, false);
		document.getElementById('dropzone').addEventListener('dragover',  boxHoverEffect, false);
		document.getElementById('dropzone').addEventListener('dragout',   boxHoverEffectOut, false);
		*/
		document.getElementById('dropzone').addEventListener('drop', 	  calculateMd5,   false);
	} catch (e) {}
	
	result = $('#result');
	loader = $('#loader');
});

function calculateMd5(event) {
	event.stopPropagation();
	event.preventDefault();
	loader.show();
	file = event.dataTransfer.files[0];
	setTimeout('calculate(file);', 20); // else no loader will be shown
}

function calculate(file) {
	// file 		= event.dataTransfer.files[0];
	fileName 	= file.fileName;

	result.text('').append(fileName+' ').hide().css('visibility', 'visible').show('fast');

	data 		= file.getAsBinary();
	md5_result 	= bin2hex(rstr_md5(data));

	
	result.append(md5_result);
	loader.hide();
}

function boxHoverEffect(event) {
	event.preventDefault();
	event.stopPropagation();


	$('#dropzone').css('border', '2px solid black');
}

function boxHoverEffectOut(event) {
	event.preventDefault();
	event.stopPropagation();

	alert('asdf');

	$('#dropzone').css('border', '1px solid black');
}









// other functions


function bin2hex (s){
    // Converts the binary representation of data to hex  
    // 
    // version: 909.322
    // discuss at: http://phpjs.org/functions/bin2hex
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +   bugfixed by: Linuxworld
    // *     example 1: bin2hex('Kev');
    // *     returns 1: '4b6576'
    // *     example 2: bin2hex(String.fromCharCode(0x00));
    // *     returns 2: '00'
    var i, f = 0, a = [];
    
    s += '';
    f = s.length;
    
    for (i = 0; i<f; i++) {
        a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");
    }
    
    return a.join('');
}




function version_compare (version1, version2, operator) {
    // Compares two "PHP-standardized" version number strings  
    // 
    // version: 911.815
    // discuss at: http://phpjs.org/functions/version_compare
    // +      original by: Philippe Jausions (http://pear.php.net/user/jausions)
    // +      original by: Aidan Lister (http://aidanlister.com/)
    // + reimplemented by: Kankrelune (http://www.webfaktory.info/)
    // +      improved by: Brett Zamir (http://brett-zamir.me)
    // *        example 1: version_compare('8.2.5rc', '8.2.5a');
    // *        returns 1: 1
    // *        example 2: version_compare('8.2.50', '8.2.52', '<') ;
    // *        returns 2: true
    // *        example 3: version_compare('5.3.0-dev', '5.3.0') ;
    // *        returns 3: -1
    // BEGIN REDUNDANT
    this.php_js = this.php_js || {};
    this.php_js.ENV = this.php_js.ENV || {};
    // END REDUNDANT

    if (!version1 || !version2) {
        throw 'version_compare() is missing a required argument';
    }
    
    var v1, v2, compare = 0, i = 0, x = 0;
    var i1, i2;

    var parseVersionString = function (v) {
        v = v.replace(/(^\s*)|(\s*$)/g, "").replace(/[-|_|+]/g,'.').replace(/([^0-9\.]+)/g,'.$1.');
        v = v.replace(/\.\.*/g,'.').toLowerCase().split('.');
        while (!v[0]) {
            v.shift();
        }
        while (!v[v.length-1]) {
            v.pop();
        }
        return v;
    };

    var versions = {
        'dev'   : -1,
        'alpha' : 1,
        'a'  : 1,
        'beta'  : 2,
        'b'  : 2,
        'rc'    : 3,
        '#'  : 4,
        'p'     : 5,
        'pl' : 5
    };

    v1 = parseVersionString(version1);
    v2 = parseVersionString(version2);
    x = (v1.length > v2.length) ? v2.length : v1.length;

    for (i = 0; i < x; i++) {
        if (v1[i] == v2[i]) {
            continue;
        }

        compare = 0;
        i1      = v1[i];
        i2      = v2[i];

        if (!isNaN(i1) && !isNaN(i2)) {
            if (parseInt(i1, 10) < parseInt(i2, 10)) {
                compare = -1;
            } else if (parseInt(i1, 10) > parseInt(i2, 10)){
                compare = 1;
            }
            break;
        }

        if (i1 == '#') {
            i1 = '';
        } else if (!isNaN(i1)) {
            i1 = '#';
        }

        if (i2 == '#') {
            i2 = '';
        } else if (!isNaN(i2)) {
            i2 = '#';
        }

        if (versions[i1] && versions[i2]) {
            if (versions[i1] < versions[i2])
                compare = -1;
            else if (versions[i1] > versions[i2])
                compare = 1;
        } else if (versions[i1]) {
            compare = 1;
        } else if (versions[i2]) {
            compare = -1;
        }
        break;
    }
    if (compare == 0 && v1.length != v2.length) {
        if (v2.length > v1.length) {
            if (versions[v2[i]]) {
                compare = (versions[v2[i]] < 4) ? 1 : -1;
            } else {
                compare = -1;
            }
        } else {
            if (versions[v1[i]]) {
                compare = (versions[v1[i]] < 4) ? -1 : 1;
            } else {
                compare = 1;
            }
        }
    }

    if (operator) {
        switch (operator.toLowerCase()) {
            case '>':
            case 'gt':
                return (compare > 0);
            case '>=':
            case 'ge':
                return (compare >= 0);
            case '<=':
            case 'le':
                return (compare <= 0);
            case '==':
            case '=':
            case 'eq':
                return (compare == 0);
            case '<>':
            case '!=':
            case 'ne':
                return (compare != 0);
            case '':
            case '<':
            case 'lt':
            default:
                return (compare < 0);
        }
    }

    return compare;
}
