var INVALID_NAME_REGEXP = "[^ !#-%\\'-\\+\\--\\.0-9A-\\[\\]-~]+";
var ID_BACKGROUND_BLOCKER = "backgroundBlocker";
var ID_WORKING_IN_PROGRESS_BAR = "workingInProgressBar";
var BACKGROUND_BLOCKER_ZINDEX = 100;

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
// Common JS functions 
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}

// called at onLoad. To be overridden
function initShell(){
	// empty function
}

// set the answer. To be use by dd and hs
function setAnswer(progId,name){ 
	//the javascript responded variable used to flag when a selection has been made.
	responded=true;
	var h = MM_findObj("answer" + progId);
	h.value = name;  
}

MM_reloadPage(true);


function emailCheck(str) {

		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   alert("Invalid E-mail Address")
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   alert("Invalid E-mail Address")
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    alert("Invalid E-mail Address")
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    alert("Invalid E-mail Address")
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    alert("Invalid E-mail Address")
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    alert("Invalid E-mail Address")
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    alert("Invalid E-mail Address")
		    return false
		 }

 		 return true					
	}

function validateEmail(email)
{	
	if ((email==null)||(email==""))
	{
		alert("Please Enter your Email Address")
		return false
	}
	if (emailCheck(email)==false)
	{
		return false
	}
	return true
}

function hideElement(eleId)
{
	setElementStyle(eleId, "display", "none");
}

function showElement(eleId)
{
	setElementStyle(eleId, "display", "block");
}

function toggleElement(eleId)
{
	var ele = (typeof eleId == 'object') ? eleId : document.getElementById(eleId);
	if (ele && ele.style["display"])
	{
		if (ele.style["display"]=="block")
		{
			ele.style["display"] = "none";	
		}
		else if (ele.style["display"]=="none")
		{
			ele.style["display"] = "block";	
		}
	}
}

function setElementZIndex(eleId, nZIndex)
{
	setElementStyle(eleId, "zIndex", nZIndex);
}

function setElementStyle(eleId, styleName, styleValue)
{
	var ele = (typeof eleId == 'object') ? eleId : document.getElementById(eleId);
	if (ele) ele.style[styleName] = styleValue;
}

function popUpWin(strUrl, nWidth, nHeight)
{	
	var screenX = top.window.screenLeft;
	var screenY = top.window.screenTop;
	var screenW = top.document.body.clientWidth;
	var screenH = top.document.body.clientHeight;

	var xPos = 50;
	var yPos = 50;

	var win=self.open(strUrl, "popUp", 
		"top=" +yPos+ ",left=" +xPos+ ",width=" +nWidth+ ",height= " +nHeight+ ",menubar=0,resizable=1,scrollbars=1");
	win.focus();
}

function navigateTo(strUrl)
{
	if (document.forms['navigationForm'])
	{
		document.forms['navigationForm'].action = strUrl;
		document.forms['navigationForm'].submit();	
	}	
}

function tryLogout(str, url)
{
	if (!confirm(str))
	{
		return;	
	}
	if (!url || url.length==0)
	{
		url = "../server/login.jsp?t=" + new Date().getTime(); 
	}
	navigateTo(url);
}

function showAlertMessage(strMessage)
{
	if (strMessage.length>0)
	{
		alert(strMessage);
	}	
}

function validateNameField(strFieldName, strFieldValue, nMinLength, nMaxLength, invalidRegExp, strTakenNames)
{
	if (strFieldValue.length<nMinLength)
	{
		alert(formatAppString(STR_FIELD_VALUE_TOO_SHORT2, strFieldName, nMinLength));
		return false;
	}
	if (strFieldValue.length>nMaxLength)
	{
		alert(formatAppString(STR_FIELD_VALUE_TOO_LONG2, strFieldName, nMaxLength));
		return false;
	}
	if (strFieldValue.search(invalidRegExp)>=0)
	{
		alert(formatAppString(STR_FIELD_VALUE_INVALID1, strFieldName));
		
		return false;
	}
	if (strTakenNames.indexOf("|"+strFieldValue+"|")>=0)
	{
		alert(formatAppString(STR_FIELD_VALUE_NOT_UNIQUE2, strFieldName, strFieldValue));
		return false;
	}
	return true;
}

function handleAjaxResult(results)
{
	if (results.errorMsg)
	{
		alert(results.errorMsg);
	} else
	{
		alert("Server return error: " + results.errorCode);
	}
	
	// If it's userSession exception, reload the page.
	if (30101==results.errorCode)
	{
		window.location = window.location;
	}
}

function hideDropdownBoxesForForm(formName)
{ // This is used to hack the Overlapping bugs with IE. Everytime a dialog is sent to back, this method should be called to hide the dropdown boxes.
	var theForm = document.forms[formName];
	if (!theForm) return;
	
	for (var i=0; i<theForm.elements.length; i++)
	{
		var formElem = theForm.elements[i];
		if ('select-one'==formElem.type)
		{
			formElem.style.visibility="hidden";
		}
	}
}

function showDropdownBoxesForForm(formName)
{ // Work with hideDropdownBoxesForForm() method.
	var theForm = document.forms[formName];
	if (!theForm) return;
	
	for (var i=0; i<theForm.elements.length; i++)
	{
		var formElem = theForm.elements[i];
		if ('select-one'==formElem.type)
		{
			formElem.style.visibility="visible";
		}
	}
}

function formatAppString(strRaw, strDetail1, strDetail2)
{
	if (strDetail2)
	{
		return strRaw.replace(/%1/g, strDetail1).replace(/%2/g, strDetail2);
	}
	return strRaw.replace(/%1/g, strDetail1);
}
