var G_ulCellNoLimit = 15000;
var G_ulExcelColumnsLimit = 255;
var G_ulExcelRowsLimit = 16384;
var G_strTableView = "tableView.aspx";
var G_WD_Printable;
var G_IF_ReportType;

function GetDefaultView() {
	CreateHiddenFormField(ObjWdsForm, "WD_GetDefaultView", "True");
	ObjWdsForm.action = G_strTableView;
	executeWait(ObjWdsForm);
}

// i_strItemIdentifier is composed of 2 lists separated by character \036.
// The first list is composed of the column dimension names, separated by character \035.
// The second list is composed of the item codes, one for each dimension, separated by
// character \035.
function onColSortData(i_strItemIdentifier, i_nAscending) {
	CreateHiddenFormField(ObjWdsForm, "WD_Command", "SortData");
	CreateHiddenFormField(ObjWdsForm, "WD_ViewSortType", i_nAscending);
	CreateHiddenFormField(ObjWdsForm, "WD_ViewSortCode", i_strItemIdentifier);
	ObjWdsForm.action = G_strTableView;
	executeWait(ObjWdsForm);
}

function OnPreparePrint(i_object) {
	if (ObjWdsForm.sCS_DownloadLimit.value != "0") {
		G_ulCellNoLimit = ObjWdsForm.sCS_DownloadLimit.value;	
	}
	var ulRowCount = parseInt(ObjWdsForm.sWD_RowsItemsCount.value);
	var ulColCount = parseInt(ObjWdsForm.sWD_ColsItemsCount.value);
	var ulCellCount = ulRowCount * ulColCount;
	if (ulCellCount > G_ulCellNoLimit) {
		alert(ulCellCount.toString() + resCellNoLimitReached + G_ulCellNoLimit.toString() + resCellNoLimitTryAgain);
		return;
	}

	var bIsSpawnWindow = IsSpawnWindow();
	if (bIsSpawnWindow) {
		GetFormFields();
	}

	CreateHiddenFormField(ObjWdsForm, "WD_Printable", "1");
	CreateHiddenFormField(ObjWdsForm, "IF_ReportType", REPORT_TYPE_TABLE);
	ObjWdsForm.action = G_strTableView;
	if (bIsSpawnWindow) {
		GenerateNewWindow("_WdsTable", "/TableViewer/tableView.aspx");
	}
	else {
		onLocalPageUnload = function() { CreateHiddenFormField(ObjWdsForm, "WD_Printable", "0"); }
		executeWait(ObjWdsForm);
	}

	if (bIsSpawnWindow) {
		SetFormFields();
	}
}

function GetFormFields() {
	if (typeof(ObjWdsForm.WD_Printable) != "undefined") {
		G_WD_Printable = ObjWdsForm.WD_Printable.value;
	}
	if (typeof(ObjWdsForm.IF_ReportType) != "undefined") {
		G_IF_ReportType = ObjWdsForm.IF_ReportType.value;
	}	
}

function SetFormFields() {
	if (typeof(ObjWdsForm.WD_Printable) != "undefined") {
		ObjWdsForm.WD_Printable.value = G_WD_Printable;
	}
	if (typeof(ObjWdsForm.IF_ReportType) != "undefined") {
		ObjWdsForm.IF_ReportType.value = G_IF_ReportType;
	}	
}

function OnSelectChildren(i_nDim, i_strMemberPosition) {
	CreateHiddenFormField(ObjWdsForm, "WD_Command", "SelectChildren");
	CreateHiddenFormField(ObjWdsForm, "WD_SelectMembersDim", i_nDim);
	CreateHiddenFormField(ObjWdsForm, "WD_SelectParent", i_strMemberPosition);
	ObjWdsForm.action = G_strTableView;
	executeWait(ObjWdsForm);
}

function onCalcTotalPercent(i_nType) {
	CreateHiddenFormField(ObjWdsForm, "WD_Command", "SetTotalPercent");
	CreateHiddenFormField(ObjWdsForm, "WD_TotalPercent", i_nType);
	ObjWdsForm.action = G_strTableView;
	executeWait(ObjWdsForm);
}

function onPageLoad() {
	var unRowCount;
	var unColCount;

	onPageLoadGlobal();
	if (ObjWdsForm.CS_InHelp != null && ObjWdsForm.CS_InHelp.value == "True") {
		onLayoutResize(true);
		return;
	}
	
	var clJsdnd = new GJsdnd();
	clJsdnd.Initialize(this, false);

	unRowCount = parseInt(ObjWdsForm.sWD_RowsItemsCount.value);
	unColCount = parseInt(ObjWdsForm.sWD_ColsItemsCount.value);
	newTable(unRowCount, unColCount);

	if (ObjWdsForm.sWD_SourceInfo != null) {
		window.status = unescape(ObjWdsForm.sWD_SourceInfo.value);
	}
	onLayoutResize(true);
	
	if(ObjWdsForm.WD_RepairFlag != null) {
		RemoveFormField(ObjWdsForm, "WD_RepairFlag");//so we don't warn again
		alert(resReportFlaggedDuringRepairIVT);
	}
	
	var objTitleHF = document.getElementById("CS_ReportTitle");
	if(objTitleHF != null && objTitleHF.value != "")
		document.title = resTableViewTitle + " - " + RemoveFirstWord(objTitleHF.value);
}

function CheckExcelLimits() {
	var astrColsDims;
	var astrOthersDims;
	var astrRowDims;
	var bIsLimitsChecked = true;
	var ulColDimsCount = 0;
	var ulColItemsCount = 0;
	var ulOtherDim = 0;
	var ulRowDimsCount = 0;
	var ulRowItemsCount = 0;

	if (ObjWdsForm.sWD_Others.value != "") {
		astrOthersDims = ObjWdsForm.sWD_Others.value.split(",");
		// Other dims are placed on one line.
		if (astrOthersDims.length > 0) {
			ulOtherDim = 1;
		}
	}
	if (ObjWdsForm.sWD_Rows.value != "") {
		astrRowDims = ObjWdsForm.sWD_Rows.value.split(",");
		ulRowDimsCount = astrRowDims.length;
	}
	if (ObjWdsForm.sWD_Cols.value != "") {
		astrColDims = ObjWdsForm.sWD_Cols.value.split(",");
		ulColDimsCount = astrColDims.length;
	}
	ulRowItemsCount = parseInt(ObjWdsForm.sWD_RowsItemsCount.value);
	ulColItemsCount = parseInt(ObjWdsForm.sWD_ColsItemsCount.value);
	
	if ((ulColItemsCount + ulRowDimsCount) > G_ulExcelColumnsLimit) {
		alert(resExcelColumnsLimit);
		bIsLimitsChecked = false;
	}
	// + 3: the report title is placed on one row + followed by a blank row + row dims are placed on one line.
	if ((ulColDimsCount + ulOtherDim + ulRowItemsCount + 3) > G_ulExcelRowsLimit) {
		alert(resExcelRowsLimit);
		bIsLimitsChecked = false;
	}
	
	return bIsLimitsChecked;
}

function onDownload(i_nType) {
	HideMenu("MenuCell_Download");

	var strTypes = new Array('IVT', 'XLS', 'CSV', 'SSV', 'PDF');
	var strType;
	var ulCellCount;
	var ulRowItemsCount;
	var ulColItemsCount;
	var ulSelectedItemCount;

	strType = strTypes[i_nType];
	if (typeof(ObjWdsForm.sWD_TotalPercent) != "undefined") {
		if (ObjWdsForm.sWD_TotalPercent.value != 0) {
			if (!confirm(resPromptTotalPercent)) {
				return;
			}
		}
	}
	if (typeof(ObjWdsForm.sCS_DownloadLimit) != "undefined") {
		G_ulCellNoLimit = ObjWdsForm.sCS_DownloadLimit.value;	
	}
	
	if (strType == "IVT") {
		ulCellCount = 1;
		var astrSelectedItemsCount = ObjWdsForm.sWD_SelectedItemsCount.value.split(",");
		for (var i = 0; i < ObjWdsForm.sWD_MaxDim.value; i++) {
			ulSelectedItemCount = astrSelectedItemsCount[i];
			ulCellCount *= ulSelectedItemCount;
		}
	}
	else {
		ulRowItemsCount = parseInt(ObjWdsForm.sWD_RowsItemsCount.value);
		ulColItemsCount = parseInt(ObjWdsForm.sWD_ColsItemsCount.value);
		ulCellCount = ulRowItemsCount * ulColItemsCount;
	}
	
	if (ulCellCount > G_ulCellNoLimit) {
		alert(ulCellCount.toString() + resCellNoLimitReached + G_ulCellNoLimit.toString() + resCellNoLimitTryAgain);
	}
	else {
		// Currently we limit the number of cells to 15000, if we choose to increase this number,
		// we have to consider the limit on maximum number of rows in Excel 95 which is 16384.
		var bIsLimitsChecked = true;
		if (strType == "XLS") {
			bIsLimitsChecked = CheckExcelLimits();
		}
		if (bIsLimitsChecked) {
			var strPreviousPage = ObjWdsForm.action;
			var suffix = "";
			if (!PWdsapp_bIsIE) {
				if (PWdsapp_eBrowser == GJSSYS_BROWSER_N70) {
					suffix += "/";
				}
				suffix += "?x=";
			}
			CreateHiddenFormField(ObjWdsForm, "WD_Command", "Download");
			CreateHiddenFormField(ObjWdsForm, "WD_DownloadFormat", strType);
			ObjWdsForm.action = "download.aspx" + suffix;
			ObjWdsForm.submit();
			ObjWdsForm.action = strPreviousPage;
		}
	}
}

// The /?x= in the action line above is required to make Netscape dowload the files properly.
// Netscape 7.1 requires the ?x=, while Netscape 7.0 also requires the slash.
// Without that, Netscape will try to add a .asp extension to whatever filename is suggested,
// resulting in things like download.xls.asp, which doesn't work at all.
// This solution was found on BugZilla: http://bugzilla.mozilla.org/show_bug.cgi?id=65827#c81

function OnPreviousItem(i_nDim) {
	CreateHiddenFormField(ObjWdsForm, "WD_Command", "PreviousMember");
	CreateHiddenFormField(ObjWdsForm, "WD_PreviousItemForDim", i_nDim);
	ObjWdsForm.action = G_strTableView;
	executeWait(ObjWdsForm);
}

function OnNextItem(i_nDim) {	
	CreateHiddenFormField(ObjWdsForm, "WD_Command", "NextMember");
	CreateHiddenFormField(ObjWdsForm, "WD_NextItemForDim", i_nDim);
	ObjWdsForm.action = G_strTableView;
	executeWait(ObjWdsForm);
}

