function isString(input){
  return typeof(input)=='string';
}

// rudimentary check, if string looks like datestring
function isDateString(str)
{
  if (str == undefined || !isString(str))
    return false;
  //var regexp = /\d{2}\.\d{2}\.\d{4}/;
  var regexp = /^((0|1|2)\d|3(0|1))\.(0\d|1(0|1|2))\.(19|20)\d{2}$/;
  if (str.match(regexp) == null)
    return false;
  return true
}


function parseDate(date)
{
  if (!isDateString(date))
    return null;
  var xDate = date.split(".");
  xDate[1] = parseInt(xDate[1], 10)-1;
  //C.log(new Date(xDate[2], xDate[1], xDate[0]));
  return (new Date(xDate[2], xDate[1], xDate[0]));
}

function dateStr(date)
{
  var xdate = (date.getDate() < 10 ? "0" : "") + date.getDate();
  var xmonth = ((date.getMonth()+1) < 10 ? "0" : "") + (date.getMonth()+1);
  var res = "" + xdate +"."+ xmonth +"."+date.getFullYear();
  return (res);
}


function dateAddDays(adate, days)
{

        if (adate) {
//          C.log("DATE<<<<<<<<<<<<:");
//          C.log(adate);
          days = parseInt(days, 10);
          var day = days * 1000 * 60 * 60 * 24
          var retDate = new Date(adate.getTime() + day );
          var delta = retDate.getTimezoneOffset() - adate.getTimezoneOffset();
          if (delta != 0)
            {
//            C.log("TIMEZONE DIFFER: " + delta);
            retDate = new Date(retDate.getTime() + delta * 60 * 1000)
            C.log(retDate);
            }

          return retDate;
        }
        else
          return null;
}


var XdateStr = dateStr;

function diffInYears(date1, date2)
{
  if (date1 == null || date2 == null)
    return;
  
  if (date1.getTime() < date2.getTime)
  {
    var tmp = date1;
    date1 = date2;
    date2 = tmp;
  }

  var ds1 = XdateStr(date1).split(".");
  var ds2 = XdateStr(date2).split(".");
  var delta = [];
  for (var i = 0; i < ds1.length; i++)
  {
    ds1[i] = parseInt(ds1[i], 10);
    ds2[i] = parseInt(ds2[i], 10);
    delta[i] = ds1[i] - ds2[i];
  }

  if (delta[1] < 0)
    delta[2]--;
  if (delta[1] == 0)
    if (delta[0] < 0)
      delta[2]--;
  return delta[2];
}


// usage: formatPrice( number [, number]  [, bool]  )
function formatPrice(zahl, k, fix) {
  if(!k) k = phpConst.numDecimalPlaces;
  var neu = '';
  // Runden
  var f = Math.pow(10, k);
  zahl = '' + parseInt( zahl * f + (.5 * (zahl > 0 ? 1 : -1)) ) / f ;
  // Komma ermittlen
  var idx = zahl.indexOf('.');
  // fehlende Nullen einf?gen
  if(fix) {
    zahl += (idx == -1 ? '.' : '' )
    + f.toString().substring(1);
  }
  // Nachkommastellen ermittlen
  idx = zahl.indexOf('.');
  if( idx == -1) idx = zahl.length;
  else neu = phpConst.decDelimiter + zahl.substr(idx + 1, k);

  // Tausendertrennzeichen
  while(idx > 0)    {
    if(idx - 3 > 0)
      neu = phpConst.thsDelimiter + zahl.substring( idx - 3, idx) + neu;
    else
      neu = zahl.substring(0, idx) + neu;
    idx -= 3;
  }
  return neu;
}

function getSlideManager() {
  var $sm = undefined;
  if ($("div.tx-byebye-pi1").length > 0)
    $sm = $("#bookingArea").amGetSlideManager();
  if ($("div.tx-byebye-pi3").length > 0)
    $sm = $("#bookingArea").cbcGetSlideManager();
  if ($("div.tx-byebye-pi5").length > 0)
    $sm = $("#bookingArea").sfcGetSlideManager();
  return($sm);
}

function getStepManager() {
  var $sm = undefined;
  if ($("div.tx-byebye-pi1").length > 0)
    $sm = $("#bookingArea").amGetStepManager();
  if ($("div.tx-byebye-pi3").length > 0)
    $sm = $("#bookingArea").cbcGetStepManager();
  if ($("div.tx-byebye-pi5").length > 0)
    $sm = $("#bookingArea").sfcGetStepManager();
  return($sm);
}


function getShowResponse() {
  var sr = undefined;
  if ($("div.tx-byebye-pi1").length > 0)
    sr = $("#bookingArea").amShowResponse;
  if ($("div.tx-byebye-pi3").length > 0)
    sr = $("#bookingArea").showResponse;
  if ($("div.tx-byebye-pi5").length > 0)
    sr = $("#bookingArea").sfcShowResponse;
  return sr;
}

function getSelectionURL()
{
  var cSK = phpConst.engineKind;
  var selectionURL = "http://" + window.location.hostname; // + phpConst.config.path_prefix;
  var pathName = '/suchen/individualreise.html';
  var ss = getStepManager().stepStatus;
  switch (ss[phpConst.searchParam.engineKind])
  {
    case cSK.individualTravel:
      pathName = '/suchen/individualreise.html';
      break;
    case cSK.flightOnly:
      pathName = '/suchen/flugpur.html';
      break;
    case cSK.hotelOnly:
      pathName = '/suchen/hotelsolo.html';
      break;
    case cSK.flyDrive:
      pathName = '/suchen/flydrive.html';
      break;
  }
  selectionURL += pathName;
  return (selectionURL);
}

function isUIblocking() {
  var $sm = getSlideManager();
  return ($sm.isAnimRunning() || $sm.isErrorShowing() || $sm.isLoadingShowing() || $sm.isUserBlock());
}


function category2value(cat)
{
  switch(cat)
  {
    case '1':  return 1;
    case '1+': return 1.5;
    case '2':  return 2.0;
    case '2+': return 2.5;
    case '3':  return 3.0;
    case '3+': return 3.5;
    case '4':  return 4.0;
    case '4+': return 4.5;
    case '5':  return 5.0;
    case '5+': return 5.5;
    case '6':  return 6.0;
    case '6+': return 6.5;
    default: return -1;
  }
}

function value2category(value)
{
  switch(value)
  {
    case 1.0:  return '1';
    case 1.5:  return '1+';
    case 2:    return '2';
    case 2.5:  return '2+';
    case 3:    return '3';
    case 3.5:  return '3+';
    case 4:    return '4';
    case 4.5:  return '4+';
    case 5:    return '5';
    case 5.5:  return '5+';
    case 6:    return '6';
    case 6.5:  return '6+';
    default:   return '-1';
  }
}


(function() {
  /**
	 * Adds a given method under the given name
	 * to the Date prototype if it doesn't
	 * currently exist.
	 *
	 * @private
	 */
  function add(name, method) {
    if( !Date.prototype[name] ) {
      Date.prototype[name] = method;
    }
  };

  /**
	 * Checks if the year is a leap year.
	 */
  add("getDay2", function() {
    var d = this.getDay();
    return ((d+6)%7);
  });
})();