function $(id)
{
	return document.getElementById(id);
}

function ACCP()
{

}

ACCP.Debug = Class.create();
Object.extend(ACCP.Debug.prototype, 
{
		/**
		*	IsDebugMode - if this is set to true, then any javascript with debug
		* code (which should have alerts) will be activated. Otherwise, it
		* is supposed to skip over those sections of code.
		**/
		IsDebugMode : function()
		{
			return false;
		}
}, false);

ACCP.Light = Class.create();
Object.extend(ACCP.Light.prototype,
{
	X : 20,
	Y : 20,
	Intensity : 50,
	Color : "#174287"
}, false);

ACCP.General = Class.create();
Object.extend(ACCP.General.prototype,
{
	/**
	*	AddEvent - Add an eventListener to the page. It will not override any previous eventListener.
	*	@param obj - the target of the event
	*	@param evType - the type of event (e.g., click, mouseover) Note: Don't pass the "on" part of "onclick" or "onmouseover" or anything
	* @param fn - the function that takes the focus upon the event being fired.
	**/
	AddEvent : function(obj, evType, fn)
	{
		if (obj.addEventListener)
		{ 
			obj.addEventListener(evType, fn, false); 
			return true; 
		} 
		else if (obj.attachEvent)
		{ 
			var r = obj.attachEvent("on"+evType, fn); 
			return r; 
		}
		else 
		{ 
			return false; 
		} 
	},
	DisableTextSelect : function()
	{
		document.onselectstart = function() {return false;} // ie
		document.onmousedown = function() {return false;} // mozilla
	},
	/**
	*	Exists - Determines if the object or element is not null or undefined.
	*	@param elem - An element or object
	*
	* @return bool - True if the element or object exists.
	**/
	Exists : function(elem)
	{
		if (elem != null && typeof(elem) != "undefined")
		{
			return true;
		}
		return false;
	},
	CenterElement : function(id)
	{	
		if (ACCP.General.Exists($(id)))
		{		
			var winDimensions  = ACCP.General.GetWindowDimensions();
			var elemDimensions = {"x" : $(id).offsetWidth, "y" : $(id).offsetHeight};

			var left = (winDimensions.x - elemDimensions.x) / 2;
			var top  = (winDimensions.y - elemDimensions.y) / 2;
			
			$(id).style.left = left + "px";
			$(id).style.top  = top + "px";
		}
	},
	/**
	*	GetWindowDimensions - Determines the width and height of the current window.
	*
	* @return Array["x" : val, "y", val] - indicates what the integer width and height is for the window respectively.
	**/
	GetWindowDimensions : function()
	{
		var myWidth = 0, myHeight = 0;
		if( typeof( window.innerWidth ) == 'number' ) {
			//Non-IE
			myWidth = window.innerWidth;
			myHeight = window.innerHeight;
		} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
			//IE 6+ in 'standards compliant mode'
			myWidth = document.documentElement.clientWidth;
			myHeight = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
			//IE 4 compatible
			myWidth = document.body.clientWidth;
			myHeight = document.body.clientHeight;
		}
		return {"x" : myWidth, "y" : myHeight};
	},
	/**
	*	GetMouseCoords - Determines where on the page the mouse is currently located.
	*	@param e - The mouse event
	*
	* @return Array["x" : val, "y" : val] - indicates what the integer x, y values are for the mouse coordinates respectively.
	**/
	GetMouseCoords : function(e) 
	{
		var posx = 0;
		var posy = 0;
		if (!e) var e = window.event;
		if (e.pageX || e.pageY) 	{
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY) 	{
			posx = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
		}
		// posx and posy contain the mouse position relative to the document
		
		return {"x" : posx, "y" : posy};
	},
	IsEnterKey : function(e) 
	{
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		
		if (code == 13)
		{
			return true;
		}
		return false;
	},
	/**
	*	IsInteger - Determines whether the text is an integer (no decimals)
	*	@param sText - A string that is to be evaluated.
	*
	* @return bool - true if the string is an integer.
	**/
	IsInteger : function(sText)
	{
		var ValidChars = "0123456789";
		var IsNumber=true;
		var Char;
		
		for (i = 0; i < sText.length && IsNumber == true; i++) 
		{ 
			Char = sText.charAt(i); 
			if (ValidChars.indexOf(Char) == -1) 
			{
				IsNumber = false;
			}
		}
		return IsNumber;
	},
	/**
	*	IsNumeric - Determines whether the text is a number (decimals included)
	*	@param sText - A string that is to be evaluated.
	*
	* @return bool - true if the string is a number.
	**/
	IsNumeric : function(sText)
	{
		var ValidChars = "0123456789.";
		var IsNumber=true;
		var Char;
		
		for (i = 0; i < sText.length && IsNumber == true; i++) 
		{ 
			Char = sText.charAt(i); 
			if (ValidChars.indexOf(Char) == -1) 
			{
				IsNumber = false;
			}
		}
		return IsNumber;
	},
	/**
	*	IsRightClick - Determines if the mouse button that was pressed was the middle button
	*	@param e - The mouse event
	*
	* @return bool - true if the right mouse button was clicked.
	**/
	IsRightClick : function(e)
	{
		var rightclick;
		if (!e) var e = window.event;
		if (e.which) rightclick = (e.which == 3);
		else if (e.button) rightclick = (e.button == 2);
		
		return rightclick;
	},
	/**
	*	GetKeyboardCharacter - Determines what key was pressed on the keyboard, usually in a non-form situation.
	* @param e - The key event
	*
	* @return string - The character that was pressed
	**/
	GetKeyboardCharacter : function(e)
	{
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		var character = String.fromCharCode(code);
		
		return character;
	},
	GetKeyCode : function(e)
	{	
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		
		return code;
	},
	/**
	*	GetEventTarget - Determines what element was the focus of an event being fired.
	*	@param e - The event that was fired
	*
	* @return obj - the object that was the focus of the event being fired.
	**/
	GetEventTarget : function(e)
	{
		var targ;
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
	
		return targ;
	},
	/**
	*	GetEvent - A cross-browser compatibility function. Gets a standard event regardless of browser.
	*	@param e - The event that was fired.
	*
	* return obj - The event that was fired.
	**/
	GetEvent : function(e)
	{
		if (!e) var e = window.event;
		
		return e;
	},
	/**
	* GetPosition - Determines the x, y coordinates of an element on a page.
	* @param obj - The object whose position is wanted.
	*
	* @return Array["x" : val, "y" : val]
	**/
	GetPosition : function(obj) 
	{
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
		return {"x" : curleft, "y" : curtop};
	},
	/**
	* Determines if the mouse is off of a particular element.
	*
	*/
	IsMouseCompletelyOff : function(e, obj)
	{
		var mouseCoords = ACCP.General.GetMouseCoords(e);
		var objCoords = ACCP.General.GetPosition(obj);
		var objCoordsX1 = objCoords.x;
		var objCoordsX2 = objCoords.x + obj.offsetWidth;
		var objCoordsY1 = objCoords.y;
		var objCoordsY2 = objCoords.y + obj.offsetHeight;
		
		if (mouseCoords.x >= objCoordsX1 && mouseCoords.x <= objCoordsX2 && mouseCoords.y >= objCoordsY1 && mouseCoords.y <= objCoordsY2)
		{
			return false;
		}
		
		return true;
	},
	/**
	* IsValidDate - Determines if the input is a valid date format.
	* @param field - a string to determine if it is a valid date string.
	*
	* @return bool - true if it is a valid date.
	**/
	IsValidDate : function(field)
	{
		var checkstr = "0123456789";
		var DateField = field;
		var Datevalue = "";
		var DateTemp = "";
		var seperator = ".";
		var day;
		var month;
		var year;
		var leap = 0;
		var err = 0;
		var i;
		
		err = 0;
		DateValue = DateField.value;
		/* Delete all chars except 0..9 */
		for (i = 0; i < DateValue.length; i++) 
		{
			if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) 
			{
				DateTemp = DateTemp + DateValue.substr(i,1);
			}
		}
		
		DateValue = DateTemp;
		/* Always change date to 8 digits - string*/
		/* if year is entered as 2-digit / always assume 20xx */
		if (DateValue.length == 6) 
		{
			DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); 
		}
		if (DateValue.length != 8) 
		{
			err = 19;
		}
		/* year is wrong if year = 0000 */
		year = DateValue.substr(4,4);
		if (year == 0) 
		{
			err = 20;
		}
		/* Validation of month*/
		month = DateValue.substr(2,2);
		if ((month < 1) || (month > 12)) 
		{
			err = 21;
		}
		/* Validation of day*/
		day = DateValue.substr(0,2);
		if (day < 1) 
		{
			err = 22;
		}
		/* Validation leap-year / february / day */
		if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) 
		{
			leap = 1;
		}
		if ((month == 2) && (leap == 1) && (day > 29)) 
		{
			err = 23;
		}
		if ((month == 2) && (leap != 1) && (day > 28)) 
		{
			err = 24;
		}
		/* Validation of other months */
		if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) 
		{
			err = 25;
		}
		if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) 
		{
			err = 26;
		}
		/* if 00 ist entered, no error, deleting the entry */
		if ((day == 0) && (month == 0) && (year == 00)) 
		{
			err = 0; day = ""; month = ""; year = ""; seperator = "";
		}
		/* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
		if (err == 0) 
		{
			DateField.value = day + seperator + month + seperator + year;
		}
		else 
		{
			alert("Date is incorrect!");
			DateField.select();
			DateField.focus();
		}
	},
	/**
	* IsValidEmail - Determines if the email address is valid. It goes through a lot of different scenarios, and seems to be extremely thorough.
	* @param emailStr - The email address
	*
	* return bool - true if the email is syntactically valid.
	**/
	IsValidEmail : function(emailStr)
	{
		/* The following variable tells the rest of the function whether or not
		to verify that the address ends in a two-letter country or well-known
		TLD.  1 means check it, 0 means don't. */
		var checkTLD=1;

		/* The following is the list of known TLDs that an e-mail address must end with. */
		var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

		/* The following pattern is used to check if the entered e-mail address
		fits the user@domain format.  It also is used to separate the username
		from the domain. */
		var emailPat=/^(.+)@(.+)$/;

		/* The following string represents the pattern for matching all special
		characters.  We don't want to allow special characters in the address. 
		These characters include ( ) < > @ , ; : \ " . [ ] */
		var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

		/* The following string represents the range of characters allowed in a 
		username or domainname.  It really states which chars aren't allowed.*/
		var validChars="\[^\\s" + specialChars + "\]";

		/* The following pattern applies if the "user" is a quoted string (in
		which case, there are no rules about which characters are allowed
		and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
		is a legal e-mail address. */
		var quotedUser="(\"[^\"]*\")";

		/* The following pattern applies for domains that are IP addresses,
		rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
		e-mail address. NOTE: The square brackets are required. */
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

		/* The following string represents an atom (basically a series of non-special characters.) */
		var atom=validChars + '+';

		/* The following string represents one word in the typical username.
		For example, in john.doe@somewhere.com, john and doe are words.
		Basically, a word is either an atom or quoted string. */
		var word="(" + atom + "|" + quotedUser + ")";

		// The following pattern describes the structure of the user
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

		/* The following pattern describes the structure of a normal symbolic
		domain, as opposed to ipDomainPat, shown above. */
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

		/* Finally, let's start trying to figure out if the supplied address is valid. */

		/* Begin with the coarse pattern to simply break up user@domain into
		different pieces that are easy to analyze. */
		var matchArray=emailStr.match(emailPat);

		if (matchArray==null) 
		{
			/* Too many/few @'s or something; basically, this address doesn't
			even fit the general mould of a valid e-mail address. */
			alert("Email address seems incorrect (check @ and .'s)");
			return false;
		}
		
		var user=matchArray[1];
		var domain=matchArray[2];

		// Start by checking that only basic ASCII characters are in the strings (0-127).
		for (i=0; i<user.length; i++) 
		{
			if (user.charCodeAt(i)>127) 
			{
				alert("Ths username contains invalid characters.");
				return false;
			}
		}
		for (i=0; i<domain.length; i++) 
		{
			if (domain.charCodeAt(i)>127) 
			{
				alert("Ths domain name contains invalid characters.");
				return false;
			}
		}

		// See if "user" is valid 
		if (user.match(userPat)==null) 
		{
			// user is not valid
			alert("The username doesn't seem to be valid.");
			return false;
		}

		/* if the e-mail address is at an IP address (as opposed to a symbolic
		host name) make sure the IP address is valid. */
		var IPArray=domain.match(ipDomainPat);
		if (IPArray!=null) 
		{
			// this is an IP address
			for (var i=1;i<=4;i++) 
			{
				if (IPArray[i]>255) 
				{
					alert("Destination IP address is invalid!");
					return false;
				}
			}
			return true;
		}

		// Domain is symbolic name.  Check if it's valid.
		var atomPat=new RegExp("^" + atom + "$");
		var domArr=domain.split(".");
		var len=domArr.length;
		
		for (i=0;i<len;i++) 
		{
			if (domArr[i].search(atomPat)==-1) 
			{
				alert("The domain name does not seem to be valid.");
				return false;
			}
		}

		/* domain name seems valid, but now make sure that it ends in a
		known top-level domain (like com, edu, gov) or a two-letter word,
		representing country (uk, nl), and that there's a hostname preceding 
		the domain or country. */
		if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) 
		{
			alert("The address must end in a well-known domain or two letter " + "country.");
			return false;
		}

		// Make sure there's a host name preceding the domain.
		if (len<2) 
		{
			alert("This address is missing a hostname!");
			return false;
		}

		// If we've gotten this far, everything's valid!
		return true;
	},
	Toggle : function(elem)
	{
		elem.style.display = ((elem.style.display == "none")?"block":"none");			
	},
	WordCount : function(elem)
	{
		var words = elem.value.split(' ');
		return words.length;
	}
}, false);

ACCP.General.Cookies = Class.create();
Object.extend(ACCP.General.Cookies.prototype,
{
	Create : function(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=/";
	},
	Read : function(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;
	},
	Erase : function(name) 
	{
		createCookie(name,"",-1);
	}
}, false);


ACCP.Template = Class.create();
Object.extend(ACCP.Template.prototype, 
{
	ResizeDivs : function()
	{
		var windowDimensions = ACCP.General.GetWindowDimensions();
		var links = $('links');
		var centerContainer = $('centerContainer');
		
		if (ACCP.General.Exists(links) && ACCP.General.Exists(centerContainer))
		{
			if (links.offsetHeight > centerContainer.offsetHeight)
			{
				centerContainer.style.height = links.offsetHeight + 10 + "px";
			}
			else
			{
				centerContainer.style.height = "auto";
			}
		}
	},
	Iconify : function(iconNum)
	{
		switch (iconNum)
		{
			case "1":
				return "icon icon-link";
				break;
			case "2":
				return "icon icon-word";
				break;
			case "3":
				return "icon icon-word";
				break;
			case "4":
				return "icon icon-word";
				break;
			case "5":
				return "icon icon-word";
				break;
			case "6":
				return "icon icon-word";
				break;
			case "7":
				return "icon icon-picture";
				break;
			case "8":
				return "icon icon-picture";
				break;
			case "9":
				return "icon icon-picture";
				break;
			case "10":
				return "icon icon-acrobat";
				break;
			case "11":
				return "icon icon-acrobat";
				break;
		}
	}
}, false);

ACCP.Controls = Class.create();
Object.extend(ACCP.Controls.prototype,
{

}, false);

ACCP.Controls.AltHoverDiv = Class.create();
Object.extend(ACCP.Controls.AltHoverDiv.prototype,
{
	initialize : function(elementId, altDivId, altText)
	{
		this.elementId = elementId;
		this.altText = altText;
		this.id = altDivId;
	},
	render : function()
	{
		var altDiv = document.createElement("div");
		altDiv.className = "alt-hover-div";
		altDiv.innerHTML = this.altText;
		altDiv.id = this.id;
		
		var elementId = this.elementId;
		
		document.body.appendChild(altDiv);		
		
		if (ACCP.General.Exists($(elementId)))
		{					
			ACCP.General.AddEvent($(elementId), 'mouseout', 
			function(e) 
				{
					altDiv.style.display = 'none'; 
				}
			);
			
		
			ACCP.General.AddEvent($(elementId), 'mouseover', 
				function(e) 
				{
					var coords = ACCP.General.GetMouseCoords(e); 
					altDiv.style.top = (coords.y + 15) + 'px'; 
					altDiv.style.left = (coords.x + 20) + 'px'; 
					altDiv.style.display = 'block';
				}
			);			
		}
	}
}, false);

ACCP.Controls.CrossToBox = Class.create();
Object.extend(ACCP.Controls.CrossToBox.prototype,
{
	initialize : function(leftBox, rightBox, leftArrow, rightArrow)
	{
		this.LeftBox = leftBox;
		this.RightBox = rightBox;
		this.LeftArrow = leftArrow;
		this.RightArrow = rightArrow;
		
		this.RightArrow.crossTo = this;
		this.LeftArrow.crossTo = this;
		
		this.RightArrow.onclick = function() { this.crossTo.moveRight() };
		this.LeftArrow.onclick = function() { this.crossTo.moveLeft() };
	},
	moveRight : function()
	{
		if (this.LeftBox.selectedIndex > -1)
		{
			var selectedItem = this.LeftBox.options[this.LeftBox.selectedIndex];
			this.RightBox.options[this.RightBox.options.length] = selectedItem;
			this.LeftBox.options[this.LeftBox.selectedIndex] = null;
		}
	},
	moveLeft : function()
	{
		if (this.RightBox.selectedIndex > -1)
		{
			var selectedItem = this.RightBox.options[this.RightBox.selectedIndex];
			this.LeftBox.options[this.LeftBox.options.length] = selectedItem;
			this.RightBox.options[this.RightBox.selectedIndex] = null;
		}
	}
}, false);

ACCP.Menus = Class.create();
Object.extend(ACCP.Menus.prototype, 
{

}, false);


ACCP.Menus.TreeMenu = Class.create();
Object.extend(ACCP.Menus.TreeMenu.prototype,
{
	rootNode					: false,
	selectedOpen			: "main-menu-selected-opened",
	selectedClosed		: "main-menu-selected-closed",
	unselectedOpen		: "main-menu-opened",
	unselectedClosed	: "main-menu-closed",
	
	initialize : function(treeRootId)
	{
		if (ACCP.General.Exists($(treeRootId)))
		{
			this.rootNode = $(treeRootId);
			this.treeData = new Array();
		}
	},	
	CreateMenu : function()
	{
		if (this.rootNode)
		{			
			if (ACCP.Debug.IsDebugMode()) alert("Child Node Count = " + this.rootNode.childNodes.length);
			
			for (var i = 0; i < this.rootNode.childNodes.length; i++)
			{
				var currentNode = this.rootNode.childNodes[i];
				if (ACCP.Debug.IsDebugMode()) alert("Current Node Name = " + currentNode.nodeName + " and the innerHTML = " + currentNode.innerHTML);
				if (currentNode.nodeName == "LI")
				{
					for (var j = 0; j < currentNode.childNodes.length; j++)
					{
						var currentSubNode = currentNode.childNodes[j];
						if (currentSubNode.nodeName == "UL")
						{
							// If the menu node has a subtree...
							currentNode.childTree					= currentSubNode;							
							currentNode.uniqueId					= "accp_tree_node_"+i
							currentSubNode.style.display	= "none";
							
							this.treeData[currentNode.uniqueId] = {"node" : currentNode, "subnode" : currentSubNode};
							
							if (currentNode.className == "selected")
							{
								currentNode.className				= this.selectedClosed;
								this.OpenSubtree(currentNode);
							}
							else
							{
								currentNode.className				= this.unselectedClosed;
							}
							
							currentNode.myObj							= this							
							currentNode.onclick						= function(){ this.myObj.ToggleSubtree(this); }
						}
					}
				}
			}
		}		
	},
	
	OpenSubtree : function(elem)
	{
		if (ACCP.General.Exists(elem.childTree))
		{		
			if (elem.className == this.selectedOpen || elem.className == this.selectedClosed)
			{
				elem.className = this.selectedOpen;
			}
			else
			{
				elem.className = this.unselectedOpen;
			}			
			elem.childTree.style.display = "block";						
		}
	},
	CloseSubtree : function(elem)
	{	
		if (ACCP.General.Exists(elem.childTree))
		{
			if (elem.className == this.selectedOpen || elem.className == this.selectedClosed)
			{
				elem.className = this.selectedClosed;
			}
			else
			{
				elem.className = this.unselectedClosed;
			}			
			elem.childTree.style.display = "none";
		}
	},
	CollapseAllSubtrees : function()
	{			
		for (var i in this.treeData)
		{			
			this.treeData[i]["subnode"].style.display = "none";
			if (this.treeData[i]["node"].className == this.selectedOpen || this.treeData[i]["node"].className == this.selectedClosed)
			{
				this.treeData[i]["node"].className = this.selectedClosed;
			}			
			else
			{
				this.treeData[i]["node"].className = this.unselectedClosed;
			}			
		}
	},
	ToggleSubtree : function(elem)
	{	
		if (elem.childTree.style.display == "block")
		{
			this.CloseSubtree(elem);
		}
		else
		{
			this.CollapseAllSubtrees();
			this.OpenSubtree(elem);
		}
	}
}, false);

function SubmitFormOnEnter(e, form)
{
	var code;
	if (!e) var e = window.event;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;
	// If the "enter" button has been pressed ... that's the purpose of this function ... to submit a form when the enter button is pressed.
	
	if (code == 13)
	{
		for(var i = 0; i < form.elements.length; i++)
		{
			if (form.elements[i].type == "submit")
			{
				if (ACCP.General.Exists(form.elements[i].click))
				{
					form.elements[i].click();
				}
			}
		}		
	}
}




ACCP.General = new ACCP.General();
ACCP.Template = new ACCP.Template();
