// Author:   http://theMechanism.com/
// Version:  20 June 2008
// -----------------------------------------------

Event.observe(window, "unload",
function() {
    if (Prototype.Browser.IE) {
        destroyCache();
    }
});

destroyCache = function() {
    $A(document.getElementsByTagName("*")).each(function(element) {
        if (!element._prototypeEventID) return;
        Event.stopObserving(element);
    });
}

confirmLoad = function() {
    $("body").addClassName("is-loaded");
    applySignOffDevice();
}

document.observe(
	"dom:loaded",
	confirmLoad
);

applySignOffDevice = function() {
    var selector = new Element("div",
	{
	    "id": "signoff-device"
	});

    $("viewport").insert(selector);
}

attachAnchorBehaviour = function() {
    $$("a[href$='.pdf'], a[href$='.doc'], a[href$='.xls'], a[href$='.ppt'], a[href$='.zip']").each(function(anchor) {
        var hrefParts = anchor.href.split(".");
        var fileType = hrefParts[hrefParts.length - 1].toUpperCase();

        var titleValue = "Click to download " + fileType;

        anchor.writeAttribute("title", titleValue);
        anchor.onclick = function() {
            openWindow(this.href);
            return false;
        }
    });

    $$(".toggle-handler").each(function(anchor) {
        anchor.writeAttribute("title", "Click to open");

        anchor.onclick = function() {
            var anchorReference = anchor.readAttribute("href");
            var selector = anchorReference.substring(anchorReference.indexOf("#") + 1);

            var container = $(selector + "-container");

            var anchorDefaultClass = "toggle-handler";
            var anchorAlternateClass = "toggle-handler-open";

            var containerDefaultClass = "container type-02";
            var containerAlternateClass = "container type-03";

            var transitionDuration = 1.0;

            if (anchor.className.indexOf("toggle-handler-open") == -1) {
                anchor.writeAttribute("title", "Click to close");
                anchor.className = anchorAlternateClass;

                container.className = containerAlternateClass;

                $(selector).setStyle
				(
					{
					    display: "block"
					}
				);
            }
            else {
                anchor.writeAttribute("title", "Click to open");
                anchor.className = anchorDefaultClass;

                container.className = containerDefaultClass;

                $(selector).setStyle
				(
					{
					    display: "none"
					}
				);
            }
            return false;
        }
    });

    $$(".toggle-answer").each(function(anchor) {
        anchor.writeAttribute("title", "Click to reveal answer");

        anchor.onclick = function() {
            var anchorReference = anchor.readAttribute("href");
            var selector = anchorReference.substring(anchorReference.indexOf("#") + 1);

            var container = $(selector);

            var anchorDefaultClass = "toggle-answer";
            var anchorAlternateClass = "toggle-answer-open";

            if (anchor.className.indexOf("toggle-answer-open") == -1) {
                anchor.writeAttribute("title", "Click to close");
                anchor.className = anchorAlternateClass;

                $(selector).setStyle
				(
					{
					    display: "block"
					}
				);
            }
            else {
                anchor.writeAttribute("title", "Click to reveal answer");
                anchor.className = anchorDefaultClass;

                $(selector).setStyle
				(
					{
					    display: "none"
					}
				);
            }
            return false;
        }
    });

    $$("a[href^='http://']", "a[href^='https://']").each(function(anchor) {
        var titleValue = "(Opens in new window/tab)";

        anchor.writeAttribute("title", titleValue);

        anchor.onclick = function() {
            openWindow(this.href);
            return false;
        }
    });

    $$("a[rel]").each(function(anchor) {
        switch (anchor.rel) {
            case 'nofollow':

                anchor.onclick = function() {
                    openWindow(this.href);
                    return false;
                }
                break;

            case 'popup':

                anchor.onclick = function() {
                    openWindow(this.href);
                    return false;
                }
                break;

            case 'external':

                anchor.writeAttribute("title", "Link launches in new window");
                anchor.insert
			(
				{
				    'after': '(external)'
				}
			);

                anchor.onclick = function() {
                    openWindow(this.href);
                    return false;
                }

                break;

            case 'within-page':

                anchor.onclick = function() {
                    scrollToAnchor(this.href);
                    return false;
                }
                break;

            case 'modal':

                anchor.onclick = function() {
                    var anchorReference = anchor.readAttribute("href");
                    //var selector = anchorReference.substring(0,anchorReference.indexOf(".aspx"));

                    var selector = anchorReference.substring(anchorReference.indexOf("#") + 1);

                    openModalWindow(selector);
                    return false;
                }
                break;
        }
    });

    $$(".modal-window a.close", ".modal-window a.close-type-02", ".modal-window a.cancel").each(function(anchor) {
        anchor.onclick = function() {
            var anchorReference = anchor.readAttribute("href");
            var selector = anchorReference.substring(anchorReference.indexOf("#") + 1);

            var originalSelector = anchorReference.substring(0, anchorReference.indexOf("#"));

            closeModalWindow(selector);
            return false;
        }
    });
}

document.observe(
	"dom:loaded",
	attachAnchorBehaviour
);

// ----------------------------------------------
scrollToAnchor = function(href) {
    var modifiedHref = href.substring(href.indexOf("#") + 1);

    Effect.ScrollTo(modifiedHref,
	{
	    afterFinish: function() {
	        //document.location.hash = modifiedHref;
	    }
	});
}

openWindow = function(href) {
    var attributes = "scrollbars=yes,toolbar=yes,menubar=yes,status=yes,directories=no,location=yes,resizable=yes";
    var windowOrTab = window.open(href, "", attributes);

    windowOrTab.focus();
}

// ----------------------------------------------
initSelector = function(selectorName) {
    $$("input[name='" + selectorName + "']").each(function(radio) {
        radio.onclick = function() {
            if ($(selectorName + "-" + radio.id) != null) {
                $(selectorName + "-" + radio.id).setStyle
				(
					{
					    display: "block"
					}
				);
            }
            resetTogglers(radio, selectorName);
        }
    });
}

resetTogglers = function(selector, selectorName) {
    $$("input[name='" + selectorName + "']").each(function(radio) {
        if (radio.id != selector.id) {
            if ($(selectorName + "-" + radio.id) != null) {
                $(selectorName + "-" + radio.id).setStyle
				(
					{
					    display: "none"
					}
				);
            }
        }
    });
}

//initSelector('identity');   

// ----------------------------------------------
selectorToggle = function(anchor) {
    var anchorReference = anchor.readAttribute("href");
    var selector = anchorReference.substring(anchorReference.indexOf("#") + 1);

    if (anchor.className != "selected") {
        anchor.className = "selected";

        $(selector).setStyle
		(
			{
			    display: "block"
			}
		);
    }
    else {
        anchor.className = "";

        $(selector).setStyle
		(
			{
			    display: "none"
			}
		);
    }
}

// -----------------------------------------------

showErrorMsg = function() {
    Effect.Fade("validationLoading",
	{
	    duration: 0.6,
	    delay: .1,
	    afterFinish: function() {
	        Effect.Appear("ValidationMessage",
			{
			    duration: 0.2,
			    delay: .1,
			    afterFinish: function() {
			        //alert("done");
			    }
			});
	    }
	});
}


resetErrorMsg = function() {
    Effect.Fade("ValidationMessage",
	{
	    duration: 0.6,
	    delay: .1,
	    afterFinish: function() {
	        Effect.Appear("validationLoading",
			{
			    duration: 0.2,
			    delay: .1,
			    afterFinish: function() {
			        //alert("done");
			    }
			});
	    }
	});
}



// -----------------------------------------------

showAddressLookupResults = function() {
    Effect.Fade("address-lookup-loader",
	{
	    duration: 0.6,
	    delay: .1,
	    afterFinish: function() {
	        Effect.Appear("address-lookup-results",
			{
			    duration: 0.2,
			    delay: .1,
			    afterFinish: function() {
			    $("ddAddressLookup").setStyle
					(
						{
						    visibility: "visible"
						}
					);
			    }
			});
	    }
	});
}

resetAddressLookupResults = function() {
    Effect.Fade("address-lookup-results",
	{
	    duration: 0.6,
	    delay: .1,
	    afterFinish: function() {
	        Effect.Appear("address-lookup-loader",
			{
			    duration: 0.2,
			    delay: .1,
			    afterFinish: function() {
			        //alert("done");
			    }
			});
	    }
	});
}



// -----------------------------------------------
openModalWindow = function(selector) {
    adjustProblematicSelectors();

    var viewportListener = new Element("div",
	{
	    "id": "viewport-listener"
	});

    //$("viewport").insert(viewportListener);

    var unit = "px";
    var viewportListenerDimensions = $("viewport").getDimensions();
    var viewportListenerHeight = viewportListenerDimensions.height + unit;

//    $("viewport-listener").setStyle
//	(
//		{
//		    height: viewportListenerHeight
//		}
//	);

    var viewportDimensions = document.viewport.getDimensions();
    var selectorDimensions = $(selector).getDimensions();

    var xCoordinate = (viewportDimensions.width - selectorDimensions.width) / 2 + unit;
    var yCoordinate = (document.viewport.getScrollOffsets().top + ((document.body.clientHeight - selectorDimensions.height)) / 2 / 3).round() + unit;

    $(selector).setStyle
	(
		{
		    top: yCoordinate,
		    left: xCoordinate
		}
	);

    Effect.Appear(selector,
	{
	    duration: 0.1
	});

    //document.location.hash = selector;

//    $("viewport-listener").observe("click", function() {
//        Effect.Fade(selector,
//		{
//		    duration: 0.1,
//		    delay: .1,
//		    afterFinish: function() {
//		        restoreProblematicSelectors();
//		        resetAddressLookupResults();
//		        resetErrorMsg();
//		    }
//		});

//        //document.location.hash = "view";

//        $("viewport-listener").stopObserving("click");
//        $("viewport-listener").remove();
//    });
}

// -----------------------------------------------
closeModalWindow = function(selector) {
    Effect.Fade(selector,
	{
	    duration: 0.1,
	    delay: .1,
	    afterFinish: function() {
	        restoreProblematicSelectors();
	        //resetAddressLookupResults();
	        //resetErrorMsg();
	    }
	});

    //document.location.hash = "view";

    //$("viewport-listener").stopObserving("click");
    //$("viewport-listener").remove();
    return false;
}

// Modal Helper Functions
// ----------------------------------------------
adjustProblematicSelectors = function() {
    var selectorTypeA = $$("textarea");
    for (var i = 0; i < selectorTypeA.length; i++) {
        if (selectorTypeA[i].className != "scrollOK") {
            selectorTypeA[i].setStyle
			(
				{
				    overflow: "hidden"
				}
			);
        }
    }
    if (Prototype.Browser.IE) {
        var selectorTypeB = $$("select");
        for (var s = 0; s < selectorTypeB.length; s++) {
            selectorTypeB[s].setStyle
			(
				{
				    visibility: "hidden"
				}
			);
        }
        var selectorTypeC = ($$("object") || $$("embed"));
        for (var i = 0; i < selectorTypeC.length; i++) {
            if (selectorTypeC[i].className != "viewOK") {
                selectorTypeC[i].setStyle
				(
					{
					    visibility: "hidden"
					}
				);
            }
        }
    }
}

restoreProblematicSelectors = function() {
    var selectorTypeA = $$("textarea");
    for (var i = 0; i < selectorTypeA.length; i++) {
        if (selectorTypeA[i].className != "scrollOK") {
            selectorTypeA[i].setStyle
			(
				{
				    overflow: "auto"
				}
			);
        }
    }
    if (Prototype.Browser.IE) {
        var selectorTypeB = $$("select");
        for (var s = 0; s < selectorTypeB.length; s++) {
            selectorTypeB[s].setStyle
			(
				{
				    visibility: "visible"
				}
			);
        }
        var selectorTypeC = ($$("object") || $$("embed"));
        for (var i = 0; i < selectorTypeC.length; i++) {
            if (selectorTypeC[i].className != "viewOK") {
                selectorTypeC[i].setStyle
				(
					{
					    visibility: "visible"
					}
				);
            }
        }
    }
}

// -----------------------------------------------