// math
function roundFixed(x, digits)
{
  if(x.toFixed)
    return x.toFixed(digits);
  else
    return parseInt(x*Math.pow(10, digits) + 0.5) / Math.pow(10, digits);
}

// browser
function getWindowSize()
{
  var myWidth = 0, myHeight = 0;
  if(typeof(window.innerWidth) == 'number')
  {
    // Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  }
  else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
  {
    // IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  }
  else if(document.body && (document.body.clientWidth || document.body.clientHeight))
  {
    // IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return [myWidth, myHeight];
}

function scrollToObj(sTargetId)
{
  document.getElementById(sTargetId).scrollIntoView();
}

function getScrollXY()
{
  var scrOfX = 0, scrOfY = 0;
  if(typeof(window.pageYOffset) == 'number') 
  {
    // Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  }
  else if(document.body && (document.body.scrollLeft || document.body.scrollTop))
  {
    // DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  }
  else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
  {
    // IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [scrOfX, scrOfY];
}

var scrollInterval;
var nTargetYPos;
var nCurYPos;
var nPrevYPos;
var nDeltaYPos;
function scrollToObjSmooth(sTargetId, nOffset)
{
  if(typeof nOffset == "undefined")
    nOffset = 0;
  
  if(typeof scrollInterval != "undefined")
    window.clearInterval(scrollInterval);

  var target = document.getElementById(sTargetId);
  nTargetYPos = findPosY(target) + nOffset;
  nPrevYPos = -1;
  nCurYPos = getScrollXY()[1];
  //nDeltaYPos = nTargetYPos - nCurYPos;
  nDeltaYPos = 60;
  
  scrollInterval = window.setInterval("animScroll()", 20);
}

function animScroll()
{
  if(nCurYPos > nTargetYPos - 100 && nDeltaYPos > 4)
    nDeltaYPos *= 0.5;
  if(nDeltaYPos < 5)
    nDeltaYPos = 5;
  nCurYPos += nDeltaYPos;
  window.scrollTo(0, nCurYPos);
  
  var nYScrollPos = getScrollXY()[1];

  if(nCurYPos >= nTargetYPos || nYScrollPos == nPrevYPos)
    window.clearInterval(scrollInterval);
	
  nPrevYPos = nYScrollPos;
}

// get element position
function findPosX(obj)
{
  var curleft = 0;
  if(obj.offsetParent)
  {
    while(1) 
    {
      curleft += obj.offsetLeft;
      if(!obj.offsetParent)
        break;
      obj = obj.offsetParent;
    }
  }
  else if(obj.x)
    curleft += obj.x;
  return curleft;
}

function findPosY(obj)
{
  var curtop = 0;
  if(obj.offsetParent)
  {
    while(1)
    {
      curtop += obj.offsetTop;
      if(!obj.offsetParent)
        break;
      obj = obj.offsetParent;
    }
  }
  else if(obj.y)
    curtop += obj.y;
  return curtop;
}

// YUI calendar
function setCalendarFormat(cal)
{
  // correct to german format: dd.mm.yyyy, dd.mm, mm.yyyy
  cal.cfg.setProperty("DATE_FIELD_DELIMITER", ".");
  cal.cfg.setProperty("MDY_DAY_POSITION", 1);
  cal.cfg.setProperty("MDY_MONTH_POSITION", 2);
  cal.cfg.setProperty("MDY_YEAR_POSITION", 3);
  cal.cfg.setProperty("MD_DAY_POSITION", 1);
  cal.cfg.setProperty("MD_MONTH_POSITION", 2);

  
  // set german labels
  cal.cfg.setProperty("MONTHS_SHORT",   ["Jan", "Feb", "M\u00E4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]);
  cal.cfg.setProperty("MONTHS_LONG",    ["Januar", "Februar", "M\u00E4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]);
  cal.cfg.setProperty("WEEKDAYS_1CHAR", ["S", "M", "D", "M", "D", "F", "S"]);
  cal.cfg.setProperty("WEEKDAYS_SHORT", ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]);
  cal.cfg.setProperty("WEEKDAYS_MEDIUM",["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"]);
  cal.cfg.setProperty("WEEKDAYS_LONG",  ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]);
}

function IsValidEmail(str) {
  var at="@";
  var dot=".";
  var lat=str.indexOf(at);
  var lstr=str.length;
  var ldot=str.indexOf(dot);
  if(lstr < 1)
    return false;
  else if(str.indexOf(at) == -1)
    return false;
  else if(str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr)
    return false;
  else if(str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr)
	return false;
  else if(str.indexOf(at, (lat+1)) != -1)
    return false;
  else if(str.substring(lat-1, lat) == dot || str.substring(lat + 1, lat + 2) == dot)
    return false;
  else if(str.indexOf(dot, (lat + 2)) == -1)
    return false;
  else if(str.indexOf(" ") != -1)
    return false;
  else if(str.lastIndexOf(dot) == lstr - 1)
    return false
  else
    return true;
}
