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;
	
	// 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_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
		{
			if(oForm)
			{				
				oForm.submit();
			}
		}
		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();


