/**
 * Requires prototype.js
 */

Date.prototype.addDays = function (numDays) {
    return this.setDate(this.getDate() + numDays);
};

// this ain't the greatest idea, but for some reason Prototype's version doesn't like our JSON
// TODO add stripping of potentially "dangerous" strings
String.prototype.jsonify = function () {
    try {
        var json = eval('(' + this + ')');
        return json;
    } catch (e) {
        return false;
    }
}

// handle the click of a "Save to favourites" button
var favouritesAdder = {
    template: new Template('<img alt="" src="images/#{buttonSize}" />'),
    buttonSizes: {
        L: 'btn_savedtofav_l.gif',
        M: 'btn_savedtofav_m.gif'
    },
    timers: $A([]),
    add: function (locationId, buttonSize, callback) {
        var url, request;
        favouritesAdder.timers[locationId] =  (new Date()).getTime();
        url = '/favourites/add/' + locationId + '/' + buttonSize;
        request = new Ajax.Request(
            url,
            {
                onSuccess: function (transport) {
                    var begin, end, remaining, json = transport.responseText.jsonify();
                    if (json) {
                        begin = favouritesAdder.timers[json.locationId];
                        end = (new Date()).getTime();
                        remaining = 1000 - (end - begin);
                        if (remaining < 0) {
                            remaining = 0;
                        }
                        setTimeout(function(){
                            $('save-to-favourites-' + json.locationId).innerHTML = favouritesAdder.template.evaluate({buttonSize: favouritesAdder.buttonSizes[json.buttonSize]});
                            if (undefined !== callback) {
                                eval(callback); // yes, eval is evil
                            }
                        }, remaining);
                    }
                },
                onFailure: function () {
                    window.location.href='/loginregister';
                }
            }
        );
    }
};

// Add functions to fire on page load
// Based on Simon Willison's function at http://simon.incutio.com/archive/2004/05/26/addLoadEvent
function addLoadEvent (func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload=function() {
            if (oldonload) {
                oldonload();
            }
            func ();
        }
    }
}

/* begin: debug functions */
writeDebug = function (s) {
    $('debug').innerHTML += s + '<br />';
}

revealObject = function (o) {
    for (p in o) {
        writeDebug(p + ' = ' + o[p]);
    }
}
/* end: debug functions */

Number.prototype.mod = function(base){
    var num = this % base;
    return num < 0 ? num + base : num;
};

function getParameter ( queryString, parameterName ) {
    var parameterName = parameterName + "=";
    if ( queryString.toString().length > 0 ) {
        begin = queryString.indexOf( parameterName );
        if ( begin != -1 ) {
            begin += parameterName.length;
            end = queryString.indexOf( "&" , begin );
            if ( end == -1 ) {
                end = queryString.length
            }
            return unescape ( queryString.substring ( begin, end ) );
        }
        return "null";
    }
}

function getNodeValue(obj,tag)
{
    return obj.getElementsByTagName(tag)[0].firstChild.nodeValue;
}


function isChild (ancestor, candidate) {
    while (candidate && candidate != ancestor.parentNode) {
        if (candidate == ancestor) return true;
        try {
            candidate = candidate.parentNode;
        } catch (c) {
            return false
        }
    }
    return false;
}


function applyPNGFilter(o)
{
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])

    if ((version >= 5.5) && (document.body.filters)) {
        var t = '../images/a_pixel.gif';
        if( o.src != t ) {
            var s = o.src;
            o.src = t;
            o.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+s+"',sizingMethod='scale')";
        }
    }
}

function isIE4(){
    return false;
}

function pop_up(url, window_name){
    popup_parameters = 'location=no, toolbar=no, menubar=no, resizeable=no, width=600, height=500, left=100, top=0';
    if (arguments[2]){
        popup_parameters = arguments[2];
    }
    var newwindow = window.open(url, window_name, popup_parameters);
    if (window.focus) {
        newwindow.focus()
    }
    return false;
}

function changeFocus(currentFocus, nextFocus, e) {
        realkey = new String(String.fromCharCode(e));
        asciiVal = realkey.charCodeAt();
        if (currentFocus.value.length == currentFocus.maxLength && asciiVal > 47 && asciiVal < 123) {
            nextFocus.focus();
        }
    }

function vn_update_date_from_inputs(input_element){
    month_value = $F(input_element+'m');
    date_value =  $F(input_element+'d') + '/' + month_value + '/' + $F(input_element+'y') ;
    $(input_element).value = date_value;
    return true;
}

function vn_update_inputs_from_date(input_element, date_value, fmt){
    var tmp = new Date(Date.parseDate(date_value, fmt));
    $(input_element+'d').value = tmp.getDate();
    if($(input_element+'m').options){
        $(input_element+'m').options[tmp.getMonth()].selected = true
    }else{
        $(input_element+'m').value = tmp.getMonth();
    }
    $(input_element+'y').value = tmp.getFullYear();
    return true;
}

function vn_update_start_and_finish_dates(start_date, finish_date, date_value, days, fmt)
{
    vn_update_inputs_from_date(start_date, date_value, fmt);
    increment_finish_date(days, fmt)

}
function increment_finish_date(days, fmt){
    //check for month rollovers.
    var tmp = new Date(Date.parseDate($('s').value, fmt));
    tmp.setDate(tmp.getDate()+parseInt(days));
    $('f').value = tmp.getDate()+'/'+(tmp.getMonth()+1)+'/'+tmp.getFullYear();
    vn_update_inputs_from_date('f', $('f').value, fmt);
}
function getURI() {
      var uri = location.href;
      if (uri.indexOf('?') != -1)  return uri.substring(0,uri.indexOf('?'));
      return uri;
}
function goToLocation(obj) {
  var form = obj;
  uri = '/location/';
  if (!form || !form.location_id) return;

  selected = form.location_id.selectedIndex;
  if (selected < 0) selected = 0;

  var lid = form.location_id[selected].value;
  if (lid < 1) return;
  location.href = uri;
  uri = uri.substring(0,uri.lastIndexOf('/')+1);
  document.location.href = uri+lid;
}

function rollover(id, image)
{
    $(id).src = image;
}

function imgHi(img) {
    if (img.src.indexOf('_hi.gif') < 0) {
        img.src = img.src.replace('.gif', '_hi.gif');
    }
}

function imgLo(img) {
    if (img.src.indexOf('_hi.gif') > 0) {
        img.src = img.src.replace('_hi.gif', '.gif');
    }
}
