{

var bPerformIsRequired = true;
////////////////////////////////////////////////////////////////////////////////
// function isEmpty(s)														  //
//																			  //
//	checks if string is empty	or not					 					  //
////////////////////////////////////////////////////////////////////////////////

	function isEmpty(s)
	{
	    var bResult=0,regExp,index=0;;
	     regExp=/\s+/;                            
	     if ((s == null) || (s.length == 0))
		       bResult=1;
	     else {
	         for(var i=0 ; i<parseInt(s.length);i++){
	            if (regExp.test(s.charAt(i)))
	               index++;
		    }
		    if (index==parseInt(s.length))
		        bResult=1;
	     }  	 
	    //alert('isEmpty bResult='+bResult);
	    return(bResult);
	}
	
	// Returns true if character c is a digit 
	// (0 .. 9).
	
	function isDigit (c)
	{
	    var bResult=0;
	    if ((c >= "0") && (c <= "9")) 
	        bResult=1; 
	  return(bResult);
	}
	
	
	// Returns true if character is a-z or A-Z
	function isAlpha(ch)
	{
		return ( ('a'<= ch  && ch <='z') || ('A'<= ch && ch<='Z')  );
	}
	
	// isInteger (STRING s )
	// 
	// Returns true if all characters in string s are numbers.
	//
	// Accepts non-signed integers only. Does not accept floating 
	// point, exponential notation, etc.
	//
	// We don't use parseInt because that would accept a string
	// with trailing non-numeric characters.
	//
	// EXAMPLE FUNCTION CALL:     RESULT:
	// isInteger ("5")            true 
	// isInteger ("-5")           false
	// isInteger ("")             false
	// isInteger ("5")            true
	
	function isInteger (s)
	{   
	    var i,bResult=0,c;
	
	    if (!(isEmpty(s))){     
			// Search through string's characters one by one
			// until we find a non-numeric character.
			// When we do, return false; if we don't, return true.
	
			for (i = 0; i < s.length; i++)
			{   
			    // Check that current character is number.
			    c = s.charAt(i);
	
			    if (!isDigit(c)) break;		    
			}
			if (i==s.length) bResult=1;
		}
			// All characters are numbers.
	//alert('isInteger bResult='+bResult);
	    return(bResult);
	}
	
	// isSignedInteger (STRING s )
	// 
	// Returns true if all characters are numbers; 
	// first character is allowed to be + or - as well.
	//
	// Does not accept floating point, exponential notation, etc.
	//
	// We don't use parseInt because that would accept a string
	// with trailing non-numeric characters.
	//
	// For explanation of optional argument emptyOK,
	// see comments of function isInteger.
	//
	// EXAMPLE FUNCTION CALL:          RESULT:
	// isSignedInteger ("5")           true 
	// isSignedInteger ("-5")          true
	// isSignedInteger ("+5")          true
	// isSignedInteger ("")            false
	
	
	function isSignedInteger(s)
	{
	    var bResult=0,startPos = 0;
	    if (!(isEmpty(s))){
	        // skip leading + or -
	       if ( (s.charAt(0) == "-") || (s.charAt(0) == "+"))
	           startPos = 1;    
	       if (isInteger(s.substring(startPos, s.length)))
	            bResult=1;
	       
	  }
	  //alert('isSignedInteger bResult='+bResult);
	return(bResult);    
	}
	
	// isNonnegativeInteger (STRING s )
	// 
	// Returns true if string s is an integer >= 0.
	//
	
	function isNonnegativeInteger (s)
	{   
	    var bResult=0;
	    // a) s must be a signed integer, AND
	    // b) one of the following must be true:       
	    //    ii) this is a number >= 0
	
	     if ( isSignedInteger(s) && !(isEmpty(s))  && (parseInt (s) >= 0 ) )
	         bResult=1; 
	 return(bResult);
	}
	// isIntegerInRange (STRING s, INTEGER a, INTEGER b )
	// 
	// isIntegerInRange returns true if string s is an integer 
	// within the range of integer arguments a and b, inclusive.
	
	function isIntegerInRange (s, a, b)
	{
	    var bResult=0,num;
	   if (!(isEmpty(s))){
			// Catch non-integer strings to avoid creating a NaN below,
			// which isn't available on JavaScript 1.0 for Windows.
			if (isInteger(s)){
				// Now, explicitly change the type to integer via parseInt
				// so that the comparison code below will work both on 
				// JavaScript 1.2 (which typechecks in equality comparisons)
				// and JavaScript 1.1 and before (which doesn't).
				num = parseInt (s);
				if ((num >= a) && (num <= b))
				   bResult=1;
			}
		}
	    return(bResult);
	}
	
	// decimal point character differs by language and culture
	
	// isFloat (STRING s )
	// 
	// True if string s is an unsigned floating point (real) number. 
	//
	// Also returns true for unsigned integers. If you wish
	// to distinguish between integers and floating point numbers,
	// first call isInteger, then call isFloat.
	//
	// Does not accept exponential notation.
	//
	
	function isFloat (s)	
	{   
	    var i;
	    var seenDecimalPoint = false;
		var decimalPointDelimiter = ".";
		var groupDelimiter = ",";
		var minusSign = "-";
		var legalChar;
	
	    if (isEmpty(s))        
	        return (false);
	
		if (isNaN(parseFloat(s)))
		    return (false);
							
	    if (s == decimalPointDelimiter) return false;
	
	    // Search through string's characters one by one
	    // until we find a non-numeric character.
	    // When we do, return false; if we don't, return true.
	
	    for (i = 0; i < s.length; i++)
	    {   
	        legalChar = false;
	        
	        var c = s.charAt(i);
	
	        if ((c == decimalPointDelimiter) && !seenDecimalPoint)
	            { 
					seenDecimalPoint = true;
					legalChar = true;
				}		
			else if ((c == minusSign && i==0) || isDigit(c) || c == groupDelimiter)
				legalChar=true;			    
			else
				return false;
			}
	
	    // All characters are numbers.
	    return true;
	}
	
	//isNonnegativeFloat (STRING s [, BOOLEAN emptyOK])
	// 
	// Returns true if string s is an float >= 0.
	////////////////////////////////////////////////
	function isNonnegativeFloat(s)
	{
	    var bResult=false,num;
      
	    if (isFloat(s))
	    {
		    num=parseFloat(s);
		    if (num>=0)
			    bResult=true;
	    }
    	
	    return(bResult);
	}
	
	// isFloatInRange (STRING s, INTEGER a, INTEGER b )
	// 
	// isFloatInRange returns true if string s is an float 
	// within the range of float arguments a and b, inclusive.
	
	function isFloatInRange (s, a, b)
	{
	    var bResult=false,num;
	   if (!(isEmpty(s)))
	   {
			// Catch non-float strings to avoid creating a NaN below,
			// which isn't available on JavaScript 1.0 for Windows.
			if (isFloat(s))
			{
				// Now, explicitly change the type to float via parseFloat
				// so that the comparison code below will work both on 
				// JavaScript 1.2 (which typechecks in equality comparisons)
				// and JavaScript 1.1 and before (which doesn't).
				num = parseFloat (s);
				if ((num >= a) && (num <= b))
				   bResult=true;
			}
		}
	    return(bResult);
	}
	
	// isDay (STRING s)
	// 
	// isDay returns true if string s is a valid 
	// day number between 1 and 31.
	// 
	
	function isDay (s)
	{
	    var bResult=0;   
	    if (!(isEmpty(s)))
	        if (isIntegerInRange (s, 1, 31))
	            bResult=1;
	    // alert('isDay bResult='+bResult);
	    return(bResult);
	}
	
	// isMonth (STRING s)
	// 
	// isMonth returns true if string s is a valid 
	// month number between 1 and 12.
	//
	
	function isMonth (s)
	{ 
	    var bResult=0;  
	        if (!(isEmpty(s)))
	            if (isIntegerInRange (s, 1, 12))
	                bResult=1;
	   //alert('isMonth bResult='+bResult);
	  return(bResult);
	}
	
	// isYear (STRING s )
	// 
	// isYear returns true if string s is a valid 
	// Year number.  Must be 4 digits only.
	// 
	// For Year 2000 compliance, you are advised
	// to use 4-digit year numbers everywhere.
	//
	// And yes, this function is not Year 10000 compliant, but 
	// because I am giving you 8003 years of advance notice,
	// I don't feel very guilty about this ...
	//
	// For B.C. compliance, write your own function. ;->
	
	function isYear (s)
	{ 
	    var bResult=0; 
	    //alert('isYear s='+s);
	    if (!(isEmpty(s)))  
	        if (isNonnegativeInteger(s))
	            if (s.length == 4)
	                bResult=1;
	    // alert('isYear bResult='+bResult);
	    return(bResult);
	}
	////////////////////////////////////////////////////////////////////////////////
	// function isLeapYear(y)													  //
	//																			  //
	//	checks if year is leap or not 											  //
	////////////////////////////////////////////////////////////////////////////////
	function isLeapYear(y)
	{
	    var bResult=0;
		if (y%4 == 0) {
			bResult = 1;
			if (y%100 == 0) {
				bResult = 0;
				if (y%400 == 0)
					bResult = 1;
			}
		}
	return(bResult);	
	}
	////////////////////////////////////////////////////////////////////////////////
	// function isLeapYear(y)													  //
	//																			  //
	//	checks if year is leap then returns 28 else 29							  //
	////////////////////////////////////////////////////////////////////////////////
	function daysInFebruary(year) 
	{        
	    var iNumberOfDays;
		if (isLeapYear(year) == 0)
	        iNumberOfDays=28;
		else
			iNumberOfDays=29;
			
	    return(iNumberOfDays);
	}
	
	// isDate (STRING year, STRING month, STRING day)
	//
	// isDate returns true if string arguments year, month, and day 
	// form a valid date.
	// 
	
	function isDate (year, month, day)
	{
	    var bResult=0,intYear,intMonth,intDay,daysInMonth;
	    // catch invalid years (not 2- or 4-digit) and invalid months and days.
	    if (isYear(year, false) && isMonth(month, false) && isDay(day, false)){
			// Explicitly change type to integer to make code work in both
			// JavaScript 1.1 and JavaScript 1.2.
			intYear = parseInt(year);
			intMonth = parseInt(month);
			intDay = parseInt(day);
	        daysInMonth = new Array(12);
			daysInMonth[1] = 31;
			daysInMonth[2] = 29;   // must programmatically check this
			daysInMonth[3] = 31;
			daysInMonth[4] = 30;
			daysInMonth[5] = 31;
			daysInMonth[6] = 30;
			daysInMonth[7] = 31;
			daysInMonth[8] = 31;
			daysInMonth[9] = 30;
			daysInMonth[10] = 31;
			daysInMonth[11] = 30;
			daysInMonth[12] = 31;
	
			// catch invalid days, except for February
			if (((intDay <= daysInMonth[intMonth]) && (intMonth != 2)) || ((intMonth == 2) && (intDay <= daysInFebruary(intYear))))
			   //alert('daysInFebruary(intYear)='+daysInFebruary(intYear));
			   //alert('daysInFebruary(intYear)='+daysInFebruary(intYear));		     
					bResult=1;
			else showDailog(13);		
				
			
	    }
	    else showDailog(10);
	    //    alert('isDate bResult='+bResult);
	   return(bResult);
	}
	
	
	////////////////////////////////////////////////////////////////////////////////
	// function NullSafe(s)									     				  //
	//																			  //
	//	checks if string is null if it is return empty string					  //
	////////////////////////////////////////////////////////////////////////////////
	
	function NullSafe(s)
	{
		if (isEmpty(s)) {
			s='';
		}
		return(s);
	}
	
	/////////////////////////////////////////////////////////////////////////////////
	function validateFields(lFrameNum,ToScroll,GetMessage,ChangeClassName)
	{
		var oParentWindow, oCheckedWindow;
		//var oAdditionalDataWindow;
		
		if (ToScroll==null) ToScroll=true;
		if (GetMessage==null) GetMessage=true;
		if (ChangeClassName==null) ChangeClassName=true;

		oParentWindow = (window.parent!=null ? window.parent : window);
					
		oCheckedWindow = window;

		// Mark All field as OK
		setAllFieldsOK();
		
		return(checkWindow(oCheckedWindow,oParentWindow,lFrameNum,ToScroll,GetMessage,ChangeClassName));
		
	/*	if (frameExists(window,'Frame8030100')==true)
		{
			if(checkWindow(oCheckedWindow,oParentWindow,lFrameNum,ToScroll,GetMessage,ChangeClassName))
			{
				oAdditionalDataWindow = window.frames['Frame8030100'];
				return(checkWindow(oAdditionalDataWindow,oParentWindow,8030100,ToScroll));
			}	
			return(false);			
		}
		else
		{	
			return(checkWindow(oCheckedWindow,oParentWindow,lFrameNum,ToScroll,GetMessage,ChangeClassName));
		}*/

	}
		
		
	function validateForm(Form, NotifyError, ScrollToField)
	{
		var item;
		var bResult = true;
		
		if (NotifyError==null) 		NotifyError = true;
		if (ScrollToField==null) 	ScrollToField = true;
		if (Form == null) 			Form = document.forms[0];

		if (Form == null) 
		{
			alert("Internal error : no form found.");
			return (false);
		}

		for(var iIndex=Form.elements.length-1 ; iIndex>=0 ; iIndex--)
		{
			var oItem = Form.elements.item(iIndex);			
			bResult &= validateOneField(oItem, NotifyError, ScrollToField)			
		}
		
		return(bResult);	
	}


		function checkWindow(oCheckedWindow,oParentWindow,lFrameNum,ToScroll,GetMessage,ChangeClassName)
		{
			var item;
			var form;
			var findex;
			var iindex;
			var bReadOnly=false;
			var iScale ;
			var arrMsg = new Array();
			
			if (ToScroll==null) ToScroll=true;
			if (GetMessage==null) GetMessage=true;
			if (ChangeClassName==null) ChangeClassName=true;
	//alert("checking...");
	
	
			for(findex=0 ; findex<oCheckedWindow.document.forms.length ; findex++)
			{
				form = oCheckedWindow.document.forms.item(findex);
				
				if (bPerformIsRequired)
				{
				    
				    for(iindex=0;iindex<form.elements.length;iindex++)
				    {
					    item = form.elements.item(iindex);    					
										
						if (item.getAttribute('required') != 'false'
						    && (item.getAttribute('required') == 'true'
						    || (item.className.search(new RegExp ('MandatoryField', 'gi'))=='0')
						    || (item.className.search(new RegExp ('MandatoryReadOnlyField', 'gi'))=='0'))
						)
						{   
						    if(	isEmpty(item.value)==1 || 
			                    ( (item.getAttribute('EXTENDED') != "1" && item.tagName == 'SELECT' && item.value == -1) ||
			                      (item.getAttribute('EXTENDED') == "1" && item.tagName == 'SELECT' && item.value == "")))
		                    {
								//alert(item.id);
								
								if(ChangeClassName)
									item.className=changeValidatedClassName(item.className);
								if(ToScroll)
									scrollToItemLocation(item,lFrameNum,oParentWindow);
								if(GetMessage)
									Msgbox(1090001);
								
								return(false);
							}
						}
					
						if ((item.className.search(new RegExp ('ValidatedMandatoryField', 'gi'))=='0')||
								(item.className.search(new RegExp ('ValidatedMandatoryReadOnlyField', 'gi'))=='0'))
						{
							if(item.value.length>0)
								item.className=changeClassName(item.className);
						}	
					}			
				}
				
				for(iindex=0;iindex<form.elements.length;iindex++)
				{
					item = form.elements.item(iindex);
					if(! validateOneField(item,lFrameNum,oParentWindow,ToScroll,GetMessage,ChangeClassName))
						return(false);
				}
			}
			return(true);	
		}
		
		
		function changeClassName(sOldClassName)
		{
			switch (sOldClassName)	
			{
				case 'ValidatedMandatoryField':
					return('MandatoryField');
				case 'ValidatedMandatoryReadOnlyField':
					return('MandatoryReadOnlyField');
				case 'ValidatedField':
					return('NormalField');
				case 'ValidatedRealOnlyField':
					return('ReadOnlyField');
				default :
					return (sOldClassName);
			}
		}
		
		function changeValidatedClassName(sOldClassName)
		{
			Beep();
			switch (sOldClassName)	
			{
				case 'NormalField':
					return('ValidatedField');
				case 'MandatoryReadOnlyField':
					return('ValidatedMandatoryReadOnlyField');
				case 'MandatoryField':
					return('ValidatedMandatoryField');
				case 'ReadOnlyField':
					return('ValidatedRealOnlyField');
				case '':
					return('ValidatedField');
				default :
					return (sOldClassName);
			}
		}
		
		function scrollToItemLocation(item,lFrameNum,oWindow)
		{
			var parentItem;
	
	
			if (isNaN(lFrameNum))
				lFrameNum=m_PageID;
			
			if (oWindow)
			{
				if ("function" == typeof(oWindow.returnTo))
					oWindow.returnTo(lFrameNum);
			}
			else
			{
				if ("function" == typeof(returnTo))
					returnTo(lFrameNum);
			}
			
	
			parentItem=item;
			while	(parentItem.tagName != 'HTML')
			{
				parentItem=parentItem.parentNode;
				if (parentItem.tagName=='TABLE')
				{
					if (parentItem.className != 'Shown')
					{
						if (parentItem.tagName == 'TABLE')
						{
								if (parentItem.className == 'Hidden')
									parentItem.className = 'DataDiv';
								else
									if (parentItem.className != 'Shown')
										if (parentItem.parentNode.tagName != 'DIV')
											parentItem.parentNode.className='DataDiv';
						}
					}
				}
			}
			item.scrollIntoView();
		}
	
	
	function isMandatoryField(Field)
	{
		var bResult = false;
		
		try
		{
			bResult =  (Field.getAttribute("required") != 'false' &&
						(Field.getAttribute("required") == 'true' || 
						Field.className.search(new RegExp ('MandatoryField', 'gi'))=='0' ||
						Field.className.search(new RegExp ('MandatoryReadOnlyField', 'gi'))=='0' ||
						Field.className.search(new RegExp ('ValidatedMandatoryField', 'gi'))=='0' ||
						Field.className.search(new RegExp ('ValidatedMandatoryReadOnlyField', 'gi'))=='0'
						)
					   );		
		}
		catch(e)
		{
			bResult = false;
		}
		
		return(bResult);
	}
	
	function validateOneField(lField,lFrameNum,oWindow,ToScroll,GetMessage,ChangeClassName)
	{
		var arrMsg = new Array();
		var bResult = true;

		arrMsg[0] = new String();
		
		if (ToScroll==null) ToScroll=true;
		if (GetMessage==null) GetMessage=true;
		if (ChangeClassName==null) ChangeClassName=true;
	
		lField.className = changeClassName(lField.className);
		
		//check mandatory field			
		if (isMandatoryField(lField) && bPerformIsRequired == true)
		{
			if(	isEmpty(lField.value)==1 || 
			( (lField.getAttribute('EXTENDED') != "1" && lField.tagName == 'SELECT' && lField.value == -1) || (lField.getAttribute('EXTENDED') == "1" && lField.tagName == 'SELECT' && lField.value == "")))
			{
				if (ChangeClassName) 
				    lField.className=changeValidatedClassName(lField.className);
				if (ToScroll) 
				    scrollToItemLocation(lField,lFrameNum,oWindow);
				if (GetMessage) 
				    Msgbox(1090001);
				
				return(false);				
			}
		}
			
		//check validity
		if (lField.className.toUpperCase()!='READONLYFIELD')
		{								
			
			if (lField.DATATYPE)
			{
				switch  (lField.DATATYPE)
				{
					case 'NUMBER' :
					case 'CURRENCY' :
					case '3'://adInteger
					case '5'://adDouble
					case '20'://adBigInteger
					case '131'://adNumeric
							if(!checkNumericData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName))
								return(false);
							break;

					case 'DATE':
					case '7'://adDate
							if(!checkDateData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName))
								return(false);
							break;
					
					case 'STRING':
					case '8'://adString
							if(!checkStringData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName))
								return(false);
							break
					case 'WEB_PAGE':
					case '10':
							if(!checkWebData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName))
								return(false);
							break
					case 'EMAIL_ADDRESS':
					case '12':
							if(!checkMailData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName))
								return(false);
							break
					default:
				}
			}
				/*
				if(lField.MAX_LENGTH || lField.maxLength)
				{
					if(!checkLength(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName))
						return(false);
				}*/
				
		}
		
		if (lField.RegEx != null)
		{
			bResult = execRegExValidation(lField);
							
			if(!bResult)
			{
				if(ChangeClassName) lField.className=changeValidatedClassName(lField.className);
				if(ToScroll) scrollToItemLocation(lField,lFrameNum,oWindow);
				if(GetMessage)
				{
					arrMsg[0] = lField.RegExError;					
					Msgbox(1090043, arrMsg);
				}
				return(bResult);
			}
		}
		
		//If field has special check in its JS return its result
		var bFromSpecialCheck = false;

		bFromSpecialCheck = eval(lField.getAttribute("onValidate"))
		
		if(bFromSpecialCheck!=null)
		{	
			if (!cBool(bFromSpecialCheck))
			{
				if(ChangeClassName)
					lField.className=changeValidatedClassName(lField.className);
				if(ToScroll)					
					scrollToItemLocation(lField,lFrameNum,oWindow);
				return(false);
			}
			else
				return(true);		
		}
		else
		{
			return(true);		
		}	
		
	}//End of validateOneField()
	
	
	function execRegExValidation(Field)
	{
		var sRegEx = null, sValue = "";
		var oRegExp = null;
		var bResult = true;
				
		if(Field.RegEx == null) return(bResult);
		
		sRegEx = Field.RegEx;
		sValue = Field.value;
		
		oRegExp = new RegExp(eval(sRegEx));		
		bResult = oRegExp.test(sValue);
				
		return(bResult);		
	}

	function isWholeNumberOnly(fld)
	{
	    if (fld.value != '' || fld.value != null)
	    {
	        if (!(fld.value.match(new RegExp("^((\\d?\\d?\\d)?)*\\d?\\d?\\d$", ""))))
	        {
	            alert('Please enter only whole number in this field!');
	            fld.value = '0';
	            fld.focus();
	        }
	    }
	}
	function checkLength(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName)
	{
		var iLength = -1;		
		var arrMsg = new Array();
		var oBroker = getBroker();
		
		if(oBroker == null) return;		
		
		if (ToScroll==null)
			ToScroll=true;
		if (GetMessage==null)
			GetMessage=true;
		if (ChangeClassName==null)
			ChangeClassName=true;
		
		var bIsTextArea  = lField.tagName.match(/textarea/i);
		var bIsInputText = lField.type.match(/text/i);
		
		if(!(bIsInputText || bIsTextArea)) return true;
		
		if ( isNaN(lField.maxLength) && isNaN(lField.MAX_LENGTH))
			return(true);
		
		
		if(isEmpty(lField.value)) iLength = 0;
		else iLength = oBroker.getLength(lField.value);
				
		if (!isNaN(lField.maxLength))
		{							
			if (parseFloat(iLength) > parseFloat(lField.maxLength))
			{
				if (ChangeClassName)
					lField.className=changeValidatedClassName(lField.className);
				arrMsg[0]=lField.maxLength;
				
				if(ToScroll)											
					scrollToItemLocation(lField,lFrameNum,oWindow);
				if(GetMessage)
					Msgbox (1090030, arrMsg);
				return(false);
			}
			
		}
		
		if (!isNaN(lField.MAX_LENGTH))
		{
			if (parseFloat(iLength) > parseFloat(lField.MAX_LENGTH))
			{
				if (ChangeClassName)
					lField.className=changeValidatedClassName(lField.className);
				arrMsg[0]=lField.MAX_LENGTH;
				
				if(ToScroll)											
					scrollToItemLocation(lField,lFrameNum,oWindow);
				if(GetMessage)
					Msgbox (1090030, arrMsg);
				return(false);
			}
		}
		
		return(true);		
	}
	
	function checkStringData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName)
	{		 
	    var iLength = -1;
		var arrMsg = new Array();		
		var oBroker = getBroker();
		
		if(oBroker == null) return;				
		
		if (ToScroll==null)
			ToScroll=true;
		if (GetMessage==null)
			GetMessage=true;
		if (ChangeClassName==null)
			ChangeClassName=true;
		
		var bIsTextArea  = lField.tagName.match(/textarea/i);
		var bIsInputText = lField.type.match(/text/i);
		
		if(!(bIsInputText || bIsTextArea)) return true;
			
		if(isEmpty(lField.value)) iLength = 0;
		else 
		{
			iLength = oBroker.getLength(lField.value);
			
			/*
			//--For 3.9 Check only ADP data length as UNICODE			
			if(lField.ADP_TYPE!=null)
			{
				iLength = oBroker.getLength(lField.value);
			}
			else
			{
				iLength = lField.value.length;
			}*/
		}	
		if (!isNaN(lField.maxLength))
		{							
			if (parseFloat(iLength) > parseFloat(lField.maxLength))
			{
				if (ChangeClassName)
					lField.className=changeValidatedClassName(lField.className);
				arrMsg[0]=lField.maxLength;
				
				if(ToScroll)											
					scrollToItemLocation(lField,lFrameNum,oWindow);
				if(GetMessage)
					Msgbox (1090030, arrMsg);
				return(false);
			}			
		}
		
		if (!isNaN(lField.MAX_LENGTH))
		{
			if (parseFloat(iLength) > parseFloat(lField.MAX_LENGTH))
			{
				if (ChangeClassName)
					lField.className=changeValidatedClassName(lField.className);
				arrMsg[0]=lField.MAX_LENGTH;
				
				if(ToScroll)											
					scrollToItemLocation(lField,lFrameNum,oWindow);
				if(GetMessage)
					Msgbox (1090030, arrMsg);
				return(false);
			}
		}
										
		if (!isNaN(lField.MIN_LENGTH))
		{
			if (parseFloat(iLength) < parseFloat(lField.MIN_LENGTH))
			{
				if (ChangeClassName)
					lField.className=changeValidatedClassName(lField.className);
				arrMsg[0]=lField.MIN_LENGTH;
				if(ToScroll)											
					scrollToItemLocation(lField,lFrameNum,oWindow);
				if(GetMessage)
					Msgbox (1090034, arrMsg);
				return(false);
			}
		}
		return(true);
	}//End of checkStringData()
	/////
	function checkNumericData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName)
	{
	    var arrMsg = new Array();
	
		if (ToScroll==null)
			ToScroll=true;
		if (GetMessage==null)
			GetMessage=true;
		if (ChangeClassName==null)
			ChangeClassName=true;
		
		var iFieldValue;
		if(lField.DATATYPE == "CURRENCY")
			iFieldValue = ConvertFromCurrencyFormat(lField.value);
		else
		  	iFieldValue = lField.value;
			
		//Check Number Validity
		if (!isFloat(iFieldValue) && iFieldValue.length>0)
		{
			if (ChangeClassName)
				lField.className=changeValidatedClassName(lField.className);
			if(ToScroll)									
				scrollToItemLocation(lField,lFrameNum,oWindow);
			if(GetMessage)
				Msgbox (1090017);
			return(false);
		}
	/*		else
			{
				lField.className=changeClassName(lField.className);
			}
	*/
	
		var bMultiMeasurment = eval(lField.getAttribute("IS_MULTI_MEASURMENT"));						
		var MAX_SERVER_UNIT_VALUE = 9999999999.99999;
	
		if (bMultiMeasurment!=null)//Its MultiMesurment Field
		{
			var nResult = ConvertToServerUnits(lField);
			
			if(parseFloat(nResult)>parseFloat(MAX_SERVER_UNIT_VALUE))
			{
				if (ChangeClassName)
					lField.className=changeValidatedClassName(lField.className);
				
				arrMsg[0]=ConvertToClientUnits(MAX_SERVER_UNIT_VALUE,lField,false)+ ' ' +  getMultiMeasurmentName(lField);
	
				if(ToScroll)
					scrollToItemLocation(lField,lFrameNum,oWindow);
				if(GetMessage)
					Msgbox (1090062, arrMsg);
				return(false);
			}
	/*		else
			{
				lField.className=changeClassName(lField.className);
			}
	*/
		}
		else //Its regular Number field Check MAX_VAL
		{
			if (!isNaN(lField.MAX_VAL))
			{
				if (parseFloat(iFieldValue) > parseFloat(lField.MAX_VAL))
				{
					if (ChangeClassName)
						lField.className=changeValidatedClassName(lField.className);
	
					arrMsg[0]=lField.MAX_VAL;
	
					if(ToScroll)											
						scrollToItemLocation(lField,lFrameNum,oWindow);
					if(GetMessage)
						Msgbox (1090019, arrMsg);
					return(false);
				}
	/*		else
			{
				lField.className=changeClassName(lField.className);
			}
	*/
			}
		}
		iScale=iFieldValue.indexOf('.');
		
		if (!isNaN(lField.SCALE))
		{
			if (iScale > '-1')
			{
				if (parseInt(iFieldValue.length - iScale-1)>parseInt(lField.SCALE))
				{
					if (ChangeClassName)
						lField.className=changeValidatedClassName(lField.className);
	
					arrMsg[0]=lField.SCALE;
	
					if(ToScroll)											
						scrollToItemLocation(lField,lFrameNum,oWindow);
					if(GetMessage)
						Msgbox(1090018,arrMsg);
					return(false);
				}
	/*		else
			{
				lField.className=changeClassName(lField.className);
			}
	*/
			}
		}
		if (!isNaN(lField.MIN_VAL))
		{
			if (parseFloat(iFieldValue)  < parseFloat(lField.MIN_VAL))
			{
				if (ChangeClassName)
					lField.className=changeValidatedClassName(lField.className);
	
				arrMsg[0]=lField.MIN_VAL;
	
				if(ToScroll)										
					scrollToItemLocation(lField,lFrameNum,oWindow);
				if(GetMessage)
					Msgbox (1090020,arrMsg );
				return(false);
			}
	/*		else
			{
				lField.className=changeClassName(lField.className);
			}
	*/
		}	
        if (!CheckAttribution(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName)) return (false);		
        
		return(true);
	}//End of checkNumericData()
	////
	function checkDateData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName)
	{
	    var arrMsg = new Array();
	/*
		if (ToScroll==null)
			ToScroll=true;
		if (GetMessage==null)
			GetMessage=true;
		if (ChangeClassName==null)
			ChangeClassName=true;
		*/
		if (lField.value.length)
		{
			if (!CheckDate(lField.value))
			{
				/*if (ChangeClassName)
					lField.className=changeValidatedClassName(lField.className);
				if(ToScroll)										
					scrollToItemLocation(lField,lFrameNum,oWindow);
				if(GetMessage)
					Msgbox (1090014);*/
				handleFieldError(lField,ChangeClassName,ToScroll,GetMessage,1090014,lFrameNum,oWindow)	
				return(false);
			}
	/*		else
			{
				lField.className=changeClassName(lField.className);
			}
	*/
			
		}	
		// nir: new functionalty for dates
		if (!CheckAttribution(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName)) return (false);
		
		return(true);
	}//End of checkDateData()
	
	function CheckAttribution(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName)
	{
	    var bResult = true;
	    var iDays = 0;
		var sAttributionField = lField.getAttribute('ATTRIBUTED_FIELD');
		var sAttributionOperator = lField.getAttribute('ATTRIBUTION_OPERATOR');
		var bIsDate=null;
		
		if (sAttributionField !=null && sAttributionOperator != null && lField.value.length>0)
		{
		    var oAttributionField = getDomElement(sAttributionField);
		    if (oAttributionField !=null)
		    {
		        if (oAttributionField.value.length > 0) 
		        {
		            var iMessage= 0;
				    switch  (lField.DATATYPE)
				    {
					    case 'NUMBER' :
					    case 'CURRENCY' :
					    case '3'://adInteger
					    case '5'://adDouble
					    case '20'://adBigInteger
					    case '131'://adNumeric
					        bIsDate= false;
                            iDays = parseFlout(oAttributionField.value) - parseFlout(lField.value);
                            break;
					    case 'DATE':
					    case '7'://adDate
					        bIsDate= true;
                            iDays = GetDayDifference(lField.value ,oAttributionField.value);							
                            if (iDays==null) return false;
                            break;
			        }

    		        
		            switch (sAttributionOperator)
		            {
		                case '>=':
		                {
		                    if (!(iDays>=0)) iMessage =(bIsDate)?1090092:1090096;
		                    break;
		                }
		                case '>':
		                {
		                    if (!(iDays>0)) iMessage =(bIsDate)?1090091:1090095;
		                    break;
		                }
		                case '<=':
		                {
		                    if (!(iDays<=0)) iMessage =(bIsDate)?1090093:1090097;
		                    break;
		                }
		                case '<':
		                {
		                    if (!(iDays<0)) iMessage =(bIsDate)?1090094:1090098;
		                }
		                default:
		                {
		                    iMessage= 0;
		                    break;
		                }
    		            
		            }
    		        
		            if (iMessage>0)
 				    {
 					    lField.className=changeValidatedClassName(lField.className);
			            scrollToItemLocation(lField,lFrameNum,oWindow);
			            var aMessage = new Array();
			            aMessage[0]= oAttributionField.value;
			            aMessage[1]= oAttributionField.value;
			            Msgbox(iMessage,aMessage);
 				        bResult= false;
 				    }	
 				}
		    }
		}
		return bResult;
	
	}
	
	function checkMailData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName)
	{
	    var arrMsg = new Array();
	
		if (ToScroll==null) ToScroll=true;
		if (GetMessage==null) GetMessage=true;
		if (ChangeClassName==null) ChangeClassName=true;
		
		if(!checkStringData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName))
			return(false);
	
		if(!ValidateEmail(lField.value))
		{
			if (ChangeClassName)
				lField.className=changeValidatedClassName(lField.className);
			if(ToScroll)										
				scrollToItemLocation(lField,lFrameNum,oWindow);
			if(GetMessage)
				Msgbox(1090067);
			return(false);
		}
		return(true);
	}//End of checkMailData()
	
	function checkWebData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName)
	{
	    var arrMsg = new Array();
	/*
		if (ToScroll==null)
			ToScroll=true;
		if (GetMessage==null)
			GetMessage=true;
		if (ChangeClassName==null)
			ChangeClassName=true;
		*/
		if(!checkStringData(lField,ToScroll,lFrameNum,oWindow,GetMessage,ChangeClassName))
			return(false);
		if(!validateWebAddress(lField.value))
		{
			/*if (ChangeClassName)
				lField.className=changeValidatedClassName(lField.className);
			if(ToScroll)										
				scrollToItemLocation(lField,lFrameNum,oWindow);
			if(GetMessage)
				Msgbox(1090069);*/
			handleFieldError(lField,ChangeClassName,ToScroll,GetMessage,1090069,lFrameNum,oWindow);	
			return(false);
		}	
		return(true);
	}//End of checkWebData()
	
	function handleFieldError(lField,ChangeClassName,ToScroll,GetMessage,msgID,lFrameNum,oWindow)
	{
		if (ToScroll==null)
			ToScroll=true;
		if (GetMessage==null)
			GetMessage=true;
		if (ChangeClassName==null)
			ChangeClassName=true;
		if (msgID==null)
			msgID=1090071;
	
		if (ChangeClassName)
			lField.className=changeValidatedClassName(lField.className);
		if(ToScroll)										
			scrollToItemLocation(lField,lFrameNum,oWindow);
		if(GetMessage)
			Msgbox(msgID);
	}
	
	// Email address must be of form a@b.c -- in other words:
	// * there must be at least one character before the @
	// * there must be at least one character before and after the .
	// * the characters @ and . are both required
	function ValidateEmail(sEmail)
	{
		var reEmail = /^.+\@.+\..+$/
	    if (isEmpty(sEmail))  return true;
	    return reEmail.test(sEmail);
	}//End of ValidateEmail()
	
	function validateWebAddress(sWebAddress)
	{  
	   var i,k,c;
	   k = 0;
	   
	   if ((sWebAddress == null) || (sWebAddress.length == 0)) return true;
	   
	   c = sWebAddress.charAt(0);
	   
	   if(!isDigit(c) && !isAlpha(c)) return false;
	 
		for (i = 1; i < sWebAddress.length; i++)
		{   
		  c = sWebAddress.charAt(i);
		  if (isDigit(c) || isAlpha(c) || (c=="/") || (c=="-") || (c=="_") || (c==".") || (c==":"))
		  {
		     if (c==".")
		     {
		       if (sWebAddress.charAt(i-1)==".")
					return false;
		       else  
					k = k + 1;
		     }
		  }     
		  else
		    return false;
		} 
		if(k < 2)
		  return false;
		  
		return true;
	}//End of validateWebAddress()
	
	//////////////////////
	function setAllFieldsOK()
	{
			var item;
			var form;
			var findex;
			var iindex;
			var oCheckedWindow;
	
			for(findex=0;findex<window.document.forms.length;findex++)
			{
				form = window.document.forms.item(findex);
				for(iindex=0;iindex<form.elements.length;iindex++)
				{
					item = form.elements.item(iindex);				
					item.className=changeClassName(item.className);
				}
			}
	
	}
		
	function checkDateForCalculation(dateField,ToScroll,GetMessage,ChangeClassName)
	{
	
		if (ToScroll==null)
			ToScroll=true;
		if (GetMessage==null)
			GetMessage=true;
		if (ChangeClassName==null)
			ChangeClassName=true;
		
	
		//Check if Date Field is Empty
		if(cBool(isEmpty(dateField.value)))
			return (false);
		
		return(validateOneField(dateField,null,null,ToScroll,GetMessage,ChangeClassName))

	}//End Of checkDateForCalculation(dateField,ToScroll)
	
	
	
	function setPrecision(sNumber,iDecimalPlaces)
	{
		var tStr=new String(sNumber);
		var iDot;
		
		if (isNaN(iDecimalPlaces))
			iDecimalPlaces=2;
			
		iDot=tStr.indexOf('.');
		
		if (iDot>0)
			return(tStr.substr(0,parseInt(iDot)+parseInt(iDecimalPlaces)+1));
		return(sNumber);
	}
	
	function cBool(vValue)
	{
		if (vValue==null)
			vValue='false';
			
		vValue=vValue.toString();
		
		switch (vValue.toUpperCase())
		{
			case "TRUE"		:
			case "YES"		:
			case "1"		:
			case 1			://alert('TRUE');
									 return(true);
									 break;
			case "FALSE"	:
			case "NO"		:
			case "0"		:
			case 0			://alert('FALSE');
									 return(false);
									 break;
			default			://alert(vValue + ' - Is Not Valid Value in cBool Function !!!'); 
									 return(false);
									 break;
		}
	}
	
	
		
	function fieldNullSafe(oField,defaultVal,dataType,change)
	{
		//if Field Not Empty
		//alert(oField.value + ' - ' + cBool(isEmpty(oField.value)) + ' isNaN - ' + isNaN(oField));
		if(!validateOneField(oField,null,null,false,false,false))
			return(false);
		
		if(!cBool(isEmpty(oField.value)))
		{
			return(true);
		}
		
		if (isNaN(dataType))
		{
			if(!isNaN(oField.DATATYPE))
				dataType=oField.DATATYPE;
			else
				dataType='STRING';
		}
	
		if(isNaN(defaultVal))
			if(!isNaN(oField.DEFAULT_VALUE))
				defaultVal=oField.DEFAULT_VALUE;
		//alert(dataType);	
		switch  (dataType)
		{
			case 'NUMBER' : 
			case '3'	://adInteger
			case '5'	://adDouble
			case '20'	://adBigInteger
			case '131'	://adNumeric
						if(isNaN(defaultVal))
							defaultVal=0;
						break;
			case 'DATE'	:
			case '7'	://adDate
						if(isNaN(defaultVal))
							defaultVal='';
						break;
			case 'STRING':
			case '8'	://adString
						if(isNaN(defaultVal))
							defaultVal='';
						break;
		}
		//If no Specific 
		if(!isNaN(change))
		{
			if(change)
				oField.value=defaultVal;
		}
		else
		{
			//alert('End - ' + defaultVal);
			oField.value=defaultVal;
		}
			
		return(defaultVal);
	}
	
	function unFormatNumber(sNumber)
	{
		var nStr,ntStr;       
	
		ntStr=sNumber; 
		do
		{
			nStr=ntStr;
			ntStr= nStr.toString().replace(',','');
		}while(nStr.toString()!=ntStr.toString())	
		
	 	return (nStr);
	}
	
	
	function createOption(text,val)
	{
		var objOption,objTextNode;
		objOption=document.createElement("option");	  	 
		objTextNode=document.createTextNode(text);   
		objOption.value=val;   
		objOption.insertBefore(objTextNode,null);
		return(objOption);
	}//End of createOption() 
	
	
	/*
	  Function name : formatNumber 
	  Input params  : sNumber - The number to be formatted
	*/
	function formatNumber(sNumber,nPoint)
	{
		nPoint = (nPoint==null) ? 0 : nPoint;
		sNumber = (sNumber==null) ? 0 : sNumber;

		var pos;
		var nNum = sNumber; 
		var nStr;       
		var bIsNegetive=false;
		
		
		if(nNum<0) 
		{
			nNum = Math.abs(nNum);
			bIsNegetive=true;
		}
		nStr=nNum.toString(); //Convert number to string
		
		pos = nStr.indexOf('.');
		if (pos == -1)
		{pos = nStr.length;	}
		
		while (pos > 0)
		{
			pos -= 3;
			if (pos <= 0) break;
			nStr = nStr.substring(0,pos) + ',' + nStr.substring(pos, nStr.length);
		}
		
		nStr = AddPrecision(nStr,nPoint);
		
		nStr = (bIsNegetive) ? '-' + nStr : nStr;				
		
	 	return (nStr);
	}		
	
	function AddPrecision(sNumber,nPoint)
	{
		var PointExist = ".";
		var nAfterPoint = 0;
		var sAfterPoint=""; 
		nPoint = (nPoint==null) ? 0 : nPoint;
		for (var i = 0; i < sNumber.length; i++)
		{   
	        var c = sNumber.charAt(i);
	        if (c == PointExist) 
			{
				nAfterPoint = sNumber.length-i-1 ;
				break;
			}
		}			
		if(nPoint>0)
		{
			var bFirst=true;			
			for(var i=nAfterPoint;i<nPoint;i++) 
			{
				if(bFirst) 
				{
					bFirst=false;
					if(i==0) sAfterPoint = ".";
				}
				sAfterPoint += "0";
				
			}
			if(sNumber=="") sNumber = 0;
			sNumber = sNumber + sAfterPoint;
		}
		
		return(sNumber);
	}
	/*
		Janna
		Function name : NumberDoubleFloat 
        Input params  : sNumber - The number 
					  : sPoint - String - format 
	*/
	function NumberDoubleFloat(sNumber,sPoint)
	{
		var PointExist = ".";
		var s = sNumber;
		if (sPoint=="")
		{
			sPoint=".0000";
		}
		for (i = 0; i < s.length; i++)
		{   
	        var c = s.charAt(i);
	 
	        if (c == PointExist)
	        { 		
				return(s);			
	        }
		}
		s=s + sPoint //".0000"
		return(s);
	}
	
	// dependency functions
	
	var iFilterID = 1;
    var iEnableID = 3;
    var iRequiredID = 2;
    var iVisibleID = 4;
			    
	
    function getAttributeName(ID, datatype)
    {
        // this will switch on the datatype if we need to return a naming convention
        return(ID);
    }
    
    function AttributeMandatory(ID)
    {
        for (var iIndex = 0; iIndex < m_arMandatoryFields.length; iIndex++)
		{
		    if(m_arMandatoryFields[iIndex]==ID) return true;
	    }
	    return false;
    }
    
    function dropdownOption(id, label)
    {
        this.ID             = id;
        this.Label          = label;
    }
    
    function parentField(ID, name, datatype, attributeOrigin)
    {
        this.ID               = ID;
        this.Name             = name;
        this.Datatype         = datatype;
        this.Origin           = attributeOrigin;
        
        this.DependentFields  = new Array();
    }

    function dependentField(ID, name, datatype)
    {
        this.ID             = ID;
        this.Name           = name;
        this.Datatype       = datatype;

        this.DependentTypes = new Array();
        this.ParentValues   = new Array();
        this.AllValues      = new Array();
    }

    function parentChildValues(parentValue, dependentValue, parentID, dependencyType)
    {
        this.ParentID           = parentID;
        this.ParentValue        = parentValue;
        this.DependentValue     = dependentValue;
        this.DependentType      = dependencyType;
    }
    
	
	function initFormDependency()
	{
	    if(typeof m_arDependencyParents == 'object') 
	    {
	        for (var iIndex = 0; iIndex < m_arDependencyParents.length; iIndex++)
		    {
		        checkDependency(m_arDependencyParents[iIndex].ID);
	        }
	    }
	    
	    if(typeof sectionArray == 'object') 
	    {
	        for (var iIndex = 0; iIndex < sectionArray.length; iIndex++)
		    {
		        var bConditionMet = false;
		    
		        for (var iIndexDependencies = 0; iIndexDependencies < sectionArray[iIndex].dependencies.length; iIndexDependencies++)
		            if(!bConditionMet)
		            {
		                //var oAttr = document.getElementById(sectionArray[iIndex].dependencies[iIndexDependencies].attrID)
		                if(document.getElementById(sectionArray[iIndex].dependencies[iIndexDependencies].attrID))
		                    bConditionMet = checkSectionDependency(sectionArray[iIndex].id, sectionArray[iIndex].dependencies[iIndexDependencies].attrID, sectionArray[iIndex].dependencies[iIndexDependencies].value);
		            }
		            
		        if(sectionArray[iIndex].dependencies.length>0)
                    for (var iIndexFields = 0; iIndexFields < sectionArray[iIndex].fields.length; iIndexFields++)
                    {
                        
                        for (var iIndexMandatoryFields = 0; iIndexMandatoryFields < m_arMandatoryFields.length; iIndexMandatoryFields++)
                        {
                    
                        
                            if(m_arMandatoryFields[iIndexMandatoryFields]==sectionArray[iIndex].fields[iIndexFields])
                            {
                                document.getElementById(sectionArray[iIndex].fields[iIndexFields]).className = (bConditionMet) ? "MandatoryField": "NormalField";
                            }
                        }
    		        }
		        
	        }
	    }
	}
	
	function SectionDependency(ID)
	{
	    if(typeof sectionArray != 'object') return;
	    
	    for (var iIndex = 0; iIndex < sectionArray.length; iIndex++)
		{
		    var bConditionMet = false;
		    
		    for (var iIndexDependencies = 0; iIndexDependencies < sectionArray[iIndex].dependencies.length; iIndexDependencies++)
		        if(!bConditionMet)
		        {
		            if(ID==sectionArray[iIndex].dependencies[iIndexDependencies].attrID)
		                bConditionMet = checkSectionDependency(sectionArray[iIndex].id, sectionArray[iIndex].dependencies[iIndexDependencies].attrID, sectionArray[iIndex].dependencies[iIndexDependencies].value);
		        }
		    
    		   
            if(sectionArray[iIndex].dependencies.length>0)
                for (var iIndexFields = 0; iIndexFields < sectionArray[iIndex].fields.length; iIndexFields++)
                {
                    
                    for (var iIndexMandatoryFields = 0; iIndexMandatoryFields < m_arMandatoryFields.length; iIndexMandatoryFields++)
                    {
                
                    
                        if(m_arMandatoryFields[iIndexMandatoryFields]==sectionArray[iIndex].fields[iIndexFields])
                        {
                            document.getElementById(sectionArray[iIndex].fields[iIndexFields]).className = (bConditionMet) ? "MandatoryField": "NormalField";
                        }
                    }
    		    }
		}
	}
	
	function checkSectionDependency(sectionID, fieldID, value)
	{
	    var oField = document.getElementById(fieldID);
	    var bConditionMet = false; 
	    
	    var sMasterValue = "~~~~";
	    
	    //check on coreValues
	    if(oField.getAttribute("ADP_TYPE")==7)
	    {
	        sMasterValue = oField.options[oField.selectedIndex].getAttribute("coreValue");
	    }
	    
	    if(oField)
	    {
	        bConditionMet = (value==oField.value || value==sMasterValue);
	        document.getElementById("sectionContainer" + sectionID).style.display = (bConditionMet) ? "" : "none" ;	        
	    }
	    
	    return (bConditionMet);
	}
	
	function checkDependency(ID)
    {
        if(typeof m_arDependencyParents == 'object')
        {
        
            for (var iIndex = 0; iIndex < m_arDependencyParents.length; iIndex++)
		    {
		        if (ID == m_arDependencyParents[iIndex].ID) // found it, this is a parent attr
			    {
			        // grab the parent attr object
			        var oChangedField = m_arDependencyParents[iIndex];
			        var sOrigin = oChangedField.Origin;
			        var iParentDataType = oChangedField.Datatype;
    			    
			        var sChangedFieldValue = null;
			        var bChangedFieldValue = false;
    			    
			        var oHiddenField = getDomElement("hidden_" + oChangedField.ID);
    			    
			        if(oHiddenField)
			        {
			            sChangedFieldValue = oHiddenField.value;
			            if (iParentDataType==5)
			                bChangedFieldValue = (sChangedFieldValue==1) ? true : false;
			        }
			        else
			        {
			            switch (iParentDataType)
			            {
			                case '5':
			                {
			                    if (getDomElement(oChangedField.ID) != null)
			                    {
			                        if(getDomElement(oChangedField.ID).type=="select-one")
			                        {
			                            sChangedFieldValue = getDomElement(oChangedField.ID).value;
			                        }
			                        else
			                        {
			                            if(getDomElement("hidden_" + oChangedField.ID))
			                                bChangedFieldValue = (getDomElement("hidden_" + oChangedField.ID).value==1) ? true : false;
			                            else
			                                bChangedFieldValue = (getDomElement(oChangedField.ID).checked) ? true : false;
			                        }
			                    }
			                    break;
			                }
			                default:
			                {
			                    if (getDomElement(((sOrigin=="core_form") ? "CMB_" : "") + oChangedField.ID) != null)
			                        sChangedFieldValue = getDomElement(((sOrigin=="core_form") ? "CMB_" : "") + oChangedField.ID).value;
			                    break;
			                }
			            }
			        }
    			    
			        if(null==sChangedFieldValue) sChangedFieldValue="";
    			    
			        // scroll through the array of dependent attrs
			        for (var iIndexChild = 0; iIndexChild < oChangedField.DependentFields.length; iIndexChild++)
		            {
    		            
		                var bMandatory = false;
    			    		            
		                // grab the current child attr js object
		                var oDependentField = oChangedField.DependentFields[iIndexChild];
		                var iDependentID = oDependentField.ID;
		                // current dependent field parent values array
		                var arParentValues = oDependentField.ParentValues;
		                var iDatatype = oDependentField.Datatype;
		                // current dependent form element

    		            
		                if(!bReadOnly)
		                {
		                    var oDependentFormField = getDomElement(iDependentID);
		                    var sDependentValue = '';
		                    if (oDependentFormField != null)
		                          sDependentValue = oDependentFormField.value;
		                }
    		            

		                for (var iIndexTypes = 0; iIndexTypes < oDependentField.DependentTypes.length; iIndexTypes++)
		                {
		                    var iType = oDependentField.DependentTypes[iIndexTypes];
    		                
		                    switch(parseInt(iType))
		                    {
		                        case iFilterID:
		                        {
                                    if (oDependentFormField != null && oDependentFormField.options != null)
                                    {
		                                oDependentFormField.options.length = 0;
                                        oDependentFormField.options[0] = new Option("--Not Selected--", getDomElement(oDependentField.ID).getAttribute("EXTENDED")=="1" ? "" : "-1");
		                                var iCounter = 1;
        		                        
		                                if(sChangedFieldValue=="")
		                                {
		                                    for (var iIndexDependentPair = 0; iIndexDependentPair < oDependentField.AllValues.length; iIndexDependentPair++)
	                                        {
	                                            oDependentFormField.options[iCounter] = new Option(oDependentField.AllValues[iIndexDependentPair].Label,oDependentField.AllValues[iIndexDependentPair].ID);
	                                            if(sDependentValue==oDependentField.AllValues[iIndexDependentPair].ID) oDependentFormField.options[iCounter].selected = true;
                                                iCounter++;
	                                        }
		                                }
		                                else
		                                {
		                                    for (var iIndexDependentPair = 0; iIndexDependentPair < arParentValues.length; iIndexDependentPair++)
	                                        {
	                                            if(sChangedFieldValue == arParentValues[iIndexDependentPair].ParentValue && arParentValues[iIndexDependentPair].DependentType==iFilterID)
	                                            {
	                                                for (var iIndex = 0; iIndex < oDependentField.AllValues.length; iIndex++)
	                                                { 
	                                                    if(oDependentField.AllValues[iIndex].ID==arParentValues[iIndexDependentPair].DependentValue)
	                                                    {
	                                                        oDependentFormField.options[iCounter] = new Option(oDependentField.AllValues[iIndex].Label,oDependentField.AllValues[iIndex].ID);
                                                            if(sDependentValue==oDependentField.AllValues[iIndex].ID) oDependentFormField.options[iCounter].selected = true;
                                                            iCounter++;
                                                        }
	                                                }
	                                            }
	                                        }
	                                    }
	                                }
	                                break;
		                        }
		                        case iRequiredID:
		                        { 
		                            sAsterixClassName = 'hidden' ;
	                                sClassName = 'NormalField' ;
    	                            
	                                for (var iIndexDependentPair = 0; iIndexDependentPair < arParentValues.length; iIndexDependentPair++)
                                    {
                                        if(arParentValues[iIndexDependentPair].DependentType==iRequiredID)
                                        {
                                            if(iParentDataType==7 || (iParentDataType==5 && getDomElement(oChangedField.ID) &&  getDomElement(oChangedField.ID).type=="select-one"))
                                            { 
                                                if(arParentValues[iIndexDependentPair].ParentValue==0 && getDomElement(oChangedField.ID).type!="select-one" && 
                                                ((getDomElement(oChangedField.ID).getAttribute('EXTENDED') == "1" && sChangedFieldValue!="") || (getDomElement(oChangedField.ID).getAttribute('EXTENDED') != "1" &&  sChangedFieldValue!=-1)))
                                                {
                                                    sAsterixClassName = 'shown' ;
                                                    sClassName = 'MandatoryField' ;
                                                    bMandatory = true;
                                                }
                                                else if(sChangedFieldValue == arParentValues[iIndexDependentPair].ParentValue) 
                                                {
                                                    sAsterixClassName = 'shown' ;
                                                    sClassName = 'MandatoryField' ;
                                                    bMandatory = true;
                                                }
                                                else if(iParentDataType==7 && arParentValues[iIndexDependentPair].ParentValue==0 && 
                                                ( (getDomElement(oChangedField.ID).getAttribute('EXTENDED') == "1" && sChangedFieldValue!="") ||  (getDomElement(oChangedField.ID).getAttribute('EXTENDED') != "1" &&  sChangedFieldValue!=-1) ))
                                                {
                                                    sAsterixClassName = 'shown' ;
                                                    sClassName = 'MandatoryField' ;
                                                    bMandatory = true;
                                                }
                                            }
                                            else if (iParentDataType==5)
                                            {
                                                if(bChangedFieldValue)
                                                {
                                                    sAsterixClassName = 'shown' ;
                                                    sClassName = 'MandatoryField' ;
                                                    bMandatory = true;
                                                }
                                            }
                                            else 
                                            {
                                                if(sChangedFieldValue != "")
                                                {
                                                    sAsterixClassName = 'shown' ;
                                                    sClassName = 'MandatoryField' ;
                                                    bMandatory = true;
                                                }
                                            }
                                        }
                                    }
    	                            
	                                if(getDomElement("SPAN_DEPENDENT_REQUIRED_" + iDependentID))
	                                    getDomElement("SPAN_DEPENDENT_REQUIRED_" + iDependentID).className = sAsterixClassName;
	                                if(getDomElement(iDependentID))
	                                    getDomElement(iDependentID).className = sClassName;
    	                            
	                                break;
		                        }
		                        case iEnableID:
		                        {
		                                bDisable = true ;
		                                sClassName = "hidden";
		                                sInputClassName = "DisabledTextInput";
    		                            
		                                for (var iIndexDependentPair = 0; iIndexDependentPair < arParentValues.length; iIndexDependentPair++)
	                                    {
	                                        if(arParentValues[iIndexDependentPair].DependentType==iEnableID)
	                                        {
	                                            if(iParentDataType==7 || (iParentDataType==5 && getDomElement(oChangedField.ID) &&  getDomElement(oChangedField.ID).type=="select-one"))
	                                            {
	                                                if(arParentValues[iIndexDependentPair].ParentValue==0 && getDomElement(oChangedField.ID).type!="select-one" && ((getDomElement(oChangedField.ID).getAttribute('EXTENDED') == "1" && sChangedFieldValue!="") || (getDomElement(oChangedField.ID).getAttribute('EXTENDED') != "1" &&  sChangedFieldValue!=-1)))
	                                                {
	                                                    bDisable = false ;
	                                                    sClassName = "shown";
	                                                }
	                                                else if(sChangedFieldValue == arParentValues[iIndexDependentPair].ParentValue) 
	                                                {
	                                                    bDisable = false ;
	                                                    sClassName = "shown";
	                                                }
	                                                else if(iParentDataType==7 && arParentValues[iIndexDependentPair].ParentValue==0 && ( (getDomElement(oChangedField.ID).getAttribute('EXTENDED') == "1" && sChangedFieldValue!="") ||  (getDomElement(oChangedField.ID).getAttribute('EXTENDED') != "1" &&  sChangedFieldValue!=-1) ))
	                                                {
	                                                    bDisable = false ;
	                                                    sClassName = "shown";
	                                                }
	                                            }
	                                            else if (iParentDataType==5)
	                                            {
	                                                if(bChangedFieldValue)
	                                                {
	                                                    sClassName = "shown";
	                                                    bDisable = false;
	                                                }
	                                            }
	                                            else 
	                                            {
	                                                if(sChangedFieldValue != "")
	                                                {
	                                                    bDisable = false ;
	                                                    sClassName = "shown";
	                                                }
	                                            }
	                                        }
	                                    }
    	                                
	                                    if(bDisable)
		                                {
		                                    if(getDomElement("SPAN_DEPENDENT_REQUIRED_" + iDependentID))
		                                        getDomElement("SPAN_DEPENDENT_REQUIRED_" + iDependentID).className = 'hidden';
                                            if (getDomElement(iDependentID) != null)
                                            {
	                                            getDomElement(iDependentID).className = sInputClassName;//NormalField';
	                                            //getDomElement(iDependentID).value="";
	                                        }
    		                            }
    		                            else
    		                            {
                                            if (getDomElement(iDependentID) != null)
    		                                    getDomElement(iDependentID).className = (bMandatory || AttributeMandatory(iDependentID)) ? "MandatoryField" : "";
    		                            }
        	                            
    	                                if(iDatatype==3) 
    	                                    getDomElement("dateButton_" + iDependentID).className = sClassName;
	                                    if (getDomElement(iDependentID) != null)
	                                        getDomElement(iDependentID).disabled = bDisable;
    		                        
		                            break;
		                        }
		                        case iVisibleID:
		                        {
		                            sClassName = 'hidden' ;
		                            //var sField
    		                        
		                            for (var iIndexDependentPair = 0; iIndexDependentPair < arParentValues.length; iIndexDependentPair++)
                                    {
                                        if(arParentValues[iIndexDependentPair].DependentType==iVisibleID)
                                        {
                                            if(iParentDataType==7 || (iParentDataType==5 && getDomElement(oChangedField.ID) && getDomElement(oChangedField.ID).type=="select-one"))
                                            {
	                                            if(arParentValues[iIndexDependentPair].ParentValue==0 && getDomElement(oChangedField.ID).type!="select-one" && ((getDomElement(oChangedField.ID).getAttribute('EXTENDED') == "1" && sChangedFieldValue!="") || (getDomElement(oChangedField.ID).getAttribute('EXTENDED') != "1" &&  sChangedFieldValue!=-1)))
	                                                sClassName = 'shown' ;
                                                else if(sChangedFieldValue == arParentValues[iIndexDependentPair].ParentValue) 
                                                    sClassName = 'shown' ;
                                                else if(iParentDataType==7 && arParentValues[iIndexDependentPair].ParentValue==0 && ( (getDomElement(oChangedField.ID).getAttribute('EXTENDED') == "1" && sChangedFieldValue!="") ||  (getDomElement(oChangedField.ID).getAttribute('EXTENDED') != "1" &&  sChangedFieldValue!=-1) ))
                                                    sClassName = 'shown' ;
                                                
                                            }
                                            else if (iParentDataType==5)
                                            {
                                                sClassName = (bChangedFieldValue) ? 'shown' : 'hidden';
                                            }
                                            else 
                                            {
                                                sClassName = (sChangedFieldValue != "") ? 'shown' : 'hidden' ;
                                            }
                                        }
                                    }
                                    
                                   
                                    if(!bReadOnly)   
	                                {
		                                if(sClassName=="hidden")
		                                {
		                                    getDomElement("SPAN_DEPENDENT_REQUIRED_" + iDependentID).className = sClassName;
                                            if (getDomElement(iDependentID) != null)		                                
                                                   getDomElement(iDependentID).className = 'NormalField';
	                                    }
		                                else
		                                {
    		                                
		                                    if(getDomElement(iDependentID) && (bMandatory || AttributeMandatory(iDependentID)))
		                                    {
		                                        getDomElement(iDependentID).style.backgroundColor="";
    		                                    
		                                        if(getDomElement("SPAN_DEPENDENT_REQUIRED_" + iDependentID))
		                                            getDomElement("SPAN_DEPENDENT_REQUIRED_" + iDependentID).className = "shown";
		                                    }
    		                                
		                                    getDomElement(iDependentID).className = (bMandatory || AttributeMandatory(iDependentID)) ? "MandatoryField" : "NormalField";
    		                                
		                                }

    		                        }
    		                        if(getDomElement("LabelVisibilityWrapper_" + iDependentID)) getDomElement("LabelVisibilityWrapper_" + iDependentID).className = sClassName;
	                                getDomElement("FieldVisibilityWrapper_" + iDependentID).className = sClassName;
		                            break;
		                        }
		                    }
		                }
		            }
		        }
		    }
		}
		
		SectionDependency(ID);
	}
	
	function getfieldID(xmlName)
	{
	    
	    if(typeof xmlNameMapping == 'object')
	        for (var iIndex = 0; iIndex < xmlNameMapping.length; iIndex++)
            {
                if(xmlNameMapping[iIndex].name==xmlName) 
                    return xmlNameMapping[iIndex].id;                            
            }
        
        return -1;                            
	}
	
	function setRequired(id, bOnOrOff)
	{
	    
	    if(document.getElementById(id))
	        document.getElementById(id).className = (bOnOrOff) ? "MandatoryField" : "NormalField";
	    
	    var oRequiredSpan = document.getElementById("SPAN_DEPENDENT_REQUIRED_" + id);
	    if (oRequiredSpan != null)		                                
            oRequiredSpan.className = (bOnOrOff) ? "shown" : "hidden";
	}
	
	function setDisabled(id, bOnOrOff)
	{
	    
	    if(document.getElementById(id))
	        document.getElementById(id).disabled = (bOnOrOff) ? true : false;
	    
	    var oRequiredSpan = document.getElementById("SPAN_DEPENDENT_REQUIRED_" + id);
	    if (oRequiredSpan != null)		                                
            oRequiredSpan.className = (bOnOrOff) ? "hidden" : "shown";
	}
	
	function savedContactPopup(eventPointer, bReadOnly, iID)
	{
	    var iContactID = -1;
	    
	    if(bReadOnly==0)
	        iContactID = iID;
	    else
	        iContactID = document.getElementById(iID).getAttribute("NUMERIC_VALUE");
	        
	    if(iContactID!=null && iContactID!=-1)
	    {    
	        var oParameters = new Array();
            oParameters.push(new brokerParam('ID', iContactID));
            var oResponse = sendThroughBroker(25000000, '10', oParameters);
            var xmlDoc = GetXMLDocument(oResponse.response);
            var nodes = xmlDoc.selectNodes('//argument');
            
	        var sHTML = "";	
	        
	        sHTML += "<TABLE width=100% border=0 cellpadding=0 cellspacing=3 style='font-size:12px'>";
    		
		    for (var i = 0; i < nodes.length; i++)
                sHTML += "<TR><TD width='20%' align='left'><b>" + nodes[i].getAttribute('name') + ":</b>&nbsp;</TD><td  align='left'>" + nodes[i].getAttribute('value') + "</td></TR>";
        
	        
		    sHTML += "</TABLE>";
    		
		    m_oSavedValuePopup = m_uiGenerator.showInfoPopup( sHTML, null, null, null, 'auto');
		}
	}
	
	
	
	////////////// classes //////////////////////
	
	function oSection(id)
    {
        this.id = id;
        this.dependencies = new Array();
        this.fields = new Array();
    }

    function oSectionAttrDepend(attrID, sValue)
    {
        this.attrID = attrID;
        this.value = sValue;
    }
    
    function oXmlName(id, name)
    {
        this.id = id;
        this.name = name;
    }
}