/*------------------------------------------|
| Copyright (c) 2004-2006 Andree Riechert   |
| All rights reserved                       |
| www.fids3.com                             |
| www.fids3mobile.com                       |
| www.fids-consulting.com                   |
|-------------------------------------------*/

function navigate(url) {
//	window.navigate(url);
//	location = url;
	location.replace(url);
}

function navigateTo(f,dispatcher,service,operation,params,redirectparam) {
	navigate(createURL(f,dispatcher,service,operation,params,redirectparam));
}

function collectAndSubmitTo(f,dispatcher,service,operation,params) {
	navigate(concatFieldURL(f,dispatcher,service,operation,params));
}

function openLookupWindow(f,dispatcher,service,operation,params,redirectparam) {
	navigate(createURL(f,dispatcher,service,operation,params,redirectparam));
//	window.open(createURL(f,service,operation,params,redirectparam),"Lookup").focus();
}

function navigateToUrl(newurl) {
    if (newurl == null || newurl.length < 1)
    	if (history.length > 0)
           history.go(-1);
        else
           navigate(getServer() + "fids3/operator.html");
    else
        if (newurl == "menu")
           navigate(getServer() + "fids3/operator.html");
        else
           navigate(newurl);
}

function createURL(f,dispatcher,service,operation,params,redirectparam) {
	if (dispatcher == null || dispatcher.length < 1) {
		dispatcher = "disp";
	}
	var newurl = getServer() + "fids3/" + dispatcher + "?service=" + service + "&operation=" + operation;

	if (params != null && params != "") {
	   newurl = newurl + "&" + params;
	}

	if (params.charAt(params.length - 1) == '&')
	   params = params.substring(0,params.length - 1);

	if (newurl.indexOf("dispatcher=") < 0) {
	   newurl = newurl + "&dispatcher=" + dispatcher;
	}

	if (newurl.indexOf("portal=") < 0 && f != null) {
	   newurl = newurl + "&portal=" + f.portal.value;
	}

	if (redirectparam != null && redirectparam != "" && f != null) {
	   redirectparam = redirectparam + "=" + getServer() + "fids3/" + dispatcher + "?service=" + f.service.value + "&operation=refresh&portal=" + f.portal.value + "&dispatcher=" + f.dispatcher.value  + "&rowcount=" + f.rowcount.value + "&keyname=" + f.keyname.value + "&key=" + f.firstkey.value + "&" + getSelectionParams(f);
	   newurl = newurl + "&" + redirectparam.replace(/&/g,"%26");
	   }

	return newurl;
}

function concatFieldURL(f,dispatcher,service,operation,params) {
	comboboxToField(f)
	checkboxToFlag(f);
	concatSelection(f);

	if (operation == "top" || operation == "bottom" || operation == "refresh") {
		f.redirecturl.value="";
		f.deferredurl.value="";
	}

	if (dispatcher == null || dispatcher.length < 1) {
		dispatcher = "disp";
	}

	var newurl = getServer() + "fids3/" + dispatcher + "?service=" + service + "&operation=" + operation;

	for(var i = 0; i < f.length; i++)
		if (f.elements[i].type != "select-one" && f.elements[i].type != "checkbox")
   	       newurl = newurl + "&" + f.elements[i].name + "=" + encode(f.elements[i].value);

	if (params != null && params != "")
	   newurl = newurl + "&" + params;

	return newurl;
}

function encode(s) {
	return s.replace(/%/g,"%25").replace(/&/g,"%26").replace(/\+/g,"%2b").replace(/\n/g,"\\n");
}

function concatSelection(f) {
	if(typeof f.selection != 'undefined') {
	    var isMultipleSelection = false;
		for(var i = 0; i < f.length; i++) {
    		if (f.elements[i].name != "selection" && f.elements[i].type != "select-one" && f.elements[i].name.indexOf("selection") == 0) {
    			if (isMultipleSelection == false) {
    			   f.selection.value = "";
    			   isMultipleSelection=true;
    			}
    			if (f.elements[i].value.length > 0) {
    			   f.elements[i].value = f.elements[i].value.replace(/%/g,"%25");
    			   if (f.selection.value.length > 0) {
				      f.selection.value = f.selection.value + ' AND ';
    			   }
				   f.selection.value = f.selection.value + '(' + f.elements[i].value + ')';
    			}
	   		 }
    	}
	}
}

function checkOperationAndSubmit(f,op) {
if (f.operation_select.options[f.operation_select.selectedIndex].value == op)
   submitCommit(f);
}

function submit(f) {
//f.submit();
collectAndSubmitTo(f,f.dispatcher.value,f.service.value,f.operation.value,'');
}

function submitCommit(f) {
f.service.value = f.name;
comboboxToField(f);
checkboxToFlag(f);
f.operation.value=f.operation_select.options[f.operation_select.selectedIndex].value;
f.key.value="";
enableKeyFields(f);
submit(f);
}

function submitSearch(f) {
	if (f.operation.value == "search") {
       f.service.value = f.name;
       comboboxToField(f);
       f.redirecturl.value="";
       f.operation.value="search";
	   submit(f);
	   } else {
	     enableKeyFields(f);
		 changeKeyFieldsStyle(f,'black','white','1px solid red');
		 clearKeyFields(f);
		 cursorHome(f);
         f.operation.value="search";
	     }
}

function adjustOperation(f) {
	for(var i = 0; i < f.length; i++) {
    	if (f.elements[i].type == "select-one" && f.elements[i].name == "operation_select") {
   			for (i = 0; i < f.operation_select.length; i++)
       			if (f.operation_select.options[i].value==f.operation.value)
          			f.operation_select.selectedIndex=i;
	    }
    }
}

function checkboxToFlag(f) {
for(var i = 0; i < f.length; i++) {
    var cb = f.elements[i];
    if (cb.type == "checkbox" && cb.name.indexOf("_") > 0) {
    	var fname = cb.name.split("_")[0];
		for(var ix = 0; ix < f.length; ix++) {
		   var fld = f.elements[ix];
		   if (fld.name == fname) {
     	      if (cb.checked==false)
     	         fld.value="NO";
     	      else
     	         fld.value="YES";
		   }
		}
	}
}
}

function comboboxToField(f) {
for(var i = 0; i < f.length; i++) {
    var cb = f.elements[i];
    if (cb.type == "select-one" && cb.name.indexOf("_") > 0) {
    	var fname = cb.name.split("_")[0];
		for(var ix = 0; ix < f.length; ix++) {
		   var fld = f.elements[ix];
		   if (fld.name == fname)
			  fld.value=cb.options[cb.selectedIndex].value;
		}
	}
}
}

function flagToCheckbox(f) {
for(var i = 0; i < f.length; i++) {
    var cb = f.elements[i];
    if (cb.type == "checkbox" && cb.name.indexOf("_") > 0) {
    	var fname = cb.name.split("_")[0];
		for(var ix = 0; ix < f.length; ix++) {
		   var fld = f.elements[ix];
		   if (fld.name == fname) {
     	      if (fld.value=="YES")
     	         cb.checked=true;
     	      else
     	         cb.checked=false;
		   }
		}
	}
}
}

function fieldToCombobox(f) {
for(var i = 0; i < f.length; i++) {
    var cb = f.elements[i];
    if (cb.type == "select-one" && cb.name.indexOf("_") > 0) {
    	var fname = cb.name.split("_")[0];
		for(var ix = 0; ix < f.length; ix++) {
		   var fld = f.elements[ix];
		   if (fld.name == fname) {
               for (var cbix = 0; cbix < cb.length; cbix++)
                   if (cb.options[cbix].value==fld.value.replace(/%25/g,"%"))
                      cb.selectedIndex=cbix;
		   }
		}
	}
}
}

function getElementsByClass(node,searchClass,tag)  {
	var classElements = new Array();
	if ( node == null )
		node = document;

	if ( tag == null )
		tag = '*';

	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");

	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}

	return classElements;
}

function adjustKeyFieldAvailability(f) {
   	if (f.operation_select != 'undefined') {
        var keyfields = getElementsByClass(f,'editFieldKey','*');
        for(var i = 0; i < keyfields.length; i++) {
           keyfields[i].disabled = f.operation_select.options[f.operation_select.selectedIndex].value != 'insert';
   		}
	}
}

function enableFields(f,classname) {
    var selfields = getElementsByClass(f,classname,'*');
    for(var i = 0; i < selfields.length; i++) {
       selfields[i].disabled = false;
	}
}

function enableKeyFields(f) {
	enableFields(f,'editFieldKey');
}

function disableFields(f,classname) {
    var selfields = getElementsByClass(f,classname,'*');
    for(var i = 0; i < selfields.length; i++) {
       selfields[i].disabled = true;
	}
}

function disableKeyFields(f) {
	disableFields(f,'editFieldKey');
}

function disableReadOnlyFields(f) {
	disableFields(f,'readOnly.*');
//	changeFieldsStyle(f,'readOnly.*','','','1px solid blue')
}

function clearFields(f,classname) {
    var selfields = getElementsByClass(f,classname,'*');
    for(var i = 0; i < selfields.length; i++) {
       if (selfields[i].type == "select-one")
          selfields[i].selectedIndex = 0;
       else
          selfields[i].value = "";
	}
}

function clearKeyFields(f) {
	clearFields(f,'editFieldKey');
}

function changeFieldsStyle(f,classname,color,background,border) {
    var selfields = getElementsByClass(f,classname,'*');
    for(var i = 0; i < selfields.length; i++) {
       changeFieldStyle(selfields[i],color,background,border);
	}
}

function changeKeyFieldsStyle(f,color,background,border) {
	changeFieldsStyle(f,'editFieldKey',color,background,border);
}

function changeFieldStyle(f,color,background,border) {
	   if (color != null && color.length > 0)
          f.style.color = color;
	   if (background != null && background.length > 0)
          f.style.background = background;
	   if (border != null && border.length > 0)
          f.style.border = border;
}

function focusFirstButton(f) {
   for(var i = 0; i < f.length; i++)
      if (f.elements[i].type == "submit") {
          f.elements[i].focus();
          return;
      }
}

function cursorToErrField(f,fldname) {
	if (fldname == null || fldname.length < 1) {
		cursorHome(f);
	} else {
	  if (fldname == 'airline') {
	  	 fldname = 'fn';
	  }
	  for(var i = 0; i < f.length; i++)
  	     if (f.elements[i].name == fldname) {
	         f.elements[i].focus();
	         f.elements[i].select();
             changeFieldStyle(f.elements[i],'','','1px solid red');
	         return;
	     }
	  }
}

function cursorHome(f) {
	for(var i = 0; i < f.length; i++) {
	    var elm = f.elements[i];
	    if (elm.type == "text" || elm.type == "password" || elm.type == "textarea") {
	       if (elm.disabled == false) {
	          elm.focus();
	          return;
		   }
	    }
	}
}

function positionCursor(f) {
	if(typeof f.errfield == 'undefined')
  	   cursorHome(f);
    else
       cursorToErrField(f,f.errfield.value);
}

function renderFields(f) {
	for(var i = 0; i < f.length; i++)
		if (f.elements[i].type == "text" || f.elements[i].type == "textarea")
     	   f.elements[i].value = f.elements[i].value.replace(/\\n/g,"\n");
}

function afterForm(f) {
adjustOperation(f);
flagToCheckbox(f);
fieldToCombobox(f);
renderFields(f);
positionCursor(f);
//focusFirstButton(f);
adjustKeyFieldAvailability(f);
}

function getNavigationParams(f) {
return "portal=" + f.portal.value + "&dispatcher=" + f.dispatcher.value + "&key=" + f.firstkey.value + "&" + getSelectionParams(f) + "&rowcount=" + f.rowcount.value + "&keyname=" + f.keyname.value;
}

function getNavigationParamsLastKey(f) {
return "portal=" + f.portal.value + "&dispatcher=" + f.dispatcher.value + "&key=" + f.lastkey.value + "&" + getSelectionParams(f) + "&rowcount=" + f.rowcount.value + "&keyname=" + f.keyname.value;
}

function getSelectionParams(f) {
var paramList="";
for(var i = 0; i < f.length; i++) {
	if (f.elements[i].name.indexOf("selection") == 0 && f.elements[i].name.indexOf("_select") < 0) {
	   if (paramList.length > 0)
  	      paramList = paramList + "&" + f.elements[i].name + "=" + f.elements[i].value;
  	   else
  	      paramList = paramList + f.elements[i].name + "=" + f.elements[i].value;
	   }
}
return paramList.replace(/%/g,"%25");
}

function getAllParams(f) {
var paramList="";
for(var i = 0; i < f.length; i++) {
	if (paramList.length > 0)
  	   paramList = paramList + "&" + f.elements[i].name + "=" + f.elements[i].value;
  	else
  	   paramList = paramList + f.elements[i].name + "=" + f.elements[i].value;
}
return paramList;
}

function getServer() {
	return location.protocol + "//" + location.host + "/";
}

function getParaOnFtype(flightkey,arrpara,deppara) {
	if (flightkey != null && flightkey.length > 16 && flightkey.substring(16,17) == "D")
	   return deppara;
	else
	   return arrpara;
}

function printpage() {
	if (window.print) window.print();
}

function checkSyncClients() {
	for(var ix = 0; ix < document.applets.length; ix++) {
		if (document.applets[ix].jsurl != null && trim(document.applets[ix].jsurl).length > 1) {
		   navigate(document.applets[ix].jsurl);
		}
	}
	setTimeout("checkSyncClients()",1000);
}

function trim(str) {
  return str.replace(/^\s+|\s+$/g, "");
}



