﻿var obj = null;
var golfcourses = false;
function checkHover() {
  if (obj) {
    obj.find('ul').hide();
    obj.find('.iframe').hide();
  } //if
} //checkHover

Date.format = 'dd mmm yyyy';

var truncatecount = 850;

$(function(){

$('#TeeTimes').hide();
$('#TeeTimes').before("<div id='TeeTimeMsg'>Please select your date of travel.</div>");

var selectList = "<option>No Golf</option><option>0700 - 0900</option><option>0900 - 1100</option><option>1100 - 1300</option><option>1300 - 1500</option><option>1500 - 1700</option>";
var i=0;
function teetimeFormChange() {  
  if($('#dateOfTravel').val() !== '' && $('#numberOfNights').val() !== '' && $('#numberOfRounds').val() !== ''){
    thisTeeSelect = "<table class='basictbl' cellpadding='0'>";
    var thisDate = Date.fromString($('#dateOfTravel').val());
    //alert(thisDate.formatDate('D dS M'));
    var thisCourses;
    var thisCoursesList;
    if (golfcourses){
        $("#GolfCoursesList li").each(function () {
          thisCoursesList += "<option>"+$(this).html()+"</option>";
        });      
    }
    for (i=0;i<=Number($('#numberOfNights').val());i++)
    {
      var thisLoopDate = new Date();
      thisLoopDate.setDate(thisDate.getDate() + i);
      //alert(thisLoopDate);
      thisTeeSelect += "<tr><td>"+thisLoopDate.formatDate('D dS M Y')+"</td><td class='noborder' style='width:60%'>";
      if (golfcourses){
        thisTeeSelect += "<select name='teetimecourse_"+thisLoopDate.formatDate('d_M_Y')+"' style='width:100%'>"+thisCoursesList+"</select><br />";
      }
      thisTeeSelect += "<select name='teetime_"+thisLoopDate.formatDate('d_M_Y')+"' style='width:100%'>"+selectList+"</select></td></tr>";
      //<td class='noborder'><a href='javascript:addTeeTime(this);'><img src='/resources/userfiles/icons/add.gif' /></a></td>
    }
    thisTeeSelect += "</table>";
    $('#TeeTimeMsg').html("<div id='selectboxes'><strong>Select your Tee Times</strong><br /></div>");
    $('#selectboxes').after(thisTeeSelect);
  }
}
$("#EnquiryForm #dateOfTravel").bind("change",teetimeFormChange);
$("#EnquiryForm #numberOfNights").bind("change",teetimeFormChange);
$("#EnquiryForm #numberOfRounds").bind("change",teetimeFormChange);

// Venue pages - more less links
$('#venueCol1').truncate( truncatecount, {
    chars: /\s/,
    trail: [ " ( <a href='#more' class='truncate_show'>more</a> )", " ( <a href='#less' class='truncate_hide'>less</a> )" ]
});

$("input.remove_title").attr("title", "");

// region list accordian
$('#regionlist .title').each(function(){
    $(this).find('a.l').bind (
      "click",
        function(){
          $(".title>ul").each(function(){
            $(this).hide();
            $(this).parent().removeClass("current");
          }); 
          $(this).parent().addClass("current").children('ul').show(); 
          $(".subtitle>ul").each(function(){
            $(this).hide();
            $(this).parent().removeClass("current");
          }); 
          $(this).parent().find('.subtitle>ul:first').show().parent().addClass("current");                  
        }
      );
  });
  
$('#regionlist .subtitle').each(function(){
    $(this).find('a.lt').bind (
      "click",
        function(){
          $(".subtitle>ul").each(function(){
            $(this).hide();
            $(this).parent().removeClass("current");
          }); 
          $(this).parent().addClass("current").children('ul').show();        
        }
      );
  });

  // forms date picker
  $('#dateOfTravel').datePicker(); 
  $('input.date').datePicker(); 
  $('#FromDate').bind(
		  'dpClosed',
		  function(e, selectedDates)
		  {
			  var d = selectedDates[0];
			  if (d) {
				  d = new Date(d);
				  $('#ToDate').dpSetStartDate(d.addDays(1).asString());
			  }
		  }
	  );
	  $('#ToDate').bind(
		  'dpClosed',
		  function(e, selectedDates)
		  {
			  var d = selectedDates[0];
			  if (d) {
				  d = new Date(d);
				  $('#FromDate').dpSetEndDate(d.addDays(-1).asString());
			  }
		  }
	  );
    
    // rotate testimonials
    $('#sidebar_testimonials').cycle({ timeout:3000 });
    
    // tour home - country pictures rotate
    $('.tourbuttons div').cycle({ timeout:2000 }).cycle('pause').hover(
      function () {
        $(this).cycle('resume'); 
      }, 
      function () {
        $(this).cycle('pause'); 
      }
    );
    $('.tourbuttons').each(function(){
    var href = $(this).attr("href");
    $(this).find('div').bind (
      "click",
        function(){         
          window.location = href;
        }
      );
    });
    
    // rotate images on venue pages, etc
    $('#venue_media').cycle({ 
        fx:'fade',
        speed:'fast',
        timeout:3000,
        next:   '#next2', 
        prev:   '#prev2',
        pause:1
    }); 
    
    // auto rotate region pictures
    $('#region_media').cycle({ timeout:3000 });    

    // tabs
    $('#tabbedcontent').tabs({ fxAutoHeight: true });
    
    
    // header location, venue name tabs
  $(".headersearchtab").each(function(){
    $(this).bind (
      "click",
        function(){
          $(".headersearchtab").each(function(){
            var src = $(this).attr("src");
            $(this).attr("src", src.replace('_on.gif', '_off.gif'));
          }); 
          var src = $(this).attr("src");
          $(this).attr("src", src.replace('_off.gif', '_on.gif'));          
        }
      );
  });
  
  $(".headersearch .text").each(function(){
    $(this).bind (
      "click",
        function(){
          $(this).attr("value", "").css({ color:"black" }).unbind("click");          
        }
      );
  });
  
    $("#hLocation").submit(function() {
      var str = $("#hLocation > input.text").val();
      if (str == "Enter Location...") {
        alert("Please enter a Location");
        return false;
      } else if (str.length < 3) {
        alert("Location entered is too short");
        return false;      
      } else {
        return true;
      }
    });
  
    $("#hHotelName").submit(function() {
      var str = $("#hHotelName > input.text").val();
      if (str == "Enter Venue Name...") {
        alert("Please enter a Venue Name");
        return false;
      } else if (str.length < 3) {
        alert("Venue Name entered is too short");
        return false;  
      } else {
        return true;
      }
    });
  
    $("#hPostcode").submit(function() {
      var str = $("#hPostcode > input.text").val();
      if (str == "Enter Postcode...") {
        alert("Please enter a Postcode");
        return false;
      } else if (str.length < 2) {
        alert("Postcode entered is too short");
        return false;  
      } else {
        return true;
      }
    });
    
    // newsletter signup
    $("#nSignup").submit(function() {
      var str = $("#nSignup input.text").val();
      if (str == "Sign up for our Newsletter") {
        alert("Please enter an Email Address");
        return false;
      } else if (str.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) == -1) {
        alert("Email Address is invalid");
        return false;  
      } else {
        return true;
      }
    });
      
  $(".newsletter .text").each(function(){
    $(this).bind (
      "click",
        function(){
          $(this).attr("value", "").css({ color:"black" }).unbind("click");          
        }
      );
  });
  
  // top nav dropdowns with iframes for ie to hide select boxes
  $('#topnav ul li').hover(function() {
    if (obj) {
      obj.find('ul').hide();
      obj.find('.iframe').hide();
      obj = null;
    } //if
    $(this).find('ul').show();
    $(this).find('.iframe').show();
    }, function() {
      obj = $(this);
      setTimeout(
      "checkHover()",
      400);
  });

});

function switchTabbedContent(tabNo)
{
  $("#tabbedcontent").triggerTab(tabNo);
  scrollTo(0,0);
}

function showTab(tabId)
{
  $(".headersearch").hide();
  $("#" + tabId).show();
}

function setAsHome(myLink)
{
        if(navigator.appName.indexOf('Microsoft')!=-1)
        {
               // IE
               myLink.style.behavior='url(#default#homepage)';
               myLink.setHomePage(location.href);
        }
        else if(navigator.appName.indexOf('Netscape')!=-1)
        {
               // Netscape / firefox browsers
               var msg = "Just drag this link onto your 'home' ";
               msg += "button to set this page as your ";
               msg += "default homepage!";
               alert(msg);
        }
        else if(navigator.appName.indexOf('Opera')!=-1)
        {
               // Opera
               var msg = "Please go to Tools - Preferences ";
               msg += "- General and click 'Use current' ";
               msg += "to set this as your homepage! ";
               alert(msg);
        }
        else
        {
               // Other browsers
               var msg = "Sorry, your browser doesn't allow ";
               msg += "scripts to set the default homepage. ";
               msg += "Please use your browser's 'options' dialog ";
               msg += "to do it! Thank you for your patience. ";
               alert(msg);
        }
}
function bookmarkMe(myUrl, myTitle)
{     
        if(window.opera && window.print)
        {
               //******************************//
               // Opera is used
               //******************************//

               var bkmark = document.createElement('a');
               bkmark.setAttribute('rel','sidebar');
               bkmark.setAttribute('href', myUrl);
               bkmark.setAttribute('title', myTitle);
               bkmark.click();
        }
        else if(document.all)
        {
               //******************************//
               // Most probably IE, but even if it's not,
               // we don't want an error to pop up
               // so we use the try-catch structure
               //******************************//

               try
               {
                       window.external.AddFavorite(myUrl, myTitle);
               }
               catch(e)
               {
                       //******************************//
                       // oops! not IE. Prompt user for action.
                       //******************************//

                       var msg = "Sorry, your browser doesn't allow scripts ";
                       msg += "to add bookmarks.\n";
                       msg += "Please use your browser's keyboard shortcut ";
                       msg += "(most commonly CTRL+D) to add a bookmark.";
                       alert(msg);
               }
        } else {
        
           var msg = "Sorry, your browser doesn't allow scripts ";
           msg += "to add bookmarks.\n";
           msg += "Please use your browser's keyboard shortcut ";
           msg += "(most commonly CTRL+D) to add a bookmark.";
           alert(msg);

        }
}

// linked select for dropdowns
(function($){
   $.fn.linkedSelect = function(url,destination,params) {
      var params = $.extend({
         firstOption : 'Please Select',
         loadingText : 'Loading...'
      },params);
      var $dest = $(destination);
      return this.each(function(){
         $(this).bind('change', function() {
            var $$ = $(this);
            $dest.attr('disabled','false')
                 .append('<option value="">' +params.loadingText+ '</option>')
                 .ajaxStart(function(){
                    $$.show();
            });
            $.getJSON(url,{str: $$.val()}, function(j){
               if (j.length > 0) {
                  var options = '<option value="">' +params.firstOption+ '</option>';
                  for (var i = 0; i < j.length; i++) {
                     options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
                  }
               }
               $dest.removeAttr('disabled')
                    .html(options)
                    .find('option:first')
                    .attr('selected', 'selected');
            }); // end getJSON
         });  // end change
      }); // end return each
   };  // end function
})(jQuery);

jQuery.fn.truncate = function( max, settings ) {
    settings = jQuery.extend( {
        chars: /\s/,
        trail: [ "...", "" ]
    }, settings );
    var myResults = {};
    var ie = $.browser.msie;
    function fixIE( o ) {
        if ( ie ) {
            o.style.removeAttribute( "filter" );
        }
    }
    return this.each( function() {
        var $this = jQuery(this);
        var myStrOrig = $this.html().replace( /\r\n/gim, "" );
        var myStr = myStrOrig;
        var myRegEx = /<\/?[^<>]*\/?>/gim;
        var myRegExArray;
        var endTag;
        var myRegExHash = {};
        var myResultsKey = $("*").index( this );
        while ( ( myRegExArray = myRegEx.exec( myStr ) ) != null ) {
            myRegExHash[ myRegExArray.index ] = myRegExArray[ 0 ];
        }
        myStr = jQuery.trim( myStr.split( myRegEx ).join( "" ) );
        if ( myStr.length > max ) {
            var c;
            while ( max < myStr.length ) {
                c = myStr.charAt( max );
                if ( c.match( settings.chars ) ) {
                    myStr = myStr.substring( 0, max );
                    break;
                }
                max--;
            }
            if ( myStrOrig.search( myRegEx ) != -1 ) {
                var endCap = 0;
                for ( eachEl in myRegExHash ) {
                    myStr = [ myStr.substring( 0, eachEl ), myRegExHash[ eachEl ], myStr.substring( eachEl, myStr.length ) ].join( "" );
                    if ( eachEl < myStr.length ) {
                        endCap = myStr.length;
                    }
                }
                $this.html( [ myStr.substring( 0, endCap ), " . . .", myStr.substring( endCap, myStr.length ).replace( /<(\w+)[^>]*>.*<\/\1>/gim, "" ).replace( /<(br|hr|img|input)[^<>]*\/?>/gim, "" ) ].join( "" ) );
            } else {
                $this.html( myStr );
            }
            myResults[ myResultsKey ] = myStrOrig;
            
            if ( (myStrOrig.length-endCap) < 200 ) {
            
              $this.html(myStrOrig);
            
            } else {
            
              $this.html( [ "<div class='truncatecontent_less'>", $this.html(), settings.trail[ 0 ], "</div>", "<div class='truncatecontent_more' style='display: none;'>", myResults[ myResultsKey ], settings.trail[ 1 ], "</div>" ].join( "" ) )
              $(".truncate_show",$this).click( function() {
                $this.find( ".truncatecontent_less" ).hide();
                $this.find( ".truncatecontent_more" ).show();
                return false;            
              });
              $(".truncate_hide",$this).click( function() {
                $this.find( ".truncatecontent_more" ).hide();
                $this.find( ".truncatecontent_less" ).show();
                return false;            
              });
            
            }
        }
    });
};

// formatDate :
// a PHP date like function, for formatting date strings
// authored by Svend Tofte <www.svendtofte.com>
// the code is in the public domain
//
// see http://www.svendtofte.com/code/date_format/
// and http://www.php.net/date
//
// thanks to 
//  - Daniel Berlin <mail@daniel-berlin.de>,
//    major overhaul and improvements
//  - Matt Bannon,
//    correcting some stupid bugs in my days-in-the-months list!
//
// input : format string
// time : epoch time (seconds, and optional)
//
// if time is not passed, formatting is based on 
// the current "this" date object's set time.
//
// supported switches are
// a, A, B, c, d, D, F, g, G, h, H, i, I (uppercase i), j, l (lowecase L), 
// L, m, M, n, N, O, P, r, s, S, t, U, w, W, y, Y, z, Z
// 
// unsupported (as compared to date in PHP 5.1.3)
// T, e, o

Date.prototype.formatDate = function (input,time) {
    
    var daysLong =    ["Sunday", "Monday", "Tuesday", "Wednesday", 
                       "Thursday", "Friday", "Saturday"];
    var daysShort =   ["Sun", "Mon", "Tue", "Wed", 
                       "Thu", "Fri", "Sat"];
    var monthsShort = ["Jan", "Feb", "Mar", "Apr",
                       "May", "Jun", "Jul", "Aug", "Sep",
                       "Oct", "Nov", "Dec"];
    var monthsLong =  ["January", "February", "March", "April",
                       "May", "June", "July", "August", "September",
                       "October", "November", "December"];

    var switches = { // switches object
        
        a : function () {
            // Lowercase Ante meridiem and Post meridiem
            return date.getHours() > 11? "pm" : "am";
        },
        
        A : function () {
            // Uppercase Ante meridiem and Post meridiem
            return (this.a().toUpperCase ());
        },
    
        B : function (){
            // Swatch internet time. code simply grabbed from ppk,
            // since I was feeling lazy:
            // http://www.xs4all.nl/~ppk/js/beat.html
            var off = (date.getTimezoneOffset() + 60)*60;
            var theSeconds = (date.getHours() * 3600) + 
                             (date.getMinutes() * 60) + 
                              date.getSeconds() + off;
            var beat = Math.floor(theSeconds/86.4);
            if (beat > 1000) beat -= 1000;
            if (beat < 0) beat += 1000;
            if ((String(beat)).length == 1) beat = "00"+beat;
            if ((String(beat)).length == 2) beat = "0"+beat;
            return beat;
        },
        
        c : function () {
            // ISO 8601 date (e.g.: "2004-02-12T15:19:21+00:00"), as per
            // http://www.cl.cam.ac.uk/~mgk25/iso-time.html
            return (this.Y() + "-" + this.m() + "-" + this.d() + "T" + 
                    this.h() + ":" + this.i() + ":" + this.s() + this.P());
        },
        
        d : function () {
            // Day of the month, 2 digits with leading zeros
            var j = String(this.j());
            return (j.length == 1 ? "0"+j : j);
        },
        
        D : function () {
            // A textual representation of a day, three letters
            return daysShort[date.getDay()];
        },
        
        F : function () {
            // A full textual representation of a month
            return monthsLong[date.getMonth()];
        },
        
        g : function () {
            // 12-hour format of an hour without leading zeros
            return date.getHours() > 12? date.getHours()-12 : date.getHours();
        },
        
        G : function () {
            // 24-hour format of an hour without leading zeros
            return date.getHours();
        },
        
        h : function () {
            // 12-hour format of an hour with leading zeros
            var g = String(this.g());
            return (g.length == 1 ? "0"+g : g);
        },
        
        H : function () {
            // 24-hour format of an hour with leading zeros
            var G = String(this.G());
            return (G.length == 1 ? "0"+G : G);
        },
        
        i : function () {
            // Minutes with leading zeros
            var min = String (date.getMinutes ());
            return (min.length == 1 ? "0" + min : min);
        },
        
        I : function () {
            // Whether or not the date is in daylight saving time (DST)
            // note that this has no bearing in actual DST mechanics,
            // and is just a pure guess. buyer beware.
            var noDST = new Date ("January 1 " + this.Y() + " 00:00:00");
            return (noDST.getTimezoneOffset () == 
                    date.getTimezoneOffset () ? 0 : 1);
        },
        
        j : function () {
            // Day of the month without leading zeros
            return date.getDate();
        },
        
        l : function () {
            // A full textual representation of the day of the week
            return daysLong[date.getDay()];
        },
        
        L : function () {
            // leap year or not. 1 if leap year, 0 if not.
            // the logic should match iso's 8601 standard.
            // http://www.uic.edu/depts/accc/software/isodates/leapyear.html
            var Y = this.Y();
            if (         
                (Y % 4 == 0 && Y % 100 != 0) ||
                (Y % 4 == 0 && Y % 100 == 0 && Y % 400 == 0)
                ) {
                return 1;
            } else {
                return 0;
            }
        },
        
        m : function () {
            // Numeric representation of a month, with leading zeros
            var n = String(this.n());
            return (n.length == 1 ? "0"+n : n);
        },
        
        M : function () {
            // A short textual representation of a month, three letters
            return monthsShort[date.getMonth()];
        },
        
        n : function () {
            // Numeric representation of a month, without leading zeros
            return date.getMonth()+1;
        },
        
        N : function () {
            // ISO-8601 numeric representation of the day of the week
            var w = this.w();
            return (w == 0 ? 7 : w);
        },
        
        O : function () {
            // Difference to Greenwich time (GMT) in hours
            var os = Math.abs(date.getTimezoneOffset());
            var h = String(Math.floor(os/60));
            var m = String(os%60);
            h.length == 1? h = "0"+h:1;
            m.length == 1? m = "0"+m:1;
            return date.getTimezoneOffset() < 0 ? "+"+h+m : "-"+h+m;
        },
        
        P : function () {
            // Difference to GMT, with colon between hours and minutes
            var O = this.O();
            return (O.substr(0, 3) + ":" + O.substr(3, 2));
        },      
        
        r : function () {
            // RFC 822 formatted date
            var r; // result
            //  Thu         ,     21               Dec              2000
            r = this.D() + ", " + this.d() + " " + this.M() + " " + this.Y() +
            //    16          :    01          :    07               0200
            " " + this.H() + ":" + this.i() + ":" + this.s() + " " + this.O();
            return r;
        },

        s : function () {
            // Seconds, with leading zeros
            var sec = String (date.getSeconds ());
            return (sec.length == 1 ? "0" + sec : sec);
        },        
        
        S : function () {
            // English ordinal suffix for the day of the month, 2 characters
            switch (date.getDate ()) {
                case  1: return ("st"); 
                case  2: return ("nd"); 
                case  3: return ("rd");
                case 21: return ("st"); 
                case 22: return ("nd"); 
                case 23: return ("rd");
                case 31: return ("st");
                default: return ("th");
            }
        },
        
        t : function () {
            // thanks to Matt Bannon for some much needed code-fixes here!
            var daysinmonths = [null,31,28,31,30,31,30,31,31,30,31,30,31];
            if (this.L()==1 && this.n()==2) return 29; // ~leap day
            return daysinmonths[this.n()];
        },
        
        U : function () {
            // Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
            return Math.round(date.getTime()/1000);
        },

        w : function () {
            // Numeric representation of the day of the week
            return date.getDay();
        },
        
        W : function () {
            // Weeknumber, as per ISO specification:
            // http://www.cl.cam.ac.uk/~mgk25/iso-time.html
        
            var DoW = this.N ();
            var DoY = this.z ();

            // If the day is 3 days before New Year's Eve and is Thursday or earlier,
            // it's week 1 of next year.
            var daysToNY = 364 + this.L () - DoY;
            if (daysToNY <= 2 && DoW <= (3 - daysToNY)) {
                return 1;
            }

            // If the day is within 3 days after New Year's Eve and is Friday or later,
            // it belongs to the old year.
            if (DoY <= 2 && DoW >= 5) {
                return new Date (this.Y () - 1, 11, 31).formatDate ("W");
            }
            
            var nyDoW = new Date (this.Y (), 0, 1).getDay ();
            nyDoW = nyDoW != 0 ? nyDoW - 1 : 6;

            if (nyDoW <= 3) { // First day of the year is a Thursday or earlier
                return (1 + Math.floor ((DoY + nyDoW) / 7));
            } else {  // First day of the year is a Friday or later
                return (1 + Math.floor ((DoY - (7 - nyDoW)) / 7));
            }
        },
        
        y : function () {
            // A two-digit representation of a year
            var y = String(this.Y());
            return y.substring(y.length-2,y.length);
        },        
        
        Y : function () {
            // A full numeric representation of a year, 4 digits
    
            // we first check, if getFullYear is supported. if it
            // is, we just use that. ppks code is nice, but wont
            // work with dates outside 1900-2038, or something like that
            if (date.getFullYear) {
                var newDate = new Date("January 1 2001 00:00:00 +0000");
                var x = newDate .getFullYear();
                if (x == 2001) {              
                    // i trust the method now
                    return date.getFullYear();
                }
            }
            // else, do this:
            // codes thanks to ppk:
            // http://www.xs4all.nl/~ppk/js/introdate.html
            var x = date.getYear();
            var y = x % 100;
            y += (y < 38) ? 2000 : 1900;
            return y;
        },

        
        z : function () {
            // The day of the year, zero indexed! 0 through 366
            var t = new Date("January 1 " + this.Y() + " 00:00:00");
            var diff = date.getTime() - t.getTime();
            return Math.floor(diff/1000/60/60/24);
        },

        Z : function () {
            // Timezone offset in seconds
            return (date.getTimezoneOffset () * -60);
        }        
    
    }

    function getSwitch(str) {
        if (switches[str] != undefined) {
            return switches[str]();
        } else {
            return str;
        }
    }

    var date;
    if (time) {
        var date = new Date (time);
    } else {
        var date = this;
    }

    var formatString = input.split("");
    var i = 0;
    while (i < formatString.length) {
        if (formatString[i] == "\\") {
            // this is our way of allowing users to escape stuff
            formatString.splice(i,1);
        } else {
            formatString[i] = getSwitch(formatString[i]);
        }
        i++;
    }
    
    return formatString.join("");
}


// Some (not all) predefined format strings from PHP 5.1.1, which 
// offer standard date representations.
// See: http://www.php.net/manual/en/ref.datetime.php#datetime.constants
//

// Atom      "2005-08-15T15:52:01+00:00"
Date.DATE_ATOM    = "Y-m-d\\TH:i:sP";
// ISO-8601  "2005-08-15T15:52:01+0000"
Date.DATE_ISO8601 = "Y-m-d\\TH:i:sO";
// RFC 2822  "Mon, 15 Aug 2005 15:52:01 +0000"
Date.DATE_RFC2822 = "D, d M Y H:i:s O";
// W3C       "2005-08-15T15:52:01+00:00"
Date.DATE_W3C     = "Y-m-d\\TH:i:sP";

