/////////////////////////////////////////////////////////////////////////
///
//
//	APU objektit 
//
//
////////////////////////////////////////////////////////////////////////
// objects 
function objTabData(parentObject){
	this.header; 
	this.key;
	
	this.elementWidth = parentObject.elementWidth;
	this.readOnly = parentObject.readOnly; 
	this.labelValign = parentObject.labelValign; // muist atama puuttuu
	this.labelWidth = parentObject.labelWidth;
	this.labelHeight = parentObject.labelHeight; // muist atama puuttuu
	this.breakLabel = false; 
	this.elementCss = parentObject.elementCss; 
	this.elementHeight;	// laita  // muist atama puuttuu
	this.labelAlign = 'left'; // laita // muist atama puuttuu
	this.labelCss = parentObject.labelCss;
	this.enabled = true;
	this.headObject; 
	this.setEnabled = setEnabled;
	this.setShow = setShow;
	this.htmlCodeDown;// muist atama puuttuu
	this.htmlCodeUp;// muist atama puuttuu
	this.errorColor = parentObject.errorColor;
	this.requiredText = parentObject.requiredText
	this.tableHTML; // muist atama puuttuu
	this.lineSpace = parentObject.lineSpace;
	
	this.getElementByKey = getElementByKey;
	this.elements = new Array();	
	this.mainTable;
	this.mainDiv; 
	this.conditionShow; 
	
	this.elements.add = function (key, elementType,label,required,value){				
		var oEl = new objElement(parentObject);
		oEl.key = key;
		if (typeof required == 'boolean') oEl.required = required; 
		if (typeof elementType == 'string') oEl.elementType = elementType;
		if (label) oEl.label = label;
		oEl.value = value; 
		oEl.width = base.elementWidth;
		oEl.readOnly = base.readOnly;
		oEl.labelValign = base.labelValign;
		oEl.labelHeight = base.labelHeight;
		oEl.breakLabel = base.breakLabel;
		oEl.elementCss = base.elementCss;
		oEl.height = base.elementHeight;
		oEl.labelAlign = base.labelAlign;
		oEl.labelCss = base.labelCss;
		
		this[this.length] = oEl;
		return oEl;	
	}
	var base = this;
	function getElementByKey(key){
		var el; 
		for (var i = 0;i< base.elements.length;i++){
			el = base.elements[i];
			if (el.key == key){
				return el; 
			}
		}
		return null;
	}
	
	function setEnabled(value){
	    var freePage = getFirstPage_Num(parentObject.tabs);
	    if (freePage != getLastPage_Num(parentObject.tabs)){    	    
	        if (!value){
	            base.headObject.disabled = true;
	            base.headObject.style.cursor = '';
	        }else{
	            base.headObject.disabled = false;
	            base.headObject.style.cursor = 'default';
	        }
	        base.enabled = value;
	        parentObject.goPage(freePage);
	    } 
	}
	function setShow(value)
	{
        if (!value){
            base.headObject.style.display = 'none';
        }else{
            base.headObject.style.display = 'inline';
        }
	}
}


// palauttaa valmiin elementin kutsujalle 
// annetaan periytyvat arvot objektin luonnin yhteydessa 
function objElement(baseObject){
	this.Element;
	this.labelElement;
	this.trElement;
	this.elementCell;
	this.masterElement; 
	this.children = new Array(); 
	this.children.inLine = 5;
	this.children.labelLocation = 'left';
	this.children.add = function(key,value,title){
		var oChild = new objChild(); 
		oChild.key = key; 
		oChild.value = value;
		oChild.title = title;
		this[this.length] = oChild;
		return oChild;	
	}  
	this.labelCss = baseObject.labelCss;
	this.readOnly = false;
	this.required = false; 
	this.elementType = 'adtext';
	this.show = true; 
	this.label = '&nbsp;&nbsp;';
	this.value; 
	this.key; 
	this.width = baseObject.elementWidth;
	this.height;
	this.labelWidth;
	this.include;
	this.minValue = ''; 
	this.maxValue = ''; 
	this.breakLabel = false;
	this.getElement = getElement; 
	this.defaultValue;  
	this.htmlBeginElement = ''; 
	this.htmlAfterElement = ''; 
	this.getHtmlBeginElementObject = getHtmlBeginElementObject;
	this.getHtmlAfterElementObject = getHtmlAfterElementObject;
	this.align = 'left'; 
	this.vAlign = 'top'; 
	this.onClick = onClickEvent;
	this.onChange = onChangeEvent;
	this.infoText = '';
	this.title;
	this.titleTooltip = new toolTip(); 
	this.getElementValue = getElementValue; 
	this.getLabel = getLabel;
	this.getLabelElement = getLabelElement; 
	this.errorImage;
	this.elementCss;
	this.labelValign;
	this.labelHeight;
	this.labelAlign;
	this.serverError = ''; 
	this.fileTypes = '.*';
	this.Control;
	this.url = ''; 
	this.updateFileElement = updateFileElement;
	this.setElementValue = setElementValue;
	this.image;
	this.runatServer = true; 
	
	var base = this;
	
	function onClickEvent()
	{
	    try{baseObject.onEvent(base,'onclick');}catch(exp){}
	    try{baseObject.closeMessageBox();}catch(e){}
	    if (baseObject.pageStyle == 'simpleLayer')
	    {
	        if (base.Element)
	        {
	            base.Element.focus();
	        }    
	    }
	} 
	function onChangeEvent()
	{
	    try{baseObject.onEvent(base,'onchange');}catch(exp){}
	    try{baseObject.closeMessageBox();}catch(e){}
	    try{baseObject.changed = true;}catch(e){}
	} 

	function getLabelElement(){
		var label = document.createElement('label')
		label.innerHTML = base.label;	
		return label;
	} 
	function getHtmlBeginElementObject(){
		var label = document.createElement('label')
		label.innerHTML = base.htmlBeginElement;	
		return label;
	}
	function getHtmlAfterElementObject(){
		var label = document.createElement('label')
		label.innerHTML = base.htmlAfterElement;	
		return label;
	}
	
	// palauttaa valmiin elementin annetaan value ja readonly listaa varten 
	// nain saadaan napparasti kopsattua elementteja 
	function getElement(value,readonly){
		if (!base.Element){ 
			buildElement();
			return base.Element; 
		} else {
			var el = base.Element.cloneNode(1);   
			
			if (base.elementType == 'adselect' | base.elementType == 'adlistbox' ){
			    value = value.toString().split(",");
			    if (el.value){
			        el.value = value;    
			    } else {
			        for (var opt=0;opt<el.options.length;opt++){
				        for (var i=0;i<value.length;i++){
				            if (el.options[opt].value == value[i]){
				                el.options[opt].selected = true; 
				            }     
				        }
			        }
			    }
			} else if (base.elementType == 'adselectmultiple'){
			    value = value.toString().split(",");
			    for (var opt=0;opt<el.options.length;opt++){
				    for (var i=0;i<value.length;i++){
				        if (el.options[opt].value == value[i]){
				            el.options[opt].selected = true; 
				        }     
				    }
			    }
			} else if (base.elementType == 'adtextarea'){
			    el.innerText = value;
			} else if (base.elementType == 'adcontrol'){
			    // lista ei supporttaa
			} else if (base.elementType == 'addiv' | base.elementType == 'adinfo'){
			    // lista ei supporttaa
			} else if (base.elementType == 'adfile'){
			    // lista ei supporttaa
			} else if (base.elementType == 'adiframe'){
			    // lista ei supporttaa
			} else if (base.elementType == 'addatecontrol' | base.elementType == 'addivdatecontrol'){
                el.getElementsByTagName('INPUT')[0].value = value;
			} else if (base.elementType == 'adradio' | base.elementType == 'adcheckbox'){
			    // Palautetaan stringina erikois tilanne ei toimi muuten 
			    value = value.toString().split(",");
			    var html = '<table cellpadding=0 cellspacing=0 border=0 >' + el.innerHTML + '</table>';
			    var els = el.getElementsByTagName('INPUT');
			    for (var i=0;i<els.length;i++){
			        for (var v=0;v<value.length;v++){    
			            if (els[i].value == value[v]){
			                var orig = els[i].parentNode.innerHTML;
			                var checked = orig.toString().replace('<input ','<input checked="checked" ');
			                checked = checked.toString().replace('<INPUT ','<INPUT CHECKED ');
			                html = html.toString().replace(orig,checked);
			            } 
			        }
			    }
			    return html.toString();
			} else {
			   el.value = value; 
			}
			return el;
		}
	}
	
	function getLabel(){
		var stext = new String(base.label);
		var result = '';
		var iN = false; 
		var Char;
		for ( var i = 0;i<stext.length;i++){
			Char = stext.charAt(i);
			if (Char == '<' ){
				iN = true;
			} else if (Char == '>'){
				iN = false;	
			} else if (!iN) {
				result += Char;
			}
		}
		return result;
	}
	
	
	// palauttaa elementtia rakennettaessa arvon elementille 
	function getValue(){
		var result; 	
		try {
			if (base.value.length > 0)
				result = base.value; 
			else 
				result =  base.defaultValue;
		}catch(e){
			try{
				if (base.defaultValue.length > 0 )
					result = base.defaultValue;
				else 
					result = '';
			}catch(ee){
				result = ''; 	
			}
		}
		if (result)
			return result; 
		else 
			return ''; 
	} 
	

	function getElementValue(Element){
	    value = new Array();
		if (base.readOnly)
		{
		    value[value.length] = getValue(); 
		    return value.toString();
		}
		if (!Element){
		    if (!base.Element){
		        return getValue().toString(); 
		    } else {
		        if (base.elementType  == 'adselect' | base.elementType  == 'adselectmultiple' | base.elementType == 'adlistbox'){
			        for (var opt=0;opt<base.Element.options.length;opt++){
				        if(base.Element.options[opt].selected){
					        value[value.length] = base.Element.options[opt].value;
				        }
			        }
		         } else if (base.elementType  == 'adtime' ){
		            value[value.length] = replaceTimeValue(base.Element.value); 
		        } else if (base.elementType  == 'adtextarea' ){
			        value[value.length] = base.Element.value; 
		        } else if (base.elementType  == 'adcontrol' ){
			        value[value.length] = base.value; 
		        } else if ( base.elementType  == 'addiv' | base.elementType  == 'adinfo'){
			        value[value.length] = base.Element.innerHTML;
		        } else if (base.elementType  == 'adfile'){
			        value[value.length] = base.value;
		        } else if (base.elementType  == 'adiframe'){
			        value[value.length] = base.Element.src;
		        } else if (base.elementType  == 'addivdatecontrol'){
		            value[value.length] = base.Element.getElementsByTagName('input')[0].value;
		        } else if (base.elementType  == 'addatecontrol' && !document.addEventListener){
			        value[value.length] = base.Element.getElementsByTagName('input')[0].value;
		        } else {
			        if (base.elementType  == 'adradio' | base.elementType  == 'adcheckbox'){
				        for (var i=0;i<base.children.length;i++){
					        if (base.children[i].Element.checked == true){
						        value[value.length] = base.children[i].Element.value.toString();
					        }
				        }
			        }else {
				        value[value.length] = base.Element.value;
			        }
		        } 
		        return value.toString();
		    }
	    } else {
	       if (base.elementType  == 'adselect' | base.elementType  == 'adselectmultiple' | base.elementType == 'adlistbox'){
		        for (var opt=0;opt<Element.options.length;opt++){
			        if(Element.options[opt].selected){
				        value[value.length] = Element.options[opt].value;
			        }
		        }
	        } else if (base.elementType  == 'adtime' ){
		        value[value.length] = replaceTimeValue(Element.value); 
	        } else if (base.elementType  == 'adtextarea' ){
		        value[value.length] = Element.value; 
	        } else if (base.elementType  == 'adcontrol' ){
		        value[value.length] = base.value; 
	        } else if ( base.elementType  == 'addiv' | base.elementType  == 'adinfo'){
		        value[value.length] = Element.innerHTML;
	        } else if (base.elementType  == 'adfile'){
		        value[value.length] = base.value;
	        } else if (base.elementType  == 'adiframe'){
		        value[value.length] = Element.src;
	        } else if (base.elementType  == 'addivdatecontrol' | (base.elementType  == 'addatecontrol' && !document.addEventListener)){
		        if (Element.tagName.toString().toLowerCase() != 'input'){
		            value[value.length] = Element.getElementsByTagName('input')[0].value;
		        } else {
		            value[value.length] = Element.value;
		        }
	        } else {
		        if (base.elementType  == 'adradio' | base.elementType  == 'adcheckbox'){
			        var children = Element.getElementsByTagName('input');
			        for (var i=0;i<children.length;i++){
				        if (children[i].checked == true){
					        value[value.length] = children[i].value.toString();
				        }
			        }
		        }else {
			        value[value.length] = Element.value;
		        }
	        } 
	        return value.toString();
	    }
	}
	
	// laittaa . : 
	function replaceTimeValue(value)
	{
	    value = value.toString().replace('.',':');	
        value = value.toString().replace('.',':');	
        value = value.toString().replace('.',':');	
        value = value.toString().replace('.',':');	
        value = value.toString().replace('.',':');	
        return value;
	}
	
	// asettaa elementille arvon aina oikein tilanteesta riippumatta 
	function setElementValue(value)
	{
	    if (base.Element)
	    {      
	        
	        if (base.elementType  == 'adselectmultiple' )
	        {
	            base.Element.selectedIndex = -1;
	        }
	        if (base.children.length > 0)
	        {
	            for (var i=0;i<base.children.length;i++)
	            {
	                if ( base.children[i].value &&  (',' + value.toString() + ',').toString().indexOf(',' + base.children[i].value.toString() + ',') > -1 )
	                {
                        if (base.elementType == 'adcheckbox' | base.elementType == 'adradio' )
                        {
                            base.children[i].Element.checked = true; 
                        }
                        else if (base.elementType  == 'adselect' | base.elementType  == 'adselectmultiple' | base.elementType == 'adlistbox')
                        {
                            base.children[i].Element.selected = true; 
                        } 	                    
	                }
	                else 
	                {
	                    if (base.elementType == 'adcheckbox' | base.elementType == 'adradio' )
                        {
                            base.children[i].Element.checked = false; 
                        }
                        else if (base.elementType  == 'adselect' | base.elementType  == 'adselectmultiple' | base.elementType == 'adlistbox')
                        {
                            base.children[i].Element.selected = false; 
                        } 	                    
	                }                 
	            }
	        }
	        else 
	        {
                if (base.elementType  == 'addatecontrol')
                {
                    base.Element.getElementsByTagName('input')[0].value = value;     
                }
                if (base.elementType  == 'addivdatecontrol')
                {
                    base.Element.getElementsByTagName('input')[0].value = value;     
                }
                else if (base.elementType  == 'adiframe')
                {
		            base.Element.src = value;
	            }	
                else if ( base.elementType  == 'addiv' | base.elementType  == 'adinfo')
                {
                    base.Element.innerHTML = value;
                }
                else if (base.elementType  == 'adfile' | base.elementType  == 'adcontrol')
                {
                    base.value = value;
                }
                else
                {
                    base.Element.value = value;     
                }            
	        } 
	    } 
	    else 
	    {
	        base.value = value;
	    }
	}
	
	
	// paivittaa fileelemetin arvot eventille 
	function updateFileElement()
	{
	    if (base.elementType == 'adfile'){
	        var surl = document.location.href; 
	        if (surl.indexOf('?') > 0) surl +=  '&';
			else  surl +=  '?';
			surl += 'process=fileChangeEvent&key='+ base.key;
			surl += '&Value='+ base.value;
			surl += '&deleteFileLabel=' + baseObject.deleteFileLabel; 
			surl += '&uploadFileLabel=' + baseObject.uploadFileLabel; 
			surl += '&downloadFileLabel=' + baseObject.downloadFileLabel;  
		    surl += '&downloadFolder=' + baseObject.downloadfolder; 
			base.Element.src = surl;
	    } 
	}
	
	
	// rakentaa elementin 
	function buildElement(){
		var innerHTML;
		var oChild; 
		var option; 
		var c; 
		var oChildElement;
		var oCRow;
		var oCCell;
		var inline = 0; 
		var cells;
		var otable; 
		var cW;	
		
		if (navigator.appName!='Microsoft Internet Explorer' | navigator.userAgent.indexOf('Opera') > -1)
		    if (base.elementType == 'addatecontrol' ) 
		        base.elementType = 'addate';
		         
		switch (base.elementType){ 
			case 'adfile':
				innerHTML = 'iframe';
				base.Element = document.createElement(innerHTML);
				base.Element.frameBorder = 0; 
				var surl = document.location.href; 
				if (surl.indexOf('?') > 0) surl +=  '&';
				else  surl +=  '?';
				surl += 'process=file&key='+ base.key;
				surl += '&Value='+ base.value;
				surl += '&deleteFileLabel=' + baseObject.deleteFileLabel; 
				surl += '&uploadFileLabel=' + baseObject.uploadFileLabel; 
				surl += '&downloadFileLabel=' + baseObject.downloadFileLabel; 
				surl += '&downloadFolder=' + baseObject.downloadfolder; 
				 
				base.Element.src = surl;
				setPropertys();	
				break;
			case 'adiframe':
				innerHTML = 'iframe';
				base.Element = document.createElement(innerHTML);
				base.Element.scrolling = 'no';
				base.Element.scroll = 'no';
				base.Element.frameBorder = 0; 
				base.Element.src = getValue();
				setPropertys();	
				break;
			case 'adcontrol':
				base.Control = new DropDownElement();
				base.Control.url = base.url;
				base.Control.value = getValue();
				base.Control.parentElement = base;
				base.Control.virtualDirectory = baseObject.virtualDirectory;
				base.Element = base.Control.getElement();
				base.Control.width = base.width;
				base.Control.height = base.height;
				base.Element.width = base.width;
				base.Element.height = base.height;
				setPropertys();	
				break;
			case 'addiv':
				innerHTML = 'div';
				base.Element = document.createElement(innerHTML);
				base.Element.style.overflow = 'auto';
				base.Element.style.backgroundColor = '#FFFFFF';
//				base.Element.style.borderWidth = 2;
//				base.Element.style.borderStyle = 'inset';
				base.Element.innerHTML = getValue();
				setPropertys();	
				break;
			case 'adpassword':
			case 'adpassword2':
				innerHTML = 'INPUT';
				base.Element = document.createElement(innerHTML);
				base.Element.type = 'password';
				base.Element.value = getValue();
				setPropertys(false,false,true);
				break;
			case 'adhidden':
				innerHTML = 'INPUT';
				base.Element = document.createElement(innerHTML);
				base.Element.type = 'hidden';
				base.Element.value = getValue();
				setPropertys();
				break;
			case 'adinfo':
				innerHTML = 'label'; 		
				base.Element = document.createElement(innerHTML);
				base.Element.innerHTML = getValue();
				setPropertys();
				break; 
			case 'adtextarea':
				if (base.readOnly)
				{
				    innerHTML = 'div'; 		
				    base.Element = document.createElement(innerHTML);
				    if (document.attachEvent)
				        base.Element.innerText = getValue();
				    else
				        base.Element.innerHTML = getValue();
				    base.Element.style.overflow = 'auto';
				    base.Element.style.backgroundColor = '#FFFFFF';
				    base.Element.style.borderWidth = '1px'; 
				    base.Element.style.borderStyle = 'solid';
				    base.Element.style.borderColor = '#7F9DB9';
				    base.Element.style.color = '#ACA899';
			        setPropertys(false,true);
				}
				else 
				{
				    innerHTML = 'textarea'; 		
				    base.Element = document.createElement(innerHTML);
				    base.Element.value = getValue();
				    setPropertys();
				} 
				break; 
			case 'adselect':
			case 'adselectmultiple':
			case 'adlistbox':
				innerHTML = 'select';
				base.Element = document.createElement(innerHTML);
				base.Element.style.cursor = 'default';
				if (base.elementType == 'adselectmultiple'){base.Element.multiple = true;}
				if (base.elementType == 'adlistbox') {base.Element.size = 2;}
				setPropertys();
				break; 
			case 'adradio':
			case 'adcheckbox':
				base.Element = getTable();
				setPropertys(true);
				oCRow = base.Element.insertRow(0);
				innerHTML = 'inputgroup';
				break; 
			case 'addivdatecontrol':	
			    base.Element = getTable();
                var ccrow = base.Element.insertRow(0);
                base.Element.style.borderWidth = 0;
                base.Element.margin = 0;
                var img = document.createElement("img");
                img.style.position='relative';
                img.src = baseObject.virtualDirectory + 'jdm/webcontrols/calender/calendar.gif';
                img.border = 0;
                var inp = document.createElement("input");
                if (base.width)inp.style.width = base.width - 35;
                var cccell = ccrow.insertCell(ccrow.cells.length);
                cccell.appendChild(inp);
                cccell = ccrow.insertCell(ccrow.cells.length);
                cccell.appendChild(img);
                
                if (base.readOnly){
					base.Element.disabled = true; 
					inp.value = getValue();
					inp.disabled = true;
				}
				else 
				{
                    var calvalueDay = '';
                    var calvalueMonth = '';
                    var calvalueYear= '';
                    try
                    {         
                        var arr = getValue().split(baseObject.dateDelimeter);
                        if (arr.length == 3)
                        {
                            if (baseObject.dateType == "ddmmyy")
                            {
                                calvalueYear = arr[2];
                                calvalueMonth = arr[1];
                                calvalueDay = arr[0];
                            }
                            else if (baseObject.dateType == "mmddyy")
                            {
                                calvalueYear = arr[2];
                                calvalueMonth = arr[0];
                                calvalueDay = arr[1];
                            }
                            else if (baseObject.dateType == "yymmdd")
                            {
                                calvalueYear = arr[0];
                                calvalueMonth = arr[1];
                                calvalueDay = arr[2];
                            }
                        }
                    }
                    catch(e){}
                    if (calvalueYear == 'NaN')
                    {
                        calvalueYear = '';
                    }
                    if (calvalueMonth == 'NaN')
                    {
                        calvalueMonth = '';
                    }
                    if (calvalueDay == 'NaN')
                    {
                        calvalueDay = '';
                    }
                                
                    var oCalender1 = new WebCalender(document.body,calvalueYear,calvalueMonth,calvalueDay,img);
                    oCalender1.dateNames = lanCalenderdateNames;
                    oCalender1.monthNames = lanCalendermonthNames;
                    oCalender1.defaultInformation = lanCalenderdefaultInformation;
                    oCalender1.previousYearInformation = lanCalenderpreviousYearInformation;
                    oCalender1.nextYearInformation = lanCalendernextYearInformation;
                    oCalender1.previousMonthInformation = lanCalenderpreviousMonthInformation;
                    oCalender1.nextMonthInformation = lanCalendernextMonthInformation;
                    oCalender1.todayInformation = lanCalendertodayInformation;
                    oCalender1.previousYearLabel = lanCalenderpreviousYearLabel;
                    oCalender1.nextYearLabel = lanCalendernextYearLabel;
                    oCalender1.previousMonthLabel = lanCalenderpreviousMonthLabel;
                    oCalender1.nextMonthLabel = lanCalendernextMonthLabel;
                    oCalender1.todayLabel = lanCalendertodayLabel;
                    
                    function onChange(currentYear, currentMonth , value)
                    {
                        var testValue = inp.value;
                        if (value.length == 0 )
                        {
                            inp.value = '';
                        }
                        else 
                        {
                             if (baseObject.dateType == "ddmmyy")
                                {
                                   inp.value = value + baseObject.dateDelimeter + currentMonth + baseObject.dateDelimeter + currentYear;
                                }
                                else if (baseObject.dateType == "mmddyy")
                                {
                                    inp.value = currentMonth + baseObject.dateDelimeter+  value + baseObject.dateDelimeter + currentYear;
                                }
                                else if (baseObject.dateType == "yymmdd")
                                {
                                    inp.value = currentYear + baseObject.dateDelimeter +  currentMonth + baseObject.dateDelimeter +  value;
                                }
                        }
                        if (testValue != inp.value)
                        {
                            try{inp.onchange();}catch(e){}
                        }
                    }
                    function onGetValue()
                    {
                        var arr = getElementValue().split(baseObject.dateDelimeter);
                        
                        if (arr.length == 3)
                        {
                            if (baseObject.dateType == "ddmmyy")
                            {
                                return [arr[2],arr[1],arr[0]];
                            }
                            else if (baseObject.dateType == "mmddyy")
                            {
                                return [arr[2],arr[0],arr[1]];
                            }
                            else if (baseObject.dateType == "yymmdd")
                            {
                                return [arr[0],arr[1],arr[2]];
                            }
                        }
                        return null;
                    }
                                        oCalender1.getValue = onGetValue;
                    oCalender1.onChange = onChange;
                    oCalender1.closeWithChange = true;
                                        oCalender1.initialize();                    inp.onclick = addEvent(base.onClick);
				    inp.onchange = addEvent(base.onChange);
                    img.style.cursor = 'pointer';	
				    img.onclick = oCalender1.open;
				    inp.name = base.key;
		            inp.id = base.key ; 
		            
				}
				if (base.title){
				    base.titleTooltip.initialize(base.title,inp , true);
				    base.titleTooltip.initialize(base.title,img , true);
			    }
				innerHTML = null;
			    break;										case 'addatecontrol':				if (!document.addEventListener ){ 					innerHTML = '<INPUT  maxLength=12 id="' + base.key + '" name="' + base.key + '"  Style="WIDTH: ' + base.width + '; HEIGHT: ' + base.height + ';" Class="' + base.elementCss + '" value="' +  getValue() +  '">';					innerHTML += '<A style=\'cursor:pointer\' onclick="ShowCalendar(document.getElementById(\'dateimg' + base.key + '\'),document.getElementById(\'' + base.key + '\'),null, \'' + '\', \'' +  '\')" ';
					innerHTML += 'onclick=event.cancelBubble=true;>';
					innerHTML += '<IMG  osnmousedown="javascript: if(document.getElementById(\''+ base.key + '\').value.length == 0) document.getElementById(\'' + base.key  + '\').value=\'' + base.minValue + '\'"  ';
					innerHTML += 'align=top border=0 height=21 id="dateimg' + base.key + '" src="' + baseObject.virtualDirectory + 'jdm/webcontrols/Calender/calendar.gif" style="POSITION: relative  " width=34></A>';					 
					base.Element = getTable();					var oRow = base.Element.insertRow(0);
					var oCell = oRow.insertCell(0); 
					oCell.innerHTML = innerHTML;
					oCell.getElementsByTagName('input')[0].onclick = addEvent(base.onClick);
					oCell.getElementsByTagName('input')[0].onpropertychange = addEvent(base.onChange);
					if (base.title){
						base.titleTooltip.initialize(base.title,oCell.getElementsByTagName('input')[0] , true);
						oCell.getElementsByTagName('img')[0].style.cursor = 'pointer';
						base.titleTooltip.initialize(base.title,oCell.getElementsByTagName('img')[0] , true);
					}
					if (base.readOnly){
						base.Element.disabled = true; 
						oCell.disabled = true; 
						oCell.getElementsByTagName('a')[0].href = 'Javascript: ';
						oCell.getElementsByTagName('input')[0].disabled = true;
					} 
					innerHTML = null;		
					break;
				}		
			case 'adbutton':
				var oButton= new button();
				oButton.virtualDirectory = baseObject.virtualDirectory + 'jdm/webcontrols/images/'; 
	            oButton.image = base.image;
	            oButton.label = base.value;
	            if (base.runatServer )
	                oButton.onClick = fireButtonEvent;
	            else 
	                oButton.onClick = addEvent(base.onClick);
	                
	            oButton.key = base.key;
	            base.Element = oButton.getButton();
				break;				
			default :
				innerHTML = 'INPUT';
				base.Element = document.createElement(innerHTML);
				base.Element.type = 'text';
				base.Element.value = getValue();
				setPropertys();
				break;
		}
		
		// lisataan mahdolliset lapsi elementit 
		if (base.children.length > 0 ){
		    if (base.elementType == 'adselectmultiple' )
		    {
		        base.Element.selectedIndex = -1;
		    } 
			for (c = 0;c<base.children.length;c++){						
				oChild = base.children[c];
				if (base.elementType == 'adradio' | base.elementType == 'adcheckbox' ){				
					otable = getTable();
					oCCell = oCRow.insertCell(oCRow.cells.length);
					oChildElement = '<input type="';
					oChildElement +=  base.elementType.replace('ad','') + '" ';	
					if ( (',' + getValue() + ',').toString().indexOf(',' + oChild.value + ',') > -1 ) 	
						oChildElement += ' checked ';
					oChildElement += 'name="' + base.key + '" value="' + oChild.value + '">';
					if (base.children.labelLocation == 'left'){ 
						oCCell.style.textAlign = 'right';
						cells = fillTable(otable,oChild.key,oChildElement);
						cells[0].className = base.labelCss; 
						cells[0].style.width = "100%"
						cells[0].style.textAlign = 'right';
						setEvents(oChild , cells[1].getElementsByTagName('input')[0]); 
					} else {
						oCCell.style.textAlign = 'left';
						cells = fillTable(otable,oChildElement,oChild.key);
						cells[1].className = base.labelCss; 
						cells[1].style.width = "100%"
						cells[1].style.textAlign = 'left';
						setEvents(oChild , cells[0].getElementsByTagName('input')[0]); 								
					}
					oCCell.appendChild(otable);	
					try{if (base.children.length < base.children.inLine) cW = (base.width / base.children.length); else cW = (base.width / base.children.inLine); otable.style.width = cW;}catch(e){} 
					inline ++; 
					if (inline == base.children.inLine){
						inline = 0;
						oCRow = base.Element.insertRow(base.Element.rows.length);		
					} 
				} else if (base.elementType == 'adselect' | base.elementType == 'adselectmultiple' | base.elementType == 'adlistbox' | base.elementType == 'adcontrol' ){ 
					option = document.createElement('option');
					option.text = oChild.key;
					option.value = oChild.value;
					option.title = oChild.title;
					if (base.Element.options)
					{
					    base.Element.options[c] = option;
					}
					
					if ( (',' + getValue() + ',').toString().indexOf(',' + oChild.value.toString() + ',') > -1 ){
						option.selected = true; 
						if (base.elementType == 'adselect' | base.elementType == 'adlistbox')
						    base.Element.selectedIndex = c;
					}
					oChild.Element = option;
				} 	
			}			
            
            if (base.elementType == 'adcontrol')
            {
                if (document.attachEvent){ 
                    base.Control.label.attachEvent('onpropertychange' , setCondition);        
                } else {
                    base.Control.label.addEventListener('change' , setCondition,false);        
                }
            }
            else if (base.elementType == 'adselect' | base.elementType == 'adselectmultiple' | base.elementType == 'adlistbox'  ) 
            {
                if (document.attachEvent){ 
                    base.Element.attachEvent('onchange' , setCondition);        
                } else {
                    base.Element.addEventListener('change' , setCondition,false);        
                }
            }
            else 
            {
                if (document.attachEvent){ 
                    base.Element.attachEvent('onclick' , setCondition);        
                } else {
                    base.Element.addEventListener('click' , setCondition,false);        
                }
            }
            setCondition();
			if (inline != 0 && innerHTML == 'inputgroup'){ 
				oCCell = oCRow.insertCell(oCRow.cells.length);
				oCCell.colSpan = base.children.inLine - inline  ;
				oCCell.innerHTML = '&nbsp;&nbsp;';
			}				
		}
	}
	function fireButtonEvent(){fireEvent("b_u_t_t_o_n" + base.key , base.key)};
	function setPropertys(simple,textarea,password){
		if (!simple){
			base.Element.name = base.key;
			base.Element.id = base.key ; 
			base.Element.onclick = addEvent(base.onClick);
			base.Element.onchange = addEvent(base.onChange);
			if (base.maxValue) try{base.Element.maxLength = base.maxValue;}catch(e){}	
		} 
	    
		if (base.title){base.titleTooltip.initialize(base.title,base.Element , true);}  
		if (base.width) base.Element.style.width = base.width;
		if (base.height) base.Element.style.height = base.height;
		if (!password)if (base.elementCss) base.Element.className = base.elementCss;
		
		if (!textarea)
		{
		    if (base.readOnly) base.Element.disabled = true; else base.Element.disabled = false;
		}
	}
	function setEvents(Child,Element){ 
		Element.style.cursor = 'default';
		Child.Element = Element;
		if (Child.onClick)Element.onclick = addEvent(Child.onClick); 
		else Element.onclick = addEvent(base.onClick)	
		if (Child.onChange) Element.onchange = addEvent(Child.onChange); 
		else Element.onchange = addEvent(base.onChange);
		if (Child.title){base.titleTooltip.initialize(Child.title,Element , true);}  
		if (Child.readOnly){Element.disabled = true;} else {Element.disabled = false;}  
	}
	function addEvent(Event){
		if (typeof Event == 'string'){
			return new Function(Event); 
		} else {
			return Event;
		}
	} 
    
    function setCondition(){
        
       
        var showElements = new Array(); 
        var hiddenElements = new Array(); 
        var selected; 
        var values;
        
        if (base.Control)
        {
            values = base.value.toString().split(',');
        }
        
        for (var i=0;i<base.children.length;i++){
            if (base.children[i].condition){
                if (base.Control)
                {
                    selected = false; 
                    for( var n=0;n<values.length;n++)
                    {
                        if (base.children[i].value.toString() ==  values[n].toString())
                        {
                            selected = true; 
                            break;
                        }
                    }
                }
                else 
                {
                    selected = base.children[i].Element.checked;
                    if (!selected) selected = base.children[i].Element.selected;
                }                
                if (selected){showElements = showElements.concat(base.children[i].condition.toString().split(','));} 
                else {hiddenElements = hiddenElements.concat(base.children[i].condition.toString().split(','));}
            } 
        }
         
        setVisibility(hiddenElements,'none');
        setVisibility(showElements,'');
        function setVisibility(Elements,display){
            var Element; 
            var conditionShow = "false"; 
            if (display != 'none') conditionShow = "true"; 
            for (var i=0;i<Elements.length;i++){
                Element =  baseObject.getElementByKey(Elements[i]);
                if (Element){
                    if (Element.trElement){Element.trElement.style.display = display;} 
                    else {Element.conditionShow = conditionShow;}
                }
            }
        }   
    }
}

function objChild(){
	this.Element;
	this.onClick;
	this.onChange;
	this.key;
	this.value; 
	this.title; 
	this.readOnly;
	this.condition; 
	var child = this; 
}


function setControlValues(parentFrameElement,value,label){
    var selectedControl = parentFrameElement.Element;
    if (selectedControl){
        selectedControl.Control.setHeader(label);
        selectedControl.value = value; 
    }
}
function closeControl(parentFrameElement){
     var selectedControl = parentFrameElement.Element.Control;
    if (selectedControl){
        selectedControl.closeControl();
    }
}
function getControlValue(parentFrameElement){
    var selectedControl = parentFrameElement.Element;
    if (selectedControl){
        return selectedControl.value;
    }
}