//the bubblehack forces Ie6 to load
function openBubbleHack (url, sBubbleButton, sBubble ) {
	document.getElementById( sBubble + 'Content' ).innerHTML = '<iframe src="' + url + '" class="iframebase" frameborder="0" id="category_selecor_iframe"></iframe>';
} // openBubbleHack

function openBubble(url, sBubbleButton, sBubble ) {
	
	if( !sBubble ) {
		sBubble = 'bubble01';
	} // if
	
	// get indentifier
	hits			= sBubbleButton.match( /([a-zA-Z]+)\_([0-9]+)\_([0-9]+)/ );
	if( !hits ) {
		return false;
	}
	
	var level		= hits[3];
	var identifier	= hits[2];
	
	var currentId 	= 0;
	var fieldName	= 'categorySelectorFieldId_' + hits[2] + '_' + hits[3];
	var bulkUpdate	= false;
	
	// check if the is an bulk update
	matchBulk = url.match( /bulk\=true/ );
	if( matchBulk ) {
		bulkUpdate = true;
		fieldName	= 'categorySelectorFieldIdBulk_' + hits[3];
	} // if
		
	// check if hidden field exists
	// if not create it
	if( document.getElementById( fieldName ) ) {
		currentId = document.getElementById( fieldName ).value;
	} // if
	else {
		bodyTag = document.body;
		hiddenField = document.createElement( 'input' );
		hiddenField.setAttribute( 'type' , 'hidden' );
		hiddenField.setAttribute( 'name' , fieldName );
		hiddenField.setAttribute( 'id' , fieldName );
		hiddenField.setAttribute( 'value' , '' );
		bodyTag.appendChild( hiddenField );
	} // else
	
	var iForceCategory			= url.match( /force_category\=([^\&]+)?/ );
	if( iForceCategory && '' == currentId ) {
		newId = iForceCategory[1];
	} // if
	else {
		if( '' == currentId ) {
			newId = 0;
		} // if
		else {
			newId = currentId;
		} // else
	} // else
	
	if( '%' == newId ) {
		newId = 0;
	} // if
	
	if( iForceCategory ) {
		var url = url.replace( /(force_category\=([^\&]+)?)/, 'force_category\=' + newId );
	} // if
	else {
		var url = url.replace( /(category_selector\.php\?)/, 'category_selector\.php\?force_category\=' + newId + '&' );
	} // else
	
	fnBubble(sBubble, sBubbleButton);
	
	window.setTimeout ("openBubbleHack('"+url+"','"+sBubbleButton+"','"+sBubble+"')",50);
	
 } // openBubble

function fnBubble(sBubble, sBubbleButton) {
	var bShowRight = true;
	var bShowTop = true;
	var sInfoClass = "";
	var iCorrectionHeight = 20;
	var iCorrectionHeightBottom = 20;
	fnBubbleHide();
	
	// Alten Node cachen und entfernen
	var sBubbleHTML = document.getElementById(sBubble).innerHTML;
	var elemOldParent = document.getElementById(sBubble).parentNode;
	elemOldParent.removeChild(document.getElementById(sBubble));
	// Neuen Node unter <body> erzeugen
	var elemDiv = document.createElement("div");
	elemDiv.id = sBubble;
	elemDiv.className = "bubble";
	document.body.appendChild(elemDiv);
	document.getElementById(sBubble).innerHTML = sBubbleHTML;
	
	// Window
	var iInnerHeight = document.body.clientHeight;
	var iInnerWidth = $(document).width(); 
	
	// Button
	if(!sBubbleButton) sBubbleButton = sBubble + "but";
	objButton = $("#" + sBubbleButton);
	var objOffsetBut = $(objButton).offset();
	var iHeightBut = $(objButton).height();
	var iWidthBut = $(objButton).width();
	
	// Bubble
	objBubble = $("#" + sBubble);
	var iHeightBubble = $(objBubble).height();
	var iWidthBubble = $(objBubble).width();

	// Offsets
	var iOffsetTop = objOffsetBut.top + iHeightBut;
	var iOffsetLeft = objOffsetBut.left;
	var iOffsetRight = objOffsetBut.left + iWidthBut;

	// Find Bubble-Pos
	if((iInnerHeight - iOffsetTop) < iHeightBubble) {
		bShowTop = false;
	} else {
		bShowTop = true;
	};
	
	if((iInnerWidth - iOffsetRight) < iOffsetRight) {
		bShowRight = false;
	} else {
		bShowRight = true;
	};

	// Set Bubble-Pos
	if(bShowTop == true) {
		iOffsetTop = iOffsetTop - iCorrectionHeight;
		if(bShowRight == true) {
			sInfoClass = "tiptoleftup";
		} else {
			sInfoClass = "tiptorightup";
		};
	} else {
		iOffsetTop = iOffsetTop - iHeightBubble + iCorrectionHeightBottom;
		if(bShowRight == true) {
			sInfoClass = "tiptoleftdown";
		} else {
			sInfoClass = "tiptorightdown";
		};
	};
	if(bShowRight == true) {
		iOffsetLeft = iOffsetRight;
		$("#" + sBubble + "> .bubbletop").removeClass("showleft");
		$("#" + sBubble + "> .bubblebody").removeClass("showleft");
		$("#" + sBubble + "> .bubblebot").removeClass("showleft");
	} else {
		iOffsetLeft = iOffsetLeft - iWidthBubble;
		if(iOffsetLeft < 0) iOffsetLeft = 0;
		$("#" + sBubble + "> .bubbletop").addClass("showleft");
		$("#" + sBubble + "> .bubblebody").addClass("showleft");
		$("#" + sBubble + "> .bubblebot").addClass("showleft");
	};

	// Anzeige
	objBubbleInfo = $("#" + sBubble + "Tip");
	objBubbleInfo.removeClass();
	objBubbleInfo.addClass(sInfoClass);
	var objCSS = { "top" : iOffsetTop, "left" : iOffsetLeft};
	$(objBubble).css(objCSS);
	fnShow(objBubble, "slow");
}

function fnBubbleHide(sSpeed) {
	fnHide(".bubble", "slow");
}


//---  Helper  ---
function fnShow(sName, sSpeed) {
	$(sName).show(sSpeed);
}
function fnHide(sName, sSpeed) {
	$(sName).hide(sSpeed);
}

