// Modal Window Stuff
var winModalWindow;
var manager = new Object ();
var contextRoot = null;

function IgnoreEvents(e)
{
  return false;
}

function HandleFocus()
{
    if (winModalWindow)
    {
        if (!winModalWindow.closed)
        {
          winModalWindow.focus()
        }
        else
        {
          //window.top.releaseEvents (Event.CLICK|Event.FOCUS)
          window.top.onclick = ""
          window.top.onfocus=""
        }
    }

    return false
}

function ShowModalWindow(page, callback, width, height)
{
    //window.top.captureEvents (Event.CLICK|Event.FOCUS)
    window.top.onclick=IgnoreEvents
    window.top.onfocus=HandleFocus
    winModalWindow = window.open (page,"_blank", "dependent=yes,width=" + width + ",height=" + height + ",location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no")
    //winModalWindow.modalParent = this;
    manager.callBack = callback;
    winModalWindow.focus()
}

function devNull () {}



function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
} 

var allYUICalendars = {};
daySuffix = ["DAY", "Date"];
monthSuffix = ["MONTH", "Month"];
yearSuffix = ["YEAR", "Year"];


function initYUICalendar (name, suffixIndex)
{
    if (!suffixIndex)
    {
        suffixIndex = 0;
    }

    var theCalendar = new YAHOO.widget.Calendar(name, name + "CalendarContainer", {title:"Choose a date:", close:true} );

    theCalendar.render ();
    YAHOO.util.Event.addListener(name + "CalendarPicker", "click", theCalendar.show, theCalendar, true);
    theCalendar.selectEvent.subscribe(function (type,args,obj) {
            if (theCalendar.oneitInitialised)
            {
                handleYUICalendarSelect(type,args,obj, suffixIndex)
            }
        }, theCalendar, true);

    YAHOO.util.Event.addListener([name + daySuffix[suffixIndex], name + monthSuffix[suffixIndex], name + yearSuffix[suffixIndex]], "change", function () {updateYUICalendarFromFields (theCalendar, suffixIndex);});
    YAHOO.util.Event.onDOMReady (function () {
            updateYUICalendarFromFields(theCalendar);
            theCalendar.oneitInitialised = true;
        });
    allYUICalendars[name] = theCalendar;
    
    return theCalendar;
}


function handleYUICalendarSelect (type,args,obj, suffixIndex)
{
    if (!suffixIndex)
    {
        suffixIndex = 0;
    }

    var dates = args[0];
    var date = dates[0];

    $('#' + obj.id + daySuffix[suffixIndex]).val("" + date[2]);
    $('#' + obj.id + monthSuffix[suffixIndex]).val("" + date[1]);
    $('#' + obj.id + yearSuffix[suffixIndex]).val("" + date[0]);

    obj.hide ();
}


function updateYUICalendarFromFields (obj, suffixIndex)
{
    if (!suffixIndex)
    {
        suffixIndex = 0;
    }

    var selDay = $('#' + obj.id + daySuffix[suffixIndex]).val();
    var selMonth = $('#' + obj.id + monthSuffix[suffixIndex]).val();
    var selYear = $('#' + obj.id + yearSuffix[suffixIndex]).val();
    updateYUICalendarFromParts (obj, parseInt(selDay), parseInt(selMonth), parseInt(selYear));
}
    
    
function updateYUICalendarFromParts (obj, day, month, year)
{
    if (! isNaN(month) && ! isNaN(day) && ! isNaN(year)) 
    {
        var date = month + "/" + day + "/" + year;

        obj.select(date);
        obj.cfg.setProperty("pagedate", month + "/" + year);
        obj.render();
    }
}


function eachInitYUIDate(index, domElement)
{
    var dateTagID = domElement.id;
    var checker = $(domElement).find ("input");

    if (checker.length > 0)
    {
        var yuiPicker = "<img id='" + dateTagID + "CalendarPicker' src='" + (contextRoot != null ? contextRoot : ".") + "/images/caloff.gif' alt='Select Date'><div class='dateCalendarContainerHolder'><div class='dateCalendarContainer' id='" + dateTagID + "CalendarContainer'></div></div>";

        $("#" + dateTagID).after (yuiPicker);
        initYUICalendar (dateTagID, 0);
    }
}


function eachInitYUIDate2(index, domElement)
{
    var dateTagID = domElement.id;
    var checker = $(domElement).find ("input");

    if (checker.length > 0)
    {
        var yuiPicker = "<img id='" + dateTagID + "CalendarPicker' src='" + (contextRoot != null ? contextRoot : ".") + "/images/caloff.gif' alt='Select Date'><div class='dateCalendarContainerHolder'><div class='dateCalendarContainer' id='" + dateTagID + "CalendarContainer'></div></div>";

        $("#" + dateTagID).after (yuiPicker);
        initYUICalendar (dateTagID, 1);
    }
}


// This is an array of functions that take a jquery selector and modify it after the HTML has been dynamically added via AJAX
var     postAjaxAddHTMLModifiers = new Array ();


function addPostAjaxAddHTMLModifiers (theFunction)
{
    postAjaxAddHTMLModifiers.push(theFunction);
}


function callPostAjaxAddHTMLModifiers (htmlJQ)
{
    for (var x = 0 ; x < postAjaxAddHTMLModifiers.length ; ++x)
    {
        postAjaxAddHTMLModifiers[x](htmlJQ);
    }
}

function ajaxProcessAdd (page, selector, reqParams, processHTML)
{
    if (!processHTML)
    {
        processHTML = function (theHTML) {
                var htmlJQ = $(theHTML);

                $(toAddTo).append (htmlJQ);
                callPostAjaxAddHTMLModifiers (htmlJQ);
            };
    }

    var     toAddTo = $(selector);
    var     aForm = toAddTo.parents('form');

    reqParams['proc.ID'] = aForm.find("input[name = 'proc.ID']").val();
    reqParams['proc.stage'] = aForm.find("input[name = 'proc.stage']").val ();
    reqParams['oneit.process.readonly'] = 'true';
    reqParams['oneit.forceFormName'] = aForm.attr('name');

    $.getJSON (page, reqParams, function (data)
            {
                var     theHTML = data.html;
                var     procStage = data.stage;

                processHTML (theHTML, data);
                aForm.find("input[name = 'proc.stage']").val (procStage);
            });
}


function ajaxProcessAddJQ (page, selector, reqParams, insertHTML_JQ)
{
    if (!insertHTML_JQ)
    {
        insertHTML_JQ = function (theHTML_JQ) {
                $(toAddTo).append (theHTML_JQ);
            };
    }

    var     toAddTo = $(selector);
    var     aForm = toAddTo.parents('form');

    reqParams['proc.ID'] = aForm.find("input[name = 'proc.ID']").val();
    reqParams['proc.stage'] = aForm.find("input[name = 'proc.stage']").val ();
    reqParams['oneit.process.readonly'] = 'true';
    reqParams['oneit.forceFormName'] = aForm.attr('name');

    $.getJSON (page, reqParams, function (data)
            {
                var     theHTML = data.html;
                var     theHTML_JQ = $(theHTML);
                var     procStage = data.stage;
                var     jqExtractor = data.jqExtractor;

                if (jqExtractor != null)
                {
                    theHTML_JQ = theHTML_JQ.find (jqExtractor);
                }

                insertHTML_JQ (theHTML_JQ);
                callPostAjaxAddHTMLModifiers (theHTML_JQ);
                aForm.find("input[name = 'proc.stage']").val (procStage);
            });
}

if (window.YAHOO)
{
    YAHOO.util.Event.onDOMReady (function () {
            $(".yui-date").each (eachInitYUIDate);
            $(".yui-date2").each (eachInitYUIDate2);

            addPostAjaxAddHTMLModifiers (function (htmlJQ) {htmlJQ.find (".yui-date").each (eachInitYUIDate);});
            
            if (jQuery.tablesorter)
            {
                addPostAjaxAddHTMLModifiers (function (htmlJQ) {htmlJQ.find (".tablesorter").tablesorter();});
            }
        });
}

