/**
 * Metoda prevzata z TMAP. Ma za ukol prevadet souradnicovy system s42, ktery pouzivaji TMAPY, na 
 * system WGS84, ktery pouziva google
 * 
 * @param y
 * @param x
 * @param f
 * @return
 */
function s42towgs84(y, x, f) {

    function formatwgs84(p) {
    	return p;
    }

    if (!y || !x) {
    	return false;
    }

    var ro = 57.295779513082321;
    var a = 6378245;
    var c = 6356863.019;
    var e2 = 0.673852541468 / 100;
    var ee = 0.669342162297 / 100;
    var pas = 3;
    var lnula = pas * 6 - 3;
    var b = x / 111134.861084;
    y = y - pas * 1000000 - 500000;
    var br = b / ro;
    var db = 16036.480269 * Math.sin(2 * br);
    
    db = db - 16.828067 * Math.sin(4 * br);
    db = db + 0.021975 * Math.sin(6 * br);
    db = db - 0.000031 * Math.sin(8 * br);
    
    var t = Math.sin(br) / Math.cos(br);
    var eta2 = e2 * Math.cos(br) * Math.cos(br);
    var n = a * a / (c * Math.sqrt(eta2 + 1));

    b = b + db * ro * (1 + eta2) / n;
    b = b - (3 * ro * t * db * db * eta2) * (1 + eta2) / (2 * n * n);
    b = b - (ro * db * db * db * eta2) * (1 - t * t + 2 * eta2 - 6 * t * t * eta2) / (2 * n * n * n);
    br = b / ro;
    t = Math.sin(br) / Math.cos(br);
    eta2 = e2 * Math.cos(br) * Math.cos(br);
    n = a * a / (c * Math.sqrt(eta2 + 1));
    l = lnula;
    l1 = (ro * y) / (n * Math.cos(br));
    l += l1;
    l2 = -(ro * y * y * y) * (1 + 2 * t * t + eta2) / (6 * n * n * n * Math.cos(br));
    l += l2;
    l3 = (ro * y * y * y * y * y) * (5 + 28 * t * t + 24 * t * t * t * t + 6 * eta2 + 8 * t * t * eta2) / (120 * n * n * n * n * n * Math.cos(br));
    l += l3;
    b = b - (ro * t * y * y) * (1 + eta2) / (2 * n * n);
    b = b + (ro * t * y * y * y * y) * (5 + 3 * t * t + 6 * eta2 - 6 * t * t * eta2 - 3 * eta2 * eta2 - 9 * t * t * eta2 * eta2) / (24 * n * n * n * n);
    l = l / ro;
    b = b / ro;
    
    var f84 = b - 1.4 / 3600 / ro;
    var l84 = l - 6.2 / 3600 / ro;

    if (l > (18 / ro)) {
    	f84 = b - 1.2 / 3600 / ro;
    	l84 = l - 6.1 / 3600 / ro;
    }

    f84 = f84 * 180 / Math.PI;
    l84 = l84 * 180 / Math.PI;

    if (!f) {
    	f84 = formatwgs84(f84);
    	l84 = formatwgs84(l84);
    }
    return {fi : f84, lambda : l84};
}
