﻿	var isIE = navigator.userAgent.toLowerCase().indexOf("msie") > -1;
	var isMoz = document.implementation && document.implementation.createDocument;


	function DocumentWrite(a_Str)
	{
		document.write(a_Str);
	}

	function SA_DoFlashBanner(a_Wrapper, a_Src, a_Width, a_Height, a_Alt, a_Title, a_BGColor, a_Quality)
	{
		if (!a_Quality) a_Quality = 'high';
		if (!a_BGColor) a_BGColor = 'white';
	
		if (!a_Src) a_Src = "images/none.swf";
		
		var l_Str = ' \
			<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="' + a_Width + '" height="' + a_Height + '"> \
				<param name="movie" value="' + a_Wrapper + '"> \
				<param name="quality" value="' + a_Quality + '"> \
				<param name="bgcolor" value="' + a_BGColor + '"> \
				<param name="FlashVars" value="sa_src=&sa_target=&sa_swf=' + a_Src + '"> \
				<embed name="banner" flashvars="sa_src=&sa_target=&sa_swf=' + a_Src + '" src="' + a_Wrapper + '" width="' + a_Width + '" height="' + a_Height + '" quality="' + a_Quality + '" bgcolor="' + a_BGColor + '" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> \
			</object> \
			';

		return l_Str;
	}
	
	function StrToXMLSafe(a_Str)
	{
		var l_str = a_Str;
			
		l_str = l_str.replace(/&/g,'&amp;');
		l_str = l_str.replace(/</g,'&lt;');
		l_str = l_str.replace(/>/g,'&gt;');
		l_str = l_str.replace(/"/g,'&quot;');
			
		return l_str;
	}

	function GetBareXmlHttp()
	{
		var xmlHttp = null;
		
		if (window.XMLHttpRequest)
		{
			xmlHttp = new XMLHttpRequest(); 
		}
		else if (window.ActiveXObject)
		{
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
//			xmlHttp = new ActiveXObject("MSXML2.ServerXMLHTTP"); 
		}
		
		return xmlHttp;
	}
	
	function GetXmlHttpAsync(a_xmlHttpObj, a_Url, a_Params, a_Callback)
	{
		if (a_xmlHttpObj)
		{
			a_xmlHttpObj.abort();
			a_xmlHttpObj.onreadystatechange = a_Callback;
			a_xmlHttpObj.open ('GET',a_Url + a_Params, true);
			a_xmlHttpObj.send (null);
			
			return true;
		}
		
		return false;
	}
	
	function IsXmlHttpLoaded(a_XmlObj)
	{
		try {
			if (a_XmlObj.readyState==4)
			{
				return (a_XmlObj.status==200);
			}	
		}
		catch (e)
		{
		}	
		
		return false;
	}
	

	function GetXmlHttp(a_Url, a_Params)
	{
		var xmlHttp = GetBareXmlHttp();

		if (xmlHttp)
		{
			xmlHttp.open ('GET',a_Url + a_Params, false);
			xmlHttp.send (null);
		}
			
		return xmlHttp;
	}


	function IsActiveElement(a_Element)
	{
		if (document.activeElement)
		{
			return (document.activeElement === a_Element);
		}
		else
		{
			return true;
		}
	}

	function Round(a_Number, a_Digits)
	{
		return Math.round(a_Number * Math.pow(10,a_Digits)) / Math.pow(10,a_Digits);
	}

	function Dump(a_Str)
	{
		document.write(a_Str);
	}

	function LocalDate (a_IETF_Date)
	{
		l_date = new Date(a_IETF_Date);
		if (isNaN(l_date))
		{
			return '';
		}
		return l_date.toLocaleDateString();
	}

	function LocalTimeStamp (a_IETF_Date)
	{
		l_date = new Date(a_IETF_Date);
		if (isNaN(l_date))
		{
			return '';
		}
		return l_date.toLocaleString();
	}

	function bodyOffsetTop(a_Obj)
	{
		l_Offset = 0;
		while (a_Obj)
		{
			l_Offset += a_Obj.offsetTop; 
			a_Obj = a_Obj.offsetParent;
		}
		
		return l_Offset;
	}

	function bodyOffsetLeft(a_Obj)
	{
		l_Offset = 0;
		while (a_Obj)
		{
			l_Offset += a_Obj.offsetLeft; 
			a_Obj = a_Obj.offsetParent;
		}
		
		return l_Offset;
		
	}

	function isChildOf(a_Obj, a_ParentObjId)
	{
		l_parentObj = a_Obj;
		
		while (l_parentObj)
		{
			if (l_parentObj.id == a_ParentObjId)
			{
				return true;
			}
		
			l_parentObj = l_parentObj.parentNode;
		}
		
		return false;
	}
	
	function forEach(a_Arr, a_Func, a_Obj)
	{
		var i;
		
		if (!a_Arr) return;
		
		for (i = 0; i < a_Arr.length; i++)
		{
			a_Func.call(a_Obj, a_Arr[i]);
		}
	}
	
	
	function PopWnd(a_Prefix, a_Target, a_Method, a_Params, a_Height, a_Width)
	{
		var l_FormName = a_Prefix + '_form';
		var l_SubmitName = l_FormName + '_submit';
		var l_Form = document.getElementById(l_FormName);
		
		if (!a_Height)
		{
			a_Height = "200";
		}

		if (!a_Width)
		{
			a_Width = "400";
		}
		
		if (l_Form)
		{
			document.body.removeChild(l_Form);
			l_Form = document.getElementById(l_FormName);
		}
		
		if (!l_Form)
		{
			var l_ParamsObj = {
				PArr: [],
							
				set: function (a_PArr)
				{
					this.PArr.push('<INPUT type="hidden" name="' + escape(a_PArr[0]) + '" value="'+ escape(a_PArr[1]) + '"/>');
				},
							
				toString: function()
				{
					return this.PArr.join('\n');
				}	
			};
				
			var l_Method = a_Method === undefined ? 'get' : a_Method.toLowerCase();
			var l_WndName = l_FormName + '_wnd';
					
			if (l_Method == 'get')
			{
				var l_tmpParamsArr = GetParamsFromUrl(a_Target);
				forEach(l_tmpParamsArr, l_ParamsObj.set, l_ParamsObj);
			}
					
			if (!(a_Params === undefined))
			{
				var l_tmpParamsArr = GetParamsFromUrl("?" + a_Params);
				forEach(l_tmpParamsArr, l_ParamsObj.set, l_ParamsObj);
			}
				
			l_Form = document.createElement("FORM");
			l_Form.setAttribute("id",l_FormName);
			l_Form.setAttribute("action",a_Target);
			l_Form.setAttribute("method",l_Method);
			l_Form.innerHTML = '\<input style="display: none;" id="' + l_SubmitName + '" type="submit"/\>';
			l_Form.innerHTML += l_ParamsObj.toString();
			l_Form.style.display ='none';
					
			document.body.appendChild(l_Form);
			l_Form = document.getElementById(l_FormName);

			AttachEvent(l_Form, 'submit', DoPopWnd , false);
			l_Form.submit_cmd = "var l_wnd_name='" + l_WndName + "'; mywnd=window.open('', l_wnd_name,'height=" + a_Height + ", width=" + a_Width + ", scrollbars=yes, status=yes, resizable=yes, menubar=no, location=no'); l_Form.target=l_wnd_name; mywnd.focus();";
		}
		var l_SubmitForm = document.getElementById(l_SubmitName);
		if (l_SubmitForm)
		{
			l_SubmitForm.click();
		}
	}

	function DoPopWnd(e)
	{
		e = !e ? event : e;
		l_Form = !e.srcElement ? this : e.srcElement;

		eval(l_Form.submit_cmd)
		return true;
	}
	
	
	
	function IntToHex(a_int, a_padding)
	{
		var l_int = Math.abs(a_int);
		var l_hexStr = '';
		var l_hex_arr = new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
		
		while (l_int > 0)
		{
			l_hexStr = l_hexStr + l_hex_arr[l_int % 16];
			l_int = (l_int - (l_int % 16)) / 16;
		}
		
		while (l_hexStr.length < a_padding)
		{
			l_hexStr = '0' + l_hexStr;
		}
		
		return l_hexStr;
	}
	

	function url_getparam(a_url, a_Name)
	{
		var l_param_val = null;
		if (l_param = a_url.match('[?&]' + a_Name + '=([^&]*)'))
		{
		    l_param_val = l_param[1];
		}
		
		return l_param_val;	
	}

	function GetParamsFromUrl(a_Url)
	{
		var l_re = /(?:[?&](([^=&#]+)(?:=([^&#]*))?))/ig;
		var l_arr;
		var l_retArr = new Array();
		var i = 0;

		while ((l_arr = l_re.exec(a_Url)) != undefined)
		{
			l_retArr[i++] = new Array(l_arr[2],l_arr[3]===undefined?'':l_arr[3]);
		}
		
		return l_retArr;
	}

	function AttachEvent(a_Obj, a_Event, a_Function, a_UseCapture)
	{
		if (a_Obj.addEventListener)
		{
			a_Obj.addEventListener(a_Event, a_Function, a_UseCapture); 
		} 
		else if (a_Obj.attachEvent)
		{
			a_Obj.attachEvent('on'+a_Event.replace(/^on/g,''), a_Function);
		}
	}

	function GetCurrentStyle(a_Obj)
	{
		var l_Style = null;
		
		if (a_Obj.currentStyle)
		{
			l_Style = a_Obj.currentStyle;
		}
		else if (window.getComputedStyle)
		{
			l_Style = window.getComputedStyle(a_Obj,null);
		}
		
		return l_Style;
	}

	//-------------------------------------------------------------------------
	// Calendar Object
	//-------------------------------------------------------------------------

	function cal_Cancel(a_Div)
	{
		l_Div   = document.getElementById(a_Div);
		l_Input = document.getElementById(a_Div + '_input');
			
		l_Input.disabled = false;
		l_Div.style.display='none';
	}
		
	function cal_ShowCal(a_Div)
	{
		l_Div     = document.getElementById(a_Div);
		l_Input   = document.getElementById(a_Div + '_input');
		l_Value   = document.getElementById(a_Div + '_value');

			
		l_Input.disabled = true;

		if (isMoz)
		{			
			l_Div.style.top  = bodyOffsetTop(l_Input); 
			l_Div.style.left = bodyOffsetLeft(l_Input); 
		}

		l_Div.style.display = '';
			
		l_date = new Date(l_Value.value);
		if (isNaN(l_date))
		{
			l_date = new Date();
			// Getting only the string value of the date
			l_date = new Date(l_date.getFullYear(), l_date.getMonth(), l_date.getDate());
		}

		cal_CreateCalendar(a_Div,l_date, l_date);		
	}
		
	function cal_SelectedDate(a_Div, a_Date)
	{
		var c_DaysNames = new Array('sun','mon','thu','wed','tue','fri','sat');
		var c_MonthsNames = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	
		l_Div   = document.getElementById(a_Div);
		l_Input = document.getElementById(a_Div + '_input');
		l_value = document.getElementById(a_Div + '_value');
			
		l_Input.value = a_Date.toLocaleDateString() ;

//		l_value.value = a_Date.toUTCString();
		l_value.value = a_Date.getDate() + ' ' + c_MonthsNames[a_Date.getMonth()] + ' ' + a_Date.getFullYear() ;
			
		l_Input.disabled = false;
		l_Div.style.display='none';
		l_Input.onchange();
	}
	
	function cal_KeyPress(a_Event, a_Obj, a_Div, a_StartDay, a_SelectedDate)
	{
		var l_ch = window.event ? a_Event.keyCode : a_Event.which;
		
		l_dir = GetCurrentStyle(a_Obj).direction;
		if (l_dir == 'rtl')
		{
			l_Left  = 39;
			l_Right = 37;
		}
		else
		{
			l_Left  = 37;
			l_Right = 39;
		}
		
	
		switch (l_ch)
		{
			case 27: // Esc
				cal_Cancel(a_Div);
				break;
				
			case 13: // Enter
			case 32: // Space
				cal_SelectedDate(a_Div, a_StartDay);				
				break;
								
			case l_Left:  // Day before
				a_StartDay = new Date(a_StartDay.getFullYear(), a_StartDay.getMonth(), a_StartDay.getDate()-1);
				cal_CreateCalendar(a_Div, a_StartDay, a_SelectedDate);
				break;
			case 38:      // Week before
				a_StartDay = new Date(a_StartDay.getFullYear(), a_StartDay.getMonth(), a_StartDay.getDate()-7);
				cal_CreateCalendar(a_Div, a_StartDay, a_SelectedDate);
				break;
			case l_Right: // Day after
				a_StartDay = new Date(a_StartDay.getFullYear(), a_StartDay.getMonth(), a_StartDay.getDate()+1);
				cal_CreateCalendar(a_Div, a_StartDay, a_SelectedDate);
				break;
			case 40:      // Week After
				a_StartDay = new Date(a_StartDay.getFullYear(), a_StartDay.getMonth(), a_StartDay.getDate()+7);
				cal_CreateCalendar(a_Div, a_StartDay, a_SelectedDate);
				break;
				
			case 33:	  // Month Before
				a_StartDay = new Date(a_StartDay.getFullYear(), a_StartDay.getMonth()-1, a_StartDay.getDate());
				cal_CreateCalendar(a_Div, a_StartDay, a_SelectedDate);
				break;
			case 34:	  // Month After
				a_StartDay = new Date(a_StartDay.getFullYear(), a_StartDay.getMonth()+1, a_StartDay.getDate());
				cal_CreateCalendar(a_Div, a_StartDay, a_SelectedDate);
				break;

			case 36:	  // Back to selected
				cal_CreateCalendar(a_Div, a_SelectedDate, a_SelectedDate);
				break;
			
			default:
		}
		
		return false;
	}

	var cal_Lang = "en";

	function cal_SetLang(a_Lang)
	{
		cal_Lang = a_Lang;
	}	

	function cal_GetLang()
	{
		return cal_Lang;
	}

	function cal_CreateCalendar(a_Div, a_StartDay, a_SelectedDate)
	{
		//---------------------------------------------------------------------
		// Parameters adjustment
		//---------------------------------------------------------------------
	
		c_days_in_week = 7 ;
		c_max_weeks_in_month = 7;
		
		var l_Lang = cal_GetLang();
		
		if (l_Lang == "he")
		{
			c_DaysNames   = new Array('א','ב','ג','ד','ה','ו','ש');
			c_MonthsNames = new Array('ינואר','פברואר','מרץ','אפריל','מאי','יוני','יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר');
		}
		else
		{
			c_DaysNames = new Array('su','mo','tu','we','th','fr','sa');
			c_MonthsNames = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
		}
		
		l_StartDate = new Date(a_StartDay.getFullYear(), a_StartDay.getMonth(), 1);
		
		l_sYear    = l_StartDate.getFullYear();
		l_sMonth   = l_StartDate.getMonth();
		l_sWeekDay = l_StartDate.getDay();

		//---------------------------------------------------------------------
		// On blur the control must shutdown. 
		//---------------------------------------------------------------------
	
		if (isIE)
		{
			l_onBlur = ' onblur="if (!isChildOf(document.activeElement,\'' + a_Div + '\')) {cal_Cancel(\'' + a_Div + '\');} else (this.focus()) " ';
			l_ChildrenOnBlur = l_onBlur;
		}
		else
		{
			l_onBlur = ' onblur="cal_Cancel(\'' + a_Div + '\'); " ';
			l_ChildrenOnBlur = '';
		}

		l_onkeydown = ' onkeydown=" javascript:cal_KeyPress(event, this, \'' + a_Div + '\',new Date(\'' + a_StartDay + '\'), new Date(\'' + a_SelectedDate + '\')) " ';
		
	
		l_Obj = document.getElementById(a_Div);
		l_OutStr = '<DIV tabIndex="1" ' + l_onBlur + l_onkeydown + ' class="dropdown_calendar" id="' + a_Div + '_control" style="width:155px; height:170px; border: 1px solid black">';


		//---------------------------------------------------------------------
		// Drawing the calendar
		//---------------------------------------------------------------------
		
		
		l_OutStr += '<TABLE border="0" cellspacing="0" cellpadding="0" width="150px"><TR>';
		l_OutStr += '<TD class="cal_prev_month" onclick="javascript:cal_CreateCalendar(\'' + a_Div + '\',new Date(' + l_sYear + ',' + (l_sMonth-1)  + ',' + a_StartDay.getDate() + '), new Date(\'' + a_SelectedDate + '\'));"><</TD><TD align="center" width="100%">';
		l_OutStr += (c_MonthsNames[l_sMonth] + ' ');
		l_OutStr += (l_sYear);
		l_OutStr += ('</TD><TD class="cal_next_month" onclick="javascript:cal_CreateCalendar(\'' + a_Div + '\',new Date(' + l_sYear + ',' + (l_sMonth+1) + ',' + a_StartDay.getDate() + '), new Date(\'' + a_SelectedDate + '\'));">></TD></TR><TABLE>');
		
		l_MonthDay = -l_sWeekDay+1;

		l_OutStr += ('<TABLE width="155px"  style="font-family: arial; font-size:12px;">');
		
		
		for (l_w = 0; l_w < c_max_weeks_in_month; l_w++)
		{
			l_OutStr += ('<TR height="20px">');

			for (l_d = 0; l_d < c_days_in_week; l_d++)
			{
				if (l_w == 0)
				{
					l_OutStr += ('<TD style="width: 25px" >' + c_DaysNames[l_d] + '</TD>');
				}
				else
				{
					l_StartDate = new Date(l_sYear, l_sMonth, l_MonthDay++);
					
					if (l_StartDate.getMonth() != l_sMonth)
					{
						l_OutStr += ('<TD disabled="true" class="cal_out_month_cell" align="center">' + l_StartDate.getDate() +'</TD>');
					}
					else
					{
						if ((l_StartDate - a_SelectedDate) == 0)
						{
							if ((l_StartDate - a_StartDay) == 0)
							{
								l_ClassName = "cal_today_cell_selected";
							}
							else
							{
								l_ClassName = "cal_today_cell";
							}
						}
						else if ((l_StartDate - a_StartDay) == 0)
						{
							l_ClassName = "cal_in_month_cell_selected";
						}
						else
						{
							l_ClassName = "cal_in_month_cell";
						}
						
						l_OutStr += ('<TD class="'+l_ClassName+'" onclick="cal_SelectedDate(\'' + a_Div + '\', new Date(\'' + l_StartDate + '\'));" align="center" >' + l_StartDate.getDate() +'</TD>');
					}
				}
			}
			
			l_OutStr += ('</TR>');
		}
		
		
		l_OutStr += ('</TABLE></DIV>');
		
		l_Obj.innerHTML = l_OutStr;
		document.getElementById(a_Div + '_control').focus();
		
	}


	// ---------------------------------------------------------------------------
	// DropDown Menu Control functions
	// ---------------------------------------------------------------------------
	
	function ddmenu_Cancel(a_Div)
	{
		l_Div   = document.getElementById(a_Div);
		l_Input = document.getElementById(a_Div + '_input');
			
		l_Div.style.display='none';
	}
		
	function ddmenu_ShowDropDownMenu(a_Div)
	{
		l_Div     = document.getElementById(a_Div);
		l_Input   = document.getElementById(a_Div + '_input');

		if (GetCurrentStyle(l_Div).direction.toLowerCase() == 'rtl')
		{
			l_Div.style.top  = bodyOffsetTop(l_Input) + l_Input.offsetHeight; 
			l_Div.style.left = bodyOffsetLeft(l_Input) - parseInt(l_Div.style.width) + l_Input.offsetWidth; 
		}
		else
		{
			l_Div.style.top  = bodyOffsetTop(l_Input) + l_Input.offsetHeight; 
			l_Div.style.left = bodyOffsetLeft(l_Input); 
		}
		
		l_Div.style.display = '';
		

		ddmenu_CreateDropDownMenu(a_Div);		

		var l_ctrl = document.getElementById(a_Div + '_control');
		
		l_ctrl.style.position = 'relative';
		mi = l_ctrl.offsetHeight;
		
		l_ctrl.style.top = -mi;
		l_ctrl.style.visibility = 'visible';
		
		setTimeout('ddmenu_animate(\'' + a_Div + '\')',10);

	}
	
	function ddmenu_animate(a_Div)
	{
		var l_ctrl = document.getElementById(a_Div + '_control');
		mi = parseInt(l_ctrl.style.top);
		if (mi < 0)
		{
			l_ctrl.style.top = min(0,mi+10);
			setTimeout('ddmenu_animate(\'' + a_Div + '\')',10);
		}
		else
		{
			try 
			{
				l_ctrl.style.position = 'static';
				l_ctrl.getElementsByTagName('a')[0].focus();
			}
			catch(e)
			{
			}
		}
	}
		
	function ddmenu_KeyPress(a_Event, a_Obj, a_Div)
	{
		var l_ch = window.event ? a_Event.keyCode : a_Event.which;
		
		switch (l_ch)
		{
			case 27: // Esc
				document.getElementById(a_Div + "_input").focus();
				break;
			
			default:
		}
		
		return false;
	}
	

	function ddmenu_CreateDropDownMenu(a_Div)
	{
		//---------------------------------------------------------------------
		// On blur the control must shutdown. 
		//---------------------------------------------------------------------
	
		if (isIE)
		{
			l_onBlur = ' onblur="if (!isChildOf(document.activeElement,\'' + a_Div + '\')) {ddmenu_Cancel(\'' + a_Div + '\');} " ';
			l_ChildrenOnBlur = l_onBlur;
		}
		else
		{
			l_onBlur = ' onblur="ddmenu_CloseIfNotInFocus(\'' + a_Div + '\'); " ';
			l_ChildrenOnBlur = '';
		}

		l_onBlur = '';
		l_ChildrenOnBlur = '';

		l_onkeydown = ' onkeydown=" javascript:ddmenu_KeyPress(event, this, \'' + a_Div + '\') " ';
		
	
		l_Obj = document.getElementById(a_Div);
		l_OutStr = '<DIV style="visibility: hidden;" ' + l_onBlur + l_onkeydown + ' class="dropdown_menu" id="' + a_Div + '_control" >';
		l_OutStr += document.getElementById(a_Div + "_data").innerHTML;
		l_OutStr += ('</DIV>');
		
		l_Obj.innerHTML = l_OutStr;
	}
	
	function ddmenu_item_in(l_item)
	{
		l_item.u_infocus = true;
	}

	function ddmenu_item_out(l_item)
	{
		var l_name = l_item.parentNode.parentNode.parentNode.id;
		l_name = l_name.substr(0,l_name.length-8);
		
		l_item.u_infocus = false; 
		setTimeout("ddmenu_CloseIfNotInFocus('" + l_name + "')",100);
	}
	
	
	function ddmenu_CloseIfNotInFocus(a_Div)
	{
		var l_Obj = document.getElementById(a_Div);
		var l_Arr = l_Obj.getElementsByTagName('a');
		var l_toClose = true;
		
		for (i = l_Arr.length-1; i >= 0; i--)
		{
			if (l_Arr[i].u_infocus)
			{
				l_toClose = false;
			}
		}
		
		if (l_toClose)
		{
			ddmenu_Cancel(a_Div);
		}
	}

	// ---------------------------------------------------------------------------
	// Utility functions
	// ---------------------------------------------------------------------------





	function CountStrOcc(a_Src, a_Str)
	{
		l_strLen = a_Str.length;
		l_Counter = 0;
		l_LastIndex = 0;
		
		l_LastIndex = a_Src.indexOf(a_Str);
		while (l_LastIndex > 0)
		{
			l_Counter++;
			l_LastIndex = a_Src.indexOf(a_Str, l_LastIndex+1);
		}
		
		return l_Counter;
	}

	function LTrim( aStr ) 
	{
		var l_re = /\s*((\S+\s*)*)/;
		return aStr.replace(l_re, "$1");
	}

	function RTrim( aStr ) 
	{
		var l_re = /((\s*\S+)*)\s*/;
		return aStr.replace(l_re, "$1");
	}

	function trim( aStr ) 
	{
		return (LTrim(RTrim(aStr)));
	}
	
	function IsValidEmail(aEmail)
	{
//		var re = new RegExp(/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z]([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9}$)/);
		var re = new RegExp(/^([0-9a-zA-Z]([\-.\w])*@([0-9a-zA-Z]([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9}$)/);
		return (re.test(aEmail));
	}

	function IsValidHttp_s(aUrl)
	{
		var re = new RegExp(/^http[s]?:\/\//);
		return (re.test(aUrl));
	}

	function IsValidUrl(aUrl)
	{
 		var re = new RegExp(/^http[s]?:\/\/[a-z0-9][a-z0-9\-_]*(\.[a-z0-9\-_]+)*(:([0-9])+)?([\/].*)?$/);
		return (re.test(aUrl));
	}
	
	function SetSelectedValue(a_SelectObj, a_Val)
	{
		if (!a_SelectObj)
		{
			return;			
		}
		
		a_SelectObj.value = a_Val;
	}
	
	function SetSelectedText(a_SelectObj, a_Text)
	{
		if (!a_SelectObj)
		{
			return;			
		}
		
		l_OptsCol = a_SelectObj.options;
		
		for (i = l_OptsCol.length-1 ; i > 0 ; i--)
		{
			l_OptsCol[i].selected = (l_OptsCol[i].value == a_Text);
		}
	}

	function min(a,b)
	{
		if (a < b) return a; return b;
	}

	function max(a,b)
	{
		if (a > b) return a; return b;
	}
	
	function ForceNumberInput(a_NumObj, a_LastKnownGoodNumber, a_Min, a_Max, a_Fix)
	{
		var l_Error = false;
		var l_re = new RegExp(/^(-)?([0-9]*)(?:\.([0-9]*))?$/);

		var l_val = a_NumObj.value;
		
		if (!l_re.test(l_val))
		{
			a_NumObj.value = a_LastKnownGoodNumber;
			return a_LastKnownGoodNumber;
		}
		
		var l_numArr = l_val.match(l_re);
		
		var l_num_Sign  = l_numArr[1] === undefined ? "" : l_numArr[1];
		var l_num_left  = l_numArr[2] === undefined ? "" : l_numArr[2];
		var l_num_Right = l_numArr[3] === undefined ? "" : l_numArr[3];

		var l_num = parseFloat(l_num_Sign + l_num_left + '.' + l_num_Right);
		
		if ((a_Min >= 0) && (l_num_Sign == "-"))
		{
			l_Error = true;
		}
		else if ((l_num < a_Min) || (l_num > a_Max))
		{
			l_Error = true;
		}
		else if ((a_Fix !== undefined) && (l_num_Right.length > a_Fix))
		{
			l_Error = true;
		}
		
		if (l_Error)
		{
			a_NumObj.value = a_LastKnownGoodNumber;
			return a_LastKnownGoodNumber;
		}
		
		return l_val;		
	}

	function ForceBaseUrl(a_BaseUrlStr, a_OtherUrl, a_KnownGoodUrl, a_ErrMsg)
	{
		l_baseUrlStr = a_BaseUrlStr;
		l_OtherUrl = a_OtherUrl;
		
		if (l_baseUrlStr.charAt(l_baseUrlStr.length-1) != '/')
		{
			l_baseUrlStr = l_baseUrlStr + '/';
		}

		l_delimPos = l_OtherUrl.value.indexOf(l_baseUrlStr);

		if (CountStrOcc(l_baseUrlStr,'/') < 3)
		{
			l_OtherUrl.disabled = true;
		}
		else
		{
			if (l_OtherUrl.disabled)
			{
				l_OtherUrl.disabled = false;
			}
		}
				
		if (l_delimPos != 0)
		{
			if (!(a_ErrMsg === undefined))
			{
				alert(a_ErrMsg);
			}
			l_OtherUrl.value = l_baseUrlStr + a_KnownGoodUrl;
		}
		else
		{
			a_KnownGoodUrl = (l_OtherUrl.value).substr(l_baseUrlStr.length);
		}
			
		return a_KnownGoodUrl;
	}

	function UpdateTextAreaRows(a_Ta, a_MinSize)
	{
		
		if (a_Ta.scrollHeight > a_Ta.offsetHeight)
		{
			a_Ta.style.height = max(a_Ta.scrollHeight + 4,a_MinSize);
		}
		else
		{
			if (isMoz)
			{
				if ((a_Ta.scrollHeight == a_Ta.clientHeight) && (a_Ta.offsetHeight > a_MinSize))
				{
					while ((a_Ta.scrollHeight == a_Ta.clientHeight) && (a_Ta.offsetHeight > a_MinSize))
					{
						a_Ta.style.height = a_Ta.offsetHeight-10;
					}
					a_Ta.style.height = a_Ta.offsetHeight+(a_Ta.scrollHeight - a_Ta.clientHeight);
				}
			}
			else  if (a_Ta.clientHeight > a_Ta.scrollHeight);
			{
				// IExplorer
				a_Ta.style.height = max(a_Ta.scrollHeight + 4,a_MinSize);
			}
		}
	}
	
	function get_cookie(a_Name)
	{
		var l_cname = a_Name;
		var i;
		
		var l_cookies = document.cookie.split("; ");
		for (i=0; i < l_cookies.length; i++)
		{
			var l_cookie = l_cookies[i].split("=");
			if (l_cname == l_cookie[0]) 
			{
				return l_cookie[1];
			}
		}

		return null;
	}
	
	function set_cookie(a_Name, a_Value, a_Days, a_Path, a_Domain)
	{
		var l_cname = a_Name;
		var c_DaysOffset = a_Days;

		if (c_DaysOffset != 0)
		{
			var l_date = new Date();
			l_date = new Date(l_date.getFullYear(), l_date.getMonth(), l_date.getDate() + c_DaysOffset);

			document.cookie = l_cname + '=' + a_Value +
				'; expires=' + l_date.toGMTString() + 
				'; path=' + a_Path + 
				'; domain=' + a_Domain;
		}
		else
		{
			document.cookie = l_cname + '=' + a_Value +
				'; path=' + a_Path + 
				'; domain=' + a_Domain;
		}
	}
	
	function InitColorPallete(a_placeholder_id, a_target_id)
	{
		var l_colorArr = new Array('00', '7F', 'BF', 'FF');
		var l_maxColor = 4;
		var l_red = 0;
		var l_green = 0;
		var l_blue = 0;
			
		var l_Table = document.createElement('TABLE');
		var l_Tbody = document.createElement('TBODY');
		document.getElementById(a_placeholder_id).appendChild(l_Table);
		l_Table.appendChild(l_Tbody);
		l_Table.style.fontSize = '1px';
		l_Table.style.lineHeight = '10px';
		l_Table.cellPadding = 0;
		l_Table.cellSpacing = 0;
			
		var l_newRow = null;
		var l_newCell = null;
			
		var l_MaxInLine = 16;
		var i = 0;
			
		for (l_red = 0; l_red < l_maxColor ; l_red++)
		{
			for (l_green = 0; l_green < l_maxColor ; l_green++)
			{
					
				for (l_blue = 0; l_blue < l_maxColor ; l_blue++)
				{
					if ((i % l_MaxInLine) == 0)
					{
						l_newRow = document.createElement('TR');
						l_Tbody.appendChild(l_newRow);
					}
					i++;
						
					l_newCell = document.createElement('TD');
					l_newRow.appendChild(l_newCell);
					l_newCell.style.background = '#' + l_colorArr[l_red] + l_colorArr[l_green] + l_colorArr[l_blue];
					l_newCell.innerHTML = '&nbsp;';
					l_newCell.style.cursor = 'pointer';
					l_newCell.m_color = '#' + l_colorArr[l_red] + l_colorArr[l_green] + l_colorArr[l_blue];
					l_newCell.m_targetid = a_target_id;
					l_newCell.className = 'cp';
					AttachEvent(l_newCell, 'click', UpdateColorValueInt, false);
				}
			}
		}
			
		l_newRow = document.createElement('TR');
		l_Tbody.appendChild(l_newRow);
		var l_color;
		var l_color_str;
			
		for (i = 0; i < l_MaxInLine ; i++)
		{
			l_color = (255/(l_MaxInLine-1)) * i;
			l_color_str = '#' + IntToHex(l_color,2) + IntToHex(l_color,2) + IntToHex(l_color,2);
			l_newCell = document.createElement('TD');
			l_newRow.appendChild(l_newCell);
			l_newCell.style.background = l_color_str;
			l_newCell.innerHTML = '&nbsp;';
			l_newCell.style.cursor = 'pointer';
			l_newCell.m_color = l_color_str;
			l_newCell.m_targetid = a_target_id;
			l_newCell.className = 'cp';
			AttachEvent(l_newCell, 'click', UpdateColorValueInt, false);
		}
			
	}
	
	
	function ShowColorPallete(a_placeholder_id, a_target_id, a_left, a_top, a_onchange_func)
	{
		var l_valObj = document.getElementById(a_target_id);
		var l_ph = document.getElementById(a_placeholder_id);
		var l_phIO = null;
		var l_phIO_Id = a_placeholder_id + '_io';
		
		l_ph.m_onchange_func = a_onchange_func;
		
		if (typeof(l_ph.m_IsInit) == "undefined")
		{
			// Should init
			
			//---------------------------------------------------------------------
			// On blur the control must shutdown. 
			//---------------------------------------------------------------------
	
			if (isIE)
			{
				l_onBlur = ' onblur="if (!isChildOf(document.activeElement,\'' + a_placeholder_id + '\')) {ColorPallete_Cancel(\'' + a_placeholder_id + '\');} " ';
				l_ChildrenOnBlur = l_onBlur;
			}
			else
			{
				l_onBlur = ' onblur="ColorPallete_CloseIfNotInFocus(\'' + a_placeholder_id + '\'); " ';
				l_ChildrenOnBlur = '';
			}

			l_onkeydown = ' onkeydown=" javascript:ddmenu_KeyPress(event, this, \'' + a_placeholder_id + '\') " ';
			l_onkeydown = ' ';
	
			l_OutStr = '<DIV tabIndex="1" ' + l_onBlur + l_onkeydown + ' id="' + a_placeholder_id + '_control" ></DIV>';
			l_ph.innerHTML = l_OutStr;
			
			l_phIO = document.createElement('INPUT');
			l_phIO.type = 'hidden'
			l_phIO.id = l_phIO_Id;
			l_phIO.value = a_target_id;
			l_ph.appendChild(l_phIO);
			
			InitColorPallete(a_placeholder_id + '_control', l_phIO_Id);
			l_ph.m_IsInit = true;
		}
		else
		{
			document.getElementById(l_phIO_Id).value = a_target_id;
		}
		
		l_ph.style.position = 'absolute';
		l_ph.style.left = a_left;
		l_ph.style.top = a_top;
		l_ph.style.display = '';
		
		document.getElementById(a_placeholder_id + '_control').focus();
		
	}
	
	function ColorPallete_CloseIfNotInFocus(a_placeholder_id)
	{
		document.getElementById(a_placeholder_id).style.display = 'none';
	}
	
	function ColorPallete_Cancel(a_placeholder_id)
	{
		ColorPallete_CloseIfNotInFocus(a_placeholder_id);
	}
		
	function UpdateColorValueInt(e)
	{
		e = !e ? event : e;
		var l_caller = !e.srcElement ? this : e.srcElement;
		var l_target_id = document.getElementById(l_caller.m_targetid).value
		
		var l_ph = document.getElementById(l_caller.m_targetid).parentNode;
			
		document.getElementById(l_target_id).value = l_caller.m_color;
		
		if (l_ph.m_onchange_func)
		{
			l_ph.m_onchange_func(document.getElementById(l_target_id));
		}
		
		document.getElementById(l_ph.id + '_control').focus();
			
	}
		
		
	function GetDocElement(a_id)
	{
		return document.getElementById(a_id);
	}
