// Where this site will live relative to root of
// webserver. Include trailing slash
var ROOT = ''; 

window.onunload = function () { Event.stopObserving; }
// Extend Prototype Event object
Object.extend(Event, {
    relatedElement: function(event) {
        return event.relatedTarget || event.toElement;
  }
});

// Init body onload
function init() {
    menus =  Menu.init();
    if (toolkit.localInit) toolkit.localInit();
    postStyling();
}
function postStyling() {
    // stretch sidebar to reach bottom of page
    if ($('sidebar') && $('main')) {
        $('sidebar').style.height = $('main').getHeight() + 'px';
    }
    activateButtons('content');
}

// Site
var site = function() {
    var _root = ROOT;
    var _images = ROOT + 'images/';
    var _swf = ROOT + 'swf/';
    var _pdf = ROOT + 'assets/pdf/';
    return {
        getRoot: function() { return _root; },
        getImages: function() { return _images; },
        getSwf: function() { return _swf; },
        getPdf: function() { return _pdf; }
    };
}();

// Toolkit 
var toolkit = function() {
    return {
        getQuery: function() {
            var a = /\?(\d{1,2})$/.exec(document.location.search);
            if (a) return a[1];
            return false;
        },
        setCookie: function(sName, sValue, oExpires, sPath, sDomain, bSecure) { 
            var sCookie = sName + "=" + encodeURIComponent(sValue); 
            // convert oExpires (hours) to JS date
            var expiration = new Date((new Date()).getTime() + oExpires*3600000);
            if (oExpires) { 
                sCookie += "; expires=" + oExpires.toGMTString(); 
                //sCookie += "; expires=" + expiration.toGMTString(); 
            } 
            if (sPath) { 
                sCookie += "; path=" + sPath; 
            }
            if (sDomain) { 
                sCookie += "; domain=" + sDomain; 
            } 
            if (bSecure) { 
                sCookie += "; secure"; 
            } 
            document.cookie = sCookie; 
        }, 
        getCookie: function(sName) { 
            var sRE = "(?:; )?" + sName + "=([^;]*);?"; 
            var oRE = new RegExp(sRE); 
            if (oRE.test(document.cookie)) { 
                return decodeURIComponent(RegExp["$1"]); 
            } else { 
                return false;
            } 
        },
        localInit: function() { return false; }
    }
}();
toolkit.cookie = function () {
    return {
        set: function(sName, sValue, oExpires, sPath, sDomain, bSecure) { 
            var sCookie = sName + "=" + encodeURIComponent(sValue); 
            // convert oExpires (hours) to JS date
            var expiration = new Date((new Date()).getTime() + oExpires*3600000);
            if (oExpires) { 
                sCookie += "; expires=" + oExpires.toGMTString(); 
                //sCookie += "; expires=" + expiration.toGMTString(); 
            } 
            if (sPath) { 
                sCookie += "; path=" + sPath; 
            }
            if (sDomain) { 
                sCookie += "; domain=" + sDomain; 
            } 
            if (bSecure) { 
                sCookie += "; secure"; 
            } 
            document.cookie = sCookie; 
        }, 
        get: function(sName) {
            var sRE = "(?:; )?" + sName + "=([^;]*);?"; 
            var oRE = new RegExp(sRE); 
            if (oRE.test(document.cookie)) { 
                return decodeURIComponent(RegExp["$1"]); 
            } else { 
                return null; 
            } 
        } 
    }
}();
toolkit.imgSwap = function() {
    var over = function(e) {
        var el = Event.element(e);
        el.src = this.over;
    };
    var out = function(e) {
        var el = Event.element(e);
        el.src = this.out;
    };
    var addListener = function(el) {
        Event.observe(el, "mouseover", over.bindAsEventListener(el), false);
        Event.observe(el, "mouseout", out.bindAsEventListener(el), false);
    };
    return {
        add: function(el, out, over) {
            // el: element; 
            // over: image for over state; 
            // out: image for out state
            var ref = $(el);
            if (!ref) return false;
            ref.out = site.getImages() + out;
            ref.over = site.getImages() + over;
            if (addListener(ref)) return true;
            return false;
        }
    };
}(); 
toolkit.element = function() {
    return {
        hasClassName: function(el, cname) {
            if (el.className.indexOf(cname) != -1) return true; 
            return false;
        },
        clearInnerHtml: function(el) {
            while(el.firstChild) el.removeChild(el.firstChild);
            if(el.childNodes.length == 0 ) return true;
            return false;
        }
    };
}(); 
toolkit.win = function() {
    return {
        popup: function(url, w, h) {
            if (!w) w = 200;
            if (!h) h = 200;
            var d = 'height='+ h +',width='+ w;
            newwindow=window.open(url,'name',d,resizable=1);
            if (window.focus) {newwindow.focus()}
            return false;
        }
    };
}(); 
toolkit.getWindowSize = function(w) {
    w = w ? w : window;
    var width = w.innerWidth || (w.document.documentElement.clientWidth || w.document.body.clientWidth);
    var height = w.innerHeight || (w.document.documentElement.clientHeight || w.document.body.clientHeight);
    return {width: width, height: height};
}


function observeSelect() {
    var s = $('overSwf');
    Event.observe(s, "change", goToSolution.bindAsEventListener(this), false);
    function goToSolution(ev) {
        var el = Event.element(ev);
        var v = el.value - 1;
        window.location = 'solutions.html?' + v;
    }
}

// ============================================================================== Global functions

function activateButtons(elementid) {
    // add over state to buttons
    var b = $(elementid).getElementsBySelector('.buttonR, .buttonL');
    bs = b.length;
    for (var i = 0; i < b.length; ++i) {
        var el = b[i];
        Event.observe(el, "mouseover", button_over.bindAsEventListener(this), false);
        Event.observe(el, "mouseout", button_out.bindAsEventListener(this), false);
        Event.observe(el, "mousedown", button_down.bindAsEventListener(this), false);
        Event.observe(el, "mouseup", button_over.bindAsEventListener(this), false);
    }
    function button_over(ev) {
        var el = Event.findElement(ev, 'a');
        var btns = el.getElementsBySelector('span');
if(typeof(btns) == 'undefined' || btns.length == 0) {
	btns = el.getElementsBySelector('div');
}
        if (toolkit.element.hasClassName(el, 'buttonR')) {
            btns[0].style.backgroundImage = '';
            btns[1].style.backgroundImage =
                'url(' + site.getImages() + 'button_r_grey_rt_over.gif)';
        } else if (toolkit.element.hasClassName(el, 'buttonL')) {
            btns[0].style.backgroundImage =
                'url(' + site.getImages() + 'button_l_grey_lt_over.gif)';
            btns[1].style.backgroundImage = '';
        }
    }
    function button_out(ev) {
        var el = Event.findElement(ev, 'a');
        var btns = el.getElementsBySelector('span');
if(typeof(btns) == 'undefined' || btns.length == 0) {
	btns = el.getElementsBySelector('div');
}
        btns[0].style.color = '';
        btns[0].style.backgroundImage = '';
        btns[1].style.backgroundImage = '';
    }
    function button_down(ev) {
        var el = Event.findElement(ev, 'a');
        var btns = el.getElementsBySelector('span');
if(typeof(btns) == 'undefined' || btns.length == 0) {
	btns = el.getElementsBySelector('div');
}
      if (toolkit.element.hasClassName(el, 'buttonR')) {
            btns[0].style.backgroundImage =
                'url(' + site.getImages() + 'button_r_grey_lt_click.gif)';
            btns[1].style.backgroundImage =
                'url(' + site.getImages() + 'button_r_grey_rt_click.gif)';
        } else if (toolkit.element.hasClassName(el, 'buttonL')) {
            btns[0].style.backgroundImage =
                'url(' + site.getImages() + 'button_l_grey_lt_click.gif)';
            btns[1].style.backgroundImage =
                'url(' + site.getImages() + 'button_l_grey_rt_click.gif)';
        }
    }
}

// Survey
var survey = function() {
    return {
        load: function() {
            new Ajax.Updater('survey', "php/survey.php", {
                    parameters: { op: 'getsurvey', qid: 4},
                    onComplete: setTimeout("postStyling()", 1000)
            });
        },
        postStyle: function(a) {
            ;
        },
        showResults: function(a) {
            var json = eval(a.responseText);
            var inputs = $$('#surveyForm span[class=question]');
            var labels = $$('#surveyForm label');
            var highest = json.max();
            inputs.each( function(i, index) {
                var b = '';
                var c = 'width:'+(json[index]*200/highest) +'px;';
                //if (json[index] == highest) { 
                //    c += 'background: url(../images/barGraphRed.jpg) repeat-x;';
                //}
                var d = '<div class="result">' +
                labels[index].innerHTML +  ': ' + json[index] + '% </div>' +
                '<div class="bar" style="' + c + '" class="result"></div>';
                labels[index].next().remove();
                labels[index].remove();
                i.replace(d);
            });
        }
    };
}();
processVote = function(el) {
    var answers = $$('#survey INPUT.radio');
    var ans = 0;
    for (x=0; x<answers.length; x++) {
        if (answers[x].checked == true) { ans = answers[x].value;
        break }
    } 
    if (ans == 0) {
        new Balloon({disp: 'tl', point: el, responders: [answers, 'click'],
            html: '<p>You must complete the survey before clicking on the'
            + ' vote button</p>' });
        return false;
    }
    Form.disable($('surveyForm'));
    Element.hide($('vote'));
    Element.replace($('surveyFormTitle'), "<h1>Thanks for your vote!  Check"
        + " out the results:</h1>");
    new Ajax.Request("php/survey.php", {
        parameters : { op: 'vote', ans: ans},
        onSuccess: function(a) { survey.showResults(a); }
    });
};


// Client Login
function clientLoginClick(elem) {
    x = elem;
    var inputs = $('formClientLogin').down().down().descendants().toArray();
    if ( inputs[0].value == '' || 
         inputs[0].value == 'username' || 
         inputs[1].value == '' || 
         inputs[1].value == 'password' ) {
        new Balloon({disp: 'tl', point: x, responders: [inputs, 
                'focus'], html: "<p>You"
                + " must fill in the username and password fields before clicking"
                + " on the GO button</p>" });
        return false;
    }
    returnError = function(html) {
        var button = document.createElement('a');
        button.className = 'buttonR';
        button.href = '#';
        var button_l = document.createElement('div');
        button_l.className = 'button_l';
        button_l.appendChild(document.createTextNode('Go'));
        var button_r = document.createElement('div');
        button_r.className = 'button_r';
        button.appendChild(button_l);
        button.appendChild(button_r);
        toolkit.element.clearInnerHtml(d)
        d.appendChild(button);
        b = new Balloon({disp: 'tl', point: d.down(), html: '<p> You have entered'
                + ' incorrect login credentials.  <br/> Please <a'
                + ' href="contactUs.html">contact us</a> if you have any'
                + ' questions.</p>' });
    }
    var l = "<img src='" + site.getRoot()
          + "images/loader_arrow.gif' alt='loading icon' style='display:"
          + "inline; position:relative; top: 7px; left: 15px;'/>";
    d = x.up();
    e = d.innerHTML;
    d.innerHTML = l;
    var t = setTimeout("this.returnError(e)", 2000);
}
//Flash
var flash = function () {
    var now = new Date();
    var oneHour = 60 * 60 * 1000;  // milliseconds in a minute
    var expireMs = now.getTime() + oneHour;
    var expire = new Date(expireMs);
    var done;
    return {
        done: function() {
            toolkit.cookie.set('PCD', true, expire, '/', false);
            done = true;
            this.showSelect(); 
            return true;
        },
        hideSelect: function() {
            if ($('overSwf')) { 
                $('overSwf').style.display = 'none';
            }
            return true;
        },
        showSelect: function() {
            if ($('overSwf') && done) 
                    $('overSwf').style.display = 'block';
            return true;
        },
        hasPlayed: function() {
            if (toolkit.cookie.get('PCD')) return true;
            return false;
        },
        getMovieRef: function(movieName) {
            // see http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002201.html
            if (navigator.appName.indexOf("Microsoft") != -1) {
                return window[movieName]
            }
            else {
                return document[movieName]
            }
        }  
  }
}();
//Flash Alternative Javascript
function swfAltOver(num) {
    if ($('i0text'))
        $('i0text').style.display = 'none';
    if ($('i' + num + 'text'))
        $('i' + num + 'text').style.display = 'block';
};
function swfAltOut(num) {
    if ($('i0text'))
        $('i0text').style.display = '';
    if ($('i' + num + 'text'))
        $('i' + num + 'text').style.display = '';
}
