/* http://quick.aero/sterling/@@/zojax.wizard.tabs */
function submitAndMove2Step(formId, action, saveAction, nextStep, index)
{
    var form = $(document.getElementById(formId));

    if (action) {
	//add hidden input for emulating press button action
	form.append('<input type="hidden" name="'+action+'" value="1"/>');
    }
    if (saveAction) {
	// save action
	form.append('<input type="hidden" name="'+saveAction+'" value="1"/>');
    }
    if (nextStep) {
	// add hidden with next step index
	form.append('<input type="hidden" name="'+nextStep+'" value="'+index+'"/>');
    }

    // submit form
    form.submit();

    return false;
}

var wizardTabsHandler = function(formId, action, save, nextStep, index) {
    return function(e)
    {
        return submitAndMove2Step(formId, action, save, nextStep, index);
    };
};

function subscribeWizardTabs(
    formId, prevActionName, nextActionName, 
    saveActionName, currentClass, searchLink, nextStep) {

    //subscribe tabs
    var elems = $(searchLink);
    var nextAction = false;
    for (var i = 0; i < elems.length; i++)
    {
      var el = $(elems[i]);
      if (el.parent('li').is("."+currentClass))
      {
          nextAction = true;
      }
      else if (nextAction)
      {
	  if (nextActionName) {
              el.bind("click", wizardTabsHandler(formId, nextActionName, saveActionName, nextStep, i));
	  }
      }
      else
      {
	  if (prevActionName) {
              el.bind("click", wizardTabsHandler(formId, prevActionName, saveActionName, nextStep, i));
	  }
      }
    }
}


/* http://quick.aero/sterling/@@/resources/jquery.dateFormat.js */
(function ($) {
    $.format = (function () {

        var parseMonth = function (value) {
                       
            switch (value) {
            case "Jan":
                return "01";
            case "Feb":
                return "02";
            case "Mar":
                return "03";
            case "Apr":
                return "04";
            case "May":
                return "05";
            case "Jun":
                return "06";
            case "Jul":
                return "07";
            case "Aug":
                return "08";
            case "Sep":
                return "09";
            case "Oct":
                return "10";
            case "Nov":
                return "11";
            case "Dec":
                return "12";
            default:
                return value;
            }
        };
        
        var parseDay = function (value) {
            
            switch (value) {
            case "Mon":
                return 0;
            case "Tue":
                return 1;
            case "Wed":
                return 2;
            case "Thu":
                return 3;
            case "Fri":
                return 4;
            case "Sat":
                return 5;
            case "Sun":
                return 6;
            default:
                return value;
            }
        };
        
        var parseTime = function (value) {
            return {
                    hour: value.getHours(),
                    minute: value.getMinutes(),
                    second: value.getSeconds()
                };
            return {
                hour: "",
                minute: "",
                second: ""
            };
        };
        
        return {
            date: function (value, format) {
                //value = new java.util.Date()
                //2009-12-18 10:54:50.546
                try {
                    var year = null;
                    var short_year = null;
                    var month = null;
                    var dayOfMonth = null;
                    var dayOfWeek = null
                    var time = null; //json, time, hour, minute, second
                    if (typeof value.getFullYear != "function") {
                        var date = new Date();
                        date.setTime(Date.parse(value));
                        value = date
                    }
                    year = value.getFullYear().toString();
                    month = value.getMonth() + 1;
                    dayOfMonth = value.getDate();
                    dayOfWeek = value.getDay();
                    time = parseTime(value);
                    short_year = year.slice(2);
                    var pattern = "";
                    var retValue = "";
                    //Issue 1 - variable scope issue in format.date 
					//Thanks jakemonO
                    for (var i = 0; i < format.length; i++) {
                        var currentPattern = format.charAt(i);
                        pattern += currentPattern;
                        switch (pattern) {
                        case "E":
                            if (format.charAt(i+1) != 'E') {
                                retValue += day_names[dayOfWeek].slice(0, 3);
                                pattern = "";
                            }
                            break;
                        case "EEEE":
                            retValue += day_names[dayOfWeek];
                            pattern = "";
                            break;
                        case "d":
                            if (format.charAt(i+1) != 'd') {
                                retValue += dayOfMonth;
                                pattern = "";
                            }
                            break;
                        case "dd":
                            if (dayOfMonth < 10)
                                dayOfMonth = '0'+dayOfMonth;
                            retValue += dayOfMonth;
                            pattern = "";
                            break;
                        case "M":
                            if (format.charAt(i+1) != 'M'){
                                retValue += month;
                                pattern = "";
                            }
                            break;
                        case "MM":
                            if (format.charAt(i+1) != 'M'){
                                if (month < 10)
                                    month = '0'+month;
                                retValue += month;
                                pattern = "";
                            }
                            break;
                        case "MMM":
                            if (format.charAt(i+1) != 'M'){
                                retValue += month_names[month-1].slice(0, 3);
                                pattern = "";
                                break;
                            }
                            break;
                        case "MMMM":
                            retValue += month_names[month-1];
                            pattern = "";
                            break;
                        case "yy":
                            if (format.charAt(i+1) != 'y'){
                                retValue += short_year;
                                pattern = "";
                            }
                            break;
                        case "yyyy":
                            retValue += year;
                            pattern = "";
                            break;
                        case "H":
                            if (format.charAt(i+1) != 'H') {
                                retValue += time.hour;
                                pattern = "";
                            }
                            break;
                        case "HH":
                            retValue += time.hour;
                            pattern = "";
                            break;
                        case "hh":
                            retValue += (time.hour === 0 ? 12 : time.hour < 13 ? time.hour : time.hour - 12);
                            pattern = "";
                            break;
                        case "h":
                            if (format.charAt(i+1) != 'h') {
                                retValue += (time.hour === 0 ? 12 : time.hour < 13 ? time.hour : time.hour - 12);
                                pattern = "";
                            }
                            break;
                        case "mm":
                            retValue += time.minute;
                            pattern = "";
                            break;
                        case "ss":
                            retValue += time.second;
                            pattern = "";
                            break;
                        case "a":
                            retValue += time.hour > 12 ? "PM" : "AM";
                            pattern = "";
                            break;
                        case " ":
                            retValue += currentPattern;
                            pattern = "";
                            break;
                        case "/":
                            retValue += currentPattern;
                            pattern = "";
                            break;
                        case ":":
                            retValue += currentPattern;
                            pattern = "";
                            break;
                        case ",":
                            retValue += currentPattern;
                            pattern = "";
                            break;
                        case ".":
                            retValue += currentPattern;
                            pattern = "";
                            break;
                        }
                    }
                    return retValue;
                } catch (e) {
                    console.log(e);
                    return value;
                }
            }
        };
    }());
}(jQuery));


$(document).ready(function () {
    $(".shortDateFormat").each(function (idx, elem) {
        if ($(elem).is(":input")) {
            $(elem).val($.format.date($(elem).val(), 'dd/MM/yyyy'));
        } else {
            $(elem).text($.format.date($(elem).text(), 'dd/MM/yyyy'));
        }
    });
    $(".longDateFormat").each(function (idx, elem) {
        if ($(elem).is(":input")) {
            $(elem).val($.format.date($(elem).val(), 'dd/MM/yyyy hh:mm:ss'));
        } else {
            $(elem).text($.format.date($(elem).text(), 'dd/MM/yyyy hh:mm:ss'));
        }
    });
});



/* http://quick.aero/sterling/@@/date.js */
function setDateFormatter(el)
{
    el.text($.format.date(el.attr('value'), date_formats[el.attr('format')]));
    el.attr('processed', 'true')
}


$(document).ready(function() {
    var elems = $("span.zojax-formatter-date");
    for (var i = 0; i < elems.length; i++)
    {
        var el = $(elems[i]);
        if (!el.attr('processed')) {
            setDateFormatter(el);
        }
    }
});


/* http://quick.aero/sterling/@@/datetime.js */
function setDatetimeFormatter(el)
{
    var date = new Date();
    date.setTime(Date.parse(el.text()));
    
    var now = new Date();
    var time = date.getTime()+now.getTimezoneOffset() - 60*1000*(parseInt(el.attr('offset')));
    date.setTime(time);
    var time_string = $.format.date(date, time_formats[el.attr('format')]);

    el.text($.format.date(el.attr('value'), datetime_formats[el.attr('format')]))
    el.attr('processed', 'true')
}


$(document).ready(function() {
    
    var elems = $("span.zojax-formatter-datetime");
    for (var i = 0; i < elems.length; i++)
    {
        var el = $(elems[i]);
        if (!el.attr('processed')) {
            setDatetimeFormatter(el);
        }
    }
});


/* http://quick.aero/sterling/@@/humandatetime.js */
var formatter_past_dictionary = {
    '%s year(s) ago'  : '%s year(s) ago',
    '%s month(s) ago'  : '%s month(s) ago',
    '%s week(s) ago': '%s week(s) ago',
    '%s day(s) ago' : '%s day(s) ago',
    '%s hour(s) ago' : '%s hour(s) ago',
    '%s minute(s) ago' : '%s minute(s) ago',
    '%s second(s) ago' : '%s second(s) ago'
};

var formatter_future_dictionary = {
    '%s year(s) ago'  : '%s year(s) ago',
    '%s month(s) ago'  : '%s month(s) ago',
    '%s week(s) ago': '%s week(s) ago',
    '%s day(s) ago' : '%s day(s) ago',
    '%s hour(s) ago' : '%s hour(s) ago',
    '%s minute(s) ago' : '%s minute(s) ago',
    '%s second(s) ago' : '%s second(s) ago'
};

function setHumandatetimeFormatter(el)
{
    var time = new Date();
    time.setTime(Date.parse(el.attr('value')));
    var new_time = new Date();
    delta = new_time-time;
    $.i18n.setDictionary(formatter_past_dictionary);
    if (delta < 0) {
        delta = Math.abs(delta);
        $.i18n.setDictionary(formatter_future_dictionary)
    }
    years = Math.floor(delta/(365*24*60*60*1000.0));
    months = Math.floor(delta/(30*24*60*60*1000.0));
    weeks = Math.floor(delta/(7*24*60*60*1000.0));
    days = Math.floor(delta/(24*60*60*1000.0));
    hours = Math.floor(delta/(60*60*1000.0));
    minutes = Math.floor(delta/(60*1000.0));
    seconds = Math.floor(delta/(1000.0));
    var res;
    if (years)
        res = $.i18n._('%s year(s) ago', [years])
    else if (months)
        res = $.i18n._('%s month(s) ago', [months])
    else if (weeks)
        res = $.i18n._('%s week(s) ago', [weeks])
    else if (days)
        res = $.i18n._('%s day(s) ago', [days])
    else if (hours)
        res = $.i18n._('%s hour(s) ago', [hours])
    else if (minutes)
        res = $.i18n._('%s minute(s) ago', [minutes])
    else
        res = $.i18n._('%s second(s) ago', [seconds])
    el.text(res);
    el.attr('processed', 'true')
}


$(document).ready(function() {
    var elems = $("span.zojax-formatter-humandatetime");
    for (var i = 0; i < elems.length; i++)
    {
        var el = $(elems[i]);
        if (!el.attr('processed')) {
            setHumandatetimeFormatter(el);
        }
    }
});

/* http://quick.aero/sterling/@@/fancydatetime.js */
function setFancydatetimeFormatter(el)
{
    var date = new Date();
    date.setTime(Date.parse(el.text()));
    
    var now = new Date();
    delta = Math.abs(now-date) + 60*1000*(parseInt(el.attr('offset'))-now.getTimezoneOffset());
    years = Math.floor(delta/(365*24*60*60*1000.0));
    months = Math.floor(delta/(30*24*60*60*1000.0));
    weeks = Math.floor(delta/(7*24*60*60*1000.0));
    days = Math.floor(delta/(24*60*60*1000.0));

    var res;
    var time = date.getTime()+now.getTimezoneOffset() - 60*1000*(parseInt(el.attr('offset')));
    date.setTime(time);
    var time_string = $.format.date(date, time_formats[el.attr('format')]);
    if (!years && !months && !weeks && days == 1) {
        res = 'Yesterday at ' + time_string;

    } else if (!years && !months && !weeks && days == 0) {
        res = 'Today at ' + time_string;
    } else {
        res = el.attr('date') + ' ' + time_string;
    }

    el.text(res);
    el.attr('processed', 'true')
}


$(document).ready(function() {
    
    var elems = $("span.zojax-formatter-fancydatetime");
    for (var i = 0; i < elems.length; i++)
    {
        var el = $(elems[i]);
        if (!el.attr('processed')) {
            setFancydatetimeFormatter(el);
        }
    }
});


/* http://quick.aero/sterling/@@/crosslinks */
var domains = [
    'http://quick.aero/global-resources/shipping-info-center/',
    'http://quick.aero/in-the-news/',
    'http://quick.aero/inthenews/',
    'http://quick.aero/siteadmin/',
    'http://quick.aero/quickstat/',
    'http://quick.aero/sterling/',
    'http://quick.aero/quickintl/',
    'http://quick.aero/it-projects/',
    'http://quick.aero/shippinginfocenter/',
    'http://quick.aero/'
]


function crosslinkHandler(el)
{
    var href = el.data.domain + '++session++' + el.data.session + '/' +
    this.href.substring(el.data.domain.length)
    window.location = href;

    return false;
}

function setLink(el, href)
{
    var oldref = href.attr('href');
    var link = el.domain + '++session++' + el.session + '/' +
        oldref.substring(el.domain.length);
    href.attr('href', link)
}


$(document).ready(function() {
    var session = null;

    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
      var cookie = jQuery.trim(cookies[i]).split('=', 2);
            if (cookie[0].substring(0, 9) == 'zope3_cs_') {
                session = cookie[1];
                break;
            }
        }
    }
    if (!session) {
  return;
    }

    var local = $('head').attr('portal');

    var elems = $("a");

    for (var i = 0; i < elems.length; i++)
    {
      var el = $(elems[i]);
      for (var j = 0; j<domains.length; j++) {
          var href = el.attr('href');
          if (href) {
              if (href.substring(0, local.length) != local) {
                var domain = domains[j];
                if (href.substring(0, domain.length) == domain) {
                    setLink({domain: domain, session: session}, el);
                    //el.bind("click", {domain: domain, session: session}, crosslinkHandler);
                    break
            }
          }
          }
      }
    }
});



