/*
	Screener controller
*/

//
// Mode of the screener - basic or advanced
Screener.prototype.mode = 'basic';// = new Array();
//
// Mode of the menu - insert / edit
Screener.prototype.menuMode;// = new Array();
/* Index of the item for the menu */
Screener.prototype.menuIndex;// = new Array();
/* Pointer to the currentColumnId */
Screener.prototype.currentColumnId;
/* Query array */
Screener.prototype.query = new Array();
/* Elements in the array */
Screener.prototype.elements = ["DataItem", "Operators", "Criteria"];
/* Internal element index */
Screener.prototype.elementIndex = 0;
/* Number of saved screens */
Screener.prototype.numberOfSavedScreens = 0;
/* Indicates if the given query was executed = if there are any results */
Screener.prototype.isQueryExecuted = 0;
/* Images used by screener */
Screener.prototype.images = new Array();
/* Collection of server-side ids of the controls */
Screener.prototype.ids = new Array();

//
// Constructor of screener
function Screener(url)
{
    this.initializeBasicScreenerArrays();
}

Screener.prototype.initializeBasicScreenerArrays = function()
{
	this.query["DataItem"] = new Array();
	this.query["DataItem"]["name"] = new Array();
	this.query["DataItem"]["value"] = new Array();
	
	this.query["Operators"] = new Array();
	this.query["Operators"]["name"] = new Array();
	this.query["Operators"]["value"] = new Array();
	
	this.query["Criteria"] = new Array();
	this.query["Criteria"]["name"] = new Array();
	this.query["Criteria"]["value"] = new Array();

	this.query["Matches"] = new Array();
	this.query["Matches"]["current"] = new Array();
	this.query["Matches"]["total"] = new Array();	
}

Screener.prototype.set_id = function(name, id) 
{
	this.ids[name] = id;
}

Screener.prototype.exportResults = function()
{
	return (this.images["export"]["enabled"]);
}

Screener.prototype.set_images = function(url) 
{
	this.set_image(url, "new");
	this.set_image(url, "open");
	this.set_image(url, "presets");
	this.set_image(url, "save");
	this.set_image(url, "delete");
	this.set_image(url, "export");
	this.set_image(url, "advanced");
	this.set_image(url, "basic");
	this.set_image(url, "title_basic");
	this.set_image(url, "title_advanced");
}

Screener.prototype.set_image = function(url, name) 
{
	this.images[name] = new Array();
	this.images[name]["enabled"] = true;
	this.images[name]["active"] = new Image();
	this.images[name]["active"].src = url + "/Images/Buttons/active/" + name + ".gif";
	this.images[name]["inactive"] = new Image();
	this.images[name]["inactive"].src = url + "/Images/Buttons/inactive/" + name + ".gif";
	this.images[name]["hover"] = new Image();
	this.images[name]["hover"].src = url + "/Images/Buttons/over/" + name + ".gif";
}

// Initialization of the screener
Screener.prototype.init = function() 
{
    this.fillMenu(true);
	this.hideSaveScreenName();
	this.new_screen();
}

// Fills the main menu of the screener
Screener.prototype.fillMenu = function(bGnrtNwScrnrNm) 
{
	this.getScreenerQueries(bGnrtNwScrnrNm);
}

Screener.prototype.getAdvanced = function()
{
    return this.mode == "advanced";
}

Screener.prototype.setGenerateNewScreenerNameFlag = function(bFlg)
{
    this._bGnrtNwScrnrNm = bFlg;
}

Screener.prototype.getGenerateNewScreenerNameFlag = function()
{
    return this._bGnrtNwScrnrNm;
}

// Get the screener queries.
Screener.prototype.getScreenerQueries = function(bGnrtNwScrnrNm)
{
    if (bGnrtNwScrnrNm == undefined || bGnrtNwScrnrNm == null)
        bGnrtNwScrnrNm = false;
        
    this.setGenerateNewScreenerNameFlag(bGnrtNwScrnrNm);

    // We don't have a cookie. Just read from the database then.
    ScreenerService.GetScreenerQueries(screener.getAdvanced(),
            GetScreenerQueriesCompleted);
}

var _cntNewSaveScreenersLoaded;

function NewSaveScreenerCompleted()
{
    --_cntNewSaveScreenersLoaded;
    
    if (_cntNewSaveScreenersLoaded > 0)
        return;

    setCookie("Screener" + screener.mode, "", -10);
       
    screener.getScreenerQueries();          
}

var _sPlsMnsDlmtr = String.fromCharCode(177);

function GetScreenerQueriesCompleted(asScrnrNm)
{
    if (asScrnrNm == null)
        return;

    // Check to see if we have screeners saved as cookies.
    var sMode = screener.mode;
	var sCkDt = unescape(getCookie("Screener" + sMode));
	if (sCkDt != null && sCkDt.length > 0)
    {
        var bAdvncd = screener.getAdvanced();

	    // We have a cookie. Parse it; save info to the database; and delete it.
        var asScrnrNmFrmCk = sCkDt.split(_sPlsMnsDlmtr);
        var asScrnrVlFrmCk = Array();
               
        for (var ndxScrnr = 0; ndxScrnr < asScrnrNmFrmCk.length; ++ndxScrnr)
        {
            var sScrnrNmFrmCk = asScrnrNmFrmCk[ndxScrnr];
            if (sScrnrNmFrmCk == null || sScrnrNmFrmCk == "")
            {
                asScrnrVlFrmCk.push("");
                continue;
            }

            var sScrnrNmTst = sScrnrNmFrmCk;
            
            for (var ndxScrnrNdx = 0; ndxScrnrNdx < 10; ++ndxScrnrNdx)
            {
                if (ndxScrnrNdx > 0)
                {
                    if (sScrnrNmFrmCk.length > 48)
                        sScrnrNmFrmCk = sScrnrNmFrmCk.substring(0, 48);

                    sScrnrNmTst = sScrnrNmFrmCk + " " + ndxScrnrNdx;
                }
            
                if (getIndexInArray( asScrnrNm, sScrnrNmTst ) == -1)
                    break;
            }
            
            asScrnrNmFrmCk[ndxScrnr] = sScrnrNmTst;
            
            var sScrnrVlFrmCk = unescape(getCookie("ScreenData" + sMode +
                    escape(sScrnrNmFrmCk)));
            asScrnrVlFrmCk.push(sScrnrVlFrmCk);
        }
        
        _cntNewSaveScreenersLoaded = 0;
        
        for (var ndxScrnr = 0; ndxScrnr < asScrnrNmFrmCk.length; ++ndxScrnr)
        {
            var sScrnrNmFrmCk = asScrnrNmFrmCk[ndxScrnr];
            if (sScrnrNmFrmCk == null || sScrnrNmFrmCk == "")
                continue;
                
            ++_cntNewSaveScreenersLoaded;
			
            ScreenerService.SaveScreenerQuery(sScrnrNmFrmCk,
                    asScrnrVlFrmCk[ndxScrnr],
                    bAdvncd, NewSaveScreenerCompleted);
        }
        
        screener.getScreenerQueries();               
        return;
    }

	// Get the list of the items and fill the Open/Delete menu
	var openMenuElements = getRef("openMenuElements");
	if (openMenuElements == null)
	    return;
	    
	var deleteMenuElements = getRef("deleteMenuElements");

	var openItems = "";
	var deleteItems = "";
	
	screener.numberOfSavedScreens = 0;
	for ( var ndxScnr = 0; ndxScnr < asScrnrNm.length; ++ndxScnr )
	{
	    var sScrnrNm = asScrnrNm[ndxScnr];
		
		if (sScrnrNm.length == 0)
		    continue;
		    
		var value = escape(sScrnrNm);
		screener.numberOfSavedScreens++;
			
		openItems += '<li><a class="item" onclick="screener.open_screen(\'' + value +
                '\')">' + sScrnrNm + '</a></li>';
		deleteItems += '<li><a class="item" onclick="screener.delete_screen(\'' + value +
		        '\')">' + sScrnrNm + '</a></li>';
	}

    openMenuElements.innerHTML = openItems;	
    deleteMenuElements.innerHTML = deleteItems;

	// Disable or endable the buttons	
	screener.enableButton("open", screener.numberOfSavedScreens > 0);
	screener.enableButton("delete", screener.numberOfSavedScreens > 0);
	
	// Fill preset menu
	var presetItems = "";
	for (var i=0; i < _aasScrnrPrsts.length; i++)
	{
		presetItems += '<li><a class="item" onclick="screener.toggle_menu(' +
		        '\'openPresets\'); screener.open_preset_screen(\'preset' + i +
		        '\', \'' + _aasScrnrPrsts[i][0] + '\', false)" >' +
		        _aasScrnrPrsts[i][0] + '</a></li>';
	}
	
	getRef('openPresetsMenuElements').innerHTML = presetItems;

    screener.setQueryNames(asScrnrNm);
	
	if (screener.getGenerateNewScreenerNameFlag())
	    screener.generateNewQueryName(asScrnrNm);
}

Screener.prototype.getQueryNames = function()
{
    return this._asScrnrQrNms;
}

Screener.prototype.setQueryNames = function(asScrnrNm)
{
    this._asScrnrQrNms = asScrnrNm;
}

Screener.prototype.generateNewQueryName = function(asScrnrQr)
{
    var sNwScrnQrNm = "New Query";
    
    var ndxNwScrnQrNm = 1;
    while (ndxNwScrnQrNm < 100)
    {
        if (asScrnrQr != null && getIndexInArray(asScrnrQr,
                sNwScrnQrNm + " " + ndxNwScrnQrNm) > 0)
        {
            ++ndxNwScrnQrNm;
            continue;
        }
        
        sNwScrnQrNm += " " + ndxNwScrnQrNm;     
        break;
    }               

	getRef("labelScreenName").value = sNwScrnQrNm;

	setInnerText(getRef("labelScreenNameReadOnly"), sNwScrnQrNm);
}

//
// Hide the current menu
Screener.prototype.hideMenu = function()
{
	try
	{
		var menuDiv = getRef('divMenu' + this.currentColumnId);
		menuDiv.style.display = "none";
		
		// Check if the special menu is visible
		var menuSpecialDiv = getRef('divMenu' + this.currentColumnId + "Special");
		menuSpecialDiv.style.display = "none";
		
		setInnerText(getRef("cellElementDescription"), "");
		hideMenu();
	}
	catch (err) {}
}

// Shows the menu under given item
Screener.prototype.showMenu = function(index, columnId)
{
	if (columnId == "DataItem")
	    showMenu();
	    	   
	this.hideMenu();
	this.currentColumnId = columnId;
	this.menuIndex = index;
	
	var rowIndex = index;
	if (index == -1)
		rowIndex = this.query["DataItem"]["value"].length - 1;

	// If we are in criterion, and a special item is selected (industry, sector, exchange) - show special menu
	var isSubmenuSpecial = ((columnId == "Criteria") &&
	        (this.query["DataItem"]["value"][rowIndex].indexOf("int-gcd:") > 0));
	        
	if (!isSubmenuSpecial)
	{
		if (columnId == "Operators" && this.query["DataItem"]["value"][rowIndex].indexOf("int-gcd:") > 0)
			var menuDiv = getRef('divMenu' + columnId + "Special");
		else
			var menuDiv = getRef('divMenu' + columnId);
	}
	else
	{
		var menuDiv = getRef('submenuSpecialScreener');
    }
	
	if (index >= 0)
	{
		var table = getRef('table' + columnId);
    	var tableItemHeight = table.clientHeight / table.rows.length;
		menuDiv.style.top = - (table.rows.length - index - 1) * tableItemHeight + "px";
		this.menuMode = "edit";
	}
	else
	{
	    if (menuDiv != undefined)
		    menuDiv.style.top = "0px";
		    
		this.menuMode = "insert";
	}
		
    if (menuDiv != undefined)
    {
    	menuDiv.style.left = xMousePos + 'px';
	    menuDiv.style.top = yMousePos + 'px';
	}

	if (isSubmenuSpecial)
	{
		showSubmenuSpecial(this.query["DataItem"]["name"][rowIndex]);
	}
    else if (menuDiv != undefined)
    {
		menuDiv.style.display = "block";
	}
	
	// If criterion then align to the text box
	var textBox = getRef('criterion' + index);
	if (columnId == "Criteria" && textBox != null)
	{
		// Get the position and size of the textbox [left, top, width, height]
		var pos = findPosAndSize(textBox);
		menuDiv.style.left = (pos[0] + pos[2]) + 'px';
		if (isIE)
			menuDiv.style.top = (pos[1] + 2) + 'px';
		else
			menuDiv.style.top = pos[1] + 'px';
	}
}

//
// Determines if we are waiting for the Enter to be pressed in the text box for value criteria in order to show next step
Screener.prototype.waitingForValueEntered = false;

Screener.prototype.dataItemMouseOut = function(event)
{	
	if (isIE)
		event = window.event;
		
    if (!event)
        return;
							
	var rowIndex = event.fromElement.parentNode.rowIndex;	
	
	if (event.toElement == null)
		return;
		
	if ((event.toElement.tagName != 'A' && event.toElement.tagName != 'INPUT' &&
	        event.fromElement.tagName == "TD") ||
	        event.fromElement.tagName == event.toElement.tagName)
		screener.dataItemRowSetStyle(rowIndex, "");
}

Screener.prototype.dataItemPreviousIndex = 0;

Screener.prototype.dataItemMouseOver = function(event)
{
	if (isIE)
		event = window.event;
	var rowIndex = event.srcElement.parentNode.rowIndex;		
	
	// check if the query is full
	if (this.query["Criteria"]["value"].length > rowIndex)
	{
		if (event.srcElement.tagName == "TD")
		{
			screener.dataItemRowSetStyle(this.dataItemPreviousIndex, '');
			this.dataItemPreviousIndex = rowIndex;
			screener.dataItemRowSetStyle(rowIndex, 'white');
		}
	}
}

Screener.prototype.dataItemRowSetStyle = function(index, color)
{
	var tableDataItem = getRef('tableDataItem');
	var tableOperators = getRef('tableOperators');
	var tableCriteria = getRef('tableCriteria');
	var tableResultCount = getRef('tableResultCount');
	var tableResultCountTotal = getRef('tableResultCountTotal');
	
	var isHover = (color == "white");
	var borderStyle = "solid 2px #dae3ea";
	var borderStyleHide = "solid 2px #f4f4f6";
	
	if (tableDataItem.rows.length > index)
		tableDataItem.rows[index].style.backgroundColor = color;
	
	if (tableOperators.rows.length > index)
		tableOperators.rows[index].style.backgroundColor = color;

	if (tableCriteria.rows.length > index)
		tableCriteria.rows[index].style.backgroundColor = color;
	
	if (tableResultCount.rows.length > index)
		tableResultCount.rows[index].style.backgroundColor = color;
	
	if (tableResultCountTotal.rows.length > index)
		tableResultCountTotal.rows[index].style.backgroundColor = color;
}

// Adds given item
Screener.prototype.addItem = function(itemId, dateValue, dateLabel,
        isSpecial, itemName, itemValue, description)
{
    var sItem;
    var sVal;

	if (this.currentColumnId == "Operators" || isSpecial == true || (itemId == "" && dateValue == ""))
	{
		if (isSpecial)
		{
			sItem = itemName;
			sVal = "'" + itemValue + "'";
		}
		else
		{
			sItem = itemId;
			sVal = dateValue;
		}
	}
	// We have the value on the right side of the equation.
	else if (dateLabel.length > 0)
	{
	    // We have a datapoint / date pair.
		sItem = screenerItems[itemId][0] + ' ' + dateLabel;
		sVal = "{" + screenerItems[itemId][2] + "[" + dateValue + "]}";
    }
	else
	{
	    // We have a datapoint that has no associated date.
		sItem = screenerItems[itemId][0];
		sVal = "{" + screenerItems[itemId][2];

		if (dateValue != null && dateValue.length > 0)
		    sVal += "[" + dateValue + "]";

	    sVal += "}";
    }
	
	var menuDiv = getRef('divMenu' + this.currentColumnId);
	menuDiv.style.display = "none";
	var table = getRef('table' + this.currentColumnId);
	
	var clmnCrrnt = this.query[this.currentColumnId];
		
	if (this.menuMode == "insert")
	{
		var row = table.insertRow(table.rows.length-1);
		var index = table.rows.length - 2;
		
		// If item is empty then it is a request for value criteria 
		// Create a text box for that		
		clmnCrrnt["name"][index] = sItem;
		clmnCrrnt["value"][index] = sVal;
		
		var isValue = false;
		if (sItem.length == 0)
		{
			sItem = '<input class="input_no_border" type="text" value="" id="criterion' +
			        (index) + '" onchange="screener.recount(' + index +
			        ')" onkeydown="screener.inputChanged(event, ' + index +
			        ')" onmousedown="screener.show_and_fadeout_block_menu(' +
			        '\'divMenuCriteria\')" onfocus="this.className=\'input_selected\'"' +
			        ' onblur="this.className=\'input_no_border\'"  />';

			// Add the criterionX as the place holder for the value that will
			// be later used to get the value from the input with the same name
			clmnCrrnt["name"][index] = "[value]";
			clmnCrrnt["value"][index] = "criterion" + (index);
			isValue = true;
		}   
		
		var cell = row.insertCell(0);
		cell.style.verticalAlign = "middle";
		
		var deleteImage = "";
		var title = "";
		if (!isValue)
			title = sItem;
			
		if (title != "" && screenerItems[itemId] != undefined)
			title += " - " + screenerItems[itemId][1];
			
		if (this.currentColumnId == "DataItem")
            deleteImage = "<a class=item onclick='screener.removeRow(" +
		            index + ")'><img src='Images/X/combo.gif'/></a>&nbsp;" ;
		        
		cell.innerHTML = deleteImage + '<a class="item" onclick="screener.showMenu(' +
		        (table.rows.length-2) + ',\'' + this.currentColumnId + '\')" title="' +
		        title + '">' + sItem + '</a>' + '<span id="criterionValidator' +
		        this.currentColumnId + index + '" class="invalid_value"></span>';
				
		getRef("row" + this.elements[this.elementIndex]).style.visibility = "hidden";

		// Focus the control
		if (sVal.length == 0)
		{
			getRef("criterion" + index).focus();
			this.waitingForValueEntered = true;
		}
		else
		{
			// Show the next value for Add Item
			this.elementIndex = (this.elementIndex + 1 ) % this.elements.length;
			getRef("row" + this.elements[this.elementIndex]).style.visibility = "visible";
		}
				
		// If this is criteria column inserted then add row for result,
		// show progress indicator and call asynchronously webservice
		if (this.currentColumnId == "Criteria")
		{
			var resultTable = getRef('tableResultCount');
			var row = resultTable.insertRow(resultTable.rows.length);
			var cell = row.insertCell(0);
			cell.id = "cellCount" + index;
			
			if (sVal.length > 0)
				this.count(index);
				
			var resultTable = getRef('tableResultCountTotal');
			var row = resultTable.insertRow(resultTable.rows.length);
			var cell = row.insertCell(0);
			cell.id = "cellCountTotal" + index;
			
			if (sVal.length > 0)
				this.countTotal(index);
		}
	}
	else
	{
	    var ndxRw = this.menuIndex;
	
		var rwCrrnt = table.rows[ndxRw];
		
		var bIsPrvsStrngTp = (clmnCrrnt["value"][ndxRw].indexOf("int-gcd:") >= 0);
		var sPrvsItm = clmnCrrnt["name"][ndxRw];

		// If item is empty then it is a request for value criteria
		// Create a text box for that
		var bIsVl = false;
		if (sItem.length == 0)
		{
			sItem = '<input class="input_no_border" type="text" value="" id="criterion';
			sItem += ndxRw + '"  onchange="screener.recount(' + ndxRw;
			sItem += ')" onkeydown="screener.inputChanged(event, ' + ndxRw;
			sItem += ')" onmousedown="screener.show_and_fadeout_block_menu(\'divMenuCriteria\')" ';
			sItem += 'onfocus="this.className=\'input_selected\'" ';
			sItem += 'onblur="this.className=\'input_no_border\'"  />';

			// Add the criterionX as the place holder for the value that will be
			// later used to get the value from the input with the same name
			clmnCrrnt["name"][ndxRw] = "[value]";
			clmnCrrnt["value"][ndxRw] = "criterion" + (ndxRw);
			bIsVl = true;
		}
		else
		{
		    clmnCrrnt["name"][ndxRw] = sItem;
		    clmnCrrnt["value"][ndxRw] = sVal;
		}

		var cell = rwCrrnt.cells[0];
		cell.style.verticalAlign = "middle";
		
		var htmlRmvBttn = "";
		if (this.currentColumnId == "DataItem")
		{
            htmlRmvBttn = "<a class=item onclick='screener.removeRow(";
            htmlRmvBttn += ndxRw + ")'><img src='Images/X/combo.gif'/></a>&nbsp;";
		}
		        
		var title = "";
		
		if (!bIsVl)
			title = sItem;
			
		if (title != "" && screenerItems[itemId] != undefined)
	    {
			title += " - " + screenerItems[itemId][1];
	    }

        var sHtml = htmlRmvBttn + '<a class="item" onclick="screener.showMenu(';
        sHtml += (ndxRw) + ',\'' + this.currentColumnId + '\')" title="';
        sHtml += title + '">' + sItem + '</a>' + '<span id="criterionValidator';
        sHtml += this.currentColumnId + ndxRw + '" class="invalid_value"></span>';

		cell.innerHTML = sHtml;

		// Focus the control
		if (sVal.length == 0)
		{
			getRef("criterion" + ndxRw).focus();
		}
		
		// Check if user changed from numeric to nonnumeric field
		// (and vice versa) then show the information about incorrect format
		var bIsError = false;
		if (this.currentColumnId == "DataItem")
		{
            var elmntCrtrn = getRef('criterionValidatorCriteria' + ndxRw);
		
			if (sVal.indexOf("int-gcd:") >= 0)
			{
				if (this.query["Criteria"]["name"][ndxRw].indexOf("[value]") >= 0)
				{
				    setInnerText(elmntCrtrn, "* Invalid value");
					bIsError = true;
				}

				var operator = this.query["Operators"]["value"][ndxRw];
				if (operator != "=" && operator != "!=")
				{
				    setInnerText(elmntCrtrn, "*");
					bIsError = true;
				}
			}
			
			if (bIsPrvsStrngTp && sItem != sPrvsItm)
			{
                setInnerText(elmntCrtrn, "* Invalid value");
				bIsError = true;
			}
		}

		// If this is criteria column inserted then add row for result,
		// show progress indicator and call asynchronously webservice
		if (sVal.length > 0 && !bIsError)
		{
			this.recount(ndxRw);
		}

		if (this.waitingForValueEntered)
		{
			// Show the next value for Add Item
			getRef("row" + this.elements[this.elementIndex]).style.visibility = "hidden";
			this.elementIndex = (this.elementIndex + 1 ) % this.elements.length;
			
			getRef("row" + this.elements[this.elementIndex]).style.visibility = "visible";
			this.waitingForValueEntered = false;
		}
	}

	this.enableButton("save", true);
}

//
// Removes given row
Screener.prototype.removeRow = function(index)
{	
	// Check which parts of query were populated
	var tableDataItem = getRef("tableDataItem");
	tableDataItem.deleteRow(index);
	
	var tableOperators = getRef("tableOperators");
    var isTableOperatorsPopulated = (index < tableOperators.rows.length - 1);
	if (isTableOperatorsPopulated)
		tableOperators.deleteRow(index);
		
	var tableCriteria = getRef("tableCriteria");
	var isTableCriteriaPopulated = (index < tableCriteria.rows.length - 1);
	if (isTableCriteriaPopulated)
		tableCriteria.deleteRow(index);
		
	var tableResultCount = getRef("tableResultCount");
	var tableResultCountTotal = getRef("tableResultCountTotal");
	var isTableResultCountPopulated = (index < tableResultCount.rows.length);
	if (isTableResultCountPopulated)
	{
		tableResultCount.deleteRow(index);
		tableResultCountTotal.deleteRow(index);
	}
	
	// move query indexes down by one
	var count = tableDataItem.rows.length;
	for (var i = index; i < count - 1; ++i)
	{
		this.query["DataItem"]["name"][i] = this.query["DataItem"]["name"][i+1];
		this.query["DataItem"]["value"][i] = this.query["DataItem"]["value"][i+1];
		
		this.query["Operators"]["name"][i] = this.query["Operators"]["name"][i+1];
		this.query["Operators"]["value"][i] = this.query["Operators"]["value"][i+1];
		
		this.query["Criteria"]["name"][i] = this.query["Criteria"]["name"][i+1];
		this.query["Criteria"]["value"][i] = this.query["Criteria"]["value"][i+1];
		
		var next = i + 1;
		this.query["Criteria"]["value"][i] = this.query["Criteria"]["value"][i].replace('criterion' + next, 'criterion' + i);

		tableDataItem.rows[i].cells[0].innerHTML = tableDataItem.rows[i].cells[0].innerHTML.replace('(' + next, '(' + i);	
		tableOperators.rows[i].cells[0].innerHTML = tableOperators.rows[i].cells[0].innerHTML.replace('(' + next, '(' + i);	
		tableCriteria.rows[i].cells[0].innerHTML = tableCriteria.rows[i].cells[0].innerHTML.replace('(' + next, '(' + i);
		tableCriteria.rows[i].cells[0].innerHTML = tableCriteria.rows[i].cells[0].innerHTML.replace('event, ' + next + ')',
		        'event, ' + i + ')');

		var input = getRef('criterion' + next);
		if (input != undefined)
		{
		    input.id = 'criterion' + i;
		}

		var validator = getRef('criterionValidator' + next);
		if (validator != undefined)
		{
		    validator.id = 'criterionValidator' + i;
		}

		var cell = getRef('cellCount' + next);
		cell.id = 'cellCount' + i;
		cell = getRef('cellCountTotal' + next);
		cell.id = 'cellCountTotal' + i;
	}
	
	this.query["DataItem"]["name"].pop();
	this.query["DataItem"]["value"].pop();
	
	if (isTableOperatorsPopulated)
	{
	    var objctOprtrs = this.query["Operators"];
		objctOprtrs["name"].pop();
		objctOprtrs["value"].pop();
		
		var objctCrtr = this.query["Criteria"];
        objctCrtr["name"].pop();
		objctCrtr["value"].pop();

		var objctMtches = this.query["Matches"];
	    objctMtches["current"].pop();
		objctMtches["total"].pop();
    }
	
	getRef("row" + this.elements[0]).style.visibility = "visible";
	getRef("row" + this.elements[1]).style.visibility = "hidden";
	getRef("row" + this.elements[2]).style.visibility = "hidden";

	this.currentColumnId = "DataItem";
	this.elementIndex = 0;	
	this.recount(index);
}

// Parses the value that is coming from textBox criterion
// X % converted to X / 100
Screener.prototype.parseTextBoxValue = function(textBox)
{
	var text = textBox.value;
	
	if (text == undefined)
	    return "";
	
	text = text.toUpperCase();
	text = text.replace(/,/g, "");
	text = text.replace(/ /g, "");
	text = text.replace(/\$/g, "");
	
	var result = parseFloat(text);
	
	if (text.indexOf("%") > 0)
	{
		text = trim(text.replace(/%/, ""));
		result = parseFloat(text) / 100;
	}
	if (text.indexOf("B") > 0)
	{
		text = trim(text.replace(/B/, ""));
		result = parseFloat(text) * 1000000000;
	}
	if (text.indexOf("M") > 0)
	{
		text = trim(text.replace(/M/, ""));
		result = parseFloat(text) * 1000000;
	}
	if (text.indexOf("K") > 0)
	{
		text = trim(text.replace(/K/, ""));
		result = parseFloat(text) * 1000;
	}

	var id = textBox.id;
	var validator = getRef('criterionValidatorCriteria' + id.toString().replace(/criterion/, ""));

	// Check if value is correct
	//if (result.toString() == "NaN")
	if (!isFloat(text))
	{
	    setInnerText(validator, "* Invalid value");
		result = "INVALID";
	}
	else
	{
	    setInnerText(validator, "");
	}	
	
	return result;
}

var _sCrrntScrnrQr;

// Runs the screener
Screener.prototype.run = function( ref, bDsplRslts )
{
	this.isQueryExecuted = 1;
	getRef("screenerMode").value = this.mode;
	
	this.clearResults(true);
	
	//	CancelAsyncPostBack();
	if (this.mode == 'basic')
	{
		// Check if we can run screen (nonempty query / entire row populated)
		if (this.query["DataItem"]["value"].length == 0)
		{
			alert("You must enter the query definition before running a screen");
			return false;
		}
		if (this.query["Criteria"]["value"].length != this.query["DataItem"]["value"].length)
		{
			alert("You must complete the query definition before running a screen");
			return false;
		}

		var queryString = "";

		// check if query contains values that are incorrect
		var errors = "";

		for (var i=0; i < this.query["DataItem"]["value"].length; i++)
		{
			if (i > 0)
				queryString += " AND ";
				
			// Check if the criteria is a input value
			var criteriaTextBox = getRef(this.query["Criteria"]["value"][i]);
			
			var value = (criteriaTextBox != null) ? this.parseTextBoxValue(criteriaTextBox) :
			        this.query["Criteria"]["value"][i];
			
			if (value == "INVALID")
				errors += "Invalid value at row " + (i+1) + "\n";
			
			queryString += this.query["DataItem"]["value"][i];
			queryString += " ";
			queryString += this.query["Operators"]["value"][i];
			queryString += " ";
			queryString += value;
		}
		
		if (errors != "")
		{
			alert("Your query could not be submitted due to the following errors:\n\n" + errors);
			return false;
		}

		getRef("query").value = queryString;
		
		setQuerytoCookie(queryString);
		
		var asTtls = this.query.Matches.total;
		if (!asTtls)
		{
			alert("Unable to locate Matches array.");
			return false;		
		}
		
        var cntRslt = asTtls[asTtls.length - 1];

		// If there are > 1000 records - export to Excel automatically
		if (cntRslt > _cntRsltMxmmFrExcl)
		{
			//alert(getRef('cellButtonExport').childNodes[0].onclick);
			//getRef('cellButtonExport').childNodes[0].onclick();
			var s = "__doPostBack('" + getRef('cellButtonExport').childNodes[0].name + "');";
			eval(s);	            
		}
		else if (cntRslt > 0)
		{
            showHideClearResultsButton(true);
            showHideDisplayResultsButton(false);
                
			getRef('iframeResults' + this.mode).contentWindow.location.replace(
			        "FinancialScreenerResults.aspx");

			// Show progress indicator
			getRef('imageRunProgress').style.visibility = 'visible';
	    }
		else
	    {
            showHideClearResultsButton(false);
	    }
	}
	else
	{
		// Advanced screener mode
		var editor = getRef('AdvancedScreenerEditor') ;
		var queryString = editor.value;
		
		var sNtEql = String.fromCharCode(8800);
        var re = new RegExp(sNtEql, 'gi');
		queryString = queryString.replace(re, "!=");
		
		if (queryString.length == 0)
		{
			alert("You must enter the query definition before running a screen");
			return false;
		}
		
        hideMenu();
                	
		getRef("query").value = queryString;
		
		if (!bDsplRslts)
		{
			getRef('imageRunProgress').style.visibility = 'visible';

			_sCrrntScrnrQr = queryString;
			
			ScreenerService.CountCompanyByExpressionForAdvanced(queryString,
			        countAdvancedSearchCompleted);            			        
            return;
        }

        var cntRslt = getRef('resultsCount').value;

		// If there are > X records - export to Excel automatically
	    var bShwExcl = cntRslt > _cntRsltMxmmFrExcl;
        showHideClearResultsButton(!bShwExcl);
        		
		if (bShwExcl)
		{
			var sPstBckFnctn = "__doPostBack('" +
			        getRef('cellButtonExport').childNodes[0].name + "');";
			eval(sPstBckFnctn);
		}
		else
		{
			getRef('imageRunProgress').style.visibility = 'visible';
			getRef('iframeResults' + this.mode).contentWindow.location.replace(
			        "FinancialScreenerResults.aspx?mode=advanced");

            showHideDisplayResultsButton(false);
		}
	}
	
    return false;
}

//
// Determines if the screen has errors
Screener.prototype.hasErrors = function()
{
	var isError = false;
	for (var i=0; i < this.query["DataItem"]["value"].length; i++)
	{
		var validator = getRef('criterionValidatorCriteria' + i);
		if (validator == null)
		    continue;
		    
        var sErrTxt = getInnerText(validator);
		if (sErrTxt.length > 0)
		    return true;
	}

	return false;
}

// Counts the number of results for given query
Screener.prototype.count = function(ndxQrCndtn)
{
	if (this.hasErrors()) return;
	var cell = getRef("cellCount" + ndxQrCndtn);
	if (cell == null)
	    return;

	cell.innerHTML = "<img src='Images/snake_transparent_small.gif'>";

	var queryString = this.getBasicQueryExpression(ndxQrCndtn);	
	ScreenerService.CountCompanyByExpressionForBasic(queryString,
	        ndxQrCndtn, countSearchCompleted);
}

// Counts the number of results for subproduct from 0 to [index]
Screener.prototype.countTotal = function(ndxQrCndtn)
{
	var cell = getRef("cellCountTotal" + ndxQrCndtn);
    if (cell == null)
	    return;

	cell.innerHTML = "<img src='Images/snake_transparent_small.gif'>";
	
	var queryString = "";
	
	for ( var i = 0; i <= ndxQrCndtn; ++i )
	{
		if (i > 0)
		    queryString += " AND ";

        queryString += this.getBasicQueryExpression(i);
    }
	
	ScreenerService.CountCompanyByExpressionForBasic(queryString, ndxQrCndtn, countTotalSearchCompleted);
}

// Build the query syntax for the given basic screener query line.
Screener.prototype.getBasicQueryExpression = function(ndxQrCndtn)
{
    var sCrtrVl = this.query.Criteria.value[ndxQrCndtn];

	var criteriaTextBox = getRef(sCrtrVl);
	var value = (criteriaTextBox != null) ? this.parseTextBoxValue(criteriaTextBox) : sCrtrVl;

    var sDtItm = this.query.DataItem.value[ndxQrCndtn];
		
	return sDtItm + " " + this.query.Operators.value[ndxQrCndtn] + " " + value;
}

// Recounts given row, and all TOTALS below
Screener.prototype.recount = function(index)
{
	var criteriaTextBox = getRef(this.query["Criteria"]["value"][index]);
	var value = (criteriaTextBox != null) ? this.parseTextBoxValue(
	        criteriaTextBox) : this.query["Criteria"]["value"][index];
	
	if (this.hasErrors())
	    return;
	    
	this.count(index);
	
	var tableResultCountTotal = getRef("tableResultCountTotal");
	for (var i=index; i < tableResultCountTotal.rows.length; i++)
		this.countTotal(i);
		
    //!! Signal dirty query.		

	if (this.waitingForValueEntered)
	{
		// Show the next value for Add Item
		getRef("row" + this.elements[this.elementIndex]).style.visibility = "hidden";
		this.elementIndex = (this.elementIndex + 1 ) % this.elements.length;
		getRef("row" + this.elements[this.elementIndex]).style.visibility = "visible";
		this.waitingForValueEntered = false;
	}
	
    this.updateButtonTextWithTotal();
    
    this.clearResults();    
}

// Escape and replace the plus signs in the query syntax.
// Set the query syntax to the cookie, ScreenerQuery.
function setQuerytoCookie(sScrnrQr)
{
    sScrnrQr = escape(sScrnrQr);
    sScrnrQr = sScrnrQr.replace( /\+/g, '%2B' );    
    setCookie("ScreenerQuery", sScrnrQr, null, true);
}

function countAdvancedSearchCompleted(result)
{
	try
	{
	    setQuerytoCookie(_sCrrntScrnrQr);
	
		var control = getRef('resultsCountAdvanced');
		getRef('imageRunProgress').style.visibility = 'hidden';
		getRef('cellClearDisplayResults').style.display = "none";
		
		var cntRslts = parseInt(result);
		if (cntRslts == 0)
		{
		    setInnerText(control, "Your query did not return any results");
			control.style.display = 'block';
			showHideDisplayResultsButton(false);
		}
		else if (cntRslts > 0)
		{	
			control.style.display = 'none';
			setDisplayResultsButtonText(cntRslts);
			getRef('resultsCount').value = cntRslts;
		}
		else
		{
			// an error occured
			setInnerText(control, result);
			control.style.display = 'block';
			showHideDisplayResultsButton(false);
		}
	}
	catch (err)
	{
		var control = getRef('resultsCountAdvanced');
        setInnerText(control, result);
        control.style.display = 'block';
	}
}

// Display the display results button and change the text to indicate
// if we will display the results in Excel.
function setDisplayResultsButtonText(cntRslts)
{
    var tdCllDsplRslts = getRef('cellDisplayResults');

    if (cntRslts == 0)
    {
        tdCllDsplRslts.style.display = "none";
        return;
    }

    tdCllDsplRslts.style.display = "block";

    var sTxt = "  Display " + cntRslts + " Query Results ";    
    if (cntRslts > _cntRsltMxmmFrExcl)
        sTxt += " in Excel";

    sTxt += "  ";

    tdCllDsplRslts.childNodes[0].value = sTxt;
}

function countSearchCompleted(result)
{
	try
	{
	    var ndxRslt = result.index;	
        var sHtml;
        
		if (result.count == "-1")
		{
			sHtml = "Error";
		}
		else
		{
		    var cntRslt = result.count;
			screener.query["Matches"]["current"][ndxRslt] = cntRslt;
			sHtml = cntRslt;
		}
		
		var cell = getRef("cellCount" + ndxRslt);
		cell.innerHTML = sHtml;        		
	}
	catch(err){}
}

function countTotalSearchCompleted(result)
{
    var ndxRslt = result.index;

	var cell = getRef("cellCountTotal" + ndxRslt);
	if (!cell)
	    return;
	
	if (result.count == "-1")
	{
		cell.innerHTML = "Error";
		return;
	}

    var cntRslt = result.count;

	screener.query["Matches"]["total"][ndxRslt] = cntRslt;
	cell.innerHTML = cntRslt;
		
	screener.updateButtonTextWithTotal();
}

Screener.prototype.updateButtonTextWithTotal = function()
{
    var asTtls = this.query.Matches.total;
    if (!asTtls || asTtls.length == 0)
        return;

    var cntRslt = asTtls[asTtls.length - 1];
    setDisplayResultsButtonText(cntRslt);
}

// Creates a new screen
Screener.prototype.new_screen = function(bClrRslts)
{
	// Set the screen name to Untitled
	// TODO: replace hardcoded name with dynamic one 
    if (bClrRslts != undefined && bClrRslts)
    {
	    this.clearResults();
	    this.generateNewQueryName(this.getQueryNames());
	}

	getRef('cellDisplayResults').style.display = "none";
    this.enableExportButton(false);
	this.enableButton("save", false);
	this.isQueryExecuted = 0;

	this.hideSaveScreenName();

	// Remove all the items except the last one
	if (this.getAdvanced())
	{
	    showMenu();
	    clearSrchTxtBxAndResetSelector();
	
	    var editor = getRef('AdvancedScreenerEditor');
		editor.value = "";
	}
	else
	{
	    hideMenu();
	
	    var aTbl = Array(getRef("tableDataItem"), getRef("tableOperators"),
                getRef("tableCriteria"), getRef('tableResultCount'),
	            getRef('tableResultCountTotal'));
	            
	    var aCntMnmn = Array(1,1,1,0,0);	            

        for (var ndxTbl = 0; ndxTbl < aTbl.length; ++ndxTbl)
        {
            if (!aTbl[ndxTbl] || !aTbl[ndxTbl].rows)
                continue;

            while (aTbl[ndxTbl].rows.length > aCntMnmn[ndxTbl])
            {
                aTbl[ndxTbl].deleteRow(0);
            }
    	}
    		
	    // Hide other items
	    getRef("rowDataItem").style.visibility = "visible";
	    getRef("rowOperators").style.visibility = "hidden";
	    getRef("rowCriteria").style.visibility = "hidden";
    	
        this.initializeBasicScreenerArrays();
	}
	
    getRef("tableScreenName").style.visibility = "visible";
}

// Opens screen
Screener.prototype.open_screen = function(name)
{
    this.clearResults();
	this.toggle_menu('open');
	name = unescape(name);
	_sScrnrQrNm = name;
	ScreenerService.OpenScreenerQuery(name, this.getAdvanced(),
	        OpenScreenerCompleted);
}

var _sScrnrQrNm;

function OpenScreenerCompleted(sScrnrQrDt)
{
	screener.open_preset_screen(sScrnrQrDt, _sScrnrQrNm);	
}

var _sDtDlmtr = String.fromCharCode(176);

// Opens screen
Screener.prototype.open_preset_screen = function(sQry, name, isSession)
{
    this.clearResults();
	this.hideSaveScreenName();
	this.new_screen();

	getRef("labelScreenName").value = name;
	setInnerText(getRef("labelScreenNameReadOnly"), name);
	
	if (sQry == null || sQry.length == 0)
		return;
		
	if (sQry.substring(0,6) == 'preset')
	{
	    var iPresetIndex = eval(sQry.substring(7, sQry.length - 1));
	    if (iPresetIndex >= 0 && iPresetIndex < _aasScrnrPrsts.length)
	    {
	        if (this.getAdvanced())
	            sQry = _aasScrnrPrsts[iPresetIndex][2];
	        else
	            sQry = _aasScrnrPrsts[iPresetIndex][1];
	    }
	    else
	        return;
	}
	
	sQry = unescape(sQry);
	
	var rowCount = 0;
	
	if (this.getAdvanced())
	{
		var editor = getRef('AdvancedScreenerEditor') ;
		this.enableButton("save", true);
		if (sQry.indexOf(_sDtDlmtr) > 0)
		{
			var parts = sQry.split(_sDtDlmtr);
			var k=0;
			var j=0;
			for (var i=0; i < this.elements.length; i++)
			{
				if (parts[k] != undefined && parts[k].length > 0)
				{
					this.query[this.elements[i]]["name"] = parts[k++].split(
					        _sPlsMnsDlmtr);
					this.query[this.elements[i]]["value"] = parts[k++].split(
					        _sPlsMnsDlmtr);
					j++;
				}
			}
			
			for (var i=0; i < j; i++)
			{	
				if (this.query["DataItem"]["name"][i] == undefined) continue;
				if (i > 0 && i <= j - 1)
					editor.value += " And ";
				editor.value += this.query["DataItem"]["name"][i] + " " +
				     this.query["Operators"]["name"][i] + " " +
				     this.query["Criteria"]["value"][i];
			}
		}	
		else
		{
			editor.value = sQry;
		}
	}
	else
	{
		// Recreate query table
		var parts = sQry.split(_sDtDlmtr);
		var k = 0;
		for (var i = 0; i < this.elements.length; i++)
		{
			if (parts[k] != undefined && parts[k].length > 0)
			{
				this.query[this.elements[i]]["name"] = parts[k++].split(_sPlsMnsDlmtr);
				this.query[this.elements[i]]["value"] = parts[k++].split(_sPlsMnsDlmtr);
			}
		}
		
		// Get matches
		if (parts[k] != undefined && parts[k].length > 0)
		{
			this.query["Matches"]["current"] = parts[k++].split(_sPlsMnsDlmtr);
			this.query["Matches"]["total"] = parts[k++].split(_sPlsMnsDlmtr);
		}
		
		rowCount = this.query["Criteria"]["value"].length;
		
		this.enableButton("save", rowCount > 0);

		var isValue = false;
		
		// Recreate the items
		for (var ndxRw = 0; ndxRw < rowCount; ++ndxRw)
		{
			for (var ndxElmnt = 0; ndxElmnt < this.elements.length; ++ndxElmnt)
			{	
				var table = getRef("table" + this.elements[ndxElmnt]);
				var row = table.insertRow(table.rows.length - 1);
				var index = table.rows.length - 2;
				
				if (this.elements[ndxElmnt] == "Criteria" &&
				        this.query[this.elements[ndxElmnt]]["name"][ndxRw] == "[value]")
				{
					isValue = true;					
					this.query[this.elements[ndxElmnt]]["name"][ndxRw] =
					        '<input class="input_no_border" type="text" id="criterion' +
					        ndxRw + '"  onchange="screener.recount(' + ndxRw +
					        ')" onkeydown="screener.inputChanged(event, ' + ndxRw +
					        ')" value="' + this.query[this.elements[ndxElmnt]]["value"][ndxRw] +
					        '" onmousedown="screener.show_and_fadeout_block_menu' +
					        '(\'divMenuCriteria\')"  onfocus="this.className=\'input_selected\'" ' +
					        'onblur="this.className=\'input_no_border\'"  />';
					        
					this.query[this.elements[ndxElmnt]]["value"][ndxRw] = 'criterion' + ndxRw;
				}
				
				var cell = row.insertCell(0);
				var deleteImage = "";
				cell.style.verticalAlign = "middle";

				if (this.elements[ndxElmnt] == "DataItem")
				    deleteImage = "<a class=item onclick='screener.removeRow(" +
    				    ndxRw + ")'><img src='Images/X/combo.gif'/></a>&nbsp;";
    				    
				var title="";
				if (!isValue)
					title = this.query[this.elements[ndxElmnt]]["name"][ndxRw];
					
				cell.innerHTML = deleteImage + '<a class="item" onclick="screener.showMenu(' +
				        (table.rows.length - 2) + ',\'' + this.elements[ndxElmnt] + '\')" title="' +
				        title + '">' + this.query[this.elements[ndxElmnt]]["name"][ndxRw] +
				        '</a>' + '<span id="criterionValidator' + this.elements[ndxElmnt] + ndxRw +
				        '" class="invalid_value"></span>';
				        
				if (isValue)
				{
					this.query[this.elements[ndxElmnt]]["name"][ndxRw] = '[value]';
					isValue = false;
				}
			}

			// Create result table
			var resultTable = getRef('tableResultCount');
			var row = resultTable.insertRow(resultTable.rows.length);
			var cell = row.insertCell(0);
			cell.id = "cellCount" + index;
			if (isSession)
			{
			    setInnerText(cell, this.query["Matches"]["current"][ndxRw]);
            }

			var resultTable = getRef('tableResultCountTotal');
			var row = resultTable.insertRow(resultTable.rows.length);
			var cell = row.insertCell(0);
			cell.id = "cellCountTotal" + index;
			if (isSession)
			{
			    setInnerText(cell, this.query["Matches"]["total"][ndxRw]);
            }

			// Call the count method
			if (!isSession)
			{
				this.count(ndxRw);
				this.countTotal(ndxRw);
			}
		}
	}	
}

// Executed when the key is pressed on text value
Screener.prototype.inputChanged = function(e, index)
{
	var keyCode;
	if (isIE)
		keyCode = e.keyCode;
	else
		keyCode = e.which;
		
	if (keyCode == 13 || keyCode == 9)	
	{
		var textBox = getRef("criterion" + index);
		//textBox.style.borderWidth = "0px";
		textBox.blur();
				
		this.recount(index);
		
		if (this.waitingForValueEntered)
		{
			// Show the next value for Add Item
			getRef("row" + this.elements[this.elementIndex]).style.visibility = "hidden";
			this.elementIndex = (this.elementIndex + 1 ) % this.elements.length;
			getRef("row" + this.elements[this.elementIndex]).style.visibility = "visible";
			this.waitingForValueEntered = false;
		}
	}
}

// Deletes given screen
Screener.prototype.delete_screen = function(name)
{
    var sNmUnscpd = unescape(name);   
	if (!confirm("Are you sure you want to remove the screen, " + sNmUnscpd + "?"))
	    return;
	        
    ScreenerService.DeleteScreenerQuery(sNmUnscpd, this.getAdvanced(),
            DeleteScreenerCompleted);
}

// Saves screen
Screener.prototype.save_screen = function()
{
	if (!this.getAdvanced())
	{
		// Check if we can save screen (nonempty query / entire row populated)
		if (this.query["DataItem"]["value"].length == 0)
		{
			alert("You cannot save an empty screen");
			return false;
		}
		if (this.query["Criteria"]["value"].length != this.query["DataItem"]["value"].length)
		{
			alert("You must complete the query definition before saving a screen");
			return false;
		}
	}
	else
	{
		var editor = getRef('AdvancedScreenerEditor') ;
		if (editor.value.length == 0)
		{
			alert("You cannot save an empty screen");
			return false;
		}
	}

	// Get the name of the screen
	var screen_name = trim(getRef("labelScreenName").value);
	setInnerText(getRef("labelScreenNameReadOnly"), screen_name);
	
	// Show an alert if the screen name is Untitled
	if (screen_name == "Untitled" || screen_name == "")
	{
	    alert("You need to set the name of the screener");
        return;
	}
	
	this.hideSaveScreenName();
	
	var screen_value;
	
	if (this.mode == "basic")
	{
	    // Save the BASIC screen
	    var saveQueryCriteria = new Array();
	    saveQueryCriteria["name"] = this.query["Criteria"]["name"].concat();
	    saveQueryCriteria["value"] = this.query["Criteria"]["value"].concat();
    	
	    // Replace the INPUT type values
	    for (var i=0; i < saveQueryCriteria["name"].length; i++)
	    {
		    if (saveQueryCriteria["name"][i] == "[value]")
		    {
			    var input = getRef(saveQueryCriteria["value"][i]);
			    saveQueryCriteria["value"][i] = input.value;
		    }
	    }
	    
	    // 1. Serialize query array to the following form
	    screen_value = this.query["DataItem"]["name"].join(_sPlsMnsDlmtr) + _sDtDlmtr +
	            this.query["DataItem"]["value"].join(_sPlsMnsDlmtr) + _sDtDlmtr +
	            this.query["Operators"]["name"].join(_sPlsMnsDlmtr) + _sDtDlmtr +
	            this.query["Operators"]["value"].join(_sPlsMnsDlmtr) + _sDtDlmtr +
	            saveQueryCriteria["name"].join(_sPlsMnsDlmtr) + _sDtDlmtr +
	            saveQueryCriteria["value"].join(_sPlsMnsDlmtr) + _sDtDlmtr +
	            this.query["Matches"]["current"].join(_sPlsMnsDlmtr) + _sDtDlmtr +
	            this.query["Matches"]["total"].join(_sPlsMnsDlmtr);
	}
    else
	{
	    // Save the ADVANCED screen	    
		var editor = getRef('AdvancedScreenerEditor') ;
		screen_value = editor.value;
	}
	
	this.saveScreenerQuery(screen_name, screen_value);
}

Screener.prototype.saveScreenerQuery = function(screen_name, screen_value)
{
    ScreenerService.SaveScreenerQuery(screen_name, screen_value, 
            this.getAdvanced(), SaveScreenerCompleted);
}

function SaveScreenerCompleted(bCmplt)
{
    if (!bCmplt)
        return;
    
    screener.fillMenu();
}

function DeleteScreenerCompleted(bCmplt)
{
    if (!bCmplt)
        return;
    
    screener.fillMenu();
}

// toogles given menu , mode = (open, delete)
Screener.prototype.toggle_menu = function(mode)
{
    // If we're in basic, hide the screener data item menu.
    if (!this.getAdvanced())
        hideMenu();

	if ((this.numberOfSavedScreens > 0) || (mode == 'openPresets'))
	{
		var menu = getRef(mode + 'MenuElements');
		clearTimeout(this.menuTimeoutId[mode + 'MenuElements']);
		menu.style.visibility = (menu.style.visibility == 'hidden') ? 'visible' : 'hidden' ;
		menu.style.zIndex = 1000;
	}
}

Screener.prototype.menuTimeoutId = new Array();

// Clears the timeouts 
Screener.prototype.clear_timeout = function(menu_id)
{
	clearTimeout(this.menuTimeoutId[menu_id]);
}

// Fades out given menu, by timeperiod
Screener.prototype.fadeout_menu = function(menu_id)
{
	this.menuTimeoutId[menu_id] = setTimeout("screener.hide_menu('" + menu_id + "')", 1000);
}

// Fades out given menu, by timeperiod
Screener.prototype.fadeout_block_menu = function(menu_id)
{
	this.menuTimeoutId[menu_id] = setTimeout("screener.hide_block_menu('" + menu_id + "')", 1000);
}

// shows block menu and then Fades out given menu, by timeperiod
Screener.prototype.show_and_fadeout_block_menu = function(menu_id)
{
	//this.show_block_menu(menu_id);
	this.menuTimeoutId[menu_id] = setTimeout("screener.hide_block_menu('" + menu_id + "')", 2000);
}

// Hides screener menus
Screener.prototype.hide_menu = function(menu_id)
{
	var menu = getRef(menu_id);
	menu.style.visibility = "hidden";
}

// Hides screener block menus
Screener.prototype.hide_block_menu = function(menu_id)
{
	var menu = getRef(menu_id);
	menu.style.display = "none";
}

// Shows screener block menus
Screener.prototype.show_block_menu = function(menu_id)
{
	var menu = getRef(menu_id);
	menu.style.display = "block";
}

// Hides screener menus
Screener.prototype.hide_menu = function(menu_id)
{
	var menu = getRef(menu_id);
	menu.style.visibility = "hidden";
}

// Hides screener menus
Screener.prototype.hide_menus = function()
{
	this.hide_menu('openMenuElements');
	this.hide_menu('deleteMenuElements');
}

// Hides screener menus
Screener.prototype.showSaveScreenName = function()
{
	if (this.images["save"]["enabled"] == false)
		return;

	var menu = getRef('cellScreenName');
	menu.style.display = "block";
	var menu = getRef('cellScreenNameReadOnly');
	menu.style.display = "none";
}

Screener.prototype.hideSaveScreenName = function()
{
	this.cancelScreenName();
}

// Hides screener menus
Screener.prototype.deleteScreenName = function()
{
	var menu = getRef('cellScreenName');
	menu.style.display = "none";
	var menu = getRef('cellScreenNameReadOnly');
	menu.style.display = "block";	
}

Screener.prototype.cancelScreenName = function()
{
	var menu = getRef('cellScreenName');
	menu.style.display = "none";
	var menu = getRef('cellScreenNameReadOnly');
	menu.style.display = "block";
	var menu = getRef('cellCancelButtons');
	menu.style.display = "none";
}

// Clears the result
Screener.prototype.clearResults = function(bDntHdDsplRslts)
{
	this.isQueryExecuted = 0;

	var iframe = getRef('iframeResults' + this.mode);
	if (iframe.style.display != "none")
		iframe.style.display = "none";

	if (!bDntHdDsplRslts)
	    getRef('cellDisplayResults').style.display = "none";

    showHideClearResultsButton(false);

	if (this.mode != "basic")
	    return;

    var asTtls = screener.query.Matches.total;
    if (!asTtls || asTtls.length == 0)
        return;
    
    var cntRslt = asTtls[asTtls.length - 1];
    setDisplayResultsButtonText(cntRslt);	    	   
}

// Save current session to the cookie
Screener.prototype.saveSession = function()
{
	// Get and save screen name
	var screenerName = getInnerText(getRef("labelScreenNameReadOnly"));
	
	var screenerHeader = screenerName + _sDtDlmtr + this.mode + _sDtDlmtr + this.isQueryExecuted;
	
	// Save current query
	var screen_value = "";		
	if (this.getAdvanced())
	{
		var editor = getRef('AdvancedScreenerEditor');
		if (editor == null)
		    return;
		    
		screen_value = editor.value;
	}
	else
	{
		// Save the screen
		var saveQueryCriteria = new Array();
		saveQueryCriteria["name"] = this.query["Criteria"]["name"].concat();
		saveQueryCriteria["value"] = this.query["Criteria"]["value"].concat();
		
		// Replace the INPUT type values
		for (var i=0; i < saveQueryCriteria["name"].length; i++)
		{
			if (saveQueryCriteria["name"][i] == "[value]")
			{
				var input = getRef(saveQueryCriteria["value"][i]);
				saveQueryCriteria["value"][i] = input.value;
			}
		}
		
		// 1. Serialize query array to the following form
		// DataItem_name1Â±DataItem_name2 .... Â°DataItem_value1Â±DataItem_value2 ....Â°Operator_name1Â±Operator_name2 .... Â°Operator_value1Â±Operator_value2 ....Â°Criterion_name1Â±Criterion_name2 .... Â°Criterion_value1Â±Criterion_value2 ....
		var screen_value = this.query["DataItem"]["name"].join(_sPlsMnsDlmtr)+_sDtDlmtr+
	    	    this.query["DataItem"]["value"].join(_sPlsMnsDlmtr)+_sDtDlmtr+
    		    this.query["Operators"]["name"].join(_sPlsMnsDlmtr)+_sDtDlmtr+
    		    this.query["Operators"]["value"].join(_sPlsMnsDlmtr)+_sDtDlmtr+
    		    saveQueryCriteria["name"].join(_sPlsMnsDlmtr)+_sDtDlmtr+
    		    saveQueryCriteria["value"].join(_sPlsMnsDlmtr)+_sDtDlmtr+
    		    this.query["Matches"]["current"].join(_sPlsMnsDlmtr)+_sDtDlmtr+
    		    this.query["Matches"]["total"].join(_sPlsMnsDlmtr);
	}
	setCookie(escape('ScreenSession' + this.mode), escape(screen_value));
	setCookie(escape('ScreenSessionHeader'), escape(screenerHeader));
}

Screener.prototype.openSession = function()
{
	var cookie = unescape(getCookie('ScreenSessionHeader'));
	if (cookie.length == 0)
		return;
			
	var headers = cookie.split(_sDtDlmtr);
	this.mode = headers[1];
	if (this.mode == "undefined")
		this.mode = "basic";

	var name = headers[0];
	setInnerText(getRef("labelScreenNameReadOnly"), name);
	getRef("labelScreenName").value = name;
	this.isQueryExecuted = headers[2];
	
	cookie = getCookie('ScreenSession' + this.mode);
	
	if (this.getAdvanced())
	{
		var cookie = unescape(cookie);
		if (cookie.length == 0)
			return;
		this.enableButton("save", true);
		var editor = getRef("AdvancedScreenerEditor");
		editor.value = cookie;
	}
	else
	{
		// Recreate the window
		this.open_preset_screen(cookie, name, true);
		
		// Run query if was run
		if (this.isQueryExecuted == 1)
		{
		//	this.run();
		}
	}
}

/*
	Hover
		mode: open, ...
*/
Screener.prototype.hover = function(mode)
{
	if (this.images[mode]["enabled"])
		getRef('img_' + mode).src = this.images[mode]["hover"].src;
}

/*
	Out
		mode: open, ....
*/
Screener.prototype.out = function(mode)
{
	if (this.images[mode]["enabled"])
		getRef('img_' + mode).src = this.images[mode]["active"].src;
}


Screener.prototype.hoverWithId = function(mode, id)
{
	if (this.images[mode]["enabled"])
		getRef(id).src = this.images[mode]["hover"].src;
}

Screener.prototype.outWithId = function(mode, id)
{
	if (this.images[mode]["enabled"])
		getRef(id).src = this.images[mode]["active"].src;
}


Screener.prototype.enableExportButton = function(enabled)
{
	this.images["export"]["enabled"] = enabled;
	var img = getRef(this.ids["export"]);
	if (enabled)
		img.src = this.images["export"]["active"].src;
	else
		img.src = this.images["export"]["inactive"].src;	
}

/*
 * Enables or disables the button
 */
Screener.prototype.enableButton = function(mode, enabled)
{
    var bEnbldOld = this.images[mode]["enabled"];
    if (bEnbldOld == enabled)
        return;

	this.images[mode]["enabled"] = enabled;
	var img = getRef('img_' + mode);
	
	if (enabled)
		img.src = this.images[mode]["active"].src;
	else
		img.src = this.images[mode]["inactive"].src;
}

/*
 * Shows or hides given results area
 */
Screener.prototype.showResults = function(mode, show)
{
	getRef('iframeResults' + mode).style.display = (show) ? "block" : "none";
}

/*
	COOKIE PROCEDURES
*/

// Gets the cookie
function getCookie(c_name)
{
    if (document.cookie.length > 0)
    {
	    c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1)
		{ 
		    c_start = c_start + c_name.length + 1; 
		    c_end = document.cookie.indexOf(";", c_start);
		    if (c_end == -1)
		        c_end=document.cookie.length;
		        
		    return unescape(document.cookie.substring(c_start,c_end));
        } 
    }
    
	return "";
}

// Sets the cookie
function setCookie(c_name, value, expiredays, bDntEscp)
{
	var exdate = new Date();

    if (expiredays != null && expiredays > 0)
        exdate.setDate(exdate.getDate() + expiredays);

    var sCkVl = value;
        
    if (!bDntEscp)
        sCkVl = escape(value);
        
    var sCkStr = c_name + "=" + sCkVl;
    sCkStr += ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
    
	document.cookie = sCkStr;	        
}

// Set Netscape up to run the "captureMousePosition" function whenever
// the mouse is moved. For Internet Explorer and Netscape 6, you can capture
// the movement a little easier.
if (document.layers) { // Netscape
    document.captureEvents(Event.MOUSEMOVE);
    document.captureEvents(Event.KEYDOWN);
    document.onmousemove = captureMousePosition;
    document.onkeydown = captureKey;
} else if (document.all) { // Internet Explorer
    document.onmousemove = captureMousePosition;
    document.onkeydown = captureKey;
} else if (document.getElementById) { // Netcsape 6
    document.onmousemove = captureMousePosition;
    document.onkeydown = captureKey;
}
// Global variables
xMousePos = 0; // Horizontal position of the mouse on the screen
yMousePos = 0; // Vertical position of the mouse on the screen
xMousePosMax = 0; // Width of the page
yMousePosMax = 0; // Height of the page

/*
 * Occurs when the user presses a key
 */
function captureKey(evnt) {
	var keyCode;
	
	if (isIE)
		keyCode = event.keyCode;
	else
		keyCode = evnt.which;
}

function captureMousePosition(evnt) {
    if (document.layers) {
        // When the page scrolls in Netscape, the event's mouse position
        // reflects the absolute position on the screen. innerHight/Width
        // is the position from the top/left of the screen that the user is
        // looking at. pageX/YOffset is the amount that the user has
        // scrolled into the page. So the values will be in relation to
        // each other as the total offsets into the page, no matter if
        // the user has scrolled or not.
        xMousePos = evnt.pageX;
        yMousePos = evnt.pageY;
        xMousePosMax = window.innerWidth+window.pageXOffset;
        yMousePosMax = window.innerHeight+window.pageYOffset;
    } else if (document.all) {
        // When the page scrolls in IE, the event's mouse position
        // reflects the position from the top/left of the screen the
        // user is looking at. scrollLeft/Top is the amount the user
        // has scrolled into the page. clientWidth/Height is the height/
        // width of the current page the user is looking at. So, to be
        // consistent with Netscape (above), add the scroll offsets to
        // both so we end up with an absolute value on the page, no
        // matter if the user has scrolled or not.
        xMousePos = window.event.clientX + document.body.scrollLeft;
        yMousePos = window.event.clientY + document.body.scrollTop;
        xMousePosMax = document.body.clientWidth+document.body.scrollLeft;
        yMousePosMax = document.body.clientHeight+document.body.scrollTop;
    } else if (document.getElementById) {
        // Netscape 6 behaves the same as Netscape 4 in this regard
        xMousePos = evnt.pageX;
        yMousePos = evnt.pageY;
        xMousePosMax = window.innerWidth+window.pageXOffset;
        yMousePosMax = window.innerHeight+window.pageYOffset;
    }    
}

/*
 Main menu related functionallity
 */
 
//
// Hides special submenu (industry, sector, ...)
function hideSubmenuSpecial()
{
    getRef('submenuSpecialScreener').style.visibility = "hidden";
}

function showHideDisplayResultsButton(bShw)
{
    var sDspl = "none";
    if (bShw)
        sDspl = "block";
    
    getRef('cellDisplayResults').style.display = sDspl;
}

function showHideClearResultsButton(bShw)
{
    var sDspl = "none";
    if (bShw)
        sDspl = "block";

    var dvClrDsplyRslts = document.getElementById("cellClearDisplayResults");
    dvClrDsplyRslts.style.display = sDspl;
    
    if (this.mode != null)
        getRef('iframeResults' + this.mode).contentWindow.location = "";
}

// Show the codes menu.
function showCodes(index, item, sTdCll)
{
	hideLowerLevelMenus(2);

	menus.push(sTdCll);
	
    // Check to see if we update the search text box.
	// Don't if the ID is not a number of one
	// of the descriptive information items.
	var divAnchor = document.getElementById(index);
	setSearchTextBox(getInnerText(divAnchor));

    var tdCll = document.getElementById("cell" + sTdCll);
	tdCll.style.display = "block";
	tdCll.style.visibility = "visible";
	
	var divAnchor = document.getElementById(index);
    divAnchor.style.backgroundColor = "#dae3ea";
   
	menusStyles.push(divAnchor);
}
 
function showSubmenuSpecial(item)
{
    var sHtml = createCodesMenu(item);
    getRef('submenuSpecialList').innerHTML = sHtml;
    getRef('submenuSpecialScreener').style.visibility = "visible";
}

function createCodesMenu(item)
{
    var items = eval("submenu" + item);
    
    var sHtml = "<div></div>";
    for (var ndxItm=0; ndxItm < items.length; ++ndxItm)
    {
        var value = '"' + items[ndxItm][1] + '"';
        var sLbl = items[ndxItm][0];

        sHtml += "<div class='itemDiv' style='background-color:white'><a class='itemDate' ";
        sHtml += "href='javascript:screener.addItem(-1,-1,-1,true,";
        sHtml += '"';
        sHtml += sLbl;
        sHtml += '"';
        sHtml += ",";
        sHtml += value;
        sHtml += "); hideSubmenuSpecial();'>";        
        sHtml += sLbl;
        sHtml += "</a></div>";    
    }

    return sHtml;    
}
 
//
// Hides main menu 
function hideMenu()
{
	getRef('menu').style.display = "none";
	var menuShadow = getRef('menuShadow');
	menuShadow.style.display = "none";

    showDataItemMenuButton(true);
}

function showDataItemMenuButton(bShw)
{
    var tdShwMnu = document.getElementById("tdShowMenu");
    if (!tdShwMnu)
        return;
        
    var sDsplVl = "none";    
    if (bShw)
        sDsplVl = "block";
        
    tdShwMnu.style.display = sDsplVl;
}

function getShowDisplayStyle()
{
    if (isIE)
        return "block";

    return "table-cell";        
}

// Shows main menu 
function showMenu()
{
	var menu = getRef('menu');
	if (menu.style.display != "none")
	    return;

    var cll0 = document.getElementById("cell0");
    cll0.style.display = getShowDisplayStyle();

    // Clear the search box.
    clearSearchTextBox("");

    // Hide the intellisense object.
    var cllintllsns = document.getElementById("searchCell");
    cllintllsns.style.display = "none";

    showDataItemMenuButton(false);

    hideLowerLevelMenus(0);
	
	getRef("buttonSelectDataItemOK").disabled = true;
	
	setInnerText(getRef("itemSelectedName"), "");
	
	menu.style.display = "block";

    // Check to see what mode we're in.	
    if (!screener.getAdvanced())
	{
        // Show the menu for the basic screener.
	    var menuShadow = getRef('menuShadow');
	    menuShadow.style.display = "block";    
	    menuShadow.style.top = (yMousePos + 20) + "px";
	    menu.style.top = (yMousePos + 10) + "px";
	    return;
	}

    // Show the menu for the advanced screener.
    // Set the style and position attributes
    // since div isn't position absolute as it is in basic.
    var mnu = document.getElementById("menu");
    var stlMnu = mnu.style;
    var sPstn = stlMnu.position;
    if (sPstn == "relative")
        return;
        
    stlMnu.position = "relative";
    stlMnu.top = "0px";
    stlMnu.left = "0px";

    var divPlcHldr = document.getElementById("dataItemSelectorPlaceholder");
    if (divPlcHldr != null)
        divPlcHldr.appendChild(mnu);
}

// Main menu variables
var menus = new Array();
var menusStyles = new Array();
var lastItem = undefined;
var lastDate = undefined;
var lastItemIndex;
var lastDateValue = "";
var lastDateLabel = "";

// Shows sub menu
function showSubMenu(index, level, idDivAnchor)
{
	// hide last item if selected 
	if (lastItem != undefined)
	    lastItem.style.backgroundColor = "";
	    
	if (lastDate != undefined)
	    lastDate.style.backgroundColor = "";
	
	getRef("buttonSelectDataItemOK").disabled = true;	
	setInnerText(getRef("itemSelectedName"), "");
	
	hideLowerLevelMenus(level);

    var dvDtItmLst = getRef('cell'+index);

    dvDtItmLst.style.display = getShowDisplayStyle();
	dvDtItmLst.style.visibility = "visible";
	
	var divAnchor = document.getElementById(idDivAnchor);
	divAnchor.style.backgroundColor = "#dae3ea";
	
	menus.push(index);
	menusStyles.push(divAnchor);
}

// Hide the lower level menu.
function hideLowerLevelMenus(level, bHdCll0)
{
    if (menus.length > 0)
    {
	    while (menus.length >= level)
	    {
	        var sMnNm = menus.pop();
    	    
		    var item = getRef('cell' + sMnNm);
		    if (item != undefined)
		    {
			    item.style.display = "none";
			    item.style.visibility = "hidden";
		    }

		    if (menusStyles.length == 0)
		        break;

            var menuDv = menusStyles.pop();        
            menuDv.style.backgroundColor = "";
	    }
	}
	
	if (level == 0 && bHdCll0 != undefined && bHdCll0  )
    {
        var cll0 = document.getElementById("cell0");
        cll0.style.display = "none";
    }
}

// Shows Dates submenu
function showDates(level, idDivAnchor, lastItemIndexRef)
{
	var divAnchor = document.getElementById(idDivAnchor);

	lastItem = divAnchor;
	lastItemIndex = lastItemIndexRef;

    setSearchTextBox(getInnerText(divAnchor));
	
	showSubMenu('Dates', level, idDivAnchor);	
}

function setInnerText(elmnt, nwVl) 
{
    if (!elmnt)
        return;

    if (isIE)
        elmnt.innerText = nwVl;
    else
        elmnt.textContent = nwVl;
}

function getInnerText(elmnt)
{
    if (isIE)
        return elmnt.innerText;

	return elmnt.textContent;
}

// Adds given item
function addNonDateItem(id, sDts, idDivAnchor)
{
	if (lastItem != undefined)
	    lastItem.style.backgroundColor = "";

	var divAnchor = document.getElementById(idDivAnchor);
	divAnchor.style.backgroundColor = "#dae3ea";
	
	// Check to see if we update the search text box.
	// Don't if the ID is not a number of one
	// of the descriptive information items.
	if (!isNaN(id))
	    setSearchTextBox(getInnerText(divAnchor));

	lastItem = divAnchor;	
	lastItemIndex = id;
	
    var sTxt = divAnchor.childNodes[0].innerHTML.replace(
	        '<span class="subind">&nbsp;</span>', '');
    sTxt = sTxt.replace('&amp;', '&');        
	
	setInnerText(getRef("itemSelectedName"), sTxt);
	getRef("buttonSelectDataItemOK").disabled = false;
	
	lastDateValue = sDts;
	lastDateLabel = "";
}

// Adds given item, when date was selected
function addDateItem(itemValue, itemLabel, idDivAnchor)
{
	if (lastDate != undefined)
	    lastDate.style.backgroundColor = "";

	var divAnchor = document.getElementById(idDivAnchor);	    
	divAnchor.style.backgroundColor = "#68C";
	lastDate = divAnchor;
	    	
	divAnchor.style.backgroundColor = "#dae3ea";
	
	var sItmHtml = lastItem.childNodes[0].innerHTML;
	if (sItmHtml.substring(sItmHtml.length - 1) != " ")
	    sItmHtml += " ";
	    
	var sSlctdNm = sItmHtml + itemLabel;
	
	setInnerText(getRef("itemSelectedName"), sSlctdNm);
	getRef("buttonSelectDataItemOK").disabled = false;
	
	lastDateValue = itemValue;
	lastDateLabel = itemLabel;
}

// Occurs when the Add button was clicked
function addNewDataItem()
{
	if (!screener.getAdvanced())
	{
        // Add the screener item to the display and hide the menu.
		screener.addItem(lastItemIndex, lastDateValue, lastDateLabel);
        hideMenu();
        return;
	}

    var editor = getRef('AdvancedScreenerEditor') ;        
    // Add the screener item to the display and don't hide the menu.
    
    var sNwItmToAdd;
    
    if (isNaN(lastItemIndex))
    {
        if (lastItemIndex.indexOf('=') > 0)
            sNwItmToAdd = lastItemIndex;
    }
    else
    {
        var sScrnrLbl = screenerItems[lastItemIndex][0];
    	if (sScrnrLbl.substring(sScrnrLbl.length - 1) != " ")
    	    sScrnrLbl += " ";

        sNwItmToAdd = sScrnrLbl + lastDateLabel;
        sNwItmToAdd = "{" + sNwItmToAdd.trim() + "}";
    }

    QueryEditor.insertCode("AdvancedScreenerEditor", sNwItmToAdd, false);
    handleTextQueryChange();
}

/*
 * Finds the postion of the element
 */
function findPosAndSize(obj) {
	var curleft = curtop =  curwidth = curheight = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		curwidth = obj.offsetWidth
		curheight = obj.offsetHeight
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop, curwidth, curheight];
}

/********************************************
 *  Advanced screener functions
 ********************************************/
 
/*
	Inserts the symbol into editor
*/
Screener.prototype.insertSymbol = function(t)
{
    var sVlToInsrt = t.value;	
	if (sVlToInsrt == String.fromCharCode(8800))
	    sVlToInsrt = "!=";
	    
    sVlToInsrt = sVlToInsrt.replace(/\s/g, "");
	    
	var editor = getRef('AdvancedScreenerEditor');
	editor.value += " " + sVlToInsrt + " ";
	editor.focus();
}

/*
	Parses editor window and creates a query	
 */
Screener.prototype.createQuery = function()
{
	var editor = FCKeditorAPI.GetInstance('AdvancedScreenerEditor') ;
	alert(editor.Value);
}

Screener.prototype.setScreenerMode = function(mode)
{
	this.mode = mode;
	getRef('screenerMode').value = mode;
}

Screener.prototype.toggleScreenerMode = function()
{
    var currMode = getRef('screenerMode').value;
    var newMode, nextMode;

	if ((currMode == null) || (currMode == "basic") || (currMode == ""))
	{
	    newMode = "advanced";
	    nextMode = "basic";
	}
	else
	{
	    newMode = "basic";
	    nextMode = "advanced";
	}
	
	this.mode = newMode;
	
	getRef('cellDisplayResults').style.display = "none";
	getRef('screenerMode').value = newMode;

	color = "#FFFEE3";
	
	getRef('divResultsBasic').style.display = (this.mode == "basic") ? "block" : "none";
	getRef('divResultsAdvanced').style.display = (this.mode == "advanced") ? "block" : "none";
	
	getRef('basicScreener').style.display = (this.mode == "basic") ? "block" : "none";
	getRef('advancedScreener').style.display = (this.mode == "advanced") ? "block" : "none";
	
	getRef('img_advanced').style.display = (this.mode == "basic") ? "block" : "none";
	getRef('img_basic').style.display = (this.mode == "advanced") ? "block" : "none";
	
	getRef('img_title_advanced').style.display = (this.mode == "advanced") ? "block" : "none";
	getRef('img_title_basic').style.display = (this.mode == "basic") ? "block" : "none";

	this.fillMenu();
}

function replaceALL(string,strTarget,strSubString)
{
    var strText = string;
    var intIndexOfMatch = strText.indexOf( strTarget );
     
    while (intIndexOfMatch != -1)
    {
        strText = strText.replace( strTarget, strSubString )
        intIndexOfMatch = strText.indexOf( strTarget );
    }

    return( strText );
}

function getIndexInArray(asVl, sVl)
{
    for (var ndxVl = 0; ndxVl < asVl.length; ++ndxVl)
    {
        if (asVl[ndxVl] == sVl)
            return ndxVl;
    }
    
    return -1;
}