function colorInputs() {
  colorFormFields("input");
  colorFormFields("select");
  colorFormFields("textarea");
}

function colorFormFields(tagname) {
  dis=0;
  en=0;
  
  for(i=0;i<document.getElementsByTagName(tagname).length;i++)  {
      var elem=document.getElementsByTagName(tagname)[i];
      if(elem.disabled) {
        elem.style.backgroundColor="#A0A0A0";
        elem.style.color="#505050";
        dis++;
      } else {
        elem.style.backgroundColor="";
        elem.style.color="black";
        en++;
      }
    
  }
  
//   alert("disabled:" +dis+" enabled:"+en);

}



function checkClick(name,num) {
	if(document.forms[0].elements[name].length == undefined)
		document.forms[0].elements[name].click();
	else
		document.forms[0].elements[name][num].click();
}

function alertFormInfo()
{
	var forminfo="";
	var maxlines=20;
	var lines=0;
	for(var i=0;i<document.forms.length;i++)
	{
		for(var j=0;j<document.forms[i].elements.length;j++)
		{
			forminfo+=i+"=="+document.forms[i].name+" -> "+j+"==";
			if(document.forms[i].elements[j].name)
				forminfo+=document.forms[i].elements[j].name+"\n";
			else
				forminfo+="untitled ("+document.forms[i].elements[j].type+")\n";
				
			lines++;
			if(lines>=maxlines)
			{
				alert(forminfo);
				lines=0;
				forminfo="";
			}
		}
		if(lines)
		{
			alert(forminfo);
			lines=0;
			forminfo="";
		}
	}
	
}


function checkClickByValue(name,val) {
	if(document.forms[0].elements[name].length == undefined)
		document.forms[0].elements[name].click();
	else {
    for(i=0;i<document.forms[0].elements[name].length;i++)
      if(document.forms[0].elements[name][i].value==val) {
        document.forms[0].elements[name][i].click();
        break;
      }
  }
}

function validateDate(form_name,day_name, month_name,year_name) {
	day=document.forms[form_name].elements[day_name].value;
	month=document.forms[form_name].elements[month_name].value;
	year=document.forms[form_name].elements[year_name].value;
	
	var monthdays=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	
	if( (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)))
		monthdays[1]++;
	
	if(day > monthdays[month-1])
		return false;
	else
		return true;	
}

function futureDate(form_name,day_name, month_name,year_name) { 
	var now=new Date();
	
	day=int(document.forms[form_name].elements[day_name].value);
	month=int(document.forms[form_name].elements[month_name].value);
	year=int(document.forms[form_name].elements[year_name].value);
	
	return relativeFuture( now.getDate() , now.getMonth() , now.getFullYear() ,day,month,year  );
}

function relativeFutureForm(form_name,day_name1, month_name1, year_name1,day_name2, month_name2, year_name2) {
	with(document.forms[form_name]) {
		return relativeFuture	(
					int(elements[day_name1].value),int(elements[month_name1].value),int(elements[year_name1].value),
					int(elements[day_name2].value),int(elements[month_name2].value),int(elements[year_name2].value)
					);
	}				
}

function relativeFuture(day1, month1,year1,day2, month2,year2) {
	return	(year2  > year1) || 
		(year2 == year1 && month2 >  month1) || 
		(year2 == year1 && month2 == month1 && day2 >= day1);
}

function run_checkISSN() {
	var issn=prompt("input issn:");
	alert(checkISSN(issn));
}

function checkISSN(issn_str) {
	if(issn_str.length != 8 )
		return false;
	var sum=0;
	
	var x_code="X".charCodeAt(0);
	for(var i=0;i<8;i++) {
		c=issn_str.charCodeAt(i);
		
		if((  c < 48 || c > 58 ) && ( c != x_code))
			return false; 
		
		if(c==x_code)
			c=48+10;	// c=="X"? => c get pseudo charcode of 10
		
		sum+=(c - 48) * (8-i);		// weights: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
	}
	check=sum%11;
	
	return (check==0);
	
	/*
	for(var i=0;i<7;i++) {
		c=issn_str.charCodeAt(i);
		if(  c < 48 || c > 58 )
			return false; 
		sum+=(c - 48) * (8-i);		// weights: 8, 7, 6, 5, 4, 3, 2
	}
	sum=sum%11;
	check=issn_str.charAt(7);
	
	return ((sum==10 && check.toUpperCase()=="X") || (sum<10 && (check-sum)==0));
	*/

}

function checkISBN(isbn_str) {
	isbn_str=isbn_str.toUpperCase();
	
	x_code="X".charCodeAt(0);
	
	if(isbn_str.length==10) {
		var sum=0;
		for(var i=0;i<10;i++) {
			c=isbn_str.charCodeAt(i);
			
			if((  c < 48 || c > 58 ) && ( c != x_code))
				return false; 
			
			if(c==x_code)
				c=48+10;	// c=="X"? => c get pseudo charcode of 10
			
			sum+=(c - 48) * (10-i);		// weights: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
		}
		check=sum%11;
		
		return (check==0);
	
	} else {
	
		if(isbn_str.length==13) {
			// EAN algorithm
			sum=0;
// 			ws="";
			for(i=isbn_str.length-2;i>=0;i--) {
				c=isbn_str.charCodeAt(i);
				if(  c < 48 || c > 58 )
					return false; 	
				
				// alternating multiplay with 3 and 1, starting at last digit before check digit:
				// (isbn_str.length-2 - i ) is distance from last digit to process, 
				// +1 to start with 3
				
				w=( 1 + 2*((isbn_str.length-2 - i +1 ) % 2));

				sum+=(c-48) * w ; 
			}
			
			// calculate difference to next multiple of 10:
			sum=sum%10;
			if(sum!=0)
				sum=10-sum;
				
			return (sum - isbn_str.charAt(12))==0;
			
		} else {
			return false;
		}
	}
}

function page(formname , pagenum) {
  document.forms[formname].page.value=pagenum;
  document.forms[formname].submit();
}

// return the position of an object (obj)
function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
            curleft = obj.offsetLeft
            curtop = obj.offsetTop
            while (obj = obj.offsetParent) {
                    curleft += obj.offsetLeft
                    curtop += obj.offsetTop
            }
    }
    return [curleft,curtop];
}
    
// returns the number of pixels the page is scrolled (x and y)
function getOffset() {
  var x,y;
  if (self.pageYOffset) // all except Explorer
  {          
					x = self.pageXOffset;
          y = self.pageYOffset;					
  }
  else if (document.documentElement && document.documentElement.scrollTop)
          // Explorer 6 Strict
  {
          x = document.documentElement.scrollLeft;
          y = document.documentElement.scrollTop;
  }
  else if (document.body) // all other Explorers
  {
          x = document.body.scrollLeft;
          y = document.body.scrollTop;
					if(document.getElementById("content_container"))
					{
						x=document.getElementById("content_container").scrollLeft;
						y=document.getElementById("content_container").scrollTop;
					}
  }	
  return [x,y];
}

// move the table row (needs to have id "header_row") to make sure it is always visible, 
// thus overlapping some table rows if user scrolls down
function moveTH(glob_offset) {
  var row=document.getElementById('header_row');
	if(!row)
		return;
  var cells=row.getElementsByTagName("th");
  
  if(!glob_offset)
    glob_offset=0;
  
  var headers=row.getElementsByTagName("th");
  var minoff=findPos(headers[0])[1];
  var mini=0;
  pos_str=findPos(headers[0])[1];
  for(i=1;i<headers.length;i++) {
    pos_str=pos_str+" "+findPos(headers[i])[1];
    
    if(findPos(headers[i])[1] < minoff) {
      mini=i;
      minoff=findPos(headers[i])[1];
    }
  }
  
  // alert(mini +  " " + pos_str);
  
  var first_th=headers[mini];

  
  var yoff=getOffset()[1] + glob_offset;
  yoff=Math.max(0,yoff  - findPos(first_th)[1]);



  // move header if has to be moved below its original position, or if it is not at its original position 
  // (i.e. if it has to moved up to original position)
  if(yoff>0 || cells[0].getElementsByTagName("span")[0].style.top!=0) {
    moveHeaderBG(glob_offset);
    for(i=0;i<cells.length;i++) {
      node=cells[i].getElementsByTagName("span")[0];
      node.style.position="relative";
      node.style.top=yoff+"px";
      node.style.zIndex="20";
    }
  }
}

// makes sure that the picture being background of table header is always behind table header
// image needs to have id "bg", header-row must have id "header_row"
function moveHeaderBG(glob_offset) {
  if(!glob_offset)
    glob_offset=0;
    
//   glob_offset=0;
  
  var row=document.getElementById("header_row");
  var img=document.getElementById("bg");
  
  var headers=row.getElementsByTagName("th");
  
  /* find header with minimal offset */
  var minoff=findPos(headers[0])[1];
  var mini=0;
  pos_str=findPos(headers[0])[1];
  for(i=1;i<headers.length;i++) {
    pos_str=pos_str+" "+findPos(headers[i])[1];
    
    if(findPos(headers[i])[1] < minoff) {
      mini=i;
      minoff=findPos(headers[i])[1];
    }
  }
//   alert(mini);
//   mini=0;
//   minoff=findPos(headers[mini])[1];
    
  var addheight=100;    /* additional height the header is enlarged by to the top */
  
  var first_th=headers[mini];
  
  
  var yoff=getOffset()[1] + glob_offset;
  yoff=Math.max(0 ,yoff  - findPos(first_th)[1] );
  
  img.style.position="absolute";
  
  img.style.height=row.getElementsByTagName("th")[0].offsetHeight + glob_offset+addheight+"px";
  
  img.style.top   =findPos(first_th)[1] + yoff -2 - glob_offset -addheight + "px";

  
  img.style.width =row.offsetWidth+0+"px";	
  img.style.left  =findPos(row.getElementsByTagName("th")[0])[0]+"px";
	
  
//   alert(img.style.height+" "+(row.offsetHeight+glob_offset)+"px");

}

function prepareMovingHeader(glob_offset) {
  var cells=document.getElementById("header_row").getElementsByTagName("th");
  if(!glob_offset)
    glob_offset=0;
  
  document.getElementById("bg").style.position="absolute";
  document.getElementById("bg").style.zIndex="2";
 
  moveHeaderBG(glob_offset);
  
  
  for(i=0;i<cells.length;i++){
    node=cells[i].getElementsByTagName("span")[0];
    node.style.position="relative";
    node.style.top="0px";
    node.style.zIndex="20";
  }
}

