Event.observe(window,"load",function()
{
	$("viewport").addClassName("is-loaded");
});

Event.observe(window,"unload",function()
{
	destroyCache();
});

destroyCache = function()
{
	$A(document.getElementsByTagName('*')).each(function(element)
	{
    	if (!element._prototypeEventID) return;
		Event.stopObserving(element);
  });
}

// Add classes to selectors
// ----------------------------------------------
addClass = function(element,value)
{
	if (!element.className)
	{
    	element.className = value;
	}
	else
	{
    	newClassName = element.className;
	    newClassName+= " ";
	    newClassName+= value;
	    element.className = newClassName;
  	}
}

applyClass = function(selectorID,selectorClass)
{
	$(selectorID).className = selectorClass;
}

// Assist the behaviour and presentation of form elements
// ----------------------------------------------
scanForFormElements = function()
{
	if (!document.getElementsByTagName) return false;
	var anchors = document.getElementsByTagName("input");
	for (var i=0; i<anchors.length; i++)
	{
		var anchor = anchors[i];
		if ((anchor.getAttribute("type") == "text") || (anchor.getAttribute("type") == "password"))
		{
			if (anchor.className!="noCSS")
			{
				addClass(anchor,'textfield');	
			}
		}
		if ((anchor.getAttribute("type") == "button") || (anchor.getAttribute("type") == "submit"))
		{
			if (anchor.className!="noCSS")
			{
				addClass(anchor,'button');
			}
		}
	}
}
document.observe("dom:loaded",scanForFormElements);
// ----------------------------------------------

checkForHash = function()
{
	var selector = document.location.hash.replace("#","");
	
	if
	(
		(
			selector != null
		)
		||
		(
			selector != ""
		)
		||
		(
			selector == "view"
		)
	)	

	{		
		if ($(selector).className == "modal-window-content")
		{
			anchorBehaviour.openModalWindow(selector);
		}
	}
}

//Event.observe(window,"load",checkForHash);

// ----------------------------------------------
anchorBehaviour = 
{	
	attachAnchorBehaviour: function()
	{
		$$("a[rel]").each(function(obj)
		{ 
			switch(obj.rel)
			{
				case 'external':
				case 'nofollow':
				case 'non-web-document':
				
				obj.onclick = function()
				{
					anchorBehaviour.openWindow(this.href);
					return false;
				}
				break;
				
				case 'within-page':
				
				obj.onclick = function()
				{
					anchorBehaviour.scrollTo(this.href);
					return false;
				}
				break;
				
				case 'modal':
				
				obj.onclick = function()
				{
					var anchorReference = obj.readAttribute("href");
					//var selector = anchorReference.substring(0,anchorReference.indexOf(".aspx"));
					
					var selector = anchorReference.substring(anchorReference.indexOf("#")+1);
					
					anchorBehaviour.openModalWindow(selector);
					return false;
				}
				break;
			}
			
			$$(".modal-window a.close").each(function(obj)
			{ 
				obj.onclick = function()
				{
					var anchorReference = obj.readAttribute("href");
					var selector = anchorReference.substring(anchorReference.indexOf("#")+1);
					
					var originalSelector = anchorReference.substring(0,anchorReference.indexOf("#"));
					
					anchorBehaviour.closeModalWindow(selector);						
					return false;
				}
			});
		});
	},
	
	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 = Math.round(document.viewport.getScrollOffsets().top + ((window.innerHeight - selectorDimensions.height))/2/3) + unit;
		
		$(selector).setStyle
		(
			{
				top: yCoordinate,
				left: xCoordinate
			}
		);
		
		Effect.Appear(selector,
		{
			duration: 0.1
		});            
		
		//****** removed for PCM ***********
		//document.location.hash = selector;
		
		$("viewport-listener").observe("click",function()
		{
			Effect.Fade(selector,
			{
				duration: 0.1,
				delay: .1,
				afterFinish:function()
				{
					restoreProblematicSelectors();
				}
			});
			
			//****** removed for PCM ***********
			//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();
			}
		});
		
		//****** removed for PCM ***********
		//document.location.hash = "view";
		
		$("viewport-listener").stopObserving("click");
		$("viewport-listener").remove();
		return false;
	},
		
	scrollTo: 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();
	}
}

document.observe("dom:loaded",anchorBehaviour.attachAnchorBehaviour);

// 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"
					}
				);
			}
		}
	}
}

// ----------------------------------------------
selectorToggle = function(selector,offset,anchor)
{	
	var selectorDimensions = $(selector).getDimensions();
	var unit = "px";
	var duration = "0.7";
	
	modifySelector = function()
	{
		$(selector).setStyle
		(
			{
				height: selectorHeight + unit
			}
		);
	}
	
	if (anchor.className == "toggle")
	{
		var selectorHeight = Math.abs(selectorDimensions.height) + Math.abs(offset);
		
		modifySelector();
		
		Effect.BlindDown(selector,
		{
			duration: duration,
			afterFinish:function()
			{	
				anchor.className = "toggle open";
			}
		});
	}
	else
	{
		var selectorHeight = Math.abs(selectorDimensions.height) - Math.abs(offset);
		
		Effect.BlindUp(selector,
		{
			duration: duration,
			afterFinish:function()
			{	
				anchor.className = "toggle";
				modifySelector();
			}
		});
	}
}