// JavaScript Document

/*
* Calculate the offset of an object. 
* obj   - The reference object.
* attr - The type of offset to calculate (offsetLeft, offsetRight, offsetTop...).
* Returns the offset value.	
*/
function calculateOffset(obj,attr,stopAbsolute){
	var kb=0;
	var i=0;
	
  	while(obj){
  		if (stopAbsolute) {
  			if (i>0 && obj.style.position=="absolute") {
  				return kb;
  			}	
  		}
  		
		kb+=obj[attr];
    	obj=obj.offsetParent;
    	i++;
  	}
  	return kb
}

/**
* Used for the gallery pagination. Jumps to a page of the gallery.
* If the input page is not a positive integer or if it's bigger than the nbPages, we return false.
* The input page is retrieved from "beginCustom" input.
*/
function jumpToPage(url, attributes, nbPages, nb_img_per_page) {
	var customPage=document.getElementById("beginCustom");
	if (!customPage) return false;
	customPage=customPage.value;
	if (!customPage) return false;
	if (customPage>nbPages || customPage<=0 || !isPositiveInteger(customPage)) {
		return false;
	}
	else {
		customPage = (customPage-1)*nb_img_per_page;
		this.location.href=url+"?begin="+customPage+attributes;	
	}
}


function isPositiveInteger(s) {   
	var secondArg = false;
	
	if (isPositiveInteger.arguments.length > 1)
	secondArg = isPositiveInteger.arguments[1];
	
	return (isSignedInteger(s, secondArg) && ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}

function isSignedInteger (s) {   
	if (isEmpty(s))
	if (isSignedInteger.arguments.length == 1) return false;
	else return (isSignedInteger.arguments[1] == true);
	
	else {
		var startPos = 0;
		var secondArg = false;
		
		if (isSignedInteger.arguments.length > 1)
			secondArg = isSignedInteger.arguments[1];
		
		// skip leading + or -
		if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
			startPos = 1;
		
		return (isInteger(s.substring(startPos, s.length), secondArg))
	}
}

function isInteger (s) {
	var i;
	
	if (isEmpty(s))
		if (isInteger.arguments.length == 1) return 0;
		else return (isInteger.arguments[1] == true);
	
	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (!isDigit(c)) return false;
	}
	
	return true;
}

function isEmpty(s) {
	return ((s == null) || (s.length == 0))
}

function isDigit (c) {
	return ((c >= "0") && (c <= "9"))
}
