var CONST_CURRENTGFID;
var CONST_MODULE_ID;
var idbmsDelay = 800; //miliseconds
var iCurrentGFID = 0;
var rpwReusable;
var GetRichPanel = null;


//this updates the grouping name
function UpdateName(sPrmGroupingsFormId, sPrmLabel) 
{
	//alert('update ' + sPrmGroupingsFormId + ' to ' + sPrmLabel);
	
	//replace gfid token
	sPrmGroupingsFormId = sPrmGroupingsFormId.replace('gfid_', '');
	//show loading
	ShowHideToolbarLoading(true, sPrmGroupingsFormId, true);
	
	//create dummy object to pass to ajax runner
	var objDummy = {};
	objDummy.ID = sPrmGroupingsFormId;

	var ar = new AjaxRunner();
	ar.Url = "/idbms/ui/ajax/vg_handler.aspx";
	ar.Querystring = GroupQueryString + "&gfid=" + sPrmGroupingsFormId; // GroupQueryString is defined by vg2
	ar.AddFormValue("cmd", "updategroupingname");
	ar.AddFormValue("label", sPrmLabel);
	ar.OnSuccess = UpdateNameSuccess;
	ar.Execute(null, objDummy);
} // UpdateName


//this is after the grouping name is successfully updated
function UpdateNameSuccess(sPrmResponse, oEventArgs)
{
	if (sPrmResponse.trim().toLowerCase() != "true")
	{
		alert("Error saving changes (" + sPrmResponse + ")!");
		ShowHideToolbarLoading(false, oEventArgs.ID); //hide both loading and success
	}
	else
	{
		ShowHideToolbarLoading(true, oEventArgs.ID, false); //hide loading show success
		setTimeout(function () { ShowHideToolbarLoading(false, oEventArgs.ID); }, idbmsDelay); //delay hide success
	}
} //UpdateNameSuccess


function MenuItemOn(prmMenuItem)
{
	if (prmMenuItem.className == 'idbmsMenuItem') prmMenuItem.className = 'idbmsMenuItemHover';
}


function MenuItemOff(prmMenuItem)
{
	if (prmMenuItem.className == 'idbmsMenuItemHover') prmMenuItem.className = 'idbmsMenuItem';
}


function ShowHideElement(bShow, sPrmId)
{
	var element = document.getElementById(sPrmId);
	if (element && element.style)
	{
		if (bShow)
			element.style.display = '';
		else
			element.style.display = 'none';
	}
} //ShowHideElement


function RemoveGrouping(gfid, miid)
{
	if (confirm('Are you sure?'))
	{
		//ajax
		var ar = new AjaxRunner();
		ar.Url = '/idbms/ui/ajax/rg_handler.aspx';
		ar.Querystring = GroupQueryString + '&cid=' + FormId + '&action=remove&gfid=' + gfid + "&miid=" + miid;
		//show loading
		ShowHideToolbarLoading(true, gfid, true);
		ar.OnSuccess = RemoveGroupingSuccess;
		//create dummy object to pass to execute()
		var oDummy = {};
		oDummy.ID = gfid;
		ar.Execute(null, oDummy);
	}
} //RemoveGrouping

function RemoveStep()
{
	if (confirm('Are you sure?'))
	{
		//ajax
		var ar = new AjaxRunner();
		ar.Url = '/idbms/ui/ajax/rg_handler.aspx';
		ar.Querystring = GroupQueryString + '&cid=' + FormId + '&action=stepremove&gfid=' + CONST_CURRENTGFID + "&miid=" + CONST_MODULE_ID;
		//show loading
		ShowHideToolbarLoading(true, CONST_CURRENTGFID, true);
		//ar.OnSuccess = RemoveGroupingSuccess;
		//create dummy object to pass to execute()
		var oDummy = {};
		oDummy.ID = CONST_CURRENTGFID;
		
		ar.Execute(null, oDummy);
		
		if(window.location.href.indexOf("&fid") == -1)
		{
		//window.location.href = GetCurrentUrlWithoutGFID() + '&fid=' + FormId;
			setTimeout(function() { window.location.href = GetCurrentUrlWithoutGFID() + '&fid=' + FormId; } , 500);
		}
		else
		{	
		//window.location.href = GetCurrentUrlWithoutGFID();
		
			setTimeout(function() { window.location.href = GetCurrentUrlWithoutGFID(); } , 500);
			}
	}
} //RemoveGrouping


function RemoveGroupingSuccess(response, oPrmEventArgs)
{
	var gfid = oPrmEventArgs.ID;
	if (response == 'False')
	{
		//show error
		alert('error'); //todo fix
	}
	else if (response == 'True')
	{
		//show success
		ShowHideToolbarLoading(true, gfid, false);
		//delay
		var url = GetCurrentUrlWithoutGFID() + '&gfid=' + CONST_CURRENTGFID;		
		setTimeout(function () { ShowHideToolbarLoading(false, gfid); window.location = url; }, idbmsDelay);
	}
} //RemoveGroupingSuccess


function ShowHideToolbarLoading(bShow, gfid, bLoading)
{
	var loading = document.getElementById('imgGroupingToolbarLoading_' + gfid);
	var success = document.getElementById('imgGroupingToolbarSuccess_' + gfid);
	if (loading && success)
	{
		if (!bShow)
		{
			//hide both
			loading.style.display = 'none';
			success.style.display = 'none';
		}
		else if (bLoading)
		{
			//show loading, hide success
			loading.style.display = '';
			success.style.display = 'none';
		}
		else
		{
			//show success, hide loading
			loading.style.display = 'none';
			success.style.display = '';
		}
	} //null check
} //ShowHideToolbarLoading


function GetCurrentUrlWithoutGFID()
{
	var currentURL = window.location.href;
	// if the current url has a gfid on it already, remove it
	var markerStart = currentURL.indexOf("&gfid=");
	// if the current url has gfid at the beginning, it will be "?gfid=" -- so accomodate for that here
	if (markerStart == -1) { markerStart = currentURL.indexOf("gfid="); }
	if (markerStart > -1)
	{
		var markerEnd = currentURL.indexOf("&", markerStart+1);
		if (markerEnd > -1)
		{
			currentURL = currentURL.slice(0, markerStart) + currentURL.slice(markerEnd);
		}
		else
		{
			currentURL = currentURL.slice(0, markerStart);
		}
	}
	//if (_DebugMode) alert("currentURL=" + currentURL);
	return currentURL;
} // GetCurrentUrlWithoutGFID


function GetCurrentUrlWithoutTTID(prmUrl)
{
	var currentURL = window.location.href;
	//if a url is passed in, use that
	if (prmUrl) { currentURL = prmUrl; }
	// if the current url has a fid on it already, remove it
	var markerStart = currentURL.indexOf("&ttid=");
	// if the current url has ttid at the beginning, it will be "?ttid=" -- so accomodate for that here
	if (markerStart == -1) { markerStart = currentURL.indexOf("ttid="); }
	if (markerStart > -1)
	{
		var markerEnd = currentURL.indexOf("&", markerStart+1);
		if (markerEnd > -1)
		{
			currentURL = currentURL.slice(0, markerStart) + currentURL.slice(markerEnd);
		}
		else
		{
			currentURL = currentURL.slice(0, markerStart);
		}
	}
	//if (_DebugMode) alert("currentURL=" + currentURL);
	return currentURL;
} // GetCurrentUrlWithoutTTID


function GetCurrentUrlWithoutFID(prmUrl)
{
	var currentURL = window.location.href;
	//if a url is passed in, use that
	if (prmUrl) { currentURL = prmUrl; }
	// if the current url has a fid on it already, remove it
	var markerStart = currentURL.indexOf("&fid=");
	// if the current url has fid at the beginning, it will be "?fid=" -- so accomodate for that here
	if (markerStart == -1) { markerStart = currentURL.indexOf("fid="); }
	if (markerStart > -1)
	{
		var markerEnd = currentURL.indexOf("&", markerStart+1);
		if (markerEnd > -1)
		{
			currentURL = currentURL.slice(0, markerStart) + currentURL.slice(markerEnd);
		}
		else
		{
			currentURL = currentURL.slice(0, markerStart);
		}
	}
	//if (_DebugMode) alert("currentURL=" + currentURL);
	return currentURL;
} // GetCurrentUrlWithoutFID


function ShowHideGroupingSettings(bShow, gfid)
{
	var div = document.getElementById('divGroupingSettings_' + gfid);
	var error = document.getElementById('divGroupingError_' + gfid);
	if (div && error)
	{
		if (bShow) { div.style.display = ''; error.style.display = 'none'; } //hide error
		else { div.style.display = 'none'; }
	}
} //ShowHideGroupingSettings


function ShowHideGroupingError(bShow, gfid, text, oPanel)
{
	var error = document.getElementById('divGroupingError_' + gfid);
	if (error && oPanel)
	{
		if (bShow) { error.style.display = ''; error.innerHTML = text; oPanel.ToggleDropPanel(true); } //need to force show drop panel
		else { error.style.display = 'none'; error.innerHTML = ''; oPanel.ToggleDropPanel(false, true); } //need to force hide drop panel
	}
} //ShowHideGroupingError


function GroupingBeforeDock(prmDrag, prmDock, prmOver)
{
	var gfidover = -1;
	//var oldSort = prmDrag.GetOrderId(); //current sort (before dock)
	var gfid = prmDrag.GetAttribute('GFID');
	if (gfid > 0)
	{
		//get order id
		if (prmOver != null)
		{
			gfidover = prmOver.GetAttribute('GFID');
		}
		//don't sort if they are trying to put it in the same place
		if (gfid != gfidover)
		{
			//show loading
			ShowHideToolbarLoading(true, gfid, true);
			//ajax
			var ar = new AjaxRunner();
			ar.Url = '/idbms/ui/ajax/vg_handler.aspx';
			//alert('sortgrouping');
			ar.Querystring = GroupQueryString + '&cmd=sortgrouping&gfid=' + gfid + '&gfidover=' + gfidover;
			ar.OnSuccess = GroupingSortFinish;
			//create dummy object to pass to execute()
			var EventArgs = {"ID":gfid}; 
			ar.Execute(null, EventArgs);
		} // sort is different
	} //gfid check
} //GroupingBeforeDock


function GroupingSortFinish(response, EventArgs)
{
	var gfid = EventArgs.ID;
	if (response == 'true')
	{
		//hide loading, show success
		ShowHideToolbarLoading(true, gfid, false);
		//delay hide success
		setTimeout(function () { ShowHideToolbarLoading(false, gfid); window.location = window.location; }, idbmsDelay);
	}
	else
	{
		alert(response); //todo?
	}
} //GroupingSortFinish

/*
//This code is used to provide a reference to the radwindow "wrapper"
function GetRadWindow()
{
	var oWindow = null;
	if (window.radWindow) oWindow = window.radWindow; //Will work in Moz in all cases, including clasic dialog
	else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;//IE (and Moz az well)
	return oWindow;
}
*/

function CloseOnReload()
{
	//dj 2008-0917: added window.opener check
	//dj 2008-1002: fixed permission denied error

	if (window.opener) {
		self.close();
	}
	/*
	if (window.opener) {
		if (window.opener.CloseChild)
			window.opener.CloseChild();
		else
			self.close();
	}
	*/
	else {
		if (!GetRichPanel)
		{
			//not ready, delay
			setTimeout(CloseOnReload,1);
		}
		else
		{
			//GetRadWindow().Close();
			GetRichPanel().Close();
		}
	}
} //CloseOnReload


function RefreshParentPage(prmGFID)
{
	if (prmGFID)
	{
		//GetRadWindow().BrowserWindow.location = GetRadWindow().BrowserWindow.GetCurrentUrlWithoutGFID() + '&gfid=' + prmGFID;
		window.parent.location = window.parent.GetCurrentUrlWithoutGFID() + '&gfid=' + prmGFID;
	}
	else
	{
		//GetRadWindow().BrowserWindow.location.reload();
		window.parent.location = window.parent.location; //.reload(); 07/23/2007 - JM - reload() was causing postback msg to show up.
	}
} //RefreshParentPage


function CloseAndRefreshParent(sPrmValue, sPrmExtraQs) {   
	//dj 2008-0917:  Added window.opener check
    if (window.opener) {
        if (!window.opener.CloseChild || (window.opener.CloseChild && !window.opener.CloseChild())) {            
            window.opener.location = window.opener.location;
            self.close();
        }
	}
	else {
		if (!GetRichPanel)
		{
			//not ready, delay
			setTimeout(function () { CloseAndRefreshParent(sPrmValue, sPrmExtraQs); }, 1);
		}
		else
		{
			if (sPrmExtraQs) { GetRichPanel().ExtraQS = sPrmExtraQs; } //so we can pass something else on the qs
			GetRichPanel().RefreshGFID = sPrmValue;
			GetRichPanel().Argument = -2;
			GetRichPanel().Close();
		}
	}
} // CloseAndRefreshParent


function CloseAndRedirectToForm(sPrmFormId)
{
	//dj 2008-0917:  Added window.opener check
	if (window.opener) {
		if (window.opener.CloseChild)
			window.opener.CloseChild();
		else {
			window.opener.location = window.opener.location;
			self.close();
		}
	}
	else {
		if (!GetRichPanel)
		{
			//not ready, delay
			setTimeout(function () { CloseAndRedirectToForm(sPrmFormId); }, 1);
		}
		else
		{
			GetRichPanel().RefreshFID = sPrmFormId;
			GetRichPanel().Argument = -3;
			GetRichPanel().Close();
		}
	}
} //CloseAndRedirectToForm


function SetRedirectFormId(sPrmFormId, sPrmUrl) //if the window is closed early in a wizard flow, it will redirect them to this form id
{
	if (!GetRichPanel)
	{
		//not ready, delay
		setTimeout(function () { SetRedirectFormId(sPrmFormId, sPrmUrl); }, 1);
	}
	else
	{
		GetRichPanel().RefreshFID = sPrmFormId;
		GetRichPanel().Argument = -3;
		//now redirect
		if (sPrmUrl && sPrmUrl != '') { window.location = sPrmUrl; }
	}
} //SetRedirectFormId


function CloseWithSuccess(sPrmValue)
{
	if (!GetRichPanel)
	{
		//not ready, delay
		setTimeout(function () { CloseWithSuccess(sPrmValue); }, 1);
	}
	else
	{
		GetRichPanel().Argument = sPrmValue;
		GetRichPanel().Close();
	}
	//var oWindow = GetRadWindow();
	//alert("closing with value: " + sPrmValue);
	//Variant1: Passing the argument to the Close method will result in the same behavior
	//oWindow.Argument = sPrmValue;
	//oWindow.Close();
	//Variant2: Invoke the calback function, pass it the result as an argument
	//oWindow.CallBack(oNewText);
	//Variant3: Possible to set the Argument property of RadWindow here, and read it in the OnClientClose event handler!
	//oWindow.Argument = oNewText;
} //CloseWithSuccess


function CloseAndRedirectToUrl(sPrmUrl)
{
	if (!GetRichPanel)
	{
		//not ready, delay
		setTimeout(function () { CloseAndRedirectToUrl(sPrmUrl); }, 1);
	}
	else
	{
		GetRichPanel().Argument = -4;
		GetRichPanel().RedirectURL = sPrmUrl;
		GetRichPanel().Close();
	}
} //CloseAndRedirectToUrl

// JDB 6/25/2008 # 4045 - adding control field id to function call in order to update the correct data
function CeebCloseAndRefresh(sControlFieldId, sSchoolName, sCity, sState, sSchoolId, sEditUrl, isHighSchool)
{
	if (window.opener != null)
	{
		var pnlShow;
		var lblSchool;
		var lblState;
		var lblCity;
		var lblSchoolId;
		var hidden;
		var SchoolLink;

		if (isHighSchool == 'True')
		{
			// begin - JDB 6/25/2008 # 4045 - updated variable names to be grouping instance specific
			pnlShow = window.opener.imod$(eval('window.opener.hs_panel' + sControlFieldId));
			lblSchool = window.opener.imod$(eval('window.opener.hs_schoolName' + sControlFieldId));
			lblState = window.opener.imod$(eval('window.opener.hs_State' + sControlFieldId));
			lblCity = window.opener.imod$(eval('window.opener.hs_City' + sControlFieldId));
			lblSchoolId = window.opener.imod$(eval('window.opener.hs_schoolId' + sControlFieldId));
			hidden = window.opener.imod$(eval('window.opener.hs_hiddenSchoolId' + sControlFieldId));
			SchoolLink = window.opener.imod$(eval('window.opener.hs_ShowSchoolLink' + sControlFieldId));
			// end - JDB 6/25/2008 # 4045
		}
		else
		{
			// begin - JDB 6/25/2008 # 4045 - updated variable names to be grouping instance specific
			pnlShow = window.opener.imod$(eval('window.opener.cl_panel' + sControlFieldId));
			lblSchool = window.opener.imod$(eval('window.opener.cl_schoolName' + sControlFieldId));
			lblState = window.opener.imod$(eval('window.opener.cl_State' + sControlFieldId));
			lblCity = window.opener.imod$(eval('window.opener.cl_City' + sControlFieldId));
			lblSchoolId = window.opener.imod$(eval('window.opener.cl_schoolId' + sControlFieldId));
			hidden = window.opener.imod$(eval('window.opener.cl_hiddenSchoolId' + sControlFieldId));
			SchoolLink = window.opener.imod$(eval('window.opener.cl_ShowSchoolLink' + sControlFieldId));
			// end - JDB 6/25/2008 # 4045
		}

		if (sEditUrl)
		{
			sEditUrl = sEditUrl.replace("##OPENSUBWIN##", "OpenCEEBUrl('");
			sEditUrl = sEditUrl.replace("##CLOSESUBWIN##", "');");
		}
		if (SchoolLink)
		{
			SchoolLink.style.display = 'none';
		}
		if (pnlShow)
		{
			pnlShow.style.display = '';
		}
		if (lblSchool)
		{
			lblSchool.innerHTML = sSchoolName + " " + sEditUrl;
		}
		if (lblState)
		{
			lblState.innerHTML = sState;
		}
		if (lblCity)
		{
			lblCity.innerHTML = sCity;
		}
		if (sSchoolId)
		{
			lblSchoolId.innerHTML = sSchoolId;
			hidden.value = sSchoolId;
		}
		else
		{
			lblSchoolId.innerHTML = "N\A";
			hidden.value = sSchoolName + "~" + sCity + "~" + sState;
		}

		window.opener.focus();
	} // (window.opener != null)

	self.close();
} // CeebCloseAndRefresh

/// @author Matt Regier @date 05-23-2011 @ref http://jira/browse/ENC-2084
function CeebRemove(sControlFieldId, isHighSchool)
{
	var pnlShow;
	var lblSchool;
	var lblState;
	var lblCity;
	var lblSchoolId;
	var hidden;
	var SchoolLink;

	// identify elements
	if (isHighSchool == 'True')
	{
		pnlShow = imod$(eval('hs_panel' + sControlFieldId));
		lblSchool = imod$(eval('hs_schoolName' + sControlFieldId));
		lblState = imod$(eval('hs_State' + sControlFieldId));
		lblCity = imod$(eval('hs_City' + sControlFieldId));
		lblSchoolId = imod$(eval('hs_schoolId' + sControlFieldId));
		hidden = imod$(eval('hs_hiddenSchoolId' + sControlFieldId));
		SchoolLink = imod$(eval('hs_ShowSchoolLink' + sControlFieldId));
	}
	else
	{
		pnlShow = imod$(eval('cl_panel' + sControlFieldId));
		lblSchool = imod$(eval('cl_schoolName' + sControlFieldId));
		lblState = imod$(eval('cl_State' + sControlFieldId));
		lblCity = imod$(eval('cl_City' + sControlFieldId));
		lblSchoolId = imod$(eval('cl_schoolId' + sControlFieldId));
		hidden = imod$(eval('cl_hiddenSchoolId' + sControlFieldId));
		SchoolLink = imod$(eval('cl_ShowSchoolLink' + sControlFieldId));
	}

	// blank out data elements
	if (lblSchool)
	{
		lblSchool.innerHTML = "";
	}
	if (lblState)
	{
		lblState.innerHTML = "";
	}
	if (lblCity)
	{
		lblCity.innerHTML = "";
	}
	if (lblSchoolId)
	{
		lblSchoolId.innerHTML = "";
	}
	if (hidden)
	{
		hidden.value = "";
	}

	// visibility elements
	if (SchoolLink)
	{
		SchoolLink.style.display = '';
	}
	if (pnlShow)
	{
		pnlShow.style.display = 'none';
	}
} // CeebRemove

function ToggleDiv(prmTargetId, sender)
{
	if (imod$(prmTargetId).style.display == "none") {
		jQuery("#" + prmTargetId).slideDown('fast');
		if (sender) {
			jQuery(sender).removeClass("div-toggle-closed");
			jQuery(sender).addClass("div-toggle-opened");
		 }
	}
	else {
		jQuery("#" + prmTargetId).slideUp('fast');
		if (sender) {
			jQuery(sender).removeClass("div-toggle-opened");
			jQuery(sender).addClass("div-toggle-closed");
		}

	}
}

if (window.IModController) IModController.scriptLoadedNotification("/iDBMS/ui/js/idbms.js");
