function setCookie(name, value) {
  document.cookie = name + "=" + escape(value) + ";path=/";
}

function cleanLinks() {
  var links = document.body.getElementsByTagName("a");
  for (var i = 0; i < links.length; i++) {
    var link = links[i];
    if (link.href && link.href.match(/[?&]page=/))
      link.href = link.href.replace(/[&]zoom=[0-9]+/, "");
  }
}

var has_cookies = 0;

function checkCookies() {
  if (navigator.cookieEnabled) {
    has_cookies = 1;
    cleanLinks();
  }
}

var env_ua = function() {
  var o = {
    ie: 0,
    opera: 0
  };

  var ua = navigator.userAgent;

  if (!ua.match(/KHTML/) && !ua.match(/AppleWebKit/)) {
    if (ua.match(/Opera[\s\/]/)) {
      o.opera = 1;
    } else if (ua.match(/MSIE\s/)) {
      o.ie = 1;
    }
  }
  return o;
}();

function getViewportWidth() {
  var width = self.innerWidth;
  var mode = document.compatMode;

  if (mode || env_ua.ie) {
    width = (mode == 'CSS1Compat') ?
	    document.documentElement.clientWidth :
	    document.body.clientWidth;
  }

  return width;
}

function getViewportHeight() {
  var height = self.innerHeight;
  var mode = document.compatMode;

  if ((mode || env_ua.ie) && !env_ua.opera) {
    height = (mode == 'CSS1Compat') ?
	     document.documentElement.clientHeight :
	     document.body.clientHeight;
  }

  return height;
}

function changeParam(url, pname, pvalue) {
  pvalue = escape(pvalue);

  var i = url.indexOf('?');
  if (i < 0 || i == (url.length - 1))
    return url + (i < 0 ? '?' : '') + pname + '=' + pvalue;

  var base = url.substring(0, i);
  var params = url.substring(i + 1).split('&');

  var tofind = pname + '=';
  var found = 0;
  for (i = 0; i < params.length; i++) {
    if (params[i].length >= tofind.length &&
        params[i].substring(0, tofind.length) == tofind) {
      params[i] = tofind + pvalue;
      found = 1;
    }
  }
  if (!found) {
    params.push(tofind + pvalue);
  }
  return base + '?' + params.join('&');
}

function fit() {
  var v_w = getViewportWidth();
  var v_h = getViewportHeight();

  if (v_w && v_h && v_w > 50 && v_h > 40) {
    v_w -= 50;
    v_h -= 40;
  } else {
    return;
  }

  var zoom = Math.floor(Math.min(v_w / 36, v_h / 26));
  if (zoom < 10) {
    zoom = 10;
  } else if (zoom > 75) {
    zoom = 75;
  }

  if (cur_zoom != zoom) {
    cur_zoom = zoom;
    if (has_cookies) {
      setCookie("zoom", zoom);
      location.reload();
    } else {
      location.replace(changeParam(location.href, "zoom", "" + zoom));
    }
  } else {
    window.setTimeout("fit()", 250);
  }
}

checkCookies();
fit();
