/*global vugc*/
vugc = {
	Version: 'pre1',
	
	pages: {
		allPages: [],
		currentPage: null,

		registerPage: function (name, element, show)
		{
			vugc.pages.allPages[name] = document.getElementById(element);
			vugc.pages.allPages[name].style.display='none';
			var showElm = Boolean(show);
			if (showElm === false) {
			return;
		}
		if (showElm === true) {
			vugc.pages.setCurrentPage(name);
			}
		},
				
		setCurrentPage: function (page)
		{
			if (typeof vugc.pages.allPages[page] != "object") {
			return;
			}
			
			if (vugc.pages.currentPage !== null) {
				vugc.pages.currentPage.style.display = 'none';
				vugc.pages.currentPage = null;
			}
			
			pageElm = vugc.pages.allPages[page];
			vugc.bindings.checkBinding(page);
			pageElm.style.display = '';
			vugc.pages.currentPage = pageElm;
		}
		
	},
	
	buttons: {
		setButton: 'available',
		URLBase: null,
		
		initButtons: function (URLBase)
		{
			vugc.buttons.URLBase = URLBase;
			$$('div.button').each(function (elm) {
				var btnNameParts = elm.id.split('_');
				var btnId = btnNameParts[1];
				elm.style.backgroundImage ='url('+URLBase+'/images/codelist_navbar_'+btnId+'.jpg)';
				
  				elm.onmouseover = function (){
				vugc.buttons.change(elm.id, 'codelist_navbar_'+btnId+'_hv.jpg');
				};
					
				elm.onmouseout = function (){
					if (elm.hasClassName('selected')){
						return;
					}
					vugc.buttons.change(elm.id, 'codelist_navbar_'+btnId+'.jpg');
				}
					
				elm.onclick = function (){
					document.getElementById('clnavbutton_'+vugc.buttons.setButton).style.backgroundImage = 'url('+vugc.buttons.URLBase+'/images/codelist_navbar_'+vugc.buttons.setButton+'.jpg)';
					document.getElementById('clnavbutton_'+vugc.buttons.setButton).removeClassName('selected');
					vugc.buttons.setButton = btnId;
					vugc.pages.setCurrentPage(btnId);
					document.getElementById('labelbar').style.backgroundImage = 'url('+vugc.buttons.URLBase+'/images/codelist_labelbar_'+btnId+'.gif)';
					document.getElementById('clnavbutton_'+vugc.buttons.setButton).style.backgroundImage = 'url('+vugc.buttons.URLBase+'/images/codelist_navbar_'+vugc.buttons.setButton+'_hv.jpg)';
					document.getElementById('clnavbutton_'+vugc.buttons.setButton).addClassName('selected');
				}
				
				if (btnId == vugc.buttons.setButton) {
					elm.style.backgroundImage = 'url('+vugc.buttons.URLBase+'/images/codelist_navbar_'+vugc.buttons.setButton+'_hv.jpg)';
				}
			});
		}, 
		
		change: function (button, buttonImg)
		{
			document.getElementById(button).style.backgroundImage='url('+vugc.buttons.URLBase+'/images/'+buttonImg+')'; 
            document.getElementById(button).style.cursor='pointer'; 
//            if (labelBarImg === null || labelBarImg == "undefined") {
//            	return;
//            }
//            document.getElementById('labelbar').style.backgroundImage='url('+vugc.buttons.URLBase+'/images/'+labelBarImg+')';
		}, 
		
		setSelected: function (button, buttonImg, labelBarImg, URLBase)
		{
			
		}
	}, 
	
	codes: {
		codeList: [], 
		listCodes: function (codeType){}
	}, 
	
	xhr: {
		results: null, 
		postParams: [], 
		loadingElement: null, 
		useWaitCursor: false,
		
		setLoadingElement: function (loadingElement)
		{
			vugc.xhr.loadingElement = document.getElementById(loadingElement);
		},
		
		useWaitCursor: function (useWaitCursor)
		{
			vugc.xhr.useWaitCursor = useWaitCursor;
		},
		
		doRequest: function (url, vars, callbackfunction , callbackElement)
		{
			if( typeof XMLHttpRequest == "undefined" ) {
  				XMLHttpRequest = function () {
    				try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(e) {}
    				try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) {}
    				try { return new ActiveXObject("Msxml2.XMLHTTP"); }     catch(e) {}
    				try { return new ActiveXObject("Microsoft.XMLHTTP"); }  catch(e) {}
    				throw new Error( "This browser does not support XMLHttpRequest or XMLHTTP." );
    			};
  			}
		
			var request =  new XMLHttpRequest();
		  	request.open("POST", url, true);
		  	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		  	request.onreadystatechange = function () {
		    	if (request.readyState == 4 && request.status == 200) {
		    		if(vugc.xhr.loadingElement !== null) {
		    			vugc.xhr.loadingElement.style.display = 'none';
		    		}
		    		if (vugc.xhr.useWaitCursor === true) {
		    			document.body.style.cursor = '';
		    		}
		      		if (request.responseText) {
		      			if (callbackfunction == 'undefined' || callbackfunction == null) {
		      				
		      			}else{
		      				callbackfunction(request.responseText);
		        		}
		      			if (callbackElement == 'undefined' || callbackElement == null) {
		      			}else{
		        			document.getElementById(callbackElement).innerHTML = request.responseText;
		        		}
		        		vugc.xhr.results = request.responseText;
		      		}
		    	}
		    	
		    	if (request.readyState != 4 && vugc.xhr.loadingElement !== null) {
		    		vugc.xhr.loadingElement.style.display = '';
		    		if (vugc.xhr.useWaitCursor === true) {
		    			document.body.style.cursor = 'wait';
		    		}
		    	}
		  	};
		  	if (vars === null) {
		  		vars = vugc.xhr.postParams.join('&');
		  	}
		  	request.send(vars);
		},
		
		storeResult: function (results)
		{
			vugc.xhr.results = results;
		},
		
		getResult: function ()
		{
			return vugc.xhr.results;
		},
		
		addPostParam: function (name, value)
		{
			vugc.xhr.postParams.push(name+"="+value);
		}
	}, 
	
	bindings: {
		bindings: [],
		
		bindXHRtoPage: function (pageName, url, vars, callbackFunction)
		{
			vugc.bindings.bindings[pageName] = {'url': url,'vars': vars,'callbackFunction': callbackFunction,'callbackElement': pageName};
			if (vugc.pages.currentPage.id == pageName) {
				vugc.bindings.checkBinding(pageName);
			};
			
		},
		
		checkBinding: function (pageName)
		{
			if (vugc.bindings.bindings[pageName] === null) {
				return;
			};
			vugc.bindings.runBinding(pageName);
		},
		
		runBinding: function (pageName)
		{
			if (typeof vugc.bindings.bindings[pageName] !== 'object') {
				return;
			}else{
				var binding = vugc.bindings.bindings[pageName];
				vugc.xhr.doRequest(binding.url, binding.vars, binding.callbackFunction, binding.callbackElement);	
			}
		}
	}
};