//General

//for example: instead of each module writing out script found in moduleMaxMin_OnClick have the functionality cached

//



var DNN_COL_DELIMITER = String.fromCharCode(16);

var DNN_ROW_DELIMITER = String.fromCharCode(15);

var __dnn_m_bPageLoaded = false;



window.onload = __dnn_Page_OnLoad;



function __dnn_ClientAPIEnabled()

{

	return typeof(dnn) != 'undefined';

}





function __dnn_Page_OnLoad()

{

	if (__dnn_ClientAPIEnabled())

	{

		var sLoadHandlers = dnn.getVar('__dnn_pageload');

		if (sLoadHandlers != null)

			eval(sLoadHandlers);

		

		dnn.dom.attachEvent(window, 'onscroll', __dnn_bodyscroll);

	}

	__dnn_m_bPageLoaded = true;

}



function __dnn_KeyDown(iKeyCode, sFunc, e)

{

	if (e == null)

		e = window.event;



	if (e.keyCode == iKeyCode)

	{

		eval(unescape(sFunc));

		return false;

	}

}



function __dnn_bodyscroll() 

{

	var oF=document.forms[0];	

	if (__dnn_ClientAPIEnabled() && __dnn_m_bPageLoaded)

		oF.ScrollTop.value=document.documentElement.scrollTop ? document.documentElement.scrollTop : dnn.dom.getByTagName("body")[0].scrollTop;

}



function __dnn_setScrollTop(iTop)

{

	if (__dnn_ClientAPIEnabled())

	{

		if (iTop == null)

			iTop = document.forms[0].ScrollTop.value;

	

		var sID = dnn.getVar('ScrollToControl');

		if (sID != null && sID.length > 0)

		{

			var oCtl = dnn.dom.getById(sID);

			if (oCtl != null)

			{

				iTop = dnn.dom.positioning.elementTop(oCtl);

				dnn.setVar('ScrollToControl', '');

			}

		}

		window.scrollTo(0, iTop);

	}

}



//Focus logic

function __dnn_SetInitialFocus(sID)

{

	var oCtl = dnn.dom.getById(sID);	

	if (oCtl != null && __dnn_CanReceiveFocus(oCtl))

		oCtl.focus();

}	



function __dnn_CanReceiveFocus(e)

{

	//probably should call getComputedStyle for classes that cause item to be hidden

	if (e.style.display != 'none' && e.tabIndex > -1 && e.disabled == false && e.style.visible != 'hidden')

	{

		var eParent = e.parentElement;

		while (eParent != null && eParent.tagName != 'BODY')

		{

			if (eParent.style.display == 'none' || eParent.disabled || eParent.style.visible == 'hidden')

				return false;

			eParent = eParent.parentElement;

		}

		return true;

	}

	else

		return false;

}



//Max/Min Script

function __dnn_ContainerMaxMin_OnClick(oLnk, sContentID)

{

	var oContent = dnn.dom.getById(sContentID);

	if (oContent != null)

	{

		var oBtn = oLnk.childNodes[0];

		var sContainerID = oLnk.getAttribute('containerid');

		var sCookieID = oLnk.getAttribute('cookieid');

		var sCurrentFile = oBtn.src.toLowerCase().substr(oBtn.src.lastIndexOf('/'));

		var sMaxFile;

		var sMaxIcon;

		var sMinIcon;



		if (dnn.getVar('min_icon_' + sContainerID))

			sMinIcon = dnn.getVar('min_icon_' + sContainerID);

		else

			sMinIcon = dnn.getVar('min_icon');



		if (dnn.getVar('max_icon_' + sContainerID))

			sMaxIcon = dnn.getVar('max_icon_' + sContainerID);

		else

			sMaxIcon = dnn.getVar('max_icon');



		sMaxFile = sMaxIcon.toLowerCase().substr(sMaxIcon.lastIndexOf('/'));



		var iNum = 5;

		if (oLnk.getAttribute('animf') != null)

			iNum = new Number(oLnk.getAttribute('animf'));

			

		if (sCurrentFile == sMaxFile)

		{

			oBtn.src = sMinIcon;				

			//oContent.style.display = '';

			dnn.dom.expandElement(oContent, iNum);

			oBtn.title = dnn.getVar('min_text');

			if (sCookieID != null)

			{

				if (dnn.getVar('__dnn_' + sContainerID + ':defminimized') == 'true')

					dnn.dom.setCookie(sCookieID, 'true', 365);

				else

					dnn.dom.deleteCookie(sCookieID);

			}

			else

				dnn.setVar('__dnn_' + sContainerID + '_Visible', 'true');

		}

		else

		{

			oBtn.src = sMaxIcon;				

			//oContent.style.display = 'none';

			dnn.dom.collapseElement(oContent, iNum);

			oBtn.title = dnn.getVar('max_text');

			if (sCookieID != null)

			{

				if (dnn.getVar('__dnn_' + sContainerID + ':defminimized') == 'true')

					dnn.dom.deleteCookie(sCookieID);

				else

					dnn.dom.setCookie(sCookieID, 'false', 365);				

			}

			else

				dnn.setVar('__dnn_' + sContainerID + '_Visible', 'false');			

		}

		

		return true;	//cancel postback

	}

	return false;	//failed so do postback

}



function __dnn_Help_OnClick(sHelpID)

{

	var oHelp = dnn.dom.getById(sHelpID);

	if (oHelp != null)

	{

		if (oHelp.style.display == 'none')

			oHelp.style.display = '';

		else

			oHelp.style.display = 'none';



		return true;	//cancel postback

	}

	return false;	//failed so do postback

}



function __dnn_SectionMaxMin(oBtn, sContentID)

{

	var oContent = dnn.dom.getById(sContentID);

	if (oContent != null)

	{

		var sMaxIcon = oBtn.getAttribute('max_icon');

		var sMinIcon = oBtn.getAttribute('min_icon');

		var bCallback = oBtn.getAttribute('userctr') != null;

		var sVal;

		if (oContent.style.display == 'none')

		{

			oBtn.src = sMinIcon;				

			oContent.style.display = '';

			if (bCallback)

			    sVal = 'True';

			else

			    dnn.setVar(oBtn.id + ':exp', 1);

		}

		else

		{

			oBtn.src = sMaxIcon;				

			oContent.style.display = 'none';

			if (bCallback)

			    sVal = 'False';

			else

                dnn.setVar(oBtn.id + ':exp', 0);

		}

		if (bCallback)

		    dnncore.setUserProp(oBtn.getAttribute('userctr'), oBtn.getAttribute('userkey'), sVal, null);

		return true;	//cancel postback

	}

	return false;	//failed so do postback

}



//Drag N Drop

function __dnn_enableDragDrop()

{

	var aryConts = dnn.getVar('__dnn_dragDrop').split(";");	

	var aryTitles;



	for (var i=0; i < aryConts.length; i++)

	{

		aryTitles = aryConts[i].split(" ");

		if (aryTitles[0].length > 0)

		{			

			var oCtr = dnn.dom.getById(aryTitles[0]);

			var oTitle = dnn.dom.getById(aryTitles[1]);

			if (oCtr != null && oTitle != null)

			{

				oCtr.setAttribute('moduleid', aryTitles[2]);

				dnn.dom.positioning.enableDragAndDrop(oCtr, oTitle, '__dnn_dragComplete()', '__dnn_dragOver()');

			}	

		}

	}

}



var __dnn_oPrevSelPane;

var __dnn_oPrevSelModule;

var __dnn_dragEventCount=0;

function __dnn_dragOver()

{

	__dnn_dragEventCount++;

	if (__dnn_dragEventCount % 75 != 0)	//only calculate position every 75 events

		return;

	

	var oCont = dnn.dom.getById(dnn.dom.positioning.dragCtr.contID);



	var oPane = __dnn_getMostSelectedPane(dnn.dom.positioning.dragCtr);

		

	if (__dnn_oPrevSelPane != null)	//reset previous pane's border

		__dnn_oPrevSelPane.pane.style.border = __dnn_oPrevSelPane.origBorder;



	if (oPane != null)

	{		

		__dnn_oPrevSelPane = oPane;

		oPane.pane.style.border = '4px double ' + DNN_HIGHLIGHT_COLOR;

		var iIndex = __dnn_getPaneControlIndex(oCont, oPane);



		var oPrevCtl;

		var oNextCtl;

		for (var i=0; i<oPane.controls.length; i++)

		{

			if (iIndex > i && oPane.controls[i].id != oCont.id)

				oPrevCtl = oPane.controls[i];

			if (iIndex <= i && oPane.controls[i].id != oCont.id)

			{

				oNextCtl = oPane.controls[i];

				break;

			}

		}			

		

		if (__dnn_oPrevSelModule != null)

			dnn.dom.getNonTextNode(__dnn_oPrevSelModule.control).style.border = __dnn_oPrevSelModule.origBorder;

			



		if (oNextCtl != null)

		{

			__dnn_oPrevSelModule = oNextCtl;

			dnn.dom.getNonTextNode(oNextCtl.control).style.borderTop = '5px groove ' + DNN_HIGHLIGHT_COLOR;

		}

		else if (oPrevCtl != null)

		{

			__dnn_oPrevSelModule = oPrevCtl;

			dnn.dom.getNonTextNode(oPrevCtl.control).style.borderBottom = '5px groove ' + DNN_HIGHLIGHT_COLOR;

		}

	}

}



function __dnn_dragComplete()

{

	var oCtl = dnn.dom.getById(dnn.dom.positioning.dragCtr.contID);

	var sModuleID = oCtl.getAttribute('moduleid');

	

	if (__dnn_oPrevSelPane != null)

		__dnn_oPrevSelPane.pane.style.border = __dnn_oPrevSelPane.origBorder;



	if (__dnn_oPrevSelModule != null)

		dnn.dom.getNonTextNode(__dnn_oPrevSelModule.control).style.border = __dnn_oPrevSelModule.origBorder;

		

	var oPane = __dnn_getMostSelectedPane(dnn.dom.positioning.dragCtr);

	var iIndex;

	if (oPane == null)

	{

		var oPanes = __dnn_Panes();

		for (var i=0; i<oPanes.length; i++)

		{

			if (oPanes[i].id == oCtl.parentNode.id)

				oPane = oPanes[i];

		}

	}	

	if (oPane != null)

	{

		iIndex = __dnn_getPaneControlIndex(oCtl, oPane);

		__dnn_MoveToPane(oPane, oCtl, iIndex);



		dnn.callPostBack('MoveToPane', 'moduleid=' + sModuleID, 'pane=' + oPane.paneName, 'order=' + iIndex * 2); 

	}

}



function __dnn_MoveToPane(oPane, oCtl, iIndex)

{



	if (oPane != null)

	{

		var aryCtls = new Array();

		for (var i=iIndex; i<oPane.controls.length; i++)

		{

			if (oPane.controls[i].control.id != oCtl.id)

				aryCtls[aryCtls.length] = oPane.controls[i].control;



			dnn.dom.removeChild(oPane.controls[i].control);

		}

		dnn.dom.appendChild(oPane.pane, oCtl);

		oCtl.style.top=0;

		oCtl.style.left=0;

		oCtl.style.position = 'relative';

		for (var i=0; i<aryCtls.length; i++)

		{

			dnn.dom.appendChild(oPane.pane, aryCtls[i]);

		}

		__dnn_RefreshPanes();

	}

	else

	{

		oCtl.style.top=0;

		oCtl.style.left=0;

		oCtl.style.position = 'relative';

	}

}



function __dnn_RefreshPanes()

{

	var aryPanes = dnn.getVar('__dnn_Panes').split(';');

	var aryPaneNames = dnn.getVar('__dnn_PaneNames').split(';');

	__dnn_m_aryPanes = new Array();

	for (var i=0; i<aryPanes.length; i++)

	{

		if (aryPanes[i].length > 0)

			__dnn_m_aryPanes[__dnn_m_aryPanes.length] = new __dnn_Pane(dnn.dom.getById(aryPanes[i]), aryPaneNames[i]);

	}

}



var __dnn_m_aryPanes;

var __dnn_m_aryModules;

function __dnn_Panes()

{

	if (__dnn_m_aryPanes == null)

	{

		__dnn_m_aryPanes = new Array();

		__dnn_RefreshPanes();

	}

	return __dnn_m_aryPanes;

}



function __dnn_Modules(sModuleID)

{

	if (__dnn_m_aryModules == null)

		__dnn_RefreshPanes();

	

	return __dnn_m_aryModules[sModuleID];

}



function __dnn_getMostSelectedPane(oContent)

{

	var oCDims = new dnn.dom.positioning.dims(oContent);

	var iTopScore=0;

	var iScore;

	var oTopPane;

	for (var i=0; i<__dnn_Panes().length; i++)

	{

		var oPane = __dnn_Panes()[i];

		var oPDims = new dnn.dom.positioning.dims(oPane.pane);

		iScore = dnn.dom.positioning.elementOverlapScore(oPDims, oCDims);

		

		if (iScore > iTopScore)

		{

			iTopScore = iScore;

			oTopPane = oPane;

		}

	}

	return oTopPane;

}



function __dnn_getPaneControlIndex(oContent, oPane)

{

	if (oPane == null)

		return;

	var oCDims = new dnn.dom.positioning.dims(oContent);

	var oCtl;

	if (oPane.controls.length == 0)

		return 0;

	for (var i=0; i<oPane.controls.length; i++)

	{

		oCtl = oPane.controls[i];

		var oIDims = new dnn.dom.positioning.dims(oCtl.control);

		if (oCDims.t < oIDims.t)

			return oCtl.index;

	}

	if (oCtl != null)

		return oCtl.index+1;

	else

		return 0;

}



//Objects

function __dnn_Pane(ctl, sPaneName)

{

	this.pane = ctl;

	this.id = ctl.id;

	this.controls = new Array();

	this.origBorder = ctl.style.border;

	this.paneName = sPaneName;

	

	var iIndex = 0;

	var strModuleOrder='';

	for (var i=0; i<ctl.childNodes.length; i++)

	{

		var oNode = ctl.childNodes[i];

		if (dnn.dom.isNonTextNode(oNode))	

		{

			if (__dnn_m_aryModules == null)

				__dnn_m_aryModules = new Array();



			//if (oNode.tagName == 'A' && oNode.childNodes.length > 0)

			//	oNode = oNode.childNodes[0];	//DNN now embeds anchor tag 

				

			var sModuleID = oNode.getAttribute('moduleid');

			if (sModuleID != null && sModuleID.length > 0)

			{

				strModuleOrder += sModuleID + '~';

				this.controls[this.controls.length] = new __dnn_PaneControl(oNode, iIndex);

				__dnn_m_aryModules[sModuleID] = oNode.id;

				iIndex+=1;

			}

		}

	}

	this.moduleOrder = strModuleOrder;



}



function __dnn_PaneControl(ctl, iIndex)

{

	this.control = ctl;

	this.id = ctl.id;

	this.index = iIndex;

	this.origBorder = ctl.style.border;

	

}



//move towards dnncore ns.  right now only for personalization

function __dnncore()

{

    this.GetUserVal = 0;

    this.SetUserVal = 1;

}



__dnncore.prototype = {

getUserProp: function(sNameCtr, sKey, pFunc) {

    this._doUserCallBack(dnncore.GetUserVal, sNameCtr, sKey, null, new dnncore.UserPropArgs(sNameCtr, sKey, pFunc));

},



setUserProp: function(sNameCtr, sKey, sVal, pFunc) {

    this._doUserCallBack(dnncore.SetUserVal, sNameCtr, sKey, sVal, new dnncore.UserPropArgs(sNameCtr, sKey, pFunc));

},



_doUserCallBack: function(iType, sNameCtr, sKey, sVal, pFunc) {

    if (dnn && dnn.xmlhttp)

    {

        var sPack = iType + COL_DELIMITER + sNameCtr + COL_DELIMITER + sKey + COL_DELIMITER + sVal;

        dnn.xmlhttp.doCallBack('__Page',sPack,dnncore._callBackSuccess,pFunc,dnncore._callBackFail,null,true,null,0);

    }

    else

        alert('Client Personalization not enabled');

},



_callBackSuccess: function (result, ctx, req) {

    if (ctx.pFunc)

        ctx.pFunc(ctx.namingCtr, ctx.key, result);

},



_callBackFail: function (result, ctx) {

	window.status = result;

}

}



__dnncore.prototype.UserPropArgs = function(sNameCtr, sKey, pFunc)

{

    this.namingCtr = sNameCtr;

	this.key = sKey;

	this.pFunc = pFunc;

}



var dnncore = new __dnncore();

