var fadeBox = new Box;
BalloonConfig(fadeBox,'GBox');
fadeBox.bgColor = 'black';
fadeBox.borderStyle = 'none';
fadeBox.delayTime = 1250;
fadeBox.allowFade = true;
fadeBox.fadeIn = 250;

var fadeBox2 = new Box;
BalloonConfig(fadeBox2,'GBox');
fadeBox2.bgColor = 'black';
fadeBox2.borderStyle = 'none';
fadeBox2.delayTime = 1250;
fadeBox2.allowFade = true;
fadeBox2.fadeIn = 250;
fadeBox2.images = 'images/GBubble';  

var fadeBoxLog = new Box;
BalloonConfig(fadeBoxLog,'GBox');
fadeBoxLog.bgColor = '#202020';
fadeBoxLog.opacity     = 1;
fadeBoxLog.delayTime = 1250;
fadeBoxLog.allowFade = true;
fadeBoxLog.fadeIn = 250;
fadeBoxLog.vOffset = -10;
fadeBoxLog.images = 'images/GBubble';  
fadeBoxLog.hOffset = -250;

var __isIE =  navigator.appVersion.match(/MSIE/);
var __userAgent = navigator.userAgent;
var __isFireFox = __userAgent.match(/firefox/i);
var __isFireFoxOld = __isFireFox && (__userAgent.match(/firefox\/2./i) || __userAgent.match(/firefox\/1./i));
var __isFireFoxNew = __isFireFox && !__isFireFoxOld;


function __parseBorderWidth(width) {
    var res = 0;
    if (typeof(width) == "string" && width != null && width != "" ) {
        var p = width.indexOf("px");
        if (p >= 0) {
            res = parseInt(width.substring(0, p));
        }
        else {
     		//do not know how to calculate other values (such as 0.5em or 0.1cm) correctly now
    		//so just set the width to 1 pixel
            res = 1; 
        }
    }
    return res;
}


//returns border width for some element
function __getBorderWidth(element) {
	var res = new Object();
	res.left = 0; res.top = 0; res.right = 0; res.bottom = 0;
	if (window.getComputedStyle) {
		//for Firefox
		var elStyle = window.getComputedStyle(element, null);
		res.left = parseInt(elStyle.borderLeftWidth.slice(0, -2));  
		res.top = parseInt(elStyle.borderTopWidth.slice(0, -2));  
		res.right = parseInt(elStyle.borderRightWidth.slice(0, -2));  
		res.bottom = parseInt(elStyle.borderBottomWidth.slice(0, -2));  
	}
	else {
		//for other browsers
		res.left = __parseBorderWidth(element.style.borderLeftWidth);
		res.top = __parseBorderWidth(element.style.borderTopWidth);
		res.right = __parseBorderWidth(element.style.borderRightWidth);
		res.bottom = __parseBorderWidth(element.style.borderBottomWidth);
	}
   
	return res;
}

//returns absolute position of some element within document
function getAbsolutePos(element) {
	var res = new Object();
	res.x = 0; res.y = 0;
	if (element !== null) {
		res.x = element.offsetLeft;
		res.y = element.offsetTop;
    	
		var offsetParent = element.offsetParent;
		var parentNode = element.parentNode;
		var borderWidth = null;

		while (offsetParent != null) {
			res.x += offsetParent.offsetLeft;
			res.y += offsetParent.offsetTop;
			
			var parentTagName = offsetParent.tagName.toLowerCase();	

			if ((__isIE && parentTagName != "table") || (__isFireFoxNew && parentTagName == "td")) {		    
				borderWidth = __getBorderWidth(offsetParent);
				res.x += borderWidth.left;
				res.y += borderWidth.top;
			}
		    
			if (offsetParent != document.body && offsetParent != document.documentElement) {
				res.x -= offsetParent.scrollLeft;
				res.y -= offsetParent.scrollTop;
			}

			//next lines are necessary to support FireFox problem with offsetParent
   			if (!__isIE) {
    			while (offsetParent != parentNode && parentNode !== null) {
					res.x -= parentNode.scrollLeft;
					res.y -= parentNode.scrollTop;
					
					if (__isFireFoxOld) {
						borderWidth = _getBorderWidth(parentNode);
						res.x += borderWidth.left;
						res.y += borderWidth.top;
					}
    				parentNode = parentNode.parentNode;
    			}    
			}

   			parentNode = offsetParent.parentNode;
    		offsetParent = offsetParent.offsetParent;
		}
	}
    return res;
}

function changeCommentState(remove){
	if(activeCommentID!='revtowrite'){
		document.getElementById('revtowrite').style.display='block';
		document.getElementById('mcomtitle').focus();
		if(activeCommentID!='') document.getElementById(activeCommentID).style.display='none';
		activeCommentID='revtowrite';
	}
	else {
		document.getElementById('revtowrite').style.display='none';
		activeCommentID='';
	}
	if(remove!='') {
		document.getElementById('mcomtitle').value='';
		document.getElementById('mcomcomment').value='';
	}
}

function changeReplyState(id_comment,remove){
	var divid='rep_comment'+id_comment;
	var formname=('reply_form_'+id_comment);
	if(activeCommentID!=divid){
		document.getElementById(divid).style.display='block';
		eval('document.forms.'+formname).comment.focus();
		if(activeCommentID!='') document.getElementById(activeCommentID).style.display='none';
		activeCommentID=divid;
	}
	else {
		document.getElementById(divid).style.display='none';
		activeCommentID='';
	}
	if(remove!='') {
		eval('document.forms.'+formname).comment.value='';
	}
}

function revalidate_reviews(id,current){
	var nval=parseInt(document.getElementById('pageReviews').value);
	if(!isNaN(nval)){
		if(nval<=0) nval=1;
		document.location='details.php?id='+id+'&p='+nval+'#revSection';
	}else {
		document.getElementById('pageReviews').value=current;
	}
}

function revalidate_categories(id,current){
	var nval=parseInt(document.getElementById('pageReviews').value);
	if(!isNaN(nval)){
		if(nval<=0) nval=1;
		document.location='categories.php?catID='+id+'&p='+nval;
	}else {
		document.getElementById('pageReviews').value=current;
	}
}

function revalidate_recentadditions(current){
	var nval=parseInt(document.getElementById('pageReviews').value);
	if(!isNaN(nval)){
		if(nval<=0) nval=1;
		document.location='recentadditions.php?p='+nval;
	}else {
		document.getElementById('pageReviews').value=current;
	}
}

function revalidate_popular(current){
	var nval=parseInt(document.getElementById('pageReviews').value);
	if(!isNaN(nval)){
		if(nval<=0) nval=1;
		document.location='popular.php?p='+nval;
	}else {
		document.getElementById('pageReviews').value=current;
	}
}

function revalidate_searchresults(searchkey,current){
	var nval=parseInt(document.getElementById('pageReviews').value);
	if(!isNaN(nval)){
		if(nval<=0) nval=1;
		document.location='searchresults.php?searchkey='+searchkey+'&p='+nval;
	}else {
		document.getElementById('pageReviews').value=current;
	}
}

function toggle_reviews(divreview,arrowDiv){
	if(document.getElementById(divreview).style.display=='none'){
		document.getElementById(divreview).style.display='block';
		document.getElementById(arrowDiv).src="images/arrow-down.png";
	}else {
		document.getElementById(divreview).style.display='none';
		document.getElementById(arrowDiv).src="images/arrow.png";
	}
}