function doReady() {
	$("#criteriaInfoDiv").addClass("criteriaInfoDiv");
	$("#criteriaInfoDiv").addClass("visible");
	
	$("#criteriaTable tr, .subCategoryDiv, #criteriaInfoDiv div").hide();
	
	$("#categoryDiv div").addClass("categoryNotSelected");
	
	$(".subCategoryDiv div").addClass("criteriaNotSelected");
	
	$("#criteriaSelectorHeaderDiv").toggle(function() {
		$("#criteriaSelectorHeaderDiv img").attr("src","lib/theme/add.png");
		$("#criteriaSelectorDiv").hide("fast");
	}, function() {
		$("#criteriaSelectorHeaderDiv img").attr("src","lib/theme/delete.png");
		$("#criteriaSelectorDiv").show("fast");
	});
	
	//----- Initialize with additional properties
	/*
	$("#criteriaSelectorDiv input").each(function(i) {
		var cat = $(this).attr("cat");
		var name = $(this).attr("name");
		var event = $(this).attr("event");
		var type = $(this).attr("type");
		var value = $(this).attr("value");
		var html = $(this).html();
		
		if(type == 'radio') {
			$(this).attr("value", "" + event + "=10");
			$(this).attr("id", "" + name + "=" + event);
		
			//var id = $(this).attr("id");
			//$(this).html("<label for='" + id + "' id='" + name + event + "'>" + html + "</label>");
			//$("#criteriaSelectorDiv #" + id + " label").attr("for", "" + id);
			//$("#criteriaSelectorDiv #" + id + " label").attr("id", "" + name + event);
		}
		else if(type == 'checkbox') {
			$(this).attr("id", "" + value);
		}
	});
	*/
	
	$("#categoryDiv div").click(function(){
		$("#categoryDiv div").addClass("categoryNotSelected").removeClass("categorySelected");
		$(this).removeClass("categoryNotSelected").addClass("categorySelected");
		var id = $(this).attr("id");
		$(".subCategoryDiv").hide();
		$("#criteriaInfoDiv div").hide();
		$("#sub"+id+"Div").show("fast");
	});
	
	$(".subCategoryDiv div").click(function(){
		$(".subCategoryDiv div").addClass("criteriaNotSelected").removeClass("criteriaSelected");
		$(this).removeClass("criteriaNotSelected").addClass("criteriaSelected");
		var id = $(this).attr("id");
		$("#criteriaInfoDiv div").hide();
		$("#"+id+"Info").show("fast");
	});
	
	//----- Listener for "Add Criterion" Button -----
	$("#criteriaInfoDiv .button").click(function(){
		var id = $(this).attr("id");
		var num = $(this).attr("n");
		var info_id = "#criteria" + num + "Info";
		var have_criteria = false;
		
		//--- fundamental criteria ---
		if(id.indexOf("_cb") > 0) {
			sel_val = collectCheckboxValues($(info_id + ' :checked'), info_id);
			sel_txt = collectCheckboxNames($(info_id + ' :checked'), info_id);
			sel_param = $(info_id).attr("t");
			sel_event = $(info_id).attr("event");
			sel_cat = $(info_id + ' :checked').attr("cat");
			sel_group = $(info_id + ' :checked').attr("name");
			sel_type = "fund";
		}
		//--- technical criteria ---
		else if(id.indexOf("_sel") > 0) {
			sel_val = collectCheckboxValues($(info_id + ' :checked'), info_id);
			sel_txt = collectCheckboxNames($(info_id + ' :checked'), info_id);
			sel_param = $(info_id).attr("t");
			sel_cat = $(info_id + ' :checked').attr("cat");
			sel_event = $(info_id + ' :checked').attr("event");
			sel_group = $(info_id + ' :checked').attr("name");
			sel_type = "tech";
		}
		
		if(sel_val == '') {
			return;
		}
		
		rows_num++;
		
		new_row = BuildRow(rows_num, sel_val, sel_type, sel_event, sel_param, sel_txt, sel_group, sel_cat);
		
		have_criteria = HaveCriteria(sel_event, true, new_row, sel_group);

		if(!have_criteria) {
			appendSelectedCriteria(new_row);

			//--- Animated show
			$("#selectedCriteria #row" + rows_num).fadeOut(0);
			$("#selectedCriteria #row" + rows_num).fadeIn("slow");
		}

		$("#remove" + rows_num).click(function() {
			var row_id = $(this).attr("id").replace("remove", "row");
			$("#" + row_id).remove();
			
			if($("#selectedCriteria tr").size() == 1) {
				$("#selectedCriteria tr").remove();
			}
			
			enumSelectedCriteria();
			applyStyleToSelectedCriteria();
			changeButtonsVisivility();
		});
	});	

	//------ Initial Steps -------------
	if(!(valid(fund) || valid(tech))) {
		if(typeof $("#Category1").attr("id") != 'undefined') {
			$("#Category1").click();
			$("#subCategory1Div div").first().click();
		}
		else {
			$("#Category2").click();
			//$("#subCategory2Div div").first().click();
		}
	}

	changeButtonsVisivility();
	
	if(valid(fund) || valid(tech)) {
		doOpen(fund, tech);
	}
}

function changeButtonsVisivility() {
	$("#screenActionButtons").addClass("visible");
	$("#screenActionButtons").show();
	$("#viewScreensButton").show();
	
	if($("#selectedCriteria tr").size() > 1) {
		$("#runScreenButton").show();
		$("#backtestScreenButton").show();
		
		if(login != '') {
			$("#saveScreenButton").show();
			
			if(screen_id != '') {
				$("#saveScreenAsButton").show();
			}
		}
	}
	else {
		$("#runScreenButton").hide();
		$("#backtestScreenButton").hide();
		$("#saveScreenButton").hide();
		$("#saveScreenAsButton").hide();
	}
}

function enumSelectedCriteria() {
	$("#selectedCriteria tr").each(function(i) {
		var id = $(this).attr("id");
		
		if(id != 'selectedCriteriaTableHeader') {
			$("#" + id + " td").first().html("&nbsp;" + i + "&nbsp;");
			$("#" + id + " td").first().attr("align", "center");
		}
	});
}

function collectSelectedText() {
	var result = '';
	
	$("#selectedCriteria tr").each(function(i) {
		var id = $(this).attr("id");
		
		if(id != 'selectedCriteriaTableHeader') {
			name_part = $("#" + id + " td:eq(1) a").html();
			result = (result == '') ? name_part : result + ', ' + name_part;
		}
	});
	
	return result.substring(0, 99);
}
	
function applyStyleToSelectedCriteria() {
	var size = $("#selectedCriteria tr").size();
	$("#selectedCriteria tr").each(function(i) {
		var id = $(this).attr("id");
		$(this).removeClass("roweven").removeClass("roweven_box");
		
		switch(i) {
			case 0:
				$(this).addClass("roweven_box");
				break;
				
			case size - 1:
				$(this).addClass("roweven");
				break;
			
			default:
				$(this).addClass("roweven");
				break;
		}
		
		$("#selectedCriteria #" + id + " td").each(function(i) {
			var size = $("#selectedCriteria #" + id + " td").size();
			$(this).removeClass("rowodd_last");
			
			switch(i) {
				case size - 1:
					$(this).addClass("rowodd_last");
					break;
			}
		});
	});
}
	
//--------- Collect Text from Comboboxes -------
function collectCheckboxNames(checkbox_list, cat) {
	var dump = '';
	checkbox_list.each(function(i){
		var id = $(this).attr("id").replace('=', '');
		var val = $(cat + " #" + id).text();	
		dump = (i == 0) ? val : val + ', ' + dump;
	});
	return dump;
}

//--------- Collect Value from Comboboxes -------
function collectCheckboxValues(checkbox_list, cat) {
	var dump = '';
	checkbox_list.each(function(i) {
		var val = $(this).attr("value");
		dump += (i == 0) ? val : ',' + val;
	});
	return dump;
}	

function BuildRow(num, val, type, event, param, txt, group, cat) {
	var onclick = "onClick=JavaScript:select_group(" + cat + "," + group + ",'" + type + "');";
	
	var row = "<tr id=row" + num + " value='" + val +
			"' type='" + type + "' event='" + event + "' group='" + group + "' cat='" + cat + "'>" +
			"<td>" + "</td>";
			
	
	
	if(type == "fund") {
		row += "<td " + onclick + ">&nbsp;<a href=#>" + param + ": " + txt + "</a>&nbsp;&nbsp;</td>";
	}
	else {
		row += "<td " + onclick + ">&nbsp;<a href=#>" + txt + "</a>&nbsp;&nbsp;</td>";
	}
			
	row += "<td align='center'> <a href=# id=remove" + num + " title='Remove Criterion'>&nbsp;<img src='/img/ico/delete.png' border='0' width='16' height='16'>&nbsp;</a></td>";
	row += "</tr>";
	
	return row;
}

function select_group(cat, group, type) {
	$("#Category" + cat).click();
	
	if(type == 'tech') {
		$("#criteriaT" + group + "").click();
	}
	else {
		$("#criteriaF" + group + "").click();
	}
}

//-------- Get Criteria method ------------
function HaveCriteria(event_to_find, do_replace, new_row, group_to_find) {
	var has = false;
	
	$("#selectedCriteria tr").each(function(i) {
		var id = $(this).attr("id");
		if(id != 'selectedCriteriaTableHeader') {
			var val = $(this).attr("value");
			var type = $(this).attr("type");
			var evt = $(this).attr("event");
			var group = $(this).attr("group");
			
			var found = false;
			
			//alert(event_to_find);
			if(type == 'fund') {
				found = (event_to_find == evt);
			}
			else {
				found = (group_to_find == group);
			}
			
			if(found) {
				if(do_replace) {
					$(this).replaceWith(new_row);
				}
				
				has = true;
			}
		}
	});
	
	enumSelectedCriteria();
	applyStyleToSelectedCriteria();
	
	return has;
}

//-------- Get Criteria method ------------
function GetCriteria(fund_param_name, tech_param_name) {
	var fund = GetCriteriaFund();
	var tech = GetCriteriaTech();
	
	result = "";
	if(fund != "" || tech != "") {
		if(fund != "") {
			result = "fundamentals=" + fund;
		}
		if(tech != "") {
			result = result + ((fund == '') ? '' : '&') + "technicals=" + tech;
		}
	}
	
	return result;
}

function GetCriteriaFund() {
	var fund = "";
	
	$("#selectedCriteria tr").each(function(i){
		var id = $(this).attr("id");
		if(id != 'selectedCriteriaTableHeader') {
			var val = $(this).attr("value");
			var type = $(this).attr("type");
			
			if(type == "fund") {
				fund = fund + val + ",";
			}
		}
	});
	
	fund = fund.substring(0, fund.length - 1);
	
	return fund;
}

function GetCriteriaTech() {
	var tech = "";
	
	$("#selectedCriteria tr").each(function(i){
		var id = $(this).attr("id");
		if(id != 'selectedCriteriaTableHeader') {
			var val = $(this).attr("value");
			var type = $(this).attr("type");
			
			if(type == "tech") {
				tech = tech + val + ",";
			}
		}
	});
	
	tech = tech.substring(0, tech.length - 1);
	
	return tech;
}

function appendSelectedCriteria(new_row) {
	if($("#selectedCriteria tr").size() == 0) {
		//var header_row = "<tr id='selectedCriteriaTableHeader'><td colspan='10'><b>&nbsp;" + screen_name_title + "&nbsp;Selected Criteria</b></td></tr>";
		var header_row = "<tr id='selectedCriteriaTableHeader'><td colspan='10'><b>&nbsp;Selection Criteria</b></td></tr>";
		$("#criteriaTable tbody").append(header_row);
	}
	
	$("#criteriaTable tbody").append(new_row);
	
	enumSelectedCriteria();
	applyStyleToSelectedCriteria();
	changeButtonsVisivility();
}

function Perform(screen_id) {
	crit = GetCriteria();
	
	if(crit != "") {
		url = stocks_page + "?" + crit;
	}
	
	if(screen_id != '') {
		url += "&screen_id=" + screen_id;
	}
	
	self.location.href = url;
	
	return 0;
}

function Backtest(screen_id) {
	crit = GetCriteria();
	
	if(crit != "") {
		url = backtest_page + "?" + crit;
	}
	
	if(screen_id != '') {
		url += "&screen_id=" + screen_id;
	}
	
	self.location.href = url;
	
	return 0;
}

function doRun(screen_id, fund, tech) {
	result = "";
	
	if(fund != "" || tech != "") {
		if(fund != "") {
			result = "fundamentals=" + fund;
		}
		if(tech != "") {
			result = result + ((fund == '') ? '' : '&') + "technicals=" + tech;
		}
	}
	
	if(result != "") {
		self.location.href = stocks_page + "?" + result;
	}
	
	return 0;
}

function doSave(screen_id) {
	if(screen_id == '') {
		//--- new screen
		var suggest_name = collectSelectedText();
		
		ae_prompt(doSaveNew, 'Please enter name for the screen', suggest_name);
	}
	else {
		//--- existing screen
		doSaveBody(screen_id, '');
	}
}

function doSaveAs() {
	//--- save as
	var suggest_name = collectSelectedText();
	ae_prompt(doSaveNew, 'Please enter name for the screen', suggest_name);
}

//new
function doSaveNew(screen_name_entered) {
	doSaveBody('', screen_name_entered)
}

function doSaveBody(screen_id, screen_name_entered) {
	//mode = 0 - new; mode = 1 - edit
	var criteria = GetCriteria();
	screen_crit = criteria;
				
	if(empty(criteria)) {
		alert('You have not selected any criteria!');
		return;
	}
	
	//--- new screen, save as.. ---
	if(screen_id == '') {
		screen_name = escape(screen_name_entered);
		if(empty(screen_name)) {
			return;
		}
		
		url = "/stock-screener/" + my_screens_page + "?action=create&name=" + screen_name + "&session=" + session + "&" + criteria;
		goTo(url);
	}
	//--- existing screen, save ---
	else {
		if(!confirm("Are you sure you want to save the screen with new selection criteria?")) {
			return;
		}
		
		url = "/stock-screener/" + my_screens_page + "?action=edit&screen_id=" + screen_id + "&session=" + session + "&" + criteria;
		goTo(url);
	}
	/*
	xmlHttp.open("GET", url, true);
	xmlHttp.onreadystatechange = updateSave;
	xmlHttp.send(null);
	*/
}

function doOpen(fund, tech) {
	$("#criteriaInfoDiv input").each(function() {
		$(this).removeAttr("checked");
	});
	
	//--- Animated hide
	$("#selectedCriteria").fadeOut("fast");
	
	$("#criteriaTable #selectedCriteria tr").remove();
	
	if(valid(fund)) {
		fundArr = fund.split(',');
		
		for(i = 0; i < fundArr.length; i++) {
			idArr = fundArr[i].split('=');
			$("#" + idArr[0] + "\\=" + idArr[1]).attr("checked", "checked");
			$("#criteriaF" + idArr[0] + "button_cb").click();
		}
	}
	
	if(valid(tech)) {
		techArr = tech.split(',');
		for(i = 0; i < techArr.length; i++) {
			idArr = techArr[i].split('=');
			
			var event = idArr[0];
			var group = $("input[event=" + event + "]").attr("name");
			
			/*if(event.length >= 3) {			group = event.substring(0, event.length - 2);	}*/

			$("input[event=" + event + "]").attr("checked", "checked");
			$("#criteriaT" + group + "button_sel").click();
		}
	}

	/*
	$("#criteriaInfoDiv .button").each(function() {
		$(this).click();
	});
	*/
	
	
	//--- Animated show
	$("#selectedCriteria").fadeIn("slow");
	
	$("#criteriaTable #selectedCriteria tr:eq(1) td:eq(1)").click();
}

function updateSave() {
	if (xmlHttp.readyState == 4) {
		goTo(my_screens_page);
	}
}

function doRemove(screen_id) {
	//xmlHttp = createHttpRequest();
	
	if(!confirm("Are you sure you want to delete the screen?")) {
		return;
	}

	var url = "/stock-screener/" + my_screens_page + "?action=remove&screen_id=" + screen_id + "&session=TSS" + session + "GO124AZ80";
	goTo(url);
	
	/*
	xmlHttp.open("GET", url, true);
	xmlHttp.onreadystatechange = updateRemove;
	xmlHttp.send(null);
	*/
}

function updateRemove() {
	if (xmlHttp.readyState == 4) {
		goTo(my_screens_page);
	}
}

function MyScreens() {
	goTo(my_screens_page);
}

function DeleteCheckedScreens() {
	if($("#savedScreens :checked").size() == 0) {
		return;
	}
	
	if(confirm("Are you sure you want to delete the selected screens?")) {
		window.document.screens.submit();
	}
}

function doCreate(type_id) {
	if(type_id == 1) {
		goTo(edit_screen_page);
	}
	else {
		goTo(edit_formula_page);
	}
}

function doEdit(screen_id, fund, tech, type_id) {
	if(type_id == 1) {
		goTo(edit_screen_page + "?screen_id=" + screen_id );
	}
	else {
		goTo(edit_formula_page + "?screen_id=" + screen_id );
	}
}

//-------------------------------------------------------------------------------------
// This is variable for storing callback function
var ae_cb = null;
 
// this is a simple function-shortcut
// to avoid using lengthy document.getElementById
function ae$(a) { return document.getElementById(a); }
 
// This is a main ae_prompt function
// it saves function callback 
// and sets up dialog
function ae_prompt(cb, q, a) {
	ae_cb = cb;
	ae$('aep_t').innerHTML = '';
	ae$('aep_prompt').innerHTML = q;
	ae$('aep_text').value = a;
	ae$('aep_ovrl').style.display = ae$('aep_ww').style.display = '';
	ae$('aep_text').focus();
	ae$('aep_text').select();
}
 
// This function is called when user presses OK(m=0) or Cancel(m=1) button
// in the dialog. You should not call this function directly.
function ae_clk(m) {
	// hide dialog layers 
	ae$('aep_ovrl').style.display = ae$('aep_ww').style.display = 'none';
	if (!m)  
		ae_cb(null);  // user pressed cancel, call callback with null
	else
		ae_cb(ae$('aep_text').value); // user pressed OK 
}
//-------------------------------------------------------------------------------------
