var openedToolbarFlag=false;  // memory of toolbar submenu state
var parametricImages = new Object();
var mouseClickEvent = null;
var rowSelectCancel = false;
var actionDataSeparator = "~"

var headTop = -1;
var menuTop = -1;
var tableHead1;
var tableHead2;
var tableHead3;
var expandMenu;

function processScroll()
{
    if (headTop < 0)
    {
    	saveHeadPos();
	}
	if (headTop > 0)
	{
		if (document.documentElement && document.documentElement.scrollTop)
			theTop = document.documentElement.scrollTop;
		else if (document.body)
			theTop = document.body.scrollTop;
		
		if (theTop > headTop)
		{		
			tableHead1.style.top = (theTop-headTop) + 'px';
			tableHead2.style.top = (theTop-headTop) + 'px';
			tableHead3.style.top = (theTop-headTop) + 'px';
		}	
		 else
		{
			tableHead1.style.top = '0px';
			tableHead2.style.top = '0px';
			tableHead3.style.top = '0px';
		}	
	}
}

function saveHeadPos()
{	
    parTable = document.getElementById("headStart");
    if (parTable != null)
    {
	    headTop = parTable.offsetTop + 3;
	    
	    tableHead1 = document.getElementById("head1");
		tableHead1.style.position = "relative";
		
		tableHead2 = document.getElementById("head2");
		tableHead2.style.position = "relative";
		
		tableHead3 = document.getElementById("head3");
		tableHead3.style.position = "relative";	  
	}
}

/*
function processScroll()
{
    if (headTop < 0)
    {
    	saveHeadPos();
	}
	if (document.documentElement && document.documentElement.scrollTop)
		theTop = document.documentElement.scrollTop;
	else if (document.body)
		theTop = document.body.scrollTop
	
	if (theTop > headTop)
	{
		tableHead1.style.top = theTop + 'px';
		tableHead2.style.top = (theTop+head2Shift) + 'px';
		tableHead3.style.top = (theTop+head3Shift) + 'px';
	}	
	 else
	{
		tableHead1.style.top = (theTop + (headTop - theTop)) + 'px';
		tableHead2.style.top = (theTop + (headTop - theTop) + head2Shift) + 'px';
		tableHead3.style.top = (theTop + (headTop - theTop) + head3Shift) + 'px';
	}
	//parent.defaultStatus = "Scrolled : " + theTop;	
	//alert("Scrolled : " + theTop);	
}

function saveHeadPos()
{
	tableHead1 = document.getElementById("head1");
	tableHead1.style.position = "absolute";
	headTop = tableHead1.offsetTop;
	tableHead1.style.position = "relative";
		
	tableHead2.style.position = "absolute";
	tableHead2.style.position = "relative";
	head2Shift = tableHead2.offsetTop - headTop;
	tableHead3 = document.getElementById("head3");
	tableHead3.style.position = "absolute";
	head3Shift = tableHead3.offsetTop - headTop;
	tableHead3.style.position = "relative";
	window.status = "Pos saved ";
}
*/

function addOrRemoveValueToElementSelect(elmId,targetId, formName) {
	targetElm = document.forms[formName].elements[targetId];
	elm = document.getElementById("row_" + elmId);
	if (targetElm!=null) {     
		rowElm = document.getElementById("r_" + elmId);
    	if (!elm.checked) {
			//find star and end position
			var startPosition = targetElm.value.indexOf('' + actionDataSeparator + '' + elm.value + '' + actionDataSeparator + '');
			targetElm.value=
				targetElm.value.substring(0,
					startPosition) + 
				targetElm.value.substring(
					startPosition + elm.value.length + 1);
			switchClass(rowElm,"listItemHighlighted","");
		} else {
			// only if not already in there
			if (targetElm.value.indexOf('' + actionDataSeparator + '' + elm.value + '' + actionDataSeparator + '')) {
				targetElm.value=targetElm.value + elm.value + '' + actionDataSeparator + '';
			}
	  		appendClass(rowElm,"listItemHighlighted");
		}
		if (mouseClickEvent!=null) {	
			parametricsForceCloseMenu(mouseClickEvent);
		  mouseClickEvent.cancelBubble = true;
		} else if (event!=null) {
			parametricsForceCloseMenu(event);
		  event.cancelBubble = true;
		}		
	}
}

function addOrRemoveValueToElement(elm,targetId, formName, quickFilterInputId) {
	var targetElm = document.forms[formName].elements[targetId];
	if (targetElm!=null) {     
    if (!elm.checked) {
			//find star and end position
			var startPosition = targetElm.value.indexOf('' + actionDataSeparator + '' + elm.value + '' + actionDataSeparator + '');
			targetElm.value=
				targetElm.value.substring(0,
					startPosition) + 
				targetElm.value.substring(
					startPosition + elm.value.length + 1);
         
		} else {
			// only if not already in there
			if (targetElm.value.indexOf('' + actionDataSeparator + '' + elm.value + '' + actionDataSeparator + '')) {
				targetElm.value=targetElm.value + elm.value + '' + actionDataSeparator + '';
			}
		}
	}
	var qfTargetElm = document.forms['QuickFilterForm'].elements[quickFilterInputId];
	if (qfTargetElm!=null) {
		updateQuickFilter(formName,targetElm,qfTargetElm);
	}
}

function updateQuickFilter(formName,filterInputElement,quickFilterInput) {
	quickFilterInput.value = filterInputElement.value;
	quickFilterInput.disabled=false;
	if (!isAnyChecked(formName, 'selector')) {
		quickFilterInput.checked = false;
		quickFilterInput.disabled=true;
	} else {
		quickFilterInput.checked = true;
	}
}

function updateQuickFilterCheckbox(formName,quickFilterInputId) {
	var qfTargetElm = document.forms['QuickFilterForm'].elements[quickFilterInputId];
	if (!qfTargetElm) {
		return false;
	}
	qfTargetElm.disabled=false;
	if (!isAnyChecked(formName, 'selector')) {
		qfTargetElm.checked = false;
		qfTargetElm.disabled=true;
	} else {
		qfTargetElm.checked = true;
	}
}
function addOrRemoveAllValuesToFilter(elm,filterId) {
	var formName = 'PARAM' + filterId + 'FilterForm';
	if (!elm.checked) {
		for(var i=0;i<document.forms[formName].elements.length;i++) {
			var input = document.forms[formName].elements[i];
			if (isClass(document.forms[formName].elements[i], 'selector') && input.checked) {
				input.checked=false;		
				addOrRemoveValueToElement(input,'filterValues', formName);
			}
		}
	} else {
		for(var i=0;i<document.forms[formName].elements.length;i++) {
			var input = document.forms[formName].elements[i];
			if (isClass(document.forms[formName].elements[i], 'selector') && !input.checked) {
				input.checked=true;		
				addOrRemoveValueToElement(input,'filterValues', formName)
			}
		}
	}
	
	var qfTargetElm = document.forms['QuickFilterForm'].elements['QF_PARAM' + filterId];
	var valuesElm = document.forms[formName].elements['filterValues'];
	if (qfTargetElm!=null && valuesElm!=null) {
		updateQuickFilter(formName,valuesElm,qfTargetElm);
	}
	
	if (mouseClickEvent!=null) {	
	  mouseClickEvent.cancelBubble = true;
	} else if (event!=null) {
	  event.cancelBubble = true;
	}		
}



function processRow(rowId)
{
   if (rowSelectCancel || app.isMac) {
     rowSelectCancel=false;
     return;
   }
   var cbElm = document.getElementById("row_" + rowId);
   //var rowElm = document.getElementById("r_" + rowId);
   if (!cbElm.checked) {
      cbElm.checked = true;
   } else {
      cbElm.checked = false;
   }
   addOrRemoveValueToElementSelect(rowId,'values','selectedOpns');   
}

function processAction(action, actionData)
{
  document.forms["fState"].elements["action"].value = action;
  if (action == 'clearSelected' && actionData.indexOf('-1') == 0)
  {
    document.forms["fState"].elements["additionalData"].value = "";
    document.forms["fState"].elements["action"].value = "removeFilter";
  }
  else
    if (document.forms["selectedOpns"].elements["values"].value!=actionDataSeparator) {
      document.forms["fState"].elements["additionalData"].value=document.forms["selectedOpns"].elements["values"].value.substring(1,document.forms["selectedOpns"].elements["values"].value.length-1);
      }
    
  document.forms["fState"].elements["actionData"].value = actionData;
//  alert(actionData);
//  alert(document.forms["fState"].elements["additionalData"].value);
  document.forms["fState"].submit();
}

function preloadParametricImages() {
	if (document.images) {
		parametricImages['filter'] = new Image();
		parametricImages['filter'].src = '/site/images/filter.gif';
		parametricImages['filter_over'] = new Image();
		parametricImages['filter_over'].src = '/site/images/filter_over.gif';
		parametricImages['activeFilter'] = new Image();
		parametricImages['activeFilter'].src = '/site/images/activeFilter.gif';
		parametricImages['activeFilter_over'] = new Image();
		parametricImages['activeFilter_over'].src = '/site/images/activeFilter_over.gif';
		parametricImages['pt_arrow'] = new Image();
		parametricImages['pt_arrow'].src = '/site/images/pt_arrow.gif';
		parametricImages['pt_arrow_over'] = new Image();
		parametricImages['pt_arrow_over'].src = '/site/images/pt_arrow_over.gif';
		parametricImages['applyFilter'] = new Image();
		parametricImages['applyFilter'].src = '/site/images/btn_applyFilter.gif';
		parametricImages['applyFilter_over'] = new Image();
		parametricImages['applyFilter_over'].src = '/site/images/btn_applyFilter_over.gif';
	}
}

function showFilterMenu(menuId) {
	var menu = document.getElementById(menuId);
	if (menu.style.display=="none") {
		menu.style.display="block";
	} else {
		menu.style.display="none";
	}
}

function isAnyChecked(formName,inputClassName) {
//	alert(document.forms[formName].elements.length);
	for(var i=0;i<document.forms[formName].elements.length;i++) {
		var input = document.forms[formName].elements[i];
//		alert(isClassOf(document.forms[formName].elements[i], inputClassName)  + ' ' + document.forms[formName].elements[i].id + ' ' + input.checked);
		if (isClass(document.forms[formName].elements[i], inputClassName) && input.checked) {
			return true;
		}
	}
	return false;
}

function isAllChecked(formName,inputClassName) {
	for(var i=0;i<document.forms[formName].elements.length;i++) {
		var input = document.forms[formName].elements[i];
		if (isClass(document.forms[formName].elements[i], inputClassName) && !input.checked) {
			return false;
		}
	}
	return true;
}

function toolbar_button_over(elm,imageId) {
	if (activeMenu==null && !openedToolbarFlag) {
		hover(elm, parametricImages, imageId, 'pt_arrow');
	} else {
		var submenu = document.getElementById(elm.id + 'Menu');
		if (submenu==null) {
			if (activeMenu!=null) {
				hideMenu(activeMenu);
				activeMenu = activeMenu.parent;
	//			alert(activeMenu);
			}
			hover(elm, parametricImages, imageId, 'pt_arrow');
			openedToolbarFlag = true;
		} else {
			var leftPosition = null;
			if (elm.id=='Customize') {
				leftPosition = 'middle-left';
			}
			showMenu(elm.id + 'Menu',elm,'parametricsToolbar',parametricImages,imageId,'pt_arrow',false,'bottom',leftPosition);
			openedToolbarFlag = false;
		}
	}
}

function toolbar_button_out(elm,imageId,_killMenu) {
	if (activeMenu==null) {
		unhover(elm, parametricImages, imageId, 'pt_arrow');
	}
	if (_killMenu) {
		killMenu();
	}
}

function parametricsForceCloseMenu(e) {
	openedToolbarFlag = false;
	forceCloseMenu(e,'filterMenu');
	mouseClickEvent = e;
}


/*
 *	------------------------ ACTION function ------------------------
 */

function applySelectedFilter(errorMsg) {
	if (!isAnyChecked('selectedOpns','selector')) {
		alert(errorMsg) 
	} else {
		processAction('addFilter','-1' + actionDataSeparator + 'value' + actionDataSeparator + 'true');
	}
}

function parseRange(filterId, filterForm) {
	var result='';
	var msg = '';
	if (filterForm.elements[filterForm.id + 'Range'] && filterForm.elements[filterForm.id + 'Range'].checked) {
		if (filterForm.lowRange.value!='' || filterForm.highRange.value!='') {
			if (filterForm.lowRange.value=='' || isNaN(filterForm.lowRange.value)) {
				filterForm.lowRange.value='N/A'
			}
			if (filterForm.highRange.value=='' || isNaN(filterForm.highRange.value)) {
				filterForm.highRange.value='N/A'
			}
			result=actionDataSeparator + filterForm.lowRange.value + actionDataSeparator + filterForm.highRange.value;
		}
    if ((filterForm.lowRange.value != 'N/A') && (!isNaN(filterForm.lowRange.value)) &&
      (filterForm.highRange.value != 'N/A') && (!isNaN(filterForm.highRange.value)))
    {
      if (parseFloat(filterForm.lowRange.value) > parseFloat(filterForm.highRange.value))
      {
        msg = 'High Range value must be greater then Low Range value.';
        alert(msg);
      }
    }
	}
	if (msg!='') {
		return 'errorParse'
	}
	return result;
}

function updateTable(filterId, filterFormId, errorMsg, reset) {
	var filterForm = document.getElementById(filterFormId);
	var type = 'value';
	var range = parseRange(filterId, filterForm);
  if (range != 'errorParse') {
  	if (range!='') {
	  	type='range';
  	}
    var filterValues = filterForm.filterValues.value.substring(0,filterForm.filterValues.value.length-1);
    if (isAnyChecked(filterFormId,'selector')=='' && range=='') {
    	if (reset) {
    		processAction('removeFilter',filterId);	
    	} else {
	      alert(errorMsg);
	    }
    } else {
      processAction('addFilter',filterId + '' + actionDataSeparator + '' + type + range + filterValues);	
    }
  }
}

function resetAll() {
  if (confirm('Reset the table to its default appearance?'))
    processAction('resetAll','');	
}

function resetAllFilters() {
  if (confirm('Are you sure you want to Clear all Filters..?'))
	processAction('resetFilters','');	
}

function quickFilter() {
	var quickFilterForm = document.getElementById('QuickFilterMenu');
	var filterName= '';
	var resultActionData = actionDataSeparator;
	for(var i=0;i<document.forms['QuickFilterForm'].elements.length;i++) {
		var input = document.forms['QuickFilterForm'].elements[i];
		if (isClass(input,'selector'))  {
			if (input.checked) {
//				alert('Input-Id: ' + input.id);
				var filterId = input.id.substring(8); //QF_PARAM${colimnId}
				var filterForm = document.getElementById('PARAM' + filterId + 'FilterForm');
				var type = 'value';
				var range = parseRange(filterId,filterForm);
				if (range=='errorParse') {
					var filterNameElement = document.getElementById('QFINAME_' + filterId);
					if (filterNameElement!=null) {
						alert('Fix range values for ' + filterNameElement.innerHTML);
					}
					return false;
				}
//				alert('Range: ' + range);
		  	if (range!='') {
			  	type='range' ;
		  	}
				var values = range + input.value;
				var allValues = values.split(actionDataSeparator);
				var valuesCount = 0;
				for (var j=0; j<allValues.length; j++) {
					if (allValues[j]!='') {
						valuesCount++;
					}
				}
//				alert('All values count: ' + valuesCount);
				if (valuesCount>0) {
					resultActionData = resultActionData + filterId + actionDataSeparator + type + actionDataSeparator + valuesCount + values;
				}
//				alert(resultActionData);
			}
		}
	}
	if (resultActionData!=actionDataSeparator) {
		processAction('quickFilter',resultActionData.substring(1));	
	} else {
		resetAllFilters();
	}
}

function initQuickFilter() {
	var quickFilterForm = document.getElementById('QuickFilterMenu');
	var filterName= '';
	var resultActionData = '';
	for(var i=0;i<document.forms['QuickFilterForm'].elements.length;i++) {
		var input = document.forms['QuickFilterForm'].elements[i];
		if (isClass(input,'selector'))  {
			var filterId = input.id.substring(8); //QF_PARAM${colimnId}
			var formName = 'PARAM' + filterId + 'FilterForm'
			var valuesElm = document.forms[formName].elements['filterValues'];
			if (valuesElm!=null && input!=null) {
				updateQuickFilter(formName,valuesElm,input);
			}
		}
	}
}

// customize table functions
function addParams()
{
  var listShow = document.getElementById("lShow");
  var listHide = document.getElementById("lHide");
  var toRemoveArr = new Array();
  for(i=0;i<listShow.options.length;i++) {
    if (listShow.options[i].selected)
    {
      var opt = new Option(listShow.options[i].text, listShow.options[i].value, false, false);
      listHide.options[listHide.options.length] = opt;
      toRemoveArr.push(listShow.options[i].value);
    }    
  }
  for (j=0; j<toRemoveArr.length; j++)
  {
    for(k=0;k<listShow.options.length;k++) {
      if (listShow.options[k].value == toRemoveArr[j])
      {
        listShow.options[k] = null;
      }
    }
  }
}

function removeParams()
{
  var listShow = document.getElementById("lShow");
  var listHide = document.getElementById("lHide");
  var toRemoveArr = new Array();
  for(i=0;i<listHide.options.length;i++) {
    if (listHide.options[i].selected)
    {
      var opt = new Option(listHide.options[i].text, listHide.options[i].value, false, false);
      listShow.options[listShow.options.length] = opt;
      toRemoveArr.push(listHide.options[i].value);
    }
  }
  for (j=0; j<toRemoveArr.length; j++)
  {
    for(k=0;k<listHide.options.length;k++) {
      if (listHide.options[k].value == toRemoveArr[j])
      {
        listHide.options[k] = null;
      }
    }
  }  
}

function posDecrease()
{
  var listShow = document.getElementById("lShow");
  var selInd = listShow.selectedIndex;
  if (selInd > 0)
  {
    var prevOpt = listShow.options[selInd - 1];
    var selOpt = listShow.options[selInd];
    listShow.options[selInd] = new Option(" "," ",false, false);    
    listShow.options[selInd - 1] = selOpt;
    listShow.options[selInd] = prevOpt;
  }
}

function posIncrease()
{
  var listShow = document.getElementById("lShow");
  var selInd = listShow.selectedIndex;
  if (selInd < listShow.options.length -1)
  {
    var nextOpt = listShow.options[selInd + 1];
    var selOpt = listShow.options[selInd];
    listShow.options[selInd] = new Option(" "," ",false, false);
    listShow.options[selInd + 1] = selOpt;
    listShow.options[selInd] = nextOpt;
  }
}

function customizeUpdate()
{
  var listShow = document.getElementById("lShow");
  var stateForm = document.getElementById("fState");
  document.forms["fState"].elements["action"].value = "customizeUpdate";
  var actionStr = "";
  for (i=0; i<listShow.options.length; i++)
  {
    if (i > 0)
      actionStr += ",";
    actionStr += "["+listShow.options[i].text+"]";
  }
  document.forms["fState"].elements["actionData"].value = actionStr;
  document.forms["fState"].submit();
  return false;
}

function customizeRevert()
{
  var stateForm = document.getElementById("fState");
  stateForm.elements["action"].value = "customizeRevert";
  stateForm.submit();
  return false;
}

function printVersion(id)
{
  printWindow = open("/PowerSolutions/parametrics.do?action=printVersion&id=" + id,"printVersion","scrollbars,resizable,width=800,height=600");
}

function invertAxis(recs)
{
  if (recs > 254)
    alert("Invert axis is allowed for less than 254 products. Filter some products out at first.");
  else
    processAction('invertAxis');
}

function cancelRowSelect() {
	rowSelectCancel=true;
}

/*
 *	------------------------ ACTION function (end) ------------------
 */
window.onscroll = processScroll;
document.onclick = parametricsForceCloseMenu;
preloadParametricImages();

commands[commandIter++] = "initQuickFilter()";

