
var tim = new Date(); 

// labelExpand;
///////////////////////////////////////////////////////////////////////////////////
//
//
// Form objketi 
//
//
// Author: Markus Paakko
///////////////////////////////////////////////////////////////////////////////////
function WebForm(FormName){
   
   if (typeof FormName != 'string')
   {
        try
        {
            var fObject;
            fObject  = FormName.id;  
            if (fObject.length == 0){
                FormName.id = "innerForm";
            }
            FormName = FormName.id;
        }catch(e){                  
        } 
   }
	// public interface 
	this.formData; 
	this.initialize = initialize;
	this.goPage = goPage;
	this.action; // url minne mennaan 
	this.target; // kohde objekti stringina 
	this.pageStyle = 'tabs'; // "tabs/letter" 
	this.Form;
	this.edit = false;
    this.errorMessage; 
    this.className; 
    this.useMoveTopWithAction = false;  
     
	// style propertys on form 
	this.everyOtherRowCss = 'EveryOtherCss';
	this.contentMarginLeft = 15;
	this.contentMarginTop = 20; 
	this.contentMarginRight = 15;
	this.contentMarginBottom = 20; 
	
	this.lineSpace = 10;	
	this.height = '100%';
	this.width = '100%';
	this.virtualDirectory = '/';
	
	// label propertys 
	this.labelCss = 'LabelCss';
	this.labelWidth = 150;
	this.labelValign;
	this.labelHeight; 
	this.breakLabel = false; 
	this.labelAlign = 'left'; 
	
	// element propertys 
	this.elementCss = 'TextCss';
	this.elementWidth = 200;
	this.elementHeight;	  
	
	this.readOnly;
	this.requiredText = '*';
	this.hideButtons = false;
	this.pages;
	// only simpleSearchLayer use those properties
	this.submitButtonTop; 
	this.submitButtonLeft; 
	
	//	interface jolla saadaan haettua keyn avulla 
	this.getElementByKey = getElementByKey;
	this.getTabByKey = getTabByKey;
	
	// glogal event on form elements sender , type 
	this.onEvent = new Function('');
	this.onPageChange = new Function('');
	this.language = 'english'; 
	this.underLineError = false;
	this.errorImages = false; 
	this.errorColor = 'red';
	this.dateType = "ddmmyy";
	this.dateDelimeter = ".";
	this.wizard= false;
	this.onResize = new Function('');
	this.onSubmit = new Function('');
	this.onLoad = new Function('');
	this.onPageLoad = new Function('');
	this.closeMessageBox = closeMessageBox;
	this.getErrorMessage;
	
	// parivate public variables 
	this.oTooltip;
	this.errorToolTip; 
	this.menus = new Menu(FormName,'popup',oTooltip);
	this.check;
	this.PageBuilder;
	this.releaseNavigation = releaseNavigation;
	this.lockNavigation = lockNavigation;
	
	this.submitButtonLabel;
	this.nextButtonLabel;
	this.previousButtonLabel;
	this.uploadFileLabel;
	this.deleteFileLabel;
	this.downloadFileLabel;
	this.downloadfolder; 
	this.querystring;
	this.printButtonLabel;
	this.alert = alerter;
	this.serverErrorTitle = '';
	this.saveConfirmMessage; 
	
    this.requiredType = 'normal';
    this.changed = false; // onko lomake muuttunut 
    this.waitResponse = waitResponse;
    
	// private variants	
	var base = this;
	var elements = new Array();  
	
	
	var pages;
	var oTooltip = new toolTip(FormName,true);
	var oTitleTooltip = new toolTip(FormName,true);
	this.created = false;
	this.actionFrame;	
	this.goNextPage = goNextPage;			
	this.goPreviousPage = goPreviousPage;
	this.closeForm = closeForm;
	this.closePopup = closePopup;	
	this.fixLoad = fixLoad;
	this.print = responsePrint;
	
	// index interface 
	this.elements = new Array(); 
	this.tabs = new Array(); 
	this.tabs.add = function (key,header){
		var tabData = new objTabData(base);
		tabData.header = header;
		tabData.key = key;
		this[this.length] = tabData;
		if (base.created)
        {
            // lisataan oikeasti tabl esille 
            base.PageBuilder.addTab(tabData);
            
        }
		
		return tabData;	
	}
    
    // Poistaa tabin kokonaan 
    this.tabs.remove  = function(index)
    {
        if (base.created)
        {
            index = this.length -1; 
            this.splice(index,1);
            base.PageBuilder.removeTab(index);
        }
        else 
        {
            this.splice(this.length-1,1);
        }
    }
    
	// initialize only once 
	oTooltip.delay = 1;	
	oTitleTooltip.hideOnClick = true;
	this.oTooltip = oTitleTooltip;
	this.errorToolTip = oTooltip;
	this.currentPage = 0; 
	this.lastPage = 0;
	
	this.cleanServerError = cleanServerError;
	this.serverCheck = serverCheck;
	
	// korjaa ie latauksen 
	var fixElement;
	function fixLoad(){       	
		if (!fixElement){
			fixElement = document.createElement('iframe');
			fixElement.src = base.virtualDirectory + 'jdm/webcontrols/dummy.htm';		
			fixElement.style.display='none';	
			fixElement.style.width = 0;
			fixElement.style.height = 0;
			base.Form.appendChild(fixElement);		
		}
		else {
		    fixElement.src = base.virtualDirectory + 'jdm/webcontrols/dummy.htm';		
		}
	}
	var waitImage ;
	function waitResponse(start)
	{
	    if (start)
	    {
	        if (!waitImage)
	        {
	            waitImage = document.createElement('img');
			    base.Form.appendChild(waitImage);
			    waitImage.style.position = 'relative';
			    waitImage.style.top = pages.top + (pages.contentCell.offsetHeight / 2) - 16;
			    waitImage.style.left = pages.left + (pages.contentCell.offsetWidth/ 2) -16;
			    waitImage.src = base.virtualDirectory + 'jdm/webcontrols/images/SpinningWheel.gif';
	        }
			waitImage.style.display = '';
	    }
	    else 
	    {
	        if (waitImage)
	        {
	            waitImage.style.display = 'none';
	        }
	    }
	}
	
	
	function alerter(message){        
        function open()
        {
            var messageLabel = document.createElement('label');
			messageLabel.className = base.labelCss;
			base.Form.appendChild(messageLabel);
			messageLabel.style.position = 'absolute';
			messageLabel.style.top = pages.top + pages.contentCell.offsetTop + 3;
			messageLabel.style.width = pages.contentCell.offsetWidth;
			messageLabel.style.textAlign = 'right';
			messageLabel.style.verticalAlign = 'middle';
			messageLabel.style.paddingRight = 5;
			messageLabel.innerHTML = '<img  src="' + base.virtualDirectory + 'jdm/webcontrols/images/information.gif" width=18 height=18 border=0>&nbsp;<span style="position:relative;top:-4" >' + message + '</span>';
			messageLabel.style.display = '';
			if (document.attachEvent){document.attachEvent("onclick",closeAlerter);} 
			else {document.addEventListener("click",closeAlerter,false);}
			function closeAlerter(){
			    base.Form.removeChild(messageLabel);
			    if (document.attachEvent){document.detachEvent("onclick",closeAlerter);} 
			    else {document.removeEventListener("click",closeAlerter);}
			    
			}	
	    }
	    window.setTimeout(open,0);
	}
	
	this.locks = 0;
	this.lockedElements = new Array(); 
	var messageLabel;
	function lockNavigation(message){
		
		if (base.locks == 0){ 
			if (!messageLabel){
				messageLabel = document.createElement('label');
				messageLabel.className = base.labelCss;
				base.Form.appendChild(messageLabel);
				messageLabel.style.position = 'absolute';
				messageLabel.style.top = pages.top + pages.contentCell.offsetTop + 3;
				messageLabel.style.width = pages.contentCell.offsetWidth;
				messageLabel.style.textAlign = 'center';
				messageLabel.style.verticalAlign = 'middle';
			} 
			if (message){
				messageLabel.innerHTML = '<img  src="' + base.virtualDirectory + 'jdm/webcontrols/images/help.gif" width=18 height=18 border=0>&nbsp;<span style="position:relative;top:-4" >' + message + '</span>';
				messageLabel.style.display = '';
			}	
			for (var i=0;i<base.lockedElements.length;i++){
				base.lockedElements[i].origdisabled = base.lockedElements[i].disabled;
				base.lockedElements[i].disabled = true; 
			}
		}
		base.locks ++;
	}
	function releaseNavigation(){
		if (base.locks > 0) 
			base.locks --;
		else 
			return;
			
		if (base.locks == 0){ 
			if (messageLabel)messageLabel.style.display = 'none'; 
			for (var i=0;i<base.lockedElements.length;i++){
				base.lockedElements[i].disabled = base.lockedElements[i].origdisabled; 
			}
		}
	}
	
	
	// alustaa objektin kayttoon 
	function initialize(){
		if (base.tabs.length == 0)base.tabs.add('new','New'); 
		base.Form = document.getElementById(FormName);
		// tulostetaan error viesti selaimeen 
		if (base.errorMessage)
		{
		    base.Form.className = 'TabErrorLabel';
		    base.Form.style.width = base.width; 
		    base.Form.style.height = base.height; 
		    base.Form.innerHTML = '<table class=' + base.labelCss + ' width=' + base.width + ' height=' + base.height + ' ><tr><td align=middle valign=center >' + base.errorMessage + '</td></tr></table>';
		    return; 
		}
		
		if (base.saveConfirmMessage)
		{
		    if (base.saveConfirmMessage.length > 0)
		    {
		        // Objekti tarkastaa tallentamisen tarpeen 
	            function confirmUnload()
	            { 
	                if (base.changed)
	                {
	                   return   '----------------------------------------------------------------------\n\n' + 
                                base.saveConfirmMessage + 
                                '\n\n----------------------------------------------------------------------'; 
	                }
                }
		        window.onbeforeunload = confirmUnload;
		    }
		}
		
		if (!base.created){ 
			try{
			base.menus.setVirtualDirectory(base.virtualDirectory);
			}catch(e){}
            
			// asetetaan kielen mukaiset asetukset 			
			initLanguage(base.language);	
			if (!base.submitButtonLabel){base.submitButtonLabel = lanSubmitButtonLabel};
			if (!base.nextButtonLabel){base.nextButtonLabel = lanNextButtonLabel};
			if (!base.previousButtonLabel){base.previousButtonLabel = lanPreviousButtonLabel};
			if (!base.uploadFileLabel){base.uploadFileLabel = lanUploadFileLabel};
			if (!base.deleteFileLabel){base.deleteFileLabel = lanDeleteFileLabel};
			if (!base.downloadFileLabel)base.downloadFileLabel =  lanDownloadFileLabel;
			
			if (base.className) base.Form.className = base.className;
			base.Form.style.borderWidth=0;
			base.Form.style.borderStyle='solid';
			base.Form.style.width = base.width;
			base.Form.style.height = '100%';//base.height;
			base.Form.style.verticalAlign = 'top';
			base.Form.style.margin = 0; 	
			base.Form.action = this.action; 
			base.Form.target = this.target; 
			base.Form.method = "post";
			base.Form.style.verticalAlign = 'top';
		}else{
			var Els = base.Form.getElementsByTagName('*');
			for( var i = 0;i<Els.length;i++){
				base.Form.removeChild(Els[i]);
			}
		}
        
        if (base.pageStyle == 'simpleLayer'){
            pages = new simpleLayer(base);
		}else if (base.pageStyle == 'tabs'){
			pages = new tabs(base);
		}else if (base.pageStyle == 'wizard_tabs'){
			pages = new wizard_tabs(base);	
		}else if ( base.pageStyle == 'letter'){
			pages = new letters(base); 
		}else if ( base.pageStyle == 'simpleSearchLayer'){
			pages = new simpleSearchLayer(base); 
		}else if ( base.pageStyle == 'simpleFormLayer'){
			pages = new simpleFormLayer(base); 
		}else if ( base.pageStyle == 'notes'){
			pages = new notes(base); 
		}else if ( base.pageStyle == 'notes2'){
			pages = new notes2(base); 
		}else if ( base.pageStyle == 'simpleWizardSearchLayer'){
			pages = new simpleWizardSearchLayer(base); 
		}
		else if ( base.pageStyle == 'adform'){
			pages = new adform(base); 
                }
        else if ( base.pageStyle == 'closeButtonOnly'){        
			pages = new closeButtonOnly(base); 
                }
        base.pages = pages;
        
		base.check = new validate(base,pages);
		
		for (var page = 0;page<base.tabs.length;page++){ 
			// lisataan sivu navikointijarjestelmaan 
			if (base.pageStyle == 'tabs'){
				pages.addTab(base.tabs[page]);
			}else if (base.pageStyle == 'wizard_tabs'){
			    pages.addTab(base.tabs[page]);
			}else if ( base.pageStyle == 'letter'){
				pages.addPage(base.tabs[page]); 
			}else if ( base.pageStyle == 'notes'){
				pages.addPage(base.tabs[page]); 
			}else if ( base.pageStyle == 'notes2'){
				pages.addPage(base.tabs[page]); 
			}else if ( base.pageStyle == 'adform'){
				pages.addTab(base.tabs[page]);
			}else if ( base.pageStyle == 'closeButtonOnly'){
				pages.addTab(base.tabs[page]);
			}
			
		}
		// alustetaan tabit  
		pages.initialize();

		base.PageBuilder = new PageBuilder(base,pages,oTitleTooltip,oTooltip);
		
		// valitaan ensimmainen sivu valituksi 
		goPage(base.currentPage);
		
		base.created = true;
		
		// laukaistaan eventti lomake on valmis
		base.onLoad();
	} 
	
	////////////////////////////////////
	// pagebuilder 
	function PageBuilder(base,pages,oTitleTooltip,oTooltip){
		var oPageTable; 
		oPageTable = getTable();
		oPageTable.style.marginLeft =  base.contentMarginLeft;
		oPageTable.style.marginTop =  base.contentMarginTop;
		oPageTable.style.marginBottom = base.contentMarginBottom;
		oPageTable.style.marginRight = base.contentMarginRight;
		oPageTable.style.width = pages.contentCell.offsetWidth;
		//oPageTable.border = 1;
		this.created = new Object();
		this.build = build;
		this.removeTab = removeTab;
		this.addTab = addTab; 
		var oBase = this;
		
		var formHeight = pages.contentCell.offsetHeight;
		
		function removeTab(index)
		{
		    // poistetaan ensin kokoelmasta jotta ei ladata uudestaan 
		    oBase.build['page' + index.toString()] = null; 
		    
		    // poistetaan tabi esilta 
		    pages.removeTab(index);
		}
		function addTab(tab)
		{
		    pages.addTab(tab);
		}
		
		function build(page){
		    if (page == null)return;  
		    if (base.wizard && !base.hideButtons){ 
			    //debugger;			    
			    var lastpage = getLastPage_Num( base.tabs );                
			    var firstpage = getFirstPage_Num( base.tabs );               
			    if (pages.prevNextTable)
			    {
			        if (pages.prevNextTable.rows.length == 0){
			            oRow = pages.prevNextTable.insertRow(0);	
			            oCell = oRow.insertCell(0);
			            oCell.align = 'left';
			            if (firstpage < page  ) oCell.appendChild(getButtons(base, 'previous' ,page)); 	
				        oCell = oRow.insertCell(1);
			            oCell.align = 'right';
			            if (page == lastpage)
			            {
			                // tassa templatessa ei ole tallenna painiketta viimeisella sivulla vaan se on lomakkeen paalla
			                if (base.pageStyle != 'wizard_tabs')
			                {
			                    oCell.appendChild(getButtons(base, 'submit' ,page));
			                }
			            }
				        else 
				        {
				            oCell.appendChild(getButtons(base, 'next' ,page)); 
				        }
				    } 
				    else 
				    {
				        oRow = pages.prevNextTable.rows[0];	
			            oCell = oRow.cells[0];
			            oCell.innerHTML = ''; 
			            if (firstpage < page) oCell.appendChild(getButtons(base, 'previous' ,page)); 	
    				    oCell = oRow.cells[1];
			            oCell.innerHTML = ''; 
			            if (page == lastpage)
			            {
			                // tassa templatessa ei ole tallenna painiketta viimeisella sivulla vaan se on lomakkeen paalla
			                if (base.pageStyle != 'wizard_tabs')
			                {
			                    oCell.appendChild(getButtons(base, 'submit' ,page));
			                }
			            }
				        else 
				        {
				            oCell.appendChild(getButtons(base, 'next' ,page)); 
				        }
				    }
                }    
			}
			if (oBase.build['page' + page.toString()]) return;
			oBase.build['page' + page.toString()] = true; 
			//debugger;
			
			var oEl;
			var oElement; 
			var oElementCell;
			var oRow;
			var oLabelCell; 
			var page; 
			var oTable;
			var masterElement;
			var i;
			var otable;
			var cells;
			var div;
			var oRequiderDiv;
			var oRequiderLabel; 
			var requiredAdd; 
			var tab;
			
			
			tab = base.tabs[page];
			
			elements = tab.elements; 
			oTable = oPageTable.cloneNode(0); 
			var oDiv = document.createElement('div'); 
			tab.mainDiv = oDiv;
			pages.contentCell.appendChild(oDiv);
			oDiv.appendChild(oTable);
			var elementCellWidth = oTable.offsetWidth - tab.labelWidth;
						
			if (tab.htmlCodeUp){
				if (tab.htmlCodeUp.toString().replace(' ' ,'').length > 0 ){
					oRow = oTable.insertRow(oTable.rows.length); 
					oRow.style.paddingLeft = 5;
					oRow.style.paddingRight = 5;
					oRow.style.paddingBottom = 5;
					oRow.style.paddingLeft = 5;
					oLabelCell = oRow.insertCell(0); 
					oLabelCell.colSpan = 2; 
					oLabelCell.className = tab.labelCss; 
					oLabelCell.innerHTML = tab.htmlCodeUp;	
				} 
			} 
			
			for (i = 0;i<elements.length;i++){
				oEl = elements[i];
				oEl.errorImage = null;
				oEl.titleTooltip = oTitleTooltip;
				oElement = oEl.getElement();
				if (oEl.include == 'normal'){
					try
					{
					    oEl.masterElement = masterElement;
						oElementCell.appendChild(oElement);
						//if (oEl.align){oElement.style.textAlign = oEl.align;}
				        //if (oEl.vAlign){oElement.style.verticalAlign = oEl.vAlign;}
						if (!oEl.show | oEl.elementType == 'adhidden')
							oElement.style.display = 'none';
					}
					catch(e){}
				}
				else if (oEl.include == 'full'){
					try
					{
						var inctable = getTable(); 
						var mastable = getTable(); 
				        var newCell = fillTable(mastable,"",inctable)[0]; 
				        var childNodes = oElementCell.childNodes;
				        while (childNodes.length > 0){ 
				            newCell.appendChild(childNodes[0]);    
				        }
						newCell.style.paddingRight = '20';
						if (masterElement) 
						    if (masterElement.infoText)
						        if (masterElement.infoText.length > 0 )
						            newCell.style.paddingRight = '2';
						oElementCell.appendChild(mastable);
						AddElement(inctable); 		
						if (oEl.align){inctable.parentNode.style.textAlign = oEl.align;}
				        if (oEl.vAlign){inctable.parentNode.style.verticalAlign = oEl.vAlign;}
					}
					catch(e){}
				}
				else{ 
				    AddElement(oTable); 
				}
			
				
				if (oEl.infoText.length > 0 ){
					var table = getTable(); 
					var oInfoImg = document.createElement('img'); 
					oInfoImg.style.width = 18; 
					oInfoImg.style.borderWidth = 0; 
					oInfoImg.style.height = 18; 
					oInfoImg.style.verticalAlign = 'top'; 
					oInfoImg.style.textAlign = 'right'; 
					oInfoImg.style.cursor = 'pointer'; 
					oInfoImg.src = base.virtualDirectory  + 'jdm/webControls/Images/help.gif';
					oInfoImg.style.marginLeft = 2;
					oTooltip.initialize(oEl.infoText,oInfoImg , true)
                    var infoCells = fillTable(table,oElement,oInfoImg); 
                    infoCells[1].align = 'left';
                    infoCells[1].vAlign = 'top';
                    oElementCell.appendChild(table);
				} 
				
				if (oEl.htmlBeginElement){oElementCell.insertBefore(oEl.getHtmlBeginElementObject(),oElement);} 
				if (oEl.htmlAfterElement){oElementCell.appendChild(oEl.getHtmlAfterElementObject());}				
				
				//if (oEl.htmlBeginElement && oEl.htmlAfterElement){oElementCell.innerHTML = oEl.htmlBeginElement + oElementCell.innerHTML + oEl.htmlAfterElement;} 
				//else if (oEl.htmlBeginElement){oElementCell.innerHTML = oEl.htmlBeginElement + oElementCell.innerHTML;} 
				//else if (oEl.htmlAfterElement){oElementCell.innerHTML = oElementCell.innerHTML + oEl.htmlAfterElement;}			
				if (!oEl.labelElement) oEl.labelElement = oLabelCell;
				if (oEl.required ){ 			
					if (!requiredAdd){
						oRequiderDiv = document.createElement('div'); 
						oRequiderDiv.style.position = 'absolute';  
						oRequiderLabel = document.createElement('label'); 
						oRequiderLabel.innerHTML = tab.requiredText;
						oRequiderLabel.className = tab.labelCss;
						oRequiderLabel.style.position = 'relative';  
						oRequiderDiv.appendChild(oRequiderLabel); 
						
						if (base.requiredType == 'normal')
						{
						    oElementCell.insertBefore(oRequiderDiv,oElementCell.getElementsByTagName('*')[0]);
						    if (!oEl.masterElement)	
						    {
						        oRequiderLabel.style.top = oEl.Element.offsetTop + 1 ;
						    }
						    else 
						    {
						        oRequiderLabel.style.top = oEl.masterElement.Element.offsetTop - 4;
						    }
						    oRequiderLabel.style.left = -5 + ((oRequiderLabel.offsetWidth) * -1);
						}
						else if (base.requiredType == 'beforelabel')
						{
	    					oElementCell.insertBefore(oRequiderDiv,oElementCell.getElementsByTagName('*')[0]);					
						    if (!oEl.masterElement)	
						    {						        
						        oRequiderLabel.style.top = oEl.Element.offsetTop + 1 ;
						    }
						    else 
						    {
						        oRequiderLabel.style.top = oEl.masterElement.Element.offsetTop - 4;
						    }						     
						    oRequiderLabel.style.left = (getAbsoluteLeft(oRequiderLabel) - getAbsoluteLeft(oEl.labelElement) ) * -1 -5 ;
						}
						else if (base.requiredType == 'afterlabel')
						{
						    oRequiderDiv.className = tab.elementCss;
						    oRequiderLabel.style.left = 5;						    
                            if (!oEl.masterElement)	
						    {						        
						        oEl.labelElement.insertBefore(oRequiderDiv);
						    }
						    else 
						    {
						        oEl.masterElement.labelElement.insertBefore(oRequiderDiv);
						    }						     
						}
						
						requiredAdd = true;
					}
				}
				 
				
				// asetetaan elementti kokoelmaan 
				//if (!oEl.labelElement) oEl.labelElement = oLabelCell;
				oEl.trElement = oRow; 
				oEl.elementCell = oElementCell;
				try{
					if (oEl.include != 'full'){ 
					    oLabelCell.style.paddingTop = parseInt(tab.lineSpace) / 2;	
					    oLabelCell.style.paddingBottom = parseInt(tab.lineSpace) / 2;	
					    oElementCell.style.paddingTop = parseInt(tab.lineSpace) / 2;	
					    oElementCell.style.paddingBottom = parseInt(tab.lineSpace) / 2;	
					}
				}catch(e){}
				if (oEl.elementType == 'adcontrol' ){
				    oEl.Control.initControl();
				}
//				oEl.elementCell.style.borderWidth = 1;
//				oEl.elementCell.style.borderStyle = 'solid';
//				oEl.elementCell.style.borderColor = '#000000';
				// viimeiselle elementille lisataan 
				// sivunvaihto ominaisuus tabulaattori nappaimelle
				if (i == elements.length-1){
					try
					{
					if ((oEl.elementType != 'adcheckbox' | oEl.elementType != 'adradio') && oEl.children.length > 0) 
						oEl.children[oEl.children.length - 1].Element.onkeydown = tabulatorChangePage;
					else 
						oElement.onkeydown = tabulatorChangePage;	
					}catch(e){}
				} else if (i == 0 && page > 0){
					try
					{
					if ((oEl.elementType != 'adcheckbox' | oEl.elementType != 'adradio') && oEl.children.length > 0) 
						oEl.children[0].Element.onkeydown = tabulatorChangePageBack;
					else 
						oElement.onkeydown = tabulatorChangePageBack;	
					}catch(e){}
				}					
				if (oEl.conditionShow){
				    if (oEl.conditionShow == 'false'){
				        oEl.trElement.style.display = 'none';
				    }
				}
			} 	
			 
			
			tab.mainTable = oTable;
			setLayOut(null,oTable);	
			tab.mainDiv.style.display = 'block';	
			//tab.mainDiv.style.display = 'none';	
			setShow(false,tab.mainDiv);
			if (oTable.addEventListener){oTable.addEventListener("click" , setLayOut,false);
			}else{oTable.onresize = setLayOut;}	
		    
		    // palautetaan evetti sivu on ladattu
		    base.onPageLoad(tab); 
		    
		    function AddElement(oTable){
		        masterElement = oEl;
		        oRow = oTable.insertRow(oTable.rows.length); 
		        oRow.style.paddingLeft = 5;
		        oRow.style.paddingRight = 5;
		        oLabelCell = oRow.insertCell(0); 
		        requiredAdd = false;
			
				
			    if (oEl.labelWidth){
				    oLabelCell.colSpan = 2;
				    if (oEl.include == 'full'){try{oLabelCell.style.width = parseInt(oEl.labelWidth) + parseInt(oEl.width) + 50;}catch(e){}}
				    else{try{oLabelCell.style.width = oTable.offsetWidth;}catch(e){}} 
			        if (oEl.align){oLabelCell.style.textAlign = oEl.align;}
			        if (oEl.vAlign){oLabelCell.style.verticalAlign = oEl.vAlign;}
			        otable = getTable();
				    cells = fillTable(otable,oEl.getLabelElement(),oElement);
				    oLabelCell.appendChild(otable);
				    cells[0].style.width = tab.labelWidth;
				    cells[0].className = tab.labelCss; 	
				    cells[0].style.width = oEl.labelWidth;
				    cells[0].style.verticalAlign = 'top'; 
				    cells[0].style.paddingTop = 3;
				    oLabelCell = cells[0];
				    oElementCell = cells[1]; 
			    }else {
				
				    oLabelCell.className = tab.labelCss; 		
				    oLabelCell.appendChild(oEl.getLabelElement()); 
				    oLabelCell.style.width = tab.labelWidth;
				    oLabelCell.style.verticalAlign = 'top'; 
				    oLabelCell.style.paddingTop = 3;
				    oElementCell = oRow.insertCell(1); 	
				    oElementCell.appendChild(oElement); 						
				    oElementCell.className = tab.elementCss;	
				    try{oElementCell.style.width = elementCellWidth;}catch(e){} 
			        if (oEl.align){oElementCell.style.textAlign = oEl.align;}
			        if (oEl.vAlign){oElementCell.style.verticalAlign = oEl.vAlign;}
			    } 
				
			    if (oEl.breakLabel){	
				    oLabelCell.innerHTML = '';
				    if (oEl.labelWidth) oLabelCell.style.width = oEl.labelWidth;
				    div = document.createElement('div');
				    div.appendChild(oEl.getLabelElement());
				    div.className = tab.labelCss;
				    div.style.textAlign = 'left';
				    div.style.width = '100%';
				    oElementCell.insertBefore(div,oElement);
				    oEl.labelElement = div;
			    } 
			    // asettaa show bitin mukaan esille 
			    if (!oEl.show | oEl.elementType == 'adhidden')
				    oRow.style.display = 'none';
		   }
		}
	}
	function setLayOut(e,table){		
		
		var className = '';
		if (!table)
			table = this;
		for(var i=0;i<table.rows.length;i++){
			if (table.rows[i].style.display != 'none'){
				if (className == ''){
					className = base.everyOtherRowCss;
				}else{
					className = ''
				}	
				table.rows[i].className = className;
			}
		}
		window.setTimeout(resize,0);	
	}

    function resize(){        
        base.onResize();
    }
	// private functions 	
	function getTabByKey(key){
		var page; 
		for (var i = 0;i< base.tabs.length;i++){
			page = base.tabs[i];
			if (page.key == key){
				return page; 
			}
		}
		return null;
	}
	function getElementByKey(key){
		var el; 
		for (var a = 0;a< base.tabs.length;a++){
			for (var i = 0;i< base.tabs[a].elements.length;i++){
				el = base.tabs[a].elements[i];
				if (el.key == key){
					return el; 
				}
			}
		}
		return null;
	}
	
	
	// suorittaa sivun valihdon tabulaatorilla 
	// sivun viimeiselta elementilta 
	function tabulatorChangePage(e){
		var cancelEvent = false;
		var Key;
		var shiftMask;
		if (navigator.appName=='Microsoft Internet Explorer'){
			e = window.event;
			Key =e.keyCode; 
			shiftMask = e.shiftKey;
		} else if (navigator.appName=='Netscape'){
			Key = e.which;
			shiftMask = e.shiftKey;
		}
		if (base.locks == 0){
			if (Key == 9 && !shiftMask){
				cancelEvent = true;
				//if (base.tabs.length > pages.currentPage + 1 ){ 
				if (base.tabs.length > base.currentPage + 1 ){ 
					goPage(base.currentPage + 1); 
					if (!base.edit && base.created && base.wizard){ base.check.check();} 
				}
				try{
					elements[0].setFocus();
				}catch(ss){}
			}
		}
		if (cancelEvent){
			try{
				// lopetetaan event 
				if (e.preventDefault){
					e.preventDefault();
					return false;
				}
				else {
					e.keyCode = 0;
					e.returnValue = false;
				}	
			}catch(ee){}	
		}				
	}
	
	function tabulatorChangePageBack(e){
		var cancelEvent = false;
		var Key;
		var shiftMask;
		if (navigator.appName=='Microsoft Internet Explorer'){
			e = window.event;
			Key =e.keyCode; 
			shiftMask = e.shiftKey;
		} else if (navigator.appName=='Netscape'){
			Key = e.which;
			shiftMask = e.shiftKey;
		}
		if (base.locks == 0){
			if (Key == 9 && shiftMask){
				cancelEvent = true;
				//if (pages.currentPage > 0){ 
				if (base.currentPage > 0){ 
					goPage(base.currentPage - 1); 
					if (!base.edit && base.created && base.wizard){base.check.check();} 
				}
				try{
					elements[elements.length].setFocus();
				}catch(ss){}
			}
		}
		if (cancelEvent){
			try{
				// lopetetaan event 
				if (e.preventDefault){
					e.preventDefault();
					return false;
				}
				else {
					e.keyCode = 0;
					e.returnValue = false;
				}	
			}catch(ee){}	
		}				
	}

	// vaihtaa sivun 
	function goPage(page_num){
		if (page_num == null) return;
		if (page_num != base.currentPage || !base.lastPage)
		{
		    if (base.locks == 0){
			    if (base.tabs.length > 0){   
                    if (base.currentPage < page_num ){
                        page_num = getNextPage_Num(page_num , base.tabs );
                    } else {
                        page_num = getPreviousPage_Num(page_num , base.tabs );                
                    }
            	    if (page_num == null){
                        return;
                    }		        
			        base.lastPage = base.currentPage;
			        if(base.tabs[base.currentPage].mainTable){
	                    setShow(false,base.tabs[base.currentPage].mainDiv);
	                }
//	                if(base.tabs[page_num].mainTable){
//	                    setShow(false,base.tabs[page_num].mainDiv);
//	                }
			        base.PageBuilder.build(page_num);
			        setShow(true,base.tabs[page_num].mainDiv);
			        if (document.addEventListener){setLayOut(null,base.tabs[page_num].mainTable);}
			        base.currentPage = page_num;
			        pages.selectPage(page_num);	
			        if (base.wizard)pages.updateButtonTable();
			    }
		    }
            window.setTimeout(resize,0);	
            if (base.useMoveTopWithAction)
            {
                top.window.scrollTo(0,0);
            }
            base.onPageChange(page_num , base.lastPage);
        }
        try{CollectGarbage();}catch(e){}
	} 
	function goNextPage(){
		var nextPage =   parseInt(base.currentPage) + 1 * 1;
        if (base.tabs[nextPage].headObject.style.display == 'none')
        {
            nextPage ++;
        }
        nextPage = getNextPage_Num(nextPage,base.tabs);     
		goPage(nextPage);
		if (!base.edit && base.created && base.wizard){ base.check.check();} 
		try{CollectGarbage();}catch(e){}
    }
	function goPreviousPage(){
		var prevPage = parseInt(base.currentPage - 1) * 1;
		if (base.tabs[prevPage].headObject.style.display == 'none')
        {
            prevPage--;
        }
        prevPage = getPreviousPage_Num(prevPage , base.tabs );                
        goPage(prevPage);
		if (!base.edit && base.created && base.wizard){base.check.check();} 
		try{CollectGarbage();}catch(e){}
	}
	
	function serverCheck(submit){
		base.check.server = true; 
		base.check.serverSubmit = submit; 
		base.check.serverErrorTitle = base.serverErrorTitle;
		base.check.check(window.event , true , submit);
		base.check.server = false; 
		base.check.serverSubmit = false; 
		base.check.serverErrorTitle = null;
		try{CollectGarbage();}catch(e){}
	}
	function closeMessageBox()
	{
	    pages.closeErrorLabel();
	}
	// Sulkee formin
	function closeForm()
	{
	    try{window.parent.formLoader.close();}catch(e){window.close();}	    
	}
		
	// Sulkee formin
	function closePopup()
	{
	    try{ self.close(); } catch(e){}
	}
	
	function cleanServerError(){
		for (var i = 0;i<base.tabs.length;i++){ 
			var tab = base.tabs[i];
			for (var e = 0;e<tab.elements.length;e++){ 
				tab.elements[e].serverError = '';
			}
		}
		try{CollectGarbage();}catch(e){}
	}
		
	function responsePrint(){
	    // tulostetaan lomake popup ikkunassa 
	    printForm();	    
	}
}

// Asettaa sivun nakyvyyksia 
function setShow(value , Object)
{
    if (navigator.appName=='Microsoft Internet Explorer')
    {
	    if (value)
        {
            Object.style.position = Object.origPosition;
            Object.style.height = Object.origHeight;
            Object.style.width = Object.origWidth;
            Object.style.visibility = '';
            Object.style.overflow = "";
        }
        else 
        {
            Object.origPosition = Object.style.position;
            Object.origHeight = Object.offsetHeight;        
            Object.origWidth = Object.offsetWidth; ;
            Object.style.position = 'absolute';
            Object.style.visibility = 'hidden';
            Object.style.overflow = "auto"
            Object.style.height = '0px';
            Object.style.width = '0px';
        }
	}
	else 
	{
	    if (value)
        {
            Object.style.display = 'block';
        }
        else 
        {
            Object.style.display = 'none';
        }
	}
} 

