var xtd;
if (!xtd) xtd = {};

xtd.flexiCSSMenus_uagent = navigator.userAgent.toLowerCase();
xtd.flexiCSSMenus_smartphones = ["android", "blackberry", "iphone", "ipad", "series60", "symbian", "windows ce", "palm"];

xtd.addLoadEvent = function(str) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = function() {
		eval(str);
	}
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      eval(str);
    }
  }
}

xtd.flexiCSSMenus_isTouchDevice = function () {
	//return true; // for testing
	
	for(var i=0;i<xtd.flexiCSSMenus_smartphones.length;i++) { 
		if(xtd.flexiCSSMenus_uagent.indexOf(xtd.flexiCSSMenus_smartphones[i]) > -1) 
			return true;
	}
	
	return false;
}

xtd.flexiCSSMenus_addTouchDeviceBehavior = function() {
	var divs = document.getElementsByTagName("DIV");
	var menu, comment, start, end, type, props;
	
	for (var i=0;i<divs.length;i++) {
		if (divs[i].className && divs[i].className.indexOf("FM_CSS_") != -1 && divs[i].className.indexOf('_container') != -1) {
			menu = divs[i];
			
			start = menu.innerHTML.indexOf("<!--") + 4;
			end = menu.innerHTML.indexOf("-->");
			comment = menu.innerHTML.substring(start, end);
			props = comment.split(';');
			type = props[props.length - 2].replace('type=', '');

			xtd.flexiCSSMenus_addTouchDeviceBehaviorForElement(menu, type);
		}
	}
}

xtd.flexiCSSMenus_addTouchDeviceBehaviorForElement = function(elem, type) {
	var children = elem.childNodes;
	
	for (var i=0;i<children.length;i++) {
		if (children[i].tagName && children[i].tagName.toLowerCase() == "li") {
			children[i].addEventListener("click", xtd.flexiCSSMenus_clickHandlerForTouchDevices, false);
		}
		
		xtd.flexiCSSMenus_addTouchDeviceBehaviorForElement(children[i], type);
	}
}

if (xtd.flexiCSSMenus_isTouchDevice()) {
	var str = "xtd.flexiCSSMenus_addTouchDeviceBehavior();";
	xtd.addLoadEvent(str);
}


xtd.flexiCSSMenus_currentButton = null;
xtd.flexiCSSMenus_currentLevel = -1;

xtd.flexiCSSMenus_clickHandlerForTouchDevices = function(event) {
	var type = xtd.flexiCSSMenus_getMenuType(xtd.flexiCSSMenus_getButtonMenu(this));
	var submenu = this.getElementsByTagName("UL")[0];
	
	if(event.stopPropagation) event.stopPropagation();

	if(xtd.flexiCSSMenus_currentButton && (xtd.flexiCSSMenus_currentButton == this) || !submenu) { 
		return;
	} else { 
		event.preventDefault();
	}
	
 	try { 
		var node, level = xtd.flexiCSSMenus_getButtonLevel(this);
	} catch(e) { 
		alert('error 2');
	}

	//alert(level + " .. " + xtd.flexiCSSMenus_currentButton);
	if(level > xtd.flexiCSSMenus_currentLevel) { 
		xtd.flexiCSSMenus_currentButton = this;

		if(level > 0) { 
			node = xtd.flexiCSSMenus_currentButton.parentNode;	
			while(level > xtd.flexiCSSMenus_currentLevel && node.className.toLowerCase().indexOf('fm') < 0) { 
				if(node.tagName && node.tagName.toLowerCase() == "li") {
					xtd.flexiCSSMenus_selectButton(node, type);
					xtd.flexiCSSMenus_currentLevel--; 
				}
				node = node.parentNode;		
			}
		}		
		xtd.flexiCSSMenus_selectButton(xtd.flexiCSSMenus_currentButton, type);				
		xtd.flexiCSSMenus_currentLevel = level;
	} 

	if(level == xtd.flexiCSSMenus_currentLevel) { 
		try { 
			xtd.flexiCSSMenus_deselectButton(xtd.flexiCSSMenus_currentButton);
			xtd.flexiCSSMenus_currentButton = this;
			xtd.flexiCSSMenus_currentLevel = level;
			xtd.flexiCSSMenus_selectButton(xtd.flexiCSSMenus_currentButton, type);
		} catch(e) { 
			alert('error 3');
		}
	}
	
	if(level < xtd.flexiCSSMenus_currentLevel) { 
		xtd.flexiCSSMenus_deselectButton(xtd.flexiCSSMenus_currentButton);
		while(level < xtd.flexiCSSMenus_currentLevel) { 
			xtd.flexiCSSMenus_currentButton = xtd.flexiCSSMenus_currentButton.parentNode;
			if(xtd.flexiCSSMenus_currentButton.tagName && xtd.flexiCSSMenus_currentButton.tagName.toLowerCase() == "li") {
				xtd.flexiCSSMenus_deselectButton(xtd.flexiCSSMenus_currentButton, type);
				xtd.flexiCSSMenus_currentLevel--;
			}
		}
		xtd.flexiCSSMenus_currentButton = this;
		xtd.flexiCSSMenus_currentLevel = level;
		xtd.flexiCSSMenus_selectButton(xtd.flexiCSSMenus_currentButton, type);
	}
}

xtd.flexiCSSMenus_deselectButton = function(button) {
	try { 
		if(button) {  
			button.getElementsByTagName('a')[0].className = "";
			var submenu = button.getElementsByTagName('ul');
			if(submenu.length > 0) { 
				submenu[0].style.display = "none";
			}
			
			var lis = submenu[0].getElementsByTagName('li');
			for(var i = 0; i < lis.length; i++) { 
				lis[i].style.position = "static";
			}
		}
	} catch(e) { 
	
	}
}

xtd.flexiCSSMenus_selectButton = function(button, type) { 
	button.getElementsByTagName('a')[0].className += " sel"; 
	
	var isTabbed = (type == "tabbed");
	if(isTabbed) { 
		button.style.position = "static";
	} else { 
		button.style.position = "relative";
	}
	
	try { 
		var submenu = button.getElementsByTagName('ul');
		submenu[0].style.zIndex = 1;
		if(submenu.length > 0) { 
			submenu[0].style.display = "block";	
		
			var lis = submenu[0].getElementsByTagName('li');
			for(var i = 0; i < lis.length; i++) { 
				lis[i].style.position = "relative";
			}
			
/*			var subsub = submenu[0].getElementsByTagName('ul')[0]
			if (subsub) {
				lis = subsub.getElementsByTagName('li');
				for(var i = 0; i < lis.length; i++) { 
					lis[i].style.position = "relative";
				}
			}
*/
		}
	} catch(e) { 
		alert('error 1');
	}
}


xtd.flexiCSSMenus_getButtonLevel = function(selectedNode) {
	try {
		var upULSNo = 0;
		
		//log("##getSelectedLevel##" + selectedNode.parentNode);
		while (selectedNode && selectedNode.className.toLowerCase().indexOf("fm") < 0) {
			//log("##selectedNode.parentNode.nodeName.toLowerCase()##" + selectedNode.parentNode.nodeName.toLowerCase());
			if (selectedNode.tagName && selectedNode.tagName.toLowerCase() == "ul") {
				upULSNo++;
			}
			selectedNode = selectedNode.parentNode;
		}
	} catch (e) {
		alert("Error in getSelectedLevel ##" + e);
	}
	return upULSNo;
}

xtd.flexiCSSMenus_getButtonMenu = function(selectedNode) {
	try {
		var upULSNo = 0;
		
		//log("##getSelectedLevel##" + selectedNode.parentNode);
		while (selectedNode && (selectedNode.className.toLowerCase().indexOf("fm_css_") == -1 || selectedNode.className.toLowerCase().indexOf("_container") == -1) ) {
			//log("##selectedNode.parentNode.nodeName.toLowerCase()##" + selectedNode.parentNode.nodeName.toLowerCase());
			selectedNode = selectedNode.parentNode;
		}
	} catch (e) {
		alert("Error in getButtonMenu ##" + e);
	}
	return selectedNode;
}

xtd.flexiCSSMenus_getMenuType = function(menuNode) {
	var menu, comment, start, end, type, props;
	menu = menuNode;
	
	start = menu.innerHTML.indexOf("<!--") + 4;
	end = menu.innerHTML.indexOf("-->");
	comment = menu.innerHTML.substring(start, end);
	props = comment.split(';');
	type = props[props.length - 2].replace('type=', '');
	
	return type;
}

