// JavaScript Document


// --------------------------------------------------------------------

// Javascript Magnifier v 0.97

// Written by Dino Termini - termini@email.it - May 9, 2003

// This script is freeware (GPL) but if you use it, please let me know!

//

// Portions of code by zoomIN, zoomOUT

// Author: Nguyen Duong Minh (Obie) - obie4web@yahoo.com

// WWW: http://ObieWebsite.SourceForge.net

// License: GNU (GPL)

//

// Portions of code by Webreference Javascript Cookie Functions

// Jupirmedia Corporation

// http://www.internet.com

// --------------------------------------------------------------------

//

// Please refer to DEMO.htm file for details and usage

//

// --------------------------------------------------------------------

// Configuration parameters

// ------------------------

// Measure unit in pixel (px) or points (pt)

// measureUnit = "pt"

measureUnit = "px"

// Minimum size allowed for SIZE attribute (like in <FONT SIZE="1px"> )

minSize = 1;

// Minimum size allowed for STYLE attribute (like in <FONT STYLE="font-size: 10px"> )

minStyleSize = 5;

// Maximum size allowed for SIZE attribute

maxSize = 6;

// Maximum size allowed for STYLE attribute

maxStyleSize = 31;

// Start size for tags with no SIZE attribute defined

startSize = 1;

// Start size for tags with no font-size STYLE or CLASS attribute defined

startStyleSize = 10;

// Increasing and decreasing step

stepSize = 1;

// Increasing step for STYLE definition (measure previously declared will be used)

stepStyleSize = 2;

// To set your own hotkeys, use key generator tool page included

// Keys to zooming in (with and without CAPS lock). Default: "+"

var keyin = 61;

var keyinCAPS = 43;

// Keys to zooming out (with and without CAPS lock). Default: "-"

var keyout = 45;

var keyoutCAPS = 95;

// Keys for "hard" zooming in (with and without CAPS lock). Default: ">"

var keyinIe = 46;

var keyinIeCAPS = 62;

// Keys for "hard" zooming out (with and without CAPS lock). Default: "<"

var keyoutIe = 44;

var keyoutIeCAPS = 60;

// "Hard" zoom factor

var zoomFactor = 1.1;

// Max zoom allowed

var maxZoom = 4.096;

// Min zoom allowed

var minZoom = 0.625;

// Initial decrease zoom

var startDecZoom = 0.7;

// Initial increase zoom

var startIncZoom = 1.3;

// Cookie expiry (default one year, actually 365 days)

// 365 days in a year

// 24 hours in a day

// 60 minutes in an hour

// 60 seconds in a minute

// 1000 milliseconds in a second

userExpiry = 365 * 24 * 60 * 60 * 1000;

// Enable or disable alert messages

alertEnabled = false;

// Allow input fields resize (text, buttons, and so on)

allowInputResize = false;

// End of configuration parameters. Please do not edit below this line

// --------------------------------------------------------------------------------

// Input values:

// name - name of the cookie

// value - value of the cookie

// [expires] - expiration date of the cookie (defaults to end of current session)

// [path] - path for which the cookie is valid (defaults to path of calling document)

// [domain] - domain for which the cookie is valid (defaults to domain of calling document)

// [secure] - Boolean value indicating if the cookie transmission requires a secure transmission

// * an argument defaults when it is assigned null as a placeholder

// * a null placeholder is not required for trailing omitted arguments

function setCookie(name, value, expires, path, domain, secure) {

  // Check whether cookies enabled

  document.cookie = "Enabled=true";

  var cookieValid = document.cookie;

  // if retrieving the VALUE we just set actually works

  // then we know cookies enabled

  if (cookieValid.indexOf("Enabled=true") != -1) {

    var curCookie = name + "=" + escape(value) +

        ((expires) ? "; expires=" + expires.toGMTString() : "") +

        ((path) ? "; path=" + path : "") +

        ((domain) ? "; domain=" + domain : "") +

        ((secure) ? "; secure" : "");

    document.cookie = curCookie;

    return(true);

  }

  else {

    return(false);

  }

}

// Input value:

// name - name of the desired cookie

// * return string containing value of specified cookie or null if cookie does not exist

function getCookie(name) {

  var dc = document.cookie;

  var prefix = name + "=";

  var begin = dc.indexOf("; " + prefix);

  if (begin == -1) {

    begin = dc.indexOf(prefix);

    if (begin != 0) return null;

  } else

    begin += 2;

  var end = document.cookie.indexOf(";", begin);

  if (end == -1)

    end = dc.length;

  return unescape(dc.substring(begin + prefix.length, end));

}

// Input values:

// name - name of the cookie

// [path] - path of the cookie (must be same as path used to create cookie)

// [domain] - domain of the cookie (must be same as domain used to create cookie)

// * path and domain default if assigned null or omitted if no explicit argument proceeds

function deleteCookie(name, path, domain) {

  if (getCookie(name)) {

    document.cookie = name + "=" + 

    ((path) ? "; path=" + path : "") +

    ((domain) ? "; domain=" + domain : "") +

    "; expires=Thu, 01-Jan-70 00:00:01 GMT";

  }

}

// Input value:

// date - any instance of the Date object

// * hand all instances of the Date object to this function for "repairs"

function fixDate(date) {

  var base = new Date(0);

  var skew = base.getTime();

  if (skew > 0)

    date.setTime(date.getTime() - skew);

}

function searchTags(childTree, level) {

  var retArray = new Array();

  var tmpArray = new Array();

  var j = 0;

  var childName = "";

  for (var i=0; i<childTree.length; i++) {

    childName = childTree[i].nodeName;

    if (childTree[i].hasChildNodes()) {

      if ((childTree[i].childNodes.length == 1) && (childTree[i].childNodes[0].nodeName == "#text"))

        retArray[j++] = childTree[i];

      else {

        tmpArray = searchTags(childTree[i].childNodes, level+1);

        for (var k=0;k<tmpArray.length; k++)

          retArray[j++] = tmpArray[k];

        retArray[j++] = childTree[i];

      }

    }

    else

      retArray[j++] = childTree[i];

  }

  return(retArray);

}

function changeFontSize(stepSize, stepStyleSize, useCookie, divid) {

  if (document.body) {

    //var myObj = searchTags(document.body.childNodes, 0);

    var myObj = searchTags(document.getElementById(divid).childNodes, 0);

    var myCookieSize = parseInt(getCookie("incrSize"));

    var myCookieStyleSize = parseInt(getCookie("incrStyleSize"));

    var myStepSize = stepSize;

    var myStepStyleSize = stepStyleSize;

    var now = new Date();

    // Fix the bug in Navigator 2.0, Macintosh

    fixDate(now);

    if (isNaN(myCookieSize)) myCookieSize = 0;

    if (isNaN(myCookieStyleSize)) myCookieStyleSize = 0;

    // For debug purpose only

    // if (!confirm("COOKIE: SIZE ["+myCookieSize+"] STYLESIZE ["+myCookieStyleSize+"]")) return(0);

    // Check valid increment/decrement sizes or useCookie parameter

    if (useCookie) {

      myStepSize = myCookieSize;

      myStepStyleSize = myCookieStyleSize;

    }

    now.setTime(now.getTime() + userExpiry);

    myObjNumChilds = myObj.length;

    for (i=0; i<myObjNumChilds; i++) {

      myObjName = myObj[i].nodeName;

      // Only some tags will be parsed

      

      if (myObjName != "#text" && myObjName != "HTML" &&

          myObjName != "HEAD" && myObjName != "TITLE" &&

          myObjName != "STYLE" && myObjName != "SCRIPT" &&

          myObjName != "BR" && myObjName != "TBODY" &&

          myObjName != "#comment" && myObjName != "FORM" && myObj[i].title != "notresize") {

                

        // Skip INPUT fields, if required

        if (!allowInputResize && myObjName == "INPUT") continue;

        size = parseInt(myObj[i].getAttribute("size"));

        // Internet Explorer uses a different DOM implementation

        if (myObj[i].currentStyle)

          styleSize = parseInt(myObj[i].currentStyle.fontSize);

        else 

          styleSize = parseInt(window.getComputedStyle(myObj[i], null).fontSize);

        // For debug purpose only. Note: can be very annoying

        // if (!confirm("TAG ["+myObjName+"] SIZE ["+size+"] STYLESIZE ["+styleSize+"]")) return(0);

        if (isNaN(size) || (size < minSize) || (size > maxSize))

          size = startSize;

        if (isNaN(styleSize) || (styleSize < minStyleSize) || (styleSize > maxStyleSize))

          styleSize = startStyleSize;

        if ( ((size > minSize) && (size < maxSize)) || 

             ((size == minSize) && (stepSize > 0)) || 

             ((size == maxSize) && (stepSize < 0)) || useCookie) {

          myObj[i].setAttribute("size", size+myStepSize);

        }

        if ( ((styleSize > minStyleSize) && (styleSize < maxStyleSize)) || 

             ((styleSize == minStyleSize) && (stepStyleSize > 0)) ||

             ((styleSize == maxStyleSize) && (stepStyleSize < 0)) || useCookie) {

          newStyleSize = styleSize+myStepStyleSize;

          myObj[i].style.fontSize = newStyleSize+measureUnit;

        }

      } // End if condition ("only some tags")

    } // End main for cycle

    // Set the cookies

    if (!useCookie) {

      cookieIsSet = setCookie("incrSize", myStepSize+myCookieSize, now);

      cookieIsSet = setCookie("incrStyleSize", myStepStyleSize+myCookieStyleSize, now);

      if (alertEnabled && !cookieIsSet) {

        alert("Cookies are disabled");

      }

    }

  } // End if condition ("document.body exists")

} // End function declaration

function increaseFontSize() {

    minStyleSize = 7.5;

    maxStyleSize = 31;

  if (document.body) {

    changeFontSize(stepSize, stepStyleSize, false, 'print_content');

  }

  else {

    if (alertEnabled) {

      alert("Your browser does not support this function");

    }

  }

}

function decreaseFontSize() {

    minStyleSize = 7.5;

    maxStyleSize = 31;

  if (document.body) {

    myStepSize = -stepSize;

    myStepStyleSize = -stepStyleSize;

    changeFontSize(myStepSize , myStepStyleSize , false, 'print_content');

  }

  else {

    if (alertEnabled) {

      alert("Your browser does not support this function");

    }

  }

}