/**
 * util.js 
 * by Garrett Smith 
 * Provides functionality for working nodeLists.
 */
Browser = new function () {
	
	this.isSupported = function(){
		return typeof document.getElementsByTagName != "undefined"
			&& typeof document.getElementById != "undefined";
	};
	
	var u = navigator.userAgent;
	var OMNI = u.indexOf("Omni") > 0;

	this.OP5 = /Opera [56]/.test(u);
	this.OP7 = /Opera [7]/.test(u);
	this.MAC = /Mac/.test(u);

	if(!this.OP5 && !OMNI){
		this.IE5 = /MSIE 5/.test(u);
		this.IE5_0 = /MSIE 5.0/.test(u);
		this.MOZ =/Gecko/.test(u);
		this.MAC_IE5 = this.MAC && this.IE5;
		this.IE6 = /MSIE 6/.test(u);
		this.WIN9X = /Win9|Windows 9/.test(u);
	}		
};

TokenizedExps = {EXT:/(\.(.[^\.]+)$)/};
function getTokenizedExp(t, flag){
	var x = TokenizedExps[t];
	if(!x)
		x = TokenizedExps[t] = new RegExp("(^|\\s)"+t+"($|\\s)", flag);
	return x;
}

function hasToken(s, t){
	return getTokenizedExp(t,"").test(s);
};
	

function getChildNodesWithClass(p, k){
		
	var collection = p.childNodes;
	var returnedCollection = [];
	var exp = getTokenizedExp(k,"");

	for(var i = 0, counter = 0; i < collection.length; i++)
		if(exp.test(collection[i].className))
			returnedCollection[counter++] = collection[i];

	return returnedCollection;
}
	
function getElementsWithClass(p, tagName, k){
	var returnedCollection = [];
	try{
	var exp = getTokenizedExp(k,"");
	var collection = (tagName == "*" && p.all) ?
		p.all : p.getElementsByTagName(tagName);
	
	for(var i = 0, counter = 0; i < collection.length; i++){
		
		if(exp.test(collection[i].className))
			returnedCollection[counter++] = collection[i];
	}
	return returnedCollection;
	}
	catch(x){	alert("p = "+ p  +" tagName = "+ tagName+" k = "+k);throw x;
	}
}	

function getElementsFromClassList(el, tagName, classList){

    var returnedCollection = new Array(0);
    
    var collection = (tagName == "*" && el.all) ?
    	el.all : el.getElementsByTagName(tagName);
    var exps = [];
	for(var i = 0; i < classList.length; i++)
		exps[i] = getTokenizedExp(classList[i],"");
	for(var j = 0, coLen = collection.length; j < coLen; j++){
		kloop: for(var k = 0; k < classList.length; k++){
			if(exps[k].test(collection[j].className)){
				returnedCollection[returnedCollection.length] = collection[j];
				break kloop;
			}
		}
	}
    return returnedCollection;
}

function findAncestorWithClass(el, k) {
	
	if(el == null)
		return null;
	var exp = getTokenizedExp(k,"");
	for(var p = el.parentNode;p != null;){
	
		if( exp.test(p.className) )
			return p;
			
		p = p.parentNode;
	}
	return null;
}

function getDescendantById(p, id){
	var childNodes = p.all ? p.all : p.getElementsByTagName("*");
	for(var i = 0, len = childNodes.length; i < len; i++)
		if(childNodes[i].id == id)
			return childNodes[i];
	return null;
}

function removeClass(el, k){
	el.className = el.className.replace(getTokenizedExp(k, "g")," ").normalize();
}

function repaintFix(el){
	el.style.visibility = 'hidden';
	el.style.visibility = 'visible';
}
var trimExp = /^\s+|\s+$/g;
String.prototype.trim = function(){
		return this.replace(trimExp, "");
};
var wsMultExp = /\s\s+/g;
String.prototype.normalize = function(){
		return this.trim().replace(wsMultExp, " ");
};

var extExp = /(\.(.[^\.]+)$)/;

if(!Array.prototype.unshift)
	Array.prototype.unshift = function() {
        this.reverse();
        for(var i=arguments.length-1; i > -1; i--)
            this[this.length] = arguments[i];
        this.reverse();
        return this.length;
};

function fireOnload(fn) {
  // DOM					  	
	if(window.addEventListener) {
		window.addEventListener("load", fn, false);
	}
  // IE
	else if(window.attachEvent){
		window.attachEvent("onload", fn);
	}
  // Mac IE
	else {
		var oldFp = (document.onreadystatechange != null) ?
			document.onreadystatechange : function() {};
			
		document.onreadystatechange = function() {
			if(document.readyState == "interactive") {
				oldFp();
				fn();
			}
		};
	}
}

function Abas(ctr, UCName, categoryPath, maxLevel, firstCategory){
	//alert(ctr.id);
	//UCName = "_ctl1_"; 
	
	if (ctr == null)
	{
		return;
	}
	if( ctr.id == "aCompRap" )
	{
		//alert(UCName);
		compono.removeClassName('current',compono.getByID(UCName + 'dvInfUtl'));
		compono.removeClassName('current',compono.getByID(UCName + 'dvCompRap'));
		compono.toggleClassName('current',compono.getByID(UCName + 'dvCompRap'));

		compono.getByID(UCName + "dvTreevw").style.display = "block";
		
		if( compono.getByID(UCName + "dvTreevw").innerHTML == '')
		{
			compono.appendClassName('loading', compono.getByID(UCName + "dvTreevw"));
			
			var x = new Ajax.Request();
			var isIE = (navigator.appVersion.toLowerCase().indexOf("msie")!=-1)?true:false;
			if (isIE)
			{
				x.header.add("If-Modified-Since", new Date());
			}
			x.method = "GET";
			x.url = "./FastBuy.aspx";

			x.onComplete = function(){
				var s = this.request.responseText;
				//var re = /<div id="menu">((?:.|\s)*?)<\/div>$/im;
				
				compono.removeClassName('loading', compono.getByID(UCName + "dvTreevw"));
				compono.getByID(UCName + "dvTreevw").innerHTML = this.request.responseText;
				activateMenu('ID');
				if( categoryPath != undefined && categoryPath != '' )
				{
					SelectTreeNode( categoryPath, maxLevel, firstCategory);
				}
			}
			
			x.load();
		}
		
		compono.getByID(UCName + "dnInfo").style.display = "none";
		var tBar = compono.getByID("tableBar");
		if( tBar != null )
		{
			tBar.style.width = "192";
		}
	}
	else
	{
		compono.removeClassName('current',compono.getByID(UCName + 'dvCompRap'));
		
		compono.removeClassName('current',compono.getByID(UCName + 'dvInfUtl'));
		compono.toggleClassName('current',compono.getByID(UCName + 'dvInfUtl'));
		
		compono.getByID(UCName + "dvTreevw").style.display = "none";
		compono.getByID(UCName + "dnInfo").style.display = "block";
		var tBar = compono.getByID("tableBar");
		if( tBar != null )
		{
			tBar.style.width = "192";
		}
	}
}

/*
Objetivo: Selecionar determinado nodo
Parâmetros:
	- categoryPath: Níveis de exibicão sepado por Pipe, ex:  6|603|60301
	- maxLevel:  Nível máximo de exibição
	- firstCategory: Código da primeira categoria
*/
function SelectTreeNode(categoryPath, maxLevel, firstCategory)
{
	var arrCategoryPath = categoryPath.split("|");
	var objetToShow;
	var objectId;
	var nodeIndex;
	var isIE = (navigator.appVersion.toLowerCase().indexOf("msie")!=-1)?true:false;
	if(categoryPath != "")
	{
		var aCompRap = compono.getByID("aCompRap");
		if( aCompRap != null )  //Como este JS está sendo utilizado para menu de compra normal, este componente "aCompRap" pode ser Null  
		{						//e neste caso, não deve passar por este trecho de código
			//Abas(aCompRap, controlName);
		
			for(i=0; i < arrCategoryPath.length; i++)
			{

				objectId = "ID" + arrCategoryPath[i];
				
				if((i == arrCategoryPath.length - 1) && (arrCategoryPath.length == maxLevel))
				{
					//ie=0  another=1
					if (isIE)
						nodeIndex = 0;
					else
						nodeIndex = 1;
				}
				else
				{	
						nodeIndex = 0;
				}	
				//alert(objectId);
				objetToShow = document.getElementById( objectId ).childNodes[ nodeIndex ];					
				toggleMenu( objetToShow );					
			}
		}
	}
}

