//--------------------------------------------------------------------------------
//	New M7000.Ru
//
//	Client Side Part
//
//	09.10.2006 16:04	Ok without storing vertical Menu Navigation State
//						between Page Transitions. Without any Cookies
//	09.10.2006 21:41	Ok -/-
//
//	15.10.2008 13:52	Added some other Functions for Search Form pre-Processing
//
//	21.10.2008 1:57		Changed function fnCreateVertNavRow () because vertical Menu Width had been fixed
//
//	Aam
//
//	27.04.2009 15:53	Vertical Menu Wigth now is variable
//	29.05.2009 16:33	Added "/" into href Attribute
//
//--------------------------------------------------------------------------------

var sFolderImgOpenSrc = "xtfo";
var sFolderImgClosedSrc = "xtfc";
var sFolderImgOpenText = "скрыть категорию";
var sFolderImgClosedText = "показать категорию";
var sFolderImgSuffix = ".gif";
var sFolderClassName = "tdVertNavItemFolder";
var sLinkClassName = "tdVertNavItem";
var sDocImgSrc = "xtdoc";
var sBackgroundColor = "#e7e7e7";
var sVerticalBackgroundAligment = "50%";
var sFolderImgPath = "";
var nPaddingLeftIncrement = 8;
var nPadding = 0;
var nBackgroundPosition = 0;
var sUnits = "px";
var bIsBusy = false;
var sStateHidden = "none";
var sStateVisible = "";
var nTblVertNavLen = 0;
var nInd;
var arChildren = new Array ();

//--------------------------------------------------------------------------------

var bSearchFieldChanged = false;

//--------------------------------------------------------------------------------
//	OnLoad Page Handler: restores Vertical Navigation Tree according Coockie -----
//--------------------------------------------------------------------------------

function fnMyRestore ()
{
	var i;

	return;
}

//--------------------------------------------------------------------------------
//	OnMouseClick Handler ---------------------------------------------------------
//--------------------------------------------------------------------------------

function fnMyClick (evt)
{
	var oMyElement, sMyId, oMyParent, i, s, bFound;
	var sMyRE = /^tr([0-9]+)$/;
	var arRE;

	evt = (evt) ? evt : event;
	oMyElement = ((evt.srcElement) ? evt.srcElement : evt.target);

	bFound = false;
	do
	{
		switch (oMyElement.tagName)
		{
			case "TD":
				if (oMyElement.className == sFolderClassName)
					bFound = true;

				else
					bFound = false;
			break;

			case "TR":
				if (bFound)
					if (((sMyId = oMyElement.id) != null) && (sMyId != ""))
						if ((arRE = sMyId.match (sMyRE)) != null)
                            if (! isNaN (arRE [1]))
                                if (((nInd = parseInt (arRE [1], 10)) >= 0)
                                && (nInd < 1000000))
        						{
		          					fnVertNavManipulate (nInd);
		          					bIsBusy = false;
		          					nPadding = 0;
		          					nBackgroundPosition = 0;
				        			return false;
						        }
			break;

			default:
				bFound = false;
			break;
		}
	}
	while (oMyElement = oMyElement.parentNode);
	return true;
}

//--------------------------------------------------------------------------------
//	Vertical Navigation Manipulation ---------------------------------------------
//--------------------------------------------------------------------------------

function fnVertNavManipulate (nTrInd)
{
	var oFolderImg, oTR, oTbl, i, j, sFolderImgPref;

	if (nTrInd >= arTrVertNav.length)
		return;

	if (arTrVertNav [nTrInd].bLeaf)
		return;

//	  alert (nTrInd);

//--------------------------------------------------------------------------------
//	Determine Folder Image and its Src
//--------------------------------------------------------------------------------

	if (oTR = document.getElementById ("tr" + nTrInd))
        if (oFolderImg = fnGetFolderImgObj (nTrInd))
            if ((sFolderImgPref = fnGetFolderImgSrc (oFolderImg)).length > 0)

//--------------------------------------------------------------------------------
//	Change Folder Image and change Visibility of Children Items
//--------------------------------------------------------------------------------

				switch (sFolderImgPref)
				{
				    case sFolderImgOpenSrc:
				        oFolderImg.src = sFolderImgPath + sFolderImgClosedSrc + sFolderImgSuffix;
				        oFolderImg.alt = sFolderImgClosedText;
				        oFolderImg.title = sFolderImgClosedText;
				        fnDisplayStateChange (nTrInd, sStateHidden);
				    break;

				    case sFolderImgClosedSrc:
				        oFolderImg.src = sFolderImgPath + sFolderImgOpenSrc + sFolderImgSuffix;
				        oFolderImg.alt = sFolderImgOpenText;
				        oFolderImg.title = sFolderImgOpenText;
				        fnDisplayStateChange (nTrInd, sStateVisible);
				    break;

				    default:
				    break;
				}
}

//--------------------------------------------------------------------------------
//	Change Display State of Vertical Navigation Items ----------------------------
//--------------------------------------------------------------------------------

function fnDisplayStateChange (nStartInd, sState)
{
    var i, j, oTR;
	var arMyChildren = new Array ();

	switch (sState)
	{
		case sStateVisible:
			for (i = 0; i < arTrVertNav.length; i++)
				if (arTrVertNav [i].nParentInd == nStartInd)
					arMyChildren [arMyChildren.length] = i;

		    arMyChildren.sort (fnCompareNumbers);

//			alert (arMyChildren.length + ", " + arMyChildren.toString ());

		    for (i = 0; i < arMyChildren.length; i++)
				if (oTR = document.getElementById ("tr" + arMyChildren [i]))
				{
					if (! arTrVertNav [arMyChildren [i]].bLeaf)
						switch (fnGetFolderImgSrc (fnGetFolderImgObj (arMyChildren [i])))
						{
							case sFolderImgOpenSrc:
								fnDisplayStateChange (arMyChildren [i], sState);
							break;

							case sFolderImgClosedSrc:
							break;

							default:
							break;
						}

						oTR.style.display = sState;
				}

//--------------------------------------------------------------------------------
//  Append Item if it is been absent
//--------------------------------------------------------------------------------

				else
	            	if (!((arTrVertNav [arMyChildren [i]].nParentInd != nStartInd) && arTrVertNav [arMyChildren [i]].bLeaf))
		            	if (oTR = fnCreateVertNavRow (arMyChildren [i]))
	    	            	oTR.style.display = sState;
		break;

        case sStateHidden:

//			alert (arChildren.length);

        	arChildren.length = 0;
		    fnFindChildren (nStartInd);
		    arChildren.sort (fnCompareNumbers);

//			alert (arChildren.length);
//			alert (arChildren.toString ());

		    for (i = 0; i < arChildren.length; i++)
				if (oTR = document.getElementById ("tr" + arChildren [i]))
					oTR.style.display = sState;
        break;

		default:
		break;
	}
}

//--------------------------------------------------------------------------------
//	Determine Folder Image Src ---------------------------------------------------
//--------------------------------------------------------------------------------

function fnGetFolderImgSrc (oImg)
{
	var sMyRE = /^(.+)\/(\w+)\.gif$/;
	var arRE;

    if (! oImg)
    	return "";

	if (typeof (oImg) != "object")
    	return "";

    if ((arRE = oImg.src.match (sMyRE)) != null)
        if (arRE [1])
        {
            sFolderImgPath = arRE [1] + "/";
            if (arRE [2])
                return arRE [2];
        }

    return "";
}

//--------------------------------------------------------------------------------
//	Determine Folder Image Object ------------------------------------------------
//--------------------------------------------------------------------------------

function fnGetFolderImgObj (nTrInd)
{
	var oFolderImg, oTR, i, j;

	if (arTrVertNav [nTrInd].bLeaf)
		return null;

//	  alert (nTrInd);

//--------------------------------------------------------------------------------
//	Determine Folder Image
//--------------------------------------------------------------------------------

	if (oTR = document.getElementById ("tr" + nTrInd))
		for (i = 0; i < oTR.childNodes.length; i++)
			if (oTR.childNodes.item (i).tagName == "TD")
				if ((oFolderImg = oTR.childNodes.item (i).childNodes.item (0))
                && (oFolderImg.tagName == "IMG"))
	                return oFolderImg;

	return null;
}

//--------------------------------------------------------------------------------
//  Append Item to Vertical Navigation Table -------------------------------------
//--------------------------------------------------------------------------------

function fnCreateVertNavRow (nMyInd)
{
    var oSibling, oParent, oTR, oTR2, oTD, i, j, s;
	var sMyRE = /(\d+)(\w+%*)$/;
	var sMyRE2 = /(\d+)(\w+%*)\s+(\w+%*)/;
	var arRE;
	var arRE2;
	var sSafeText;

    for (i = nMyInd; i >= 0; i--)
        if (oTR = document.getElementById ("tr" + i))
            if (oParent = oTR.parentNode)
                if (oTR2 = oTR.cloneNode (true))
                {
                    if (oSibling = oTR.nextSibling)
                        oTR2 = oParent.insertBefore (oTR2, oSibling);

                    else
                        oTR2 = oParent.insertBefore (oTR2);

                    if (oTR2)
                    {
                        oTR2.id = "tr" + nMyInd;

                		for (j = 0; j < oTR2.childNodes.length; j++)
                			if ((oTD = oTR2.childNodes.item (j)) && (oTD.tagName == "TD"))
                                switch (oTD.className)
                                {
                                    case sFolderClassName:
                                        if (arTrVertNav [nMyInd].bLeaf)
                                            oTD.innerHTML = "&nbsp;";

                                        else
                                            oTD.innerHTML = "<img src=\"" +
                                            sFolderImgPath + sFolderImgClosedSrc + sFolderImgSuffix +
                                            "\" alt=\"" + sFolderImgClosedText + "\" " +
                                            "title=\"" + sFolderImgClosedText + "\" width=\"18\" height=\"18\" border=\"0\" />";

                                    break;

                                    case sLinkClassName:
                                   		if (! bIsBusy)
                                   		{
	                                    	if (oTD.style.paddingLeft)
												if ((arRE = oTD.style.paddingLeft.match (sMyRE)) != null)
						                            if (! isNaN (arRE [1]))
	                    					            if (((nPadding = parseInt (arRE [1], 10)) >= 0)
							                            && (nPadding < 10000))
							                            	if (arRE [2])
							                            	{
							                            		sUnits = arRE [2];
							                            		bIsBusy = true;
							                            	}

	                                    	if (oTD.style.backgroundPosition)
												if ((arRE2 = oTD.style.backgroundPosition.match (sMyRE2)) != null)
						                            if (! isNaN (arRE2 [1]))
	                    					            if (((nBackgroundPosition = parseInt (arRE2 [1], 10)) >= 0)
							                            && (nBackgroundPosition < 10000))
							                            {
							                            	if (arRE2 [2])
							                            	{
							                            		sUnits = arRE2 [2];
							                            		bIsBusy = true;
							                            	}

							                            	if (arRE2 [3])
							                            	{
							                            		sVerticalBackgroundAligment = arRE2 [3];
							                            		bIsBusy = true;
//							                            		alert (sVerticalBackgroundAligment);
							                            	}
							                            }
										}

										sSafeText = arTrVertNav [nMyInd].sText.replace (/"/g, "'");
										if ((! arTrVertNav [i].bLeaf) && (arTrVertNav [i].nParentInd != arTrVertNav [nMyInd].nParentInd))
										{
			                            	oTD.style.paddingLeft = (nPadding + nPaddingLeftIncrement).toString () + sUnits;
//			                            	oTD.style.backgroundPosition = (nBackgroundPosition + nPaddingLeftIncrement).toString () + sUnits + " " + sVerticalBackgroundAligment;
//			                            	oTD.style.backgroundColor = sBackgroundColor;
//			                            	oTD.style.backgroundRepeat = "no-repeat";
			                            }

                                        if (arTrVertNav [nMyInd].bLeaf)
                                        {
//			                            	oTD.style.backgroundImage = "url(" + sFolderImgPath + sDocImgSrc + sFolderImgSuffix + ")";
                                            oTD.innerHTML = "<a href=\"" + ((arTrVertNav [nMyInd].sLink.charAt (0) == "/") ?  "" : "/") +
                                            arTrVertNav [nMyInd].sLink + ((((arTrVertNav [nMyInd].sLink.length - arTrVertNav [nMyInd].sLink.lastIndexOf ("/")) == 1)
                                            || ((arTrVertNav [nMyInd].sLink.length - arTrVertNav [nMyInd].sLink.lastIndexOf (".html")) == 5)) ? "" : "/") +
                                            "\" title=\"" +
                                            sSafeText + "\">" +
                                            arTrVertNav [nMyInd].sText + "</a>";
										}

                                        else
                                        {
//			                            	oTD.style.backgroundImage = "url(" + sFolderImgPath + "folder" + sFolderImgSuffix + ")";
                                            oTD.innerHTML = "<a href=\"" + ((arTrVertNav [nMyInd].sLink.charAt (0) == "/") ?  "" : "/") +
                                            arTrVertNav [nMyInd].sLink + ((((arTrVertNav [nMyInd].sLink.length - arTrVertNav [nMyInd].sLink.lastIndexOf ("/")) == 1)
                                            || ((arTrVertNav [nMyInd].sLink.length - arTrVertNav [nMyInd].sLink.lastIndexOf (".html")) == 5)) ? "" : "/") +
                                            "\" title=\"" +
                                            sSafeText + "\">" +
                                            arTrVertNav [nMyInd].sText + "</a>";
										}

										oTD.title = sSafeText;

                                    break;

                                    default:
                                    break;
                                }

                        return oTR2;
                    }

                    return null;
                }

    return null;
}

//--------------------------------------------------------------------------------
//	Function compares 2 Numbers --------------------------------------------------
//--------------------------------------------------------------------------------

function fnCompareNumbers (n1, n2)
{
	return n1 - n2;
}

//--------------------------------------------------------------------------------
//	Function finds Children of current Node --------------------------------------
//--------------------------------------------------------------------------------

function fnFindChildren (nStart)
{
	var i, j, k;

	for (i = 0; i < arTrVertNav.length; i++)
		if (arTrVertNav [i].nParentInd == nStart)
		{
   			fnFindChildren (i);
			arChildren [arChildren.length] = i;
		}

	return;
}

//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------

//--------------------------------------------------------------------------------
//	KeyPress Handler -------------------------------------------------------------
//--------------------------------------------------------------------------------

function fnKeyPress (evt)
{
	var oEvent = null, oNode = null, sValue = "", nKeyCode = 0;
	oEvent = (evt) ? evt : ((window.event) ? event : null);

	if (oEvent)
		oNode = (oEvent.target) ? oEvent.target : oEvent.srcElement;

	if (oNode)
		nKeyCode = (oEvent.charCode) ? oEvent.charCode : ((oEvent.which) ? oEvent.which : oEvent.keyCode);

 	if (nKeyCode == 13)
 	{
		if (oNode.id == "txtSearchField")
			if ((sValue = oNode.value).search (/^\s*$/) == -1)
				if ((sValue = sValue.replace (/^\s+/g, "").replace (/\s+$/g, "")).length > 2)
				{
					oNode.value = sValue;
					if (oNode.form)
					{
						oNode.form.submit ();
						return false;
					}
				}
	}

	else
		return true;

	oEvent.cancelBubble;
	return false;
}

//--------------------------------------------------------------------------------
//	For Search Form: check-up before Submit --------------------------------------
//--------------------------------------------------------------------------------

function fnCheckForSearchSubmit (evt)
{
	var oEvent = null, oNode = null, oForm = null, sValue = "";

	oEvent = (evt) ? evt : ((window.event) ? event : null);
	if (oEvent)
		oForm = (oEvent.target) ? oEvent.target : oEvent.srcElement;

	if (oNode = oForm.elements ["txtSearchField"])
		if (bSearchFieldChanged)
			if ((sValue = oNode.value).search (/^\s*$/) == -1)
				if ((sValue = sValue.replace (/^\s+/g, "").replace (/\s+$/g, "")).length > 2)
				{
					oNode.value = sValue;
					return true;
				}

	return false;
}

//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
