function JavaScriptFramework()
{
	// Properties
	this.IsIE = navigator.userAgent.toLowerCase().indexOf("msie") > -1;
	this.IsMozilla = navigator.userAgent.toLowerCase().indexOf("firefox") > -1;
	
	this.fnGetElementById = JSFW_fnGetElementById;
	this.fnValidateForm = JSFW_fnValidateForm;
	this.fnAlert = JSFW_fnAlert;	
	this.fnHideElement = JSFW_fnHideElement;
	this.fnShowElement = JSFW_fnShowElement;
	this.fnTrim = JSFW_fnTrim;
	this.fnRTrim = JSFW_fnRTrim;
	this.fnLTrim = JSFW_fnLTrim;
	this.fnSubmitForm = JSFW_fnSubmitForm;
	this.fnProcessSearchText = JSFW_fnProcessSearchText;
	this.fnValidateOnKeyPress = JSFW_fnValidateOnKeyPress;
	this.fnConvertDate = JSFW_fnConvertDate;
	
	// fnAlert : This function is used to alert message
	function JSFW_fnAlert(strMessage)
	{
		alert(strMessage);
	}
	
	// fnGetElementById : This function is used to get Element by provided id
	function JSFW_fnGetElementById(strId)
	{
		try{		
			return document.getElementById(strId);
		}catch(ex)
		{
			fnHandleException(ex,'JSFW_fnGetElementById');
		}
	}

	// fnShowElement : This function is used to hide a div element
	function JSFW_fnHideElement(oDivElement)
	{
		try
		{
			if(typeof(oDivElement) != 'undefined' && oDivElement != null)
				oDivElement.style.display = "none";
			else
				this.fnAlert("fnHideElement: No Element defined");
		}
		catch(ex)
		{
			fnHandleException(ex,'fnHideElement');
		}
	}
	
	// fnShowElement : This function is used to show a div element
	function JSFW_fnShowElement(oDivElement)
	{
		try
		{
			if(typeof(oDivElement) != 'undefined' && oDivElement != null)
			{
				if(this.IsIE)
					oDivElement.style.display = "block";
				else if(this.IsMozilla)
					oDivElement.style.display = "";
			}
			else
				this.fnAlert("fnHideElement: No Element defined");
		}
		catch(ex)
		{
			fnHandleException(ex,'fnHideElement');
		}
	}
	
	// fnValidateForm : This function is used to validate form elements with specific type
	// 'd' -> Date. 's' -> String, 'f' -> float, 'i' -> int, 'e' -> email
	function JSFW_fnValidateForm(oForm,oElementArray,fnCallback)
	{
		try
		{
		  // Spin Each Element
		  var c_elem = oForm.elements.length;
		  var c_desc = oElementArray.length;
		  
		  var i = 0;
		  for (i=0;i<c_elem;i++)
		  {
		    var elem = oForm.elements[i];
		    var j = 0;
		    for (j=0;j<c_desc;j++)
		    {
		      var strType = oElementArray[j][1];
		      var strDescription = oElementArray[j][2];
			  
		      if (oElementArray[j][0] == elem.name)
		      {
			    j = c_desc+1;
				
				if (this.fnTrim(elem.value).length==0)
		        {
		            this.fnAlert('Fout: Verplicht veld\nHet veld ' + strDescription + ' heeft een ongeldige waarde.');
		            elem.focus();
					elem.select();
		            return false;
		        }
				  
		        if (strType.length==2)
		        {
		            strType = strType.substr(0,1);
		        }
		        if (elem.value != '') 
				{
					if (strType=='d') 
					{
						var dt = new Date(elem.value);
						if (dt.toString() == 'Invalid Date')
						{
							if (fnCallback)
							{
								this.fnAlert('Fout: Ongeldige datum\nHet veld ' + strDescription + ' heeft een ongeldige waarde.');
								elem.focus();
								elem.select();
								return false;
							}
							else
							{
								this.fnAlert('Het veld ' + strDescription + ' heeft een ongeldige waarde.');
								elem.focus();
								elem.select();
								return false;
							}
						}
					}
					else
					{
						var re = null;
			          
						if (strType=='e') re = new RegExp("^([a-zA-Z0-9~!#\$%\^\&\*_\.\\-=])+\@(([a-zA-Z0-9~!#\$%\^\&\*_\.\\-=])+\.)+([a-zA-Z0-9]{2,4})+$");
						else if (strType=='f') re = new RegExp('^([0-9]+\.?[0-9]*|\.[0-9]+)$');
						else if (strType == 'i') re = new RegExp('^[0-9]+$');
						else if (strType == 's')
						{
							try
							{
								if (oElementArray[j][3])
								{
								re = new RegExp(oElementArray[j][3]);
								}
								else 
								{
									re = new RegExp("^[ \u00c0-\u00ffa-zA-Z0-9\-\.\"',_,~,!,@,#,\$,%,\^,&,\*,\(,\),\+,\|,=,:,;,\{,\},/,\[,\?,\<,\>,\\\\,\\\]]+$");
								}
							}
							catch(e)
							{
								re = new RegExp("^[ \u00c0-\u00ffa-zA-Z0-9\-\.\"',_,~,!,@,#,\$,%,\^,&,\*,\(,\),\+,\|,=,:,;,\{,\},/,\[,\?,\<,\>,\\\\,\\\]]+$");
							}            
						}
					
						if (strType != 'o')
						{
							
							if (!re.test(elem.value))
							{
								if (fnCallback)
								{
									fnCallback(strDescription,'Ongeldige waarde');
									elem.focus();
									elem.select();
									return false;
								}
								else
								{
									this.fnAlert('Het veld ' + strDescription + ' heeft een ongeldige waarde.');
									elem.focus();
									elem.select();
									return false;
								}
							}
						}
					}
		        }
		      }
		    }
		  }
		  return true;
		}
		catch(ex)
		{
			fnHandleException(ex,'JSFW_fnValidateForm');
		}		
	}	
	
	
	function JSFW_fnConvertDate(strDate,convertChar)
	{
		var arrAllowedSeparators = ['/','-','.'];
		var separator = '';  
		var blnIsValidDate = false;
		var objRegExp; 
		if(typeof(convertChar) == 'unidentified')
			convertChar = '/';
		
		// date length should be 10 characters - no more, no less   
		if(strDate.length >= 8 && strDate.length <= 10)
		{
			for(sepCounter = 0; sepCounter < arrAllowedSeparators.length ; sepCounter++)
			{
				if(strDate.indexOf(arrAllowedSeparators[sepCounter]) > -1) 
				{
					separator = arrAllowedSeparators[sepCounter];
					break;
				}
			}
			
			if(separator != '') 
			{
				objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;		
				if(objRegExp.test(strDate))
				{
					var oArr = strDate.split(separator);
					if((oArr[0] >= 1 && oArr[0] <= 31) && (oArr[1] >= 1 && oArr[1] <= 12))
					{
						blnIsValidDate = true;					
						strDate = strDate.replace(/-/g,convertChar).replace(/\./g,convertChar);
					}
				} 
			}
			else
			{
				objRegExp = /^\d{8}$/;
				if(objRegExp.test(strDate))
				{
					var day = strDate.substring(0,2);
					var month = strDate.substring(2,4);
					var year = strDate.substring(4,8);					
					if((day >= 1 && day <= 31) && (month >= 1 && month <= 12))
					{
						blnIsValidDate = true;			
						strDate = day + convertChar  + month + convertChar + year;
					}
				}
			}		  						
		}  
	   
	   
	   if(!blnIsValidDate)
		strDate = '';
		 	
		return strDate;
	}
	

	function JSFW_fnTrim(strInputString)
	{
		try
		{
			if(strInputString.length < 1){
			return"";
			}
			
			strInputString = this.fnRTrim(strInputString);
			strInputString = this.fnLTrim(strInputString);
			if(strInputString=="")
			{
				return "";
			}
			else
			{
				return strInputString;
			}
		}
		catch(ex)
		{
			fnHandleException(ex,'JSFW_fnTrim');
		}
	}

	function JSFW_fnRTrim(strInputString)
	{
		try
		{
			var w_space = String.fromCharCode(32);
			var v_length = strInputString.length;
			var strTemp = "";
			if(v_length < 0)
			{
				return"";
			}
			var iTemp = v_length -1;

			while(iTemp > -1)
			{
				if(strInputString.charAt(iTemp) == w_space)
				{}
				else
				{
					strTemp = strInputString.substring(0,iTemp +1);
					break;
				}
				iTemp = iTemp-1;
			} 
			return strTemp;
		}
		catch(ex)
		{
			fnHandleException(ex,'JSFW_fnRTrim');
		}
	}

	function JSFW_fnLTrim(strInputString)
	{
		try
		{
			var w_space = String.fromCharCode(32);
			if(v_length < 1)
			{
				return"";
			}
			var v_length = strInputString.length;
			var strTemp = "";
			var iTemp = 0;

			while(iTemp < v_length)
			{
				if(strInputString.charAt(iTemp) == w_space){
				}
				else
				{
					strTemp = strInputString.substring(iTemp,v_length);
					break;
				}
				iTemp = iTemp + 1;
			} 
			return strTemp;
		}
		catch(ex)
		{
			fnHandleException(ex,'JSFW_fnLTrim');
		}
	} 

	function JSFW_fnSubmitForm(oForm,strAction,strQSParams)
	{
		try
		{
			
		}
		catch(ex)
		{
			fnHandleException(ex,'JSFW_fnSubmitForm');
		}
		
	}
	
	function JSFW_fnValidateOnKeyPress(oEvent,oElement,strAction)
	{
		try
		{
			var intCharCode = (oEvent.which) ? oEvent.which : event.keyCode;
			if(String(strAction).toLowerCase() == 'i')
			{
				if(intCharCode > 46 && intCharCode < 58)
					return true;
				else 
					return false;
			}
			
			return true;
		}
		catch(ex)
		{
			fnHandleException(ex,'JSFW_fnValidateOnKeyPress');
		}
		
	}
	
	
	
	function JSFW_fnProcessSearchText(oForm)
	{
		try
		{
			var strSearchText;
			if(oForm.searchtext)
				strSearchText= oForm.searchtext.value;
			else if(oForm.sitesearchtext)
				strSearchText= oForm.sitesearchtext.value;
			else if(oForm.advancedsearchtext)
				strSearchText= oForm.advancedsearchtext.value;
			
			
			if(oForm.hsearchtext)
				oForm.hsearchtext.value = '';
			
			strSearchText = strSearchText.replace( new RegExp(" and ", "i" ) , " AND ");
			strSearchText = strSearchText.replace(new RegExp(" or ", "i" ), " OR ");
			strSearchText = strSearchText.replace(" AND ", " ");
			
			if(strSearchText.indexOf('"') != -1)
			{
				oForm.hsearchtext.value = "\"" + strSearchText.substring(1,strSearchText.length - 1) + "\"";
			}
			else if(strSearchText.indexOf(" OR ") != -1 )
			{
				var index = strSearchText.indexOf(" OR ");
				var searchitem = strSearchText.substring(0,index)
				while(index != -1)
				{
					if (oForm.hsearchtext.value == '')
					{
						oForm.hsearchtext.value += "\"*" + searchitem + "*\"";
					}
					else
					{
						oForm.hsearchtext.value += " OR \"*" + searchitem + "*\"";
					}
					strSearchText = strSearchText.substring(index + 4);
					index = strSearchText.indexOf(" OR ");
					searchitem = strSearchText.substring(0,index);
				}
				if (oForm.hsearchtext.value == '')
				{
					oForm.hsearchtext.value += "\"*" + strSearchText + "*\"";
				}
				else
				{
					oForm.hsearchtext.value += " OR \"*" + strSearchText + "*\"";
				}
			}
			else if(strSearchText.indexOf(" ") != -1 )
			{
	      
				var index = strSearchText.indexOf(" ");
				var searchitem = strSearchText.substring(0,index)
				while(index != -1)
				{
					if (oForm.hsearchtext.value == '')
					{
						oForm.hsearchtext.value += "\"*" + searchitem + "*\"";
					}
					else
					{
						oForm.hsearchtext.value += " AND \"*" + searchitem + "*\"";
				
					}
				strSearchText = strSearchText.substring(index + 1);
				index = strSearchText.indexOf(" ");
				searchitem = strSearchText.substring(0,index);
				}
				if (oForm.hsearchtext.value == '')
				{
					oForm.hsearchtext.value += "\"*" + strSearchText + "*\"";
				}
				else
				{
					oForm.hsearchtext.value += " AND \"*" + strSearchText + "*\"";
				}
			}
			else
			{
				if (oForm.hsearchtext.value == '')
				{
					oForm.hsearchtext.value += "\"*" + strSearchText + "*\"";
				}
			}	
	    }
		catch(ex)
		{
			fnHandleException(ex,'JSFW_fnProcessSearchText');
		}
	}

	function fnHandleException(oEx,strCallingFunction)
	{
		this.fnAlert(strCallingFunction + ":-" + oEx.message);
	}		
}

var oJSFW = new JavaScriptFramework();


