function roundDec(num, dec) {
	return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
}
function typeOf(object) {
	var type = typeof object;
	switch (type) {
		case "object":
			if(object == null) {
				return "null";
			}
			else {
				if(typeof object.constructor == "undefined") {
					if(_MSIE_NATIVE_FUNCTION.test(object)) {
						return "function";
					}
					else {
						return type;
					}
				}
				else {
					return typeof object.constructor.prototype.valueOf();	
				}
			}
		break;
		case "function":
			if(typeof object.call == "function") {
				return type;
			}
			else {
				return "object";
			}
		break;
		default:
		  return type;
		break;
	}
}
function getBaseUrl() {
	var str = window.location.href;
	return str.substr(0,str.length-str.split("/").pop().length);
}
function getDomain() {
    return window.location.protocol + "//" + window.location.host + "/";
}
function empty(mixed_var) {
    var key;
    if (mixed_var === "" || mixed_var === 0 || mixed_var === "0" || mixed_var === null || mixed_var === false || mixed_var === undefined) {
        return true;
	}
    if (typeof mixed_var == 'object') {
        for (key in mixed_var) {
            return false;
        }
        return true;
    }
    return false;
}
function debug(variable) {
	// Requires Firebug
	console.debug(variable);
}
function pintar(elem) {
	elem.focus();
	elem.select();
}
function validEmail(str){
	var emailRegEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!str.match(emailRegEx)) {
		return false;
	}
	else {
		return true;
	}
}
function notEmpty(str) {
	var re = /.+/;
	if(!str.match(re)) {
		return false;
	}
	else {
		return true;
	}
}
function validPass(str) {
	var re = /^\w{8,}$/;
	if(!str.match(re)) {
		return false;
	}
	else {
		return true;
	}
}
function validUsername(str) {
	var re = /^[a-z][\da-z_]{6,22}[a-z\d]$/;
	if(!str.match(re)) {
		return false;
	}
	else {
		return true;
	}
}
function pintarTrAlt(table) {
	var trs = $(table).find('tbody tr');
	for (var i = 0; i < trs.length; i++) {
		if (i % 2 == 0) {
			$(trs[i]).addClass('alt');
		}
		else {
			$(trs[i]).removeClass('alt');
		}
	}
}
function hasExtension(filename, extns) {
	var isValid = false;
    var extnsLen = extns.length;
    var extnRx;
    var i;
    for (var i = 0; i < extnsLen; i += 1) {
        extnRx = new RegExp('\.' + extns[i].toUpperCase() + '$');
        if (extnRx.exec(filename.toUpperCase())) {
            isValid = true;
        }
    }
	return isValid;
}
function esBiciesto(year) {
    return ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));
}
function levenshtein (s1, s2) {
    // Calculate Levenshtein distance between two strings  
    // 
    // version: 1109.2015
    // discuss at: http://phpjs.org/functions/levenshtein    // +            original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
    // +            bugfixed by: Onno Marsman
    // +             revised by: Andrea Giammarchi (http://webreflection.blogspot.com)
    // + reimplemented by: Brett Zamir (http://brett-zamir.me)
    // + reimplemented by: Alexander M Beedie    // *                example 1: levenshtein('Kevin van Zonneveld', 'Kevin van Sommeveld');
    // *                returns 1: 3
    if (s1 == s2) {
        return 0;
    } 
    var s1_len = s1.length;
    var s2_len = s2.length;
    if (s1_len === 0) {
        return s2_len;    
    }
    if (s2_len === 0) {
        return s1_len;
    }
    // BEGIN STATIC
    var split = false;
    try {
        split = !('0')[0];
    } 
    catch (e) {        
        split = true; // Earlier IE may not support access by string index
    }
    // END STATIC
    if (split) {
        s1 = s1.split('');        s2 = s2.split('');
    } 
    var v0 = new Array(s1_len + 1);
    var v1 = new Array(s1_len + 1); 
    var s1_idx = 0, s2_idx = 0, cost = 0;
    for (s1_idx = 0; s1_idx < s1_len + 1; s1_idx++) {        
        v0[s1_idx] = s1_idx;
    }
    var char_s1 = '', char_s2 = '';
    for (s2_idx = 1; s2_idx <= s2_len; s2_idx++) {        
        v1[0] = s2_idx;
        char_s2 = s2[s2_idx - 1]; 
        for (s1_idx = 0; s1_idx < s1_len; s1_idx++) {
            char_s1 = s1[s1_idx];            cost = (char_s1 == char_s2) ? 0 : 1;
            var m_min = v0[s1_idx + 1] + 1;
            var b = v1[s1_idx] + 1;
            var c = v0[s1_idx] + cost;
            if (b < m_min) {
                m_min = b;
            }
            if (c < m_min) {
                m_min = c;
            }            
            v1[s1_idx + 1] = m_min;
        }
        var v_tmp = v0;
        v0 = v1;
        v1 = v_tmp;    
    }
    return v0[s1_len];
}
