//Show Default, or User selected Rows
screener.prototype.viewResults = function() {
  if(this.totalResults != 0) {
    this.buffer.src = 'force_results.asp';
  } else {
    alert("You must have at least one result to view the results page.");
  }
}

screener.prototype.initDisplayRows = function(){
  var ctrlBox = Element.get("controlBox");

  if(ctrlBox){
    this.selOn = [];
    this.selArray = [];
    this.selArray["MS"] = 0;
    this.selArray["SS"] = 0;
    this.selArray["F"] = 0;
    this.selArray["ED"] = 0;
    this.parArray = [];
    var selSet = false;
    var aTags = document.getElementsByTagName("a");
    var iTags = document.getElementsByTagName("input");
    var sTags = document.getElementsByTagName("select");

    for(var i = 0; i < iTags.length; i ++) {
        if(iTags[i].type == 'checkbox') {iTags[i].checked = false;}
    }
    for(var i = 0; i < aTags.length; i ++) {
      if(aTags[i].className.indexOf('onToggle')>-1) {

        var tempPar = Element.getParent(Element.getParent(aTags[i].id, "tr"),"div");
        this.parArray.push(tempPar.id);
        var grp = Element.parseSelector(".boxList", Element.getParent(Element.get(tempPar.id.split("_row")[0] + "_check").id, "td"))[0].id.split("_")[0];
        this.selOn.push({id:tempPar.id.split("_")[0],group:grp});
        this.selArray[grp] = 1;
        //selSet = true;
      }
    }
    for(var i = 0; i < iTags.length; i ++) {
      if(iTags[i].type == 'text' && iTags[i].id.indexOf(":") > 0 && iTags[i].value != '') {
        var tempPar = Element.getParent(Element.getParent(iTags[i].id, "tr"),"div");
        this.parArray.push(tempPar.id);
        var grp = Element.parseSelector(".boxList", Element.getParent(Element.get(tempPar.id.split("_row")[0] + "_check").id, "td"))[0].id.split("_")[0];
        this.selOn.push({id:tempPar.id.split("_")[0],group:grp});
        this.selArray[grp] = 1;
        //selSet = true;
      }
    }
    for(var i = 0; i < sTags.length; i ++) {
      if(sTags[i].className == 'siSelect' && sTags[i].selectedIndex > 0) {
        var tempPar = Element.getParent(Element.getParent(sTags[i].id, "tr"),"div");
        this.parArray.push(tempPar.id);
        var grp = Element.parseSelector(".boxList", Element.getParent(Element.get(tempPar.id.split("_row")[0] + "_check").id, "td"))[0].id.split("_")[0];
        this.selOn.push({id:tempPar.id.split("_")[0],group:grp});
        this.selArray[grp] = 1;
        //selSet = true;
      }
    }

    if(selSet == false) {
      this.selOn.push({id:"MG.MktCap",group:"MS"});
      this.selOn.push({id:"MG.Exchange",group:"MS"});
    this.selOn.push({id:"MG.Index",group:"MS"});
      this.selOn.push({id:"MG.Sector",group:"MS"});

      this.selOn.push({id:"MG.Price.Current",group:"SS"});
      this.selOn.push({id:"MG.Price1dPctChg",group:"SS"});

      this.selOn.push({id:"MG.PEG",group:"F"});
      this.selOn.push({id:"MG.ProfitMargin.TTM",group:"F"});

      this.selOn.push({id:"IBES.EPSGrowthCFY",group:"ED"});
      this.selOn.push({id:"MG.DivYield",group:"ED"});
    }

    var tempId = '';
    for(var i = 0; i < this.selOn.length; i++) {
      this.parArray.push(this.selOn[i].id + "_row");
      var ckBox = Element.get(this.selOn[i].id + "_check");
      if(ckBox){
        ckBox.checked = true;
        this.selArray[this.selOn[i].group] = 1;
        if(this.selOn[i].id != tempId) {
          screener.numberSelected(this.selOn[i].group + '_sel', 'add');
        }
        tempId = this.selOn[i].id;
      }
    }
    for(var j in this.selArray) {
        if(this.selArray[j] == 1) {
            screener.expandSectionList(Element.get(j));
        }
    }
    var rows = Element.parseSelector(".hideRow",Element.get("screener"));
    for(var j in rows) {
        for(var i = 0; i < this.parArray.length; i++) {
            if(rows[j].id == this.parArray[i]) {
                Element.addClass(rows[j],"showRow");
            }
        }
    }
  }
  else{
    this.selOn = [];
    this.selOn.push({id:"MG.MktCap",group:"MS"});
    this.selOn.push({id:"MG.Exchange",group:"MS"});
  this.selOn.push({id:"MG.Index",group:"MS"});
    this.selOn.push({id:"MG.Sector",group:"MS"});

    this.selOn.push({id:"MG.Price.Current",group:"SS"});
    this.selOn.push({id:"MG.Price1dPctChg",group:"SS"});

    this.selOn.push({id:"MG.PEG",group:"F"});
    this.selOn.push({id:"MG.ProfitMargin.TTM",group:"F"});

    this.selOn.push({id:"IBES.EPSGrowthCFY",group:"ED"});
    this.selOn.push({id:"MG.DivYield",group:"ED"});

    if(this.selOn){
      for(var i = 0; i < this.selOn.length; i++){
        var row = Element.get(this.selOn[i].id + "_row");
        if(row){
          row.className = "showRow";
        }
      }
    }
  }
}

//Change the number display for selected check boxes

screener.prototype.numberSelected = function(id, op) {
  var sel = Element.get(id);
  var num = parseInt(sel.innerHTML.substring(0, sel.innerHTML.indexOf(" sel")));
  if(op == 'add') {
    num++;
  } else {
    num--;
  }
  sel.innerHTML = num + ' sel';
  if(num == 0) {
    screener.expandSectionList(Element.get(sel.id.split("_")[0]));
  }
}

//Expand the Selection box

screener.prototype.expandSectionList = function(el){
  var selectionContainer = Element.get(el.id + "_list");

  if(selectionContainer.style.display == "block"){
    selectionContainer.style.display = "none";
    el.style.backgroundImage = "url(/scottrade/research/common/img/buttons/greyArrowRight.gif)";
  }
  else{
    selectionContainer.style.display = "block";
    el.style.backgroundImage = "url(/scottrade/research/common/img/buttons/greyArrowDown.gif)";
  }
}

screener.prototype.selectionChecked = function(who,fromRow) {
  var tempParent = Element.getParent(who, "div");
  while(tempParent.className != "boxList"){
    tempParent = Element.getParent(tempParent, "div");
  }

  var tempId = tempParent.id.split("_")[0];

  if(who.checked == true) {
    screener.numberSelected(tempId + '_sel', 'add');
  } else {
    screener.numberSelected(tempId + '_sel', 'sub');
  }
  if(!fromRow) {
    var selId = who.id.split("_check")[0];
    this.row = Element.get(selId + "_row");
    screener.toggleRow(this.row, true);
  }
}

// toggle specific display
screener.prototype.toggle = function(who, turnOn) {
  var topicCriteria = document.getElementById(who+"_extra");
  var topicToggle = document.getElementById(who+"_toggle");
  if (topicCriteria.style.display == 'block' && !turnOn) {
    topicCriteria.style.display = 'none';
    topicToggle.innerHTML = 'Show All '+this.toggleDesc[who]+' Criteria';
  } else {
    topicCriteria.style.display = 'block';
    topicToggle.innerHTML = 'Hide All '+this.toggleDesc[who]+' Criteria';
  }
}
// toggle all
screener.prototype.toggleAll = function(dir) {
  if (this.toggleDir == 1) {
    for (var who in this.toggleDesc) {
      try {
      document.getElementById(who+"_extra").style.display = 'none';
      document.getElementById(who+"_toggle").innerHTML = 'Show All '+this.toggleDesc[who]+' Criteria';
      } catch(e) {}
    }
    this.toggleDir = 0;
    document.getElementById("toggleAllLink").innerHTML = "Show All Criteria";
    document.getElementById("toggleAllLink2").innerHTML = "Show All Criteria";
  } else {
    for (var who in this.toggleDesc) {
      try {
      document.getElementById(who+"_extra").style.display = 'block';
      document.getElementById(who+"_toggle").innerHTML = 'Hide All '+this.toggleDesc[who]+' Criteria';
      } catch(e) {}
    }
    this.toggleDir = 1;
    document.getElementById("toggleAllLink").innerHTML = "Hide All Criteria";
    document.getElementById("toggleAllLink2").innerHTML = "Hide All Criteria";
  }
}
// Sets up Criteria for buttons and select elements
screener.prototype.set = function(criteriaEle,type,remoteVal) {
  if (!remoteVal) {remoteVal = '';}

  if (criteriaEle.value) { // when ever a .value is present, means it's a form element
    var criteria = criteriaEle.id;
    var criteriaValue = criteriaEle.value;
  } else {
    var criteria = criteriaEle.id;
    var criteriaValue = criteria + remoteVal;
  }
  // test for combined inputs
  if (type == 'combine_button') {
    if (!criteriaValue.split(":")[2]) {return false;}
    if (remoteVal && isNaN(remoteVal)) {return false;}
  }

  if (type == 'combo') {
    if (!criteriaValue.split(":")[2]) {
      // turn off button
      criteriaEle.className = "off";
      return false;
    }
  }

  if(type == 'select') {
    this.selected[criteria] = 0;
    for(var i = 0; i < criteriaEle.options.length; i++) {
      this.selected[criteriaEle.options[i].value] = 0;
      if(criteriaEle.options[i].selected) {
        this.selected[criteriaEle.options[i].value] = criteriaEle.options[i].value; // turn on
      }
    }
  }

  this.screenResults.innerHTML = "loading ...";
  this.screenResults1.innerHTML = "loading ...";
  if (this.selected[criteria]) {
    this.selected[criteria] = 0; // turn off
    if (type == 'button' || type == 'combine_button' || type == 'combo') {
      criteriaEle.className = "offToggleBtn";
    }
  } else if (this.selected[criteria.split(":")[0]]) {
      this.selected[criteria.split(":")[0]] = 0;
    if (type == 'button' || type == 'combine_button' || type == 'combo') {
      criteriaEle.className = "offToggleBtn";
    }

  } else {
    this.selected[criteria] = criteriaValue; // turn on
    if (type == 'button' || type == 'combine_button' || type == 'combo') {
      criteriaEle.className = "onToggleBtn";
    }
  }
  if (criteria == 'MG.Sector') { // updates sector
    this.srcSector = 'screener_update_sector.asp?sectorID='+criteriaValue.split(":")[2];
    this.buffer.src = this.srcSector;
  } else {
    this.load();
  }

}
// Used for toggling "Combo" type selections.

screener.prototype.toggleRow = function(element,fromSel) {

    if(!element.id) {
      element = Element.getParent(Element.getParent(element,"tr"),"div");
    }

    if(Element.hasClass(element,"showRow")) {

        Element.removeClass(element,"showRow");
        this.screenResults.innerHTML = "loading ...";
        this.screenResults1.innerHTML = "loading ...";
        this.aArray = element.getElementsByTagName("a");
        for(var i = 0; i < this.aArray.length; i++) {
          if (this.selected[this.aArray[i].id]) {
            this.selected[this.aArray[i].id] = 0;
	    	this.aArray[i].className = this.aArray[i].className.replace("on", "off");
          }
        }
        this.iArray = element.getElementsByTagName("input");
        for(var i = 0; i < this.iArray.length; i++) {
            if(this.iArray[i].type != 'hidden') {
                this.iArray[i].value = '';
                var args = this.iArray[i].id.split(":");
                var args1 = args[0];
                var args2 = ':';
                args2 += args[1];
                args2 += ':';
                if(this.iArray[i].toString().indexOf("combine") > 0) {
                    screener.combine(this.iArray[i],args1,args2,1);
                }
                if(this.iArray[i].toString().indexOf("toggleInput") > 0) {
                    screener.toggleInput(this.iArray[i].id,this.iArray[i].value);
                }
            }
        }
        this.sArray = element.getElementsByTagName("select");
        for (var i = 0; i < this.sArray.length; i++) 
		{
			for (var j in this.selected) 
			{
				if (this.selected[j] && this.selected[j].indexOf(this.sArray[i].id) > -1) 
				{
					this.selected[j] = 0;
				}
			}
			if (this.sArray[i].id == "MG.Sector") 
			{
				this.sArray[i].selectedIndex = 0;
			}
			if (this.sArray[i].id == "MG.Industry.MGCode") 
			{
				Element.get("industry").innerHTML = '';
			}
		};

        this.load();

        if (fromSel != true) 
		{
			this.checkId = element.id.substring(0, element.id.length - 4);
			var el = Element.get(this.checkId + "_check")
			if (el) 
			{
				el.checked = false;
				screener.selectionChecked(el, true);
			}
		}
    }
    else {
        Element.addClass(element,"showRow");
    }
}

screener.prototype.toggleChoice = function(element,remotePrefix) {

  var remoteElement = document.getElementById(remotePrefix);
  var elementID = element.id;
  var newValue = elementID.replace(remotePrefix,"");
  var oldValue = remoteElement.value;

  var isOn = 0;
  if (element.className != "onToggleBtn") {
    element.className = "onToggleBtn";
    remoteElement.value += newValue;
    isOn = 1;
  } else {
    element.className = "offToggleBtn";
    remoteElement.value = oldValue.replace(newValue,"");
  }

  // reload
  this.turnOff(remoteElement.id,remoteElement.value,oldValue, isOn);
  this.load();
}
// turns off all "combo" type selections
screener.prototype.turnOff = function(prefix,newValue,oldValue, isOn) {
  var options = [];
  options['PvsSP500'] = ["MG.Price.vsSPX.Last4W","MG.Price.vsSPX.Last13W","MG.Price.vsSPX.Last52W"];
  options['PvsIndustry'] = ["MG.Price.vsInd.Last4W","MG.Price.vsInd.Last13W","MG.Price.vsInd.Last52W"];
  options['ConsensusChange'] = ["IRP.BNYJayBNYJaywalkConsensusChange7Day","IRP.BNYJaywalkConsensusChange1Month","IRP.BNYJaywalkConsensusChange3Month"];
  options['PERatio'] = ["MG.PE.Hist.TTM","MG.PECurrFYProj","MG.PENextFYProj"];
  options['EPSGrowthAnnual'] = ["IBES.EPSGrowthCFY","IBES.EPSGrowthNFY"];
  options['RevenueGrowth'] = ["IBES.RevenueGrowthCFY","IBES.RevenueGrowthNFY"];
  options['EMAAboveBelow'] = ["DS.ThirteenDayExponentialMovingAvg","DS.FiftyDayExponentialMovingAvg"];
  options['ConsEarnings'] = ["Multex.NumQtrsNegative","Multex.NumQtrsPositive"];

  var element = document.getElementById(prefix+newValue);
  var noneSelected = 1;
  for (var b = 0;b<options[prefix].length;b++) {
    var criteria = options[prefix][b];
    if (this.selected[criteria]) {
      noneSelected = 0;
      if (newValue) {
        this.selected[criteria] = options[prefix][b]+newValue;
      } else {
        this.selected[criteria] = 0;
        var ele = document.getElementById(criteria);
        ele.className = "off";
      }
    }
  }
  //if (noneSelected && isOn) {} // for error msg
}

// toggles a "Button" type selection (wrapper for set)
screener.prototype.toggleButton = function(criteriaEle,type,group) {
  // group is an id for a group of buttons to toggle
  var options = [];
    options['PEG'] = ["MG.PEG:LEQ:1","MG.PEG:GTR:1"];
    options['insider'] = ["TI.InsiderActivityNetAccumulation:EQU:1","TI.InsiderActivityNetDistribution:EQU:1"];
    options['PayoutRatio'] = ["MG.PayoutRatioBelowIndAvg:EQU:1","MG.PayoutRatioAboveIndAvg:EQU:1"];
    options['EMA'] = ["MG.13dEMABelow50dEMA:EQU:1","MG.13dEMAAbove50dEMA:EQU:1"];

  // turn all off, and deselect all in group
  for (var b = 0;b<options[group].length;b++) {
    var criteria = options[group][b];
    if (criteria != criteriaEle.id) {
      this.selected[criteria] = 0;
      var ele = document.getElementById(criteria);
      ele.className = "selOff";
      document.getElementById(criteria+"_left").src = 'sImgL.gif';
      document.getElementById(criteria+"_right").src = 'sImgR.gif';
    }
  }
  screener.set(criteriaEle,type);
}

// Used for toggling "combine_button" w/Free Text Input type selections
screener.prototype.toggleInput = function(id,newValue) {
  if (!newValue) {return false;}

  var options = [];
  options['pChg'] = ["MG.Price1dPctChg:GTR:","MG.Price5DayPctChg:GTR:","MG.Price.Change.Last4W:GTR:","MG.Price.Change.Last13W:GTR:","MG.Price.Change.Last52W:GTR:"];
  options['ConsensusChange'] = ["IRP.BNYJayBNYJaywalkConsensusChange7Day:GTR:","IRP.BNYJaywalkConsensusChange1Month:GTR:","IRP.BNYJaywalkConsensusChange3Month:GTR:"];
  options['week52Pct'] = ["MG.Price.Change.52WHigh:LSS:","MG.Price.Change.52WLow:LSS:"];

  for (var b in options[id]) {
    var criteria = options[id][b];
    if (this.selected[criteria]) {
      if (newValue && isNaN(newValue)) {
        this.selected[criteria] = 0;
        var ele = document.getElementById(criteria);
        ele.className = "selOff";
        document.getElementById(criteria+"_left").src = 'sImgL.gif';
        document.getElementById(criteria+"_right").src = 'sImgR.gif';
      } else {
        this.selected[criteria] = criteria+newValue;
      }
    }
  }
  window.clearTimeout(this.loadTimeID);
  this.loadTimeID = window.setTimeout("screener.load();",1000);
}

// serializes and loads buffered prescreen
screener.prototype.load = function() {
  var qsArr = [];
  // Need to re-order the qs ugh

  for (var i in this.selected) {
    if (this.selected[i]) {
      var tmp = this.selected[i].split(":");
      if (qsArr[tmp[0]]) {
        qsArr[tmp[0]] += ':'+tmp[1]+':'+tmp[2];
        if (tmp[3]) {
          qsArr[tmp[0]] += ':'+tmp[3]+':'+tmp[4];
        }
      } else {
        qsArr[tmp[0]] = this.selected[i];
      }
    }

  }
  // transform
  this.qs = '';
  for (var k in this.criteriaJS) {
    if (qsArr[k]) {
      this.qs += qsArr[k] +';'
    }
  }

  this.qs = this.qs.substr(0,this.qs.length - 1);

  //console.log("querystring= " + this.qs);

  /*
  if(this.qs == ""){
    var matchesArr = Element.parseSelector(".matches");
    for(m = 0; m < matchesArr.length; m++){
      Element.setHTML(matchesArr[m], "--");
    }
  }
  */



  this.buffer.src = 'stock_screener_buffer.asp?c='+this.qs;
}

// combines Required results from 2 input elements
// If both combinations are not Required - set notRequired Flag
screener.prototype.combine = function(who,base,required,notRequired) {

  var req = document.getElementById(base+required);
  var val = parseFloat(who.value);
  var valReq = parseFloat(req.value);

  // check if number
  if (who.value && isNaN(val)) {return false;}

  this.selected[base] = 0;

  if (!isNaN(who.value) || (notRequired && !isNaN(req.value))) {

    if (!isNaN(val) && !isNaN(valReq)) { // both have values
      if (required == ':LSS:') {
        if (val > valReq) {
          this.load();
        } else {
          this.selected[base] = who.id + val + required + valReq;
        }
      } else {
        if (val <= valReq) {
          this.load();
        } else {
          this.selected[base] = req.id + valReq + ':' + who.id.split(":")[1] +':'+ val;
        }
      }
    } else if (notRequired) {
      if (who.value && !isNaN(who.value)) { // action element has value
        this.selected[base] = who.id + val;
      } else if (valReq && !isNaN(valReq)) { // other value
        this.selected[base] = req.id + valReq;
      }
    }
  }
  window.clearTimeout(this.loadTimeID);
  this.loadTimeID = window.setTimeout("screener.load();",1000);
}

screener.prototype.updateResults = function(value) {
  this.totalResults = value;
  this.screenResults.innerHTML = "View " + value + " Matches";
  this.screenResults1.innerHTML = "View " + value + " Matches";
  if (value == 0) {
    this.zeroMatches.style.display = "block";
    this.zeroMatches1.style.display = "block";
    this.totalBtn.style.display = "none";
    this.totalBtn1.style.display = "none";
    if (this.initSelectedFlag) {
      //alert("no additional matches found");
    } else {
      this.initSelectedFlag = 1;
    }
  }
  else{
    this.zeroMatches.style.display = "none";
    this.zeroMatches1.style.display = "none";
    this.totalBtn.style.display = "block";
    this.totalBtn1.style.display = "block";
  }
}

screener.prototype.updateMatches = function(who,value,criteria_value) {

  if (this.criteriaJS[who].relate) {
    var ele = document.getElementById(this.criteriaJS[who].relate+'_matches');
    var topicEle = this.criteriaJS[who].relate;
  } else {
    var ele = document.getElementById(who+'_matches');
    var topicEle = who;
  }
  ele.innerHTML = value + '<p>Matches</p>';

  if (this.criteriaJS[who].relate) {
    var ele = document.getElementById(this.criteriaJS[who].relate+'_criteriaMatches');
  } else {
    var ele = document.getElementById(who+'_criteriaMatches');
  }
  ele.innerHTML = criteria_value + '<p>Matches</p>';

  // update sub-topic areas
  if (this.criteriaJS[topicEle].topic) {
    //document.getElementById(this.criteriaJS[topicEle].topic+"_matches").innerHTML = value;
  }
}

screener.prototype.viewresults = function() {
  document.location = 'stock_screener_results.asp?c='+this.qs;
}

function initScreener(){
  screener = new screener();
  screener.setSavedJS();
  screener.totalResults = 0;
  initButtonFunctions();
  screener.initDisplayRows();
}

Events.add({element: window,type:"load", handler: initScreener});

function initButtonFunctions() {
  this.screener_div = Element.get("screener");
  this.button_containers = Element.parseSelector(".button_container", this.screener_div);

  for(var i in this.button_containers) {
    this.aArray = this.button_containers[i].getElementsByTagName("a");
    for(var j = 0; j < this.aArray.length; j++) {
      Events.add({
        element: this.aArray[j],
        type: "click",
        handler: transferData
      });
    }
  }

  this.button_option_containers = Element.parseSelector(".button_options_container", this.screener_div);

  for(var n in this.button_option_containers) {
    this.oArray = this.button_option_containers[n].getElementsByTagName("a");
    this.prefix = this.button_option_containers[n].id.split(":");
    this.prefix = this.prefix[1];
    for(var k = 0; k < this.oArray.length; k++) {
      Events.add({element: this.oArray[k], type: "click", handler: transferOptionData, data:{prefix: this.prefix}});
    }
  }

  this.button_close_rows = Element.parseSelector(".closeRow", this.screener_div);

  for(var h in this.button_close_rows) {
    Events.add({element: this.button_close_rows[h],type: "click",handler: transferCloseData});
  }

  this.selector_div = Element.get("sBox");
  this.header_links  = Element.parseSelector(".sHeader", this.selector_div);

  for(var i in this.header_links) {
    Events.add({element: this.header_links[i],type: "click",handler: transferSelectorData});
  }
  Events.add({element: Element.get("screenResults"),type: "click",handler: transferResultsView});
  Events.add({element: Element.get("screenResults1"),type: "click",handler: transferResultsView});
}

function transferData(event, el) {
  screener.set(el, 'button');
}

function transferOptionData(event, el, data) {
  screener.toggleChoice(el, data.prefix);
}

function transferCloseData(event,el) {
  screener.toggleRow(el);
}

function transferSelectorData(event,el) {
  screener.expandSectionList(el);
}

function transferResultsView() {
    screener.viewResults();
}