var d = document;
var i;

// cssSpprt
// ------------------------

function cssSpprt(){
	
	try{
		
		this.bver = Bver();
		
	} catch(e){
		
		alert('cssSpprt requires Bver');
		
	}
	
}

cssSpprt = new cssSpprt;

cssSpprt.testAlert = function(){
	
	alert('cssSpprt > testAlert()');
	
}

cssSpprt.getWinW = function(){
			
	return d.body.clientWidth;
	
}

cssSpprt.getObjIndex = function(objID, dataSet){
			
	var foundObjAt = -1;
	
	var dataLen = dataSet.length;
	var dataIndex = 0;
	
	while(dataIndex < dataLen){
		
		if (dataSet[dataIndex].objID == objID) {
		
			foundObjAt = dataIndex;
			break;
				
		}
		dataIndex++;
		
	}
	
	return foundObjAt;
	
}

cssSpprt.addEvent = function(evtContext, evtName, func){

	if(this.bver.ie) {

		evtContext.attachEvent('on' + evtName, func);

	} else if(this.bver.nav){

		evtContext.addEventListener(evtName, func, false);

	}

}

// cssSpprt > minW
// ------------------------

cssSpprt.minW = new Object();
cssSpprt.minW.parent = cssSpprt;
cssSpprt.minW.regdObjs = new Array();

cssSpprt.minW.enable = function(){

	cssSpprt.addEvent(window, 'resize', cssSpprt.minW.doResizeCheck);

	if(cssSpprt.bver.nav){
		
		cssSpprt.minW.ffLastClientSize = cssSpprt.getWinW();
		window.setInterval('cssSpprt.minW.ffWinResizedCheck()', 1000);
		
	}
	
}

cssSpprt.minW.ffWinResizedCheck = function(){
	
	// addDbugMsg('cssSpprt.minW.ffLastClientSize: ' + cssSpprt.minW.ffLastClientSize);
	
	if(cssSpprt.minW.ffLastClientSize != cssSpprt.getWinW()){
		
		cssSpprt.minW.doResizeCheck();
		cssSpprt.minW.ffLastClientSize = cssSpprt.getWinW();
		
	}
	
}

cssSpprt.minW.addMinW = function(objID, minW){
			
	// build the info object
	var objHldr = new Object();
	objHldr.objID = objID;
	objHldr.obj = d.getElementById(objID);
	objHldr.minW = minW;
	objHldr.baseStyle = getCssFromSelecter('#' + objID);
	
	if (cssSpprt.getObjIndex(objHldr.objID, this.regdObjs) == -1) {
	
		this.regdObjs.push(objHldr);
		
	}
	
	cssSpprt.minW.doResizeCheck();
	
}

cssSpprt.minW.doResizeCheck = function(){
	
	var clientW = cssSpprt.getWinW();
	
	var dataSet = cssSpprt.minW.regdObjs;
	var dataLen = dataSet.length;
	var dataIndex = 0;
	
	while(dataIndex < dataLen){
		
		var objHldr = dataSet[dataIndex];
		
		if(!objHldr.atMinW) objHldr.atMinW = false;
		
		if(clientW < objHldr.minW){
			
			if(objHldr.atMinW == true) return;

			objHldr.obj.style.width = objHldr.minW + 'px';
			objHldr.atMinW = true;
			
		} else {
			
			if(objHldr.atMinW == false) return;
			
			try{
				objHldr.obj.style.width = objHldr.baseStyle.style['width'];
				objHldr.atMinW = false;
			} catch(e){}
			
		}
		
		dataIndex++;
		
	}
	
}

// cssSpprt > relPos
// ------------------------
cssSpprt.relPos = new Object();
cssSpprt.relPos.parent = cssSpprt;
cssSpprt.relPos.regdObjs = new Array();

cssSpprt.relPos.addRel = function(refElmtID, trgtElmtID, relType){

	this.regdObjs.push(arguments);

}

cssSpprt.relPos.findY = function(refElmt){

	var currLvl = refElmt;
	var currY = 0;
	
	while(currLvl.offsetParent){

		currY += currLvl.offsetTop;
		currLvl = currLvl.offsetParent;

	}
	
	return currY;

}

cssSpprt.relPos.positionBelow = function(refElmtID, trgtElmtID){

	var refElmt = document.getElementById(refElmtID);
	var refElmtH = refElmt.clientHeight;
	var refElmY = this.findY(refElmt);
	
	trgtElmtID.style.top = refElmtH + refElmY + 'px';

}

cssSpprt.relPos.processObjs = function(){
	
	var objIndex = this.regdObjs.length;
	
	while(--objIndex > -1){
		
		var thisRef = this.regdObjs[objIndex][0];
		var thisTrgt = this.regdObjs[objIndex][1];
		var thisRel = this.regdObjs[objIndex][2];
		
		// process vertical relationships
		switch (thisRel) {
		
			case 'a':	// above
			case 't':	// top
			case 'b':	// bottom
				
				break;
				
			case 'u':	// under
				
				this.positionBelow(thisRef, thisTrgt);
				break;
		
		}

	}

}

// --------------------------------------------------------------
// END cssSpprt
// --------------------------------------------------------------

function matchCssHeights(refElementName, trgtElementName){

	var refElement = d.getElementById(refElementName);
	var trgtElement = d.getElementById(trgtElementName);
	
	// compensate for padding heights
	trgtElementPdng = getCssPaddingH(trgtElementName);
	refElementPdng = getCssPaddingH(refElementName);
	
	bW = 0;
	
	// compensate for border heights
	try{
		
		// get body content bottom border width
		var refElementBrdr = getCssFromSelecter('#' + refElementName).style.borderBottom;

		if(refElementBrdr){
			
			refElementBrdr = refElementBrdr.split(' ');
			for(i = 0; i < refElementBrdr.length; i++){
				
				if (refElementBrdr[i].indexOf('px') != -1) {
				
					var bW = parseInt(refElementBrdr[i].replace(/px/g, ''));
						
				}
				
			}
			
		}
		
	} catch(e){}
	
	// set the target element height
	trgtElement.style.height = refElement.offsetHeight - (trgtElementPdng - refElementPdng) - bW + 'px';
	
}

function getCssPaddingH(selName){

	var pdgReturn = 0;
	
	try{
		
		var thisCssRule = getCssFromSelecter('#' + selName).style;
		
		// try for shorthand padding rule
		var pdgStr = thisCssRule.padding;

		if(pdgStr){
			
			var pdgStr = pdgStr.replace(/px/g, '');
			var pdgArr = pdgStr.split(' ');
			
			var pdgReturn = parseInt(pdgArr[0]);
			
			if(pdgArr[2] != undefined){
				
				pdgReturn += parseInt(pdgArr[2]);
				
			} else {
				
				pdgReturn *= 2;
				
			}
			
		}
		
	} catch(e){}
	
	try{
		
		// try for padding-top rule
		var pdgStr = thisCssRule.paddingTop;
		
		if(pdgStr){
			
			var pdgStr = pdgStr.replace(/px/g, '');
			var pdgReturn = parseInt(pdgStr);
			
		}
		
	} catch(e){}
	
	try{
		
		// try for padding-top rule
		var pdgStr = thisCssRule.paddingBottom;
		
		if(pdgStr){
			
			var pdgStr = pdgStr.replace(/px/g, '');
			var pdgReturn = pdgReturn + parseInt(pdgStr);
			
		}
		
	} catch(e){}
	
	return pdgReturn;
	
}

function getCssFromSelecter(selName){
	
	var foundStyle;
	var styleList = (document.all) ? document.styleSheets[0].rules : document.styleSheets[0].cssRules;
	
	for(i = 0; i < styleList.length; i++){
		
		if(styleList[i].selectorText == selName) foundStyle = styleList[i];
		
	}
	
	return foundStyle;
	
}














