var cMAXseriesCount = 10;
var cMINseriesCount = 1;
var cMAXseriesDataCount = 20;
var cMINseriesDataCount = 1;
var previewWindow = null;
var dbWindow = null;

var preloadFlag = false;
var oPopup = window.createPopup();

function newImage(arg) {
	if (document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}
function changeImage() {
	if (document.images && (preloadFlag == true)) {
		for (var i=0; i<changeImage.arguments.length; i+=2) {
			document[changeImage.arguments[i]].src = changeImage.arguments[i+1];
		}
	}
}
function preloadImages() {
	if (document.images) {
		img_minus = newImage("images/minus.gif");
		img_plus = newImage("images/plus.gif");
		img_check_0 = newImage("images/check_0.gif");
		img_check_1 = newImage("images/check_1.gif");
		preloadFlag = true;
	}
}
function showHint(el) {
	var popupBody = oPopup.document.body;
	oPopup.document.body.innerHTML = "<table cellpadding='4' cellspacing='0' border='0' width='200' style='border: 1px solid black'><tr><td style='background-color: #FEFDEE; font-family: tahoma, arial, helvetica; font-size: 11px;'><b>" + el.hintName + "</b><br/>" + el.hintText+"</td></tr></table>";
	oPopup.show(0, 0, 0, 0);
	var realHeight = popupBody.scrollHeight, realWidth = popupBody.scrollWidth;
	oPopup.hide();
	if (realWidth < event.srcElement.clientWidth) {
		realWidth = event.srcElement.clientWidth;
		oPopup.document.body.children[0].style.width = realWidth;
	}
	oPopup.show(20, 10, realWidth, realHeight, event.srcElement);
}

function keyboardTouched() {
	if (window.event.keyCode == 71 && window.event.ctrlKey) {
		generateChart();
	}
}

function generateChart() {
	doSubmitForm();
}

function IconChanger(){
	event.srcElement.src=event.srcElement.src.substr(0,event.srcElement.src.lastIndexOf("_"))+(event.type=='mouseover'?"_active.gif":"_inactive.gif");
}
function collapseSection(oImage, DivId) {
	var oDiv = document.all(DivId);
	oDiv.style.display = oDiv.style.display == "none" ? "block" : "none";
	oImage.title = oDiv.style.display == "none" ? "Expand" : "Collapse";
	oImage.src = oDiv.style.display == "none" ? oImage.expand_gif : oImage.collapse_gif;
}
function collapseSubsection(oImage) {
	var oTd = oImage.parentElement.parentElement.nextSibling;
	oTd.style.display = oTd.style.display == "none" ? "block" : "none";
	if (oTd.id == "description")
		oTd.nextSibling.style.display = oTd.style.display == "block" ? "block" : "none";
	oImage.title = oTd.style.display == "none" ? "Expand" : "Collapse";
	oImage.src = oTd.style.display == "none" ? oImage.expand_gif : oImage.collapse_gif;
}

function closePopup() {
	return;
}

function doSubmitForm() {
	if (previewWindow == null || !previewWindow || previewWindow.closed) {
		previewWindow = window.open('', 'preview', 'toolbar=no,resizable,scrollbars=yes,width=' + (parseInt(document.forms["main"].z_Width.value) + 30) + ',height=' + (parseInt(document.forms["main"].z_Height.value) + 50));
	}
	document.forms["main"].frm_action.value="";
	document.forms["main"].target = "preview";
	document.forms["main"].action = "WizardPreview.aspx";
	document.forms["main"].submit();
	previewWindow.focus();
}

function doSpecialFunction(spAction) {
	document.forms["main"].frm_action.value = spAction;
	document.forms["main"].target = "_self";
	document.forms["main"].action = "default.aspx";
	document.forms["main"].submit();
}

function doShowColorPicker(callee) {
	var inArgs = new Array();
	inArgs["colorValue"] = callee.style.backgroundColor;
	inArgs["colorAlpha"] = callee.nextSibling.value.substring(1,3);
	var outArgs = showModalDialog("colorpicker/colorpicker.html", inArgs,
		"dialogWidth: 180px; dialogHeight: 240px;" +
		"status: no; resizable: no; scroll: no;");
	if (outArgs) {
		callee.style.backgroundColor = "#" + outArgs["colorValue"];
		callee.nextSibling.value = "#" + outArgs["colorAlpha"] + outArgs["colorValue"];
	}
}

function doShowDataBrowser(callee) {
	var inArgs = new Array();
	var z_sNames = "";
	for (i=1; i<parseInt(document.forms["main"].seriesCount.value) + 1; i++) {
		z_sNames += getCurrentSerieRow(0, i).firstChild.value + ",";
	}
	inArgs["seriesNames"] = trimList(z_sNames, ",");
	var ci = callee.parentElement.cellIndex;
	inArgs["dateGrouping"] = callee.parentElement.parentElement.previousSibling.childNodes[ci].firstChild.value;
	var path = "DataBrowser.aspx?z_connection_string=" + ((typeof(callee.nextSibling.nextSibling.value) != 'undefined' && callee.nextSibling.nextSibling.value != '') ? callee.nextSibling.nextSibling.value : document.all["z_ConnectionString"].value);
	var outArgs = showModalDialog(path, inArgs,
		"dialogWidth: 650px; dialogHeight: 500px;" +
		"status: yes; resizable: yes; scroll: yes;");
	if (outArgs) {
		var zSerieType = outArgs["zSerieType"];
		callee.previousSibling.value = zSerieType;
		if (outArgs["zConnectionString"]) {
			callee.nextSibling.nextSibling.value = outArgs["zConnectionString"];
		}
		switch (zSerieType) {
			case 1 :
				callee.value = outArgs["zData"];
				break;
			case 2:
				callee.value = outArgs["zCalculateType"] + ((outArgs["zData"] == "") ? "" : ";" + outArgs["zData"]);
				break;
			case 3:
				var zsDate = callee.parentElement.parentElement.nextSibling.nextSibling.childNodes[ci].childNodes[2].value;
				var zeDate = callee.parentElement.parentElement.nextSibling.nextSibling.nextSibling.childNodes[ci].childNodes[2].value;
				callee.value = generateSQLStatement(outArgs["zData"], outArgs["zDataTables"], zsDate, zeDate, inArgs["dateGrouping"], outArgs["zDataJoins"], outArgs["zDataOrder"]);
				break;
		}
	}
}

function doShowAddElement(callee) {
	var inArgs = new Array();
	var path = "AddElement.aspx";
	var outArgs = showModalDialog(path, inArgs,
		"dialogWidth: 650px; dialogHeight: 500px;" +
		"status: no; resizable: no; scroll: yes;");
	if (outArgs) {
		callee.value = outArgs["zData"];
	}
}

function trimList(toTrim, toStrip) {
	return toTrim.substr(0, toTrim.length - toStrip.length);
}

function isInJoins(zJoins, el) {
	var result = 0;
	var zJoin = null;
	for (var j=0; j<zJoins.length; j++) {
		if (typeof(zJoins[j]) != 'undefined') {
			zJoin = zJoins[j].split(';');
			if (zJoin[0] == el) {
				result = 1;
			}
		}
	}
	return result;
}

function generateSQLStatement(zData, zDataTables, zsDate, zeDate, dateGrouping, zDataJoins, zDataOrder) {
	var _fields = "";
	var _dbs = "";
	var _restricts = "";
	var _joins = "";
	var _groups = "";
	var _order = "";
	var tmp = "";
	var rtmp = "";
	var wasAggregate = false;
	var wasDataGrouping = false;
	
	for (i=0;i<zData.length;i++) {
		if (zData[i] != null) {
			zDataItem = zData[i];
			tmp = "";
			tmp = zDataItem["column"];
			
			if (i == 2) {
				if (zsDate != '') {
					_restricts += tmp + " >= #StartDate# AND ";
				}
				if (zeDate != '') {
					_restricts += tmp + " <= #EndDate# AND ";
				}
			}
			if (zDataItem["aggregate"]) {
				wasAggregate = true;
				if (zDataItem["aggregate"] != 'constant') {
					tmp = zDataItem["aggregate"] + " (" + tmp + ")";
				} else {
					tmp = tmp + " AS ConstantField";
				}
			} else {
				_groups += tmp + ", ";
			}
			_fields += tmp + ", ";
			
			rtmp = "";
			if (zDataItem["restriction"]) {
				rtmp = zDataItem["column"] += " " + zDataItem["restriction"] + " '" + zDataItem["restriction_value"] + "'";
				if (zDataItem["restriction_not"]) {
					rtmp = "NOT (" + rtmp + ")";
				}
				_restricts += rtmp + " AND ";
			}
		}
	}
	for (i=0; i<zDataTables.length; i++) {
		if (typeof(zDataTables[i]) != 'undefined') {
			if(isInJoins(zDataJoins,zDataTables[i]) == 0) {
				_dbs += zDataTables[i] + ", ";
			}
		}
	}
	for (i=0; i<zDataJoins.length; i++) {
		if (typeof(zDataJoins[i]) != 'undefined') {
			var zJoin = zDataJoins[i].split(';');
			_joins += " INNER JOIN " + zJoin[0] + " ON " +
				zJoin[1] + "=" + zJoin[2];
		}
	}
	if (_fields.length > 0) {
		_fields = "SELECT " + trimList(_fields, ", ");
		if (_dbs.length > 0) {
			_fields += " FROM ";
		}
		if (_restricts.length > 0) {
			_restricts = " WHERE " + trimList(_restricts, " AND ");
		}
	}
	if (zDataOrder && zDataOrder != '--') {
		_order = " ORDER BY " + zDataOrder;
	}
	if (wasAggregate) {
		if (_groups != '') {
			_groups = " GROUP BY " + trimList(_groups, ", ");
		}
	} else {
		_groups = "";
	}
	return _fields + trimList(_dbs, ", ") + _joins + _restricts + _groups + _order + ";";
}

function doSwitchBGOption(bgObject) {
	if (bgObject.value == 2) {
		bgObject.parentElement.childNodes[1].style.display = 'none';
		bgObject.parentElement.childNodes[2].style.display = 'inline';
		bgObject.parentElement.childNodes[4].style.display = 'inline';
		bgObject.parentElement.childNodes[6].style.display = 'inline';
		bgObject.parentElement.childNodes[7].style.display = 'inline';
		bgObject.parentElement.childNodes[8].style.display = 'none';
		bgObject.parentElement.childNodes[9].style.display = 'none';
	} else if (bgObject.value == 1) {
		bgObject.parentElement.childNodes[1].style.display = 'inline';
		bgObject.parentElement.childNodes[2].style.display = 'none';
		bgObject.parentElement.childNodes[4].style.display = 'none';
		bgObject.parentElement.childNodes[6].style.display = 'none';
		bgObject.parentElement.childNodes[7].style.display = 'none';
		bgObject.parentElement.childNodes[8].style.display = 'inline';
		bgObject.parentElement.childNodes[9].style.display = 'inline';
	} else {
		bgObject.parentElement.childNodes[1].style.display = 'none';
		bgObject.parentElement.childNodes[2].style.display = 'inline';
		bgObject.parentElement.childNodes[4].style.display = 'none';
		bgObject.parentElement.childNodes[6].style.display = 'none';
		bgObject.parentElement.childNodes[7].style.display = 'none';
		bgObject.parentElement.childNodes[8].style.display = 'none';
		bgObject.parentElement.childNodes[9].style.display = 'none';
	}
	return;
}

function getCurrentSerieRow(i, seriesNum) {
	return document.all['seriesContainer'].firstChild.firstChild.childNodes[i].childNodes[seriesNum];
}

function doUpdateRuntimeProperty(property, func) {
	var newCount = property.value;
	if (property.name == 'z_SeriesCount' && typeof(property)!='undefined' && !isNaN(parseInt(newCount))) {
		if (func == 'add') {
			property.value = parseInt(newCount) +  1;
			doUpdateRuntimeProperty(property, null);
		} else if (func == 'remove') {
			property.value = parseInt(newCount) - 1;
			doUpdateRuntimeProperty(property, null);
		} else {
			seriesCount = parseInt(document.forms["main"].seriesCount.value);
			while (seriesCount != newCount) {
				if (seriesCount < newCount) {
					for (i=0;i<15;i++) {
						var currentSerie = getCurrentSerieRow(i, seriesCount);
						var tmpSerieElement = currentSerie.cloneNode(true);
						tmpSerieElement = currentSerie.insertAdjacentElement('afterEnd', tmpSerieElement);
					}
					seriesCount++;
				} else {
					for (i=0;i<15;i++) {
						var currentSerie = getCurrentSerieRow(i, seriesCount);
						currentSerie.removeNode(true);
					}
					seriesCount--;
				}
				getCurrentSerieRow(0, seriesCount).childNodes[1].value = seriesCount;
				if (document.forms["main"].seriesCount.value < seriesCount) {
					getCurrentSerieRow(0, seriesCount).firstChild.value = "Series " + seriesCount;
				}
			} 
			document.forms["main"].seriesCount.value = seriesCount;
			property.nextSibling.nextSibling.disabled = false;
			property.nextSibling.disabled = false;
			if (seriesCount == cMAXseriesCount) {
				property.nextSibling.disabled = true;
			} else if (seriesCount == cMINseriesCount) {
				property.nextSibling.nextSibling.disabled = true;
			}
		}
	} else if (property.name == 'z_s_SeriesData') {
		doShowDataBrowser(property);
	} else if (property.name == 'z_s_SeriesAddElement') {
		doShowAddElement(property);
	} else {
		alert("No update handler specified.");
	}
}

