var dN;
var objContent;
var menuContent = new Array();


function dynamicNav(strSource, strNav)
{
	this.strSource = strSource;
	this.strNav = strNav;
	
	this.objNav = dojo.byId(strNav);

	/* Public */

	
	/* Private */
	this.initialize = initialize;
	this.handleLoad = handleLoad;
	this.buildCategoryNav = buildCategoryNav;
	
	this.buildMainCategory = buildMainCategory;
	this.handleReset = handleReset;

	/* Load */
	//this.initialize();
	
}


	function initialize() {
		if (this.strSource)
		if (this.strSource != "" && this.strSource.length > 0)
		{
			var bindArgs = {
				url: this.strSource,
				handleAs: "json",
				error: function (data)
					{
						//alert("Error occurred2");
						//alert("Error: " + data);
					},

				load: function(response, ioArgs)
					{
						dN.handleLoad(response);
					}
			};
			
			dojo.xhrGet(bindArgs);
			
		}		
	}


	function handleLoad(objStructure)
	{
    		this.objCategories = objStructure.categories;
    		objContent = this.objCategories;
    	  
		// load categories
		this.buildCategoryNav();	
		
		//alert(this.objNav.innerHTML);
		
		
	}


	function buildCategoryNav()
	{
		objNav = this.objNav;
		
		var navUl = document.createElement("ul");
		
		
		
	
		for (var i=0;i<this.objCategories.length;i++)
		{
			curCategory = this.objCategories[i];
			
			navUl.appendChild(this.buildMainCategory(curCategory));
			
		}
	
		objNav.appendChild(navUl);
	
	}
	
	function buildMainCategory(objCategory)
	{
		var catLi = document.createElement("li");

		catid = objCategory.catid;
		catLi.id = "menu-"+catid;
		
		catLi.appendChild(createIcon(catid, 1));
		catLi.appendChild(createCategoryName(objCategory.name, catid, objCategory.urlPage, 1));
		
		if (isCategoryEmpty(objCategory)) 
		{
			catLi.className = "noChildren";
		} else {
			catLi.appendChild(buildCategoryChildren(objCategory.categories, catid));
		}
		
		var footer = document.createElement("div");
		footer.className = "footerShade";
		footer.innerHTML = "&nbsp;";
		
		catLi.appendChild(footer);

		return catLi;
	}

	function buildSubCategory(objCategory, num)
	{
		var catLi = document.createElement("li");

		catid = objCategory.catid;
		catLi.id = "menu-"+catid;

		catLi.appendChild(createIcon(catid, 0));
		catLi.appendChild(createCategoryName(objCategory.name, catid, objCategory.urlPage, 0));
		
		
		if (isCategoryEmpty(objCategory)) 
		{
			catLi.className = "noChildren";
		} else {
			catLi.appendChild(buildCategoryChildren(objCategory.categories, catid));
		}
		
		// first category in the list, ignore the top dotted lines
		if (num ==0)
		{
			catLi.className += " first";
		}
		
		return catLi;
	}


	function buildCategoryChildren(arCategories, parId)
	{
		var temp = document.createElement("ul");
		temp.className = "sub";
		temp.id = "sub-"+parId;
		
		for (var i=0;i<arCategories.length;i++)
		{
		
			curCategory = arCategories[i];
			
			temp.appendChild(this.buildSubCategory(curCategory, i));
		}
		
		return temp;
	}

	function createIcon(catid, isMain)
	{
	
		var temp = document.createElement("div");
		
		if (isMain)
		{
			temp.innerHTML = '<a href="javascript:void(0);" onClick="iconClickMain(\'' + catid + '\');"><div class="icon"></div></a>';
		} else {
			temp.innerHTML = '<a href="javascript:void(0);" onClick="iconClick(\'' + catid + '\');"><div class="icon"></div></a>';
		}
		temp.className = "facetnav_icon";
		
		return temp;
	}

	function createCategoryName(catName, catid, catlink, isMain)
	{
		var temp = document.createElement("div");
		
		if (isMain)
		{
			temp.innerHTML = '<a href="javascript:void(0);" onClick="catClickMain(\'' + catid + '\', \''+ catlink + '\');"><h5>' + catName + '</h5></a>';
		} else {
			temp.innerHTML = '<a href="javascript:void(0);" onClick="catClick(\'' + catid + '\', \''+ catlink + '\');"><h5>' + catName + '</h5></a>';
		}
		
		temp.className = "facetnav_text";
		
		return temp;
	
	}

	function isCategoryEmpty(obj)
	{
		if (obj.categories.length > 0 && obj.categories != 0)
			return 0;
		else
			return 1;
	}

	 //second categoryId
        function initContent(len , categoryId)
        { 
               if(len && categoryId){               	
               	      menuContent[len] = categoryId;               	      
               	}	
        }
        
   function resetClickNav()
	{
		for (var i=1;i<=menuContent.length;i++)
		{
			catId = menuContent[i];
			
			if(catId){			
			    toggleMenuExpand(catId);	
			}		

		}
	}
	
	function toggleMenuExpand(catid)
	{   
	
	   var temp = dojo.byId("branch" + catid);
	   
	   if(temp){
		if (isActive(catid))
		{
			hideSub(catid);
		} else {
			//showSub(catid);
		}
	   }
	}
	function iconClickMain(catid)
	{
	    resetLevelNav(catid);
		toggleMenu(catid);
	}
	
	function textClickMain(catid)
	{
	    resetLevelNav(catid);
		toggleMenuCat(catid);
	}
	
	function resetLevelNav(categoryId)
    {
             //check if the menu is first level
        for (var i=1;i<=menuContent.length;i++)
		{
			
			catId = menuContent[i];			
			if(catId == categoryId){
			    resetClickLevelNav(catId);
			    break;	
			}		

		}
             	
    }
    
    function resetClickLevelNav(catLevelId)
	{
		for (var i=1;i<=menuContent.length;i++)
		{
			catId = menuContent[i];
			
			if(catId){
			    if(catId != catLevelId)			
			       toggleMenuExpand(catId);	
			}		

		}
	}
	function toggleMenu(catid)
	{     
	   var temp = dojo.byId("branch" + catid);
	   
	   if(temp){
		if (isActive(catid))
		{
			hideSub(catid);
		} else {
			showSub(catid);
		}
	   }
	}
	
	function toggleMenuSubText(catid,styleType)
	{     
	   var temp = dojo.byId("branch" + catid);
	   
	   if(temp){
		if (isActive(catid))
		{
			hideSub(catid);
		} else {
			showSub(catid);
		}
	   }
	   if(styleType){
			  var tempCat = dojo.byId("cat_" + catid);			  
			  if(tempCat){			   
			   if(tempCat.className && tempCat.className == 'textsub'){
			      tempCat.className="textsub selectedtextsub";
			    }else{
			       tempCat.className="selectedtextsub";
			    }
		}     }
	}
	
	function toggleMenuCat(catid)
	{
		var temp = dojo.byId("branch" + catid);
		
		if (isActive(catid))
		{
			//hideSub(catid);
		} else {
			showSub(catid);
		}
	}
	function isActive(catid)
	{
		var menuName = "table_"+catid;
		
		menu = dojo.byId(menuName);
		if(menu != null) {
			var temp = menu.className;
			
			if (temp.indexOf("selected") >=0)
			{
				return 1;
			} else {
				return 0;
			}
		}
	}
	
	function hideSub(catid)
	{
		var menuName = "branch"+catid;
		menu = dojo.byId(menuName);
		
		var tableName = "table_"+catid;
		tableExpand = dojo.byId(tableName);
		
		dojo.fx.wipeOut({node: menu, duration: 500}).play();  
		tableExpand.className = "";
	}
	
	function showSub(catid)
	{
	
		var menuName = "branch"+catid;
		menu = dojo.byId(menuName);
		
		var tableName = "table_"+catid;
		tableExpand = dojo.byId(tableName);
		
		myWipeIn({node: menu, duration: 500}).play();	
         
		tableExpand.className = "selected";
	}

	function handleReset(catid)
	{
		for (var i=0;i<objContent.length;i++)
		{
			
			curCategory = objContent[i];

			catId = curCategory.catid;

			if (catId != catid)
			{
				if (isActive(catId)) toggleMenu(catId);
			}

		}
	}
	
	
