/*

This file contains module store/render methods specific to the screener in this folder

*/


Screener_class.prototype.results_symbolRolloverContent = function(symbolData) {
	
	var width = 240;
	var height = 100;
	var xaxis = 38;
	var chartSrc = buildAbsolutePath('/tools/charts/microchart.asp?symbol='+ symbolData.ticker +'&timeframe=6mo&interval=1dy&width='+ width +'&height='+ height +'&xaxisfixedwidth='+xaxis + '&showSymbol=false');
	symbolData.chart = Element.create("img", {"src":chartSrc, "width":width, "height":height, "alt":"Loading chart for "+ symbolData.CompanyName});
	
	var content = Element.create("div", {"id":"microChart"},[
		Element.create("h3", {}, [
			symbolData.CompanyName,
			" ",
			Element.create("span", {}, ["(", symbolData.StockExchange_format, ":", Element.create("span", {}, symbolData.ticker), ")"])
		]),
		Element.create("div", {"class":"category"}, ["Sector: ", Element.create("span", {}, symbolData.Sector_format)]),
		Element.create("div", {"class":"category"}, ["Industry: ", Element.create("span", {}, symbolData.Industry_format)]),
		Element.create("div", {"class":"price"}, [
			"Last: ",
			Element.create("span", {"style":"font-weight:bold"}, symbolData.PriceCurrent_format),
			Element.create("span", {"style":"margin-left: 10px;margin-right:5px;"}, symbolData.PriceDlrChgSinceMarketOpen_formatChart),
			Element.create("span", {}, symbolData.PricePctChgSinceMarketOpen_formatChart),
			Element.create("span", {}, (symbolData.Realtime?'&nbsp;':'<img class="icon" src="https://tdameritrade.cache.wallst.com/images/icons/icn_delayed.gif"/>'))
		]),
		//this.buildChangeLabel({label: "Last: ", price: (symbolData.Realtime?symbolData.PriceCurrent_format:symbolData.PriceCurrent_format), change: symbolData.PriceDlrChgSinceMarketOpen_format, changePercent: symbolData.PricePctChgSinceMarketOpen_format}),
		Element.create("div", {"id":"chart"}, symbolData.chart),
		Element.create("p", {}, ["Based on last " + (symbolData.Realtime?'':'delayed')+" trade at ", symbolData.LastTradeTime_format])
	]);
	return content;
	
	
	//return Element.create("div",{},recurseObject({o:symbolData,nowrite:1}));
}




Screener_class.prototype.GUI_renderCriterionSub_StochasticKvsD = function(criterion,rowCriteria,criteriaContainer) {


	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("StochasticKvsD fieldValues",fieldValues)


	var aboveBelow = "above";
	var timeframe = 1;

	var isNegative = this.isCriteriaNegative(rowCriteria);
	if (isNegative) {
		aboveBelow = "below";
		rowCriteria = this.reverseCriteria(rowCriteria);
	}

	//console.info("StochasticKvsD rowCriteria.values",rowCriteria.values)
	this.GUI_setCriterionRadioInputsSelected(criteriaContainer,fieldValues.length?fieldValues[0]:this.getObjectFirstProperty(criterion.radioInputs))

	// get the last character of the value for the timeframe (or the default of 1)
	var timeframe = rowCriteria.values[0] ? (this.util.charLast(rowCriteria.values[0])) : 1;


	var inputValues = {0:fieldValues[1],1:aboveBelow,2:fieldValues[2],3:timeframe};
	//console.info("StochasticKvsD input values",inputValues);

	this.GUI_setCriteriaInputValues(criteriaContainer,inputValues);



}


Screener_class.prototype.GUI_storeCriterionSub_StochasticKvsD = function(criterion,rowCriteria,criteriaContainer) {



	var radioInputValue = this.GUI_getCriterionRadioInputsValue(criteriaContainer,this.getObjectFirstProperty(criterion.radioInputs));

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [radioInputValue,layoutInputs[0].value,layoutInputs[2].value,layoutInputs[1].value,layoutInputs[3].value];
	//console.info("StochasticKvsD inputValues",inputValues)

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);

	rowCriteria.values = ["GTR,0|LEQ,"+inputValues[4]];

	if (inputValues[3] == "below") {
		rowCriteria = this.reverseCriteria(rowCriteria);
	}


	//recurseObject({o:rowCriteria,console:1,n:"StochasticKvsD rowCriteria"})

}


Screener_class.prototype.GUI_renderCriterionSub_StochasticsCrossing = function(criterion,rowCriteria,criteriaContainer,titleContainer) {

	var field = rowCriteria.field;

	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("StochasticsCrossing fieldValues",field,fieldValues)


	var aboveBelow = "above";
	var timeframe = 1;

	var isNegative = this.isCriteriaNegative(rowCriteria);
	if (isNegative) {
		aboveBelow = "below";
		rowCriteria = this.reverseCriteria(rowCriteria);
	}

	//console.info("StochasticKvsD rowCriteria.values",rowCriteria.values)
	this.GUI_setCriterionRadioInputsSelected(criteriaContainer,fieldValues.length?fieldValues[0]:this.getObjectFirstProperty(criterion.radioInputs))

	// get the last character of the value for the timeframe (or the default of 1)
	var timeframe = rowCriteria.values[0] ? (this.util.charLast(rowCriteria.values[0])) : 1;


	criterion = this.getCriterion("StochasticCrossingLine");

	var inputValues = {0:aboveBelow,1:fieldValues[2],2:fieldValues[1],3:timeframe};
	//console.info("StochasticsCrossing input values",inputValues);


	this.GUI_setCriteriaInputValues(criteriaContainer,inputValues);


}


Screener_class.prototype.GUI_storeCriterionSub_StochasticsCrossing = function(criterion,rowCriteria,criteriaContainer) {

	var radioInputValue = this.GUI_getCriterionRadioInputsValue(criteriaContainer,this.getObjectFirstProperty(criterion.radioInputs));

	console.info("StochasticsCrossing rowCriteria.values",rowCriteria.values)

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	rowCriteria.values = ["EQU,"+layoutInputs[3].value];

	criterion = this.getCriterion("StochasticCrossingLine");

	// Fast/Slow, %K, Line
	var inputValues = [radioInputValue,layoutInputs[2].value,layoutInputs[1].value];

	if (layoutInputs[0].value == "below") {
		rowCriteria = this.reverseCriteria(rowCriteria);
	}


	//console.info("StochasticsCrossing inputValues",inputValues);


	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);




}




Screener_class.prototype.GUI_renderCriterionSub_StochasticCrossingOverboughtOversold = function(criterion,rowCriteria,criteriaContainer,titleContainer) {

	var field = rowCriteria.field;

	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("StochasticsCrossingOverboughtOversold fieldValues",field,fieldValues)

	var isNegative = this.isCriteriaNegative(rowCriteria);
	if (isNegative) {
		rowCriteria = this.reverseCriteria(rowCriteria);
	}

	//console.info("StochasticsCrossingOverboughtOversold rowCriteria.values",rowCriteria.values)
	this.GUI_setCriterionRadioInputsSelected(criteriaContainer,fieldValues.length?fieldValues[0]:this.getObjectFirstProperty(criterion.radioInputs))

	Element.addClass(Element.parseSelector(".criteriaButtonsView",titleContainer),"none"); // hide button/inputs links

	criterion = this.getCriterion("StochasticCrossingOverboughtOversold");

	// select button button
	// positive - overbought, negative - oversold
	if (isNegative) {
		this.GUI_selectCriteriaButton(criteriaContainer,"oversold");
	}
	else {
		this.GUI_selectCriteriaButton(criteriaContainer,"overbought");
	}


	var inputValues = {0:fieldValues[1]};
	console.info("StochasticsCrossing OO input values",inputValues);


	this.GUI_setCriteriaInputValues(criteriaContainer,inputValues);


}


Screener_class.prototype.GUI_storeCriterionSub_StochasticCrossingOverboughtOversold = function(criterion,rowCriteria,criteriaContainer) {

	var radioInputValue = this.GUI_getCriterionRadioInputsValue(criteriaContainer,this.getObjectFirstProperty(criterion.radioInputs));

	console.info("StochasticsCrossingOverboughtOversold rowCriteria.values",rowCriteria.values)


	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	rowCriteria.values = ["EQU,"+1]; // always use PreviousClose (1)


	criterion = this.getCriterion("StochasticCrossingOverboughtOversold");

	var inputValues = [radioInputValue,layoutInputs[0].value];

	var buttonValue = this.GUI_getCriteriaButtonValue(criteriaContainer);

	if (buttonValue == "oversold") {
		rowCriteria = this.reverseCriteria(rowCriteria);
	}
	
	// notoverboughtoversold removed per MAINT057918


	console.info("StochasticsCrossingOverboughtOversold inputValues",inputValues);


	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);




}



// THIS lives in Screener_class.criteria.js as it is shared with ETFs
// Screener_class.prototype.GUI_renderCriterionSub_Pricevs52w




Screener_class.prototype.GUI_renderCriterionSub_MovingAvgCrossovers = function(criterion,rowCriteria,criteriaContainer) {


	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("MovingAvg fieldValues",fieldValues)


	var aboveBelow = "above";
	var timeframe = 1;

	var isNegative = this.isCriteriaNegative(rowCriteria);
	if (isNegative) {
		aboveBelow = "below";
		rowCriteria = this.reverseCriteria(rowCriteria);
	}

	if (rowCriteria.values.length > 1) {
		rowCriteria.values.shift(); // remove the first value as it is GEQ,1 and not relevant
	}
	//console.info("MAC rowCriteria.values",rowCriteria.values)

	// get the last character of the value for the timeframe (or the default of 1)
	var timeframe = rowCriteria.values[0] ? (rowCriteria.values[0].charAt(rowCriteria.values[0].length-1)) : 1;

	//console.info("MAC input values",{0:fieldValues[0],1:aboveBelow,2:fieldValues[1],3:timeframe});

	this.GUI_setCriteriaInputValues(criteriaContainer,{0:fieldValues[0],1:aboveBelow,2:fieldValues[1],3:timeframe});



}


Screener_class.prototype.GUI_storeCriterionSub_MovingAvgCrossovers = function(criterion,rowCriteria,criteriaContainer) {


	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [layoutInputs[0].value,layoutInputs[1].value,layoutInputs[2].value,layoutInputs[3].value];
	//console.info("MAC inputValues",inputValues)

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);


	if (inputValues[3] == 1) { // current session
		rowCriteria.values = ["EQU,1"];
	}
	else {
		rowCriteria.values = ["GEQ,1|LEQ,"+inputValues[3]];
	}

	if (inputValues[1] == "below") {
		rowCriteria = this.reverseCriteria(rowCriteria);
	}


	//recurseObject({o:rowCriteria,console:1,n:"MAC rowCriteria"})

}

Screener_class.prototype.GUI_renderCriterionSub_MovingAvg = function(criterion,rowCriteria,criteriaContainer) {

	// NOTE: Above/Below value is stored by _buttons module

	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("MovingAvg fieldValues",fieldValues)

	this.GUI_setCriteriaInputValues(criteriaContainer,{1:fieldValues[0]});

}


Screener_class.prototype.GUI_storeCriterionSub_MovingAvg = function(criterion,rowCriteria,criteriaContainer) {

	// NOTE: Above/Below value is retrieved by _buttons module

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [layoutInputs[0].value,layoutInputs[1].value];

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);

}



Screener_class.prototype.GUI_renderCriterionSub_ParabolicSAR = function(criterion,rowCriteria,criteriaContainer) {

	// deconstruct field and populate input values

	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("ParabolidSAR fieldValues",fieldValues)

	this.GUI_selectCriteriaButton(criteriaContainer,fieldValues[2]);
	this.GUI_setCriteriaInputValues(criteriaContainer,{0:fieldValues[0],1:fieldValues[1]});


	this.GUI_selectCriteriaButton(criteriaContainer,fieldValues[0]);
}



Screener_class.prototype.GUI_storeCriterionSub_ParabolicSAR = function(criterion,rowCriteria,criteriaContainer) {
	// get input values and construct screener field

	// NOTE: button value is selected by _buttons module
	// Store button value and clear array

	var buttonValue = rowCriteria.values[0];
	rowCriteria.values = [buttonValue]

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [layoutInputs[0].value,layoutInputs[1].value];

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);



}

Screener_class.prototype.GUI_renderCriterionSub_BollingerBandsCrossOver = function(criterion,rowCriteria,criteriaContainer) {

	var valueMap = this.getDatum("BBCO_ValueMap");
	var selected = "";
	if (rowCriteria.values.length) {
		selected = rowCriteria.values[0];
		console.info(selected)
	}

	var span = Element.create("span",{},"Previous close&nbsp;");
	Element.insertBefore(span,criteriaContainer.firstChild)

	var select = Element.buildSelect({selected:selected,data:valueMap},{valuesSelect:"yes"});
	Element.insertAfter(select,span)

	// deconstruct field and populate input values

	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("BBC fieldValues",fieldValues)

	this.GUI_selectCriteriaButton(criteriaContainer,fieldValues[2]);
	this.GUI_setCriteriaInputValues(criteriaContainer,{0:fieldValues[0],1:fieldValues[1]});


	this.GUI_setCriterionRadioInputsSelected(criteriaContainer,rowCriteria.values.length?rowCriteria.values[0]:this.getObjectFirstProperty(criterion.radioInputs))

}



Screener_class.prototype.GUI_storeCriterionSub_BollingerBandsCrossOver = function(criterion,rowCriteria,criteriaContainer) {
	// get input values and construct screener field

	// NOTE: button value is selected by _buttons module
	// Store button value and clear array

	var buttonValue = rowCriteria.values[0];
	rowCriteria.values = []; 

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [layoutInputs[0].value,layoutInputs[1].value,buttonValue];

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);

	var value = Element.parseSelector('select[valuesSelect]',criteriaContainer,"first").value;

	rowCriteria.values = [value];


}


Screener_class.prototype.GUI_renderCriterionSub_MoneyFlowIndex = function(criterion,rowCriteria,criteriaContainer) {

	// deconstruct field and populate input values
	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("MFI fieldValues",fieldValues)

	var aboveBelow = "above";
	var isNegative = this.isCriteriaNegative(rowCriteria);
	if (isNegative) {
		aboveBelow = "below";
		rowCriteria = this.reverseCriteria(rowCriteria);
	}

	var lineValue = criterion.fieldPatternDefaults[2]

	if (rowCriteria.values.length ) {
		var lineValue = rowCriteria.values.join("|");
	}

	var inputValues = {0:aboveBelow,1:lineValue,2:fieldValues[0]};
	//console.info("MFI input values",inputValues);
		
	this.GUI_setCriteriaInputValues(criteriaContainer,inputValues);




}



Screener_class.prototype.GUI_storeCriterionSub_MoneyFlowIndex = function(criterion,rowCriteria,criteriaContainer) {
	// get input values and construct screener field

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [layoutInputs[2].value,layoutInputs[0].value,layoutInputs[1].value];
	//console.info("MFI inputValues",inputValues)

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);

	rowCriteria.values = inputValues[2].split("|");

	if (inputValues[1] == "below") {
		rowCriteria = this.reverseCriteria(rowCriteria);
	}

}



Screener_class.prototype.GUI_renderCriterionSub_RateOfChange = function(criterion,rowCriteria,criteriaContainer) {

	// NOTE: buttons are selected by _buttons module

	// deconstruct field and populate input values
	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("ROC values",fieldValues)

	this.GUI_setCriteriaInputValues(criteriaContainer,{0:fieldValues[0]});

}



Screener_class.prototype.GUI_storeCriterionSub_RateOfChange = function(criterion,rowCriteria,criteriaContainer) {
	// get input values and construct screener field

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [layoutInputs[0].value];
	//console.info("ROC values",inputValues)
	//console.info("ROC criteria",rowCriteria)

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);

	// NOTE: rowCriteria.values are stored by the _buttons

}



Screener_class.prototype.GUI_renderCriterionSub_RTRatingChange = function(criterion,rowCriteria,criteriaContainer) {

}



Screener_class.prototype.GUI_storeCriterionSub_RTRatingChange = function(criterion,rowCriteria,criteriaContainer) {

	rowCriteria.values = ["EQU,1"];

}



Screener_class.prototype.GUI_renderCriterionSub_MACD = function(criterion,rowCriteria,criteriaContainer) {

	// NOTE: buttons are selected by _buttons module

	// deconstruct field and populate input values
	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("MACD values",fieldValues)

	this.GUI_setCriteriaInputValues(criteriaContainer,{0:fieldValues[1],1:fieldValues[0]});

}



Screener_class.prototype.GUI_storeCriterionSub_MACD = function(criterion,rowCriteria,criteriaContainer) {
	// get input values and construct screener field

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [layoutInputs[0].value,layoutInputs[1].value];
	//console.info("MACD values",inputValues)
	//console.info("MACD criteria",rowCriteria)

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);
	//console.info("MACD field",rowCriteria.field)
	// NOTE: rowCriteria.values are stored by the _buttons

}







Screener_class.prototype.GUI_renderCriterionSub_Dividends = function(criterion,rowCriteria,criteriaContainer) {

	// NOTE: buttons are selected by _buttons module

	// deconstruct field and populate input values
	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("Dividends values",fieldValues)

	this.GUI_setCriteriaInputValues(criteriaContainer,{0:fieldValues[0],1:fieldValues[1]});

}



Screener_class.prototype.GUI_storeCriterionSub_Dividends = function(criterion,rowCriteria,criteriaContainer) {

	// get input values and construct screener field

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [layoutInputs[0].value,layoutInputs[1].value];
	//console.info("Dividends values",inputValues)
	//console.info("Dividends criteria",rowCriteria)

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);
	//console.info("Dividends field",rowCriteria.field)
	// NOTE: rowCriteria.values are stored by the _buttons

	rowCriteria.values = ["GTR,0"];

}




Screener_class.prototype.GUI_renderCriterionSub_OBV = function(criterion,rowCriteria,criteriaContainer) {

	// NOTE: buttons are selected by _buttons module

	// deconstruct field and populate input values
	var fieldValues = this.deconstructFieldName(rowCriteria.field,criterion.fieldPattern,criterion.fieldPatternDefaults);
	//console.info("OBV values",fieldValues)

	this.GUI_setCriteriaInputValues(criteriaContainer,{0:fieldValues[0]});

}



Screener_class.prototype.GUI_storeCriterionSub_OBV = function(criterion,rowCriteria,criteriaContainer) {
	// get input values and construct screener field

	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var inputValues = [layoutInputs[0].value];
	//console.info("OBV values",inputValues)
	//console.info("OBV criteria",rowCriteria)

	rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,inputValues);
	//console.info("OBV field",rowCriteria.field)
	// NOTE: rowCriteria.values are stored by the _buttons

}



Screener_class.prototype.GUI_renderCriterionSub_RSI = function(criterion,rowCriteria,criteriaContainer) {

	if (rowCriteria.values.length ) {

		var lineValue = rowCriteria.values[0];

		if (/OverBought/.test(rowCriteria.field)) {

			criterion = this.getCriterion("RSIOverBoughtSold");

			// switch to buttons view
			this.GUI_criteriaButtonsViewClicked(null,criteriaContainer,null);
			var isNegative = this.isCriteriaNegative(rowCriteria);
			this.GUI_selectCriteriaButton(criteriaContainer,isNegative?"Oversold":"Overbought");

		}
		else {

			this.GUI_renderCriterionSub_MoneyFlowIndex(criterion,rowCriteria,criteriaContainer);

		}

	}

	else {
			this.GUI_renderCriterionSub_MoneyFlowIndex(criterion,rowCriteria,criteriaContainer);
	}


}

Screener_class.prototype.GUI_storeCriterionSub_RSI = function(criterion,rowCriteria,criteriaContainer) {

	var criteriaButtons = Element.parseSelector("div.criteriaButtons",criteriaContainer,"first")
	var criteriaInputs = Element.parseSelector("div.criteriaInputs",criteriaContainer,"first")
	var isButtons = Element.hasClass(criteriaInputs,"none");

	//console.info("RSI rowCriteria.values",rowCriteria.values)

	if (isButtons) {

		criterion = this.getCriterion("RSIOverBoughtSold");

		rowCriteria.field = this.constructFieldName(criterion.fieldPatternOrder,criterion.fieldPatternDefaults);
		rowCriteria.values = (rowCriteria.values[0] == "Overbought") ? ["EQU,1"] : ["EQU,-1"];

	}
	else {

		criterion = this.getCriterion("RSI");

		this.GUI_storeCriterionSub_MoneyFlowIndex(criterion,rowCriteria,criteriaContainer);
	

	}

}





Screener_class.prototype.GUI_renderCriterionSub_ADX = function(criterion,rowCriteria,criteriaContainer) {

	// Shares the same inputs interface as MFI
	this.GUI_renderCriterionSub_MoneyFlowIndex(criterion,rowCriteria,criteriaContainer);

}


Screener_class.prototype.GUI_storeCriterionSub_ADX = function(criterion,rowCriteria,criteriaContainer) {

	this.GUI_storeCriterionSub_MoneyFlowIndex(criterion,rowCriteria,criteriaContainer);
	

}


Screener_class.prototype.GUI_renderCriterionSub_DMI = function(criterion,rowCriteria,criteriaContainer) {

	// Shares the same inputs interface as MFI
	//this.GUI_renderCriterionSub_MoneyFlowIndex(criterion,rowCriteria,criteriaContainer);

	if (rowCriteria.values.length) {

		var inputValues = this.DMI_getInputsFromValue(rowCriteria.values[0]);

		if (inputValues) {
			this.GUI_selectCriteriaButton(criteriaContainer,inputValues[0]);
			this.GUI_setCriteriaInputValues(criteriaContainer,{0:inputValues[1]});
		}
	}

}


Screener_class.prototype.GUI_storeCriterionSub_DMI = function(criterion,rowCriteria,criteriaContainer) {

	//this.GUI_storeCriterionSub_MoneyFlowIndex(criterion,rowCriteria,criteriaContainer);

	var buttonValue = this.GUI_getCriteriaButtonValue(criteriaContainer);
	var layoutInputs = Element.parseSelector("*[layoutInput]",criteriaContainer);

	var valueMap = this.getDatum("DMI_ValueMap");

	rowCriteria.values = [valueMap[buttonValue + layoutInputs[0].value]];


}



Screener_class.prototype.GUI_renderCriterion_sectorIndustry = function(criterion,rowCriteria,criteriaContainer,titleContainer) {

	//console.info("S&I rowCriteria.values",rowCriteria.values)

	// remove LIKE operator from selected values
	var values = rowCriteria.values.join("{}");
	values = values.replace(/LIKE,/g,"");
	values = values.split("{}");

	//console.info("S&I values",values)
	//recurseObject({o:values,n:"S&I values",debug:1})

	// draw a select for sectors
	var sectorSelect = Element.buildSelect({selected:"All",data:this.getDatum("sectors"),firstOption:{text:"All",value:"All"},firstOptionSelected:true},{id:"sectorsSelect",multiple:"multiple",size:criterion.moduleSize||10},criteriaContainer);
	Events.add({element:sectorSelect,type:"change",context:this,handler:this.GUI_storeCriterion_sectorIndustry_updateIndustries});

	// draw a select for industries
	Element.buildSelect({selected:values,selectedMatchText:true,data:this.getDatum("industries")},{id:"industriesSelect",multiple:"multiple",size:criterion.moduleSize||10},criteriaContainer);


}


// Updates Industries select based on options chosen in the Sectors select
Screener_class.prototype.GUI_storeCriterion_sectorIndustry_updateIndustries = function(e,el,data) {


	var sectors = [];
	var select = Element.get("sectorsSelect");
	var options = select.getElementsByTagName("option");
	for (var x=0; x<options.length;x++) {
		if (options[x].selected) {
			sectors.push(options[x].value);
		}
	}

	//console.info("sectors",sectors);

	var industries = this.getDatum("industries");

	// "All" isn't selected - show industries from sectors
	if (!sectors.join("|").match(/^All/)) {

		var sectorsIndustries = {};

		for (var i in industries) {
			if (i.match("^("+sectors.join("|")+")")) {
				sectorsIndustries[i] = industries[i];
			}
		}
		
		industries = sectorsIndustries;

	}

	//console.info(industries)

	// update the industries select
	Element.buildSelect({selected:null,selectedMatchText:true,data:industries},{id:"industriesSelect"});

}


Screener_class.prototype.GUI_storeCriterion_sectorIndustry = function(criterion,rowCriteria,criteriaContainer,titleContainer) {


	var select = Element.get("industriesSelect");

	var options = select.getElementsByTagName("option");

	for (var x=0; x<options.length;x++) {
		if (options[x].selected) {
			rowCriteria.values.push("LIKE," + (options[x].text));
		}
	}

}



/////////////////////////////////////////////////////////////////////////////////////
// COMMON METHODS (TODO - move to screener_class.common.js
/////////////////////////////////////////////////////////////////////////////////////

