// 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);
}

// scrolling
function scrollToObj(sTargetId)
{
  document.getElementById(sTargetId).scrollIntoView();
}

var scrollInterval;
var nTargetYPos;
var nCurYPos;
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;
  nCurYPos = window.pageYOffset;
  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);

  if(nCurYPos >= nTargetYPos)
    window.clearInterval(scrollInterval);
}

// 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;
}