function log(msg) {
  try { console.log(msg); } catch (e) {}
}

function log_error(msg) {
  try { console.error(msg); } catch (e) {}
}

function log_info(msg) {
  try { console.info(msg); } catch (e) {}
}

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
      }
    }
}

function export_to_spread (grid,store,type)
{
	var json = ''; var headers = '';
    for(var x in grid.colModel.lookup)
    {
		//grab header names and status (whether hidden or not) and place in delimited format
    	headers += grid.colModel.lookup[x].header + '::' + grid.colModel.lookup[x].hidden + '||';
    }
    for(var x in store.data.items)
    {
		//encode the visible rows in a json_string
    	json += Ext.encode(store.data.items[x].data) + '||';
    } 

    var form = document.createElement("form");
    form.method = "POST";
    form.action = get_base_path()+'excel.php';
    form.target = "_blank";
    
    var input = document.createElement('input');
    input.type="hidden"; input.name="headers"; input.value = headers;
    form.appendChild(input);
    var input = document.createElement('input');
    input.type="hidden"; input.name="html"; input.value = json;
    form.appendChild(input);
    var input = document.createElement('input');
    input.type="hidden"; input.name="type"; input.value = type;
    form.appendChild(input);
    document.body.appendChild(form);

    form.submit();
}

function htmlDecode(input){
  var e = document.createElement('div');
  e.innerHTML = input;
  return e.childNodes[0].nodeValue;
}

function parseDate(isoDate) {
    var parts = isoDate.split(" ");
    var parsed = null;
    if (parts.length == 2) {
        var date = parts[0];
        var time = parts[1];
        var dateParts = date.split("-");
        var timeParts = time.split(":");
        parsed = new Date(dateParts[0], dateParts[1] - 1, dateParts[2], timeParts[0], timeParts[1], timeParts[2]);
    }
    return parsed;
}

function dynamicallyLoadCSS(cssURL) {
    if (document.createStyleSheet) {
        try { document.createStyleSheet(cssURL); } catch (e) {}
    } else {
        var css;
        css        = document.createElement('link');
        css.rel    = 'stylesheet';
        css.type   = 'text/css';
        css.media  = "all";
        css.href   = cssURL;
        document.getElementsByTagName("head")[0].appendChild(css);
    }
}

function saveCloseAction(announcement_id) {
    log("In saveCloseAction: " + announcement_id);
    var domain = document.domain;
    var cookieDomain = domain;

    var domainParts = domain.split(".");
    if (domainParts.length >= 2 ) {
        cookieDomain = "." + (domainParts.splice(-2, 2)).join(".");
    }
    log("Cookie domain: " + cookieDomain);
    $.cookie('ann:'+announcement_id, 'ack', { expires: 90, path: '/', domain: cookieDomain, secure: false });
}

function showOverlay(announcement_id) {
    $("#ann_overlay").overlay({
        top: 260,
        mask: {
            color: '#fff',
            loadSpeed: 500,
            opacity: 0.5
        },
        closeOnClick: false,
        closeOnEsc: false,
        load: true,
        onBeforeClose: function() { saveCloseAction(announcement_id) }
    });
}

function overlayAnnouncement(msgData) {
    var announcement_id = msgData.id;
    var begin_timestamp = msgData.begin_time;
    var end_timestamp = msgData.end_time;
    var announcementTitle = msgData.title;
    var message = msgData.message;

    // Get the dates so we can do comparisons.
    var now = new Date();
    var begin = parseDate(begin_timestamp);
    var end = parseDate(end_timestamp);

    // Check if we are in the announcement period.
    if ((now > begin) && (now < end)) {
        var randomNumber = Math.floor(Math.random()*1001);
        dynamicallyLoadCSS(get_base_path() + "css/admin-announcement.css"+"?"+randomNumber );

        // Get the HTML template, add it to the DOM, and manipulate the entries.
        $.get(get_base_path() + "ajax/admin-announcement.html"+"?"+randomNumber, function(data) {
            $("body").append(data);

            avatarSrc = get_base_path() + $("#avatar").attr("src");
            $("#avatar").attr('src', avatarSrc);

            $("#ann_title").html(announcementTitle);
            $("#ann_message").html(htmlDecode(message));
            $.getScript(get_base_path() + "js/jquery.tools.min.js"+"?"+randomNumber, function() {
                showOverlay(announcement_id);
            });
        });
    } else {
        log("Outside announcement period.");
    }
}

function checkForAnnouncement() {
    try {
        var randomNumber=Math.floor(Math.random()*1001);
        $.getJSON(get_base_path() + "ajax/admin-announcement.json"+"?"+randomNumber, function(data) {
            log("announcement.json exists!");
            $.getScript(get_base_path() + "js/jquery.cookie.js"+"?"+randomNumber, function() {
                var cookieValue = $.cookie("ann:"+data.id);
                if (cookieValue != "ack") {
                    overlayAnnouncement(data);
                } else {
                    log_info("User already acknowledged this announcement.");
                }
            });
        });
    } catch (e) {
        log_error(e);
    }
}

function get_base_path () {
    var filename = 'js/hmpdacc_base.js';
    var scriptPath = $('script[src$="'+filename+'"]').attr('src');
    var base = scriptPath.substring(0, scriptPath.lastIndexOf(filename));
    return base;
}

addLoadEvent(checkForAnnouncement);

