﻿//
//CONSTANTS 
//
var DEFAULT_FONT_SIZE = "75%";
var FONT_SIZE_COOKIE_NAME = "fontSize";
var FONT_SIZES_STRING = "70%,75%,80%,90%,95%";
var FONT_SIZES = {}; //set with initialiseFontSize()


function initialisePageTools()
{
    if(document.getElementById)
    {
        var pageTools = document.getElementById("pageTools");
        var pdfLink = document.getElementById("pdfLink");

        var oLIprint = document.createElement("li");
        var oLIFontSize = document.createElement("li");
        
        oLIprint.innerHTML = '<a href="#" id="tools-printLink" title="Print page" onclick="return printPage();">Print page</a>';
        oLIFontSize.innerHTML = 
            '<a href="#" id="tools-decreaseFont" onclick="return decreaseFontSize()" title="Decrease"><span>Increase</span>&nbsp;</a>'
            +
            '<a href="#" id="tools-increaseFont" onclick="return increaseFontSize()" title="Increase"><span>Decrease</span>&nbsp;</a> Font size';
        
        pageTools.insertBefore(oLIprint, pdfLink);
        pageTools.appendChild(oLIFontSize);
    }
}

function printPage()
{
    window.print();
}

/* ---------------------------------------------
Creates a cookie with the given name, valid for 
the specified number of days
--------------------------------------------- */
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

/* ---------------------------------------------
Reads the value of the cookie with the given name
--------------------------------------------- */
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

/* ---------------------------------------------
Removes the cookie with the given name
--------------------------------------------- */
function eraseCookie(name) {
	createCookie(name,"",-1);
}

/* ---------------------------------------------
Returns the current font size
--------------------------------------------- */
function getFontSize()
{
    var fontSizePref = readCookie(FONT_SIZE_COOKIE_NAME);
    
    if(fontSizePref)
    {
        return fontSizePref;
    }
    return DEFAULT_FONT_SIZE;
}

/* ---------------------------------------------
Sets the current font size, as defined with FONT_SIZE_TO_CSS
--------------------------------------------- */
function setFontSize(fontSize)
{
    var index = FONT_SIZES.indices[fontSize];
    if(index>=0 && index<FONT_SIZES.sizes.length)
    {
        document.body.style.fontSize = fontSize;
        if(fontSize != DEFAULT_FONT_SIZE)
        {
            createCookie(FONT_SIZE_COOKIE_NAME, fontSize, 1);
            return;
        }
    }
    eraseCookie(FONT_SIZE_COOKIE_NAME);
}

/* ---------------------------------------------
Increases the current font size
--------------------------------------------- */
function increaseFontSize()
{
    var fontSize = getFontSize();
    var newIndex = FONT_SIZES.indices[fontSize] + 1;
    if(newIndex > -1 && newIndex<FONT_SIZES.sizes.length)
    {
        setFontSize(FONT_SIZES.sizes[newIndex]);
    }
}

/* ---------------------------------------------
Decreases the current font size
--------------------------------------------- */
function decreaseFontSize()
{
    var fontSize = getFontSize();
    var newIndex = FONT_SIZES.indices[fontSize] - 1;
    if(newIndex > -1 && newIndex<FONT_SIZES.sizes.length)
    {
        setFontSize(FONT_SIZES.sizes[newIndex]);
    }
}

/* ---------------------------------------------
Initialises, i.e. restores the current font size
--------------------------------------------- */
function initialiseFontSize()
{
    FONT_SIZES.sizes = FONT_SIZES_STRING.split(",").sort();
    FONT_SIZES.indices = {};
    
    for(var i=0; i<FONT_SIZES.sizes.length; i++)
    {
        FONT_SIZES.indices[FONT_SIZES.sizes[i]] = i;
    }
    
    var fontSizePref = getFontSize();
    if(fontSizePref!=DEFAULT_FONT_SIZE)
    {
        document.write('<style> \n\n body { font-size: ' + fontSizePref + ' }  \n\n </style>');
    }
}


/* ---------------------------------------------
Highlights a downloads' list row
--------------------------------------------- */
function highlightRow(eventData)
{
    var targetElement = eventData.target ? eventData.target : eventData.srcElement;
    var tableRow = targetElement;
    while(tableRow.tagName.toLowerCase()!='tr' && tableRow.tagName.toLowerCase()!='body')  tableRow = tableRow.parentNode;

    if(tableRow && tableRow.cells){
        tableRow.style.backgroundColor='#EEEEEE';
        tableRow.cells[0].style.backgroundColor='#EEEEEE';
        tableRow.cells[1].style.backgroundColor='#EEEEEE';
    }
}

/* ---------------------------------------------
Un-highlights a downloads' list row
--------------------------------------------- */
function unhighlightRow(eventData)
{
    var targetElement = eventData.target ? eventData.target : eventData.srcElement;
    var tableRow = targetElement;
    while(tableRow.tagName.toLowerCase()!='tr' && tableRow.tagName.toLowerCase()!='body')  tableRow = tableRow.parentNode;

    if(tableRow && tableRow.cells){
        tableRow.style.backgroundColor='';
        tableRow.cells[0].style.backgroundColor='';
        tableRow.cells[1].style.backgroundColor='';
    }
}

/* ---------------------------------------------
Handles the click on any item within a downloads' list row
--------------------------------------------- */
function onDownloadsRowClicked(eventData)
{
    var targetElement = eventData.target ? eventData.target : eventData.srcElement;
    
    if(targetElement.tagName.toLowerCase() != 'a')
    {
        var tableRow = targetElement;
        while(tableRow.tagName.toLowerCase() != 'a' 
            && tableRow.tagName.toLowerCase()!='tr' 
            && tableRow.tagName.toLowerCase()!='body')  tableRow = tableRow.parentNode;
    
        if(tableRow && tableRow.cells){
            var aAnchors = tableRow.getElementsByTagName('a');
            
            if(aAnchors && (aAnchors.length>0))
            {
                window.open(aAnchors[0].href, "_blank");
            }
        }
    }
}

/* ---------------------------------------------
Handles the onFocus event for an input field
--------------------------------------------- */
function onInputFieldFocus(eventData)
{
    var oInputElement = eventData.target ? eventData.target : eventData.srcElement; 
    
    if((oInputElement.value  == " ") || (oInputElement.value == getPlaceholderText(oInputElement)))
    {
        oInputElement.value = "";
        oInputElement.style.color = '';
    }
}

/* ---------------------------------------------
Handles the onBlur event for an input field
--------------------------------------------- */
function onInputFieldBlur(eventData)
{
    var oInputElement = eventData.target ? eventData.target : eventData.srcElement; 
    if((oInputElement.value == "") || (oInputElement.value == " "))
    {
        oInputElement.value = getPlaceholderText(oInputElement);
        oInputElement.style.color = '#999';
    }
}

/* ---------------------------------------------
Initialises all placeholder text on the page
--------------------------------------------- */
function initialiseInputPlaceholderText(eventData)
{
    if(document.getElementById)
    {
       var aInputElements = document.getElementsByTagName("input");
       var oInputElement, sPlaceholderText;
       
       for(var i=0; i<aInputElements.length; i++)
       {
           oInputElement = aInputElements[i];
           
           if(oInputElement.type == "text" && (oInputElement.value == '' || oInputElement.value == ' '))
           {
                attachEventHandler(oInputElement, "focus", onInputFieldFocus);
                attachEventHandler(oInputElement, "blur", onInputFieldBlur);
                oInputElement.value = getPlaceholderText(oInputElement);
                oInputElement.style.color = '#999';
           }
       }
       
       var aForms = document.getElementsByTagName("form");
       for(var i=0; i<aForms.length; i++)
       {
           attachEventHandler(aForms[i], "submit", clearPlaceholderText);
       }
    }
}

/* ---------------------------------------------
Calculates the placeholder text for the given element
--------------------------------------------- */
function getPlaceholderText(oElement)
{
    if(oElement.title)
    {
        var iMaxLength = oElement.getAttribute('maxlength');
        
        if(!iMaxLength || (oElement.title.length<=iMaxLength))
        {
            return oElement.title;
        }
    }//fi title
    return "";
}

/* ---------------------------------------------
Removes the placeholder text from all form elements
--------------------------------------------- */
function clearPlaceholderText()
{
    if(document.getElementById)
    {
       var aInputElements = document.getElementsByTagName("input");
       var oInputElement, sPlaceholderText;
       
       for(var i=0; i<aInputElements.length; i++)
       {
           oInputElement = aInputElements[i];
           
           if(oInputElement.type == "text" && 
                (oInputElement.value == getPlaceholderText(oInputElement) || oInputElement.value == ' '))
           {
                oInputElement.value = '';
           }
       }
    }
}

/* ---------------------------------------------
Attaches the given event handler eventHandler to the given object
for the event given with its name (click, mouseover, etc)
--------------------------------------------- */
function attachEventHandler(object, eventName, eventHandler)
{
    if(window.addEventListener){ // Mozilla and co.
        object.addEventListener(eventName, eventHandler, false);
    } else if(object.attachEvent){ //IE
        object.attachEvent('on' + eventName, eventHandler);
    }
}

/* ---------------------------------------------
Initialises all event handlers for downloads' lists
--------------------------------------------- */
function initialiseDownloadsLists()
{
    if(document.getElementById)
    {
        var aDivElements = document.getElementsByTagName("div");
        
        for(var i=0;i<aDivElements.length; i++)
        {
            oDiv = aDivElements[i];
            if(oDiv.className == "downloadList")
            {
                var aRows = oDiv.getElementsByTagName("tr");
            
                for(var j=0;j<aRows.length;j++)
                {
                    attachEventHandler(aRows[j], "mouseover", highlightRow);
                    attachEventHandler(aRows[j], "mouseout", unhighlightRow);
                    attachEventHandler(aRows[j], "click", onDownloadsRowClicked);
                }
            }
        }
    }
}

attachEventHandler(window, "load", initialiseInputPlaceholderText);      
attachEventHandler(window, "load", initialiseDownloadsLists);
initialiseFontSize();
attachEventHandler(window, "load", initialisePageTools);